comedilib-0.11.0/0000755000000000000000000000000013162722665010501 500000000000000comedilib-0.11.0/Makefile.am0000644000000000000000000000243112416542105012443 00000000000000 SUBDIRS = lib comedi_config man testing demo comedi_board_info doc swig \ include etc scxi c++ pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = comedilib.pc ## with automake 1.8, putting the m4 directory in EXTRA_DIST is not needed, and ## causes 'make distcheck' to fail, by way of 'make distdir' failing when builddir != srcdir ## and srcdir is read-only. EXTRA_DIST = comedilib.spec autogen.sh perl ACLOCAL_AMFLAGS = -I m4 ## ruby binding is excluded from distcheck because setup.rb doesn't support uninstall DISTCHECK_CONFIGURE_FLAGS = RUBY_PREFIX='$${prefix}' --disable-ruby-binding ## create the calibrations directory during installation install-data-local: $(MKDIR_P) "$(DESTDIR)$(localstatedir)/lib/comedi/calibrations" dist-hook: @if test -d "$(srcdir)/.git"; \ then \ echo Creating ChangeLog && \ ( cd "$(top_srcdir)" && \ echo '# Generated by Makefile. Do not edit.'; echo; \ $(top_srcdir)/missing --run \ git log --stat --name-only --date=iso ) \ > ChangeLog.tmp \ && mv -f ChangeLog.tmp $(distdir)/ChangeLog \ || ( rm -f ChangeLog.tmp ; \ echo Failed to generate ChangeLog >&2 ); \ else \ echo A git clone is required to generate a ChangeLog >&2; \ fi dev: -for i in `seq 0 15`; do \ mknod -m 666 /dev/comedi$$i c 98 $$i \ ; \ done; comedilib-0.11.0/man/0000755000000000000000000000000013162722663011252 500000000000000comedilib-0.11.0/man/Makefile.am0000644000000000000000000000012412416542105013213 00000000000000 man_MANS = comedi_board_info.1 comedi.7 comedi_config.8 EXTRA_DIST = $(man_MANS) comedilib-0.11.0/man/comedi_config.80000644000000000000000000000771413076426033014055 00000000000000.TH comedi_config 8 "" .SH NAME comedi_config \- COMEDI configuration utility .SH SYNOPSIS .B comedi_config [\fI\,OPTION\/\fR]... /dev/comedi\fIN\fR \fI\,driver\/\fR [\fI\,param1\/\fR[,\fI\,param2\/\fR]...] .br .B comedi_config [\fI\,OPTION\/\fR]... -r /dev/comedi\fIN\fR .br .SH DESCRIPTION \fBcomedi_config\fR is used to configure \fBcomedi\fR drivers. You must have \fBcomedi\fR support compiled into your kernel or loaded as a separate module in order to use this utility. Each control and measurement device is associated with a particular \fBcomedi\fR device file \fB/dev/comedi\fRN, where N is 0,1,2,3, etc. \fBcomedi_config\fR allows you to associate a particular driver and device with a \fBcomedi\fR device file, and also configure driver parameters for the particular device. \fBcomedi_config\fR can be used with optional parameters which are driver dependent. Parameters are specified by comma-delimited list of integers. The integers may be expressed as decimal, hexidecimal (starting with 0x) or octal (stating with 0). In addition, a parameter may be left blank, indicating 0. PCI-based devices typically require no parameters, although some allow you to specify the bus and slot of the card to configure as the first two parameters. ISA-based devices typically use the first and second parameters to indicate I/O base address and interrupt level. More information about the parameters required by individual drivers can be found in the \fBcomedi\fR documentation, in the file \fBdrivers.txt\fR, and in the .UR http://www.comedi.org/doc/lowleveldrivers.html Kernel drivers .UE section of the .UR http://www.comedi.org/doc/index.html \fBComedilib\fR manual .UE . .SH OPTIONS \fBcomedi_config\fR recognizes the following options: .TP \fB\-q\fR, \fB\-\-quiet\fR Don't print output while running. .TP \fB\-v\fR, \fB\-\-verbose\fR Print verbose output while running. .TP \fB\-V\fR, \fB\-\-version\fR Print version number and exit. .TP \fB\-r\fR, \fB\-\-remove\fR Remove (unconfigure) previously configured device. .TP \fB\-\-read-buffer\fR \fIsize\fR Set read buffer size to .I size kilobytes. The default size is 64k. .TP \fB\-\-write-buffer\fR \fIsize\fR Set write buffer size to .I size kilobytes. The default size is 64k. .TP \fB\-\-subdevice-buffer\fR \fInum\/\fR,\,\fIsize\/\fR[,\,\fInum\/\fR,\,\fIsize\/\fR]... Set subdevice .I num buffer size to .I size kilobytes. More than one \fInum\fR,\fIsize\fR pair may be specified, and the option may be used several times. .TP \fB\-i\fR, \fB\-\-init-data\fR, \fB\-\-init-data0\fR \fIfile\fR Upload initialization data (typically firmware) from .I file to board. .TP \fB\-\-init-data1\fR \fIfile\fR .TP \fB\-\-init-data2\fR \fIfile\fR .TP \fB\-\-init-data3\fR \fIfile\fR Some drivers require more than one file for initialization data. Use these options to specify additional initialization data files. See the driver-specific documentation for further details. .SH CONFIGURATION FILE [This section has not been implemented yet.] A list of device configurations can be put into the file \fB/etc/comedi.conf\fR. This file takes the form: .EX ,,... .EE These configurations will be read and performed when the switch \fB-a\fR is used. This is potentially useful when run from an initialization script. .SH EXAMPLES A National Instruments PCI-MIO E series board can be configured to use /dev/comedi0 using the command: .EX comedi_config /dev/comedi0 ni_pcimio .EE A National Instruments AT-MIO E series board can be configured to use /dev/comedi3 using the command: .EX comedi_config /dev/comedi3 ni_atmio 0x220,3 .EE This tells the driver that the board is configured for I/O base 0x220 and IRQ 3. .SH ADDITIONAL INFORMATION Additional documentation may be found in the .UR http://www.comedi.org/doc/install.html Configuration section .UE of the .UR http://www.comedi.org/doc/index.html \fBComedilib\fR manual .UE . .SH SEE ALSO \fBcomedi\fR(7) .SH VERSION 0.11.x .SH AUTHOR .MT ds@schleef.org David Schleef .ME comedilib-0.11.0/man/comedi_board_info.10000644000000000000000000000270612416542105014673 00000000000000.TH COMEDI_BOARD_INFO "1" "May 2012" "comedi_board_info" "User Commands" .SH NAME comedi_board_info \- reports useful information about COMEDI devices .SH SYNOPSIS .B comedi_board_info [\fIOPTIONS\fR] COMEDI_DEVICE .SH DESCRIPTION This program reads information about a comedi device and displays it in a human-readable form. It also probes the asynchronous acquisition by calling the function probe_cmd_generic_timed which provides information about the maximum sampling rate of the board and how the card acquires multiple channels (e.g. at once or one by one). .TP \-n NUMBER_OF_CHANNELS Requests the number of channels for the asynchronous acquisition. This might influence the maximum sampling rate and the mode how the comedi device samples the channels. If the number is higher than the available channels this will be corrected downwards to the number of available channels. .TP \-F SAMPLING_RATE Requests a sampling rate for the asynchronous acquisition. By default this is set to comedi's highest sampling rate (1GHz) so that the driver is forced to reduce it and will return the maximum possible sampling rate. This option is only provided for driver testing and for drivers which do not return the highest sampling rate. .TP \-v Verbose output. .TP \-h Shows a brief help screen. .SH "SEE ALSO" More documentation can be found on http://www.comedi.org/ .SH AUTHOR comedi_board_info was written by David Schleef and Bernd Porr . comedilib-0.11.0/man/Makefile.in0000644000000000000000000004722713140064520013236 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = man ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/am-check-python-headers.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/as-libtool.m4 $(top_srcdir)/m4/ax_tls.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man7dir)" \ "$(DESTDIR)$(man8dir)" man7dir = $(mandir)/man7 man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COMEDILIB_AGE = @COMEDILIB_AGE@ COMEDILIB_CFLAGS = @COMEDILIB_CFLAGS@ COMEDILIB_CURRENT = @COMEDILIB_CURRENT@ COMEDILIB_LIBS = @COMEDILIB_LIBS@ COMEDILIB_LIBVERSION = @COMEDILIB_LIBVERSION@ COMEDILIB_LT_LDFLAGS = @COMEDILIB_LT_LDFLAGS@ COMEDILIB_REVISION = @COMEDILIB_REVISION@ COMEDILIB_VERSION_MAJOR = @COMEDILIB_VERSION_MAJOR@ COMEDILIB_VERSION_MICRO = @COMEDILIB_VERSION_MICRO@ COMEDILIB_VERSION_MINOR = @COMEDILIB_VERSION_MINOR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_BACKEND = @PDF_BACKEND@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_QUIET = @PYTHON_QUIET@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_CONFIG_OPTIONS = @RUBY_CONFIG_OPTIONS@ RUBY_PREFIX = @RUBY_PREFIX@ RUBY_SO_DIR = @RUBY_SO_DIR@ SCXI_SO_VERSION = @SCXI_SO_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ VERSION = @VERSION@ XMLTO = @XMLTO@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pcmciadir = @pcmciadir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ udevfirmwaredir = @udevfirmwaredir@ udevrulesdir = @udevrulesdir@ udevscriptsdir = @udevscriptsdir@ man_MANS = comedi_board_info.1 comedi.7 comedi_config.8 EXTRA_DIST = $(man_MANS) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu man/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu man/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) install-man7: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man7dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man7dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man7dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.7[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^7][0-9a-z]*$$,7,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man7dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man7dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man7dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man7dir)" || exit $$?; }; \ done; } uninstall-man7: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man7dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.7[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^7][0-9a-z]*$$,7,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man7dir)'; $(am__uninstall_files_from_dir) install-man8: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man8dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.8[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(MANS) installdirs: for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man7dir)" "$(DESTDIR)$(man8dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-man7 install-man8 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-man: uninstall-man1 uninstall-man7 uninstall-man8 .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-man1 install-man7 install-man8 install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-man uninstall-man1 uninstall-man7 \ uninstall-man8 .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: comedilib-0.11.0/man/comedi.70000644000000000000000000000173213076426033012521 00000000000000.TH comedi 7 "" .SH NAME comedi \- the Linux Control and Measurement Device Interface .SH SYNOPSIS \fB#include \fR .br \fB#include \fR .br .SH DESCRIPTION The \fBcomedi\fR package is a collection of hardware drivers, and the \fBcomedilib\fR package is a collection of library routines that can be used to communicate with a variety of data acquisition boards, including A/D converters, D/A converters, digital I/O and timers. .br .SH OTHER DOCUMENTATION Hardware and driver configuration, and device-specific information, can be found in the \fBcomedi\fR source, in the file \fBDocumentation/comedi/drivers.txt\fR, or in the \fBcomedilib\fR source, in the file \fBdoc/drivers.txt\fR. .br Programming documentation for \fBcomedilib\fR can be found in the .UR http://www.comedi.org/doc/index.html \fBComedilib\fR manual .UE . .SH SEE ALSO \fBcomedi_config\fR(8), \fBcomedi_calibrate\fR(8) .SH VERSION 0.7.x .SH AUTHOR .MT ds@schleef.org David Schleef .ME comedilib-0.11.0/configure0000755000000000000000000173423713140064517012340 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for comedilib 0.11.0. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='comedilib' PACKAGE_TARNAME='comedilib' PACKAGE_VERSION='0.11.0' PACKAGE_STRING='comedilib 0.11.0' PACKAGE_BUGREPORT='' PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS udevfirmwaredir udevscriptsdir udevrulesdir INSTALL_UDEVHOTPLUG_FALSE INSTALL_UDEVHOTPLUG_TRUE pcmciadir BUILD_PDF_USING_FOP_FALSE BUILD_PDF_USING_FOP_TRUE BUILD_PDF_USING_DBLATEX_FALSE BUILD_PDF_USING_DBLATEX_TRUE BUILD_PDF_FALSE BUILD_PDF_TRUE HAVE_XMLTO_FALSE HAVE_XMLTO_TRUE PDF_BACKEND XMLTO BUILD_SCXI_FALSE BUILD_SCXI_TRUE RUBY_CONFIG_OPTIONS RUBY_SO_DIR RUBY_PREFIX HAVE_RUBY_FALSE HAVE_RUBY_TRUE RUBY PYTHON_QUIET HAVE_PYTHON_FALSE HAVE_PYTHON_TRUE PYTHON_INCLUDES pkgpyexecdir pyexecdir pkgpythondir pythondir PYTHON_PLATFORM PYTHON_EXEC_PREFIX PYTHON_PREFIX PYTHON_VERSION PYTHON SWIG COMEDILIB_LIBS COMEDILIB_CFLAGS SCXI_SO_VERSION COMEDILIB_LT_LDFLAGS COMEDILIB_LIBVERSION COMEDILIB_AGE COMEDILIB_REVISION COMEDILIB_CURRENT CPP LT_SYS_LIBRARY_PATH OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB DLLTOOL OBJDUMP LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED LIBTOOL YFLAGS YACC LEXLIB LEX_OUTPUT_ROOT LEX am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC ac_ct_AR AR MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM COMEDILIB_VERSION_MICRO COMEDILIB_VERSION_MINOR COMEDILIB_VERSION_MAJOR target_os target_vendor target_cpu target host_os host_vendor host_cpu host build_os build_vendor build_cpu build target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_maintainer_mode enable_dependency_tracking enable_shared enable_static with_pic enable_fast_install with_aix_soname with_gnu_ld with_sysroot enable_libtool_lock enable_python_binding enable_ruby_binding enable_scxi enable_docbook with_pdf_backend enable_firmware with_udev_hotplug ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS YACC YFLAGS LT_SYS_LIBRARY_PATH CPP PYTHON RUBY_PREFIX RUBY_SO_DIR' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures comedilib 0.11.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/comedilib] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] --target=TARGET configure for building compilers for TARGET [HOST] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of comedilib 0.11.0:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --disable-maintainer-mode disable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --disable-python-binding Disable building of Python binding --enable-ruby-binding Enable building of Ruby binding --enable-scxi Enable SCXI convenience library --disable-docbook Disable docbook --disable-firmware Disable installation of firmware files Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-aix-soname=aix|svr4|both shared library versioning (aka "SONAME") variant to provide on AIX, [default=aix]. --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-pdf-backend=[yes|no|dblatex|fop|default] Enable or disable PDF generation with backend --with-udev-hotplug=[/lib] enable udev hotplug Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory YACC The `Yet Another Compiler Compiler' implementation to use. Defaults to the first program found out of: `bison -y', `byacc', `yacc'. YFLAGS The list of arguments that will be passed by default to $YACC. This script will default YFLAGS to the empty string to avoid a default value of `-d' given by some make applications. LT_SYS_LIBRARY_PATH User-defined run-time library search path. CPP C preprocessor PYTHON the Python interpreter RUBY_PREFIX path prefix for Ruby binding RUBY_SO_DIR path for Ruby extensions Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF comedilib configure 0.11.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by comedilib $as_me 0.11.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 $as_echo_n "checking target system type... " >&6; } if ${ac_cv_target+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$target_alias" = x; then ac_cv_target=$ac_cv_host else ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 $as_echo "$ac_cv_target" >&6; } case $ac_cv_target in *-*-*) ;; *) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; esac target=$ac_cv_target ac_save_IFS=$IFS; IFS='-' set x $ac_cv_target shift target_cpu=$1 target_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: target_os=$* IFS=$ac_save_IFS case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac # The aliases save the names the user supplied, while $host etc. # will get canonicalized. test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- COMEDILIB_VERSION_MAJOR=0 COMEDILIB_VERSION_MINOR=11 COMEDILIB_VERSION_MICRO=0 ac_aux_dir= for ac_dir in . "$srcdir"/.; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in . \"$srcdir\"/." "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. #COMEDILIB_DEBUG="-Wall -Werror" COMEDILIB_DEBUG="-Wall" am__api_version='1.15' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='comedilib' VERSION='0.11.0' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi ac_config_headers="$ac_config_headers config.h" ACLOCAL="$ACLOCAL -I m4" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 $as_echo "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi if test -n "$ac_tool_prefix"; then for ac_prog in ar lib "link -lib" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar lib "link -lib" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} { $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5 $as_echo_n "checking the archiver ($AR) interface... " >&6; } if ${am_cv_ar_interface+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am_cv_ar_interface=ar cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int some_variable = 0; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=ar else am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=lib else am_cv_ar_interface=unknown fi fi rm -f conftest.lib libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5 $as_echo "$am_cv_ar_interface" >&6; } case $am_cv_ar_interface in ar) ;; lib) # Microsoft lib, so override with the ar-lib wrapper script. # FIXME: It is wrong to rewrite AR. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__AR in this case, # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something # similar. AR="$am_aux_dir/ar-lib $AR" ;; unknown) as_fn_error $? "could not determine $AR interface" "$LINENO" 5 ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi case $ac_cv_prog_cc_stdc in #( no) : ac_cv_prog_cc_c99=no; ac_cv_prog_cc_c89=no ;; #( *) : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 $as_echo_n "checking for $CC option to accept ISO C99... " >&6; } if ${ac_cv_prog_cc_c99+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include // Check varargs macros. These examples are taken from C99 6.10.3.5. #define debug(...) fprintf (stderr, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK your preprocessor is broken; #endif #if BIG_OK #else your preprocessor is broken; #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\0'; ++i) continue; return 0; } // Check varargs and va_copy. static void test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str; int number; float fnumber; while (*format) { switch (*format++) { case 's': // string str = va_arg (args_copy, const char *); break; case 'd': // int number = va_arg (args_copy, int); break; case 'f': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); } int main () { // Check bool. _Bool success = false; // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. test_varargs ("s, d' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' || dynamic_array[ni.number - 1] != 543); ; return 0; } _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c99" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c99" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 $as_echo "$ac_cv_prog_cc_c99" >&6; } ;; esac if test "x$ac_cv_prog_cc_c99" != xno; then : ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 else ac_cv_prog_cc_stdc=no fi fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO Standard C" >&5 $as_echo_n "checking for $CC option to accept ISO Standard C... " >&6; } if ${ac_cv_prog_cc_stdc+:} false; then : $as_echo_n "(cached) " >&6 fi case $ac_cv_prog_cc_stdc in #( no) : { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; #( '') : { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; #( *) : { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_stdc" >&5 $as_echo "$ac_cv_prog_cc_stdc" >&6; } ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5 $as_echo_n "checking for library containing strerror... " >&6; } if ${ac_cv_search_strerror+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char strerror (); int main () { return strerror (); ; return 0; } _ACEOF for ac_lib in '' cposix; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_strerror=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_strerror+:} false; then : break fi done if ${ac_cv_search_strerror+:} false; then : else ac_cv_search_strerror=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 $as_echo "$ac_cv_search_strerror" >&6; } ac_res=$ac_cv_search_strerror if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi for ac_prog in flex lex do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LEX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LEX"; then ac_cv_prog_LEX="$LEX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LEX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LEX=$ac_cv_prog_LEX if test -n "$LEX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LEX" >&5 $as_echo "$LEX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$LEX" && break done test -n "$LEX" || LEX=":" if test "x$LEX" != "x:"; then cat >conftest.l <<_ACEOF %% a { ECHO; } b { REJECT; } c { yymore (); } d { yyless (1); } e { /* IRIX 6.5 flex 2.5.4 underquotes its yyless argument. */ yyless ((input () != 0)); } f { unput (yytext[0]); } . { BEGIN INITIAL; } %% #ifdef YYTEXT_POINTER extern char *yytext; #endif int main (void) { return ! yylex () + ! yywrap (); } _ACEOF { { ac_try="$LEX conftest.l" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$LEX conftest.l") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex output file root" >&5 $as_echo_n "checking lex output file root... " >&6; } if ${ac_cv_prog_lex_root+:} false; then : $as_echo_n "(cached) " >&6 else if test -f lex.yy.c; then ac_cv_prog_lex_root=lex.yy elif test -f lexyy.c; then ac_cv_prog_lex_root=lexyy else as_fn_error $? "cannot find output from $LEX; giving up" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_root" >&5 $as_echo "$ac_cv_prog_lex_root" >&6; } LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root if test -z "${LEXLIB+set}"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex library" >&5 $as_echo_n "checking lex library... " >&6; } if ${ac_cv_lib_lex+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_LIBS=$LIBS ac_cv_lib_lex='none needed' for ac_lib in '' -lfl -ll; do LIBS="$ac_lib $ac_save_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ `cat $LEX_OUTPUT_ROOT.c` _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_lex=$ac_lib fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext test "$ac_cv_lib_lex" != 'none needed' && break done LIBS=$ac_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lex" >&5 $as_echo "$ac_cv_lib_lex" >&6; } test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether yytext is a pointer" >&5 $as_echo_n "checking whether yytext is a pointer... " >&6; } if ${ac_cv_prog_lex_yytext_pointer+:} false; then : $as_echo_n "(cached) " >&6 else # POSIX says lex can declare yytext either as a pointer or an array; the # default is implementation-dependent. Figure out which it is, since # not all implementations provide the %pointer and %array declarations. ac_cv_prog_lex_yytext_pointer=no ac_save_LIBS=$LIBS LIBS="$LEXLIB $ac_save_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define YYTEXT_POINTER 1 `cat $LEX_OUTPUT_ROOT.c` _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_prog_lex_yytext_pointer=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_yytext_pointer" >&5 $as_echo "$ac_cv_prog_lex_yytext_pointer" >&6; } if test $ac_cv_prog_lex_yytext_pointer = yes; then $as_echo "#define YYTEXT_POINTER 1" >>confdefs.h fi rm -f conftest.l $LEX_OUTPUT_ROOT.c fi if test "$LEX" = :; then LEX=${am_missing_run}flex fi for ac_prog in 'bison -y' byacc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_YACC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$YACC"; then ac_cv_prog_YACC="$YACC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_YACC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi YACC=$ac_cv_prog_YACC if test -n "$YACC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5 $as_echo "$YACC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$YACC" && break done test -n "$YACC" || YACC="yacc" case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.6' macro_revision='2.4.6' ltmain=$ac_aux_dir/ltmain.sh # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case $ECHO in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n "$lt_cv_sys_max_cmd_len"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test yes != "$GCC"; then reload_cmds=false fi ;; darwin*) if test yes = "$GCC"; then reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 $as_echo "$with_sysroot" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 $as_echo_n "checking for a working dd... " >&6; } if ${ac_cv_path_lt_DD+:} false; then : $as_echo_n "(cached) " >&6 else printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} if test -z "$lt_DD"; then ac_path_lt_DD_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in dd; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_lt_DD" || continue if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi $ac_path_lt_DD_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_lt_DD"; then : fi else ac_cv_path_lt_DD=$lt_DD fi rm -f conftest.i conftest2.i conftest.out fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 $as_echo "$ac_cv_path_lt_DD" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 $as_echo_n "checking how to truncate binary pipes... " >&6; } if ${lt_cv_truncate_bin+:} false; then : $as_echo_n "(cached) " >&6 else printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 $as_echo "$lt_cv_truncate_bin" >&6; } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test no = "$enable_libtool_lock" || 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 what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test yes = "$lt_cv_prog_gnu_ld"; 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* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then emul=elf case `/usr/bin/file conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `/usr/bin/file conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `/usr/bin/file conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*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-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; 10.[012][,.]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done # Set options enable_dlopen=no enable_win32_dll=no # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac else pic_mode=default fi # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac else enable_fast_install=yes fi shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[5-9]*,yes) { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 $as_echo_n "checking which variant of shared library versioning to provide... " >&6; } # Check whether --with-aix-soname was given. if test "${with_aix_soname+set}" = set; then : withval=$with_aix_soname; case $withval in aix|svr4|both) ;; *) as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 ;; esac lt_cv_with_aix_soname=$with_aix_soname else if ${lt_cv_with_aix_soname+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_with_aix_soname=aix fi with_aix_soname=$lt_cv_with_aix_soname fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 $as_echo "$with_aix_soname" >&6; } if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o func_cc_basename $compiler cc_basename=$func_cc_basename_result # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/${ac_tool_prefix}file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC=$CC ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test yes = "$GCC"; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test yes = "$GCC"; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi lt_prog_compiler_pic='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works"; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test yes = "$lt_cv_prog_compiler_static_works"; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test no = "$hard_links"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd* | bitrig*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) link_all_deplibs=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' export_dynamic_flag_spec='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='$wl--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' link_all_deplibs=yes ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-rpath,$libdir' export_dynamic_flag_spec='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) export_dynamic_flag_spec='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test no = "$ld_shlibs"; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test ia64 = "$host_cpu"; 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 GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX 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") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | 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 # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. hardcode_direct=no hardcode_direct_absolute=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; 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 yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi export_dynamic_flag_spec='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' $wl-bernotok' allow_undefined_flag=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test yes = "$lt_cv_ld_force_load"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test yes = "$GCC"; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$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 "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test yes = "$lt_cv_prog_compiler__b"; then archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi link_all_deplibs=no else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler ld_shlibs=yes archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='$wl-rpath,$libdir' export_dynamic_flag_spec='$wl-E' else archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='$wl-rpath,$libdir' fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes ;; osf3*) if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test yes = "$GCC"; then wlarc='$wl' archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='$wl-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='$wl-z,text' allow_undefined_flag='$wl-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='$wl-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test no = "$ld_shlibs" && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test yes,yes = "$GCC,$enable_shared"; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([A-Za-z]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; 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 # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # 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' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a(lib.so.V)' # 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' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # 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 dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. hardcode_libdir_flag_spec='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi 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 shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test yes = "$hardcode_automatic"; then # We can hardcode non-existent directories. if test no != "$hardcode_direct" && # 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 no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && test no != "$hardcode_minus_L"; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test relink = "$hardcode_action" || test yes = "$inherit_rpath"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen=shl_load else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen=dlopen else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld fi fi fi fi fi fi ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test yes = "$cross_compiling"; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test yes = "$cross_compiling"; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report what library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test no = "$can_build_shared" && 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 yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC=$lt_save_CC ac_config_commands="$ac_config_commands libtool" # Only expand once: { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for thread local storage (TLS) class" >&5 $as_echo_n "checking for thread local storage (TLS) class... " >&6; } if ${ac_cv_tls+:} false; then : $as_echo_n "(cached) " >&6 else ax_tls_keywords="__thread __declspec(thread) none" for ax_tls_keyword in $ax_tls_keywords; do case $ax_tls_keyword in none) ac_cv_tls=none ; break ;; *) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include static void foo(void) { static $ax_tls_keyword int bar; exit(1); } int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_tls=$ax_tls_keyword ; break else ac_cv_tls=none fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext esac done fi if test "$ac_cv_tls" != "none"; then cat >>confdefs.h <<_ACEOF #define TLS $ac_cv_tls _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_tls" >&5 $as_echo "$ac_cv_tls" >&6; } # AS_LIBTOOL arguments are (prefix, current, revision, age) COMEDILIB_CURRENT=11 COMEDILIB_REVISION=0 COMEDILIB_AGE=11 COMEDILIB_LIBVERSION=11:0:11 COMEDILIB_LT_LDFLAGS="$COMEDILIB_LT_LDFLAGS -version-info $COMEDILIB_LIBVERSION" if test ! -z "" then COMEDILIB_LT_LDFLAGS="$COMEDILIB_LT_LDFLAGS -release $COMEDILIB_VERSION" fi enable_dlopen=yes SCXI_SO_VERSION=9:0:9 COMEDILIB_CFLAGS="$COMEDILIB_CFLAGS -I\$(top_srcdir)/include -I\$(top_builddir)/include $COMEDILIB_DEBUG" COMEDILIB_LIBS="$COMEDILIB_LIBS \$(top_builddir)/lib/libcomedi.la -lm" # autoconf backwards compatibility if test "$datarootdir" = ""; then datarootdir='${datadir}' fi if test "$docdir" = ""; then docdir='${datarootdir}/doc/${PACKAGE}' fi if test "$htmldir" = ""; then htmldir='${docdir}' fi if test "$pdfdir" = ""; then pdfdir='${docdir}' fi #swig # Extract the first word of "swig", so it can be a program name with args. set dummy swig; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_SWIG+:} false; then : $as_echo_n "(cached) " >&6 else case $SWIG in [\\/]* | ?:[\\/]*) ac_cv_path_SWIG="$SWIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_SWIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_SWIG" && ac_cv_path_SWIG=""no"" ;; esac fi SWIG=$ac_cv_path_SWIG if test -n "$SWIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SWIG" >&5 $as_echo "$SWIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$SWIG" == "no" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: swig not found, will not be able to build swig based bindings" >&5 $as_echo "$as_me: WARNING: swig not found, will not be able to build swig based bindings" >&2;} fi #python # Check whether --enable-python-binding was given. if test "${enable_python_binding+set}" = set; then : enableval=$enable_python_binding; ENABLE_PYTHON=$enableval else ENABLE_PYTHON="yes" fi if test "$ENABLE_PYTHON" == "yes" && test "$SWIG" != "no"; then # Find any Python interpreter. if test -z "$PYTHON"; then for ac_prog in python python2 python3 python3.5 python3.4 python3.3 python3.2 python3.1 python3.0 python2.7 python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PYTHON+:} false; then : $as_echo_n "(cached) " >&6 else case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PYTHON=$ac_cv_path_PYTHON if test -n "$PYTHON"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 $as_echo "$PYTHON" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$PYTHON" && break done test -n "$PYTHON" || PYTHON=":" fi am_display_PYTHON=python if test "$PYTHON" = :; then as_fn_error $? "no suitable Python interpreter found" "$LINENO" 5 else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON version" >&5 $as_echo_n "checking for $am_display_PYTHON version... " >&6; } if ${am_cv_python_version+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 $as_echo "$am_cv_python_version" >&6; } PYTHON_VERSION=$am_cv_python_version PYTHON_PREFIX='${prefix}' PYTHON_EXEC_PREFIX='${exec_prefix}' { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON platform" >&5 $as_echo_n "checking for $am_display_PYTHON platform... " >&6; } if ${am_cv_python_platform+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_platform" >&5 $as_echo "$am_cv_python_platform" >&6; } PYTHON_PLATFORM=$am_cv_python_platform # Just factor out some code duplication. am_python_setup_sysconfig="\ import sys # Prefer sysconfig over distutils.sysconfig, for better compatibility # with python 3.x. See automake bug#10227. try: import sysconfig except ImportError: can_use_sysconfig = 0 else: can_use_sysconfig = 1 # Can't use sysconfig in CPython 2.7, since it's broken in virtualenvs: # try: from platform import python_implementation if python_implementation() == 'CPython' and sys.version[:3] == '2.7': can_use_sysconfig = 0 except ImportError: pass" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory" >&5 $as_echo_n "checking for $am_display_PYTHON script directory... " >&6; } if ${am_cv_python_pythondir+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$prefix" = xNONE then am_py_prefix=$ac_default_prefix else am_py_prefix=$prefix fi am_cv_python_pythondir=`$PYTHON -c " $am_python_setup_sysconfig if can_use_sysconfig: sitedir = sysconfig.get_path('purelib', vars={'base':'$am_py_prefix'}) else: from distutils import sysconfig sitedir = sysconfig.get_python_lib(0, 0, prefix='$am_py_prefix') sys.stdout.write(sitedir)"` case $am_cv_python_pythondir in $am_py_prefix*) am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` ;; *) case $am_py_prefix in /usr|/System*) ;; *) am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages ;; esac ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pythondir" >&5 $as_echo "$am_cv_python_pythondir" >&6; } pythondir=$am_cv_python_pythondir pkgpythondir=\${pythondir}/$PACKAGE { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON extension module directory" >&5 $as_echo_n "checking for $am_display_PYTHON extension module directory... " >&6; } if ${am_cv_python_pyexecdir+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$exec_prefix" = xNONE then am_py_exec_prefix=$am_py_prefix else am_py_exec_prefix=$exec_prefix fi am_cv_python_pyexecdir=`$PYTHON -c " $am_python_setup_sysconfig if can_use_sysconfig: sitedir = sysconfig.get_path('platlib', vars={'platbase':'$am_py_prefix'}) else: from distutils import sysconfig sitedir = sysconfig.get_python_lib(1, 0, prefix='$am_py_prefix') sys.stdout.write(sitedir)"` case $am_cv_python_pyexecdir in $am_py_exec_prefix*) am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` ;; *) case $am_py_exec_prefix in /usr|/System*) ;; *) am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages ;; esac ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pyexecdir" >&5 $as_echo "$am_cv_python_pyexecdir" >&6; } pyexecdir=$am_cv_python_pyexecdir pkgpyexecdir=\${pyexecdir}/$PACKAGE fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for python headers using $PYTHON-config --includes" >&5 $as_echo_n "checking for python headers using $PYTHON-config --includes... " >&6; } PYTHON_INCLUDES=`$PYTHON-config --includes` if test $? = 0; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_INCLUDES" >&5 $as_echo "$PYTHON_INCLUDES" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed, will try another way" >&5 $as_echo "failed, will try another way" >&6; } py_prefix=`$PYTHON -c "import sys; print(sys.prefix)"` py_exec_prefix=`$PYTHON -c "import sys; print(sys.exec_prefix)"` PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}" if test "$py_prefix" != "$py_exec_prefix"; then PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}" fi { $as_echo "$as_me:${as_lineno-$LINENO}: setting python headers to $PYTHON_INCLUDES" >&5 $as_echo "$as_me: setting python headers to $PYTHON_INCLUDES" >&6;} fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether python headers are sufficient" >&5 $as_echo_n "checking whether python headers are sufficient... " >&6; } save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $PYTHON_INCLUDES" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } HAVE_PYTHON=yes else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } HAVE_PYTHON=no;{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: python headers not found, disabling python binding" >&5 $as_echo "$as_me: WARNING: python headers not found, disabling python binding" >&2;} fi rm -f conftest.err conftest.i conftest.$ac_ext CPPFLAGS="$save_CPPFLAGS" else HAVE_PYTHON="no" fi if test "$HAVE_PYTHON" == "yes" && test "$ENABLE_PYTHON" == "yes"; then HAVE_PYTHON_TRUE= HAVE_PYTHON_FALSE='#' else HAVE_PYTHON_TRUE='#' HAVE_PYTHON_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -fno-strict-aliasing" >&5 $as_echo_n "checking to see if compiler understands -fno-strict-aliasing... " >&6; } save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fno-strict-aliasing" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : flag_ok=yes else flag_ok=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$save_CFLAGS" if test "X$flag_ok" = Xyes; then PYTHON_QUIET="$PYTHON_QUIET -fno-strict-aliasing" else true fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 $as_echo "$flag_ok" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -Wno-unused-function" >&5 $as_echo_n "checking to see if compiler understands -Wno-unused-function... " >&6; } save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wno-unused-function" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : flag_ok=yes else flag_ok=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$save_CFLAGS" if test "X$flag_ok" = Xyes; then PYTHON_QUIET="$PYTHON_QUIET -Wno-unused-function" else true fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 $as_echo "$flag_ok" >&6; } # ruby # Check whether --enable-ruby-binding was given. if test "${enable_ruby_binding+set}" = set; then : enableval=$enable_ruby_binding; ENABLE_RUBY=$enableval else ENABLE_RUBY="no" fi if test "$ENABLE_RUBY" == "yes" && test "$SWIG" != "no"; then # Extract the first word of "ruby", so it can be a program name with args. set dummy ruby; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_RUBY+:} false; then : $as_echo_n "(cached) " >&6 else case $RUBY in [\\/]* | ?:[\\/]*) ac_cv_path_RUBY="$RUBY" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_RUBY="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_RUBY" && ac_cv_path_RUBY="no" ;; esac fi RUBY=$ac_cv_path_RUBY if test -n "$RUBY"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RUBY" >&5 $as_echo "$RUBY" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$RUBY" != "no" ; then RUBY_INC_DIR=`$RUBY -e "require 'rbconfig'; c = ::Config::CONFIG; print c['archdir'];"` as_ac_Header=`$as_echo "ac_cv_header_$RUBY_INC_DIR/ruby.h" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$RUBY_INC_DIR/ruby.h" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : else ENABLE_RUBY="no";{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ruby.h not found, disabling Ruby binding" >&5 $as_echo "$as_me: WARNING: ruby.h not found, disabling Ruby binding" >&2;} fi else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ruby not found, disabling ruby binding" >&5 $as_echo "$as_me: WARNING: ruby not found, disabling ruby binding" >&2;} ENABLE_RUBY="no" fi else ENABLE_RUBY="no" fi if test "$ENABLE_RUBY" == "yes"; then HAVE_RUBY_TRUE= HAVE_RUBY_FALSE='#' else HAVE_RUBY_TRUE='#' HAVE_RUBY_FALSE= fi if test "$RUBY_PREFIX" != "" ; then RUBY_CONFIG_OPTIONS="$RUBY_CONFIG_OPTIONS --prefix=\$(RUBY_PREFIX)" fi if test "$RUBY_SO_DIR" != "" ; then RUBY_CONFIG_OPTIONS="$RUBY_CONFIG_OPTIONS --so-dir=\$(RUBY_SO_DIR)" fi # scxi # Check whether --enable-scxi was given. if test "${enable_scxi+set}" = set; then : enableval=$enable_scxi; ENABLE_SCXI=$enableval else ENABLE_SCXI="no" fi if test "$ENABLE_SCXI" == "yes"; then BUILD_SCXI_TRUE= BUILD_SCXI_FALSE='#' else BUILD_SCXI_TRUE='#' BUILD_SCXI_FALSE= fi # docbook # Check whether --enable-docbook was given. if test "${enable_docbook+set}" = set; then : enableval=$enable_docbook; ENABLE_DOCBOOK=$enableval else ENABLE_DOCBOOK="yes" fi if test "$ENABLE_DOCBOOK" == "yes"; then # Extract the first word of "xmlto", so it can be a program name with args. set dummy xmlto; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XMLTO+:} false; then : $as_echo_n "(cached) " >&6 else case $XMLTO in [\\/]* | ?:[\\/]*) ac_cv_path_XMLTO="$XMLTO" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_XMLTO="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_XMLTO" && ac_cv_path_XMLTO="no" ;; esac fi XMLTO=$ac_cv_path_XMLTO if test -n "$XMLTO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XMLTO" >&5 $as_echo "$XMLTO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$XMLTO" = "no" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: xmlto not found, will not be able to rebuild documentation" >&5 $as_echo "$as_me: WARNING: xmlto not found, will not be able to rebuild documentation" >&2;} fi else XMLTO="no" fi if test "$XMLTO" != "no"; then # Check whether --with-pdf-backend was given. if test "${with_pdf_backend+set}" = set; then : withval=$with_pdf_backend; WITH_PDF_BACKEND=$withval else WITH_PDF_BACKEND="yes" fi case "$WITH_PDF_BACKEND" in no) PDF_BACKEND="no" ;; yes) # Prefer dblatex, then default backend. # Could use [dblatex fop] to prefer dblatex or fop. for ac_prog in dblatex do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_PDF_BACKEND+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$PDF_BACKEND"; then ac_cv_prog_PDF_BACKEND="$PDF_BACKEND" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_PDF_BACKEND="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi PDF_BACKEND=$ac_cv_prog_PDF_BACKEND if test -n "$PDF_BACKEND"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PDF_BACKEND" >&5 $as_echo "$PDF_BACKEND" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$PDF_BACKEND" && break done test -n "$PDF_BACKEND" || PDF_BACKEND="default" # The default backend is broken, so avoid it for now. if test "$PDF_BACKEND" = "default"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Default PDF backend is broken, disabling PDF generation" >&5 $as_echo "$as_me: WARNING: Default PDF backend is broken, disabling PDF generation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: (dblatex is recommended for PDF generation)" >&5 $as_echo "$as_me: WARNING: (dblatex is recommended for PDF generation)" >&2;} PDF_BACKEND="no" fi if test "$PDF_BACKEND" != "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: Will use $PDF_BACKEND backend for PDF generation" >&5 $as_echo "$as_me: Will use $PDF_BACKEND backend for PDF generation" >&6;} fi ;; default) # Use xmlto's default backend. PDF_BACKEND="default" ;; dblatex|fop) # Extract the first word of "$WITH_PDF_BACKEND", so it can be a program name with args. set dummy $WITH_PDF_BACKEND; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_PDF_BACKEND+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$PDF_BACKEND"; then ac_cv_prog_PDF_BACKEND="$PDF_BACKEND" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_PDF_BACKEND="$WITH_PDF_BACKEND" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_PDF_BACKEND" && ac_cv_prog_PDF_BACKEND="no" fi fi PDF_BACKEND=$ac_cv_prog_PDF_BACKEND if test -n "$PDF_BACKEND"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PDF_BACKEND" >&5 $as_echo "$PDF_BACKEND" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$PDF_BACKEND" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $WITH_PDF_BACKEND not found, disabling PDF generation" >&5 $as_echo "$as_me: WARNING: $WITH_PDF_BACKEND not found, disabling PDF generation" >&2;} fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Bad --with-pdf-backend option, disabling PDF generation" >&5 $as_echo "$as_me: WARNING: Bad --with-pdf-backend option, disabling PDF generation" >&2;} PDF_BACKEND="no" ;; esac else PDF_BACKEND="no" fi case $PDF_BACKEND in fop|default) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $PDF_BACKEND PDF backend might not work. --without-pdf-backend disables PDF generation." >&5 $as_echo "$as_me: WARNING: $PDF_BACKEND PDF backend might not work. --without-pdf-backend disables PDF generation." >&2;} ;; esac if test "$XMLTO" != "no"; then HAVE_XMLTO_TRUE= HAVE_XMLTO_FALSE='#' else HAVE_XMLTO_TRUE='#' HAVE_XMLTO_FALSE= fi if test "$PDF_BACKEND" != "no"; then BUILD_PDF_TRUE= BUILD_PDF_FALSE='#' else BUILD_PDF_TRUE='#' BUILD_PDF_FALSE= fi if test "$PDF_BACKEND" = "dblatex"; then BUILD_PDF_USING_DBLATEX_TRUE= BUILD_PDF_USING_DBLATEX_FALSE='#' else BUILD_PDF_USING_DBLATEX_TRUE='#' BUILD_PDF_USING_DBLATEX_FALSE= fi if test "$PDF_BACKEND" = "fop"; then BUILD_PDF_USING_FOP_TRUE= BUILD_PDF_USING_FOP_FALSE='#' else BUILD_PDF_USING_FOP_TRUE='#' BUILD_PDF_USING_FOP_FALSE= fi pcmciadir="\${sysconfdir}/pcmcia" # firmware # Check whether --enable-firmware was given. if test "${enable_firmware+set}" = set; then : enableval=$enable_firmware; ENABLE_FIRMWARE=$enableval else ENABLE_FIRMWARE="yes" fi # new udev hotplug # Check whether --with-udev-hotplug was given. if test "${with_udev_hotplug+set}" = set; then : withval=$with_udev_hotplug; ENABLE_UDEVHOTPLUG=$withval else ENABLE_UDEVHOTPLUG="no" fi if test "$ENABLE_UDEVHOTPLUG" != "no"; then INSTALL_UDEVHOTPLUG_TRUE= INSTALL_UDEVHOTPLUG_FALSE='#' else INSTALL_UDEVHOTPLUG_TRUE='#' INSTALL_UDEVHOTPLUG_FALSE= fi if test "$ENABLE_UDEVHOTPLUG" != "no"; then if test "$ENABLE_UDEVHOTPLUG" == "yes"; then as_fn_error $? "udev-hotplug needs a path as an argument (usually: --enable-udev-hotplug=/lib)." "$LINENO" 5 fi if test "$ENABLE_UDEVHOTPLUG" != "/lib"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Installing the udev scripts in the non-standard location: $ENABLE_UDEVHOTPLUG (should be --enable-udev-hotplug=/lib)" >&5 $as_echo "$as_me: WARNING: Installing the udev scripts in the non-standard location: $ENABLE_UDEVHOTPLUG (should be --enable-udev-hotplug=/lib)" >&2;} fi udevrulesdir="$ENABLE_UDEVHOTPLUG/udev/rules.d/" udevscriptsdir="$ENABLE_UDEVHOTPLUG/udev" if test "$ENABLE_FIRMWARE" == "yes"; then udevfirmwaredir="$ENABLE_UDEVHOTPLUG/firmware" fi else ENABLE_UDEVHOTPLUG="no" fi if test "$ENABLE_UDEVHOTPLUG" = "no" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No hotplug mechanism will be installed. Consult ./configure --help if you want hotplug." >&5 $as_echo "$as_me: WARNING: No hotplug mechanism will be installed. Consult ./configure --help if you want hotplug." >&2;} fi ac_config_files="$ac_config_files Makefile comedi_config/Makefile comedi_board_info/Makefile c++/Makefile c++/include/Makefile etc/Makefile etc/pcmcia/Makefile etc/hotplug/Makefile etc/hotplug/usb/Makefile etc/hotplug/usb/usbdux/Makefile etc/hotplug/usb/usbduxfast/Makefile etc/hotplug/usb/usbduxsigma/Makefile etc/udev/Makefile doc/Makefile demo/Makefile include/Makefile include/comedilib_version.h lib/Makefile man/Makefile scxi/Makefile swig/Makefile swig/python/Makefile swig/ruby/Makefile testing/Makefile comedilib.spec comedilib.pc" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_PYTHON_TRUE}" && test -z "${HAVE_PYTHON_FALSE}"; then as_fn_error $? "conditional \"HAVE_PYTHON\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_RUBY_TRUE}" && test -z "${HAVE_RUBY_FALSE}"; then as_fn_error $? "conditional \"HAVE_RUBY\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_SCXI_TRUE}" && test -z "${BUILD_SCXI_FALSE}"; then as_fn_error $? "conditional \"BUILD_SCXI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_XMLTO_TRUE}" && test -z "${HAVE_XMLTO_FALSE}"; then as_fn_error $? "conditional \"HAVE_XMLTO\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_PDF_TRUE}" && test -z "${BUILD_PDF_FALSE}"; then as_fn_error $? "conditional \"BUILD_PDF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_PDF_USING_DBLATEX_TRUE}" && test -z "${BUILD_PDF_USING_DBLATEX_FALSE}"; then as_fn_error $? "conditional \"BUILD_PDF_USING_DBLATEX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_PDF_USING_FOP_TRUE}" && test -z "${BUILD_PDF_USING_FOP_FALSE}"; then as_fn_error $? "conditional \"BUILD_PDF_USING_FOP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${INSTALL_UDEVHOTPLUG_TRUE}" && test -z "${INSTALL_UDEVHOTPLUG_FALSE}"; then as_fn_error $? "conditional \"INSTALL_UDEVHOTPLUG\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by comedilib $as_me 0.11.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ comedilib config.status 0.11.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_import \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ lt_cv_nm_interface \ nm_file_list_spec \ lt_cv_truncate_bin \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ configure_time_dlsearch_path \ configure_time_lt_sys_library_path; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "comedi_config/Makefile") CONFIG_FILES="$CONFIG_FILES comedi_config/Makefile" ;; "comedi_board_info/Makefile") CONFIG_FILES="$CONFIG_FILES comedi_board_info/Makefile" ;; "c++/Makefile") CONFIG_FILES="$CONFIG_FILES c++/Makefile" ;; "c++/include/Makefile") CONFIG_FILES="$CONFIG_FILES c++/include/Makefile" ;; "etc/Makefile") CONFIG_FILES="$CONFIG_FILES etc/Makefile" ;; "etc/pcmcia/Makefile") CONFIG_FILES="$CONFIG_FILES etc/pcmcia/Makefile" ;; "etc/hotplug/Makefile") CONFIG_FILES="$CONFIG_FILES etc/hotplug/Makefile" ;; "etc/hotplug/usb/Makefile") CONFIG_FILES="$CONFIG_FILES etc/hotplug/usb/Makefile" ;; "etc/hotplug/usb/usbdux/Makefile") CONFIG_FILES="$CONFIG_FILES etc/hotplug/usb/usbdux/Makefile" ;; "etc/hotplug/usb/usbduxfast/Makefile") CONFIG_FILES="$CONFIG_FILES etc/hotplug/usb/usbduxfast/Makefile" ;; "etc/hotplug/usb/usbduxsigma/Makefile") CONFIG_FILES="$CONFIG_FILES etc/hotplug/usb/usbduxsigma/Makefile" ;; "etc/udev/Makefile") CONFIG_FILES="$CONFIG_FILES etc/udev/Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "demo/Makefile") CONFIG_FILES="$CONFIG_FILES demo/Makefile" ;; "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; "include/comedilib_version.h") CONFIG_FILES="$CONFIG_FILES include/comedilib_version.h" ;; "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; "scxi/Makefile") CONFIG_FILES="$CONFIG_FILES scxi/Makefile" ;; "swig/Makefile") CONFIG_FILES="$CONFIG_FILES swig/Makefile" ;; "swig/python/Makefile") CONFIG_FILES="$CONFIG_FILES swig/python/Makefile" ;; "swig/ruby/Makefile") CONFIG_FILES="$CONFIG_FILES swig/ruby/Makefile" ;; "testing/Makefile") CONFIG_FILES="$CONFIG_FILES testing/Makefile" ;; "comedilib.spec") CONFIG_FILES="$CONFIG_FILES comedilib.spec" ;; "comedilib.pc") CONFIG_FILES="$CONFIG_FILES comedilib.pc" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # The names of the tagged configurations supported by this script. available_tags='' # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shared archive member basename,for filename based shared library versioning on AIX. shared_archive_member_spec=$shared_archive_member_spec # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm into a list of symbols to manually relocate. global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # The name lister interface. nm_interface=$lt_lt_cv_nm_interface # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and where our libraries should be installed. lt_sysroot=$lt_sysroot # Command to truncate a binary pipe. lt_truncate_bin=$lt_lt_cv_truncate_bin # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Detected run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path # Explicit LT_SYS_LIBRARY_PATH set during ./configure time. configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain=$ac_aux_dir/ltmain.sh # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi comedilib-0.11.0/ar-lib0000755000000000000000000001330212426145301011500 00000000000000#! /bin/sh # Wrapper for Microsoft lib.exe me=ar-lib scriptversion=2012-03-01.08; # UTC # Copyright (C) 2010-2013 Free Software Foundation, Inc. # Written by Peter Rosin . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . # func_error message func_error () { echo "$me: $1" 1>&2 exit 1 } file_conv= # func_file_conv build_file # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv in mingw) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin) file=`cygpath -m "$file" || echo "$file"` ;; wine) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_at_file at_file operation archive # Iterate over all members in AT_FILE performing OPERATION on ARCHIVE # for each of them. # When interpreting the content of the @FILE, do NOT use func_file_conv, # since the user would need to supply preconverted file names to # binutils ar, at least for MinGW. func_at_file () { operation=$2 archive=$3 at_file_contents=`cat "$1"` eval set x "$at_file_contents" shift for member do $AR -NOLOGO $operation:"$member" "$archive" || exit $? done } case $1 in '') func_error "no command. Try '$0 --help' for more information." ;; -h | --h*) cat < * * This file may be freely modified, distributed, and combined with * other software, as long as proper attribution is given in the * source code. */ /* A little input demo */ #include #include #include #include #include #include #include #include #include #include "examples.h" comedi_t *device; int main(int argc, char *argv[]) { lsampl_t data; int ret; comedi_range * range_info; lsampl_t maxdata; double physical_value; struct parsed_options options; init_parsed_options(&options); parse_options(&options, argc, argv); device = comedi_open(options.filename); if(!device){ comedi_perror(options.filename); exit(-1); } if(options.verbose){ printf("measuring device=%s subdevice=%d channel=%d range=%d analog reference=%d\n", options.filename, options.subdevice, options.channel, options.range, options.aref); } ret = comedi_data_read(device, options.subdevice, options.channel, options.range, options.aref, &data); if(ret < 0){ comedi_perror(options.filename); exit(-1); } if(options.physical) { comedi_set_global_oor_behavior(COMEDI_OOR_NAN); range_info = comedi_get_range(device, options.subdevice, options.channel, options.range); maxdata = comedi_get_maxdata(device, options.subdevice, options.channel); if(options.verbose) { printf("[0,%d] -> [%g,%g]\n", maxdata, range_info->min, range_info->max); } physical_value = comedi_to_phys(data, range_info, maxdata); if(isnan(physical_value)) { printf("Out of range [%g,%g]", range_info->min, range_info->max); } else { printf("%g", physical_value); switch(range_info->unit) { case UNIT_volt: printf(" V"); break; case UNIT_mA: printf(" mA"); break; case UNIT_none: break; default: printf(" (unknown unit %d)", range_info->unit); } if(options.verbose) { printf(" (%lu raw units)", (unsigned long)data); } } } else { printf("%lu", (unsigned long)data); } printf("\n"); return 0; } comedilib-0.11.0/demo/sender.c0000644000000000000000000000622712416542105012766 00000000000000/* * Digital I/O example * Part of Comedilib * * Copyright (c) 1999,2000 David A. Schleef * * This file may be freely modified, distributed, and combined with * other software, as long as proper attribution is given in the * source code. */ /* * Requirements: A board with a digital I/O subdevice. Not just * a 'digital input' or 'digital output' subdevice, but one in * which the channels can be configured between input and output. */ #include #include #include #include #include #include #include #include "examples.h" int chan_dat = 1; int chan_clk = 0; int wait1 = usec_to_nsec(0); int wait2 = usec_to_nsec(0); comedi_t *device; void write_bits(int subdevice, int bits); int main(int argc, char *argv[]) { int ret; int stype; int i; struct parsed_options options; init_parsed_options(&options); options.subdevice = -1; parse_options(&options, argc, argv); device = comedi_open(options.filename); if(!device){ comedi_perror(options.filename); exit(-1); } if(options.subdevice < 0) { options.subdevice = comedi_find_subdevice_by_type(device, COMEDI_SUBD_DIO, 0); if(options.subdevice < 0){ fprintf(stderr,"No dio subdevice found.\n"); exit(-1); } } stype = comedi_get_subdevice_type(device, options.subdevice); if(stype != COMEDI_SUBD_DIO){ printf("%d is not a digital I/O subdevice\n", options.subdevice); exit(-1); } printf("configuring pin %d for output...\n", chan_dat); ret = comedi_dio_config(device, options.subdevice, chan_dat, COMEDI_OUTPUT); if(ret < 0){ comedi_perror("comedi_dio_config"); exit(-1); } printf("configuring pin %d for output...\n", chan_clk); ret = comedi_dio_config(device, options.subdevice, chan_clk, COMEDI_OUTPUT); if(ret < 0){ comedi_perror("comedi_dio_config"); exit(-1); } for(i = 0; i < 0x100; i++){ write_bits(options.subdevice, i); } //write_bits(0xa5); return 0; } void write_bits(int subdevice, int bits) { comedi_insnlist il; comedi_insn insn[5]; lsampl_t data[10]; int mask = (1< * 2008 Bernd Porr * * This file may be freely modified, distributed, and combined with * other software, as long as proper attribution is given in the * source code. */ #include #include #include #include #include #include #include #include extern comedi_t *device; struct parsed_options { char *filename; double value; int subdevice; int channel; int aref; int range; int verbose; int n_chan; int n_scan; double freq; }; #define BUFSZ 10000 char buf[BUFSZ]; #define N_CHANS 256 static unsigned int chanlist[N_CHANS]; static comedi_range * range_info[N_CHANS]; static lsampl_t maxdata[N_CHANS]; int prepare_cmd_lib(comedi_t *dev, int subdevice, int n_scan, int n_chan, unsigned period_nanosec, comedi_cmd *cmd); void do_cmd(comedi_t *dev,comedi_cmd *cmd); void print_datum(lsampl_t raw, int channel_index); char *cmdtest_messages[] = { "success", "invalid source", "source conflict", "invalid argument", "argument conflict", "invalid chanlist", }; int main(int argc, char *argv[]) { comedi_t *dev; comedi_cmd c,*cmd = &c; int ret; int total = 0; int col; int i; int subdev_flags; lsampl_t raw; struct parsed_options options; memset(&options, 0, sizeof(options)); options.filename = "/dev/comedi0"; options.subdevice = 0; options.channel = 0; options.range = 0; options.aref = AREF_GROUND; options.n_chan = 2; options.n_scan = 10000; options.freq = 1000.0; /* open the device */ dev = comedi_open(options.filename); if (!dev) { comedi_perror(options.filename); exit(1); } /* Print numbers for clipped inputs */ comedi_set_global_oor_behavior(COMEDI_OOR_NUMBER); /* Set up channel list */ for (i = 0; i < options.n_chan; i++) { chanlist[i] = CR_PACK(options.channel + i, options.range, options.aref); range_info[i] = comedi_get_range(dev, options.subdevice, options.channel, options.range); maxdata[i] = comedi_get_maxdata(dev, options.subdevice, options.channel); } /* prepare_cmd_lib() uses a Comedilib routine to find a * good command for the device. prepare_cmd() explicitly * creates a command, which may not work for your device. */ prepare_cmd_lib(dev, options.subdevice, options.n_scan, options.n_chan, 1e9 / options.freq, cmd); /* comedi_command_test() tests a command to see if the * trigger sources and arguments are valid for the subdevice. * If a trigger source is invalid, it will be logically ANDed * with valid values (trigger sources are actually bitmasks), * which may or may not result in a valid trigger source. * If an argument is invalid, it will be adjusted to the * nearest valid value. In this way, for many commands, you * can test it multiple times until it passes. Typically, * if you can't get a valid command in two tests, the original * command wasn't specified very well. */ ret = comedi_command_test(dev, cmd); if (ret < 0) { comedi_perror("comedi_command_test"); if(errno == EIO){ fprintf(stderr, "Ummm... this subdevice doesn't support commands\n"); } exit(1); } ret = comedi_command_test(dev, cmd); if (ret < 0) { comedi_perror("comedi_command_test"); exit(1); } fprintf(stderr,"second test returned %d (%s)\n", ret, cmdtest_messages[ret]); if (ret != 0) { fprintf(stderr, "Error preparing command\n"); exit(1); } /* comedi_set_read_subdevice() attempts to change the current * 'read' subdevice to the specified subdevice if it is * different. Changing the read or write subdevice might not be * supported by the version of Comedi you are using. */ comedi_set_read_subdevice(dev, cmd->subdev); /* comedi_get_read_subdevice() gets the current 'read' * subdevice. if any. This is the subdevice whose buffer the * read() call will read from. Check that it is the one we want * to use. */ ret = comedi_get_read_subdevice(dev); if (ret < 0 || ret != cmd->subdev) { fprintf(stderr, "failed to change 'read' subdevice from %d to %d\n", ret, cmd->subdev); exit(1); } /* start the command */ ret = comedi_command(dev, cmd); if (ret < 0) { comedi_perror("comedi_command"); exit(1); } subdev_flags = comedi_get_subdevice_flags(dev, options.subdevice); col = 0; while (1) { ret = read(comedi_fileno(dev),buf,BUFSZ); if (ret < 0) { /* some error occurred */ perror("read"); break; } else if (ret == 0) { /* reached stop condition */ break; } else { int bytes_per_sample; total += ret; if (options.verbose) { fprintf(stderr, "read %d %d\n", ret, total); } if (subdev_flags & SDF_LSAMPL) { bytes_per_sample = sizeof(lsampl_t); } else { bytes_per_sample = sizeof(sampl_t); } for (i = 0; i < ret / bytes_per_sample; i++) { if (subdev_flags & SDF_LSAMPL) { raw = ((lsampl_t *)buf)[i]; } else { raw = ((sampl_t *)buf)[i]; } print_datum(raw, col); col++; if (col == options.n_chan) { printf("\n"); col=0; } } } } return 0; } /* * This prepares a command in a pretty generic way. We ask the * library to create a stock command that supports periodic * sampling of data, then modify the parts we want. */ int prepare_cmd_lib(comedi_t *dev, int subdevice, int n_scan, int n_chan, unsigned scan_period_nanosec, comedi_cmd *cmd) { int ret; memset(cmd,0,sizeof(*cmd)); /* This comedilib function will get us a generic timed * command for a particular board. If it returns -1, * that's bad. */ ret = comedi_get_cmd_generic_timed(dev, subdevice, cmd, n_chan, scan_period_nanosec); if (ret < 0) { fprintf(stderr, "comedi_get_cmd_generic_timed failed\n"); return ret; } /* Modify parts of the command */ cmd->chanlist = chanlist; cmd->chanlist_len = n_chan; if (cmd->stop_src == TRIG_COUNT) { cmd->stop_arg = n_scan; } return 0; } void print_datum(lsampl_t raw, int channel_index) { double physical_value; physical_value = comedi_to_phys(raw, range_info[channel_index], maxdata[channel_index]); printf("%#8.6g ", physical_value); } comedilib-0.11.0/demo/ledclock.c0000644000000000000000000001303312715406005013257 00000000000000/* * LED Clock demo * Part of Comedilib * * Copyright (c) 2001 David A. Schleef * * This file may be freely modified, distributed, and combined with * other software, as long as proper attribution is given in the * source code. */ /* * Requirements: * - A board with a digital output subdevice and a subdevice that * can trigger on an external digital line. A parallel port * satisfies these requirements. * - A Fantazein LED Clock modified so that the individual LEDs * can be controlled directly by the digital I/O lines. * * The Fantazein clock has 8 LEDs arranged in a row on a wand that * sweeps back and forth at about 15 Hz. Unmodified, the firmware * of the clock lights the LEDs at the appropriate time to print * words and the time of day. Since the wand moves quickly, it is * barely visible, so it looks like the image floats in the air. * Stuart Hughes modified a clock so that the LEDs could be controlled * directly by the parallel port of a computer, and wrote the * appropriate software using RTAI to create a stable image. This * is an attempt to port the demo to Comedi. * * It needs much work. */ #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include #include #include #include "examples.h" comedi_t *device; int count; int out_subd; #define BUFSZ 1024 sampl_t buf[BUFSZ]; unsigned int chanlist[16]; void prepare_cmd(comedi_t *dev,comedi_cmd *cmd, int subdevice); void do_cmd(comedi_t *dev,comedi_cmd *cmd); void do_toggle(void); void config_output(void) { int i; for(i=0;i<8;i++){ comedi_dio_config(device,out_subd,i,COMEDI_OUTPUT); } } void do_toggle(void) { #if 1 comedi_insnlist il; comedi_insn insn[3]; lsampl_t data[6]; int mask = 0xff; count++; il.n_insns = 3; il.insns = insn; memset(insn,0,3*sizeof(comedi_insn)); insn[0].insn = INSN_BITS; insn[0].n = 2; insn[0].data = data+0; insn[0].subdev = out_subd; data[0] = mask; //data[1] = count; data[1] = 0xfc; insn[1].insn = INSN_WAIT; insn[1].n = 1; insn[1].data = data+2; data[2] = 100000-1; insn[2].insn = INSN_BITS; insn[2].n = 2; insn[2].data = data+4; insn[2].subdev = out_subd; data[4] = mask; //data[5] = count; data[5] = 0xff; comedi_do_insnlist(device,&il); #else unsigned int data; unsigned int mask = 0xff; count++; data = count; comedi_dio_bitfield(device,out_subd,mask,&data); #endif } int main(int argc, char *argv[]) { int ret; comedi_cmd cmd; struct parsed_options options; init_parsed_options(&options); parse_options(&options, argc, argv); device = comedi_open(options.filename); if(!device){ perror(options.filename); exit(1); } out_subd = 0; config_output(); ret = fcntl(comedi_fileno(device),F_SETFL,O_NONBLOCK|O_ASYNC); if(ret<0)perror("fcntl"); #if 0 { struct sched_param p; memset(&p,0,sizeof(p)); p.sched_priority = 1; ret = sched_setscheduler(0,SCHED_FIFO,&p); if(ret<0)perror("sched_setscheduler"); } #endif prepare_cmd(device, &cmd, options.subdevice); do_cmd(device,&cmd); return 0; } void do_cmd(comedi_t *dev,comedi_cmd *cmd) { int total=0; int ret; int go; fd_set rdset; struct timeval timeout; ret=comedi_command_test(dev,cmd); printf("test ret=%d\n",ret); if(ret<0){ printf("errno=%d\n",errno); comedi_perror("comedi_command_test"); return; } dump_cmd(stdout,cmd); ret=comedi_command_test(dev,cmd); printf("test ret=%d\n",ret); if(ret<0){ printf("errno=%d\n",errno); comedi_perror("comedi_command_test"); return; } dump_cmd(stdout,cmd); comedi_set_read_subdevice(dev, cmd->subdev); ret = comedi_get_read_subdevice(dev); if (ret < 0 || ret != cmd->subdev) { fprintf(stderr, "failed to change 'read' subdevice from %d to %d\n", ret, cmd->subdev); return; } ret=comedi_command(dev,cmd); printf("ret=%d\n",ret); if(ret<0){ printf("errno=%d\n",errno); comedi_perror("comedi_command"); return; } go=1; while(go){ FD_ZERO(&rdset); FD_SET(comedi_fileno(dev),&rdset); timeout.tv_sec = 0; timeout.tv_usec = 50000; ret = select(comedi_fileno(dev)+1,&rdset,NULL,NULL,&timeout); if(ret<0){ perror("select"); }else if(ret==0){ /* timeout */ }else if(FD_ISSET(comedi_fileno(dev),&rdset)){ ret=read(comedi_fileno(dev),buf,BUFSZ); if(ret<0){ if(errno==EAGAIN){ go = 0; perror("read"); } }else if(ret==0){ go = 0; }else{ //int i; total+=ret; //printf("read %d %d\n",ret,total); //printf("count = %d\n",count); do_toggle(); #if 0 for(i=0;isubdev = subdevice; /* flags */ cmd->flags = TRIG_WAKE_EOS; cmd->start_src = TRIG_NOW; cmd->start_arg = 0; cmd->scan_begin_src = TRIG_EXT; cmd->scan_begin_arg = 0; #if 0 cmd->convert_src = TRIG_TIMER; cmd->convert_arg = 1; #else cmd->convert_src = TRIG_ANY; cmd->convert_arg = 0; #endif cmd->scan_end_src = TRIG_COUNT; cmd->scan_end_arg = 1; cmd->stop_src = TRIG_NONE; cmd->stop_arg = 0; cmd->chanlist = chanlist; cmd->chanlist_len = 1; chanlist[0]=CR_PACK(0,0,0); } comedilib-0.11.0/demo/info.c0000644000000000000000000001006112416542105012430 00000000000000/* This demo reads information about a comedi device and displays the information in a human-readable form. */ #include #include #include #include #include #include #include #include "examples.h" void get_command_stuff(comedi_t *it,int s); void help(void) { fprintf(stderr,"info \n"); exit(0); } char *tobinary(char *s,int bits,int n); static const char * const subdevice_types[]={ "unused", "analog input", "analog output", "digital input", "digital output", "digital I/O", "counter", "timer", "memory", "calibration", "processor", "serial digital I/O", "pwm" }; comedi_t *it; extern char *filename; int main(int argc,char *argv[]) { int i,j; int n_subdevices,type; const char *type_str; int chan,n_chans; int n_ranges; int subdev_flags; comedi_range *rng; struct parsed_options options; init_parsed_options(&options); parse_options(&options, argc, argv); it = comedi_open(options.filename); if(!it){ comedi_perror(options.filename); exit(1); } printf("overall info:\n"); printf(" version code: 0x%06x\n", comedi_get_version_code(it)); printf(" driver name: %s\n", comedi_get_driver_name(it)); printf(" board name: %s\n", comedi_get_board_name(it)); printf(" number of subdevices: %d\n", n_subdevices = comedi_get_n_subdevices(it)); for(i = 0; i < n_subdevices; i++){ printf("subdevice %d:\n",i); type = comedi_get_subdevice_type(it, i); if(type < (int)(sizeof(subdevice_types) / sizeof(subdevice_types[0]))){ type_str = subdevice_types[type]; }else{ type_str = "UNKNOWN"; } printf(" type: %d (%s)\n",type,type_str); if(type==COMEDI_SUBD_UNUSED) continue; subdev_flags = comedi_get_subdevice_flags(it, i); printf(" flags: 0x%08x\n",subdev_flags); n_chans=comedi_get_n_channels(it,i); printf(" number of channels: %d\n",n_chans); if(!comedi_maxdata_is_chan_specific(it,i)){ printf(" max data value: %lu\n", (unsigned long)comedi_get_maxdata(it,i,0)); }else{ printf(" max data value: (channel specific)\n"); for(chan=0;chanmin,rng->max); } printf("\n"); }else{ for(chan=0;chanmin,rng->max); } printf("\n"); } } printf(" command:\n"); get_command_stuff(it,i); } return 0; } char *tobinary(char *s,int bits,int n) { int bit=1<>=1) *t++=(bits&bit)?'1':'0'; *t=0; return s; } void probe_max_1chan(comedi_t *it,int s); void get_command_stuff(comedi_t *it,int s) { comedi_cmd cmd; char buf[100]; if(comedi_get_cmd_src_mask(it,s,&cmd)<0){ printf(" not supported\n"); }else{ printf(" start: %s\n",cmd_src(cmd.start_src,buf)); printf(" scan_begin: %s\n",cmd_src(cmd.scan_begin_src,buf)); printf(" convert: %s\n",cmd_src(cmd.convert_src,buf)); printf(" scan_end: %s\n",cmd_src(cmd.scan_end_src,buf)); printf(" stop: %s\n",cmd_src(cmd.stop_src,buf)); probe_max_1chan(it,s); } } void probe_max_1chan(comedi_t *it,int s) { comedi_cmd cmd; char buf[100]; printf(" command fast 1chan:\n"); if(comedi_get_cmd_generic_timed(it, s, &cmd, 1, 1)<0){ printf(" not supported\n"); }else{ printf(" start: %s %d\n", cmd_src(cmd.start_src,buf),cmd.start_arg); printf(" scan_begin: %s %d\n", cmd_src(cmd.scan_begin_src,buf),cmd.scan_begin_arg); printf(" convert: %s %d\n", cmd_src(cmd.convert_src,buf),cmd.convert_arg); printf(" scan_end: %s %d\n", cmd_src(cmd.scan_end_src,buf),cmd.scan_end_arg); printf(" stop: %s %d\n", cmd_src(cmd.stop_src,buf),cmd.stop_arg); } } comedilib-0.11.0/demo/gpct_simple_counting.c0000644000000000000000000000606312416542105015720 00000000000000/* * NI general-purpose counter example. Configures the counter to * start simple event counting. The counter's value can be read * with the inp demo. Different clock sources can be chosen * with the choose_clock demo. * Part of Comedilib * * Copyright (c) 2007 Frank Mori Hess * * This file may be freely modified, distributed, and combined with * other software, as long as proper attribution is given in the * source code. */ /* * Requirements: A board with a National Instruments general-purpose * counter, and comedi driver version 0.7.74 or newer. */ #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include #include #include "examples.h" int ni_gpct_start_simple_event_counting(comedi_t *device, unsigned subdevice) { int retval; lsampl_t counter_mode; static const unsigned initial_count = 0; retval = comedi_reset(device, subdevice); if(retval < 0) return retval; retval = comedi_set_gate_source(device, subdevice, 0, 0, NI_GPCT_GATE_PIN_GATE_SELECT(0) /* NI_GPCT_GATE_PIN_i_GATE_SELECT *//*| CR_EDGE*/); if(retval < 0) return retval; retval = comedi_set_gate_source(device, subdevice, 0, 1, NI_GPCT_DISABLED_GATE_SELECT | CR_EDGE); if(retval < 0) { fprintf(stderr, "Failed to set second gate source. This is expected for older boards (e-series, etc.)\n" "that don't have a second gate.\n"); } counter_mode = NI_GPCT_COUNTING_MODE_NORMAL_BITS; // output pulse on terminal count (doesn't really matter for this application) counter_mode |= NI_GPCT_OUTPUT_TC_PULSE_BITS; /* Don't alternate the reload source between the load a and load b registers. Doesn't really matter here, since we aren't going to be reloading the counter. */ counter_mode |= NI_GPCT_RELOAD_SOURCE_FIXED_BITS; // count up counter_mode |= NI_GPCT_COUNTING_DIRECTION_UP_BITS; // don't stop on terminal count counter_mode |= NI_GPCT_STOP_ON_GATE_BITS; // don't disarm on terminal count or gate signal counter_mode |= NI_GPCT_NO_HARDWARE_DISARM_BITS; retval = comedi_set_counter_mode(device, subdevice, 0, counter_mode); if(retval < 0) return retval; /* set initial counter value by writing to channel 0. The "load a" and "load b" registers can be set by writing to channels 1 and 2 respectively. */ retval = comedi_data_write(device, subdevice, 0, 0, 0, initial_count); retval = comedi_arm(device, subdevice, NI_GPCT_ARM_IMMEDIATE); if(retval < 0) return retval; return 0; } int main(int argc, char *argv[]) { comedi_t *device; int retval; struct parsed_options options; init_parsed_options(&options); parse_options(&options, argc, argv); device = comedi_open(options.filename); if(!device) { comedi_perror(options.filename); exit(-1); } /*FIXME: check that device is counter */ printf("Initiating simple event counting on subdevice %d.\n", options.subdevice); retval = ni_gpct_start_simple_event_counting(device, options.subdevice); if(retval < 0) return retval; return 0; } comedilib-0.11.0/demo/gpct_encoder.c0000644000000000000000000000725112416542105014140 00000000000000/* * NI quadrature encoder example. * Part of Comedilib * * Copyright (c) 2007 Anders Blomdell * * This file may be freely modified, distributed, and combined with * other software, as long as proper attribution is given in the * source code. */ /* * Requirements: A board with a National Instruments general-purpose * counter, and comedi driver version 0.7.74 or newer. */ #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include #include #include "examples.h" int ni_gpct_start_encoder(comedi_t *device, unsigned subdevice, unsigned int initial_value, int a, int b, int z) { int retval; lsampl_t counter_mode; retval = comedi_reset(device, subdevice); /* set initial counter value by writing to channel 0 */ retval = comedi_data_write(device, subdevice, 0, 0, 0, initial_value); /* set "load a" register to initial_value by writing to channel 1 */ retval = comedi_data_write(device, subdevice, 1, 0, 0, initial_value); /* set "load b" register to initial_value by writing to channel 2 */ retval = comedi_data_write(device, subdevice, 2, 0, 0, initial_value); comedi_set_gate_source(device, subdevice, 0, 0, NI_GPCT_DISABLED_GATE_SELECT); comedi_set_gate_source(device, subdevice, 0, 1, NI_GPCT_DISABLED_GATE_SELECT); /* note, the comedi_set_other_source calls will fail on 660x boards, since they * don't support user selection of the inputs used for the A/B/Z signals. */ comedi_set_other_source(device, subdevice, 0, NI_GPCT_SOURCE_ENCODER_A, a); comedi_set_other_source(device, subdevice, 0, NI_GPCT_SOURCE_ENCODER_B, b); comedi_set_other_source(device, subdevice, 0, NI_GPCT_SOURCE_ENCODER_Z, z); counter_mode = (NI_GPCT_COUNTING_MODE_QUADRATURE_X4_BITS | NI_GPCT_COUNTING_DIRECTION_HW_UP_DOWN_BITS); if (z != NI_GPCT_DISABLED_GATE_SELECT) { counter_mode |= (NI_GPCT_INDEX_ENABLE_BIT | NI_GPCT_INDEX_PHASE_HIGH_A_HIGH_B_BITS); } retval = comedi_set_counter_mode(device, subdevice, 0, counter_mode); if(retval < 0) return retval; retval = comedi_arm(device, subdevice, NI_GPCT_ARM_IMMEDIATE); if(retval < 0) return retval; return 0; } int main(int argc, char *argv[]) { comedi_t *device = NULL; int subdevice = -1; int a = NI_GPCT_DISABLED_OTHER_SELECT; int b = NI_GPCT_DISABLED_OTHER_SELECT; int z = NI_GPCT_DISABLED_OTHER_SELECT; unsigned int initial_value = 0; int retval; { int c; while (-1 != (c = getopt(argc, argv, "f:s:A:B:Z:I:"))) { switch (c) { case 'f': device = comedi_open(optarg); if(!device) { comedi_perror(optarg); exit(-1); } break; case 's': subdevice = strtoul(optarg, NULL, 0); break; case 'A': /* TODO: Should we pass the value directly, i.e. could anybody * be interested in values besides PFIx/DISABLED */ a = NI_GPCT_PFI_OTHER_SELECT(strtoul(optarg, NULL, 0)); break; case 'B': /* TODO: Should we pass the value directly, i.e. could anybody * be interested in values besides PFIx/DISABLED */ b = NI_GPCT_PFI_OTHER_SELECT(strtoul(optarg, NULL, 0)); break; case 'Z': /* TODO: Should we pass the value directly, i.e. could anybody * be interested in values besides PFIx/DISABLED */ z = NI_GPCT_PFI_OTHER_SELECT(strtoul(optarg, NULL, 0)); break; case 'I': initial_value = strtoul(optarg, NULL, 0); break; } } } /*FIXME: check that device is counter */ printf("Initiating encoder on subdevice %d.\n", subdevice); retval = ni_gpct_start_encoder(device, subdevice, initial_value, a, b, z); if(retval < 0) return retval; return 0; } comedilib-0.11.0/demo/pwm.c0000644000000000000000000000655712416542105012317 00000000000000#include #include #include #include #include /* * A little pwm demo * Part of Comedilib * * Copyright (c) 2012 Bernd Porr * * This file may be freely modified, distributed, and combined with * other software, as long as proper attribution is given in the * source code. */ #include #include #include #include #include "examples.h" // the option -n is used to switch on/off the pwm int main(int argc, char *argv[]) { int ret; comedi_insn insn; lsampl_t d[5]; comedi_t *device; int freq; struct parsed_options options; init_parsed_options(&options); options.freq = -1; // we hijack this option to switch it on or off options.n_scan = -1; options.value = -1; parse_options(&options, argc, argv); if ((options.value==-1)&&(options.n_scan==-1)&&(options.freq==-1)) { fprintf(stderr, "Usage: %s OPTIONS duty_cycle\n" "options: \n" " -N 0 switches PWM off\n" " -N 1 switches PWM on\n" " -N 2 enquires the max value for the duty cycle\n" " -F FREQ sets the PWM frequency\n", argv[0]); } device = comedi_open(options.filename); if(!device){ comedi_perror(options.filename); exit(-1); } options.subdevice = comedi_find_subdevice_by_type(device,COMEDI_SUBD_PWM,0); if (options.verbose) printf("PWM subdevice autodetection gave subdevice number %d\n", options.subdevice); if(options.n_scan==2) { printf("%d\n",comedi_get_maxdata(device,options.subdevice,0)); comedi_close(device); exit(0); } insn.insn=INSN_CONFIG; insn.data=d; insn.subdev=options.subdevice; insn.chanspec=CR_PACK(0,0,0); if(options.n_scan==1) { d[0] = INSN_CONFIG_ARM; d[1] = 0; insn.n=2; ret=comedi_do_insn(device,&insn); if(ret < 0){ fprintf(stderr,"Could not switch on:%d\n",ret); comedi_perror(options.filename); exit(-1); } } if(options.n_scan==0) { d[0] = INSN_CONFIG_DISARM; d[1] = 0; insn.n=1; ret=comedi_do_insn(device,&insn); if(ret < 0){ fprintf(stderr,"Could not switch off:%d\n",ret); comedi_perror(options.filename); exit(-1); } } if(options.freq>0) { freq = options.freq; d[0] = INSN_CONFIG_PWM_SET_PERIOD; d[1] = 1E9/freq; insn.n=2; ret=comedi_do_insn(device,&insn); if(ret < 0){ fprintf(stderr,"Could set frequ:%d\n",ret); comedi_perror(options.filename); exit(-1); } } d[0] = INSN_CONFIG_GET_PWM_STATUS; insn.n=2; ret=comedi_do_insn(device,&insn); if(ret < 0){ fprintf(stderr,"Could not get status:%d insn=%d\n", ret, d[0]); comedi_perror(options.filename); exit(-1); } if (options.verbose) { if (d[1]) fprintf(stderr, "PWM is on.\n"); else fprintf(stderr, "PWM is off.\n"); } d[0] = INSN_CONFIG_PWM_GET_PERIOD; insn.n=2; ret=comedi_do_insn(device,&insn); if(ret < 0){ fprintf(stderr,"Could get frequ:%d\n",ret); comedi_perror(options.filename); exit(-1); } freq = 1E9 / d[1]; if (options.verbose) fprintf(stderr,"PWM frequency is %d\n", freq); if (options.value>=0) if(comedi_data_write(device, options.subdevice, options.channel, 0, 0, options.value)<0) { fprintf(stderr,"error setting the pwm duty cycle on "); comedi_perror(options.filename); exit(1); } return 0; } comedilib-0.11.0/demo/tut1.c0000644000000000000000000000160312715406005012374 00000000000000/* * Tutorial example #1 * Part of Comedilib * * Copyright (c) 1999,2000 David A. Schleef * * This file may be freely modified, distributed, and combined with * other software, as long as proper attribution is given in the * source code. */ #include /* for printf() */ #include int subdev = 0; /* change this to your input subdevice */ int chan = 0; /* change this to your channel */ int range = 0; /* more on this later */ int aref = AREF_GROUND; /* more on this later */ int main(int argc,char *argv[]) { comedi_t *it; int chan = 0; lsampl_t data; int retval; it = comedi_open("/dev/comedi0"); if(it == NULL) { comedi_perror("comedi_open"); return 1; } retval = comedi_data_read(it, subdev, chan, range, aref, &data); if(retval < 0) { comedi_perror("comedi_data_read"); return 1; } printf("%d\n", data); return 0; } comedilib-0.11.0/demo/mmap.c0000644000000000000000000001407013010363677012441 00000000000000/* * Example of using commands - asynchronous input * Part of Comedilib * * Copyright (c) 1999,2000 David A. Schleef * * This file may be freely modified, distributed, and combined with * other software, as long as proper attribution is given in the * source code. */ /* * An example for directly using Comedi commands. Comedi commands * are used for asynchronous acquisition, with the timing controlled * by on-board timers or external events. */ #include #include #include #include #include #include #include #include #include #include "examples.h" #define N_CHANS 256 unsigned int chanlist[N_CHANS]; void *map; int prepare_cmd_lib(comedi_t *dev, int subdevice, int n_scan, int n_chan, unsigned period_nanosec, comedi_cmd *cmd); int prepare_cmd(comedi_t *dev, int subdevice, int n_scan, int n_chan, unsigned period_nanosec, comedi_cmd *cmd); int main(int argc, char *argv[]) { comedi_t *dev; comedi_cmd c,*cmd=&c; unsigned int bufsize; unsigned int front, back; int ret; unsigned int i; unsigned int bufpos; unsigned int subdev_flags; unsigned int sample_size; unsigned int nsamples; unsigned int col; struct parsed_options options; init_parsed_options(&options); options.subdevice = -1; parse_options(&options, argc, argv); if(options.n_chan > N_CHANS){ options.n_chan = N_CHANS; } dev = comedi_open(options.filename); if(!dev){ comedi_perror(options.filename); exit(1); } if(options.subdevice < 0) { /* Subdevice not set on command line. */ /* Default to the 'read' subdevice (if any). */ options.subdevice = comedi_get_read_subdevice(dev); if(options.subdevice < 0) { /* No 'read' subdevice, so default to 0 instead. */ options.subdevice = 0; } fprintf(stderr, "defaulted to subdevice %d\n", options.subdevice); } /* Check subdevice exists. */ ret = comedi_get_n_subdevices(dev); if(ret <= options.subdevice){ fprintf(stderr, "subdevice %d does not exist\n", options.subdevice); exit(1); } /* Check subdevice supports 'read' commands. */ ret = comedi_get_subdevice_flags(dev, options.subdevice); if(ret < 0 || !(ret & SDF_CMD_READ)) { fprintf(stderr, "subdevice %d does not support 'read' commands\n", options.subdevice); exit(1); } ret = comedi_get_buffer_size(dev, options.subdevice); if(ret < 0){ comedi_perror("comedi_get_buffer_size"); exit(1); } bufsize = ret; fprintf(stderr,"buffer size is %u\n", bufsize); ret = comedi_get_subdevice_flags(dev, options.subdevice); if(ret < 0){ comedi_perror("comedi_get_subdevice_flags"); } subdev_flags = ret; sample_size = (subdev_flags & SDF_LSAMPL) ? sizeof(lsampl_t) : sizeof(sampl_t); fprintf(stderr,"sample size is %u\n", sample_size); /* * Attempt to make options.subdevice the current 'read' subdevice, * as that is the one whose buffer will be mapped. */ comedi_set_read_subdevice(dev, options.subdevice); ret = comedi_get_read_subdevice(dev); if (ret < 0 || ret != options.subdevice) { fprintf(stderr, "failed to change 'read' subdevice from %d to %d\n", ret, cmd->subdev); exit(1); } map = mmap(NULL,bufsize,PROT_READ,MAP_SHARED, comedi_fileno(dev), 0); fprintf(stderr, "map=%p\n", map); if( map == MAP_FAILED ){ perror( "mmap" ); exit(1); } for(i = 0; i < options.n_chan; i++){ chanlist[i] = CR_PACK(options.channel + i, options.range, options.aref); } /* prepare_cmd_lib() uses a Comedilib routine to find a * good command for the device. prepare_cmd() explicitly * creates a command, which may not work for your device. */ ret = prepare_cmd_lib(dev, options.subdevice, options.n_scan, options.n_chan, 1e9 / options.freq, cmd); //prepare_cmd(dev, options.subdevice, options.n_scan, options.n_chan, 1e9 / options.freq, cmd); if(ret < 0){ exit(1); } ret = comedi_command_test(dev, cmd); ret = comedi_command_test(dev, cmd); if(ret != 0){ fprintf(stderr,"command_test failed\n"); exit(1); } dump_cmd(stderr, cmd); ret = comedi_command(dev, cmd); if(ret < 0){ comedi_perror("comedi_command"); exit(1); } front = 0; back = 0; bufpos = 0; col = 0; while(1){ ret = comedi_get_buffer_contents(dev, options.subdevice); if(ret < 0){ comedi_perror("comedi_get_buffer_contents"); break; } front += ret; nsamples = (front - back) / sample_size; front = back + nsamples * sample_size; if(options.verbose) fprintf(stderr, "front = %u, back = %u, samples = %u\n", front, back, nsamples); if(front == back){ //comedi_poll(dev, options.subdevice); usleep(10000); continue; } for(i = 0; i < nsamples; i++){ unsigned int sample; if(sample_size == sizeof(sampl_t)) sample = *(sampl_t *)((char *)map + bufpos); else sample = *(lsampl_t *)((char *)map + bufpos); printf("%u ", sample); col++; if(col == options.n_chan){ printf("\n"); col = 0; } bufpos += sample_size; if(bufpos >= bufsize){ bufpos = 0; } } ret = comedi_mark_buffer_read(dev, options.subdevice, front - back); if(ret < 0){ comedi_perror("comedi_mark_buffer_read"); break; } back = front; } return 0; } int prepare_cmd_lib(comedi_t *dev, int subdevice, int n_scan, int n_chan, unsigned scan_period_nanosec, comedi_cmd *cmd) { int ret; ret = comedi_get_cmd_generic_timed(dev, subdevice, cmd, n_chan, scan_period_nanosec); if(ret<0){ comedi_perror("comedi_get_cmd_generic_timed\n"); return ret; } cmd->chanlist = chanlist; cmd->chanlist_len = n_chan; if(cmd->stop_src == TRIG_COUNT) cmd->stop_arg = n_scan; return 0; } int prepare_cmd(comedi_t *dev, int subdevice, int n_scan, int n_chan, unsigned period_nanosec, comedi_cmd *cmd) { memset(cmd,0,sizeof(*cmd)); cmd->subdev = subdevice; cmd->flags = 0; cmd->start_src = TRIG_NOW; cmd->start_arg = 0; cmd->scan_begin_src = TRIG_TIMER; cmd->scan_begin_arg = period_nanosec; cmd->convert_src = TRIG_TIMER; cmd->convert_arg = 1; cmd->scan_end_src = TRIG_COUNT; cmd->scan_end_arg = n_chan; cmd->stop_src = TRIG_NONE; cmd->stop_arg = 0; cmd->chanlist = chanlist; cmd->chanlist_len = n_chan; return 0; } comedilib-0.11.0/demo/dio.c0000644000000000000000000000301312416542105012247 00000000000000/* * Digital I/O example * Part of Comedilib * * Copyright (c) 1999,2000 David A. Schleef * * This file may be freely modified, distributed, and combined with * other software, as long as proper attribution is given in the * source code. */ /* * Requirements: A board with a digital I/O subdevice. Not just * a 'digital input' or 'digital output' subdevice, but one in * which the channels can be configured between input and output. */ #include #include #include #include #include #include #include #include #include "examples.h" comedi_t *device; int main(int argc, char *argv[]) { int ret; int stype; struct parsed_options options; init_parsed_options(&options); parse_options(&options, argc, argv); device = comedi_open(options.filename); if(!device){ comedi_perror(options.filename); exit(-1); } stype = comedi_get_subdevice_type(device, options.subdevice); if(stype != COMEDI_SUBD_DIO){ printf("%d is not a digital I/O subdevice\n", options.subdevice); exit(-1); } printf("configuring pin %d on subdevice %d ", options.channel, options.subdevice); if(options.value) { printf("for output.\n"); ret = comedi_dio_config(device, options.subdevice, options.channel, COMEDI_OUTPUT); }else { printf("for input.\n"); ret = comedi_dio_config(device, options.subdevice, options.channel, COMEDI_INPUT); } if(ret < 0){ comedi_perror("comedi_dio_config"); exit(-1); } return 0; } comedilib-0.11.0/demo/examples.h0000644000000000000000000000142412416542105013323 00000000000000 #ifndef _EXAMPLES_H #define _EXAMPLES_H #include /* * Definitions of some of the common code. */ extern comedi_t *device; struct parsed_options { char *filename; double value; int subdevice; int channel; int aref; int range; int physical; int verbose; int n_chan; int n_scan; double freq; }; extern void init_parsed_options(struct parsed_options *options); extern int parse_options(struct parsed_options *options, int argc, char *argv[]); extern char *cmd_src(int src,char *buf); extern void dump_cmd(FILE *file,comedi_cmd *cmd); #define sec_to_nsec(x) ((x)*1000000000) #define sec_to_usec(x) ((x)*1000000) #define sec_to_msec(x) ((x)*1000) #define msec_to_nsec(x) ((x)*1000000) #define msec_to_usec(x) ((x)*1000) #define usec_to_nsec(x) ((x)*1000) #endif comedilib-0.11.0/demo/gpct_pulse_generator.c0000644000000000000000000001146313160504126015715 00000000000000/* * NI general-purpose counter example. Configures the counter to * produce a continuous pulse train. The argument specifies the * number of nanoseconds the output pulse should remain high. * The example assumes the board has already been configured to * route the output signal of the counter to an appropriate * location (you may need to route it to a PFI output line * for example). The choose_routing demo may be helpful to * set the routing of the counter's output signal. * Part of Comedilib * * Copyright (c) 2007 Frank Mori Hess * * This file may be freely modified, distributed, and combined with * other software, as long as proper attribution is given in the * source code. */ /* * Requirements: A board with a National Instruments general-purpose * counter, and comedi driver version 0.7.74 or newer. */ #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include #include #include "examples.h" int ni_gpct_start_pulse_generator(comedi_t *device, unsigned subdevice, unsigned period_ns, unsigned up_time_ns) { int retval; lsampl_t counter_mode; const unsigned clock_period_ns = 50; /* 20MHz clock */ unsigned up_ticks, down_ticks; retval = comedi_reset(device, subdevice); if(retval < 0) return retval; retval = comedi_set_gate_source(device, subdevice, 0, 0, NI_GPCT_DISABLED_GATE_SELECT | CR_EDGE); if(retval < 0) return retval; retval = comedi_set_gate_source(device, subdevice, 0, 1, NI_GPCT_DISABLED_GATE_SELECT | CR_EDGE); if(retval < 0) { fprintf(stderr, "Failed to set second gate source. This is expected for older boards (e-series, etc.)\n" "that don't have a second gate.\n"); } counter_mode = NI_GPCT_COUNTING_MODE_NORMAL_BITS; // toggle output on terminal count counter_mode |= NI_GPCT_OUTPUT_TC_TOGGLE_BITS; // load on terminal count counter_mode |= NI_GPCT_LOADING_ON_TC_BIT; // alternate the reload source between the load a and load b registers counter_mode |= NI_GPCT_RELOAD_SOURCE_SWITCHING_BITS; // count down counter_mode |= NI_GPCT_COUNTING_DIRECTION_DOWN_BITS; // initialize load source as load b register counter_mode |= NI_GPCT_LOAD_B_SELECT_BIT; // don't stop on terminal count counter_mode |= NI_GPCT_STOP_ON_GATE_BITS; // don't disarm on terminal count or gate signal counter_mode |= NI_GPCT_NO_HARDWARE_DISARM_BITS; retval = comedi_set_counter_mode(device, subdevice, 0, counter_mode); if(retval < 0) return retval; /* 20MHz clock */ retval = comedi_set_clock_source(device, subdevice, 0, NI_GPCT_TIMEBASE_1_CLOCK_SRC_BITS, clock_period_ns); if(retval < 0) return retval; up_ticks = (up_time_ns + clock_period_ns / 2) / clock_period_ns; down_ticks = (period_ns + clock_period_ns / 2) / clock_period_ns - up_ticks; /* set initial counter value by writing to channel 0 */ retval = comedi_data_write(device, subdevice, 0, 0, 0, down_ticks); if(retval < 0) return retval; /* set "load a" register to the number of clock ticks the counter output should remain low by writing to channel 1. */ retval = comedi_data_write(device, subdevice, 1, 0, 0, down_ticks); if(retval < 0) return retval; /* set "load b" register to the number of clock ticks the counter output should remain high by writing to channel 2 */ retval = comedi_data_write(device, subdevice, 2, 0, 0, up_ticks); if(retval < 0) return retval; retval = comedi_arm(device, subdevice, NI_GPCT_ARM_IMMEDIATE); if(retval < 0) return retval; return 0; } int main(int argc, char *argv[]) { comedi_t *device; unsigned up_time; unsigned period_ns; int retval; int subdevice_type; struct parsed_options options; init_parsed_options(&options); options.value = -0.5; parse_options(&options, argc, argv); period_ns = lrint(1e9 / options.freq); if(options.value < 0.) { double duty; if(-options.value < 1.0) duty = -options.value; else duty = 1.0 / -options.value; up_time = lrint(duty * period_ns); } else up_time = lrint(options.value); device = comedi_open(options.filename); if(!device) { comedi_perror(options.filename); exit(-1); } subdevice_type = comedi_get_subdevice_type(device, options.subdevice); if(subdevice_type < 0) { comedi_perror("comedi_get_subdevice_type()"); return -1; } if(subdevice_type != COMEDI_SUBD_COUNTER) { fprintf(stderr, "Subdevice is not a counter (type %i), but of type %i.\n", COMEDI_SUBD_COUNTER, subdevice_type); return -1; } printf("Generating pulse train on subdevice %d.\n", options.subdevice); printf("Period = %d ns.\n", period_ns); printf("Up Time = %d ns.\n", up_time); printf("Down Time = %d ns.\n", period_ns - up_time); retval = ni_gpct_start_pulse_generator(device, options.subdevice, period_ns, up_time); if(retval < 0) return retval; return 0; } comedilib-0.11.0/demo/antialias.c0000644000000000000000000000443312416542105013450 00000000000000/* * Antialiasing Analog Output Demo * Part of Comedilib * * Copyright (c) 1999,2000 David A. Schleef * * This file may be freely modified, distributed, and combined with * other software, as long as proper attribution is given in the * source code. */ /* Not functional */ /* * Requirements: an analog output subdevice that is capable * of ansynchronous output. * * Normally, the resolution of analog output channels is limited by * the resolution of the D/A converter. However, if you limit the * bandwith of the D/A converter by using a low-pass filter, you * can trade some of the bandwidth for additional resolution. This * is done by changing the output rapidly between two adjacent * values: a signal of an alternating 0,1,0,1,0,1 sequence will * look like 0.5 after an appropriate low-pass filter. * * The disadvantage, of course, is that you lose bandwidth. Worse, * the simple technique demonstrated here will cause predictable * noise in the stop band. More complicated techniques will allow * you to tune the spectrum of the noise in the stop band. */ #include #include #include #include #include #include #include #include #include "examples.h" void ao_antialias(unsigned int data); comedi_t *device; int main(int argc, char *argv[]) { lsampl_t data; int ret; struct parsed_options options; init_parsed_options(&options); parse_options(&options, argc, argv); device = comedi_open(options.filename); if(!device){ comedi_perror(options.filename); exit(0); } data = options.value; if(options.verbose){ printf("writing %d to device=%s subdevice=%d channel=%d range=%d analog reference=%d\n", data, options.filename, options.subdevice, options.channel, options.range, options.aref); } ret = comedi_data_write(device, options.subdevice, options.channel, options.range, options.aref, data); if(ret<0){ comedi_perror(options.filename); exit(0); } printf("%d\n", data); ao_antialias((1000<<16)+1000); return 0; } void ao_antialias(unsigned int data) { unsigned int hibits=data>>16; unsigned int lobits=data&0xffff; int i; unsigned int acc; acc=0; for(i=0;i<100;i++){ acc+=lobits; printf("%d\n",hibits+(acc>>16)); acc&=0xffff; } } comedilib-0.11.0/demo/receiver.c0000644000000000000000000001115012715406005013301 00000000000000/* * Digital I/O example * Part of Comedilib * * Copyright (c) 1999,2000 David A. Schleef * * This file may be freely modified, distributed, and combined with * other software, as long as proper attribution is given in the * source code. */ /* * Requirements: A board with a digital I/O subdevice. Not just * a 'digital input' or 'digital output' subdevice, but one in * which the channels can be configured between input and output. */ #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include #include #include #include "examples.h" int pin_clk = 2; int pin_data = 10; comedi_t *device; #define BUFSZ 1024 sampl_t buf[BUFSZ]; void prepare_cmd(comedi_t *dev, comedi_cmd *cmd, int subdevice); void do_cmd(comedi_t *dev,comedi_cmd *cmd); int main(int argc, char *argv[]) { comedi_t *dev; comedi_cmd cmd; int ret; struct parsed_options options; init_parsed_options(&options); options.channel = -1; parse_options(&options, argc, argv); dev = comedi_open(options.filename); if(!dev){ perror(options.filename); exit(1); } device = dev; if(options.channel >= 0) pin_data = options.channel; ret = fcntl(comedi_fileno(dev),F_SETFL,O_NONBLOCK); if(ret<0)perror("fcntl"); prepare_cmd(dev, &cmd, options.subdevice); do_cmd(dev,&cmd); return 0; } static int c=0; static unsigned int bits =0; void do_cmd(comedi_t *dev,comedi_cmd *cmd) { unsigned int *chanlist; int n_chans; int total=0; int ret; int go; struct timeval timeout; fd_set rdset; chanlist = cmd->chanlist; n_chans = cmd->chanlist_len; ret=comedi_command_test(dev,cmd); //printf("test ret=%d\n",ret); if(ret<0){ printf("errno=%d\n",errno); comedi_perror("comedi_command_test"); return; } dump_cmd(stdout,cmd); cmd->chanlist = chanlist; cmd->chanlist_len = n_chans; ret=comedi_command_test(dev,cmd); printf("test ret=%d\n",ret); if(ret<0){ printf("errno=%d\n",errno); comedi_perror("comedi_command_test"); return; } dump_cmd(stdout,cmd); comedi_set_read_subdevice(dev, cmd->subdev); ret = comedi_get_read_subdevice(dev); if (ret < 0 || ret != cmd->subdev) { fprintf(stderr, "failed to change 'read' subdevice from %d to %d\n", ret, cmd->subdev); return; } cmd->chanlist = chanlist; cmd->chanlist_len = n_chans; ret=comedi_command(dev,cmd); printf("ret=%d\n",ret); if(ret<0){ printf("errno=%d\n",errno); comedi_perror("comedi_command"); return; } go=1; while(go){ FD_ZERO(&rdset); FD_SET(comedi_fileno(dev),&rdset); timeout.tv_sec=0; timeout.tv_usec=50000; ret = select(comedi_fileno(dev)+1,&rdset,NULL,NULL,&timeout); if(ret<0){ perror("select"); }else if(ret==0){ if(c){ fprintf(stderr,"\n"); c=0; bits=0; } }else if(FD_ISSET(comedi_fileno(dev),&rdset)){ ret=read(comedi_fileno(dev),buf,BUFSZ); if(ret<0){ if(errno==EAGAIN){ go = 0; perror("read"); } }else if(ret==0){ go = 0; }else{ int i; total+=ret; for(i=0;i0xa000); c++; if(c>=32){ fprintf(stderr,"\n"); c=0; } #if 0 //printf("%d %d\n",buf[i],buf[i]>0xa000); //printf("%d",buf[i]>0xa000); bits<<=1; bits|=(buf[i]>0xa000); c++; if(c>=33){ #if 0 struct timeval now; gettimeofday(&now,NULL); printf(" %08x %ld.%06ld\n",bits,now.tv_sec,now.tv_usec); c=0; bits=0; #else printf(" %08x\n",bits); c=0; bits=0; #endif } if(!bits)c=0; #endif } fflush(stdout); fflush(stderr); } } } } unsigned int chanlist[16]; /* * This part of the demo measures channels 1, 2, 3, 4 at a rate of * 10 khz, with the inter-sample time at 10 us (100 khz). The number * of scans measured is 10. This is analogous to the old mode2 * acquisition. */ void prepare_cmd(comedi_t *dev,comedi_cmd *cmd, int subdevice) { memset(cmd,0,sizeof(comedi_cmd)); /* the subdevice that the command is sent to */ cmd->subdev = subdevice; /* flags */ cmd->flags = TRIG_WAKE_EOS; cmd->start_src = TRIG_NOW; cmd->start_arg = 0; cmd->scan_begin_src = TRIG_EXT; cmd->scan_begin_arg = CR_EDGE | CR_INVERT | pin_clk; #if 1 cmd->convert_src = TRIG_TIMER; cmd->convert_arg = 1; #else cmd->convert_src = TRIG_ANY; cmd->convert_arg = 0; #endif cmd->scan_end_src = TRIG_COUNT; cmd->scan_end_arg = 1; cmd->stop_src = TRIG_NONE; cmd->stop_arg = 0; cmd->chanlist = chanlist; cmd->chanlist_len = 1; chanlist[0]=CR_PACK(pin_data,0,0); } comedilib-0.11.0/demo/inpn.c0000644000000000000000000000347112416542105012450 00000000000000/* * Multi-channel, multi-range one-shot input demo * Part of Comedilib * * Copyright (c) 1999,2000 David A. Schleef * * This file may be freely modified, distributed, and combined with * other software, as long as proper attribution is given in the * source code. */ /* This demo opens /dev/comedi0 and looks for an analog input subdevice. If it finds one, it measures one sample on each channel for each input range. The value NaN indicates that the measurement was out of range. */ #include #include #include #include #include #include #include #include #include "examples.h" comedi_t *device; int main(int argc, char *argv[]) { int n_chans,chan; int n_ranges; int range; int maxdata; lsampl_t data; double voltage; struct parsed_options options; init_parsed_options(&options); options.subdevice = -1; parse_options(&options, argc, argv); device = comedi_open(options.filename); if(!device){ comedi_perror(options.filename); exit(-1); } if(options.subdevice < 0) { options.subdevice = comedi_find_subdevice_by_type(device, COMEDI_SUBD_AI, 0); if(options.subdevice<0){ printf("no analog input subdevice found\n"); exit(-1); } } n_chans = comedi_get_n_channels(device, options.subdevice); for(chan = 0; chan < n_chans; ++chan){ printf("%d: ", chan); n_ranges = comedi_get_n_ranges(device, options.subdevice, chan); maxdata = comedi_get_maxdata(device, options.subdevice, chan); for(range = 0; range < n_ranges; range++){ comedi_data_read(device, options.subdevice, chan, range, options.aref, &data); voltage = comedi_to_phys(data, comedi_get_range(device, options.subdevice, chan, range), maxdata); printf("%g ", voltage); } printf("\n"); } return 0; } comedilib-0.11.0/demo/select.c0000644000000000000000000001322412715406005012760 00000000000000/* * selet.c - Example of using select() with Comedi * Part of Comedilib * * Copyright (c) 1999,2000 David A. Schleef * * This file may be freely modified, distributed, and combined with * other software, as long as proper attribution is given in the * source code. */ /* * An example for using select() with asynchronous input. This * example requires an asynchronous input subdevice that can * handle TRIG_TIMER as a scan_begin_src. */ #include #include #include #include #include #include #include #include #include #include #include "examples.h" #define N_SCANS 10 #define N_CHANS 16 #define BUFSZ 1000 sampl_t buf[BUFSZ]; const int n_chans = 1; const int n_scans = 10; unsigned int chanlist[4]; comedi_t *device; void prepare_cmd(comedi_t *dev,comedi_cmd *cmd, int subdevice); void do_cmd(comedi_t *dev,comedi_cmd *cmd); int main(int argc, char *argv[]) { comedi_cmd cmd; int i; struct parsed_options options; init_parsed_options(&options); parse_options(&options, argc, argv); device = comedi_open(options.filename); if(!device){ perror(options.filename); exit(1); } fcntl(comedi_fileno(device), F_SETFL, O_NONBLOCK); for(i = 0; i < n_chans; i++){ chanlist[i] = CR_PACK(options.channel + i, options.range, options.aref); } prepare_cmd(device, &cmd, options.subdevice); do_cmd(device, &cmd); return 0; } void do_cmd(comedi_t *dev,comedi_cmd *cmd) { int total=0; int ret; int go; fd_set rdset; struct timeval timeout; ret=comedi_command_test(dev,cmd); printf("test ret=%d\n",ret); if(ret<0){ printf("errno=%d\n",errno); comedi_perror("comedi_command_test"); return; } dump_cmd(stdout,cmd); ret=comedi_command_test(dev,cmd); printf("test ret=%d\n",ret); if(ret<0){ printf("errno=%d\n",errno); comedi_perror("comedi_command_test"); return; } dump_cmd(stdout,cmd); comedi_set_read_subdevice(dev, cmd->subdev); ret = comedi_get_read_subdevice(dev); if (ret < 0 || ret != cmd->subdev) { fprintf(stderr, "failed to change 'read' subdevice from %d to %d\n", ret, cmd->subdev); return; } ret=comedi_command(dev,cmd); printf("ret=%d\n",ret); if(ret<0){ printf("errno=%d\n",errno); comedi_perror("comedi_command"); return; } go=1; while(go){ FD_ZERO(&rdset); FD_SET(comedi_fileno(device),&rdset); timeout.tv_sec = 0; timeout.tv_usec = 50000; ret = select(comedi_fileno(dev)+1,&rdset,NULL,NULL,&timeout); printf("select returned %d\n",ret); if(ret<0){ perror("select"); }else if(ret==0){ /* hit timeout */ printf("timeout\n"); }else if(FD_ISSET(comedi_fileno(device),&rdset)){ /* comedi file descriptor became ready */ printf("comedi file descriptor ready\n"); ret=read(comedi_fileno(dev),buf,sizeof(buf)); printf("read returned %d\n",ret); if(ret<0){ if(errno==EAGAIN){ go = 0; perror("read"); } }else if(ret==0){ go = 0; }else{ int i; total+=ret; //printf("read %d %d\n",ret,total); for(i=0;isubdev = subdevice; /* flags */ cmd->flags = TRIG_WAKE_EOS; //cmd.flags = 0; /* each event requires a trigger, which is specified by a source and an argument. For example, to specify an external digital line 3 as a source, you would use src=TRIG_EXT and arg=3. */ /* In this case, we specify using TRIG_NOW to start * acquisition immediately when the command is issued. * The argument of TRIG_NOW is "number of nsec after * NOW", but no driver supports it yet. Also, no driver * currently supports using a start_src other than * TRIG_NOW. */ cmd->start_src = TRIG_NOW; cmd->start_arg = 0; /* The timing of the beginning of each scan is controlled * by scan_begin. TRIG_TIMER specifies that scan_start * events occur periodically at a rate of scan_begin_arg * nanoseconds between scans. */ cmd->scan_begin_src = TRIG_TIMER; cmd->scan_begin_arg = msec_to_nsec(100); /* The timing between each sample in a scan is controlled * by convert. Like above, TRIG_TIMER specifies that * convert events occur periodically at a rate of convert_arg * nanoseconds between scans. */ cmd->convert_src = TRIG_TIMER; cmd->convert_arg = msec_to_nsec(1); /* The end of each scan is almost always specified using * TRIG_COUNT, with the argument being the same as the * number of channels in the chanlist. You could probably * find a device that allows something else, but it would * be strange. */ cmd->scan_end_src = TRIG_COUNT; cmd->scan_end_arg = n_chans; /* number of channels */ /* The end of acquisition is controlled by stop_src and * stop_arg. The src will typically be TRIG_COUNT or * TRIG_NONE. Specifying TRIG_COUNT will stop acquisition * after stop_arg number of scans, or TRIG_NONE will * cause acquisition to continue until stopped using * comedi_cancel(). */ cmd->stop_src = TRIG_COUNT; cmd->stop_arg = n_scans; /* the channel list determined which channels are sampled. In general, chanlist_len is the same as scan_end_arg. Most boards require this. */ cmd->chanlist = chanlist; cmd->chanlist_len = n_chans; } comedilib-0.11.0/demo/ao_mmap.c0000644000000000000000000001122112715406005013105 00000000000000/* * Asynchronous Analog Output Example * Part of Comedilib * * Copyright (c) 1999,2000 David A. Schleef * Copyright (c) 2005 Frank Mori Hess * * This file may be freely modified, distributed, and combined with * other software, as long as proper attribution is given in the * source code. */ /* * Requirements: Analog output device capable of * asynchronous commands. * * This demo uses an analog output subdevice with an * asynchronous command to generate a waveform. The * waveform in this example is a sine wave (surprise!). * The waveform data is passed to comedi through * a memory mapping (as opposed to using write()). * The entire buffer is filled once with one period * of the waveform. */ #include #include #include #include #include #include #include #include #include #include #include #include "examples.h" static void write_waveform(sampl_t *buffer, int size, double amplitude, double offset, int maxdata) { int i; for(i = 0; i < size; ++i) { double temp = (amplitude / 2.) * sin((2. * M_PI * i) / size) + offset; if(temp < 0.) temp = 0.; if(temp > maxdata) temp = maxdata; buffer[i] = (sampl_t)temp; } } int main(int argc, char *argv[]) { comedi_cmd cmd; int err; comedi_t *dev; unsigned int chanlist[16]; unsigned int maxdata; comedi_range *rng; int ret; int size; int num_samples; sampl_t *map; /* peak-to-peak amplitude, in DAC units (i.e., 0-4095) */ double amplitude; /* offset, in DAC units */ double offset; struct parsed_options options; init_parsed_options(&options); options.subdevice = -1; parse_options(&options, argc, argv); /* Force n_chan to be 1 */ options.n_chan = 1; dev = comedi_open(options.filename); if(dev == NULL){ fprintf(stderr, "error opening %s\n", options.filename); return -1; } if(options.subdevice < 0) options.subdevice = comedi_find_subdevice_by_type(dev,COMEDI_SUBD_AO, 0); maxdata = comedi_get_maxdata(dev, options.subdevice, 0); rng = comedi_get_range(dev, options.subdevice, 0, 0); offset = (double)comedi_from_phys(0.0, rng, maxdata); amplitude = (double)comedi_from_phys(1.0, rng, maxdata) - offset; memset(&cmd,0,sizeof(cmd)); cmd.subdev = options.subdevice; cmd.flags = 0; cmd.start_src = TRIG_INT; cmd.start_arg = 0; cmd.scan_begin_src = TRIG_TIMER; cmd.scan_begin_arg = 1e9 / options.freq; cmd.convert_src = TRIG_NOW; cmd.convert_arg = 0; cmd.scan_end_src = TRIG_COUNT; cmd.scan_end_arg = options.n_chan; cmd.stop_src = TRIG_NONE; cmd.stop_arg = 0; cmd.chanlist = chanlist; cmd.chanlist_len = options.n_chan; chanlist[0] = CR_PACK(options.channel, options.range, options.aref); dump_cmd(stdout, &cmd); err = comedi_command_test(dev, &cmd); if (err < 0) { comedi_perror("comedi_command_test"); exit(1); } err = comedi_command_test(dev, &cmd); if (err < 0) { comedi_perror("comedi_command_test"); exit(1); } /* * The 'write' subdevice needs to be correct for 'mmap', below, to * map the correct buffer! */ comedi_set_write_subdevice(dev, cmd.subdev); ret = comedi_get_write_subdevice(dev); if (ret < 0 || ret != cmd.subdev) { fprintf(stderr, "failed to change 'write' subdevice from %d to %d\n", ret, cmd.subdev); exit(1); } if ((err = comedi_command(dev, &cmd)) < 0) { comedi_perror("comedi_command"); exit(1); } size = comedi_get_buffer_size(dev, options.subdevice); fprintf(stderr, "buffer size is %d\n", size); map = mmap(NULL, size, PROT_WRITE, MAP_SHARED, comedi_fileno(dev), 0); if(map == MAP_FAILED) { perror("mmap"); exit(1); } num_samples = size / sizeof(sampl_t); write_waveform(map, num_samples, amplitude, offset, maxdata); printf("marking %i samples as written\n", num_samples); ret = comedi_mark_buffer_written(dev, options.subdevice, size); if(ret < 0) { comedi_perror("comedi_mark_buffer_written"); exit(1); } ret = comedi_internal_trigger(dev, options.subdevice, 0); if(ret<0){ comedi_perror("comedi_internal_trigger"); exit(1); } while(1) { int bytes_marked = comedi_get_buffer_contents(dev, options.subdevice); int bytes_unmarked = size - bytes_marked; if(bytes_marked < 0) { comedi_perror("comedi_get_buffer_contents"); exit(1); } if(bytes_unmarked > 0) { // this keeps comedi from reporting a buffer underrun if(comedi_mark_buffer_written(dev, options.subdevice, bytes_unmarked) < 0) { comedi_perror("comedi_mark_buffer_written"); exit(1); } printf("marked %lu more samples as written\n", (unsigned long)bytes_unmarked / sizeof(sampl_t)); }else usleep(10000); } return 0; } comedilib-0.11.0/demo/outp.c0000644000000000000000000000227612416542105012475 00000000000000/* * A little output demo * Part of Comedilib * * Copyright (c) 1999,2000 David A. Schleef * * This file may be freely modified, distributed, and combined with * other software, as long as proper attribution is given in the * source code. */ /* * A little output demo */ #include #include #include #include #include #include #include #include #include "examples.h" comedi_t *device; int main(int argc, char *argv[]) { lsampl_t data; int ret; struct parsed_options options; init_parsed_options(&options); parse_options(&options, argc, argv); device = comedi_open(options.filename); if(!device){ comedi_perror(options.filename); exit(-1); } data = options.value; if(options.verbose){ printf("writing %d to device=%s subdevice=%d channel=%d range=%d analog reference=%d\n", data, options.filename, options.subdevice, options.channel, options.range, options.aref); } ret = comedi_data_write(device, options.subdevice, options.channel, options.range, options.aref, data); if(ret < 0){ comedi_perror(options.filename); exit(-1); } printf("%d\n", data); return 0; } comedilib-0.11.0/demo/Makefile.in0000644000000000000000000046021713140064520013405 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ noinst_PROGRAMS = antialias$(EXEEXT) ao_waveform$(EXEEXT) \ ao_mmap$(EXEEXT) apply_cal$(EXEEXT) board_info$(EXEEXT) \ choose_clock$(EXEEXT) choose_filter$(EXEEXT) \ choose_routing$(EXEEXT) cmd$(EXEEXT) do_waveform$(EXEEXT) \ dio$(EXEEXT) eeprom_dump$(EXEEXT) \ gpct_buffered_counting$(EXEEXT) gpct_encoder$(EXEEXT) \ gpct_pulse_generator$(EXEEXT) gpct_simple_counting$(EXEEXT) \ inp$(EXEEXT) inpn$(EXEEXT) insn$(EXEEXT) ledclock$(EXEEXT) \ mmap$(EXEEXT) outp$(EXEEXT) poll$(EXEEXT) receiver$(EXEEXT) \ select$(EXEEXT) pwm$(EXEEXT) sender$(EXEEXT) sigio$(EXEEXT) \ sv$(EXEEXT) tut1$(EXEEXT) tut2$(EXEEXT) tut3$(EXEEXT) subdir = demo ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/am-check-python-headers.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/as-libtool.m4 $(top_srcdir)/m4/ax_tls.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_antialias_OBJECTS = antialias-antialias.$(OBJEXT) \ antialias-common.$(OBJEXT) antialias_OBJECTS = $(am_antialias_OBJECTS) am__DEPENDENCIES_1 = antialias_DEPENDENCIES = $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = antialias_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(antialias_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_ao_mmap_OBJECTS = ao_mmap-ao_mmap.$(OBJEXT) \ ao_mmap-common.$(OBJEXT) ao_mmap_OBJECTS = $(am_ao_mmap_OBJECTS) ao_mmap_DEPENDENCIES = $(am__DEPENDENCIES_1) ao_mmap_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(ao_mmap_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_ao_waveform_OBJECTS = ao_waveform-ao_waveform.$(OBJEXT) \ ao_waveform-common.$(OBJEXT) ao_waveform_OBJECTS = $(am_ao_waveform_OBJECTS) ao_waveform_DEPENDENCIES = $(am__DEPENDENCIES_1) ao_waveform_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(ao_waveform_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_apply_cal_OBJECTS = apply_cal-apply_cal.$(OBJEXT) \ apply_cal-common.$(OBJEXT) apply_cal_OBJECTS = $(am_apply_cal_OBJECTS) apply_cal_DEPENDENCIES = $(am__DEPENDENCIES_1) apply_cal_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(apply_cal_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_board_info_OBJECTS = board_info-info.$(OBJEXT) \ board_info-common.$(OBJEXT) board_info_OBJECTS = $(am_board_info_OBJECTS) board_info_DEPENDENCIES = $(am__DEPENDENCIES_1) board_info_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(board_info_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_choose_clock_OBJECTS = choose_clock-choose_clock.$(OBJEXT) \ choose_clock-common.$(OBJEXT) choose_clock_OBJECTS = $(am_choose_clock_OBJECTS) choose_clock_DEPENDENCIES = $(am__DEPENDENCIES_1) choose_clock_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(choose_clock_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_choose_filter_OBJECTS = choose_filter-choose_filter.$(OBJEXT) \ choose_filter-common.$(OBJEXT) choose_filter_OBJECTS = $(am_choose_filter_OBJECTS) choose_filter_DEPENDENCIES = $(am__DEPENDENCIES_1) choose_filter_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(choose_filter_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_choose_routing_OBJECTS = choose_routing-choose_routing.$(OBJEXT) \ choose_routing-common.$(OBJEXT) choose_routing_OBJECTS = $(am_choose_routing_OBJECTS) choose_routing_DEPENDENCIES = $(am__DEPENDENCIES_1) choose_routing_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(choose_routing_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \ $@ am_cmd_OBJECTS = cmd-cmd.$(OBJEXT) cmd-common.$(OBJEXT) cmd_OBJECTS = $(am_cmd_OBJECTS) cmd_DEPENDENCIES = $(am__DEPENDENCIES_1) cmd_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(cmd_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_dio_OBJECTS = dio-dio.$(OBJEXT) dio-common.$(OBJEXT) dio_OBJECTS = $(am_dio_OBJECTS) dio_DEPENDENCIES = $(am__DEPENDENCIES_1) dio_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(dio_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_do_waveform_OBJECTS = do_waveform-do_waveform.$(OBJEXT) \ do_waveform-common.$(OBJEXT) do_waveform_OBJECTS = $(am_do_waveform_OBJECTS) do_waveform_DEPENDENCIES = $(am__DEPENDENCIES_1) do_waveform_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(do_waveform_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_eeprom_dump_OBJECTS = eeprom_dump-eeprom_dump.$(OBJEXT) \ eeprom_dump-common.$(OBJEXT) eeprom_dump_OBJECTS = $(am_eeprom_dump_OBJECTS) eeprom_dump_DEPENDENCIES = $(am__DEPENDENCIES_1) eeprom_dump_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(eeprom_dump_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_gpct_buffered_counting_OBJECTS = \ gpct_buffered_counting-gpct_buffered_counting.$(OBJEXT) \ gpct_buffered_counting-common.$(OBJEXT) gpct_buffered_counting_OBJECTS = $(am_gpct_buffered_counting_OBJECTS) gpct_buffered_counting_DEPENDENCIES = $(am__DEPENDENCIES_1) gpct_buffered_counting_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(gpct_buffered_counting_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ am_gpct_encoder_OBJECTS = gpct_encoder-gpct_encoder.$(OBJEXT) \ gpct_encoder-common.$(OBJEXT) gpct_encoder_OBJECTS = $(am_gpct_encoder_OBJECTS) gpct_encoder_DEPENDENCIES = $(am__DEPENDENCIES_1) gpct_encoder_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(gpct_encoder_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_gpct_pulse_generator_OBJECTS = \ gpct_pulse_generator-gpct_pulse_generator.$(OBJEXT) \ gpct_pulse_generator-common.$(OBJEXT) gpct_pulse_generator_OBJECTS = $(am_gpct_pulse_generator_OBJECTS) gpct_pulse_generator_DEPENDENCIES = $(am__DEPENDENCIES_1) gpct_pulse_generator_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(gpct_pulse_generator_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ am_gpct_simple_counting_OBJECTS = \ gpct_simple_counting-gpct_simple_counting.$(OBJEXT) \ gpct_simple_counting-common.$(OBJEXT) gpct_simple_counting_OBJECTS = $(am_gpct_simple_counting_OBJECTS) gpct_simple_counting_DEPENDENCIES = $(am__DEPENDENCIES_1) gpct_simple_counting_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(gpct_simple_counting_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ am_inp_OBJECTS = inp-inp.$(OBJEXT) inp-common.$(OBJEXT) inp_OBJECTS = $(am_inp_OBJECTS) inp_DEPENDENCIES = $(am__DEPENDENCIES_1) inp_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(inp_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_inpn_OBJECTS = inpn-inpn.$(OBJEXT) inpn-common.$(OBJEXT) inpn_OBJECTS = $(am_inpn_OBJECTS) inpn_DEPENDENCIES = $(am__DEPENDENCIES_1) inpn_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(inpn_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_insn_OBJECTS = insn-insn.$(OBJEXT) insn-common.$(OBJEXT) insn_OBJECTS = $(am_insn_OBJECTS) insn_DEPENDENCIES = $(am__DEPENDENCIES_1) insn_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(insn_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_ledclock_OBJECTS = ledclock-ledclock.$(OBJEXT) \ ledclock-common.$(OBJEXT) ledclock_OBJECTS = $(am_ledclock_OBJECTS) ledclock_DEPENDENCIES = $(am__DEPENDENCIES_1) ledclock_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(ledclock_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_mmap_OBJECTS = mmap-mmap.$(OBJEXT) mmap-common.$(OBJEXT) mmap_OBJECTS = $(am_mmap_OBJECTS) mmap_DEPENDENCIES = $(am__DEPENDENCIES_1) mmap_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(mmap_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_outp_OBJECTS = outp-outp.$(OBJEXT) outp-common.$(OBJEXT) outp_OBJECTS = $(am_outp_OBJECTS) outp_DEPENDENCIES = $(am__DEPENDENCIES_1) outp_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(outp_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_poll_OBJECTS = poll-poll.$(OBJEXT) poll-common.$(OBJEXT) poll_OBJECTS = $(am_poll_OBJECTS) poll_DEPENDENCIES = $(am__DEPENDENCIES_1) poll_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(poll_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_pwm_OBJECTS = pwm-pwm.$(OBJEXT) pwm-common.$(OBJEXT) pwm_OBJECTS = $(am_pwm_OBJECTS) pwm_DEPENDENCIES = $(am__DEPENDENCIES_1) pwm_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(pwm_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_receiver_OBJECTS = receiver-receiver.$(OBJEXT) \ receiver-common.$(OBJEXT) receiver_OBJECTS = $(am_receiver_OBJECTS) receiver_DEPENDENCIES = $(am__DEPENDENCIES_1) receiver_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(receiver_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_select_OBJECTS = select-select.$(OBJEXT) select-common.$(OBJEXT) select_OBJECTS = $(am_select_OBJECTS) select_DEPENDENCIES = $(am__DEPENDENCIES_1) select_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(select_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_sender_OBJECTS = sender-sender.$(OBJEXT) sender-common.$(OBJEXT) sender_OBJECTS = $(am_sender_OBJECTS) sender_DEPENDENCIES = $(am__DEPENDENCIES_1) sender_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(sender_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_sigio_OBJECTS = sigio-sigio.$(OBJEXT) sigio-common.$(OBJEXT) sigio_OBJECTS = $(am_sigio_OBJECTS) sigio_DEPENDENCIES = $(am__DEPENDENCIES_1) sigio_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(sigio_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_sv_OBJECTS = sv-sv.$(OBJEXT) sv-common.$(OBJEXT) sv_OBJECTS = $(am_sv_OBJECTS) sv_DEPENDENCIES = $(am__DEPENDENCIES_1) sv_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(sv_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_tut1_OBJECTS = tut1-tut1.$(OBJEXT) tut1_OBJECTS = $(am_tut1_OBJECTS) tut1_DEPENDENCIES = $(am__DEPENDENCIES_1) tut1_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(tut1_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_tut2_OBJECTS = tut2-tut2.$(OBJEXT) tut2_OBJECTS = $(am_tut2_OBJECTS) tut2_DEPENDENCIES = $(am__DEPENDENCIES_1) tut2_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(tut2_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_tut3_OBJECTS = tut3-tut3.$(OBJEXT) tut3_OBJECTS = $(am_tut3_OBJECTS) tut3_DEPENDENCIES = $(am__DEPENDENCIES_1) tut3_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(tut3_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(antialias_SOURCES) $(ao_mmap_SOURCES) \ $(ao_waveform_SOURCES) $(apply_cal_SOURCES) \ $(board_info_SOURCES) $(choose_clock_SOURCES) \ $(choose_filter_SOURCES) $(choose_routing_SOURCES) \ $(cmd_SOURCES) $(dio_SOURCES) $(do_waveform_SOURCES) \ $(eeprom_dump_SOURCES) $(gpct_buffered_counting_SOURCES) \ $(gpct_encoder_SOURCES) $(gpct_pulse_generator_SOURCES) \ $(gpct_simple_counting_SOURCES) $(inp_SOURCES) $(inpn_SOURCES) \ $(insn_SOURCES) $(ledclock_SOURCES) $(mmap_SOURCES) \ $(outp_SOURCES) $(poll_SOURCES) $(pwm_SOURCES) \ $(receiver_SOURCES) $(select_SOURCES) $(sender_SOURCES) \ $(sigio_SOURCES) $(sv_SOURCES) $(tut1_SOURCES) $(tut2_SOURCES) \ $(tut3_SOURCES) DIST_SOURCES = $(antialias_SOURCES) $(ao_mmap_SOURCES) \ $(ao_waveform_SOURCES) $(apply_cal_SOURCES) \ $(board_info_SOURCES) $(choose_clock_SOURCES) \ $(choose_filter_SOURCES) $(choose_routing_SOURCES) \ $(cmd_SOURCES) $(dio_SOURCES) $(do_waveform_SOURCES) \ $(eeprom_dump_SOURCES) $(gpct_buffered_counting_SOURCES) \ $(gpct_encoder_SOURCES) $(gpct_pulse_generator_SOURCES) \ $(gpct_simple_counting_SOURCES) $(inp_SOURCES) $(inpn_SOURCES) \ $(insn_SOURCES) $(ledclock_SOURCES) $(mmap_SOURCES) \ $(outp_SOURCES) $(poll_SOURCES) $(pwm_SOURCES) \ $(receiver_SOURCES) $(select_SOURCES) $(sender_SOURCES) \ $(sigio_SOURCES) $(sv_SOURCES) $(tut1_SOURCES) $(tut2_SOURCES) \ $(tut3_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COMEDILIB_AGE = @COMEDILIB_AGE@ COMEDILIB_CFLAGS = @COMEDILIB_CFLAGS@ COMEDILIB_CURRENT = @COMEDILIB_CURRENT@ COMEDILIB_LIBS = @COMEDILIB_LIBS@ COMEDILIB_LIBVERSION = @COMEDILIB_LIBVERSION@ COMEDILIB_LT_LDFLAGS = @COMEDILIB_LT_LDFLAGS@ COMEDILIB_REVISION = @COMEDILIB_REVISION@ COMEDILIB_VERSION_MAJOR = @COMEDILIB_VERSION_MAJOR@ COMEDILIB_VERSION_MICRO = @COMEDILIB_VERSION_MICRO@ COMEDILIB_VERSION_MINOR = @COMEDILIB_VERSION_MINOR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_BACKEND = @PDF_BACKEND@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_QUIET = @PYTHON_QUIET@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_CONFIG_OPTIONS = @RUBY_CONFIG_OPTIONS@ RUBY_PREFIX = @RUBY_PREFIX@ RUBY_SO_DIR = @RUBY_SO_DIR@ SCXI_SO_VERSION = @SCXI_SO_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ VERSION = @VERSION@ XMLTO = @XMLTO@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pcmciadir = @pcmciadir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ udevfirmwaredir = @udevfirmwaredir@ udevrulesdir = @udevrulesdir@ udevscriptsdir = @udevscriptsdir@ noinst_HEADERS = examples.h antialias_SOURCES = antialias.c common.c antialias_CFLAGS = $(COMEDILIB_CFLAGS) antialias_LDADD = $(COMEDILIB_LIBS) ao_waveform_SOURCES = ao_waveform.c common.c ao_waveform_CFLAGS = $(COMEDILIB_CFLAGS) ao_waveform_LDADD = $(COMEDILIB_LIBS) ao_mmap_SOURCES = ao_mmap.c common.c ao_mmap_CFLAGS = $(COMEDILIB_CFLAGS) ao_mmap_LDADD = $(COMEDILIB_LIBS) apply_cal_SOURCES = apply_cal.c common.c apply_cal_CFLAGS = $(COMEDILIB_CFLAGS) apply_cal_LDADD = $(COMEDILIB_LIBS) board_info_SOURCES = info.c common.c board_info_CFLAGS = $(COMEDILIB_CFLAGS) board_info_LDADD = $(COMEDILIB_LIBS) choose_clock_SOURCES = choose_clock.c common.c choose_clock_CFLAGS = $(COMEDILIB_CFLAGS) choose_clock_LDADD = $(COMEDILIB_LIBS) choose_filter_SOURCES = choose_filter.c common.c choose_filter_CFLAGS = $(COMEDILIB_CFLAGS) choose_filter_LDADD = $(COMEDILIB_LIBS) choose_routing_SOURCES = choose_routing.c common.c choose_routing_CFLAGS = $(COMEDILIB_CFLAGS) choose_routing_LDADD = $(COMEDILIB_LIBS) cmd_SOURCES = cmd.c common.c cmd_CFLAGS = $(COMEDILIB_CFLAGS) cmd_LDADD = $(COMEDILIB_LIBS) dio_SOURCES = dio.c common.c dio_CFLAGS = $(COMEDILIB_CFLAGS) dio_LDADD = $(COMEDILIB_LIBS) do_waveform_SOURCES = do_waveform.c common.c do_waveform_CFLAGS = $(COMEDILIB_CFLAGS) do_waveform_LDADD = $(COMEDILIB_LIBS) eeprom_dump_SOURCES = eeprom_dump.c common.c eeprom_dump_CFLAGS = $(COMEDILIB_CFLAGS) eeprom_dump_LDADD = $(COMEDILIB_LIBS) gpct_buffered_counting_SOURCES = gpct_buffered_counting.c common.c gpct_buffered_counting_CFLAGS = $(COMEDILIB_CFLAGS) gpct_buffered_counting_LDADD = $(COMEDILIB_LIBS) gpct_encoder_SOURCES = gpct_encoder.c common.c gpct_encoder_CFLAGS = $(COMEDILIB_CFLAGS) gpct_encoder_LDADD = $(COMEDILIB_LIBS) gpct_pulse_generator_SOURCES = gpct_pulse_generator.c common.c gpct_pulse_generator_CFLAGS = $(COMEDILIB_CFLAGS) gpct_pulse_generator_LDADD = $(COMEDILIB_LIBS) gpct_simple_counting_SOURCES = gpct_simple_counting.c common.c gpct_simple_counting_CFLAGS = $(COMEDILIB_CFLAGS) gpct_simple_counting_LDADD = $(COMEDILIB_LIBS) inp_SOURCES = inp.c common.c inp_CFLAGS = $(COMEDILIB_CFLAGS) inp_LDADD = $(COMEDILIB_LIBS) inpn_SOURCES = inpn.c common.c inpn_CFLAGS = $(COMEDILIB_CFLAGS) inpn_LDADD = $(COMEDILIB_LIBS) insn_SOURCES = insn.c common.c insn_CFLAGS = $(COMEDILIB_CFLAGS) insn_LDADD = $(COMEDILIB_LIBS) ledclock_SOURCES = ledclock.c common.c ledclock_CFLAGS = $(COMEDILIB_CFLAGS) ledclock_LDADD = $(COMEDILIB_LIBS) mmap_SOURCES = mmap.c common.c mmap_CFLAGS = $(COMEDILIB_CFLAGS) mmap_LDADD = $(COMEDILIB_LIBS) outp_SOURCES = outp.c common.c outp_CFLAGS = $(COMEDILIB_CFLAGS) outp_LDADD = $(COMEDILIB_LIBS) poll_SOURCES = poll.c common.c poll_CFLAGS = $(COMEDILIB_CFLAGS) poll_LDADD = $(COMEDILIB_LIBS) pwm_SOURCES = pwm.c common.c pwm_CFLAGS = $(COMEDILIB_CFLAGS) pwm_LDADD = $(COMEDILIB_LIBS) receiver_SOURCES = receiver.c common.c receiver_CFLAGS = $(COMEDILIB_CFLAGS) receiver_LDADD = $(COMEDILIB_LIBS) select_SOURCES = select.c common.c select_CFLAGS = $(COMEDILIB_CFLAGS) select_LDADD = $(COMEDILIB_LIBS) sender_SOURCES = sender.c common.c sender_CFLAGS = $(COMEDILIB_CFLAGS) sender_LDADD = $(COMEDILIB_LIBS) sigio_SOURCES = sigio.c common.c sigio_CFLAGS = $(COMEDILIB_CFLAGS) sigio_LDADD = $(COMEDILIB_LIBS) sv_SOURCES = sv.c common.c sv_CFLAGS = $(COMEDILIB_CFLAGS) sv_LDADD = $(COMEDILIB_LIBS) tut1_SOURCES = tut1.c tut1_CFLAGS = $(COMEDILIB_CFLAGS) tut1_LDADD = $(COMEDILIB_LIBS) tut2_SOURCES = tut2.c tut2_CFLAGS = $(COMEDILIB_CFLAGS) tut2_LDADD = $(COMEDILIB_LIBS) tut3_SOURCES = tut3.c tut3_CFLAGS = $(COMEDILIB_CFLAGS) tut3_LDADD = $(COMEDILIB_LIBS) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu demo/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu demo/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list antialias$(EXEEXT): $(antialias_OBJECTS) $(antialias_DEPENDENCIES) $(EXTRA_antialias_DEPENDENCIES) @rm -f antialias$(EXEEXT) $(AM_V_CCLD)$(antialias_LINK) $(antialias_OBJECTS) $(antialias_LDADD) $(LIBS) ao_mmap$(EXEEXT): $(ao_mmap_OBJECTS) $(ao_mmap_DEPENDENCIES) $(EXTRA_ao_mmap_DEPENDENCIES) @rm -f ao_mmap$(EXEEXT) $(AM_V_CCLD)$(ao_mmap_LINK) $(ao_mmap_OBJECTS) $(ao_mmap_LDADD) $(LIBS) ao_waveform$(EXEEXT): $(ao_waveform_OBJECTS) $(ao_waveform_DEPENDENCIES) $(EXTRA_ao_waveform_DEPENDENCIES) @rm -f ao_waveform$(EXEEXT) $(AM_V_CCLD)$(ao_waveform_LINK) $(ao_waveform_OBJECTS) $(ao_waveform_LDADD) $(LIBS) apply_cal$(EXEEXT): $(apply_cal_OBJECTS) $(apply_cal_DEPENDENCIES) $(EXTRA_apply_cal_DEPENDENCIES) @rm -f apply_cal$(EXEEXT) $(AM_V_CCLD)$(apply_cal_LINK) $(apply_cal_OBJECTS) $(apply_cal_LDADD) $(LIBS) board_info$(EXEEXT): $(board_info_OBJECTS) $(board_info_DEPENDENCIES) $(EXTRA_board_info_DEPENDENCIES) @rm -f board_info$(EXEEXT) $(AM_V_CCLD)$(board_info_LINK) $(board_info_OBJECTS) $(board_info_LDADD) $(LIBS) choose_clock$(EXEEXT): $(choose_clock_OBJECTS) $(choose_clock_DEPENDENCIES) $(EXTRA_choose_clock_DEPENDENCIES) @rm -f choose_clock$(EXEEXT) $(AM_V_CCLD)$(choose_clock_LINK) $(choose_clock_OBJECTS) $(choose_clock_LDADD) $(LIBS) choose_filter$(EXEEXT): $(choose_filter_OBJECTS) $(choose_filter_DEPENDENCIES) $(EXTRA_choose_filter_DEPENDENCIES) @rm -f choose_filter$(EXEEXT) $(AM_V_CCLD)$(choose_filter_LINK) $(choose_filter_OBJECTS) $(choose_filter_LDADD) $(LIBS) choose_routing$(EXEEXT): $(choose_routing_OBJECTS) $(choose_routing_DEPENDENCIES) $(EXTRA_choose_routing_DEPENDENCIES) @rm -f choose_routing$(EXEEXT) $(AM_V_CCLD)$(choose_routing_LINK) $(choose_routing_OBJECTS) $(choose_routing_LDADD) $(LIBS) cmd$(EXEEXT): $(cmd_OBJECTS) $(cmd_DEPENDENCIES) $(EXTRA_cmd_DEPENDENCIES) @rm -f cmd$(EXEEXT) $(AM_V_CCLD)$(cmd_LINK) $(cmd_OBJECTS) $(cmd_LDADD) $(LIBS) dio$(EXEEXT): $(dio_OBJECTS) $(dio_DEPENDENCIES) $(EXTRA_dio_DEPENDENCIES) @rm -f dio$(EXEEXT) $(AM_V_CCLD)$(dio_LINK) $(dio_OBJECTS) $(dio_LDADD) $(LIBS) do_waveform$(EXEEXT): $(do_waveform_OBJECTS) $(do_waveform_DEPENDENCIES) $(EXTRA_do_waveform_DEPENDENCIES) @rm -f do_waveform$(EXEEXT) $(AM_V_CCLD)$(do_waveform_LINK) $(do_waveform_OBJECTS) $(do_waveform_LDADD) $(LIBS) eeprom_dump$(EXEEXT): $(eeprom_dump_OBJECTS) $(eeprom_dump_DEPENDENCIES) $(EXTRA_eeprom_dump_DEPENDENCIES) @rm -f eeprom_dump$(EXEEXT) $(AM_V_CCLD)$(eeprom_dump_LINK) $(eeprom_dump_OBJECTS) $(eeprom_dump_LDADD) $(LIBS) gpct_buffered_counting$(EXEEXT): $(gpct_buffered_counting_OBJECTS) $(gpct_buffered_counting_DEPENDENCIES) $(EXTRA_gpct_buffered_counting_DEPENDENCIES) @rm -f gpct_buffered_counting$(EXEEXT) $(AM_V_CCLD)$(gpct_buffered_counting_LINK) $(gpct_buffered_counting_OBJECTS) $(gpct_buffered_counting_LDADD) $(LIBS) gpct_encoder$(EXEEXT): $(gpct_encoder_OBJECTS) $(gpct_encoder_DEPENDENCIES) $(EXTRA_gpct_encoder_DEPENDENCIES) @rm -f gpct_encoder$(EXEEXT) $(AM_V_CCLD)$(gpct_encoder_LINK) $(gpct_encoder_OBJECTS) $(gpct_encoder_LDADD) $(LIBS) gpct_pulse_generator$(EXEEXT): $(gpct_pulse_generator_OBJECTS) $(gpct_pulse_generator_DEPENDENCIES) $(EXTRA_gpct_pulse_generator_DEPENDENCIES) @rm -f gpct_pulse_generator$(EXEEXT) $(AM_V_CCLD)$(gpct_pulse_generator_LINK) $(gpct_pulse_generator_OBJECTS) $(gpct_pulse_generator_LDADD) $(LIBS) gpct_simple_counting$(EXEEXT): $(gpct_simple_counting_OBJECTS) $(gpct_simple_counting_DEPENDENCIES) $(EXTRA_gpct_simple_counting_DEPENDENCIES) @rm -f gpct_simple_counting$(EXEEXT) $(AM_V_CCLD)$(gpct_simple_counting_LINK) $(gpct_simple_counting_OBJECTS) $(gpct_simple_counting_LDADD) $(LIBS) inp$(EXEEXT): $(inp_OBJECTS) $(inp_DEPENDENCIES) $(EXTRA_inp_DEPENDENCIES) @rm -f inp$(EXEEXT) $(AM_V_CCLD)$(inp_LINK) $(inp_OBJECTS) $(inp_LDADD) $(LIBS) inpn$(EXEEXT): $(inpn_OBJECTS) $(inpn_DEPENDENCIES) $(EXTRA_inpn_DEPENDENCIES) @rm -f inpn$(EXEEXT) $(AM_V_CCLD)$(inpn_LINK) $(inpn_OBJECTS) $(inpn_LDADD) $(LIBS) insn$(EXEEXT): $(insn_OBJECTS) $(insn_DEPENDENCIES) $(EXTRA_insn_DEPENDENCIES) @rm -f insn$(EXEEXT) $(AM_V_CCLD)$(insn_LINK) $(insn_OBJECTS) $(insn_LDADD) $(LIBS) ledclock$(EXEEXT): $(ledclock_OBJECTS) $(ledclock_DEPENDENCIES) $(EXTRA_ledclock_DEPENDENCIES) @rm -f ledclock$(EXEEXT) $(AM_V_CCLD)$(ledclock_LINK) $(ledclock_OBJECTS) $(ledclock_LDADD) $(LIBS) mmap$(EXEEXT): $(mmap_OBJECTS) $(mmap_DEPENDENCIES) $(EXTRA_mmap_DEPENDENCIES) @rm -f mmap$(EXEEXT) $(AM_V_CCLD)$(mmap_LINK) $(mmap_OBJECTS) $(mmap_LDADD) $(LIBS) outp$(EXEEXT): $(outp_OBJECTS) $(outp_DEPENDENCIES) $(EXTRA_outp_DEPENDENCIES) @rm -f outp$(EXEEXT) $(AM_V_CCLD)$(outp_LINK) $(outp_OBJECTS) $(outp_LDADD) $(LIBS) poll$(EXEEXT): $(poll_OBJECTS) $(poll_DEPENDENCIES) $(EXTRA_poll_DEPENDENCIES) @rm -f poll$(EXEEXT) $(AM_V_CCLD)$(poll_LINK) $(poll_OBJECTS) $(poll_LDADD) $(LIBS) pwm$(EXEEXT): $(pwm_OBJECTS) $(pwm_DEPENDENCIES) $(EXTRA_pwm_DEPENDENCIES) @rm -f pwm$(EXEEXT) $(AM_V_CCLD)$(pwm_LINK) $(pwm_OBJECTS) $(pwm_LDADD) $(LIBS) receiver$(EXEEXT): $(receiver_OBJECTS) $(receiver_DEPENDENCIES) $(EXTRA_receiver_DEPENDENCIES) @rm -f receiver$(EXEEXT) $(AM_V_CCLD)$(receiver_LINK) $(receiver_OBJECTS) $(receiver_LDADD) $(LIBS) select$(EXEEXT): $(select_OBJECTS) $(select_DEPENDENCIES) $(EXTRA_select_DEPENDENCIES) @rm -f select$(EXEEXT) $(AM_V_CCLD)$(select_LINK) $(select_OBJECTS) $(select_LDADD) $(LIBS) sender$(EXEEXT): $(sender_OBJECTS) $(sender_DEPENDENCIES) $(EXTRA_sender_DEPENDENCIES) @rm -f sender$(EXEEXT) $(AM_V_CCLD)$(sender_LINK) $(sender_OBJECTS) $(sender_LDADD) $(LIBS) sigio$(EXEEXT): $(sigio_OBJECTS) $(sigio_DEPENDENCIES) $(EXTRA_sigio_DEPENDENCIES) @rm -f sigio$(EXEEXT) $(AM_V_CCLD)$(sigio_LINK) $(sigio_OBJECTS) $(sigio_LDADD) $(LIBS) sv$(EXEEXT): $(sv_OBJECTS) $(sv_DEPENDENCIES) $(EXTRA_sv_DEPENDENCIES) @rm -f sv$(EXEEXT) $(AM_V_CCLD)$(sv_LINK) $(sv_OBJECTS) $(sv_LDADD) $(LIBS) tut1$(EXEEXT): $(tut1_OBJECTS) $(tut1_DEPENDENCIES) $(EXTRA_tut1_DEPENDENCIES) @rm -f tut1$(EXEEXT) $(AM_V_CCLD)$(tut1_LINK) $(tut1_OBJECTS) $(tut1_LDADD) $(LIBS) tut2$(EXEEXT): $(tut2_OBJECTS) $(tut2_DEPENDENCIES) $(EXTRA_tut2_DEPENDENCIES) @rm -f tut2$(EXEEXT) $(AM_V_CCLD)$(tut2_LINK) $(tut2_OBJECTS) $(tut2_LDADD) $(LIBS) tut3$(EXEEXT): $(tut3_OBJECTS) $(tut3_DEPENDENCIES) $(EXTRA_tut3_DEPENDENCIES) @rm -f tut3$(EXEEXT) $(AM_V_CCLD)$(tut3_LINK) $(tut3_OBJECTS) $(tut3_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/antialias-antialias.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/antialias-common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ao_mmap-ao_mmap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ao_mmap-common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ao_waveform-ao_waveform.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ao_waveform-common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/apply_cal-apply_cal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/apply_cal-common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/board_info-common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/board_info-info.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/choose_clock-choose_clock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/choose_clock-common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/choose_filter-choose_filter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/choose_filter-common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/choose_routing-choose_routing.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/choose_routing-common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmd-cmd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmd-common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dio-common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dio-dio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/do_waveform-common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/do_waveform-do_waveform.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eeprom_dump-common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eeprom_dump-eeprom_dump.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpct_buffered_counting-common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpct_buffered_counting-gpct_buffered_counting.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpct_encoder-common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpct_encoder-gpct_encoder.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpct_pulse_generator-common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpct_pulse_generator-gpct_pulse_generator.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpct_simple_counting-common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpct_simple_counting-gpct_simple_counting.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inp-common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inp-inp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inpn-common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inpn-inpn.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/insn-common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/insn-insn.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ledclock-common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ledclock-ledclock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmap-common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmap-mmap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/outp-common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/outp-outp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/poll-common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/poll-poll.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pwm-common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pwm-pwm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/receiver-common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/receiver-receiver.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/select-common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/select-select.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sender-common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sender-sender.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigio-common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigio-sigio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sv-common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sv-sv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tut1-tut1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tut2-tut2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tut3-tut3.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< antialias-antialias.o: antialias.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(antialias_CFLAGS) $(CFLAGS) -MT antialias-antialias.o -MD -MP -MF $(DEPDIR)/antialias-antialias.Tpo -c -o antialias-antialias.o `test -f 'antialias.c' || echo '$(srcdir)/'`antialias.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/antialias-antialias.Tpo $(DEPDIR)/antialias-antialias.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='antialias.c' object='antialias-antialias.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(antialias_CFLAGS) $(CFLAGS) -c -o antialias-antialias.o `test -f 'antialias.c' || echo '$(srcdir)/'`antialias.c antialias-antialias.obj: antialias.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(antialias_CFLAGS) $(CFLAGS) -MT antialias-antialias.obj -MD -MP -MF $(DEPDIR)/antialias-antialias.Tpo -c -o antialias-antialias.obj `if test -f 'antialias.c'; then $(CYGPATH_W) 'antialias.c'; else $(CYGPATH_W) '$(srcdir)/antialias.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/antialias-antialias.Tpo $(DEPDIR)/antialias-antialias.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='antialias.c' object='antialias-antialias.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(antialias_CFLAGS) $(CFLAGS) -c -o antialias-antialias.obj `if test -f 'antialias.c'; then $(CYGPATH_W) 'antialias.c'; else $(CYGPATH_W) '$(srcdir)/antialias.c'; fi` antialias-common.o: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(antialias_CFLAGS) $(CFLAGS) -MT antialias-common.o -MD -MP -MF $(DEPDIR)/antialias-common.Tpo -c -o antialias-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/antialias-common.Tpo $(DEPDIR)/antialias-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='antialias-common.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(antialias_CFLAGS) $(CFLAGS) -c -o antialias-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c antialias-common.obj: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(antialias_CFLAGS) $(CFLAGS) -MT antialias-common.obj -MD -MP -MF $(DEPDIR)/antialias-common.Tpo -c -o antialias-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/antialias-common.Tpo $(DEPDIR)/antialias-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='antialias-common.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(antialias_CFLAGS) $(CFLAGS) -c -o antialias-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` ao_mmap-ao_mmap.o: ao_mmap.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ao_mmap_CFLAGS) $(CFLAGS) -MT ao_mmap-ao_mmap.o -MD -MP -MF $(DEPDIR)/ao_mmap-ao_mmap.Tpo -c -o ao_mmap-ao_mmap.o `test -f 'ao_mmap.c' || echo '$(srcdir)/'`ao_mmap.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ao_mmap-ao_mmap.Tpo $(DEPDIR)/ao_mmap-ao_mmap.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ao_mmap.c' object='ao_mmap-ao_mmap.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ao_mmap_CFLAGS) $(CFLAGS) -c -o ao_mmap-ao_mmap.o `test -f 'ao_mmap.c' || echo '$(srcdir)/'`ao_mmap.c ao_mmap-ao_mmap.obj: ao_mmap.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ao_mmap_CFLAGS) $(CFLAGS) -MT ao_mmap-ao_mmap.obj -MD -MP -MF $(DEPDIR)/ao_mmap-ao_mmap.Tpo -c -o ao_mmap-ao_mmap.obj `if test -f 'ao_mmap.c'; then $(CYGPATH_W) 'ao_mmap.c'; else $(CYGPATH_W) '$(srcdir)/ao_mmap.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ao_mmap-ao_mmap.Tpo $(DEPDIR)/ao_mmap-ao_mmap.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ao_mmap.c' object='ao_mmap-ao_mmap.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ao_mmap_CFLAGS) $(CFLAGS) -c -o ao_mmap-ao_mmap.obj `if test -f 'ao_mmap.c'; then $(CYGPATH_W) 'ao_mmap.c'; else $(CYGPATH_W) '$(srcdir)/ao_mmap.c'; fi` ao_mmap-common.o: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ao_mmap_CFLAGS) $(CFLAGS) -MT ao_mmap-common.o -MD -MP -MF $(DEPDIR)/ao_mmap-common.Tpo -c -o ao_mmap-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ao_mmap-common.Tpo $(DEPDIR)/ao_mmap-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='ao_mmap-common.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ao_mmap_CFLAGS) $(CFLAGS) -c -o ao_mmap-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c ao_mmap-common.obj: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ao_mmap_CFLAGS) $(CFLAGS) -MT ao_mmap-common.obj -MD -MP -MF $(DEPDIR)/ao_mmap-common.Tpo -c -o ao_mmap-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ao_mmap-common.Tpo $(DEPDIR)/ao_mmap-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='ao_mmap-common.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ao_mmap_CFLAGS) $(CFLAGS) -c -o ao_mmap-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` ao_waveform-ao_waveform.o: ao_waveform.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ao_waveform_CFLAGS) $(CFLAGS) -MT ao_waveform-ao_waveform.o -MD -MP -MF $(DEPDIR)/ao_waveform-ao_waveform.Tpo -c -o ao_waveform-ao_waveform.o `test -f 'ao_waveform.c' || echo '$(srcdir)/'`ao_waveform.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ao_waveform-ao_waveform.Tpo $(DEPDIR)/ao_waveform-ao_waveform.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ao_waveform.c' object='ao_waveform-ao_waveform.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ao_waveform_CFLAGS) $(CFLAGS) -c -o ao_waveform-ao_waveform.o `test -f 'ao_waveform.c' || echo '$(srcdir)/'`ao_waveform.c ao_waveform-ao_waveform.obj: ao_waveform.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ao_waveform_CFLAGS) $(CFLAGS) -MT ao_waveform-ao_waveform.obj -MD -MP -MF $(DEPDIR)/ao_waveform-ao_waveform.Tpo -c -o ao_waveform-ao_waveform.obj `if test -f 'ao_waveform.c'; then $(CYGPATH_W) 'ao_waveform.c'; else $(CYGPATH_W) '$(srcdir)/ao_waveform.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ao_waveform-ao_waveform.Tpo $(DEPDIR)/ao_waveform-ao_waveform.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ao_waveform.c' object='ao_waveform-ao_waveform.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ao_waveform_CFLAGS) $(CFLAGS) -c -o ao_waveform-ao_waveform.obj `if test -f 'ao_waveform.c'; then $(CYGPATH_W) 'ao_waveform.c'; else $(CYGPATH_W) '$(srcdir)/ao_waveform.c'; fi` ao_waveform-common.o: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ao_waveform_CFLAGS) $(CFLAGS) -MT ao_waveform-common.o -MD -MP -MF $(DEPDIR)/ao_waveform-common.Tpo -c -o ao_waveform-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ao_waveform-common.Tpo $(DEPDIR)/ao_waveform-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='ao_waveform-common.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ao_waveform_CFLAGS) $(CFLAGS) -c -o ao_waveform-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c ao_waveform-common.obj: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ao_waveform_CFLAGS) $(CFLAGS) -MT ao_waveform-common.obj -MD -MP -MF $(DEPDIR)/ao_waveform-common.Tpo -c -o ao_waveform-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ao_waveform-common.Tpo $(DEPDIR)/ao_waveform-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='ao_waveform-common.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ao_waveform_CFLAGS) $(CFLAGS) -c -o ao_waveform-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` apply_cal-apply_cal.o: apply_cal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(apply_cal_CFLAGS) $(CFLAGS) -MT apply_cal-apply_cal.o -MD -MP -MF $(DEPDIR)/apply_cal-apply_cal.Tpo -c -o apply_cal-apply_cal.o `test -f 'apply_cal.c' || echo '$(srcdir)/'`apply_cal.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/apply_cal-apply_cal.Tpo $(DEPDIR)/apply_cal-apply_cal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='apply_cal.c' object='apply_cal-apply_cal.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(apply_cal_CFLAGS) $(CFLAGS) -c -o apply_cal-apply_cal.o `test -f 'apply_cal.c' || echo '$(srcdir)/'`apply_cal.c apply_cal-apply_cal.obj: apply_cal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(apply_cal_CFLAGS) $(CFLAGS) -MT apply_cal-apply_cal.obj -MD -MP -MF $(DEPDIR)/apply_cal-apply_cal.Tpo -c -o apply_cal-apply_cal.obj `if test -f 'apply_cal.c'; then $(CYGPATH_W) 'apply_cal.c'; else $(CYGPATH_W) '$(srcdir)/apply_cal.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/apply_cal-apply_cal.Tpo $(DEPDIR)/apply_cal-apply_cal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='apply_cal.c' object='apply_cal-apply_cal.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(apply_cal_CFLAGS) $(CFLAGS) -c -o apply_cal-apply_cal.obj `if test -f 'apply_cal.c'; then $(CYGPATH_W) 'apply_cal.c'; else $(CYGPATH_W) '$(srcdir)/apply_cal.c'; fi` apply_cal-common.o: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(apply_cal_CFLAGS) $(CFLAGS) -MT apply_cal-common.o -MD -MP -MF $(DEPDIR)/apply_cal-common.Tpo -c -o apply_cal-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/apply_cal-common.Tpo $(DEPDIR)/apply_cal-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='apply_cal-common.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(apply_cal_CFLAGS) $(CFLAGS) -c -o apply_cal-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c apply_cal-common.obj: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(apply_cal_CFLAGS) $(CFLAGS) -MT apply_cal-common.obj -MD -MP -MF $(DEPDIR)/apply_cal-common.Tpo -c -o apply_cal-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/apply_cal-common.Tpo $(DEPDIR)/apply_cal-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='apply_cal-common.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(apply_cal_CFLAGS) $(CFLAGS) -c -o apply_cal-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` board_info-info.o: info.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(board_info_CFLAGS) $(CFLAGS) -MT board_info-info.o -MD -MP -MF $(DEPDIR)/board_info-info.Tpo -c -o board_info-info.o `test -f 'info.c' || echo '$(srcdir)/'`info.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/board_info-info.Tpo $(DEPDIR)/board_info-info.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='info.c' object='board_info-info.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(board_info_CFLAGS) $(CFLAGS) -c -o board_info-info.o `test -f 'info.c' || echo '$(srcdir)/'`info.c board_info-info.obj: info.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(board_info_CFLAGS) $(CFLAGS) -MT board_info-info.obj -MD -MP -MF $(DEPDIR)/board_info-info.Tpo -c -o board_info-info.obj `if test -f 'info.c'; then $(CYGPATH_W) 'info.c'; else $(CYGPATH_W) '$(srcdir)/info.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/board_info-info.Tpo $(DEPDIR)/board_info-info.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='info.c' object='board_info-info.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(board_info_CFLAGS) $(CFLAGS) -c -o board_info-info.obj `if test -f 'info.c'; then $(CYGPATH_W) 'info.c'; else $(CYGPATH_W) '$(srcdir)/info.c'; fi` board_info-common.o: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(board_info_CFLAGS) $(CFLAGS) -MT board_info-common.o -MD -MP -MF $(DEPDIR)/board_info-common.Tpo -c -o board_info-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/board_info-common.Tpo $(DEPDIR)/board_info-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='board_info-common.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(board_info_CFLAGS) $(CFLAGS) -c -o board_info-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c board_info-common.obj: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(board_info_CFLAGS) $(CFLAGS) -MT board_info-common.obj -MD -MP -MF $(DEPDIR)/board_info-common.Tpo -c -o board_info-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/board_info-common.Tpo $(DEPDIR)/board_info-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='board_info-common.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(board_info_CFLAGS) $(CFLAGS) -c -o board_info-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` choose_clock-choose_clock.o: choose_clock.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(choose_clock_CFLAGS) $(CFLAGS) -MT choose_clock-choose_clock.o -MD -MP -MF $(DEPDIR)/choose_clock-choose_clock.Tpo -c -o choose_clock-choose_clock.o `test -f 'choose_clock.c' || echo '$(srcdir)/'`choose_clock.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/choose_clock-choose_clock.Tpo $(DEPDIR)/choose_clock-choose_clock.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='choose_clock.c' object='choose_clock-choose_clock.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(choose_clock_CFLAGS) $(CFLAGS) -c -o choose_clock-choose_clock.o `test -f 'choose_clock.c' || echo '$(srcdir)/'`choose_clock.c choose_clock-choose_clock.obj: choose_clock.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(choose_clock_CFLAGS) $(CFLAGS) -MT choose_clock-choose_clock.obj -MD -MP -MF $(DEPDIR)/choose_clock-choose_clock.Tpo -c -o choose_clock-choose_clock.obj `if test -f 'choose_clock.c'; then $(CYGPATH_W) 'choose_clock.c'; else $(CYGPATH_W) '$(srcdir)/choose_clock.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/choose_clock-choose_clock.Tpo $(DEPDIR)/choose_clock-choose_clock.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='choose_clock.c' object='choose_clock-choose_clock.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(choose_clock_CFLAGS) $(CFLAGS) -c -o choose_clock-choose_clock.obj `if test -f 'choose_clock.c'; then $(CYGPATH_W) 'choose_clock.c'; else $(CYGPATH_W) '$(srcdir)/choose_clock.c'; fi` choose_clock-common.o: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(choose_clock_CFLAGS) $(CFLAGS) -MT choose_clock-common.o -MD -MP -MF $(DEPDIR)/choose_clock-common.Tpo -c -o choose_clock-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/choose_clock-common.Tpo $(DEPDIR)/choose_clock-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='choose_clock-common.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(choose_clock_CFLAGS) $(CFLAGS) -c -o choose_clock-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c choose_clock-common.obj: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(choose_clock_CFLAGS) $(CFLAGS) -MT choose_clock-common.obj -MD -MP -MF $(DEPDIR)/choose_clock-common.Tpo -c -o choose_clock-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/choose_clock-common.Tpo $(DEPDIR)/choose_clock-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='choose_clock-common.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(choose_clock_CFLAGS) $(CFLAGS) -c -o choose_clock-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` choose_filter-choose_filter.o: choose_filter.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(choose_filter_CFLAGS) $(CFLAGS) -MT choose_filter-choose_filter.o -MD -MP -MF $(DEPDIR)/choose_filter-choose_filter.Tpo -c -o choose_filter-choose_filter.o `test -f 'choose_filter.c' || echo '$(srcdir)/'`choose_filter.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/choose_filter-choose_filter.Tpo $(DEPDIR)/choose_filter-choose_filter.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='choose_filter.c' object='choose_filter-choose_filter.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(choose_filter_CFLAGS) $(CFLAGS) -c -o choose_filter-choose_filter.o `test -f 'choose_filter.c' || echo '$(srcdir)/'`choose_filter.c choose_filter-choose_filter.obj: choose_filter.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(choose_filter_CFLAGS) $(CFLAGS) -MT choose_filter-choose_filter.obj -MD -MP -MF $(DEPDIR)/choose_filter-choose_filter.Tpo -c -o choose_filter-choose_filter.obj `if test -f 'choose_filter.c'; then $(CYGPATH_W) 'choose_filter.c'; else $(CYGPATH_W) '$(srcdir)/choose_filter.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/choose_filter-choose_filter.Tpo $(DEPDIR)/choose_filter-choose_filter.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='choose_filter.c' object='choose_filter-choose_filter.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(choose_filter_CFLAGS) $(CFLAGS) -c -o choose_filter-choose_filter.obj `if test -f 'choose_filter.c'; then $(CYGPATH_W) 'choose_filter.c'; else $(CYGPATH_W) '$(srcdir)/choose_filter.c'; fi` choose_filter-common.o: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(choose_filter_CFLAGS) $(CFLAGS) -MT choose_filter-common.o -MD -MP -MF $(DEPDIR)/choose_filter-common.Tpo -c -o choose_filter-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/choose_filter-common.Tpo $(DEPDIR)/choose_filter-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='choose_filter-common.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(choose_filter_CFLAGS) $(CFLAGS) -c -o choose_filter-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c choose_filter-common.obj: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(choose_filter_CFLAGS) $(CFLAGS) -MT choose_filter-common.obj -MD -MP -MF $(DEPDIR)/choose_filter-common.Tpo -c -o choose_filter-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/choose_filter-common.Tpo $(DEPDIR)/choose_filter-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='choose_filter-common.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(choose_filter_CFLAGS) $(CFLAGS) -c -o choose_filter-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` choose_routing-choose_routing.o: choose_routing.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(choose_routing_CFLAGS) $(CFLAGS) -MT choose_routing-choose_routing.o -MD -MP -MF $(DEPDIR)/choose_routing-choose_routing.Tpo -c -o choose_routing-choose_routing.o `test -f 'choose_routing.c' || echo '$(srcdir)/'`choose_routing.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/choose_routing-choose_routing.Tpo $(DEPDIR)/choose_routing-choose_routing.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='choose_routing.c' object='choose_routing-choose_routing.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(choose_routing_CFLAGS) $(CFLAGS) -c -o choose_routing-choose_routing.o `test -f 'choose_routing.c' || echo '$(srcdir)/'`choose_routing.c choose_routing-choose_routing.obj: choose_routing.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(choose_routing_CFLAGS) $(CFLAGS) -MT choose_routing-choose_routing.obj -MD -MP -MF $(DEPDIR)/choose_routing-choose_routing.Tpo -c -o choose_routing-choose_routing.obj `if test -f 'choose_routing.c'; then $(CYGPATH_W) 'choose_routing.c'; else $(CYGPATH_W) '$(srcdir)/choose_routing.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/choose_routing-choose_routing.Tpo $(DEPDIR)/choose_routing-choose_routing.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='choose_routing.c' object='choose_routing-choose_routing.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(choose_routing_CFLAGS) $(CFLAGS) -c -o choose_routing-choose_routing.obj `if test -f 'choose_routing.c'; then $(CYGPATH_W) 'choose_routing.c'; else $(CYGPATH_W) '$(srcdir)/choose_routing.c'; fi` choose_routing-common.o: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(choose_routing_CFLAGS) $(CFLAGS) -MT choose_routing-common.o -MD -MP -MF $(DEPDIR)/choose_routing-common.Tpo -c -o choose_routing-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/choose_routing-common.Tpo $(DEPDIR)/choose_routing-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='choose_routing-common.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(choose_routing_CFLAGS) $(CFLAGS) -c -o choose_routing-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c choose_routing-common.obj: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(choose_routing_CFLAGS) $(CFLAGS) -MT choose_routing-common.obj -MD -MP -MF $(DEPDIR)/choose_routing-common.Tpo -c -o choose_routing-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/choose_routing-common.Tpo $(DEPDIR)/choose_routing-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='choose_routing-common.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(choose_routing_CFLAGS) $(CFLAGS) -c -o choose_routing-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` cmd-cmd.o: cmd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cmd_CFLAGS) $(CFLAGS) -MT cmd-cmd.o -MD -MP -MF $(DEPDIR)/cmd-cmd.Tpo -c -o cmd-cmd.o `test -f 'cmd.c' || echo '$(srcdir)/'`cmd.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cmd-cmd.Tpo $(DEPDIR)/cmd-cmd.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cmd.c' object='cmd-cmd.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cmd_CFLAGS) $(CFLAGS) -c -o cmd-cmd.o `test -f 'cmd.c' || echo '$(srcdir)/'`cmd.c cmd-cmd.obj: cmd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cmd_CFLAGS) $(CFLAGS) -MT cmd-cmd.obj -MD -MP -MF $(DEPDIR)/cmd-cmd.Tpo -c -o cmd-cmd.obj `if test -f 'cmd.c'; then $(CYGPATH_W) 'cmd.c'; else $(CYGPATH_W) '$(srcdir)/cmd.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cmd-cmd.Tpo $(DEPDIR)/cmd-cmd.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cmd.c' object='cmd-cmd.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cmd_CFLAGS) $(CFLAGS) -c -o cmd-cmd.obj `if test -f 'cmd.c'; then $(CYGPATH_W) 'cmd.c'; else $(CYGPATH_W) '$(srcdir)/cmd.c'; fi` cmd-common.o: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cmd_CFLAGS) $(CFLAGS) -MT cmd-common.o -MD -MP -MF $(DEPDIR)/cmd-common.Tpo -c -o cmd-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cmd-common.Tpo $(DEPDIR)/cmd-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='cmd-common.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cmd_CFLAGS) $(CFLAGS) -c -o cmd-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c cmd-common.obj: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cmd_CFLAGS) $(CFLAGS) -MT cmd-common.obj -MD -MP -MF $(DEPDIR)/cmd-common.Tpo -c -o cmd-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cmd-common.Tpo $(DEPDIR)/cmd-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='cmd-common.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cmd_CFLAGS) $(CFLAGS) -c -o cmd-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` dio-dio.o: dio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dio_CFLAGS) $(CFLAGS) -MT dio-dio.o -MD -MP -MF $(DEPDIR)/dio-dio.Tpo -c -o dio-dio.o `test -f 'dio.c' || echo '$(srcdir)/'`dio.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dio-dio.Tpo $(DEPDIR)/dio-dio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dio.c' object='dio-dio.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dio_CFLAGS) $(CFLAGS) -c -o dio-dio.o `test -f 'dio.c' || echo '$(srcdir)/'`dio.c dio-dio.obj: dio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dio_CFLAGS) $(CFLAGS) -MT dio-dio.obj -MD -MP -MF $(DEPDIR)/dio-dio.Tpo -c -o dio-dio.obj `if test -f 'dio.c'; then $(CYGPATH_W) 'dio.c'; else $(CYGPATH_W) '$(srcdir)/dio.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dio-dio.Tpo $(DEPDIR)/dio-dio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dio.c' object='dio-dio.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dio_CFLAGS) $(CFLAGS) -c -o dio-dio.obj `if test -f 'dio.c'; then $(CYGPATH_W) 'dio.c'; else $(CYGPATH_W) '$(srcdir)/dio.c'; fi` dio-common.o: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dio_CFLAGS) $(CFLAGS) -MT dio-common.o -MD -MP -MF $(DEPDIR)/dio-common.Tpo -c -o dio-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dio-common.Tpo $(DEPDIR)/dio-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='dio-common.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dio_CFLAGS) $(CFLAGS) -c -o dio-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c dio-common.obj: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dio_CFLAGS) $(CFLAGS) -MT dio-common.obj -MD -MP -MF $(DEPDIR)/dio-common.Tpo -c -o dio-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dio-common.Tpo $(DEPDIR)/dio-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='dio-common.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dio_CFLAGS) $(CFLAGS) -c -o dio-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` do_waveform-do_waveform.o: do_waveform.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(do_waveform_CFLAGS) $(CFLAGS) -MT do_waveform-do_waveform.o -MD -MP -MF $(DEPDIR)/do_waveform-do_waveform.Tpo -c -o do_waveform-do_waveform.o `test -f 'do_waveform.c' || echo '$(srcdir)/'`do_waveform.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/do_waveform-do_waveform.Tpo $(DEPDIR)/do_waveform-do_waveform.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='do_waveform.c' object='do_waveform-do_waveform.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(do_waveform_CFLAGS) $(CFLAGS) -c -o do_waveform-do_waveform.o `test -f 'do_waveform.c' || echo '$(srcdir)/'`do_waveform.c do_waveform-do_waveform.obj: do_waveform.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(do_waveform_CFLAGS) $(CFLAGS) -MT do_waveform-do_waveform.obj -MD -MP -MF $(DEPDIR)/do_waveform-do_waveform.Tpo -c -o do_waveform-do_waveform.obj `if test -f 'do_waveform.c'; then $(CYGPATH_W) 'do_waveform.c'; else $(CYGPATH_W) '$(srcdir)/do_waveform.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/do_waveform-do_waveform.Tpo $(DEPDIR)/do_waveform-do_waveform.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='do_waveform.c' object='do_waveform-do_waveform.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(do_waveform_CFLAGS) $(CFLAGS) -c -o do_waveform-do_waveform.obj `if test -f 'do_waveform.c'; then $(CYGPATH_W) 'do_waveform.c'; else $(CYGPATH_W) '$(srcdir)/do_waveform.c'; fi` do_waveform-common.o: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(do_waveform_CFLAGS) $(CFLAGS) -MT do_waveform-common.o -MD -MP -MF $(DEPDIR)/do_waveform-common.Tpo -c -o do_waveform-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/do_waveform-common.Tpo $(DEPDIR)/do_waveform-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='do_waveform-common.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(do_waveform_CFLAGS) $(CFLAGS) -c -o do_waveform-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c do_waveform-common.obj: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(do_waveform_CFLAGS) $(CFLAGS) -MT do_waveform-common.obj -MD -MP -MF $(DEPDIR)/do_waveform-common.Tpo -c -o do_waveform-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/do_waveform-common.Tpo $(DEPDIR)/do_waveform-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='do_waveform-common.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(do_waveform_CFLAGS) $(CFLAGS) -c -o do_waveform-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` eeprom_dump-eeprom_dump.o: eeprom_dump.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(eeprom_dump_CFLAGS) $(CFLAGS) -MT eeprom_dump-eeprom_dump.o -MD -MP -MF $(DEPDIR)/eeprom_dump-eeprom_dump.Tpo -c -o eeprom_dump-eeprom_dump.o `test -f 'eeprom_dump.c' || echo '$(srcdir)/'`eeprom_dump.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/eeprom_dump-eeprom_dump.Tpo $(DEPDIR)/eeprom_dump-eeprom_dump.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='eeprom_dump.c' object='eeprom_dump-eeprom_dump.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(eeprom_dump_CFLAGS) $(CFLAGS) -c -o eeprom_dump-eeprom_dump.o `test -f 'eeprom_dump.c' || echo '$(srcdir)/'`eeprom_dump.c eeprom_dump-eeprom_dump.obj: eeprom_dump.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(eeprom_dump_CFLAGS) $(CFLAGS) -MT eeprom_dump-eeprom_dump.obj -MD -MP -MF $(DEPDIR)/eeprom_dump-eeprom_dump.Tpo -c -o eeprom_dump-eeprom_dump.obj `if test -f 'eeprom_dump.c'; then $(CYGPATH_W) 'eeprom_dump.c'; else $(CYGPATH_W) '$(srcdir)/eeprom_dump.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/eeprom_dump-eeprom_dump.Tpo $(DEPDIR)/eeprom_dump-eeprom_dump.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='eeprom_dump.c' object='eeprom_dump-eeprom_dump.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(eeprom_dump_CFLAGS) $(CFLAGS) -c -o eeprom_dump-eeprom_dump.obj `if test -f 'eeprom_dump.c'; then $(CYGPATH_W) 'eeprom_dump.c'; else $(CYGPATH_W) '$(srcdir)/eeprom_dump.c'; fi` eeprom_dump-common.o: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(eeprom_dump_CFLAGS) $(CFLAGS) -MT eeprom_dump-common.o -MD -MP -MF $(DEPDIR)/eeprom_dump-common.Tpo -c -o eeprom_dump-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/eeprom_dump-common.Tpo $(DEPDIR)/eeprom_dump-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='eeprom_dump-common.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(eeprom_dump_CFLAGS) $(CFLAGS) -c -o eeprom_dump-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c eeprom_dump-common.obj: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(eeprom_dump_CFLAGS) $(CFLAGS) -MT eeprom_dump-common.obj -MD -MP -MF $(DEPDIR)/eeprom_dump-common.Tpo -c -o eeprom_dump-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/eeprom_dump-common.Tpo $(DEPDIR)/eeprom_dump-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='eeprom_dump-common.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(eeprom_dump_CFLAGS) $(CFLAGS) -c -o eeprom_dump-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` gpct_buffered_counting-gpct_buffered_counting.o: gpct_buffered_counting.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpct_buffered_counting_CFLAGS) $(CFLAGS) -MT gpct_buffered_counting-gpct_buffered_counting.o -MD -MP -MF $(DEPDIR)/gpct_buffered_counting-gpct_buffered_counting.Tpo -c -o gpct_buffered_counting-gpct_buffered_counting.o `test -f 'gpct_buffered_counting.c' || echo '$(srcdir)/'`gpct_buffered_counting.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpct_buffered_counting-gpct_buffered_counting.Tpo $(DEPDIR)/gpct_buffered_counting-gpct_buffered_counting.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gpct_buffered_counting.c' object='gpct_buffered_counting-gpct_buffered_counting.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpct_buffered_counting_CFLAGS) $(CFLAGS) -c -o gpct_buffered_counting-gpct_buffered_counting.o `test -f 'gpct_buffered_counting.c' || echo '$(srcdir)/'`gpct_buffered_counting.c gpct_buffered_counting-gpct_buffered_counting.obj: gpct_buffered_counting.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpct_buffered_counting_CFLAGS) $(CFLAGS) -MT gpct_buffered_counting-gpct_buffered_counting.obj -MD -MP -MF $(DEPDIR)/gpct_buffered_counting-gpct_buffered_counting.Tpo -c -o gpct_buffered_counting-gpct_buffered_counting.obj `if test -f 'gpct_buffered_counting.c'; then $(CYGPATH_W) 'gpct_buffered_counting.c'; else $(CYGPATH_W) '$(srcdir)/gpct_buffered_counting.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpct_buffered_counting-gpct_buffered_counting.Tpo $(DEPDIR)/gpct_buffered_counting-gpct_buffered_counting.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gpct_buffered_counting.c' object='gpct_buffered_counting-gpct_buffered_counting.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpct_buffered_counting_CFLAGS) $(CFLAGS) -c -o gpct_buffered_counting-gpct_buffered_counting.obj `if test -f 'gpct_buffered_counting.c'; then $(CYGPATH_W) 'gpct_buffered_counting.c'; else $(CYGPATH_W) '$(srcdir)/gpct_buffered_counting.c'; fi` gpct_buffered_counting-common.o: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpct_buffered_counting_CFLAGS) $(CFLAGS) -MT gpct_buffered_counting-common.o -MD -MP -MF $(DEPDIR)/gpct_buffered_counting-common.Tpo -c -o gpct_buffered_counting-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpct_buffered_counting-common.Tpo $(DEPDIR)/gpct_buffered_counting-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='gpct_buffered_counting-common.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpct_buffered_counting_CFLAGS) $(CFLAGS) -c -o gpct_buffered_counting-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c gpct_buffered_counting-common.obj: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpct_buffered_counting_CFLAGS) $(CFLAGS) -MT gpct_buffered_counting-common.obj -MD -MP -MF $(DEPDIR)/gpct_buffered_counting-common.Tpo -c -o gpct_buffered_counting-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpct_buffered_counting-common.Tpo $(DEPDIR)/gpct_buffered_counting-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='gpct_buffered_counting-common.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpct_buffered_counting_CFLAGS) $(CFLAGS) -c -o gpct_buffered_counting-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` gpct_encoder-gpct_encoder.o: gpct_encoder.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpct_encoder_CFLAGS) $(CFLAGS) -MT gpct_encoder-gpct_encoder.o -MD -MP -MF $(DEPDIR)/gpct_encoder-gpct_encoder.Tpo -c -o gpct_encoder-gpct_encoder.o `test -f 'gpct_encoder.c' || echo '$(srcdir)/'`gpct_encoder.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpct_encoder-gpct_encoder.Tpo $(DEPDIR)/gpct_encoder-gpct_encoder.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gpct_encoder.c' object='gpct_encoder-gpct_encoder.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpct_encoder_CFLAGS) $(CFLAGS) -c -o gpct_encoder-gpct_encoder.o `test -f 'gpct_encoder.c' || echo '$(srcdir)/'`gpct_encoder.c gpct_encoder-gpct_encoder.obj: gpct_encoder.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpct_encoder_CFLAGS) $(CFLAGS) -MT gpct_encoder-gpct_encoder.obj -MD -MP -MF $(DEPDIR)/gpct_encoder-gpct_encoder.Tpo -c -o gpct_encoder-gpct_encoder.obj `if test -f 'gpct_encoder.c'; then $(CYGPATH_W) 'gpct_encoder.c'; else $(CYGPATH_W) '$(srcdir)/gpct_encoder.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpct_encoder-gpct_encoder.Tpo $(DEPDIR)/gpct_encoder-gpct_encoder.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gpct_encoder.c' object='gpct_encoder-gpct_encoder.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpct_encoder_CFLAGS) $(CFLAGS) -c -o gpct_encoder-gpct_encoder.obj `if test -f 'gpct_encoder.c'; then $(CYGPATH_W) 'gpct_encoder.c'; else $(CYGPATH_W) '$(srcdir)/gpct_encoder.c'; fi` gpct_encoder-common.o: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpct_encoder_CFLAGS) $(CFLAGS) -MT gpct_encoder-common.o -MD -MP -MF $(DEPDIR)/gpct_encoder-common.Tpo -c -o gpct_encoder-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpct_encoder-common.Tpo $(DEPDIR)/gpct_encoder-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='gpct_encoder-common.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpct_encoder_CFLAGS) $(CFLAGS) -c -o gpct_encoder-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c gpct_encoder-common.obj: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpct_encoder_CFLAGS) $(CFLAGS) -MT gpct_encoder-common.obj -MD -MP -MF $(DEPDIR)/gpct_encoder-common.Tpo -c -o gpct_encoder-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpct_encoder-common.Tpo $(DEPDIR)/gpct_encoder-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='gpct_encoder-common.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpct_encoder_CFLAGS) $(CFLAGS) -c -o gpct_encoder-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` gpct_pulse_generator-gpct_pulse_generator.o: gpct_pulse_generator.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpct_pulse_generator_CFLAGS) $(CFLAGS) -MT gpct_pulse_generator-gpct_pulse_generator.o -MD -MP -MF $(DEPDIR)/gpct_pulse_generator-gpct_pulse_generator.Tpo -c -o gpct_pulse_generator-gpct_pulse_generator.o `test -f 'gpct_pulse_generator.c' || echo '$(srcdir)/'`gpct_pulse_generator.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpct_pulse_generator-gpct_pulse_generator.Tpo $(DEPDIR)/gpct_pulse_generator-gpct_pulse_generator.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gpct_pulse_generator.c' object='gpct_pulse_generator-gpct_pulse_generator.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpct_pulse_generator_CFLAGS) $(CFLAGS) -c -o gpct_pulse_generator-gpct_pulse_generator.o `test -f 'gpct_pulse_generator.c' || echo '$(srcdir)/'`gpct_pulse_generator.c gpct_pulse_generator-gpct_pulse_generator.obj: gpct_pulse_generator.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpct_pulse_generator_CFLAGS) $(CFLAGS) -MT gpct_pulse_generator-gpct_pulse_generator.obj -MD -MP -MF $(DEPDIR)/gpct_pulse_generator-gpct_pulse_generator.Tpo -c -o gpct_pulse_generator-gpct_pulse_generator.obj `if test -f 'gpct_pulse_generator.c'; then $(CYGPATH_W) 'gpct_pulse_generator.c'; else $(CYGPATH_W) '$(srcdir)/gpct_pulse_generator.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpct_pulse_generator-gpct_pulse_generator.Tpo $(DEPDIR)/gpct_pulse_generator-gpct_pulse_generator.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gpct_pulse_generator.c' object='gpct_pulse_generator-gpct_pulse_generator.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpct_pulse_generator_CFLAGS) $(CFLAGS) -c -o gpct_pulse_generator-gpct_pulse_generator.obj `if test -f 'gpct_pulse_generator.c'; then $(CYGPATH_W) 'gpct_pulse_generator.c'; else $(CYGPATH_W) '$(srcdir)/gpct_pulse_generator.c'; fi` gpct_pulse_generator-common.o: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpct_pulse_generator_CFLAGS) $(CFLAGS) -MT gpct_pulse_generator-common.o -MD -MP -MF $(DEPDIR)/gpct_pulse_generator-common.Tpo -c -o gpct_pulse_generator-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpct_pulse_generator-common.Tpo $(DEPDIR)/gpct_pulse_generator-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='gpct_pulse_generator-common.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpct_pulse_generator_CFLAGS) $(CFLAGS) -c -o gpct_pulse_generator-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c gpct_pulse_generator-common.obj: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpct_pulse_generator_CFLAGS) $(CFLAGS) -MT gpct_pulse_generator-common.obj -MD -MP -MF $(DEPDIR)/gpct_pulse_generator-common.Tpo -c -o gpct_pulse_generator-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpct_pulse_generator-common.Tpo $(DEPDIR)/gpct_pulse_generator-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='gpct_pulse_generator-common.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpct_pulse_generator_CFLAGS) $(CFLAGS) -c -o gpct_pulse_generator-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` gpct_simple_counting-gpct_simple_counting.o: gpct_simple_counting.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpct_simple_counting_CFLAGS) $(CFLAGS) -MT gpct_simple_counting-gpct_simple_counting.o -MD -MP -MF $(DEPDIR)/gpct_simple_counting-gpct_simple_counting.Tpo -c -o gpct_simple_counting-gpct_simple_counting.o `test -f 'gpct_simple_counting.c' || echo '$(srcdir)/'`gpct_simple_counting.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpct_simple_counting-gpct_simple_counting.Tpo $(DEPDIR)/gpct_simple_counting-gpct_simple_counting.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gpct_simple_counting.c' object='gpct_simple_counting-gpct_simple_counting.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpct_simple_counting_CFLAGS) $(CFLAGS) -c -o gpct_simple_counting-gpct_simple_counting.o `test -f 'gpct_simple_counting.c' || echo '$(srcdir)/'`gpct_simple_counting.c gpct_simple_counting-gpct_simple_counting.obj: gpct_simple_counting.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpct_simple_counting_CFLAGS) $(CFLAGS) -MT gpct_simple_counting-gpct_simple_counting.obj -MD -MP -MF $(DEPDIR)/gpct_simple_counting-gpct_simple_counting.Tpo -c -o gpct_simple_counting-gpct_simple_counting.obj `if test -f 'gpct_simple_counting.c'; then $(CYGPATH_W) 'gpct_simple_counting.c'; else $(CYGPATH_W) '$(srcdir)/gpct_simple_counting.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpct_simple_counting-gpct_simple_counting.Tpo $(DEPDIR)/gpct_simple_counting-gpct_simple_counting.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gpct_simple_counting.c' object='gpct_simple_counting-gpct_simple_counting.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpct_simple_counting_CFLAGS) $(CFLAGS) -c -o gpct_simple_counting-gpct_simple_counting.obj `if test -f 'gpct_simple_counting.c'; then $(CYGPATH_W) 'gpct_simple_counting.c'; else $(CYGPATH_W) '$(srcdir)/gpct_simple_counting.c'; fi` gpct_simple_counting-common.o: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpct_simple_counting_CFLAGS) $(CFLAGS) -MT gpct_simple_counting-common.o -MD -MP -MF $(DEPDIR)/gpct_simple_counting-common.Tpo -c -o gpct_simple_counting-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpct_simple_counting-common.Tpo $(DEPDIR)/gpct_simple_counting-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='gpct_simple_counting-common.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpct_simple_counting_CFLAGS) $(CFLAGS) -c -o gpct_simple_counting-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c gpct_simple_counting-common.obj: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpct_simple_counting_CFLAGS) $(CFLAGS) -MT gpct_simple_counting-common.obj -MD -MP -MF $(DEPDIR)/gpct_simple_counting-common.Tpo -c -o gpct_simple_counting-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpct_simple_counting-common.Tpo $(DEPDIR)/gpct_simple_counting-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='gpct_simple_counting-common.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gpct_simple_counting_CFLAGS) $(CFLAGS) -c -o gpct_simple_counting-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` inp-inp.o: inp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(inp_CFLAGS) $(CFLAGS) -MT inp-inp.o -MD -MP -MF $(DEPDIR)/inp-inp.Tpo -c -o inp-inp.o `test -f 'inp.c' || echo '$(srcdir)/'`inp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/inp-inp.Tpo $(DEPDIR)/inp-inp.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='inp.c' object='inp-inp.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(inp_CFLAGS) $(CFLAGS) -c -o inp-inp.o `test -f 'inp.c' || echo '$(srcdir)/'`inp.c inp-inp.obj: inp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(inp_CFLAGS) $(CFLAGS) -MT inp-inp.obj -MD -MP -MF $(DEPDIR)/inp-inp.Tpo -c -o inp-inp.obj `if test -f 'inp.c'; then $(CYGPATH_W) 'inp.c'; else $(CYGPATH_W) '$(srcdir)/inp.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/inp-inp.Tpo $(DEPDIR)/inp-inp.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='inp.c' object='inp-inp.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(inp_CFLAGS) $(CFLAGS) -c -o inp-inp.obj `if test -f 'inp.c'; then $(CYGPATH_W) 'inp.c'; else $(CYGPATH_W) '$(srcdir)/inp.c'; fi` inp-common.o: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(inp_CFLAGS) $(CFLAGS) -MT inp-common.o -MD -MP -MF $(DEPDIR)/inp-common.Tpo -c -o inp-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/inp-common.Tpo $(DEPDIR)/inp-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='inp-common.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(inp_CFLAGS) $(CFLAGS) -c -o inp-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c inp-common.obj: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(inp_CFLAGS) $(CFLAGS) -MT inp-common.obj -MD -MP -MF $(DEPDIR)/inp-common.Tpo -c -o inp-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/inp-common.Tpo $(DEPDIR)/inp-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='inp-common.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(inp_CFLAGS) $(CFLAGS) -c -o inp-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` inpn-inpn.o: inpn.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(inpn_CFLAGS) $(CFLAGS) -MT inpn-inpn.o -MD -MP -MF $(DEPDIR)/inpn-inpn.Tpo -c -o inpn-inpn.o `test -f 'inpn.c' || echo '$(srcdir)/'`inpn.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/inpn-inpn.Tpo $(DEPDIR)/inpn-inpn.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='inpn.c' object='inpn-inpn.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(inpn_CFLAGS) $(CFLAGS) -c -o inpn-inpn.o `test -f 'inpn.c' || echo '$(srcdir)/'`inpn.c inpn-inpn.obj: inpn.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(inpn_CFLAGS) $(CFLAGS) -MT inpn-inpn.obj -MD -MP -MF $(DEPDIR)/inpn-inpn.Tpo -c -o inpn-inpn.obj `if test -f 'inpn.c'; then $(CYGPATH_W) 'inpn.c'; else $(CYGPATH_W) '$(srcdir)/inpn.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/inpn-inpn.Tpo $(DEPDIR)/inpn-inpn.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='inpn.c' object='inpn-inpn.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(inpn_CFLAGS) $(CFLAGS) -c -o inpn-inpn.obj `if test -f 'inpn.c'; then $(CYGPATH_W) 'inpn.c'; else $(CYGPATH_W) '$(srcdir)/inpn.c'; fi` inpn-common.o: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(inpn_CFLAGS) $(CFLAGS) -MT inpn-common.o -MD -MP -MF $(DEPDIR)/inpn-common.Tpo -c -o inpn-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/inpn-common.Tpo $(DEPDIR)/inpn-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='inpn-common.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(inpn_CFLAGS) $(CFLAGS) -c -o inpn-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c inpn-common.obj: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(inpn_CFLAGS) $(CFLAGS) -MT inpn-common.obj -MD -MP -MF $(DEPDIR)/inpn-common.Tpo -c -o inpn-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/inpn-common.Tpo $(DEPDIR)/inpn-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='inpn-common.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(inpn_CFLAGS) $(CFLAGS) -c -o inpn-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` insn-insn.o: insn.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(insn_CFLAGS) $(CFLAGS) -MT insn-insn.o -MD -MP -MF $(DEPDIR)/insn-insn.Tpo -c -o insn-insn.o `test -f 'insn.c' || echo '$(srcdir)/'`insn.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/insn-insn.Tpo $(DEPDIR)/insn-insn.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='insn.c' object='insn-insn.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(insn_CFLAGS) $(CFLAGS) -c -o insn-insn.o `test -f 'insn.c' || echo '$(srcdir)/'`insn.c insn-insn.obj: insn.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(insn_CFLAGS) $(CFLAGS) -MT insn-insn.obj -MD -MP -MF $(DEPDIR)/insn-insn.Tpo -c -o insn-insn.obj `if test -f 'insn.c'; then $(CYGPATH_W) 'insn.c'; else $(CYGPATH_W) '$(srcdir)/insn.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/insn-insn.Tpo $(DEPDIR)/insn-insn.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='insn.c' object='insn-insn.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(insn_CFLAGS) $(CFLAGS) -c -o insn-insn.obj `if test -f 'insn.c'; then $(CYGPATH_W) 'insn.c'; else $(CYGPATH_W) '$(srcdir)/insn.c'; fi` insn-common.o: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(insn_CFLAGS) $(CFLAGS) -MT insn-common.o -MD -MP -MF $(DEPDIR)/insn-common.Tpo -c -o insn-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/insn-common.Tpo $(DEPDIR)/insn-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='insn-common.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(insn_CFLAGS) $(CFLAGS) -c -o insn-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c insn-common.obj: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(insn_CFLAGS) $(CFLAGS) -MT insn-common.obj -MD -MP -MF $(DEPDIR)/insn-common.Tpo -c -o insn-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/insn-common.Tpo $(DEPDIR)/insn-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='insn-common.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(insn_CFLAGS) $(CFLAGS) -c -o insn-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` ledclock-ledclock.o: ledclock.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ledclock_CFLAGS) $(CFLAGS) -MT ledclock-ledclock.o -MD -MP -MF $(DEPDIR)/ledclock-ledclock.Tpo -c -o ledclock-ledclock.o `test -f 'ledclock.c' || echo '$(srcdir)/'`ledclock.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ledclock-ledclock.Tpo $(DEPDIR)/ledclock-ledclock.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ledclock.c' object='ledclock-ledclock.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ledclock_CFLAGS) $(CFLAGS) -c -o ledclock-ledclock.o `test -f 'ledclock.c' || echo '$(srcdir)/'`ledclock.c ledclock-ledclock.obj: ledclock.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ledclock_CFLAGS) $(CFLAGS) -MT ledclock-ledclock.obj -MD -MP -MF $(DEPDIR)/ledclock-ledclock.Tpo -c -o ledclock-ledclock.obj `if test -f 'ledclock.c'; then $(CYGPATH_W) 'ledclock.c'; else $(CYGPATH_W) '$(srcdir)/ledclock.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ledclock-ledclock.Tpo $(DEPDIR)/ledclock-ledclock.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ledclock.c' object='ledclock-ledclock.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ledclock_CFLAGS) $(CFLAGS) -c -o ledclock-ledclock.obj `if test -f 'ledclock.c'; then $(CYGPATH_W) 'ledclock.c'; else $(CYGPATH_W) '$(srcdir)/ledclock.c'; fi` ledclock-common.o: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ledclock_CFLAGS) $(CFLAGS) -MT ledclock-common.o -MD -MP -MF $(DEPDIR)/ledclock-common.Tpo -c -o ledclock-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ledclock-common.Tpo $(DEPDIR)/ledclock-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='ledclock-common.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ledclock_CFLAGS) $(CFLAGS) -c -o ledclock-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c ledclock-common.obj: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ledclock_CFLAGS) $(CFLAGS) -MT ledclock-common.obj -MD -MP -MF $(DEPDIR)/ledclock-common.Tpo -c -o ledclock-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ledclock-common.Tpo $(DEPDIR)/ledclock-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='ledclock-common.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ledclock_CFLAGS) $(CFLAGS) -c -o ledclock-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` mmap-mmap.o: mmap.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mmap_CFLAGS) $(CFLAGS) -MT mmap-mmap.o -MD -MP -MF $(DEPDIR)/mmap-mmap.Tpo -c -o mmap-mmap.o `test -f 'mmap.c' || echo '$(srcdir)/'`mmap.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mmap-mmap.Tpo $(DEPDIR)/mmap-mmap.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mmap.c' object='mmap-mmap.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mmap_CFLAGS) $(CFLAGS) -c -o mmap-mmap.o `test -f 'mmap.c' || echo '$(srcdir)/'`mmap.c mmap-mmap.obj: mmap.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mmap_CFLAGS) $(CFLAGS) -MT mmap-mmap.obj -MD -MP -MF $(DEPDIR)/mmap-mmap.Tpo -c -o mmap-mmap.obj `if test -f 'mmap.c'; then $(CYGPATH_W) 'mmap.c'; else $(CYGPATH_W) '$(srcdir)/mmap.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mmap-mmap.Tpo $(DEPDIR)/mmap-mmap.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mmap.c' object='mmap-mmap.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mmap_CFLAGS) $(CFLAGS) -c -o mmap-mmap.obj `if test -f 'mmap.c'; then $(CYGPATH_W) 'mmap.c'; else $(CYGPATH_W) '$(srcdir)/mmap.c'; fi` mmap-common.o: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mmap_CFLAGS) $(CFLAGS) -MT mmap-common.o -MD -MP -MF $(DEPDIR)/mmap-common.Tpo -c -o mmap-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mmap-common.Tpo $(DEPDIR)/mmap-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='mmap-common.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mmap_CFLAGS) $(CFLAGS) -c -o mmap-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c mmap-common.obj: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mmap_CFLAGS) $(CFLAGS) -MT mmap-common.obj -MD -MP -MF $(DEPDIR)/mmap-common.Tpo -c -o mmap-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mmap-common.Tpo $(DEPDIR)/mmap-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='mmap-common.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mmap_CFLAGS) $(CFLAGS) -c -o mmap-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` outp-outp.o: outp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(outp_CFLAGS) $(CFLAGS) -MT outp-outp.o -MD -MP -MF $(DEPDIR)/outp-outp.Tpo -c -o outp-outp.o `test -f 'outp.c' || echo '$(srcdir)/'`outp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/outp-outp.Tpo $(DEPDIR)/outp-outp.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='outp.c' object='outp-outp.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(outp_CFLAGS) $(CFLAGS) -c -o outp-outp.o `test -f 'outp.c' || echo '$(srcdir)/'`outp.c outp-outp.obj: outp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(outp_CFLAGS) $(CFLAGS) -MT outp-outp.obj -MD -MP -MF $(DEPDIR)/outp-outp.Tpo -c -o outp-outp.obj `if test -f 'outp.c'; then $(CYGPATH_W) 'outp.c'; else $(CYGPATH_W) '$(srcdir)/outp.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/outp-outp.Tpo $(DEPDIR)/outp-outp.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='outp.c' object='outp-outp.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(outp_CFLAGS) $(CFLAGS) -c -o outp-outp.obj `if test -f 'outp.c'; then $(CYGPATH_W) 'outp.c'; else $(CYGPATH_W) '$(srcdir)/outp.c'; fi` outp-common.o: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(outp_CFLAGS) $(CFLAGS) -MT outp-common.o -MD -MP -MF $(DEPDIR)/outp-common.Tpo -c -o outp-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/outp-common.Tpo $(DEPDIR)/outp-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='outp-common.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(outp_CFLAGS) $(CFLAGS) -c -o outp-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c outp-common.obj: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(outp_CFLAGS) $(CFLAGS) -MT outp-common.obj -MD -MP -MF $(DEPDIR)/outp-common.Tpo -c -o outp-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/outp-common.Tpo $(DEPDIR)/outp-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='outp-common.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(outp_CFLAGS) $(CFLAGS) -c -o outp-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` poll-poll.o: poll.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(poll_CFLAGS) $(CFLAGS) -MT poll-poll.o -MD -MP -MF $(DEPDIR)/poll-poll.Tpo -c -o poll-poll.o `test -f 'poll.c' || echo '$(srcdir)/'`poll.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/poll-poll.Tpo $(DEPDIR)/poll-poll.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='poll.c' object='poll-poll.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(poll_CFLAGS) $(CFLAGS) -c -o poll-poll.o `test -f 'poll.c' || echo '$(srcdir)/'`poll.c poll-poll.obj: poll.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(poll_CFLAGS) $(CFLAGS) -MT poll-poll.obj -MD -MP -MF $(DEPDIR)/poll-poll.Tpo -c -o poll-poll.obj `if test -f 'poll.c'; then $(CYGPATH_W) 'poll.c'; else $(CYGPATH_W) '$(srcdir)/poll.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/poll-poll.Tpo $(DEPDIR)/poll-poll.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='poll.c' object='poll-poll.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(poll_CFLAGS) $(CFLAGS) -c -o poll-poll.obj `if test -f 'poll.c'; then $(CYGPATH_W) 'poll.c'; else $(CYGPATH_W) '$(srcdir)/poll.c'; fi` poll-common.o: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(poll_CFLAGS) $(CFLAGS) -MT poll-common.o -MD -MP -MF $(DEPDIR)/poll-common.Tpo -c -o poll-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/poll-common.Tpo $(DEPDIR)/poll-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='poll-common.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(poll_CFLAGS) $(CFLAGS) -c -o poll-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c poll-common.obj: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(poll_CFLAGS) $(CFLAGS) -MT poll-common.obj -MD -MP -MF $(DEPDIR)/poll-common.Tpo -c -o poll-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/poll-common.Tpo $(DEPDIR)/poll-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='poll-common.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(poll_CFLAGS) $(CFLAGS) -c -o poll-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` pwm-pwm.o: pwm.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pwm_CFLAGS) $(CFLAGS) -MT pwm-pwm.o -MD -MP -MF $(DEPDIR)/pwm-pwm.Tpo -c -o pwm-pwm.o `test -f 'pwm.c' || echo '$(srcdir)/'`pwm.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pwm-pwm.Tpo $(DEPDIR)/pwm-pwm.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pwm.c' object='pwm-pwm.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pwm_CFLAGS) $(CFLAGS) -c -o pwm-pwm.o `test -f 'pwm.c' || echo '$(srcdir)/'`pwm.c pwm-pwm.obj: pwm.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pwm_CFLAGS) $(CFLAGS) -MT pwm-pwm.obj -MD -MP -MF $(DEPDIR)/pwm-pwm.Tpo -c -o pwm-pwm.obj `if test -f 'pwm.c'; then $(CYGPATH_W) 'pwm.c'; else $(CYGPATH_W) '$(srcdir)/pwm.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pwm-pwm.Tpo $(DEPDIR)/pwm-pwm.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pwm.c' object='pwm-pwm.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pwm_CFLAGS) $(CFLAGS) -c -o pwm-pwm.obj `if test -f 'pwm.c'; then $(CYGPATH_W) 'pwm.c'; else $(CYGPATH_W) '$(srcdir)/pwm.c'; fi` pwm-common.o: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pwm_CFLAGS) $(CFLAGS) -MT pwm-common.o -MD -MP -MF $(DEPDIR)/pwm-common.Tpo -c -o pwm-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pwm-common.Tpo $(DEPDIR)/pwm-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='pwm-common.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pwm_CFLAGS) $(CFLAGS) -c -o pwm-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c pwm-common.obj: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pwm_CFLAGS) $(CFLAGS) -MT pwm-common.obj -MD -MP -MF $(DEPDIR)/pwm-common.Tpo -c -o pwm-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pwm-common.Tpo $(DEPDIR)/pwm-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='pwm-common.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pwm_CFLAGS) $(CFLAGS) -c -o pwm-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` receiver-receiver.o: receiver.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(receiver_CFLAGS) $(CFLAGS) -MT receiver-receiver.o -MD -MP -MF $(DEPDIR)/receiver-receiver.Tpo -c -o receiver-receiver.o `test -f 'receiver.c' || echo '$(srcdir)/'`receiver.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/receiver-receiver.Tpo $(DEPDIR)/receiver-receiver.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='receiver.c' object='receiver-receiver.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(receiver_CFLAGS) $(CFLAGS) -c -o receiver-receiver.o `test -f 'receiver.c' || echo '$(srcdir)/'`receiver.c receiver-receiver.obj: receiver.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(receiver_CFLAGS) $(CFLAGS) -MT receiver-receiver.obj -MD -MP -MF $(DEPDIR)/receiver-receiver.Tpo -c -o receiver-receiver.obj `if test -f 'receiver.c'; then $(CYGPATH_W) 'receiver.c'; else $(CYGPATH_W) '$(srcdir)/receiver.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/receiver-receiver.Tpo $(DEPDIR)/receiver-receiver.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='receiver.c' object='receiver-receiver.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(receiver_CFLAGS) $(CFLAGS) -c -o receiver-receiver.obj `if test -f 'receiver.c'; then $(CYGPATH_W) 'receiver.c'; else $(CYGPATH_W) '$(srcdir)/receiver.c'; fi` receiver-common.o: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(receiver_CFLAGS) $(CFLAGS) -MT receiver-common.o -MD -MP -MF $(DEPDIR)/receiver-common.Tpo -c -o receiver-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/receiver-common.Tpo $(DEPDIR)/receiver-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='receiver-common.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(receiver_CFLAGS) $(CFLAGS) -c -o receiver-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c receiver-common.obj: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(receiver_CFLAGS) $(CFLAGS) -MT receiver-common.obj -MD -MP -MF $(DEPDIR)/receiver-common.Tpo -c -o receiver-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/receiver-common.Tpo $(DEPDIR)/receiver-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='receiver-common.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(receiver_CFLAGS) $(CFLAGS) -c -o receiver-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` select-select.o: select.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(select_CFLAGS) $(CFLAGS) -MT select-select.o -MD -MP -MF $(DEPDIR)/select-select.Tpo -c -o select-select.o `test -f 'select.c' || echo '$(srcdir)/'`select.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/select-select.Tpo $(DEPDIR)/select-select.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='select.c' object='select-select.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(select_CFLAGS) $(CFLAGS) -c -o select-select.o `test -f 'select.c' || echo '$(srcdir)/'`select.c select-select.obj: select.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(select_CFLAGS) $(CFLAGS) -MT select-select.obj -MD -MP -MF $(DEPDIR)/select-select.Tpo -c -o select-select.obj `if test -f 'select.c'; then $(CYGPATH_W) 'select.c'; else $(CYGPATH_W) '$(srcdir)/select.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/select-select.Tpo $(DEPDIR)/select-select.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='select.c' object='select-select.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(select_CFLAGS) $(CFLAGS) -c -o select-select.obj `if test -f 'select.c'; then $(CYGPATH_W) 'select.c'; else $(CYGPATH_W) '$(srcdir)/select.c'; fi` select-common.o: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(select_CFLAGS) $(CFLAGS) -MT select-common.o -MD -MP -MF $(DEPDIR)/select-common.Tpo -c -o select-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/select-common.Tpo $(DEPDIR)/select-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='select-common.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(select_CFLAGS) $(CFLAGS) -c -o select-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c select-common.obj: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(select_CFLAGS) $(CFLAGS) -MT select-common.obj -MD -MP -MF $(DEPDIR)/select-common.Tpo -c -o select-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/select-common.Tpo $(DEPDIR)/select-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='select-common.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(select_CFLAGS) $(CFLAGS) -c -o select-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` sender-sender.o: sender.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sender_CFLAGS) $(CFLAGS) -MT sender-sender.o -MD -MP -MF $(DEPDIR)/sender-sender.Tpo -c -o sender-sender.o `test -f 'sender.c' || echo '$(srcdir)/'`sender.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/sender-sender.Tpo $(DEPDIR)/sender-sender.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sender.c' object='sender-sender.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sender_CFLAGS) $(CFLAGS) -c -o sender-sender.o `test -f 'sender.c' || echo '$(srcdir)/'`sender.c sender-sender.obj: sender.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sender_CFLAGS) $(CFLAGS) -MT sender-sender.obj -MD -MP -MF $(DEPDIR)/sender-sender.Tpo -c -o sender-sender.obj `if test -f 'sender.c'; then $(CYGPATH_W) 'sender.c'; else $(CYGPATH_W) '$(srcdir)/sender.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/sender-sender.Tpo $(DEPDIR)/sender-sender.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sender.c' object='sender-sender.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sender_CFLAGS) $(CFLAGS) -c -o sender-sender.obj `if test -f 'sender.c'; then $(CYGPATH_W) 'sender.c'; else $(CYGPATH_W) '$(srcdir)/sender.c'; fi` sender-common.o: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sender_CFLAGS) $(CFLAGS) -MT sender-common.o -MD -MP -MF $(DEPDIR)/sender-common.Tpo -c -o sender-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/sender-common.Tpo $(DEPDIR)/sender-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='sender-common.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sender_CFLAGS) $(CFLAGS) -c -o sender-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c sender-common.obj: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sender_CFLAGS) $(CFLAGS) -MT sender-common.obj -MD -MP -MF $(DEPDIR)/sender-common.Tpo -c -o sender-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/sender-common.Tpo $(DEPDIR)/sender-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='sender-common.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sender_CFLAGS) $(CFLAGS) -c -o sender-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` sigio-sigio.o: sigio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sigio_CFLAGS) $(CFLAGS) -MT sigio-sigio.o -MD -MP -MF $(DEPDIR)/sigio-sigio.Tpo -c -o sigio-sigio.o `test -f 'sigio.c' || echo '$(srcdir)/'`sigio.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/sigio-sigio.Tpo $(DEPDIR)/sigio-sigio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sigio.c' object='sigio-sigio.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sigio_CFLAGS) $(CFLAGS) -c -o sigio-sigio.o `test -f 'sigio.c' || echo '$(srcdir)/'`sigio.c sigio-sigio.obj: sigio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sigio_CFLAGS) $(CFLAGS) -MT sigio-sigio.obj -MD -MP -MF $(DEPDIR)/sigio-sigio.Tpo -c -o sigio-sigio.obj `if test -f 'sigio.c'; then $(CYGPATH_W) 'sigio.c'; else $(CYGPATH_W) '$(srcdir)/sigio.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/sigio-sigio.Tpo $(DEPDIR)/sigio-sigio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sigio.c' object='sigio-sigio.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sigio_CFLAGS) $(CFLAGS) -c -o sigio-sigio.obj `if test -f 'sigio.c'; then $(CYGPATH_W) 'sigio.c'; else $(CYGPATH_W) '$(srcdir)/sigio.c'; fi` sigio-common.o: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sigio_CFLAGS) $(CFLAGS) -MT sigio-common.o -MD -MP -MF $(DEPDIR)/sigio-common.Tpo -c -o sigio-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/sigio-common.Tpo $(DEPDIR)/sigio-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='sigio-common.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sigio_CFLAGS) $(CFLAGS) -c -o sigio-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c sigio-common.obj: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sigio_CFLAGS) $(CFLAGS) -MT sigio-common.obj -MD -MP -MF $(DEPDIR)/sigio-common.Tpo -c -o sigio-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/sigio-common.Tpo $(DEPDIR)/sigio-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='sigio-common.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sigio_CFLAGS) $(CFLAGS) -c -o sigio-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` sv-sv.o: sv.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sv_CFLAGS) $(CFLAGS) -MT sv-sv.o -MD -MP -MF $(DEPDIR)/sv-sv.Tpo -c -o sv-sv.o `test -f 'sv.c' || echo '$(srcdir)/'`sv.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/sv-sv.Tpo $(DEPDIR)/sv-sv.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sv.c' object='sv-sv.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sv_CFLAGS) $(CFLAGS) -c -o sv-sv.o `test -f 'sv.c' || echo '$(srcdir)/'`sv.c sv-sv.obj: sv.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sv_CFLAGS) $(CFLAGS) -MT sv-sv.obj -MD -MP -MF $(DEPDIR)/sv-sv.Tpo -c -o sv-sv.obj `if test -f 'sv.c'; then $(CYGPATH_W) 'sv.c'; else $(CYGPATH_W) '$(srcdir)/sv.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/sv-sv.Tpo $(DEPDIR)/sv-sv.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sv.c' object='sv-sv.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sv_CFLAGS) $(CFLAGS) -c -o sv-sv.obj `if test -f 'sv.c'; then $(CYGPATH_W) 'sv.c'; else $(CYGPATH_W) '$(srcdir)/sv.c'; fi` sv-common.o: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sv_CFLAGS) $(CFLAGS) -MT sv-common.o -MD -MP -MF $(DEPDIR)/sv-common.Tpo -c -o sv-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/sv-common.Tpo $(DEPDIR)/sv-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='sv-common.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sv_CFLAGS) $(CFLAGS) -c -o sv-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c sv-common.obj: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sv_CFLAGS) $(CFLAGS) -MT sv-common.obj -MD -MP -MF $(DEPDIR)/sv-common.Tpo -c -o sv-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/sv-common.Tpo $(DEPDIR)/sv-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='sv-common.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sv_CFLAGS) $(CFLAGS) -c -o sv-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` tut1-tut1.o: tut1.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tut1_CFLAGS) $(CFLAGS) -MT tut1-tut1.o -MD -MP -MF $(DEPDIR)/tut1-tut1.Tpo -c -o tut1-tut1.o `test -f 'tut1.c' || echo '$(srcdir)/'`tut1.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tut1-tut1.Tpo $(DEPDIR)/tut1-tut1.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tut1.c' object='tut1-tut1.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tut1_CFLAGS) $(CFLAGS) -c -o tut1-tut1.o `test -f 'tut1.c' || echo '$(srcdir)/'`tut1.c tut1-tut1.obj: tut1.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tut1_CFLAGS) $(CFLAGS) -MT tut1-tut1.obj -MD -MP -MF $(DEPDIR)/tut1-tut1.Tpo -c -o tut1-tut1.obj `if test -f 'tut1.c'; then $(CYGPATH_W) 'tut1.c'; else $(CYGPATH_W) '$(srcdir)/tut1.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tut1-tut1.Tpo $(DEPDIR)/tut1-tut1.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tut1.c' object='tut1-tut1.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tut1_CFLAGS) $(CFLAGS) -c -o tut1-tut1.obj `if test -f 'tut1.c'; then $(CYGPATH_W) 'tut1.c'; else $(CYGPATH_W) '$(srcdir)/tut1.c'; fi` tut2-tut2.o: tut2.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tut2_CFLAGS) $(CFLAGS) -MT tut2-tut2.o -MD -MP -MF $(DEPDIR)/tut2-tut2.Tpo -c -o tut2-tut2.o `test -f 'tut2.c' || echo '$(srcdir)/'`tut2.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tut2-tut2.Tpo $(DEPDIR)/tut2-tut2.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tut2.c' object='tut2-tut2.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tut2_CFLAGS) $(CFLAGS) -c -o tut2-tut2.o `test -f 'tut2.c' || echo '$(srcdir)/'`tut2.c tut2-tut2.obj: tut2.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tut2_CFLAGS) $(CFLAGS) -MT tut2-tut2.obj -MD -MP -MF $(DEPDIR)/tut2-tut2.Tpo -c -o tut2-tut2.obj `if test -f 'tut2.c'; then $(CYGPATH_W) 'tut2.c'; else $(CYGPATH_W) '$(srcdir)/tut2.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tut2-tut2.Tpo $(DEPDIR)/tut2-tut2.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tut2.c' object='tut2-tut2.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tut2_CFLAGS) $(CFLAGS) -c -o tut2-tut2.obj `if test -f 'tut2.c'; then $(CYGPATH_W) 'tut2.c'; else $(CYGPATH_W) '$(srcdir)/tut2.c'; fi` tut3-tut3.o: tut3.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tut3_CFLAGS) $(CFLAGS) -MT tut3-tut3.o -MD -MP -MF $(DEPDIR)/tut3-tut3.Tpo -c -o tut3-tut3.o `test -f 'tut3.c' || echo '$(srcdir)/'`tut3.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tut3-tut3.Tpo $(DEPDIR)/tut3-tut3.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tut3.c' object='tut3-tut3.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tut3_CFLAGS) $(CFLAGS) -c -o tut3-tut3.o `test -f 'tut3.c' || echo '$(srcdir)/'`tut3.c tut3-tut3.obj: tut3.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tut3_CFLAGS) $(CFLAGS) -MT tut3-tut3.obj -MD -MP -MF $(DEPDIR)/tut3-tut3.Tpo -c -o tut3-tut3.obj `if test -f 'tut3.c'; then $(CYGPATH_W) 'tut3.c'; else $(CYGPATH_W) '$(srcdir)/tut3.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tut3-tut3.Tpo $(DEPDIR)/tut3-tut3.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tut3.c' object='tut3-tut3.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tut3_CFLAGS) $(CFLAGS) -c -o tut3-tut3.obj `if test -f 'tut3.c'; then $(CYGPATH_W) 'tut3.c'; else $(CYGPATH_W) '$(srcdir)/tut3.c'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: comedilib-0.11.0/demo/choose_filter.c0000644000000000000000000000247212416542105014331 00000000000000/* * INSN_CONFIG_FILTER example * Part of Comedilib * * Copyright (c) 1999,2000 David A. Schleef * Copyright (c) 2007 Frank Mori Hess * * This file may be freely modified, distributed, and combined with * other software, as long as proper attribution is given in the * source code. */ /* * Requirements: A board with a subdevice that supports * INSN_CONFIG_FILTER, such as the PFI subdevice on an NI m-series * or 660x board. */ #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include #include "examples.h" comedi_t *device; int main(int argc, char *argv[]) { int retval; lsampl_t filter_selection; struct parsed_options options; init_parsed_options(&options); parse_options(&options, argc, argv); device = comedi_open(options.filename); if(!device){ comedi_perror(options.filename); exit(-1); } filter_selection = options.value; printf("Selecting filter %d on subdevice %d channel %d.\n", filter_selection, options.subdevice, options.channel); retval = comedi_set_filter(device, options.subdevice, options.channel, filter_selection); if(retval < 0) comedi_perror("comedi_do_insn"); return retval; } comedilib-0.11.0/demo/README0000644000000000000000000001617612416542105012226 00000000000000 GETTING STARTED: After installing comedi and comedilib, cd to this directory (comedilib*/demo). Use ./board_info for a very first test. If hardware and software are correctly installed, the program prints a list of subdevices it recognises. If the device is not /dev/comedi0, use here and in the following the command-line option -f . Continue with ./inp -s -c to read individual samples, and with ./outp -s -c to set an output value. Other beginning demos are: cmd, dio, inpn, tut1, tut2. You should understand how these work before trying to understand the other demos. The perl subdirectory contains a few examples for the perl wrapper. DEMO PROGRAMS: ao_waveform: You need a device (and driver) capable of streaming analog output, which currently is some of the members of the NI AT-MIO and PCI-MIO E series. Creates a sine wave on an analog output channel. You can specify the frequency of the generated sine wave on the command line. board_info: Displays some information that Comedi knows about a device. choose_clock: Selects a master clock source. The subdevice must support INSN_CONFIG_CLOCK_SRC. The command-line argument specifies the clock source, and the optional -F option specifies the clock's frequency. choose_routing: Changes the signal routed to a specified channel. The subdevice must support INSN_CONFIG_SET_ROUTING. The command-line argument specifies the signal you want routed to the specified channel. This demo can be used, for example, to choose a what signal you want to appear on a PFI line (which has been configured as an output) of a National Instruments board. common: This is not an example. The file common.c just contains some code that is common to many of the examples. cmd: An example for directly using Comedi commands. Comedi commands are used for asynchronous acquisition, with the timing controlled by on-board timers or external events. If this demo doesn't work with your hardware, read the comments in the source. Hint: data is written to stdout, comments to stderr. dio: Requirements: A board with a digital I/O subdevice. Not just a 'digital input' or 'digital output' subdevice, but one in which the channels can be configured between input and output. Configures the specified channel as an output if passed a nonzero argument. Otherwise, the channel is configured as an input. Once the channel's direction has been configured, you can read/write to it with the inp/outp demo programs. do_waveform: Requirements: NI M-Series board. This demo uses the digital io subdevice with an asynchronous command to generate waveforms. The waveforms in this example are square waves with varying periods depending on the digital output channel. Channel N outputs a square wave with period 2*(N+1) clocks. The command line argument chooses the clock signal for updating the outputs. As a suggestion, you might use the output of one of the general purpose counters for a clock (the default clock source is the output of general purpose counter 0), and run the gpct_pulse_generator demo to start the counter generating pulses on its output. Note, you must configure at least one of the digital channels as an output (for example by running the dio demo program) before running this program. You must also pass the dio subdevice file using the -f option, since the default write subdevice for the m-series boards is the analog output. For example, "dio_waveform -f /dev/comedi0_sub2". eeprom_dump: Dumps the EEPROM of a card, if it has one. Useful for debugging devices/drivers. gpct_pulse_generator: Configures a NI general-purpose counter subdevice to produce a continuous train of pulses on its output. The -F option specifies the pulse period (as a frequency in Hertz), and the argument specifies the pulse width (in nanoseconds). By default, the pulse width will be set to half the pulse period. You may need to use the "dio" and "choose_routing" demos to route the counter's output to an output line that you can observe (for instance one of the PFI lines). gpct_simple_counting: Configures a NI general-purpose counter subdevice to act as a simple event counter. You can select the input to the counter using the "choose_clock" demo. The counter's value can be read out using the "inp" demo. inp: Simple input: Reads one sample from one channel on one subdevice. inpn: Slightly more complicated input demo. (It has a for() loop.) Reads each channel on a subdevice, at every possible input range, and converts the data to a voltage. insn: Example showing how to use instructions directly. Not recommended for beginners: use higher-level functions such as comedi_data_read(), comedi_data_write(), etc., as demonstrated in the inp, outp, and dio examples. ledclock: This demo requires a Fantazein clock modified to be directly controlled by the parallel port on a computer. The original demo used a real-time task and controlled the parallel port directly. This version is not complete. mmap: This example shows how to map the internal Comedi buffer and directly access samples instead of using read() and write(). This is very similar to cmd.c, so look there for comments on most of the code. outp : Write one to one channel of one subdevice. Requires a digital or analog output subdevice. pwm: controls PWM devices. Use the option -N 0 and -N 1 to switch it on / off respectively. Call with no arguments to get a help screen. receiver: This demo is meant to be used in conjunction with the sender demo. Receiver requires a digital input subdevice, and sender requires a digital output subdevice. When the clock and data pins are connected between the sending and receiving devices, one should be able to send bits over the link. select: An example for using select() with asynchronous input. This example requires an asynchronous input subdevice that can handle TRIG_TIMER as a scan_begin_src. sender: See receiver. sigio: Similar to the cmd demo. This demo sets up a signal handler for SIGIO, which is called whenever data is ready to be read from the device. sv: Similar to inp, but measures the input using the comedi_sv_*() functions, which average many samples to try to get a more accurate estimate of the actual input. tut1: tut2: Tutorial examples. See the Comedilib documentation. COMMAND-LINE OPTIONS: Many of these demos are linked with the file common.c, which parses command line options. Some options don't make sense with all programs. The options are: -a use analog reference (default: 0 == ground) -c use channel (default: 0) -s use subdevice (default: 0) -r use voltage range (default: 0) -f use device file (default: /dev/comedi0) -n use for the number of channels in a scan -N use for the number of scans -F use as the scan frequency -v verbose -d set analog reference to differential -g set analog reference to ground -o set analog reference to other -m set analog reference to common -p display values in physical units comedilib-0.11.0/demo/tut2.c0000644000000000000000000000343112715406005012376 00000000000000/* * Tutorial example #2 * Part of Comedilib * * Copyright (c) 1999,2000 David A. Schleef * Copyright (c) 2008 Frank Mori Hess * * This file may be freely modified, distributed, and combined with * other software, as long as proper attribution is given in the * source code. */ #include /* for printf() */ #include #include #include #include int subdev = 0; /* change this to your input subdevice */ int chan = 0; /* change this to your channel */ int range = 0; /* more on this later */ int aref = AREF_GROUND; /* more on this later */ const char filename[] = "/dev/comedi0"; int main(int argc, char *argv[]) { comedi_t *device; lsampl_t data; double physical_value; int retval; comedi_range *range_info; lsampl_t maxdata; device = comedi_open(filename); if (device == NULL) { comedi_perror(filename); return 1; } retval = comedi_data_read(device, subdev, chan, range, aref, &data); if (retval < 0) { comedi_perror(filename); return 1; } comedi_set_global_oor_behavior(COMEDI_OOR_NAN); range_info = comedi_get_range(device, subdev, chan, range); maxdata = comedi_get_maxdata(device, subdev, chan); printf("[0,%d] -> [%g,%g]\n", maxdata, range_info->min, range_info->max); physical_value = comedi_to_phys(data, range_info, maxdata); if (isnan(physical_value)) { printf("Out of range [%g,%g]", range_info->min, range_info->max); } else { printf("%g", physical_value); switch(range_info->unit) { case UNIT_volt: printf(" V"); break; case UNIT_mA: printf(" mA"); break; case UNIT_none: break; default: printf(" (unknown unit %d)", range_info->unit); } printf(" (%lu in raw units)\n", (unsigned long)data); } return 0; } comedilib-0.11.0/demo/poll.c0000644000000000000000000001335012715406005012447 00000000000000/* * poll.c - Example of using comedi_poll() with Comedi * Part of Comedilib * * Copyright (c) 1999,2000 David A. Schleef * * This file may be freely modified, distributed, and combined with * other software, as long as proper attribution is given in the * source code. */ /* * An example for using comedi_poll() in asynchronous input, * so you can ask the driver to pull samples that may be waiting * on the board into the buffer (so they can be read). */ #include #include #include #include #include #include #include #include #include #include #include "examples.h" #define N_SCANS 10 #define N_CHANS 16 #define BUFSZ 1000 sampl_t buf[BUFSZ]; const int n_chans = 1; const int n_scans = 10; unsigned int chanlist[4]; comedi_t *device; void prepare_cmd(comedi_t *dev, comedi_cmd *cmd, int subdevice); void do_cmd(comedi_t *dev,comedi_cmd *cmd); int main(int argc, char *argv[]) { comedi_cmd cmd; int i; struct parsed_options options; init_parsed_options(&options); parse_options(&options, argc, argv); device = comedi_open(options.filename); if(!device){ perror(options.filename); exit(1); } fcntl(comedi_fileno(device), F_SETFL, O_NONBLOCK); for(i = 0; i < n_chans; i++){ chanlist[i] = CR_PACK(options.channel + i, options.range, options.aref); } prepare_cmd(device, &cmd, options.subdevice); do_cmd(device, &cmd); return 0; } void do_cmd(comedi_t *dev,comedi_cmd *cmd) { int total=0; int ret; int go; fd_set rdset; struct timeval timeout; ret=comedi_command_test(dev,cmd); printf("test ret=%d\n",ret); if(ret<0){ printf("errno=%d\n",errno); comedi_perror("comedi_command_test"); return; } dump_cmd(stdout,cmd); ret=comedi_command_test(dev,cmd); printf("test ret=%d\n",ret); if(ret<0){ printf("errno=%d\n",errno); comedi_perror("comedi_command_test"); return; } dump_cmd(stdout,cmd); comedi_set_read_subdevice(dev, cmd->subdev); ret = comedi_get_read_subdevice(dev); if (ret < 0 || ret != cmd->subdev) { fprintf(stderr, "failed to change 'read' subdevice from %d to %d\n", ret, cmd->subdev); return; } ret=comedi_command(dev,cmd); printf("ret=%d\n",ret); if(ret<0){ printf("errno=%d\n",errno); comedi_perror("comedi_command"); return; } go=1; while(go){ FD_ZERO(&rdset); FD_SET(comedi_fileno(device),&rdset); timeout.tv_sec = 0; timeout.tv_usec = 50000; ret = select(comedi_fileno(dev)+1,&rdset,NULL,NULL,&timeout); //printf("select returned %d\n",ret); if(ret<0){ perror("select"); }else if(ret==0){ /* hit timeout */ printf("timeout, polling...\n"); ret = comedi_poll(device,cmd->subdev); printf("poll returned %d\n",ret); }else if(FD_ISSET(comedi_fileno(device),&rdset)){ /* comedi file descriptor became ready */ //printf("comedi file descriptor ready\n"); ret=read(comedi_fileno(dev),buf,sizeof(buf)); printf("read returned %d\n",ret); if(ret<0){ if(errno==EAGAIN){ go = 0; perror("read"); } }else if(ret==0){ go = 0; }else{ int i; total+=ret; //printf("read %d %d\n",ret,total); for(i=0;isubdev = subdevice; /* flags */ cmd->flags = 0; /* each event requires a trigger, which is specified by a source and an argument. For example, to specify an external digital line 3 as a source, you would use src=TRIG_EXT and arg=3. */ /* In this case, we specify using TRIG_NOW to start * acquisition immediately when the command is issued. * The argument of TRIG_NOW is "number of nsec after * NOW", but no driver supports it yet. Also, no driver * currently supports using a start_src other than * TRIG_NOW. */ cmd->start_src = TRIG_NOW; cmd->start_arg = 0; /* The timing of the beginning of each scan is controlled * by scan_begin. TRIG_TIMER specifies that scan_start * events occur periodically at a rate of scan_begin_arg * nanoseconds between scans. */ cmd->scan_begin_src = TRIG_TIMER; cmd->scan_begin_arg = msec_to_nsec(100); /* The timing between each sample in a scan is controlled * by convert. Like above, TRIG_TIMER specifies that * convert events occur periodically at a rate of convert_arg * nanoseconds between scans. */ cmd->convert_src = TRIG_TIMER; cmd->convert_arg = msec_to_nsec(1); /* The end of each scan is almost always specified using * TRIG_COUNT, with the argument being the same as the * number of channels in the chanlist. You could probably * find a device that allows something else, but it would * be strange. */ cmd->scan_end_src = TRIG_COUNT; cmd->scan_end_arg = n_chans; /* number of channels */ /* The end of acquisition is controlled by stop_src and * stop_arg. The src will typically be TRIG_COUNT or * TRIG_NONE. Specifying TRIG_COUNT will stop acquisition * after stop_arg number of scans, or TRIG_NONE will * cause acquisition to continue until stopped using * comedi_cancel(). */ cmd->stop_src = TRIG_COUNT; cmd->stop_arg = n_scans; /* the channel list determined which channels are sampled. In general, chanlist_len is the same as scan_end_arg. Most boards require this. */ cmd->chanlist = chanlist; cmd->chanlist_len = n_chans; } comedilib-0.11.0/demo/eeprom_dump.c0000644000000000000000000000432012416542105014012 00000000000000/* Dumps eeproms */ #include #include #include #include #include #include #include #include #include "examples.h" int read_eeprom(comedi_t *it,unsigned int **eeprom, struct parsed_options options); void dump_eeprom(unsigned int *eeprom,int len); comedi_t *device; int main(int argc, char *argv[]) { int len; unsigned int *eeprom; struct parsed_options options; init_parsed_options(&options); options.subdevice = -1; parse_options(&options, argc, argv); device = comedi_open(options.filename); if(!device){ comedi_perror(options.filename); exit(-1); } len = read_eeprom(device, &eeprom, options); dump_eeprom(eeprom,len); return 0; } int read_eeprom(comedi_t *it, unsigned int **eeprom, struct parsed_options options) { int n,i,ret; lsampl_t data; unsigned int *ptr; lsampl_t maxdata; if(options.subdevice < 0) { options.subdevice = comedi_find_subdevice_by_type(it, COMEDI_SUBD_MEMORY, 0); if(options.subdevice < 0){ fprintf(stderr,"No memory subdevice\n"); return 0; } } n = comedi_get_n_channels(it, options.subdevice); maxdata = comedi_get_maxdata(it, options.subdevice, 0); if(maxdata != 0xff){ fprintf(stderr,"Demo only supports 8-bit memory subdevice has strange maxdata, aborting\n"); exit(-1); } ptr = malloc(sizeof(unsigned int) * n); for(i = 0; i < n; i++){ ret = comedi_data_read(it, options.subdevice, i, 0, 0, &data); ptr[i] = data; if(ret < 0){ comedi_perror("comedi_data_read"); return 0; } } *eeprom=ptr; return n; } void dump_eeprom(unsigned int *eeprom,int len) { int i, j, c; for (i = 0; i < len - 16; i+=16) { printf("%04x: ",i); for (j = 0; j < 16; j++) { printf("%02x", eeprom[i + j] & 0xff); } printf(" "); for (j = 0; j < 16; j++) { c = eeprom[i + j] & 0xff; printf("%c", isprint(c) ? c : '.'); } printf("\n"); } if(i==len)return; printf("%04x: ",i); for (j = 0; j < len-i; j++) { printf("%02x", eeprom[i + j] & 0xff); } for(;j<16;j++){ printf(" "); } printf(" "); for (j = 0; j < len-i; j++) { c = eeprom[i + j] & 0xff; printf("%c", isprint(c) ? c : '.'); } for(;j<16;j++){ printf(" "); } printf("\n"); } comedilib-0.11.0/demo/sigio.c0000644000000000000000000001050712715406005012614 00000000000000/* * SIGIO example * Part of Comedilib * * Copyright (c) 1999,2000 David A. Schleef * * This file may be freely modified, distributed, and combined with * other software, as long as proper attribution is given in the * source code. */ #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include #include #include #include "examples.h" comedi_t *device; void print_time(void); void sigio_handler(int sig) { print_time(); } void print_time(void) { struct timeval tv; static struct timeval oldtime={0}; int dsec,dusec; gettimeofday(&tv,NULL); dsec=tv.tv_sec-oldtime.tv_sec; dusec=tv.tv_usec-oldtime.tv_usec; if(dusec<0){ dsec--; dusec+=1000000; } printf("%d.%06d +%d.%06d\n",(int)tv.tv_sec,(int)tv.tv_usec,dsec,dusec); oldtime=tv; } int out_subd; void config_output(void) { int i; for(i=0;i<8;i++){ comedi_dio_config(device,out_subd,i,COMEDI_OUTPUT); } } int count; #define BUFSZ 1024 sampl_t buf[BUFSZ]; void do_cmd_1(comedi_t *dev, int subdevice); void do_cmd_2(comedi_t *dev); void do_cmd(comedi_t *dev,comedi_cmd *cmd); int main(int argc, char *argv[]) { struct sigaction sa; int ret; sigset_t sigset; int flags; struct parsed_options options; init_parsed_options(&options); parse_options(&options, argc, argv); device = comedi_open(options.filename); if(!device){ perror(options.filename); exit(1); } out_subd = 2; config_output(); fcntl(comedi_fileno(device), F_SETOWN, getpid()); flags = fcntl(comedi_fileno(device),F_GETFL); ret = fcntl(comedi_fileno(device),F_SETFL,flags|O_ASYNC); //ret = fcntl(comedi_fileno(device),F_SETFL,O_NONBLOCK|O_ASYNC); if(ret<0)perror("fcntl"); memset(&sa,0,sizeof(sa)); sa.sa_handler = &sigio_handler; ret = sigaction(SIGIO,&sa,NULL); if(ret<0)perror("sigaction"); sigemptyset(&sigset); sigaddset(&sigset,SIGIO); ret = sigprocmask(SIG_UNBLOCK,&sigset,NULL); if(ret<0)perror("sigprocmask"); #if 0 { struct sched_param p; memset(&p,0,sizeof(p)); p.sched_priority = 1; ret = sched_setscheduler(0,SCHED_FIFO,&p); if(ret<0)perror("sched_setscheduler"); } #endif do_cmd_1(device, options.subdevice); return 0; } void do_cmd(comedi_t *dev,comedi_cmd *cmd) { int total=0; int ret; int go; ret=comedi_command_test(dev,cmd); printf("test ret=%d\n",ret); if(ret<0){ printf("errno=%d\n",errno); comedi_perror("comedi_command_test"); return; } dump_cmd(stdout,cmd); ret=comedi_command_test(dev,cmd); printf("test ret=%d\n",ret); if(ret<0){ printf("errno=%d\n",errno); comedi_perror("comedi_command_test"); return; } dump_cmd(stdout,cmd); comedi_set_read_subdevice(dev, cmd->subdev); ret = comedi_get_read_subdevice(dev); if (ret < 0 || ret != cmd->subdev) { fprintf(stderr, "failed to change 'read' subdevice from %d to %d\n", ret, cmd->subdev); return; } ret=comedi_command(dev,cmd); printf("ret=%d\n",ret); if(ret<0){ printf("errno=%d\n",errno); comedi_perror("comedi_command"); return; } go=1; while(go){ ret=read(comedi_fileno(dev),buf,BUFSZ); if(ret<0){ if(errno==EAGAIN){ printf("EAGAIN\n"); usleep(10000); }else{ go = 0; perror("read"); } }else if(ret==0){ go = 0; }else{ //int i; total+=ret; //printf("read %d %d\n",ret,total); //printf("count = %d\n",count); //print_time(); } } } unsigned int chanlist[0]; /* * This part of the demo measures channels 1, 2, 3, 4 at a rate of * 10 khz, with the inter-sample time at 10 us (100 khz). The number * of scans measured is 10. This is analogous to the old mode2 * acquisition. */ void do_cmd_1(comedi_t *dev, int subdevice) { comedi_cmd cmd; memset(&cmd,0,sizeof(cmd)); /* the subdevice that the command is sent to */ cmd.subdev = subdevice; /* flags */ cmd.flags = TRIG_WAKE_EOS; cmd.start_src = TRIG_NOW; cmd.start_arg = 0; cmd.scan_begin_src = TRIG_TIMER; cmd.scan_begin_arg = msec_to_nsec(100); #if 1 cmd.convert_src = TRIG_TIMER; cmd.convert_arg = 1; #else cmd.convert_src = TRIG_ANY; cmd.convert_arg = 0; #endif cmd.scan_end_src = TRIG_COUNT; cmd.scan_end_arg = 1; cmd.stop_src = TRIG_NONE; cmd.stop_arg = 0; cmd.chanlist = chanlist; cmd.chanlist_len = 1; chanlist[0]=CR_PACK(0,0,0); do_cmd(dev,&cmd); } comedilib-0.11.0/demo/sv.c0000644000000000000000000000235112416542105012130 00000000000000/* * Demo of the comedi_sv_*() functions * * Part of Comedilib * * Copyright (c) 1999,2000 David A. Schleef * * This file may be freely modified, distributed, and combined with * other software, as long as proper attribution is given in the * source code. */ #include #include #include #include #include #include #include #include #include "examples.h" comedi_t *device; int main(int argc, char *argv[]) { int ret; comedi_sv_t sv; double volts; struct parsed_options options; init_parsed_options(&options); parse_options(&options, argc, argv); device = comedi_open(options.filename); if(!device){ comedi_perror(options.filename); exit(-1); } if(options.verbose){ printf("measuring device=%s subdevice=%d channel=%d range=%d analog reference=%d\n", options.filename, options.subdevice, options.channel, options.range, options.aref); } comedi_sv_init(&sv, device, options.subdevice, options.channel); sv.range = options.range; sv.aref = options.aref; sv.n = 100; ret = comedi_sv_measure(&sv, &volts); if(ret < 0){ comedi_perror("comedi_sv_measure()"); exit(-1); } printf("%g\n", volts); return 0; } comedilib-0.11.0/demo/cmd.c0000644000000000000000000002661613010363262012251 00000000000000/* * Example of using commands - asynchronous input * Part of Comedilib * * Copyright (c) 1999,2000,2001 David A. Schleef * * This file may be freely modified, distributed, and combined with * other software, as long as proper attribution is given in the * source code. */ /* * An example for directly using Comedi commands. Comedi commands * are used for asynchronous acquisition, with the timing controlled * by on-board timers or external events. */ #include #include #include #include #include #include #include #include #include "examples.h" #define BUFSZ 10000 char buf[BUFSZ]; #define N_CHANS 256 static unsigned int chanlist[N_CHANS]; static comedi_range * range_info[N_CHANS]; static lsampl_t maxdata[N_CHANS]; int prepare_cmd_lib(comedi_t *dev, int subdevice, int n_scan, int n_chan, unsigned period_nanosec, comedi_cmd *cmd); void do_cmd(comedi_t *dev,comedi_cmd *cmd); void print_datum(lsampl_t raw, int channel_index, short physical); char *cmdtest_messages[]={ "success", "invalid source", "source conflict", "invalid argument", "argument conflict", "invalid chanlist", }; int main(int argc, char *argv[]) { comedi_t *dev; comedi_cmd c,*cmd=&c; int ret; int total=0; int i; struct timeval start,end; int subdev_flags; lsampl_t raw; struct parsed_options options; init_parsed_options(&options); options.subdevice = -1; parse_options(&options, argc, argv); if(options.n_chan > N_CHANS){ options.n_chan = N_CHANS; } /* The following variables used in this demo * can be modified by command line * options. When modifying this demo, you may want to * change them here. */ //options.filename = "/dev/comedi0"; //options.subdevice = 0; //options.channel = 0; //options.range = 0; //options.aref = AREF_GROUND; //options.n_chan = 4; //options.n_scan = 1000; //options.freq = 1000.0; /* open the device */ dev = comedi_open(options.filename); if(!dev){ comedi_perror(options.filename); exit(1); } if(options.subdevice < 0) { /* Subdevice not set on command line. */ /* Default to the 'read' subdevice (if any). */ options.subdevice = comedi_get_read_subdevice(dev); if(options.subdevice < 0) { /* No 'read' subdevice, so default to 0 instead. */ options.subdevice = 0; } fprintf(stderr, "defaulted to subdevice %d\n", options.subdevice); } /* Check subdevice exists. */ ret = comedi_get_n_subdevices(dev); if(ret <= options.subdevice){ fprintf(stderr, "subdevice %d does not exist\n", options.subdevice); exit(1); } /* Check subdevice supports 'read' commands. */ ret = comedi_get_subdevice_flags(dev, options.subdevice); if(ret < 0 || !(ret & SDF_CMD_READ)) { fprintf(stderr, "subdevice %d does not support 'read' commands\n", options.subdevice); exit(1); } // Print numbers for clipped inputs comedi_set_global_oor_behavior(COMEDI_OOR_NUMBER); /* Set up channel list */ for(i = 0; i < options.n_chan; i++){ chanlist[i] = CR_PACK(options.channel + i, options.range, options.aref); range_info[i] = comedi_get_range(dev, options.subdevice, options.channel, options.range); maxdata[i] = comedi_get_maxdata(dev, options.subdevice, options.channel); } /* prepare_cmd_lib() uses a Comedilib routine to find a * good command for the device. prepare_cmd() explicitly * creates a command, which may not work for your device. */ ret = prepare_cmd_lib(dev, options.subdevice, options.n_scan, options.n_chan, 1e9 / options.freq, cmd); //ret = prepare_cmd(dev, options.subdevice, options.n_scan, options.n_chan, 1e9 / options.freq, cmd); if(ret < 0){ exit(1); } fprintf(stderr, "command before testing:\n"); dump_cmd(stderr, cmd); /* comedi_command_test() tests a command to see if the * trigger sources and arguments are valid for the subdevice. * If a trigger source is invalid, it will be logically ANDed * with valid values (trigger sources are actually bitmasks), * which may or may not result in a valid trigger source. * If an argument is invalid, it will be adjusted to the * nearest valid value. In this way, for many commands, you * can test it multiple times until it passes. Typically, * if you can't get a valid command in two tests, the original * command wasn't specified very well. */ ret = comedi_command_test(dev, cmd); if(ret < 0){ comedi_perror("comedi_command_test"); if(errno == EIO){ fprintf(stderr,"Ummm... this subdevice doesn't support commands\n"); } exit(1); } fprintf(stderr,"first test returned %d (%s)\n", ret, cmdtest_messages[ret]); dump_cmd(stderr, cmd); ret = comedi_command_test(dev, cmd); if(ret < 0){ comedi_perror("comedi_command_test"); exit(1); } fprintf(stderr,"second test returned %d (%s)\n", ret, cmdtest_messages[ret]); if(ret!=0){ dump_cmd(stderr, cmd); fprintf(stderr, "Error preparing command\n"); exit(1); } comedi_set_read_subdevice(dev, cmd->subdev); ret = comedi_get_read_subdevice(dev); if (ret < 0 || ret != cmd->subdev) { fprintf(stderr, "failed to change 'read' subdevice from %d to %d\n", ret, cmd->subdev); exit(1); } /* this is only for informational purposes */ gettimeofday(&start, NULL); fprintf(stderr,"start time: %ld.%06ld\n", start.tv_sec, start.tv_usec); /* start the command */ ret = comedi_command(dev, cmd); if(ret < 0){ comedi_perror("comedi_command"); exit(1); } subdev_flags = comedi_get_subdevice_flags(dev, options.subdevice); while(1){ ret = read(comedi_fileno(dev),buf,BUFSZ); if(ret < 0){ /* some error occurred */ perror("read"); break; }else if(ret == 0){ /* reached stop condition */ break; }else{ static int col = 0; int bytes_per_sample; total += ret; if(options.verbose)fprintf(stderr, "read %d %d\n", ret, total); if(subdev_flags & SDF_LSAMPL) bytes_per_sample = sizeof(lsampl_t); else bytes_per_sample = sizeof(sampl_t); for(i = 0; i < ret / bytes_per_sample; i++){ if(subdev_flags & SDF_LSAMPL) { raw = ((lsampl_t *)buf)[i]; } else { raw = ((sampl_t *)buf)[i]; } print_datum(raw, col, options.physical); col++; if(col == options.n_chan){ printf("\n"); col=0; } } } } /* this is only for informational purposes */ gettimeofday(&end,NULL); fprintf(stderr,"end time: %ld.%06ld\n", end.tv_sec, end.tv_usec); end.tv_sec -= start.tv_sec; if(end.tv_usec < start.tv_usec){ end.tv_sec--; end.tv_usec += 1000000; } end.tv_usec -= start.tv_usec; fprintf(stderr,"time: %ld.%06ld\n", end.tv_sec, end.tv_usec); return 0; } /* * This prepares a command in a pretty generic way. We ask the * library to create a stock command that supports periodic * sampling of data, then modify the parts we want. */ int prepare_cmd_lib(comedi_t *dev, int subdevice, int n_scan, int n_chan, unsigned scan_period_nanosec, comedi_cmd *cmd) { int ret; memset(cmd,0,sizeof(*cmd)); /* This comedilib function will get us a generic timed * command for a particular board. If it returns -1, * that's bad. */ ret = comedi_get_cmd_generic_timed(dev, subdevice, cmd, n_chan, scan_period_nanosec); if(ret<0){ fprintf(stderr,"comedi_get_cmd_generic_timed failed\n"); return ret; } /* Modify parts of the command */ cmd->chanlist = chanlist; cmd->chanlist_len = n_chan; if(cmd->stop_src == TRIG_COUNT) cmd->stop_arg = n_scan; return 0; } /* * Set up a command by hand. This will not work on some devices. * There is no single command that will work on all devices. */ int prepare_cmd(comedi_t *dev, int subdevice, int n_scan, int n_chan, unsigned period_nanosec, comedi_cmd *cmd) { memset(cmd,0,sizeof(*cmd)); /* the subdevice that the command is sent to */ cmd->subdev = subdevice; /* flags */ cmd->flags = 0; /* Wake up at the end of every scan */ //cmd->flags |= TRIG_WAKE_EOS; /* Use a real-time interrupt, if available */ //cmd->flags |= TRIG_RT; /* each event requires a trigger, which is specified by a source and an argument. For example, to specify an external digital line 3 as a source, you would use src=TRIG_EXT and arg=3. */ /* The start of acquisition is controlled by start_src. * TRIG_NOW: The start_src event occurs start_arg nanoseconds * after comedi_command() is called. Currently, * only start_arg=0 is supported. * TRIG_FOLLOW: (For an output device.) The start_src event occurs * when data is written to the buffer. * TRIG_EXT: start event occurs when an external trigger * signal occurs, e.g., a rising edge of a digital * line. start_arg chooses the particular digital * line. * TRIG_INT: start event occurs on a Comedi internal signal, * which is typically caused by an INSN_TRIG * instruction. */ cmd->start_src = TRIG_NOW; cmd->start_arg = 0; /* The timing of the beginning of each scan is controlled by * scan_begin. * TRIG_TIMER: scan_begin events occur periodically. * The time between scan_begin events is * convert_arg nanoseconds. * TRIG_EXT: scan_begin events occur when an external trigger * signal occurs, e.g., a rising edge of a digital * line. scan_begin_arg chooses the particular digital * line. * TRIG_FOLLOW: scan_begin events occur immediately after a scan_end * event occurs. * The scan_begin_arg that we use here may not be supported exactly * by the device, but it will be adjusted to the nearest supported * value by comedi_command_test(). */ cmd->scan_begin_src = TRIG_TIMER; cmd->scan_begin_arg = period_nanosec; /* in ns */ /* The timing between each sample in a scan is controlled by convert. * TRIG_TIMER: Conversion events occur periodically. * The time between convert events is * convert_arg nanoseconds. * TRIG_EXT: Conversion events occur when an external trigger * signal occurs, e.g., a rising edge of a digital * line. convert_arg chooses the particular digital * line. * TRIG_NOW: All conversion events in a scan occur simultaneously. * Even though it is invalid, we specify 1 ns here. It will be * adjusted later to a valid value by comedi_command_test() */ cmd->convert_src = TRIG_TIMER; cmd->convert_arg = 1; /* in ns */ /* The end of each scan is almost always specified using * TRIG_COUNT, with the argument being the same as the * number of channels in the chanlist. You could probably * find a device that allows something else, but it would * be strange. */ cmd->scan_end_src = TRIG_COUNT; cmd->scan_end_arg = n_chan; /* number of channels */ /* The end of acquisition is controlled by stop_src and * stop_arg. * TRIG_COUNT: stop acquisition after stop_arg scans. * TRIG_NONE: continuous acquisition, until stopped using * comedi_cancel() * */ cmd->stop_src = TRIG_COUNT; cmd->stop_arg = n_scan; /* the channel list determined which channels are sampled. In general, chanlist_len is the same as scan_end_arg. Most boards require this. */ cmd->chanlist = chanlist; cmd->chanlist_len = n_chan; return 0; } void print_datum(lsampl_t raw, int channel_index, short physical) { double physical_value; if(!physical) { printf("%d ",raw); } else { physical_value = comedi_to_phys(raw, range_info[channel_index], maxdata[channel_index]); printf("%#8.6g ",physical_value); } } comedilib-0.11.0/demo/common.c0000644000000000000000000000564412416542105013000 00000000000000/* * This is a little helper function to parse options that * are common to most of the examples. */ #include #include #include #include #include #include #include #include #include #include #include "examples.h" static char * const default_filename = "/dev/comedi0"; void init_parsed_options(struct parsed_options *options) { memset(options, 0, sizeof(struct parsed_options)); options->filename = default_filename; options->aref = AREF_GROUND; options->n_chan = 4; options->n_scan = 1000; options->freq = 1000.0; options->physical = 0; options->value = 0.; } int parse_options(struct parsed_options *options, int argc, char *argv[]) { int c; while (-1 != (c = getopt(argc, argv, "a:c:s:r:f:n:N:F:pvdgom"))) { switch (c) { case 'f': options->filename = optarg; break; case 's': options->subdevice = strtoul(optarg, NULL, 0); break; case 'c': options->channel = strtoul(optarg, NULL, 0); break; case 'a': options->aref = strtoul(optarg, NULL, 0); break; case 'r': options->range = strtoul(optarg, NULL, 0); break; case 'n': options->n_chan = strtoul(optarg, NULL, 0); break; case 'N': options->n_scan = strtoul(optarg, NULL, 0); break; case 'F': options->freq = strtod(optarg, NULL); break; case 'p': options->physical = 1; break; case 'v': ++options->verbose; break; case 'd': options->aref = AREF_DIFF; break; case 'g': options->aref = AREF_GROUND; break; case 'o': options->aref = AREF_OTHER; break; case 'm': options->aref = AREF_COMMON; break; default: printf("bad option\n"); exit(1); } } if(optind < argc) { /* data value */ options->value = strtod(argv[optind++], NULL); } return argc; } char *cmd_src(int src,char *buf) { buf[0]=0; if(src&TRIG_NONE)strcat(buf,"none|"); if(src&TRIG_NOW)strcat(buf,"now|"); if(src&TRIG_FOLLOW)strcat(buf, "follow|"); if(src&TRIG_TIME)strcat(buf, "time|"); if(src&TRIG_TIMER)strcat(buf, "timer|"); if(src&TRIG_COUNT)strcat(buf, "count|"); if(src&TRIG_EXT)strcat(buf, "ext|"); if(src&TRIG_INT)strcat(buf, "int|"); #ifdef TRIG_OTHER if(src&TRIG_OTHER)strcat(buf, "other|"); #endif if(strlen(buf)==0){ sprintf(buf,"unknown(0x%08x)",src); }else{ buf[strlen(buf)-1]=0; } return buf; } void dump_cmd(FILE *out,comedi_cmd *cmd) { char buf[100]; fprintf(out,"subdevice: %d\n", cmd->subdev); fprintf(out,"start: %-8s %d\n", cmd_src(cmd->start_src,buf), cmd->start_arg); fprintf(out,"scan_begin: %-8s %d\n", cmd_src(cmd->scan_begin_src,buf), cmd->scan_begin_arg); fprintf(out,"convert: %-8s %d\n", cmd_src(cmd->convert_src,buf), cmd->convert_arg); fprintf(out,"scan_end: %-8s %d\n", cmd_src(cmd->scan_end_src,buf), cmd->scan_end_arg); fprintf(out,"stop: %-8s %d\n", cmd_src(cmd->stop_src,buf), cmd->stop_arg); } comedilib-0.11.0/demo/choose_routing.c0000644000000000000000000000237012416542105014530 00000000000000/* * INSN_CONFIG_SET_ROUTING example * Part of Comedilib * * Copyright (c) 1999,2000 David A. Schleef * Copyright (c) 2007 Frank Mori Hess * * This file may be freely modified, distributed, and combined with * other software, as long as proper attribution is given in the * source code. */ /* * Requirements: A board with a subdevice that supports * INSN_CONFIG_SET_ROUTING */ #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include #include "examples.h" comedi_t *device; int main(int argc, char *argv[]) { int retval; lsampl_t routing; struct parsed_options options; init_parsed_options(&options); options.freq = 0.; parse_options(&options, argc, argv); device = comedi_open(options.filename); if(!device){ comedi_perror(options.filename); exit(-1); } routing = options.value; printf("Selecting routing %d for channel %d on subdevice %d.\n", routing, options.channel, options.subdevice); retval = comedi_set_routing(device, options.subdevice, options.channel, routing); if(retval < 0) comedi_perror("comedi_do_insn"); return retval; } comedilib-0.11.0/demo/gpct_buffered_counting.c0000644000000000000000000001526412715406005016214 00000000000000/* * NI general-purpose counter example. Makes the counter * do buffered event counting using comedi_command(). * Different clock sources can be chosen * with the choose_clock demo. The gate source is * set to PFI1 (which is assumed to already be configured as * an input). The gate source latches the count * into the data stream, and possibly resets it (for * non-cumulative buffered counting). * Part of Comedilib * * Copyright (c) 2007 Frank Mori Hess * * This file may be freely modified, distributed, and combined with * other software, as long as proper attribution is given in the * source code. */ /* * Requirements: A board with a National Instruments general-purpose * counter, and comedi driver version 0.7.74 or newer. */ #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include #include #include #include "examples.h" int check_subdevice(comedi_t *device, int *subdevice, const char *device_filepath) { int subdevice_type; int read_subdevice; read_subdevice = comedi_get_read_subdevice(device); if (*subdevice >= 0 && read_subdevice != *subdevice) { if (comedi_set_read_subdevice(device, *subdevice) == 0) { /* 'read' subdevice changed successfully */ read_subdevice = *subdevice; } } if(read_subdevice < 0) { fprintf(stderr, "Device file \"%s\" cannot do streaming input.\n", device_filepath); return -1; } if(*subdevice < 0) *subdevice = read_subdevice; if(read_subdevice != *subdevice) { fprintf(stderr, "You specified subdevice %i, but the read subdevice of device file \"%s\" is %i.\n", *subdevice, device_filepath, read_subdevice); return -1; } subdevice_type = comedi_get_subdevice_type(device, *subdevice); if(subdevice_type < 0) { comedi_perror("comedi_get_subdevice_type()"); return -1; } if(subdevice_type != COMEDI_SUBD_COUNTER) { fprintf(stderr, "Subdevice is not a counter (type %i), but of type %i.\n", COMEDI_SUBD_COUNTER, subdevice_type); return -1; } return 0; } int ni_gpct_configure_buffered_event_counting(comedi_t *device, unsigned subdevice) { int retval; lsampl_t counter_mode; static const unsigned gate_pfi_channel = 1; static const unsigned initial_count = 0; retval = comedi_reset(device, subdevice); if(retval < 0) return retval; #if 1 // PFI gate select works for e and m series retval = comedi_set_gate_source(device, subdevice, 0, 0, NI_GPCT_PFI_GATE_SELECT(gate_pfi_channel) /*| CR_EDGE*/); #else // gate pin gate select works for 660x retval = comedi_set_gate_source(device, subdevice, 0, 0, NI_GPCT_GATE_PIN_i_GATE_SELECT /*| CR_EDGE*/); #endif if(retval < 0) return retval; retval = comedi_set_gate_source(device, subdevice, 0, 1, NI_GPCT_DISABLED_GATE_SELECT | CR_EDGE); if(retval < 0) { fprintf(stderr, "Failed to set second gate source. This is expected for older boards (e-series, etc.)\n" "that don't have a second gate.\n"); } counter_mode = NI_GPCT_COUNTING_MODE_NORMAL_BITS; // output pulse on terminal count (doesn't really matter for this application) counter_mode |= NI_GPCT_OUTPUT_TC_PULSE_BITS; /* Don't alternate the reload source between the load a and load b registers.*/ counter_mode |= NI_GPCT_RELOAD_SOURCE_FIXED_BITS; /* Reload counter on gate. Do not set if you want to do cumulative buffered counting. */ counter_mode |= NI_GPCT_LOADING_ON_GATE_BIT; /* Make gate start/stop counting */ counter_mode |= NI_GPCT_EDGE_GATE_STARTS_STOPS_BITS; // count up counter_mode |= NI_GPCT_COUNTING_DIRECTION_UP_BITS; // don't stop on terminal count counter_mode |= NI_GPCT_STOP_ON_GATE_BITS; // don't disarm on terminal count or gate signal counter_mode |= NI_GPCT_NO_HARDWARE_DISARM_BITS; retval = comedi_set_counter_mode(device, subdevice, 0, counter_mode); if(retval < 0) return retval; /* Set initial counter value by writing to channel 0.*/ retval = comedi_data_write(device, subdevice, 0, 0, 0, initial_count); /* Set value of "load a" register by writing to channel 1.*/ retval = comedi_data_write(device, subdevice, 1, 0, 0, initial_count); return 0; } int ni_gpct_send_command(comedi_t *device, unsigned subdevice, unsigned n_counts) { comedi_cmd cmd; static const unsigned num_chan = 1; lsampl_t chanlist[num_chan]; int retval; memset(&cmd, 0, sizeof(cmd)); cmd.subdev = subdevice; cmd.flags = 0; /* Wake up at the end of every scan, reduces latency for slow data streams. Turn off for more efficient throughput. */ cmd.flags |= TRIG_WAKE_EOS; cmd.start_src = TRIG_NOW; cmd.start_arg = 0; /* TRIG_OTHER will use the already configured gate source to latch counts. Can also use TRIG_EXT and specify the gate source as the scan_begin_arg */ cmd.scan_begin_src = TRIG_OTHER; cmd.scan_begin_arg = 0; cmd.convert_src = TRIG_NOW; cmd.convert_arg = 0; cmd.scan_end_src = TRIG_COUNT; cmd.scan_end_arg = num_chan; cmd.stop_src = TRIG_NONE; cmd.stop_arg = 0; cmd.chanlist = chanlist; cmd.chanlist_len = num_chan; chanlist[0] = 0; retval = comedi_command_test(device, &cmd); if(retval) { fprintf(stderr, "comedi_command_test() failed.\n"); return -1; } retval = comedi_command(device, &cmd); if(retval) { fprintf(stderr, "comedi_command() failed.\n"); return -1; } return 0; } int ni_gpct_read_and_dump_counts(comedi_t *device, unsigned subdevice) { int retval; int fd; static const unsigned buffer_size = 1000; lsampl_t buffer[buffer_size]; fd = comedi_fileno(device); retval = read(fd, buffer, buffer_size * sizeof(lsampl_t)); while(retval > 0) { unsigned num_counts = retval / sizeof(lsampl_t); unsigned i; for(i = 0; i < num_counts; ++i) { printf("%i\n", buffer[i]); } retval = read(fd, buffer, buffer_size * sizeof(lsampl_t)); } if(retval < 0) { fprintf(stderr, "error reading from subdevice file.\n"); perror("read"); return -errno; } return 0; } int main(int argc, char *argv[]) { comedi_t *device; int retval; struct parsed_options options; init_parsed_options(&options); options.subdevice = -1; parse_options(&options, argc, argv); device = comedi_open(options.filename); if(!device) { comedi_perror(options.filename); exit(-1); } retval = check_subdevice(device, &options.subdevice, options.filename); if(retval < 0) return retval; printf("Running buffered event counting on subdevice %d.\n", options.subdevice); retval = ni_gpct_configure_buffered_event_counting(device, options.subdevice); if(retval < 0) return retval; retval = ni_gpct_send_command(device, options.subdevice, options.n_scan); if(retval < 0) return retval; retval = ni_gpct_read_and_dump_counts(device, options.subdevice); if(retval < 0) return retval; return 0; } comedilib-0.11.0/demo/apply_cal.c0000644000000000000000000000232712416542105013447 00000000000000/* * demo for changing between different (hardware-based) calibrations * Part of Comedilib * * Copyright (c) 1999,2000 David A. Schleef * * This file may be freely modified, distributed, and combined with * other software, as long as proper attribution is given in the * source code. */ /* * A little output demo */ #include #include #include #include #include #include #include #include #include "examples.h" comedi_t *device; int main(int argc, char *argv[]) { lsampl_t data; int ret; struct parsed_options options; init_parsed_options(&options); parse_options(&options, argc, argv); device=comedi_open(options.filename); if(!device){ comedi_perror(options.filename); exit(-1); } data = options.value; if(options.verbose){ printf("writing %d to device=%s subdevice=%d channel=%d range=%d analog reference=%d\n", data, options.filename, options.subdevice, options.channel, options.range, options.aref); } ret = comedi_apply_calibration(device, options.subdevice, options.channel, options.range, options.aref, NULL); if(ret < 0){ comedi_perror(options.filename); exit(0); } return 0; } comedilib-0.11.0/demo/insn.c0000644000000000000000000000645012731736764012473 00000000000000/* * Instruction example * Part of Comedilib * * Copyright (c) 1999,2000 David A. Schleef * * This file may be freely modified, distributed, and combined with * other software, as long as proper attribution is given in the * source code. */ /* This example shows how to use instructions, i.e., comedi_insns. Using instructions directly, as in this example, is not recommended for the beginner. Use the higher-level functions such as comedi_data_read(), comedi_data_write(), etc., as demonstrated in the inp, outp, and dio examples. Then, if you need the additional flexibility that using instructions directly provides, study this example and the implementations of comedi_data_read(), etc. */ #include #include #include #include #include #include #include #include #include "examples.h" /* * This example does 3 instructions in one system call. It does * a gettimeofday() call, then reads N_SAMPLES samples from an * analog input, and the another gettimeofday() call. * * (Note: The gettimeofday() value is obtained using an INSN_GTOD * instruction, which places the seconds value in data[0] and the * microseconds in data[1], so the seconds value is limited to * 32-bits even on 64-bit systems.) */ #define MAX_SAMPLES 128 comedi_t *device; int main(int argc, char *argv[]) { int ret,i; comedi_insn insn[3]; comedi_insnlist il; lsampl_t t1[2], t2[2]; lsampl_t data[MAX_SAMPLES]; long diffus; struct parsed_options options; init_parsed_options(&options); options.n_scan = 10; /* override default n_scan value to something more suitable */ parse_options(&options, argc, argv); if(options.n_scan > MAX_SAMPLES ){ fprintf( stderr, "Requested too many samples, reducing to %i\n", MAX_SAMPLES ); options.n_scan = MAX_SAMPLES; } device = comedi_open(options.filename); if(!device){ comedi_perror(options.filename); exit(-1); } if(options.verbose){ printf("measuring device=%s subdevice=%d channel=%d range=%d analog reference=%d\n", options.filename, options.subdevice, options.channel, options.range, options.aref); } /* Set up a the "instruction list", which is just a pointer * to the array of instructions and the number of instructions. */ il.n_insns=3; il.insns=insn; /* Instruction 0: perform a gettimeofday() */ insn[0].insn=INSN_GTOD; insn[0].n=2; insn[0].data=t1; /* Instruction 1: do 10 analog input reads */ insn[1].insn=INSN_READ; insn[1].n = options.n_scan; insn[1].data=data; insn[1].subdev = options.subdevice; insn[1].chanspec=CR_PACK(options.channel, options.range, options.aref); /* Instruction 2: perform a gettimeofday() */ insn[2].insn=INSN_GTOD; insn[2].n=2; insn[2].data=t2; ret=comedi_do_insnlist(device,&il); if(ret<0){ comedi_perror(options.filename); exit(-1); } printf("initial time: %u.%06u\n", t1[0], t1[1]); for(i = 0; i < options.n_scan; i++){ printf("%d\n", data[i]); } printf("final time: %u.%06u\n", t2[0], t2[1]); if (t2[0] >= t1[0]) { diffus = (long)(t2[0] - t1[0]); } else { diffus = -(long)(t1[0] - t2[0]); } diffus *= 1000000; if (t2[1] >= t1[1]) { diffus += (long)(t2[1] - t1[1]); } else { diffus -= (long)(t1[1] - t2[1]); } printf("difference (us): %ld\n", diffus); return 0; } comedilib-0.11.0/demo/choose_clock.c0000644000000000000000000000306412416542105014135 00000000000000/* * INSN_CONFIG_SET_CLOCK_SRC example * Part of Comedilib * * Copyright (c) 1999,2000 David A. Schleef * Copyright (c) 2007 Frank Mori Hess * * This file may be freely modified, distributed, and combined with * other software, as long as proper attribution is given in the * source code. */ /* * Requirements: A board with a subdevice that supports * INSN_CONFIG_CLOCK_SRC */ #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include #include "examples.h" comedi_t *device; int main(int argc, char *argv[]) { unsigned period_ns; int retval; lsampl_t clock_selection; struct parsed_options options; init_parsed_options(&options); options.freq = 0.; parse_options(&options, argc, argv); device = comedi_open(options.filename); if(!device){ comedi_perror(options.filename); exit(-1); } if(options.freq > 0.) period_ns = 1e9 / options.freq; else period_ns = 0; clock_selection = options.value; printf("Selecting master clock %d for channel %d on subdevice %d.\n", clock_selection, options.channel, options.subdevice); if(period_ns) { printf("Clock period = %d nanoseconds.\n", period_ns); }else { printf("Clock period unspecified.\n"); } retval = comedi_set_clock_source(device, options.subdevice, options.channel, clock_selection, period_ns); if(retval < 0) comedi_perror("comedi_set_clock_source"); comedi_close(device); return retval; } comedilib-0.11.0/demo/do_waveform.c0000644000000000000000000001331012715406005014005 00000000000000/* * Asynchronous Digital Output Example * Part of Comedilib * * Copyright (c) 1999,2000 David A. Schleef * Copyright (c) 2007 Frank Mori Hess * * This file may be freely modified, distributed, and combined with * other software, as long as proper attribution is given in the * source code. */ /* * Requirements: NI M-Series board. * * This demo uses the digital io subdevice with an * asynchronous command to generate waveforms. The * waveforms in this example are square waves with * varying periods depending on the digital output * channel. Channel N outputs a square wave with * period 2*(N+1) clocks. The command line argument chooses the * clock signal for updating the outputs. As a suggestion, * you might use the output of one of the general * purpose counters for a clock (the default clock * source is the output of general purpose counter 0), * and run the gpct_pulse_generator demo to start the counter * generating pulses on its output. * * Note, you must configure at least one of the digital channels as * an output (for example by running the dio demo program) * before running this program. You must also pass the dio * subdevice file using the -f option, since the default write * subdevice for the m-series boards is the analog output. For * example, "dio_waveform -f /dev/comedi0_sub2". */ #include #include #include #include #include "examples.h" #include #include #include #include #include #include #include #define BUF_LEN 0x1000 struct test_waveform_generator { unsigned *toggle_countdowns; unsigned num_channels; lsampl_t last_output; }; int init_test_waveform_generator(struct test_waveform_generator *generator, unsigned num_channels) { unsigned i; generator->num_channels = num_channels; generator->toggle_countdowns = malloc(sizeof(unsigned) * num_channels); if(generator->toggle_countdowns == NULL) return -ENOMEM; for(i = 0; i < num_channels; ++i) generator->toggle_countdowns[i] = i + 1; generator->last_output = 0; return 0; } void cleanup_test_waveform_generator(struct test_waveform_generator *generator) { if(generator->toggle_countdowns) { free(generator->toggle_countdowns); generator->toggle_countdowns = NULL; } } void build_waveforms(struct test_waveform_generator *generator, lsampl_t *data, unsigned data_len) { unsigned i; for(i = 0; i < data_len; ++i) { unsigned j; data[i] = generator->last_output; for(j = 0; j < generator->num_channels; ++j) { if(--generator->toggle_countdowns[j] == 0) { generator->toggle_countdowns[j] = j + 1; data[i] ^= 1 << j; } } generator->last_output = data[i]; } } int main(int argc, char *argv[]) { comedi_cmd cmd; struct parsed_options options; comedi_t *dev; int i; struct test_waveform_generator generator; lsampl_t *buffer = NULL; int err; int n, m; int total=0; unsigned int *chanlist; int ret; init_parsed_options(&options); options.subdevice = -1; options.n_chan = 8; options.value = NI_CDIO_SCAN_BEGIN_SRC_G0_OUT; parse_options(&options, argc, argv); dev = comedi_open(options.filename); if(dev == NULL){ fprintf(stderr, "error opening %s\n", options.filename); return -1; } if(options.subdevice < 0) options.subdevice = comedi_find_subdevice_by_type(dev, COMEDI_SUBD_DIO, 0); memset(&cmd,0,sizeof(cmd)); cmd.subdev = options.subdevice; cmd.flags = CMDF_WRITE; cmd.start_src = TRIG_INT; cmd.start_arg = 0; cmd.scan_begin_src = TRIG_EXT; cmd.scan_begin_arg = options.value; cmd.convert_src = TRIG_NOW; cmd.convert_arg = 0; cmd.scan_end_src = TRIG_COUNT; cmd.scan_end_arg = options.n_chan; cmd.stop_src = TRIG_NONE; cmd.stop_arg = 0; chanlist = malloc(options.n_chan * sizeof(unsigned)); assert(chanlist); cmd.chanlist = chanlist; cmd.chanlist_len = options.n_chan; for(i = 0; i < cmd.chanlist_len; ++i) { cmd.chanlist[i] = i; } dump_cmd(stdout, &cmd); err = comedi_command_test(dev, &cmd); if (err < 0) { comedi_perror("comedi_command_test"); exit(1); } err = comedi_command_test(dev, &cmd); if (err < 0) { comedi_perror("comedi_command_test"); exit(1); } err = comedi_command_test(dev, &cmd); if(err != 0) { fprintf(stderr, "After 3 passes, comedi_command_test returns %i\n", err); exit(1); } comedi_set_write_subdevice(dev, cmd.subdev); ret = comedi_get_write_subdevice(dev); if (ret < 0 || ret != cmd.subdev) { fprintf(stderr, "failed to change 'write' subdevice from %d to %d\n", ret, cmd.subdev); exit(1); } if ((err = comedi_command(dev, &cmd)) < 0) { comedi_perror("comedi_command"); exit(1); } ret = init_test_waveform_generator(&generator, cmd.chanlist_len); assert(ret == 0); buffer = malloc(sizeof(lsampl_t) * BUF_LEN); assert(buffer); build_waveforms(&generator, buffer, BUF_LEN); n = BUF_LEN * sizeof(buffer[0]); m = write(comedi_fileno(dev), buffer, n); if(m < 0){ perror("write"); exit(1); }else if(m < n) { fprintf(stderr, "Failed to preload output buffer with %i bytes, is it too small?\n" "See the --write-buffer option of comedi_config\n", n); exit(1); } printf("m=%d\n",m); ret = comedi_internal_trigger(dev, options.subdevice, 0); if(ret < 0){ perror("comedi_internal_trigger\n"); exit(1); } while(1) { build_waveforms(&generator, buffer, BUF_LEN); n = BUF_LEN * sizeof(buffer[0]); while(n > 0) { m = write(comedi_fileno(dev), (void*)(buffer) + (BUF_LEN * sizeof(buffer[0]) - n), n); if(m < 0){ perror("write"); exit(0); } printf("m=%d\n",m); n -= m; } total += BUF_LEN; //printf("%d\n",total); } cleanup_test_waveform_generator(&generator); free(buffer); free(chanlist); return 0; } comedilib-0.11.0/demo/ao_waveform.c0000644000000000000000000002030012715406005013777 00000000000000/* * Asynchronous Analog Output Example * Part of Comedilib * * Copyright (c) 1999,2000 David A. Schleef * * This file may be freely modified, distributed, and combined with * other software, as long as proper attribution is given in the * source code. */ /* * Requirements: Analog output device capable of * asynchronous commands. * * This demo uses an analog output subdevice with an * asynchronous command to generate a waveform. The * demo hijacks for -n option to select a waveform from * a predefined list. The default waveform is a sine * wave (surprise!). Other waveforms include sawtooth, * square, triangle and cycloid. * * The function generation algorithm is the same as * what is typically used in digital function generators. * A 32-bit accumulator is incremented by a phase factor, * which is the amount (in radians) that the generator * advances each time step. The accumulator is then * shifted right by 20 bits, to get a 12 bit offset into * a lookup table. The value in the lookup table at * that offset is then put into a buffer for output to * the DAC. * * [ Actually, the accumulator is only 26 bits, for some * reason. I'll fix this sometime. ] * */ #include #include #include #include #include #include #include #include #include #include #include "examples.h" /* frequency of the sine wave to output */ double waveform_frequency = 10.0; /* peak-to-peak amplitude, in DAC units (i.e., 0-4095) */ double amplitude = 4000; /* offset, in DAC units */ double offset = 2048; /* This is the size of chunks we deal with when creating and outputting data. This *could* be 1, but that would be inefficient */ #define BUF_LEN 0x8000 int external_trigger_number = 0; sampl_t data[BUF_LEN]; void dds_output(sampl_t *buf,int n); void dds_init(double waveform_frequency, double update_frequency, int fn); void dds_init_sine(void); void dds_init_pseudocycloid(void); void dds_init_cycloid(void); void dds_init_ramp_up(void); void dds_init_ramp_down(void); void dds_init_triangle(void); void dds_init_square(void); void dds_init_blancmange(void); static void (* const dds_init_function[])(void) = { dds_init_sine, dds_init_ramp_up, dds_init_ramp_down, dds_init_triangle, dds_init_square, dds_init_cycloid, dds_init_blancmange, }; #define NUMFUNCS (sizeof(dds_init_function)/sizeof(dds_init_function[0])) int main(int argc, char *argv[]) { comedi_cmd cmd; int err; int n,m; int total=0; comedi_t *dev; unsigned int chanlist[16]; unsigned int maxdata; comedi_range *rng; int ret; struct parsed_options options; int fn; init_parsed_options(&options); options.subdevice = -1; options.n_chan = -1; /* waveform */ parse_options(&options, argc, argv); /* Use n_chan to select waveform (cheat!) */ fn = options.n_chan; if(fn < 0 || fn >= NUMFUNCS){ fprintf(stderr,"Use the option '-n' to select another waveform.\n"); fn = 0; } /* Force n_chan to be 1 */ options.n_chan = 1; if(options.value){ waveform_frequency = options.value; } dev = comedi_open(options.filename); if(dev == NULL){ fprintf(stderr, "error opening %s\n", options.filename); return -1; } if(options.subdevice < 0) options.subdevice = comedi_find_subdevice_by_type(dev, COMEDI_SUBD_AO, 0); maxdata = comedi_get_maxdata(dev, options.subdevice, options.channel); rng = comedi_get_range(dev, options.subdevice, options.channel, options.range); offset = (double)comedi_from_phys(0.0, rng, maxdata); amplitude = (double)comedi_from_phys(1.0, rng, maxdata) - offset; memset(&cmd,0,sizeof(cmd)); cmd.subdev = options.subdevice; cmd.flags = CMDF_WRITE; cmd.start_src = TRIG_INT; cmd.start_arg = 0; cmd.scan_begin_src = TRIG_TIMER; cmd.scan_begin_arg = 1e9 / options.freq; cmd.convert_src = TRIG_NOW; cmd.convert_arg = 0; cmd.scan_end_src = TRIG_COUNT; cmd.scan_end_arg = options.n_chan; cmd.stop_src = TRIG_NONE; cmd.stop_arg = 0; cmd.chanlist = chanlist; cmd.chanlist_len = options.n_chan; chanlist[0] = CR_PACK(options.channel, options.range, options.aref); //chanlist[1] = CR_PACK(options.channel + 1, options.range, options.aref); dds_init(waveform_frequency, options.freq, fn); if (options.verbose) dump_cmd(stdout,&cmd); err = comedi_command_test(dev, &cmd); if (err < 0) { comedi_perror("comedi_command_test"); exit(1); } err = comedi_command_test(dev, &cmd); if (err < 0) { comedi_perror("comedi_command_test"); exit(1); } comedi_set_write_subdevice(dev, cmd.subdev); ret = comedi_get_write_subdevice(dev); if (ret < 0 || ret != cmd.subdev) { fprintf(stderr, "failed to change 'write' subdevice from %d to %d\n", ret, cmd.subdev); exit(1); } if ((err = comedi_command(dev, &cmd)) < 0) { comedi_perror("comedi_command"); exit(1); } dds_output(data,BUF_LEN); n = BUF_LEN * sizeof(sampl_t); m = write(comedi_fileno(dev), (void *)data, n); if(m < 0){ perror("write"); exit(1); }else if(m < n) { fprintf(stderr, "failed to preload output buffer with %i bytes, is it too small?\n" "See the --write-buffer option of comedi_config\n", n); exit(1); } if (options.verbose) printf("m=%d\n",m); ret = comedi_internal_trigger(dev, options.subdevice, 0); if(ret < 0){ perror("comedi_internal_trigger\n"); exit(1); } while(1){ dds_output(data,BUF_LEN); n=BUF_LEN*sizeof(sampl_t); while(n>0){ m=write(comedi_fileno(dev),(void *)data+(BUF_LEN*sizeof(sampl_t)-n),n); if(m<0){ perror("write"); exit(0); } if (options.verbose) printf("m=%d\n",m); n-=m; } total+=BUF_LEN; //printf("%d\n",total); } return 0; } #define WAVEFORM_SHIFT 16 #define WAVEFORM_LEN (1<>16)&WAVEFORM_MASK]; p++; acc+=adder; } } /* Defined for x in [0,1] */ static inline double triangle(double x) { return (x > 0.5) ? 1.0 - x : x; } void dds_init_sine(void) { int i; double ofs = offset; double amp = 0.5 * amplitude; if(ofs < amp){ /* Probably a unipolar range. Bump up the offset. */ ofs = amp; } for(i=0;i= 2. */ int h, i, ni; double t, x, y; i = -1; for (h = 0; h < WAVEFORM_LEN * SUBSCALE; h++){ t = (h * (2 * M_PI)) / (WAVEFORM_LEN * SUBSCALE); x = t - sin(t); ni = (int)floor((x * WAVEFORM_LEN) / (2 * M_PI)); if (ni > i) { i = ni; y = 1 - cos(t); waveform[i] = rint(offset + (amplitude * y / 2)); } } } void dds_init_ramp_up(void) { int i; for(i=0;i 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 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. */ #ifndef _COMEDILIB_H #define _COMEDILIB_H #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif /* Macros for swig to %include this file. */ #ifdef SWIG #define SWIG_OUTPUT(x) OUTPUT #define SWIG_INPUT(x) INPUT #define SWIG_INOUT(x) INOUT #else #define SWIG_OUTPUT(x) x #define SWIG_INPUT(x) x #define SWIG_INOUT(x) x #endif typedef struct comedi_t_struct comedi_t; typedef struct{ double min; double max; unsigned int unit; }comedi_range; typedef struct comedi_sv_struct{ comedi_t *dev; unsigned int subdevice; unsigned int chan; /* range policy */ int range; int aref; /* number of measurements to average (for ai) */ int n; lsampl_t maxdata; }comedi_sv_t; enum comedi_oor_behavior { COMEDI_OOR_NUMBER = 0, COMEDI_OOR_NAN }; comedi_t *comedi_open(const char *fn); int comedi_close(comedi_t *it); /* logging */ int comedi_loglevel(int loglevel); void comedi_perror(const char *s); const char *comedi_strerror(int errnum); int comedi_errno(void); int comedi_fileno(comedi_t *it); /* global behavior */ enum comedi_oor_behavior comedi_set_global_oor_behavior(enum comedi_oor_behavior behavior); /* device queries */ int comedi_get_n_subdevices(comedi_t *it); #define COMEDI_VERSION_CODE(a,b,c) (((a)<<16) | ((b)<<8) | (c)) int comedi_get_version_code(comedi_t *it); const char *comedi_get_driver_name(comedi_t *it); const char *comedi_get_board_name(comedi_t *it); int comedi_get_read_subdevice(comedi_t *dev); int comedi_get_write_subdevice(comedi_t *dev); /* subdevice queries */ int comedi_get_subdevice_type(comedi_t *it,unsigned int subdevice); int comedi_find_subdevice_by_type(comedi_t *it,int type,unsigned int subd); int comedi_get_subdevice_flags(comedi_t *it,unsigned int subdevice); int comedi_get_n_channels(comedi_t *it,unsigned int subdevice); int comedi_range_is_chan_specific(comedi_t *it,unsigned int subdevice); int comedi_maxdata_is_chan_specific(comedi_t *it,unsigned int subdevice); /* channel queries */ lsampl_t comedi_get_maxdata(comedi_t *it,unsigned int subdevice, unsigned int chan); int comedi_get_n_ranges(comedi_t *it,unsigned int subdevice, unsigned int chan); comedi_range * comedi_get_range(comedi_t *it,unsigned int subdevice, unsigned int chan,unsigned int range); int comedi_find_range(comedi_t *it,unsigned int subd,unsigned int chan, unsigned int unit,double min,double max); /* buffer queries */ int comedi_get_buffer_size(comedi_t *it,unsigned int subdevice); int comedi_get_max_buffer_size(comedi_t *it,unsigned int subdevice); int comedi_set_buffer_size(comedi_t *it,unsigned int subdevice, unsigned int len); /* low-level stuff */ #ifdef _COMEDILIB_DEPRECATED int comedi_trigger(comedi_t *it,comedi_trig *trig); /* deprecated */ #endif int comedi_do_insnlist(comedi_t *it,comedi_insnlist *il); int comedi_do_insn(comedi_t *it,comedi_insn *insn); int comedi_lock(comedi_t *it,unsigned int subdevice); int comedi_unlock(comedi_t *it,unsigned int subdevice); /* * Changing read and write subdevice is supported for the version of comedi * in the Linux kernel sources since Linux kernel version 3.19. * * The functions to set and get the read and write subdevice are unusual in * that changes are local to the "open file description" for the Comedi * device. */ int comedi_set_read_subdevice(comedi_t *it,unsigned int subdevice); int comedi_set_write_subdevice(comedi_t *it,unsigned int subdevice); /* physical units */ double comedi_to_phys(lsampl_t data,comedi_range *rng,lsampl_t maxdata); lsampl_t comedi_from_phys(double data,comedi_range *rng,lsampl_t maxdata); int comedi_sampl_to_phys(double *dest, int dst_stride, sampl_t *src, int src_stride, comedi_range *rng, lsampl_t maxdata, int n); int comedi_sampl_from_phys(sampl_t *dest,int dst_stride,double *src, int src_stride, comedi_range *rng, lsampl_t maxdata, int n); /* synchronous stuff */ int comedi_data_read(comedi_t *it,unsigned int subd,unsigned int chan, unsigned int range,unsigned int aref,lsampl_t *SWIG_OUTPUT(data)); int comedi_data_read_n(comedi_t *it,unsigned int subd,unsigned int chan, unsigned int range,unsigned int aref,lsampl_t *data, unsigned int n); int comedi_data_read_hint(comedi_t *it,unsigned int subd,unsigned int chan, unsigned int range,unsigned int aref); int comedi_data_read_delayed(comedi_t *it,unsigned int subd,unsigned int chan, unsigned int range,unsigned int aref,lsampl_t *SWIG_OUTPUT(data), unsigned int nano_sec); int comedi_data_write(comedi_t *it,unsigned int subd,unsigned int chan, unsigned int range,unsigned int aref,lsampl_t data); int comedi_dio_config(comedi_t *it,unsigned int subd,unsigned int chan, unsigned int dir); int comedi_dio_get_config(comedi_t *it,unsigned int subd,unsigned int chan, unsigned int *SWIG_OUTPUT(dir)); int comedi_dio_read(comedi_t *it,unsigned int subd,unsigned int chan, unsigned int *SWIG_OUTPUT(bit)); int comedi_dio_write(comedi_t *it,unsigned int subd,unsigned int chan, unsigned int bit); int comedi_dio_bitfield2(comedi_t *it,unsigned int subd, unsigned int write_mask, unsigned int *SWIG_INOUT(bits), unsigned int base_channel); /* Should be moved to _COMEDILIB_DEPRECATED once bindings for other languages are updated * to use comedi_dio_bitfield2() instead.*/ int comedi_dio_bitfield(comedi_t *it,unsigned int subd, unsigned int write_mask, unsigned int *SWIG_INOUT(bits)); /* slowly varying stuff */ int comedi_sv_init(comedi_sv_t *it,comedi_t *dev,unsigned int subd,unsigned int chan); int comedi_sv_update(comedi_sv_t *it); int comedi_sv_measure(comedi_sv_t *it,double *SWIG_OUTPUT(data)); /* streaming I/O (commands) */ int comedi_get_cmd_src_mask(comedi_t *dev,unsigned int subdevice, comedi_cmd *SWIG_INOUT(cmd)); int comedi_get_cmd_generic_timed(comedi_t *dev,unsigned int subdevice, comedi_cmd *SWIG_INOUT(cmd), unsigned chanlist_len, unsigned scan_period_ns); int comedi_cancel(comedi_t *it,unsigned int subdevice); int comedi_command(comedi_t *it,comedi_cmd *cmd); int comedi_command_test(comedi_t *it,comedi_cmd *SWIG_INOUT(cmd)); int comedi_poll(comedi_t *dev,unsigned int subdevice); /* buffer control */ int comedi_set_max_buffer_size(comedi_t *it, unsigned int subdev, unsigned int max_size); int comedi_get_buffer_contents(comedi_t *it, unsigned int subdev); int comedi_mark_buffer_read(comedi_t *it, unsigned int subdev, unsigned int bytes); int comedi_mark_buffer_written(comedi_t *it, unsigned int subdev, unsigned int bytes); int comedi_get_buffer_read_offset(comedi_t *it, unsigned int subdev); int comedi_get_buffer_write_offset(comedi_t *it, unsigned int subdev); int comedi_get_buffer_read_count(comedi_t *it, unsigned int subdev, unsigned int *SWIG_OUTPUT(read_count)); int comedi_get_buffer_write_count(comedi_t *it, unsigned int subdev, unsigned int *SWIG_OUTPUT(write_count)); /* Should be moved to _COMEDILIB_DEPRECATED - use comedi_get_buffer_read_offset instead. */ int comedi_get_buffer_offset(comedi_t *it, unsigned int subdev); #ifdef _COMEDILIB_DEPRECATED /* * The following functions are deprecated and should not be used. */ int comedi_get_timer(comedi_t *it,unsigned int subdev,double freq, unsigned int *trigvar,double *actual_freq); int comedi_timed_1chan(comedi_t *it,unsigned int subdev,unsigned int chan, unsigned int range, unsigned int aref,double freq, unsigned int n_samples,double *data); int comedi_get_rangetype(comedi_t *it,unsigned int subdevice, unsigned int chan); #endif #ifndef _COMEDILIB_STRICT_ABI /* The following prototypes are _NOT_ part of the Comedilib ABI, and may change in future versions without regard to source or binary compatibility. In practice, this is a holding place for the next library ABI version change. */ /* structs and functions used for parsing calibration files */ typedef struct { unsigned int subdevice; unsigned int channel; unsigned int value; } comedi_caldac_t; #define COMEDI_MAX_NUM_POLYNOMIAL_COEFFICIENTS 4 typedef struct { double coefficients[COMEDI_MAX_NUM_POLYNOMIAL_COEFFICIENTS]; double expansion_origin; unsigned order; } comedi_polynomial_t; typedef struct { comedi_polynomial_t *to_phys; comedi_polynomial_t *from_phys; } comedi_softcal_t; #define CS_MAX_AREFS_LENGTH 4 typedef struct { unsigned int subdevice; unsigned int *channels; unsigned int num_channels; unsigned int *ranges; unsigned int num_ranges; unsigned int arefs[ CS_MAX_AREFS_LENGTH ]; unsigned int num_arefs; comedi_caldac_t *caldacs; unsigned int num_caldacs; comedi_softcal_t soft_calibration; } comedi_calibration_setting_t; typedef struct { char *driver_name; char *board_name; comedi_calibration_setting_t *settings; unsigned int num_settings; } comedi_calibration_t; comedi_calibration_t* comedi_parse_calibration_file( const char *cal_file_path ); int comedi_apply_parsed_calibration( comedi_t *dev, unsigned int subdev, unsigned int channel, unsigned int range, unsigned int aref, const comedi_calibration_t *calibration ); char* comedi_get_default_calibration_path( comedi_t *dev ); void comedi_cleanup_calibration( comedi_calibration_t *calibration ); int comedi_apply_calibration( comedi_t *dev, unsigned int subdev, unsigned int channel, unsigned int range, unsigned int aref, const char *cal_file_path); /* New stuff to provide conversion between integers and physical values that * can support software calibrations. */ enum comedi_conversion_direction { COMEDI_TO_PHYSICAL, COMEDI_FROM_PHYSICAL }; int comedi_get_softcal_converter( unsigned subdevice, unsigned channel, unsigned range, enum comedi_conversion_direction direction, const comedi_calibration_t *calibration, comedi_polynomial_t* SWIG_OUTPUT(polynomial)); int comedi_get_hardcal_converter( comedi_t *dev, unsigned subdevice, unsigned channel, unsigned range, enum comedi_conversion_direction direction, comedi_polynomial_t* SWIG_OUTPUT(polynomial)); double comedi_to_physical(lsampl_t data, const comedi_polynomial_t *conversion_polynomial); lsampl_t comedi_from_physical(double data, const comedi_polynomial_t *conversion_polynomial); int comedi_internal_trigger(comedi_t *dev, unsigned subd, unsigned trignum); /* INSN_CONFIG wrappers */ int comedi_arm(comedi_t *device, unsigned subdevice, unsigned source); int comedi_arm_channel(comedi_t *device, unsigned subdevice, unsigned channel, unsigned source); int comedi_disarm(comedi_t *device, unsigned subdevice); int comedi_disarm_channel(comedi_t *device, unsigned subdevice, unsigned channel); int comedi_reset(comedi_t *device, unsigned subdevice); int comedi_reset_channel(comedi_t *device, unsigned subdevice, unsigned channel); int comedi_get_clock_source(comedi_t *device, unsigned subdevice, unsigned channel, unsigned *SWIG_OUTPUT(clock), unsigned *SWIG_OUTPUT(period_ns)); int comedi_get_gate_source(comedi_t *device, unsigned subdevice, unsigned channel, unsigned gate, unsigned *SWIG_OUTPUT(source)); int comedi_get_routing(comedi_t *device, unsigned subdevice, unsigned channel, unsigned *SWIG_OUTPUT(routing)); int comedi_set_counter_mode(comedi_t *device, unsigned subdevice, unsigned channel, unsigned mode_bits); int comedi_set_clock_source(comedi_t *device, unsigned subdevice, unsigned channel, unsigned clock, unsigned period_ns); int comedi_set_filter(comedi_t *device, unsigned subdevice, unsigned channel, unsigned filter); int comedi_set_gate_source(comedi_t *device, unsigned subdevice, unsigned channel, unsigned gate_index, unsigned gate_source); int comedi_set_other_source(comedi_t *device, unsigned subdevice, unsigned channel, unsigned other, unsigned source); int comedi_set_routing(comedi_t *device, unsigned subdevice, unsigned channel, unsigned routing); int comedi_get_hardware_buffer_size(comedi_t *device, unsigned subdevice, enum comedi_io_direction direction); int comedi_digital_trigger_disable(comedi_t *device, unsigned subdevice, unsigned trigger_id); int comedi_digital_trigger_enable_edges(comedi_t *device, unsigned subdevice, unsigned trigger_id, unsigned base_input, unsigned rising_edge_inputs, unsigned falling_edge_inputs); int comedi_digital_trigger_enable_levels(comedi_t *device, unsigned subdevice, unsigned trigger_id, unsigned base_input, unsigned high_level_inputs, unsigned low_level_inputs); #endif #ifdef __cplusplus } #endif #endif comedilib-0.11.0/include/comedilib_scxi.h0000644000000000000000000000426012416542105015162 00000000000000/* include/comedilib_scxi.h header file for the comedi scxi library routines Copyright (C) 2004 Caleb Tennis 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 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. */ #ifndef _COMEDILIB_SCXI_H #define _COMEDILIB_SCXI_H #include #define SLOT0_INTERVAL 1200 #define FAST_INTERVAL 1200 #define MEDIUM_INTERVAL 10000 #define SLOW_INTERVAL 30000 #define SCXI_LINE_MOSI 0 #define SCXI_LINE_DA 1 #define SCXI_LINE_SS 2 #define SCXI_LINE_MISO 4 #define SCXI_DIO_NONE 0 #define SCXI_DIO_DO 1 #define SCXI_DIO_DI 2 #define SCXI_AIO_NONE 0 #define SCXI_AIO_AO 1 #define SCXI_AIO_AI 2 #define REG_PARK 0x0FFFF struct scxi_board_struct { unsigned int device_id; char name[12]; int modclass; unsigned int clock_interval; int dio_type, aio_type, channels, status_reg, data_reg; int config_reg, eeprom_reg, gain_reg; }; typedef struct scxi_board_struct scxi_board_t; #define n_scxi_boards ((sizeof(scxi_boards)/sizeof(scxi_boards[0]))) struct scxi_module_struct { comedi_t *dev; unsigned int board; unsigned int dio_subdev, ser_subdev; unsigned int chassis, slot; }; typedef struct scxi_module_struct scxi_mod_t; #ifdef __cplusplus extern "C" { #endif void comedi_scxi_close(scxi_mod_t *mod); scxi_mod_t *comedi_scxi_open(comedi_t *dev, unsigned short chassis_address, unsigned short mod_slot); int comedi_scxi_register_readwrite(scxi_mod_t *mod, unsigned short reg_address, unsigned int num_bytes, unsigned char *data_out, unsigned char *data_in); #ifdef __cplusplus } #endif #endif // _COMEDILIB_SCXI_H comedilib-0.11.0/include/comedilib_version.h0000644000000000000000000000354413162422453015707 00000000000000/* comedilib_version.h header file for comedilib's version number COMEDI - Linux Control and Measurement Device Interface Copyright (C) 1997-2000 David A. Schleef 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 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 Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Cambridge, MA 02111, USA. */ #ifndef _COMEDILIB_VERSION_H #define _COMEDILIB_VERSION_H /* Note that this header file first appeared in comedilib 0.10.0, so * the header file and macros won't exist in earlier versions unless * retro-fitted by a third party packager. */ #define COMEDILIB_VERSION_MAJOR 0 #define COMEDILIB_VERSION_MINOR 11 #define COMEDILIB_VERSION_MICRO 0 /** * COMEDILIB_CHECK_VERSION: * @major: major version * @minor: minor version * @micro: micro version * * Evaluates to %TRUE when the comedilib version (as indicated by * COMEDILIB_VERSION_MAJOR, COMEDILIB_VERSION_MINOR, * COMEDILIB_VERSION_MICRO) is at least as great as the given version. */ #define COMEDILIB_CHECK_VERSION(major, minor, micro) \ (COMEDILIB_VERSION_MAJOR > (major) || \ (COMEDILIB_VERSION_MAJOR == (major) && \ (COMEDLIB_VERSION_MINOR > (minor) || \ (COMEDILIB_VERSION_MINOR == (minor) && \ COMEDILIB_VERSION_MICRO >= (micro))))) #endif /* _COMEDILIB_VERSION_H */ comedilib-0.11.0/include/Makefile.am0000644000000000000000000000013512416542105014065 00000000000000 include_HEADERS = comedi.h comedilib.h comedi_errno.h comedilib_scxi.h comedilib_version.h comedilib-0.11.0/include/comedilib_version.h.in0000644000000000000000000000365312416542105016313 00000000000000/* comedilib_version.h header file for comedilib's version number COMEDI - Linux Control and Measurement Device Interface Copyright (C) 1997-2000 David A. Schleef 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 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 Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Cambridge, MA 02111, USA. */ #ifndef _COMEDILIB_VERSION_H #define _COMEDILIB_VERSION_H /* Note that this header file first appeared in comedilib 0.10.0, so * the header file and macros won't exist in earlier versions unless * retro-fitted by a third party packager. */ #define COMEDILIB_VERSION_MAJOR @COMEDILIB_VERSION_MAJOR@ #define COMEDILIB_VERSION_MINOR @COMEDILIB_VERSION_MINOR@ #define COMEDILIB_VERSION_MICRO @COMEDILIB_VERSION_MICRO@ /** * COMEDILIB_CHECK_VERSION: * @major: major version * @minor: minor version * @micro: micro version * * Evaluates to %TRUE when the comedilib version (as indicated by * COMEDILIB_VERSION_MAJOR, COMEDILIB_VERSION_MINOR, * COMEDILIB_VERSION_MICRO) is at least as great as the given version. */ #define COMEDILIB_CHECK_VERSION(major, minor, micro) \ (COMEDILIB_VERSION_MAJOR > (major) || \ (COMEDILIB_VERSION_MAJOR == (major) && \ (COMEDLIB_VERSION_MINOR > (minor) || \ (COMEDILIB_VERSION_MINOR == (minor) && \ COMEDILIB_VERSION_MICRO >= (micro))))) #endif /* _COMEDILIB_VERSION_H */ comedilib-0.11.0/include/comedi.h0000644000000000000000000014430612716317700013457 00000000000000/* * comedi.h * header file for COMEDI user API * * COMEDI - Linux Control and Measurement Device Interface * Copyright (C) 1998-2001 David A. Schleef * * 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 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. * */ #ifndef _COMEDI_H #define _COMEDI_H #ifdef __cplusplus extern "C" { #if 0 } /* avoid confusing editor auto-indent */ #endif #endif /* comedi's major device number */ #define COMEDI_MAJOR 98 /* * maximum number of minor devices. This can be increased, although * kernel structures are currently statically allocated, thus you * don't want this to be much more than you actually use. */ #define COMEDI_NDEVICES 16 /* number of config options in the config structure */ #define COMEDI_NDEVCONFOPTS 32 /* * NOTE: 'comedi_config --init-data' is deprecated * * The following indexes in the config options were used by * comedi_config to pass firmware blobs from user space to the * comedi drivers. * * Some of the standalone COMEDI kernel modules built from comedi.org sources * still use this mechanism, but the COMEDI kernel modules included in * the Linux kernel sources now use the request_firmware() hotplug interface * instead. */ /* length of nth chunk of firmware data -*/ #define COMEDI_DEVCONF_AUX_DATA3_LENGTH 25 #define COMEDI_DEVCONF_AUX_DATA2_LENGTH 26 #define COMEDI_DEVCONF_AUX_DATA1_LENGTH 27 #define COMEDI_DEVCONF_AUX_DATA0_LENGTH 28 /* most significant 32 bits of pointer address (if needed) */ #define COMEDI_DEVCONF_AUX_DATA_HI 29 /* least significant 32 bits of pointer address */ #define COMEDI_DEVCONF_AUX_DATA_LO 30 #define COMEDI_DEVCONF_AUX_DATA_LENGTH 31 /* total data length */ /* max length of device and driver names */ #define COMEDI_NAMELEN 20 typedef unsigned int lsampl_t; typedef unsigned short sampl_t; /* packs and unpacks a channel/range number */ #define CR_PACK(chan, rng, aref) \ ((((aref) & 0x3) << 24) | (((rng) & 0xff) << 16) | (chan)) #define CR_PACK_FLAGS(chan, range, aref, flags) \ (CR_PACK(chan, range, aref) | ((flags) & CR_FLAGS_MASK)) #define CR_CHAN(a) ((a) & 0xffff) #define CR_RANGE(a) (((a) >> 16) & 0xff) #define CR_AREF(a) (((a) >> 24) & 0x03) #define CR_FLAGS_MASK 0xfc000000 #define CR_ALT_FILTER 0x04000000 #define CR_DITHER CR_ALT_FILTER #define CR_DEGLITCH CR_ALT_FILTER #define CR_ALT_SOURCE 0x08000000 #define CR_EDGE 0x40000000 #define CR_INVERT 0x80000000 #define AREF_GROUND 0x00 /* analog ref = analog ground */ #define AREF_COMMON 0x01 /* analog ref = analog common */ #define AREF_DIFF 0x02 /* analog ref = differential */ #define AREF_OTHER 0x03 /* analog ref = other (undefined) */ /* counters -- these are arbitrary values */ #define GPCT_RESET 0x0001 #define GPCT_SET_SOURCE 0x0002 #define GPCT_SET_GATE 0x0004 #define GPCT_SET_DIRECTION 0x0008 #define GPCT_SET_OPERATION 0x0010 #define GPCT_ARM 0x0020 #define GPCT_DISARM 0x0040 #define GPCT_GET_INT_CLK_FRQ 0x0080 #define GPCT_INT_CLOCK 0x0001 #define GPCT_EXT_PIN 0x0002 #define GPCT_NO_GATE 0x0004 #define GPCT_UP 0x0008 #define GPCT_DOWN 0x0010 #define GPCT_HWUD 0x0020 #define GPCT_SIMPLE_EVENT 0x0040 #define GPCT_SINGLE_PERIOD 0x0080 #define GPCT_SINGLE_PW 0x0100 #define GPCT_CONT_PULSE_OUT 0x0200 #define GPCT_SINGLE_PULSE_OUT 0x0400 /* instructions */ #define INSN_MASK_WRITE 0x8000000 #define INSN_MASK_READ 0x4000000 #define INSN_MASK_SPECIAL 0x2000000 #define INSN_READ (0 | INSN_MASK_READ) #define INSN_WRITE (1 | INSN_MASK_WRITE) #define INSN_BITS (2 | INSN_MASK_READ | INSN_MASK_WRITE) #define INSN_CONFIG (3 | INSN_MASK_READ | INSN_MASK_WRITE) #define INSN_GTOD (4 | INSN_MASK_READ | INSN_MASK_SPECIAL) #define INSN_WAIT (5 | INSN_MASK_WRITE | INSN_MASK_SPECIAL) #define INSN_INTTRIG (6 | INSN_MASK_WRITE | INSN_MASK_SPECIAL) /* command flags */ /* These flags are used in comedi_cmd structures */ #define CMDF_BOGUS 0x00000001 /* do the motions */ /* try to use a real-time interrupt while performing command */ #define CMDF_PRIORITY 0x00000008 /* wake up on end-of-scan events */ #define CMDF_WAKE_EOS 0x00000020 #define CMDF_WRITE 0x00000040 #define CMDF_RAWDATA 0x00000080 /* timer rounding definitions */ #define CMDF_ROUND_MASK 0x00030000 #define CMDF_ROUND_NEAREST 0x00000000 #define CMDF_ROUND_DOWN 0x00010000 #define CMDF_ROUND_UP 0x00020000 #define CMDF_ROUND_UP_NEXT 0x00030000 #define COMEDI_EV_START 0x00040000 #define COMEDI_EV_SCAN_BEGIN 0x00080000 #define COMEDI_EV_CONVERT 0x00100000 #define COMEDI_EV_SCAN_END 0x00200000 #define COMEDI_EV_STOP 0x00400000 /* compatibility definitions */ #define TRIG_BOGUS CMDF_BOGUS #define TRIG_RT CMDF_PRIORITY #define TRIG_WAKE_EOS CMDF_WAKE_EOS #define TRIG_WRITE CMDF_WRITE #define TRIG_ROUND_MASK CMDF_ROUND_MASK #define TRIG_ROUND_NEAREST CMDF_ROUND_NEAREST #define TRIG_ROUND_DOWN CMDF_ROUND_DOWN #define TRIG_ROUND_UP CMDF_ROUND_UP #define TRIG_ROUND_UP_NEXT CMDF_ROUND_UP_NEXT /* trigger sources */ #define TRIG_ANY 0xffffffff #define TRIG_INVALID 0x00000000 #define TRIG_NONE 0x00000001 /* never trigger */ #define TRIG_NOW 0x00000002 /* trigger now + N ns */ #define TRIG_FOLLOW 0x00000004 /* trigger on next lower level trig */ #define TRIG_TIME 0x00000008 /* trigger at time N ns */ #define TRIG_TIMER 0x00000010 /* trigger at rate N ns */ #define TRIG_COUNT 0x00000020 /* trigger when count reaches N */ #define TRIG_EXT 0x00000040 /* trigger on external signal N */ #define TRIG_INT 0x00000080 /* trigger on comedi-internal signal N */ #define TRIG_OTHER 0x00000100 /* driver defined */ /* subdevice flags */ #define SDF_BUSY 0x0001 /* device is busy */ #define SDF_BUSY_OWNER 0x0002 /* device is busy with your job */ #define SDF_LOCKED 0x0004 /* subdevice is locked */ #define SDF_LOCK_OWNER 0x0008 /* you own lock */ #define SDF_MAXDATA 0x0010 /* maxdata depends on channel */ #define SDF_FLAGS 0x0020 /* flags depend on channel */ #define SDF_RANGETYPE 0x0040 /* range type depends on channel */ #define SDF_PWM_COUNTER 0x0080 /* PWM can automatically switch off */ #define SDF_PWM_HBRIDGE 0x0100 /* PWM is signed (H-bridge) */ #define SDF_CMD 0x1000 /* can do commands (deprecated) */ #define SDF_SOFT_CALIBRATED 0x2000 /* subdevice uses software calibration */ #define SDF_CMD_WRITE 0x4000 /* can do output commands */ #define SDF_CMD_READ 0x8000 /* can do input commands */ /* subdevice can be read (e.g. analog input) */ #define SDF_READABLE 0x00010000 /* subdevice can be written (e.g. analog output) */ #define SDF_WRITABLE 0x00020000 #define SDF_WRITEABLE SDF_WRITABLE /* spelling error in API */ /* subdevice does not have externally visible lines */ #define SDF_INTERNAL 0x00040000 #define SDF_GROUND 0x00100000 /* can do aref=ground */ #define SDF_COMMON 0x00200000 /* can do aref=common */ #define SDF_DIFF 0x00400000 /* can do aref=diff */ #define SDF_OTHER 0x00800000 /* can do aref=other */ #define SDF_DITHER 0x01000000 /* can do dithering */ #define SDF_DEGLITCH 0x02000000 /* can do deglitching */ #define SDF_MMAP 0x04000000 /* can do mmap() */ #define SDF_RUNNING 0x08000000 /* subdevice is acquiring data */ #define SDF_LSAMPL 0x10000000 /* subdevice uses 32-bit samples */ #define SDF_PACKED 0x20000000 /* subdevice can do packed DIO */ /* subdevice types */ /** * enum comedi_subdevice_type - COMEDI subdevice types * @COMEDI_SUBD_UNUSED: Unused subdevice. * @COMEDI_SUBD_AI: Analog input. * @COMEDI_SUBD_AO: Analog output. * @COMEDI_SUBD_DI: Digital input. * @COMEDI_SUBD_DO: Digital output. * @COMEDI_SUBD_DIO: Digital input/output. * @COMEDI_SUBD_COUNTER: Counter. * @COMEDI_SUBD_TIMER: Timer. * @COMEDI_SUBD_MEMORY: Memory, EEPROM, DPRAM. * @COMEDI_SUBD_CALIB: Calibration DACs. * @COMEDI_SUBD_PROC: Processor, DSP. * @COMEDI_SUBD_SERIAL: Serial I/O. * @COMEDI_SUBD_PWM: Pulse-Width Modulation output. */ enum comedi_subdevice_type { COMEDI_SUBD_UNUSED, COMEDI_SUBD_AI, COMEDI_SUBD_AO, COMEDI_SUBD_DI, COMEDI_SUBD_DO, COMEDI_SUBD_DIO, COMEDI_SUBD_COUNTER, COMEDI_SUBD_TIMER, COMEDI_SUBD_MEMORY, COMEDI_SUBD_CALIB, COMEDI_SUBD_PROC, COMEDI_SUBD_SERIAL, COMEDI_SUBD_PWM }; /* configuration instructions */ /** * enum configuration_ids - COMEDI configuration instruction codes * @INSN_CONFIG_DIO_INPUT: Configure digital I/O as input. * @INSN_CONFIG_DIO_OUTPUT: Configure digital I/O as output. * @INSN_CONFIG_DIO_OPENDRAIN: Configure digital I/O as open-drain (or open * collector) output. * @INSN_CONFIG_ANALOG_TRIG: Configure analog trigger. * @INSN_CONFIG_ALT_SOURCE: Configure alternate input source. * @INSN_CONFIG_DIGITAL_TRIG: Configure digital trigger. * @INSN_CONFIG_BLOCK_SIZE: Configure block size for DMA transfers. * @INSN_CONFIG_TIMER_1: Configure divisor for external clock. * @INSN_CONFIG_FILTER: Configure a filter. * @INSN_CONFIG_CHANGE_NOTIFY: Configure change notification for digital * inputs. (New drivers should use * %INSN_CONFIG_DIGITAL_TRIG instead.) * @INSN_CONFIG_SERIAL_CLOCK: Configure clock for serial I/O. * @INSN_CONFIG_BIDIRECTIONAL_DATA: Send and receive byte over serial I/O. * @INSN_CONFIG_DIO_QUERY: Query direction of digital I/O channel. * @INSN_CONFIG_PWM_OUTPUT: Configure pulse-width modulator output. * @INSN_CONFIG_GET_PWM_OUTPUT: Get pulse-width modulator output configuration. * @INSN_CONFIG_ARM: Arm a subdevice or channel. * @INSN_CONFIG_DISARM: Disarm a subdevice or channel. * @INSN_CONFIG_GET_COUNTER_STATUS: Get counter status. * @INSN_CONFIG_RESET: Reset a subdevice or channel. * @INSN_CONFIG_GPCT_SINGLE_PULSE_GENERATOR: Configure counter/timer as * single pulse generator. * @INSN_CONFIG_GPCT_PULSE_TRAIN_GENERATOR: Configure counter/timer as * pulse train generator. * @INSN_CONFIG_GPCT_QUADRATURE_ENCODER: Configure counter as a quadrature * encoder. * @INSN_CONFIG_SET_GATE_SRC: Set counter/timer gate source. * @INSN_CONFIG_GET_GATE_SRC: Get counter/timer gate source. * @INSN_CONFIG_SET_CLOCK_SRC: Set counter/timer master clock source. * @INSN_CONFIG_GET_CLOCK_SRC: Get counter/timer master clock source. * @INSN_CONFIG_SET_OTHER_SRC: Set counter/timer "other" source. * @INSN_CONFIG_GET_HARDWARE_BUFFER_SIZE: Get size (in bytes) of subdevice's * on-board FIFOs used during streaming * input/output. * @INSN_CONFIG_SET_COUNTER_MODE: Set counter/timer mode. * @INSN_CONFIG_8254_SET_MODE: (Deprecated) Same as * %INSN_CONFIG_SET_COUNTER_MODE. * @INSN_CONFIG_8254_READ_STATUS: Read status of 8254 counter channel. * @INSN_CONFIG_SET_ROUTING: Set routing for a channel. * @INSN_CONFIG_GET_ROUTING: Get routing for a channel. * @INSN_CONFIG_TEST_ROUTE: Validate the possibility of a globally-named route * @INSN_CONFIG_CONNECT_ROUTE: Connect a globally-named route * @INSN_CONFIG_DISCONNECT_ROUTE:Disconnect a globally-named route * @INSN_CONFIG_GET_ROUTES: Get a list of all globally-named routes that are * valid for a particular device. * @INSN_CONFIG_PWM_SET_PERIOD: Set PWM period in nanoseconds. * @INSN_CONFIG_PWM_GET_PERIOD: Get PWM period in nanoseconds. * @INSN_CONFIG_GET_PWM_STATUS: Get PWM status. * @INSN_CONFIG_PWM_SET_H_BRIDGE: Set PWM H bridge duty cycle and polarity for * a relay simultaneously. * @INSN_CONFIG_PWM_GET_H_BRIDGE: Get PWM H bridge duty cycle and polarity. */ enum configuration_ids { INSN_CONFIG_DIO_INPUT = 0, INSN_CONFIG_DIO_OUTPUT = 1, INSN_CONFIG_DIO_OPENDRAIN = 2, INSN_CONFIG_ANALOG_TRIG = 16, /* INSN_CONFIG_WAVEFORM = 17, */ /* INSN_CONFIG_TRIG = 18, */ /* INSN_CONFIG_COUNTER = 19, */ INSN_CONFIG_ALT_SOURCE = 20, INSN_CONFIG_DIGITAL_TRIG = 21, INSN_CONFIG_BLOCK_SIZE = 22, INSN_CONFIG_TIMER_1 = 23, INSN_CONFIG_FILTER = 24, INSN_CONFIG_CHANGE_NOTIFY = 25, INSN_CONFIG_SERIAL_CLOCK = 26, /*ALPHA*/ INSN_CONFIG_BIDIRECTIONAL_DATA = 27, INSN_CONFIG_DIO_QUERY = 28, INSN_CONFIG_PWM_OUTPUT = 29, INSN_CONFIG_GET_PWM_OUTPUT = 30, INSN_CONFIG_ARM = 31, INSN_CONFIG_DISARM = 32, INSN_CONFIG_GET_COUNTER_STATUS = 33, INSN_CONFIG_RESET = 34, INSN_CONFIG_GPCT_SINGLE_PULSE_GENERATOR = 1001, INSN_CONFIG_GPCT_PULSE_TRAIN_GENERATOR = 1002, INSN_CONFIG_GPCT_QUADRATURE_ENCODER = 1003, INSN_CONFIG_SET_GATE_SRC = 2001, INSN_CONFIG_GET_GATE_SRC = 2002, INSN_CONFIG_SET_CLOCK_SRC = 2003, INSN_CONFIG_GET_CLOCK_SRC = 2004, INSN_CONFIG_SET_OTHER_SRC = 2005, INSN_CONFIG_GET_HARDWARE_BUFFER_SIZE = 2006, INSN_CONFIG_SET_COUNTER_MODE = 4097, INSN_CONFIG_8254_SET_MODE = INSN_CONFIG_SET_COUNTER_MODE, INSN_CONFIG_8254_READ_STATUS = 4098, INSN_CONFIG_SET_ROUTING = 4099, INSN_CONFIG_GET_ROUTING = 4109, INSN_CONFIG_PWM_SET_PERIOD = 5000, INSN_CONFIG_PWM_GET_PERIOD = 5001, INSN_CONFIG_GET_PWM_STATUS = 5002, INSN_CONFIG_PWM_SET_H_BRIDGE = 5003, INSN_CONFIG_PWM_GET_H_BRIDGE = 5004 }; /** * enum comedi_digital_trig_op - operations for configuring a digital trigger * @COMEDI_DIGITAL_TRIG_DISABLE: Return digital trigger to its default, * inactive, unconfigured state. * @COMEDI_DIGITAL_TRIG_ENABLE_EDGES: Set rising and/or falling edge inputs * that each can fire the trigger. * @COMEDI_DIGITAL_TRIG_ENABLE_LEVELS: Set a combination of high and/or low * level inputs that can fire the trigger. * * These are used with the %INSN_CONFIG_DIGITAL_TRIG configuration instruction. * The data for the configuration instruction is as follows... * * data[%0] = %INSN_CONFIG_DIGITAL_TRIG * * data[%1] = trigger ID * * data[%2] = configuration operation * * data[%3] = configuration parameter 1 * * data[%4] = configuration parameter 2 * * data[%5] = configuration parameter 3 * * The trigger ID (data[%1]) is used to differentiate multiple digital triggers * belonging to the same subdevice. The configuration operation (data[%2]) is * one of the enum comedi_digital_trig_op values. The configuration * parameters (data[%3], data[%4], and data[%5]) depend on the operation; they * are not used with %COMEDI_DIGITAL_TRIG_DISABLE. * * For %COMEDI_DIGITAL_TRIG_ENABLE_EDGES and %COMEDI_DIGITAL_TRIG_ENABLE_LEVELS, * configuration parameter 1 (data[%3]) contains a "left-shift" value that * specifies the input corresponding to bit 0 of configuration parameters 2 * and 3. This is useful if the trigger has more than 32 inputs. * * For %COMEDI_DIGITAL_TRIG_ENABLE_EDGES, configuration parameter 2 (data[%4]) * specifies which of up to 32 inputs have rising-edge sensitivity, and * configuration parameter 3 (data[%5]) specifies which of up to 32 inputs * have falling-edge sensitivity that can fire the trigger. * * For %COMEDI_DIGITAL_TRIG_ENABLE_LEVELS, configuration parameter 2 (data[%4]) * specifies which of up to 32 inputs must be at a high level, and * configuration parameter 3 (data[%5]) specifies which of up to 32 inputs * must be at a low level for the trigger to fire. * * Some sequences of %INSN_CONFIG_DIGITAL_TRIG instructions may have a (partly) * accumulative effect, depending on the low-level driver. This is useful * when setting up a trigger that has more than 32 inputs, or has a combination * of edge- and level-triggered inputs. */ enum comedi_digital_trig_op { COMEDI_DIGITAL_TRIG_DISABLE = 0, COMEDI_DIGITAL_TRIG_ENABLE_EDGES = 1, COMEDI_DIGITAL_TRIG_ENABLE_LEVELS = 2 }; /** * enum comedi_io_direction - COMEDI I/O directions * @COMEDI_INPUT: Input. * @COMEDI_OUTPUT: Output. * @COMEDI_OPENDRAIN: Open-drain (or open-collector) output. * * These are used by the %INSN_CONFIG_DIO_QUERY configuration instruction to * report a direction. They may also be used in other places where a direction * needs to be specified. */ enum comedi_io_direction { COMEDI_INPUT = 0, COMEDI_OUTPUT = 1, COMEDI_OPENDRAIN = 2 }; /** * enum comedi_support_level - support level for a COMEDI feature * @COMEDI_UNKNOWN_SUPPORT: Unspecified support for feature. * @COMEDI_SUPPORTED: Feature is supported. * @COMEDI_UNSUPPORTED: Feature is unsupported. */ enum comedi_support_level { COMEDI_UNKNOWN_SUPPORT = 0, COMEDI_SUPPORTED, COMEDI_UNSUPPORTED }; /** * enum comedi_counter_status_flags - counter status bits * @COMEDI_COUNTER_ARMED: Counter is armed. * @COMEDI_COUNTER_COUNTING: Counter is counting. * @COMEDI_COUNTER_TERMINAL_COUNT: Counter reached terminal count. * * These bitwise values are used by the %INSN_CONFIG_GET_COUNTER_STATUS * configuration instruction to report the status of a counter. */ enum comedi_counter_status_flags { COMEDI_COUNTER_ARMED = 0x1, COMEDI_COUNTER_COUNTING = 0x2, COMEDI_COUNTER_TERMINAL_COUNT = 0x4, }; /* ioctls */ #define CIO 'd' #define COMEDI_DEVCONFIG _IOW(CIO, 0, comedi_devconfig) #define COMEDI_DEVINFO _IOR(CIO, 1, comedi_devinfo) #define COMEDI_SUBDINFO _IOR(CIO, 2, comedi_subdinfo) #define COMEDI_CHANINFO _IOR(CIO, 3, comedi_chaninfo) /* _IOWR(CIO, 4, ...) is reserved */ #define COMEDI_LOCK _IO(CIO, 5) #define COMEDI_UNLOCK _IO(CIO, 6) #define COMEDI_CANCEL _IO(CIO, 7) #define COMEDI_RANGEINFO _IOR(CIO, 8, comedi_rangeinfo) #define COMEDI_CMD _IOR(CIO, 9, comedi_cmd) #define COMEDI_CMDTEST _IOR(CIO, 10, comedi_cmd) #define COMEDI_INSNLIST _IOR(CIO, 11, comedi_insnlist) #define COMEDI_INSN _IOR(CIO, 12, comedi_insn) #define COMEDI_BUFCONFIG _IOR(CIO, 13, comedi_bufconfig) #define COMEDI_BUFINFO _IOWR(CIO, 14, comedi_bufinfo) #define COMEDI_POLL _IO(CIO, 15) #define COMEDI_SETRSUBD _IO(CIO, 16) #define COMEDI_SETWSUBD _IO(CIO, 17) /* structures */ typedef struct comedi_cmd_struct comedi_cmd; typedef struct comedi_insn_struct comedi_insn; typedef struct comedi_insnlist_struct comedi_insnlist; typedef struct comedi_chaninfo_struct comedi_chaninfo; typedef struct comedi_subdinfo_struct comedi_subdinfo; typedef struct comedi_devinfo_struct comedi_devinfo; typedef struct comedi_devconfig_struct comedi_devconfig; typedef struct comedi_rangeinfo_struct comedi_rangeinfo; typedef struct comedi_krange_struct comedi_krange; typedef struct comedi_bufconfig_struct comedi_bufconfig; typedef struct comedi_bufinfo_struct comedi_bufinfo; /** * struct comedi_insn - COMEDI instruction * @insn: COMEDI instruction type (%INSN_xxx). * @n: Length of @data[]. * @data: Pointer to data array operated on by the instruction. * @subdev: Subdevice index. * @chanspec: A packed "chanspec" value consisting of channel number, * analog range index, analog reference type, and flags. * @unused: Reserved for future use. * * This is used with the %COMEDI_INSN ioctl, and indirectly with the * %COMEDI_INSNLIST ioctl. */ struct comedi_insn_struct { unsigned int insn; unsigned int n; lsampl_t *data; unsigned int subdev; unsigned int chanspec; unsigned int unused[3]; }; /** * struct comedi_insnlist - list of COMEDI instructions * @n_insns: Number of COMEDI instructions. * @insns: Pointer to array COMEDI instructions. * * This is used with the %COMEDI_INSNLIST ioctl. */ struct comedi_insnlist_struct { unsigned int n_insns; comedi_insn *insns; }; /** * struct comedi_cmd - COMEDI asynchronous acquisition command details * @subdev: Subdevice index. * @flags: Command flags (%CMDF_xxx). * @start_src: "Start acquisition" trigger source (%TRIG_xxx). * @start_arg: "Start acquisition" trigger argument. * @scan_begin_src: "Scan begin" trigger source. * @scan_begin_arg: "Scan begin" trigger argument. * @convert_src: "Convert" trigger source. * @convert_arg: "Convert" trigger argument. * @scan_end_src: "Scan end" trigger source. * @scan_end_arg: "Scan end" trigger argument. * @stop_src: "Stop acquisition" trigger source. * @stop_arg: "Stop acquisition" trigger argument. * @chanlist: Pointer to array of "chanspec" values, containing a * sequence of channel numbers packed with analog range * index, etc. * @chanlist_len: Number of channels in sequence. * @data: Pointer to miscellaneous set-up data (not used). * @data_len: Length of miscellaneous set-up data. * * This is used with the %COMEDI_CMD or %COMEDI_CMDTEST ioctl to set-up * or validate an asynchronous acquisition command. The ioctl may modify * the &struct comedi_cmd and copy it back to the caller. * * Optional command @flags values that can be ORed together... * * %CMDF_BOGUS - makes %COMEDI_CMD ioctl return error %EAGAIN instead of * starting the command. * * %CMDF_PRIORITY - requests "hard real-time" processing (which is not * supported in this version of COMEDI). * * %CMDF_WAKE_EOS - requests the command makes data available for reading * after every "scan" period. * * %CMDF_WRITE - marks the command as being in the "write" (to device) * direction. This does not need to be specified by the caller unless the * subdevice supports commands in either direction. * * %CMDF_RAWDATA - prevents the command from "munging" the data between the * COMEDI sample format and the raw hardware sample format. * * %CMDF_ROUND_NEAREST - requests timing periods to be rounded to nearest * supported values. * * %CMDF_ROUND_DOWN - requests timing periods to be rounded down to supported * values (frequencies rounded up). * * %CMDF_ROUND_UP - requests timing periods to be rounded up to supported * values (frequencies rounded down). * * Trigger source values for @start_src, @scan_begin_src, @convert_src, * @scan_end_src, and @stop_src... * * %TRIG_ANY - "all ones" value used to test which trigger sources are * supported. * * %TRIG_INVALID - "all zeroes" value used to indicate that all requested * trigger sources are invalid. * * %TRIG_NONE - never trigger (often used as a @stop_src value). * * %TRIG_NOW - trigger after '_arg' nanoseconds. * * %TRIG_FOLLOW - trigger follows another event. * * %TRIG_TIMER - trigger every '_arg' nanoseconds. * * %TRIG_COUNT - trigger when count '_arg' is reached. * * %TRIG_EXT - trigger on external signal specified by '_arg'. * * %TRIG_INT - trigger on internal, software trigger specified by '_arg'. * * %TRIG_OTHER - trigger on other, driver-defined signal specified by '_arg'. */ struct comedi_cmd_struct { unsigned int subdev; unsigned int flags; unsigned int start_src; unsigned int start_arg; unsigned int scan_begin_src; unsigned int scan_begin_arg; unsigned int convert_src; unsigned int convert_arg; unsigned int scan_end_src; unsigned int scan_end_arg; unsigned int stop_src; unsigned int stop_arg; unsigned int *chanlist; unsigned int chanlist_len; sampl_t *data; unsigned int data_len; }; /** * struct comedi_chaninfo - used to retrieve per-channel information * @subdev: Subdevice index. * @maxdata_list: Optional pointer to per-channel maximum data values. * @flaglist: Optional pointer to per-channel flags. * @rangelist: Optional pointer to per-channel range types. * @unused: Reserved for future use. * * This is used with the %COMEDI_CHANINFO ioctl to get per-channel information * for the subdevice. Use of this requires knowledge of the number of channels * and subdevice flags obtained using the %COMEDI_SUBDINFO ioctl. * * The @maxdata_list member must be %NULL unless the %SDF_MAXDATA subdevice * flag is set. The @flaglist member must be %NULL unless the %SDF_FLAGS * subdevice flag is set. The @rangelist member must be %NULL unless the * %SDF_RANGETYPE subdevice flag is set. Otherwise, the arrays they point to * must be at least as long as the number of channels. */ struct comedi_chaninfo_struct { unsigned int subdev; lsampl_t *maxdata_list; unsigned int *flaglist; unsigned int *rangelist; unsigned int unused[4]; }; /** * struct comedi_rangeinfo - used to retrieve the range table for a channel * @range_type: Encodes subdevice index (bits 27:24), channel index * (bits 23:16) and range table length (bits 15:0). * @range_ptr: Pointer to array of @struct comedi_krange to be filled * in with the range table for the channel or subdevice. * * This is used with the %COMEDI_RANGEINFO ioctl to retrieve the range table * for a specific channel (if the subdevice has the %SDF_RANGETYPE flag set to * indicate that the range table depends on the channel), or for the subdevice * as a whole (if the %SDF_RANGETYPE flag is clear, indicating the range table * is shared by all channels). * * The @range_type value is an input to the ioctl and comes from a previous * use of the %COMEDI_SUBDINFO ioctl (if the %SDF_RANGETYPE flag is clear), * or the %COMEDI_CHANINFO ioctl (if the %SDF_RANGETYPE flag is set). */ struct comedi_rangeinfo_struct { unsigned int range_type; void *range_ptr; }; /** * struct comedi_krange - describes a range in a range table * @min: Minimum value in millionths (1e-6) of a unit. * @max: Maximum value in millionths (1e-6) of a unit. * @flags: Indicates the units (in bits 7:0) OR'ed with optional flags. * * A range table is associated with a single channel, or with all channels in a * subdevice, and a list of one or more ranges. A %struct comedi_krange * describes the physical range of units for one of those ranges. Sample * values in COMEDI are unsigned from %0 up to some 'maxdata' value. The * mapping from sample values to physical units is assumed to be nomimally * linear (for the purpose of describing the range), with sample value %0 * mapping to @min, and the 'maxdata' sample value mapping to @max. * * The currently defined units are %UNIT_volt (%0), %UNIT_mA (%1), and * %UNIT_none (%2). The @min and @max values are the physical range multiplied * by 1e6, so a @max value of %1000000 (with %UNIT_volt) represents a maximal * value of 1 volt. * * The only defined flag value is %RF_external (%1 << %8), indicating that the * the range needs to be multiplied by an external reference. */ struct comedi_krange_struct { int min; int max; unsigned int flags; }; /** * struct comedi_subdinfo - used to retrieve information about a subdevice * @type: Type of subdevice from &enum comedi_subdevice_type. * @n_chan: Number of channels the subdevice supports. * @subd_flags: A mixture of static and dynamic flags describing * aspects of the subdevice and its current state. * @timer_type: Timer type. Always set to %5 ("nanosecond timer"). * @len_chanlist: Maximum length of a channel list if the subdevice * supports asynchronous acquisition commands. * @maxdata: Maximum sample value for all channels if the * %SDF_MAXDATA subdevice flag is clear. * @flags: Channel flags for all channels if the %SDF_FLAGS * subdevice flag is clear. * @range_type: The range type for all channels if the %SDF_RANGETYPE * subdevice flag is clear. Encodes the subdevice index * (bits 27:24), a dummy channel index %0 (bits 23:16), * and the range table length (bits 15:0). * @settling_time_0: Not used. * @insn_bits_support: Set to %COMEDI_SUPPORTED if the subdevice supports the * %INSN_BITS instruction, or to %COMEDI_UNSUPPORTED if it * does not. * @unused: Reserved for future use. * * This is used with the %COMEDI_SUBDINFO ioctl which copies an array of * &struct comedi_subdinfo back to user space, with one element per subdevice. * Use of this requires knowledge of the number of subdevices obtained from * the %COMEDI_DEVINFO ioctl. * * These are the @subd_flags values that may be ORed together... * * %SDF_BUSY - the subdevice is busy processing an asynchronous command or a * synchronous instruction. * * %SDF_BUSY_OWNER - the subdevice is busy processing an asynchronous * acquisition command started on the current file object (the file object * issuing the %COMEDI_SUBDINFO ioctl). * * %SDF_LOCKED - the subdevice is locked by a %COMEDI_LOCK ioctl. * * %SDF_LOCK_OWNER - the subdevice is locked by a %COMEDI_LOCK ioctl from the * current file object. * * %SDF_MAXDATA - maximum sample values are channel-specific. * * %SDF_FLAGS - channel flags are channel-specific. * * %SDF_RANGETYPE - range types are channel-specific. * * %SDF_PWM_COUNTER - PWM can switch off automatically. * * %SDF_PWM_HBRIDGE - or PWM is signed (H-bridge). * * %SDF_CMD - the subdevice supports asynchronous commands. * * %SDF_SOFT_CALIBRATED - the subdevice uses software calibration. * * %SDF_CMD_WRITE - the subdevice supports asynchronous commands in the output * ("write") direction. * * %SDF_CMD_READ - the subdevice supports asynchronous commands in the input * ("read") direction. * * %SDF_READABLE - the subdevice is readable (e.g. analog input). * * %SDF_WRITABLE (aliased as %SDF_WRITEABLE) - the subdevice is writable (e.g. * analog output). * * %SDF_INTERNAL - the subdevice has no externally visible lines. * * %SDF_GROUND - the subdevice can use ground as an analog reference. * * %SDF_COMMON - the subdevice can use a common analog reference. * * %SDF_DIFF - the subdevice can use differential inputs (or outputs). * * %SDF_OTHER - the subdevice can use some other analog reference. * * %SDF_DITHER - the subdevice can do dithering. * * %SDF_DEGLITCH - the subdevice can do deglitching. * * %SDF_MMAP - this is never set. * * %SDF_RUNNING - an asynchronous command is still running. * * %SDF_LSAMPL - the subdevice uses "long" (32-bit) samples (for asynchronous * command data). * * %SDF_PACKED - the subdevice packs several DIO samples into a single sample * (for asynchronous command data). * * No "channel flags" (@flags) values are currently defined. */ struct comedi_subdinfo_struct { unsigned int type; unsigned int n_chan; unsigned int subd_flags; unsigned int timer_type; unsigned int len_chanlist; lsampl_t maxdata; unsigned int flags; unsigned int range_type; unsigned int settling_time_0; unsigned int insn_bits_support; unsigned int unused[8]; }; /** * struct comedi_devinfo - used to retrieve information about a COMEDI device * @version_code: COMEDI version code. * @n_subdevs: Number of subdevices the device has. * @driver_name: Null-terminated COMEDI driver name. * @board_name: Null-terminated COMEDI board name. * @read_subdevice: Index of the current "read" subdevice (%-1 if none). * @write_subdevice: Index of the current "write" subdevice (%-1 if none). * @unused: Reserved for future use. * * This is used with the %COMEDI_DEVINFO ioctl to get basic information about * the device. */ struct comedi_devinfo_struct { unsigned int version_code; unsigned int n_subdevs; char driver_name[COMEDI_NAMELEN]; char board_name[COMEDI_NAMELEN]; int read_subdevice; int write_subdevice; int unused[30]; }; /** * struct comedi_devconfig - used to configure a legacy COMEDI device * @board_name: Null-terminated string specifying the type of board * to configure. * @options: An array of integer configuration options. * * This is used with the %COMEDI_DEVCONFIG ioctl to configure a "legacy" COMEDI * device, such as an ISA card. Not all COMEDI drivers support this. Those * that do either expect the specified board name to match one of a list of * names registered with the COMEDI core, or expect the specified board name * to match the COMEDI driver name itself. The configuration options are * handled in a driver-specific manner. */ struct comedi_devconfig_struct { char board_name[COMEDI_NAMELEN]; int options[COMEDI_NDEVCONFOPTS]; }; /** * struct comedi_bufconfig - used to set or get buffer size for a subdevice * @subdevice: Subdevice index. * @flags: Not used. * @maximum_size: Maximum allowed buffer size. * @size: Buffer size. * @unused: Reserved for future use. * * This is used with the %COMEDI_BUFCONFIG ioctl to get or configure the * maximum buffer size and current buffer size for a COMEDI subdevice that * supports asynchronous commands. If the subdevice does not support * asynchronous commands, @maximum_size and @size are ignored and set to 0. * * On ioctl input, non-zero values of @maximum_size and @size specify a * new maximum size and new current size (in bytes), respectively. These * will by rounded up to a multiple of %PAGE_SIZE. Specifying a new maximum * size requires admin capabilities. * * On ioctl output, @maximum_size and @size and set to the current maximum * buffer size and current buffer size, respectively. */ struct comedi_bufconfig_struct { unsigned int subdevice; unsigned int flags; unsigned int maximum_size; unsigned int size; unsigned int unused[4]; }; /** * struct comedi_bufinfo - used to manipulate buffer position for a subdevice * @subdevice: Subdevice index. * @bytes_read: Specify amount to advance read position for an * asynchronous command in the input ("read") direction. * @buf_write_ptr: Current write position (index) within the buffer. * @buf_read_ptr: Current read position (index) within the buffer. * @buf_write_count: Total amount written, modulo 2^32. * @buf_read_count: Total amount read, modulo 2^32. * @bytes_written: Specify amount to advance write position for an * asynchronous command in the output ("write") direction. * @unused: Reserved for future use. * * This is used with the %COMEDI_BUFINFO ioctl to optionally advance the * current read or write position in an asynchronous acquisition data buffer, * and to get the current read and write positions in the buffer. */ struct comedi_bufinfo_struct { unsigned int subdevice; unsigned int bytes_read; unsigned int buf_write_ptr; unsigned int buf_read_ptr; unsigned int buf_write_count; unsigned int buf_read_count; unsigned int bytes_written; unsigned int unused[4]; }; /* range stuff */ #define __RANGE(a, b) ((((a) & 0xffff) << 16) | ((b) & 0xffff)) #define RANGE_OFFSET(a) (((a) >> 16) & 0xffff) #define RANGE_LENGTH(b) ((b) & 0xffff) #define RF_UNIT(flags) ((flags) & 0xff) #define RF_EXTERNAL 0x100 #define UNIT_volt 0 #define UNIT_mA 1 #define UNIT_none 2 #define COMEDI_MIN_SPEED 0xffffffffu /**********************************************************/ /* everything after this line is ALPHA */ /**********************************************************/ /* * 8254 specific configuration. * * It supports two config commands: * * 0 ID: INSN_CONFIG_SET_COUNTER_MODE * 1 8254 Mode * I8254_MODE0, I8254_MODE1, ..., I8254_MODE5 * OR'ed with: * I8254_BCD, I8254_BINARY * * 0 ID: INSN_CONFIG_8254_READ_STATUS * 1 <-- Status byte returned here. * B7 = Output * B6 = NULL Count * B5 - B0 Current mode. */ enum i8254_mode { I8254_MODE0 = (0 << 1), /* Interrupt on terminal count */ I8254_MODE1 = (1 << 1), /* Hardware retriggerable one-shot */ I8254_MODE2 = (2 << 1), /* Rate generator */ I8254_MODE3 = (3 << 1), /* Square wave mode */ I8254_MODE4 = (4 << 1), /* Software triggered strobe */ /* Hardware triggered strobe (retriggerable) */ I8254_MODE5 = (5 << 1), /* Use binary-coded decimal instead of binary (pretty useless) */ I8254_BCD = 1, I8254_BINARY = 0 }; #define NI_USUAL_PFI_SELECT(x) (((x) < 10) ? (0x1 + (x)) : (0xb + (x))) #define NI_USUAL_RTSI_SELECT(x) (((x) < 7) ? (0xb + (x)) : 0x1b) /* * mode bits for NI general-purpose counters, set with * INSN_CONFIG_SET_COUNTER_MODE */ #define NI_GPCT_COUNTING_MODE_SHIFT 16 #define NI_GPCT_INDEX_PHASE_BITSHIFT 20 #define NI_GPCT_COUNTING_DIRECTION_SHIFT 24 enum ni_gpct_mode_bits { NI_GPCT_GATE_ON_BOTH_EDGES_BIT = 0x4, NI_GPCT_EDGE_GATE_MODE_MASK = 0x18, NI_GPCT_EDGE_GATE_STARTS_STOPS_BITS = 0x0, NI_GPCT_EDGE_GATE_STOPS_STARTS_BITS = 0x8, NI_GPCT_EDGE_GATE_STARTS_BITS = 0x10, NI_GPCT_EDGE_GATE_NO_STARTS_NO_STOPS_BITS = 0x18, NI_GPCT_STOP_MODE_MASK = 0x60, NI_GPCT_STOP_ON_GATE_BITS = 0x00, NI_GPCT_STOP_ON_GATE_OR_TC_BITS = 0x20, NI_GPCT_STOP_ON_GATE_OR_SECOND_TC_BITS = 0x40, NI_GPCT_LOAD_B_SELECT_BIT = 0x80, NI_GPCT_OUTPUT_MODE_MASK = 0x300, NI_GPCT_OUTPUT_TC_PULSE_BITS = 0x100, NI_GPCT_OUTPUT_TC_TOGGLE_BITS = 0x200, NI_GPCT_OUTPUT_TC_OR_GATE_TOGGLE_BITS = 0x300, NI_GPCT_HARDWARE_DISARM_MASK = 0xc00, NI_GPCT_NO_HARDWARE_DISARM_BITS = 0x000, NI_GPCT_DISARM_AT_TC_BITS = 0x400, NI_GPCT_DISARM_AT_GATE_BITS = 0x800, NI_GPCT_DISARM_AT_TC_OR_GATE_BITS = 0xc00, NI_GPCT_LOADING_ON_TC_BIT = 0x1000, NI_GPCT_LOADING_ON_GATE_BIT = 0x4000, NI_GPCT_COUNTING_MODE_MASK = 0x7 << NI_GPCT_COUNTING_MODE_SHIFT, NI_GPCT_COUNTING_MODE_NORMAL_BITS = 0x0 << NI_GPCT_COUNTING_MODE_SHIFT, NI_GPCT_COUNTING_MODE_QUADRATURE_X1_BITS = 0x1 << NI_GPCT_COUNTING_MODE_SHIFT, NI_GPCT_COUNTING_MODE_QUADRATURE_X2_BITS = 0x2 << NI_GPCT_COUNTING_MODE_SHIFT, NI_GPCT_COUNTING_MODE_QUADRATURE_X4_BITS = 0x3 << NI_GPCT_COUNTING_MODE_SHIFT, NI_GPCT_COUNTING_MODE_TWO_PULSE_BITS = 0x4 << NI_GPCT_COUNTING_MODE_SHIFT, NI_GPCT_COUNTING_MODE_SYNC_SOURCE_BITS = 0x6 << NI_GPCT_COUNTING_MODE_SHIFT, NI_GPCT_INDEX_PHASE_MASK = 0x3 << NI_GPCT_INDEX_PHASE_BITSHIFT, NI_GPCT_INDEX_PHASE_LOW_A_LOW_B_BITS = 0x0 << NI_GPCT_INDEX_PHASE_BITSHIFT, NI_GPCT_INDEX_PHASE_LOW_A_HIGH_B_BITS = 0x1 << NI_GPCT_INDEX_PHASE_BITSHIFT, NI_GPCT_INDEX_PHASE_HIGH_A_LOW_B_BITS = 0x2 << NI_GPCT_INDEX_PHASE_BITSHIFT, NI_GPCT_INDEX_PHASE_HIGH_A_HIGH_B_BITS = 0x3 << NI_GPCT_INDEX_PHASE_BITSHIFT, NI_GPCT_INDEX_ENABLE_BIT = 0x400000, NI_GPCT_COUNTING_DIRECTION_MASK = 0x3 << NI_GPCT_COUNTING_DIRECTION_SHIFT, NI_GPCT_COUNTING_DIRECTION_DOWN_BITS = 0x00 << NI_GPCT_COUNTING_DIRECTION_SHIFT, NI_GPCT_COUNTING_DIRECTION_UP_BITS = 0x1 << NI_GPCT_COUNTING_DIRECTION_SHIFT, NI_GPCT_COUNTING_DIRECTION_HW_UP_DOWN_BITS = 0x2 << NI_GPCT_COUNTING_DIRECTION_SHIFT, NI_GPCT_COUNTING_DIRECTION_HW_GATE_BITS = 0x3 << NI_GPCT_COUNTING_DIRECTION_SHIFT, NI_GPCT_RELOAD_SOURCE_MASK = 0xc000000, NI_GPCT_RELOAD_SOURCE_FIXED_BITS = 0x0, NI_GPCT_RELOAD_SOURCE_SWITCHING_BITS = 0x4000000, NI_GPCT_RELOAD_SOURCE_GATE_SELECT_BITS = 0x8000000, NI_GPCT_OR_GATE_BIT = 0x10000000, NI_GPCT_INVERT_OUTPUT_BIT = 0x20000000 }; /* * Bits for setting a clock source with * INSN_CONFIG_SET_CLOCK_SRC when using NI general-purpose counters. */ enum ni_gpct_clock_source_bits { NI_GPCT_CLOCK_SRC_SELECT_MASK = 0x3f, NI_GPCT_TIMEBASE_1_CLOCK_SRC_BITS = 0x0, NI_GPCT_TIMEBASE_2_CLOCK_SRC_BITS = 0x1, NI_GPCT_TIMEBASE_3_CLOCK_SRC_BITS = 0x2, NI_GPCT_LOGIC_LOW_CLOCK_SRC_BITS = 0x3, NI_GPCT_NEXT_GATE_CLOCK_SRC_BITS = 0x4, NI_GPCT_NEXT_TC_CLOCK_SRC_BITS = 0x5, /* NI 660x-specific */ NI_GPCT_SOURCE_PIN_i_CLOCK_SRC_BITS = 0x6, NI_GPCT_PXI10_CLOCK_SRC_BITS = 0x7, NI_GPCT_PXI_STAR_TRIGGER_CLOCK_SRC_BITS = 0x8, NI_GPCT_ANALOG_TRIGGER_OUT_CLOCK_SRC_BITS = 0x9, NI_GPCT_PRESCALE_MODE_CLOCK_SRC_MASK = 0x30000000, NI_GPCT_NO_PRESCALE_CLOCK_SRC_BITS = 0x0, /* divide source by 2 */ NI_GPCT_PRESCALE_X2_CLOCK_SRC_BITS = 0x10000000, /* divide source by 8 */ NI_GPCT_PRESCALE_X8_CLOCK_SRC_BITS = 0x20000000, NI_GPCT_INVERT_CLOCK_SRC_BIT = 0x80000000 }; /* NI 660x-specific */ #define NI_GPCT_SOURCE_PIN_CLOCK_SRC_BITS(x) (0x10 + (x)) #define NI_GPCT_RTSI_CLOCK_SRC_BITS(x) (0x18 + (x)) /* no pfi on NI 660x */ #define NI_GPCT_PFI_CLOCK_SRC_BITS(x) (0x20 + (x)) /* * Possibilities for setting a gate source with * INSN_CONFIG_SET_GATE_SRC when using NI general-purpose counters. * May be bitwise-or'd with CR_EDGE or CR_INVERT. */ enum ni_gpct_gate_select { /* m-series gates */ NI_GPCT_TIMESTAMP_MUX_GATE_SELECT = 0x0, NI_GPCT_AI_START2_GATE_SELECT = 0x12, NI_GPCT_PXI_STAR_TRIGGER_GATE_SELECT = 0x13, NI_GPCT_NEXT_OUT_GATE_SELECT = 0x14, NI_GPCT_AI_START1_GATE_SELECT = 0x1c, NI_GPCT_NEXT_SOURCE_GATE_SELECT = 0x1d, NI_GPCT_ANALOG_TRIGGER_OUT_GATE_SELECT = 0x1e, NI_GPCT_LOGIC_LOW_GATE_SELECT = 0x1f, /* more gates for 660x */ NI_GPCT_SOURCE_PIN_i_GATE_SELECT = 0x100, NI_GPCT_GATE_PIN_i_GATE_SELECT = 0x101, /* more gates for 660x "second gate" */ NI_GPCT_UP_DOWN_PIN_i_GATE_SELECT = 0x201, NI_GPCT_SELECTED_GATE_GATE_SELECT = 0x21e, /* * m-series "second gate" sources are unknown, * we should add them here with an offset of 0x300 when * known. */ NI_GPCT_DISABLED_GATE_SELECT = 0x8000, }; #define NI_GPCT_GATE_PIN_GATE_SELECT(x) (0x102 + (x)) #define NI_GPCT_RTSI_GATE_SELECT(x) NI_USUAL_RTSI_SELECT(x) #define NI_GPCT_PFI_GATE_SELECT(x) NI_USUAL_PFI_SELECT(x) #define NI_GPCT_UP_DOWN_PIN_GATE_SELECT(x) (0x202 + (x)) /* * Possibilities for setting a source with * INSN_CONFIG_SET_OTHER_SRC when using NI general-purpose counters. */ enum ni_gpct_other_index { NI_GPCT_SOURCE_ENCODER_A, NI_GPCT_SOURCE_ENCODER_B, NI_GPCT_SOURCE_ENCODER_Z }; enum ni_gpct_other_select { /* m-series gates */ /* Still unknown, probably only need NI_GPCT_PFI_OTHER_SELECT */ NI_GPCT_DISABLED_OTHER_SELECT = 0x8000, }; #define NI_GPCT_PFI_OTHER_SELECT(x) NI_USUAL_PFI_SELECT(x) /* * start sources for ni general-purpose counters for use with * INSN_CONFIG_ARM */ enum ni_gpct_arm_source { NI_GPCT_ARM_IMMEDIATE = 0x0, /* Start both the counter and the adjacent paired counter simultaneously */ NI_GPCT_ARM_PAIRED_IMMEDIATE = 0x1, /* * If the NI_GPCT_HW_ARM bit is set, we will pass the least significant bits * (3 bits for 660x or 5 bits for m-series) through to the hardware. To select * a hardware trigger, pass the appropriate select bit, e.g., * NI_GPCT_HW_ARM | NI_GPCT_AI_START1_GATE_SELECT or * NI_GPCT_HW_ARM | NI_GPCT_PFI_GATE_SELECT(pfi_number) */ NI_GPCT_HW_ARM = 0x1000, NI_GPCT_ARM_UNKNOWN = NI_GPCT_HW_ARM, /* for backward compatibility */ }; /* digital filtering options for ni 660x for use with INSN_CONFIG_FILTER. */ enum ni_gpct_filter_select { NI_GPCT_FILTER_OFF = 0x0, NI_GPCT_FILTER_TIMEBASE_3_SYNC = 0x1, NI_GPCT_FILTER_100x_TIMEBASE_1 = 0x2, NI_GPCT_FILTER_20x_TIMEBASE_1 = 0x3, NI_GPCT_FILTER_10x_TIMEBASE_1 = 0x4, NI_GPCT_FILTER_2x_TIMEBASE_1 = 0x5, NI_GPCT_FILTER_2x_TIMEBASE_3 = 0x6 }; /* * PFI digital filtering options for ni m-series for use with * INSN_CONFIG_FILTER. */ enum ni_pfi_filter_select { NI_PFI_FILTER_OFF = 0x0, NI_PFI_FILTER_125ns = 0x1, NI_PFI_FILTER_6425ns = 0x2, NI_PFI_FILTER_2550us = 0x3 }; /* master clock sources for ni mio boards and INSN_CONFIG_SET_CLOCK_SRC */ enum ni_mio_clock_source { NI_MIO_INTERNAL_CLOCK = 0, /* * Doesn't work for m-series, use NI_MIO_PLL_RTSI_CLOCK() * the NI_MIO_PLL_* sources are m-series only */ NI_MIO_RTSI_CLOCK = 1, NI_MIO_PLL_PXI_STAR_TRIGGER_CLOCK = 2, NI_MIO_PLL_PXI10_CLOCK = 3, NI_MIO_PLL_RTSI0_CLOCK = 4 }; #define NI_MIO_PLL_RTSI_CLOCK(x) (NI_MIO_PLL_RTSI0_CLOCK + (x)) /* * Signals which can be routed to an NI RTSI pin with INSN_CONFIG_SET_ROUTING. * The numbers assigned are not arbitrary, they correspond to the bits required * to program the board. */ enum ni_rtsi_routing { NI_RTSI_OUTPUT_ADR_START1 = 0, NI_RTSI_OUTPUT_ADR_START2 = 1, NI_RTSI_OUTPUT_SCLKG = 2, NI_RTSI_OUTPUT_DACUPDN = 3, NI_RTSI_OUTPUT_DA_START1 = 4, NI_RTSI_OUTPUT_G_SRC0 = 5, NI_RTSI_OUTPUT_G_GATE0 = 6, NI_RTSI_OUTPUT_RGOUT0 = 7, NI_RTSI_OUTPUT_RTSI_BRD_0 = 8, /* Pre-m-series always have RTSI clock on line 7 */ NI_RTSI_OUTPUT_RTSI_OSC = 12 }; #define NI_RTSI_OUTPUT_RTSI_BRD(x) (NI_RTSI_OUTPUT_RTSI_BRD_0 + (x)) /* * Signals which can be routed to an NI PFI pin on an m-series board with * INSN_CONFIG_SET_ROUTING. These numbers are also returned by * INSN_CONFIG_GET_ROUTING on pre-m-series boards, even though their routing * cannot be changed. The numbers assigned are not arbitrary, they correspond * to the bits required to program the board. */ enum ni_pfi_routing { NI_PFI_OUTPUT_PFI_DEFAULT = 0, NI_PFI_OUTPUT_AI_START1 = 1, NI_PFI_OUTPUT_AI_START2 = 2, NI_PFI_OUTPUT_AI_CONVERT = 3, NI_PFI_OUTPUT_G_SRC1 = 4, NI_PFI_OUTPUT_G_GATE1 = 5, NI_PFI_OUTPUT_AO_UPDATE_N = 6, NI_PFI_OUTPUT_AO_START1 = 7, NI_PFI_OUTPUT_AI_START_PULSE = 8, NI_PFI_OUTPUT_G_SRC0 = 9, NI_PFI_OUTPUT_G_GATE0 = 10, NI_PFI_OUTPUT_EXT_STROBE = 11, NI_PFI_OUTPUT_AI_EXT_MUX_CLK = 12, NI_PFI_OUTPUT_GOUT0 = 13, NI_PFI_OUTPUT_GOUT1 = 14, NI_PFI_OUTPUT_FREQ_OUT = 15, NI_PFI_OUTPUT_PFI_DO = 16, NI_PFI_OUTPUT_I_ATRIG = 17, NI_PFI_OUTPUT_RTSI0 = 18, NI_PFI_OUTPUT_PXI_STAR_TRIGGER_IN = 26, NI_PFI_OUTPUT_SCXI_TRIG1 = 27, NI_PFI_OUTPUT_DIO_CHANGE_DETECT_RTSI = 28, NI_PFI_OUTPUT_CDI_SAMPLE = 29, NI_PFI_OUTPUT_CDO_UPDATE = 30 }; #define NI_PFI_OUTPUT_RTSI(x) (NI_PFI_OUTPUT_RTSI0 + (x)) /* * Signals which can be routed to output on a NI PFI pin on a 660x board * with INSN_CONFIG_SET_ROUTING. The numbers assigned are * not arbitrary, they correspond to the bits required * to program the board. Lines 0 to 7 can only be set to * NI_660X_PFI_OUTPUT_DIO. Lines 32 to 39 can only be set to * NI_660X_PFI_OUTPUT_COUNTER. */ enum ni_660x_pfi_routing { NI_660X_PFI_OUTPUT_COUNTER = 1, /* counter */ NI_660X_PFI_OUTPUT_DIO = 2, /* static digital output */ }; /* * NI External Trigger lines. These values are not arbitrary, but are related * to the bits required to program the board (offset by 1 for historical * reasons). */ #define NI_EXT_PFI(x) (NI_USUAL_PFI_SELECT(x) - 1) #define NI_EXT_RTSI(x) (NI_USUAL_RTSI_SELECT(x) - 1) /* * Clock sources for CDIO subdevice on NI m-series boards. Used as the * scan_begin_arg for a comedi_command. These sources may also be bitwise-or'd * with CR_INVERT to change polarity. */ enum ni_m_series_cdio_scan_begin_src { NI_CDIO_SCAN_BEGIN_SRC_GROUND = 0, NI_CDIO_SCAN_BEGIN_SRC_AI_START = 18, NI_CDIO_SCAN_BEGIN_SRC_AI_CONVERT = 19, NI_CDIO_SCAN_BEGIN_SRC_PXI_STAR_TRIGGER = 20, NI_CDIO_SCAN_BEGIN_SRC_G0_OUT = 28, NI_CDIO_SCAN_BEGIN_SRC_G1_OUT = 29, NI_CDIO_SCAN_BEGIN_SRC_ANALOG_TRIGGER = 30, NI_CDIO_SCAN_BEGIN_SRC_AO_UPDATE = 31, NI_CDIO_SCAN_BEGIN_SRC_FREQ_OUT = 32, NI_CDIO_SCAN_BEGIN_SRC_DIO_CHANGE_DETECT_IRQ = 33 }; #define NI_CDIO_SCAN_BEGIN_SRC_PFI(x) NI_USUAL_PFI_SELECT(x) #define NI_CDIO_SCAN_BEGIN_SRC_RTSI(x) NI_USUAL_RTSI_SELECT(x) /* * scan_begin_src for scan_begin_arg==TRIG_EXT with analog output command on NI * boards. These scan begin sources can also be bitwise-or'd with CR_INVERT to * change polarity. */ #define NI_AO_SCAN_BEGIN_SRC_PFI(x) NI_USUAL_PFI_SELECT(x) #define NI_AO_SCAN_BEGIN_SRC_RTSI(x) NI_USUAL_RTSI_SELECT(x) /* * Bits for setting a clock source with * INSN_CONFIG_SET_CLOCK_SRC when using NI frequency output subdevice. */ enum ni_freq_out_clock_source_bits { NI_FREQ_OUT_TIMEBASE_1_DIV_2_CLOCK_SRC, /* 10 MHz */ NI_FREQ_OUT_TIMEBASE_2_CLOCK_SRC /* 100 KHz */ }; /* * Values for setting a clock source with INSN_CONFIG_SET_CLOCK_SRC for * 8254 counter subdevices on Amplicon DIO boards (amplc_dio200 driver). */ enum amplc_dio_clock_source { /* * Per channel external clock * input/output pin (pin is only an * input when clock source set to this value, * otherwise it is an output) */ AMPLC_DIO_CLK_CLKN, AMPLC_DIO_CLK_10MHZ, /* 10 MHz internal clock */ AMPLC_DIO_CLK_1MHZ, /* 1 MHz internal clock */ AMPLC_DIO_CLK_100KHZ, /* 100 kHz internal clock */ AMPLC_DIO_CLK_10KHZ, /* 10 kHz internal clock */ AMPLC_DIO_CLK_1KHZ, /* 1 kHz internal clock */ /* * Output of preceding counter channel * (for channel 0, preceding counter * channel is channel 2 on preceding * counter subdevice, for first counter * subdevice, preceding counter * subdevice is the last counter * subdevice) */ AMPLC_DIO_CLK_OUTNM1, AMPLC_DIO_CLK_EXT, /* per chip external input pin */ /* the following are "enhanced" clock sources for PCIe models */ AMPLC_DIO_CLK_VCC, /* clock input HIGH */ AMPLC_DIO_CLK_GND, /* clock input LOW */ AMPLC_DIO_CLK_PAT_PRESENT, /* "pattern present" signal */ AMPLC_DIO_CLK_20MHZ /* 20 MHz internal clock */ }; /* * Values for setting a clock source with INSN_CONFIG_SET_CLOCK_SRC for * timer subdevice on some Amplicon DIO PCIe boards (amplc_dio200 driver). */ enum amplc_dio_ts_clock_src { AMPLC_DIO_TS_CLK_1GHZ, /* 1 ns period with 20 ns granularity */ AMPLC_DIO_TS_CLK_1MHZ, /* 1 us period */ AMPLC_DIO_TS_CLK_1KHZ /* 1 ms period */ }; /* * Values for setting a gate source with INSN_CONFIG_SET_GATE_SRC for * 8254 counter subdevices on Amplicon DIO boards (amplc_dio200 driver). */ enum amplc_dio_gate_source { AMPLC_DIO_GAT_VCC, /* internal high logic level */ AMPLC_DIO_GAT_GND, /* internal low logic level */ AMPLC_DIO_GAT_GATN, /* per channel external gate input */ /* * negated output of counter channel minus 2 * (for channels 0 or 1, channel minus 2 is channel 1 or 2 on * the preceding counter subdevice, for the first counter subdevice * the preceding counter subdevice is the last counter subdevice) */ AMPLC_DIO_GAT_NOUTNM2, AMPLC_DIO_GAT_RESERVED4, AMPLC_DIO_GAT_RESERVED5, AMPLC_DIO_GAT_RESERVED6, AMPLC_DIO_GAT_RESERVED7, /* the following are "enhanced" gate sources for PCIe models */ AMPLC_DIO_GAT_NGATN = 6, /* negated per channel gate input */ /* non-negated output of counter channel minus 2 */ AMPLC_DIO_GAT_OUTNM2, AMPLC_DIO_GAT_PAT_PRESENT, /* "pattern present" signal */ AMPLC_DIO_GAT_PAT_OCCURRED, /* "pattern occurred" latched */ AMPLC_DIO_GAT_PAT_GONE, /* "pattern gone away" latched */ AMPLC_DIO_GAT_NPAT_PRESENT, /* negated "pattern present" */ AMPLC_DIO_GAT_NPAT_OCCURRED, /* negated "pattern occurred" */ AMPLC_DIO_GAT_NPAT_GONE /* negated "pattern gone away" */ }; /* * Values for setting a clock source with INSN_CONFIG_SET_CLOCK_SRC for * the counter subdevice on the Kolter Electronic PCI-Counter board * (ke_counter driver). */ enum ke_counter_clock_source { KE_CLK_20MHZ, /* internal 20MHz (default) */ KE_CLK_4MHZ, /* internal 4MHz (option) */ KE_CLK_EXT /* external clock on pin 21 of D-Sub */ }; /* *** BEGIN DEPRECATED SECTION *** */ /* * These items and their definitions have been removed from the kernel version * of comedi.h. These are gathered here to make comparison/matching with the * kernel version easier, but kept to maintain compatibility. */ /* deprecated subdevice flags */ #define SDF_MODE0 0x0080 /* can do mode 0 */ #define SDF_MODE1 0x0100 /* can do mode 1 */ #define SDF_MODE2 0x0200 /* can do mode 2 */ #define SDF_MODE3 0x0400 /* can do mode 3 */ #define SDF_MODE4 0x0800 /* can do mode 4 */ #define SDF_RT 0x00080000 /* DEPRECATED: subdevice is RT capable */ /* trigger flags */ /* These flags are used in comedi_trig structures */ #define COMEDI_TRIG _IOWR(CIO, 4, comedi_trig) #define TRIG_DITHER 0x0002 /* enable dithering */ #define TRIG_DEGLITCH 0x0004 /* enable deglitching */ #define TRIG_CONFIG 0x0010 /* perform configuration, not triggering */ struct comedi_trig_struct { unsigned int subdev; /* subdevice */ unsigned int mode; /* mode */ unsigned int flags; unsigned int n_chan; /* number of channels */ unsigned int *chanlist; /* channel/range list */ sampl_t *data; /* data list, size depends on subd flags */ unsigned int n; /* number of scans */ unsigned int trigsrc; unsigned int trigvar; unsigned int trigvar1; unsigned int data_len; unsigned int unused[3]; }; typedef struct comedi_trig_struct comedi_trig; /* *** END DEPRECATED SECTION *** */ #ifdef __cplusplus #if 0 { /* avoid confusing editor auto-indent */ #endif } #endif #endif /* _COMEDI_H */ comedilib-0.11.0/include/Makefile.in0000644000000000000000000004330613140064520014100 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/am-check-python-headers.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/as-libtool.m4 $(top_srcdir)/m4/ax_tls.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(include_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = comedilib_version.h CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(includedir)" HEADERS = $(include_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(srcdir)/comedilib_version.h.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COMEDILIB_AGE = @COMEDILIB_AGE@ COMEDILIB_CFLAGS = @COMEDILIB_CFLAGS@ COMEDILIB_CURRENT = @COMEDILIB_CURRENT@ COMEDILIB_LIBS = @COMEDILIB_LIBS@ COMEDILIB_LIBVERSION = @COMEDILIB_LIBVERSION@ COMEDILIB_LT_LDFLAGS = @COMEDILIB_LT_LDFLAGS@ COMEDILIB_REVISION = @COMEDILIB_REVISION@ COMEDILIB_VERSION_MAJOR = @COMEDILIB_VERSION_MAJOR@ COMEDILIB_VERSION_MICRO = @COMEDILIB_VERSION_MICRO@ COMEDILIB_VERSION_MINOR = @COMEDILIB_VERSION_MINOR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_BACKEND = @PDF_BACKEND@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_QUIET = @PYTHON_QUIET@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_CONFIG_OPTIONS = @RUBY_CONFIG_OPTIONS@ RUBY_PREFIX = @RUBY_PREFIX@ RUBY_SO_DIR = @RUBY_SO_DIR@ SCXI_SO_VERSION = @SCXI_SO_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ VERSION = @VERSION@ XMLTO = @XMLTO@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pcmciadir = @pcmciadir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ udevfirmwaredir = @udevfirmwaredir@ udevrulesdir = @udevrulesdir@ udevscriptsdir = @udevscriptsdir@ include_HEADERS = comedi.h comedilib.h comedi_errno.h comedilib_scxi.h comedilib_version.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): comedilib_version.h: $(top_builddir)/config.status $(srcdir)/comedilib_version.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ done uninstall-includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-includeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-includeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool cscopelist-am ctags ctags-am distclean \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-includeHEADERS install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-includeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: comedilib-0.11.0/include/comedi_errno.h0000644000000000000000000000321312416542105014647 00000000000000/* comedi_errno.h header file for comedi's symbolic error names COMEDI - Linux Control and Measurement Device Interface Copyright (C) 1997-2000 David A. Schleef 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 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 Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Cambridge, MA 02111, USA. */ #ifndef _COMEDI_ERRNO_H #define _COMEDI_ERRNO_H #ifdef __KERNEL__ #include #else #include #endif // define symbolic error names, extensions peculiar to comedi #define COMEDI_NOERROR 0x1000 #define EUNKNOWN (COMEDI_NOERROR + 1) // unknown error #define EBAD_CT (COMEDI_NOERROR + 2) // bad comedi_t struct #define EINVAL_SUBD (COMEDI_NOERROR + 3) // invalid subdevice #define EINVAL_CHAN (COMEDI_NOERROR + 4) // invalid channel #define EBUF_OVR (COMEDI_NOERROR + 5) // buffer overflow #define EBUF_UNDR (COMEDI_NOERROR + 6) // buffer underflow #define ECMDNOTSUPP (COMEDI_NOERROR + 7) // command not supported #define ENOTSUPPORTED (COMEDI_NOERROR + 8) // not supported #endif // _COMEDI_ERRNO_H comedilib-0.11.0/aclocal.m40000644000000000000000000015452313140064511012254 00000000000000# generated automatically by aclocal 1.15.1 -*- Autoconf -*- # Copyright (C) 1996-2017 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # Copyright (C) 2002-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.15' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.15.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.15.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # Copyright (C) 2011-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_AR([ACT-IF-FAIL]) # ------------------------- # Try to determine the archiver interface, and trigger the ar-lib wrapper # if it is needed. If the detection of archiver interface fails, run # ACT-IF-FAIL (default is to abort configure with a proper error message). AC_DEFUN([AM_PROG_AR], [AC_BEFORE([$0], [LT_INIT])dnl AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([ar-lib])dnl AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false]) : ${AR=ar} AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface], [AC_LANG_PUSH([C]) am_cv_ar_interface=ar AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])], [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([am_ar_try]) if test "$ac_status" -eq 0; then am_cv_ar_interface=ar else am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([am_ar_try]) if test "$ac_status" -eq 0; then am_cv_ar_interface=lib else am_cv_ar_interface=unknown fi fi rm -f conftest.lib libconftest.a ]) AC_LANG_POP([C])]) case $am_cv_ar_interface in ar) ;; lib) # Microsoft lib, so override with the ar-lib wrapper script. # FIXME: It is wrong to rewrite AR. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__AR in this case, # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something # similar. AR="$am_aux_dir/ar-lib $AR" ;; unknown) m4_default([$1], [AC_MSG_ERROR([could not determine $AR interface])]) ;; esac AC_SUBST([AR])dnl ]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Copyright (C) 1998-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_LEX # ----------- # Autoconf leaves LEX=: if lex or flex can't be found. Change that to a # "missing" invocation, for better error output. AC_DEFUN([AM_PROG_LEX], [AC_PREREQ([2.50])dnl AC_REQUIRE([AM_MISSING_HAS_RUN])dnl AC_REQUIRE([AC_PROG_LEX])dnl if test "$LEX" = :; then LEX=${am_missing_run}flex fi]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless 'enable' is passed literally. # For symmetry, 'disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], am_maintainer_other[ make rules and dependencies not useful (and sometimes confusing) to the casual installer])], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 1999-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # --------------------------------------------------------------------------- # Adds support for distributing Python modules and packages. To # install modules, copy them to $(pythondir), using the python_PYTHON # automake variable. To install a package with the same name as the # automake package, install to $(pkgpythondir), or use the # pkgpython_PYTHON automake variable. # # The variables $(pyexecdir) and $(pkgpyexecdir) are provided as # locations to install python extension modules (shared libraries). # Another macro is required to find the appropriate flags to compile # extension modules. # # If your package is configured with a different prefix to python, # users will have to add the install directory to the PYTHONPATH # environment variable, or create a .pth file (see the python # documentation for details). # # If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON will # cause an error if the version of python installed on the system # doesn't meet the requirement. MINIMUM-VERSION should consist of # numbers and dots only. AC_DEFUN([AM_PATH_PYTHON], [ dnl Find a Python interpreter. Python versions prior to 2.0 are not dnl supported. (2.0 was released on October 16, 2000). dnl FIXME: Remove the need to hard-code Python versions here. m4_define_default([_AM_PYTHON_INTERPRETER_LIST], [python python2 python3 python3.5 python3.4 python3.3 python3.2 python3.1 python3.0 python2.7 dnl python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0]) AC_ARG_VAR([PYTHON], [the Python interpreter]) m4_if([$1],[],[ dnl No version check is needed. # Find any Python interpreter. if test -z "$PYTHON"; then AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :) fi am_display_PYTHON=python ], [ dnl A version check is needed. if test -n "$PYTHON"; then # If the user set $PYTHON, use it and don't search something else. AC_MSG_CHECKING([whether $PYTHON version is >= $1]) AM_PYTHON_CHECK_VERSION([$PYTHON], [$1], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no]) AC_MSG_ERROR([Python interpreter is too old])]) am_display_PYTHON=$PYTHON else # Otherwise, try each interpreter until we find one that satisfies # VERSION. AC_CACHE_CHECK([for a Python interpreter with version >= $1], [am_cv_pathless_PYTHON],[ for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do test "$am_cv_pathless_PYTHON" = none && break AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break]) done]) # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. if test "$am_cv_pathless_PYTHON" = none; then PYTHON=: else AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON]) fi am_display_PYTHON=$am_cv_pathless_PYTHON fi ]) if test "$PYTHON" = :; then dnl Run any user-specified action, or abort. m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])]) else dnl Query Python for its version number. Getting [:3] seems to be dnl the best way to do this; it's what "site.py" does in the standard dnl library. AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version], [am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[[:3]])"`]) AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) dnl Use the values of $prefix and $exec_prefix for the corresponding dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made dnl distinct variables so they can be overridden if need be. However, dnl general consensus is that you shouldn't need this ability. AC_SUBST([PYTHON_PREFIX], ['${prefix}']) AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}']) dnl At times (like when building shared libraries) you may want dnl to know which OS platform Python thinks this is. AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform], [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`]) AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) # Just factor out some code duplication. am_python_setup_sysconfig="\ import sys # Prefer sysconfig over distutils.sysconfig, for better compatibility # with python 3.x. See automake bug#10227. try: import sysconfig except ImportError: can_use_sysconfig = 0 else: can_use_sysconfig = 1 # Can't use sysconfig in CPython 2.7, since it's broken in virtualenvs: # try: from platform import python_implementation if python_implementation() == 'CPython' and sys.version[[:3]] == '2.7': can_use_sysconfig = 0 except ImportError: pass" dnl Set up 4 directories: dnl pythondir -- where to install python scripts. This is the dnl site-packages directory, not the python standard library dnl directory like in previous automake betas. This behavior dnl is more consistent with lispdir.m4 for example. dnl Query distutils for this directory. AC_CACHE_CHECK([for $am_display_PYTHON script directory], [am_cv_python_pythondir], [if test "x$prefix" = xNONE then am_py_prefix=$ac_default_prefix else am_py_prefix=$prefix fi am_cv_python_pythondir=`$PYTHON -c " $am_python_setup_sysconfig if can_use_sysconfig: sitedir = sysconfig.get_path('purelib', vars={'base':'$am_py_prefix'}) else: from distutils import sysconfig sitedir = sysconfig.get_python_lib(0, 0, prefix='$am_py_prefix') sys.stdout.write(sitedir)"` case $am_cv_python_pythondir in $am_py_prefix*) am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` ;; *) case $am_py_prefix in /usr|/System*) ;; *) am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages ;; esac ;; esac ]) AC_SUBST([pythondir], [$am_cv_python_pythondir]) dnl pkgpythondir -- $PACKAGE directory under pythondir. Was dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is dnl more consistent with the rest of automake. AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) dnl pyexecdir -- directory for installing python extension modules dnl (shared libraries) dnl Query distutils for this directory. AC_CACHE_CHECK([for $am_display_PYTHON extension module directory], [am_cv_python_pyexecdir], [if test "x$exec_prefix" = xNONE then am_py_exec_prefix=$am_py_prefix else am_py_exec_prefix=$exec_prefix fi am_cv_python_pyexecdir=`$PYTHON -c " $am_python_setup_sysconfig if can_use_sysconfig: sitedir = sysconfig.get_path('platlib', vars={'platbase':'$am_py_prefix'}) else: from distutils import sysconfig sitedir = sysconfig.get_python_lib(1, 0, prefix='$am_py_prefix') sys.stdout.write(sitedir)"` case $am_cv_python_pyexecdir in $am_py_exec_prefix*) am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` ;; *) case $am_py_exec_prefix in /usr|/System*) ;; *) am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages ;; esac ;; esac ]) AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE) AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE]) dnl Run any user-specified action. $2 fi ]) # AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) # --------------------------------------------------------------------------- # Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION. # Run ACTION-IF-FALSE otherwise. # This test uses sys.hexversion instead of the string equivalent (first # word of sys.version), in order to cope with versions such as 2.2c1. # This supports Python 2.0 or higher. (2.0 was released on October 16, 2000). AC_DEFUN([AM_PYTHON_CHECK_VERSION], [prog="import sys # split strings by '.' and convert to numeric. Append some zeros # because we need at least 4 digits for the hex conversion. # map returns an iterator in Python 3.0 and a list in 2.x minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]] minverhex = 0 # xrange is not present in Python 3.0 and range returns an iterator for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]] sys.exit(sys.hexversion < minverhex)" AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])]) # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/am-check-python-headers.m4]) m4_include([m4/as-compiler-flag.m4]) m4_include([m4/as-libtool.m4]) m4_include([m4/ax_tls.m4]) m4_include([m4/libtool.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) m4_include([m4/lt~obsolete.m4]) comedilib-0.11.0/swig/0000755000000000000000000000000013162722664011451 500000000000000comedilib-0.11.0/swig/Makefile.am0000644000000000000000000000034312416542105013414 00000000000000 if HAVE_PYTHON python_subdirs = python else python_subdirs = endif if HAVE_RUBY ruby_subdirs = ruby else ruby_subdirs = endif DIST_SUBDIRS = python ruby SUBDIRS = $(python_subdirs) $(ruby_subdirs) EXTRA_DIST = comedi.i comedilib-0.11.0/swig/Makefile.in0000644000000000000000000004713013140064521013426 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = swig ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/am-check-python-headers.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/as-libtool.m4 $(top_srcdir)/m4/ax_tls.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COMEDILIB_AGE = @COMEDILIB_AGE@ COMEDILIB_CFLAGS = @COMEDILIB_CFLAGS@ COMEDILIB_CURRENT = @COMEDILIB_CURRENT@ COMEDILIB_LIBS = @COMEDILIB_LIBS@ COMEDILIB_LIBVERSION = @COMEDILIB_LIBVERSION@ COMEDILIB_LT_LDFLAGS = @COMEDILIB_LT_LDFLAGS@ COMEDILIB_REVISION = @COMEDILIB_REVISION@ COMEDILIB_VERSION_MAJOR = @COMEDILIB_VERSION_MAJOR@ COMEDILIB_VERSION_MICRO = @COMEDILIB_VERSION_MICRO@ COMEDILIB_VERSION_MINOR = @COMEDILIB_VERSION_MINOR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_BACKEND = @PDF_BACKEND@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_QUIET = @PYTHON_QUIET@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_CONFIG_OPTIONS = @RUBY_CONFIG_OPTIONS@ RUBY_PREFIX = @RUBY_PREFIX@ RUBY_SO_DIR = @RUBY_SO_DIR@ SCXI_SO_VERSION = @SCXI_SO_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ VERSION = @VERSION@ XMLTO = @XMLTO@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pcmciadir = @pcmciadir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ udevfirmwaredir = @udevfirmwaredir@ udevrulesdir = @udevrulesdir@ udevscriptsdir = @udevscriptsdir@ @HAVE_PYTHON_FALSE@python_subdirs = @HAVE_PYTHON_TRUE@python_subdirs = python @HAVE_RUBY_FALSE@ruby_subdirs = @HAVE_RUBY_TRUE@ruby_subdirs = ruby DIST_SUBDIRS = python ruby SUBDIRS = $(python_subdirs) $(ruby_subdirs) EXTRA_DIST = comedi.i all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu swig/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu swig/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: comedilib-0.11.0/swig/python/0000755000000000000000000000000013162722664012772 500000000000000comedilib-0.11.0/swig/python/Makefile.am0000644000000000000000000000112413072702434014735 00000000000000 if HAVE_PYTHON pyexec_LTLIBRARIES = _comedi.la clean-local: $(RM) comedi_python_wrap.c comedi.py else pyexec_LTLIBRARIES = clean-local: endif nodist__comedi_la_SOURCES = comedi_python_wrap.c _comedi_la_CFLAGS = $(COMEDILIB_CFLAGS) $(PYTHON_INCLUDES) $(PYTHON_QUIET) _comedi_la_LDFLAGS = -module -avoid-version $(COMEDILIB_LIBS) pyexec_SCRIPTS = comedi.py EXTRA_DIST = README.txt comedi_python.i setup.py comedi_python_wrap.c comedi.py: $(srcdir)/comedi_python.i $(srcdir)/../comedi.i $(SWIG) -python -o comedi_python_wrap.c -I$(top_srcdir)/include -I$(srcdir)/.. $(srcdir)/comedi_python.i comedilib-0.11.0/swig/python/comedi_python.i0000644000000000000000000000002412416542105015710 00000000000000%include "comedi.i" comedilib-0.11.0/swig/python/Makefile.in0000644000000000000000000006115413140064521014751 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = swig/python ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/am-check-python-headers.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/as-libtool.m4 $(top_srcdir)/m4/ax_tls.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pyexecdir)" "$(DESTDIR)$(pyexecdir)" LTLIBRARIES = $(pyexec_LTLIBRARIES) _comedi_la_LIBADD = nodist__comedi_la_OBJECTS = _comedi_la-comedi_python_wrap.lo _comedi_la_OBJECTS = $(nodist__comedi_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = _comedi_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(_comedi_la_CFLAGS) \ $(CFLAGS) $(_comedi_la_LDFLAGS) $(LDFLAGS) -o $@ @HAVE_PYTHON_TRUE@am__comedi_la_rpath = -rpath $(pyexecdir) SCRIPTS = $(pyexec_SCRIPTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(nodist__comedi_la_SOURCES) DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COMEDILIB_AGE = @COMEDILIB_AGE@ COMEDILIB_CFLAGS = @COMEDILIB_CFLAGS@ COMEDILIB_CURRENT = @COMEDILIB_CURRENT@ COMEDILIB_LIBS = @COMEDILIB_LIBS@ COMEDILIB_LIBVERSION = @COMEDILIB_LIBVERSION@ COMEDILIB_LT_LDFLAGS = @COMEDILIB_LT_LDFLAGS@ COMEDILIB_REVISION = @COMEDILIB_REVISION@ COMEDILIB_VERSION_MAJOR = @COMEDILIB_VERSION_MAJOR@ COMEDILIB_VERSION_MICRO = @COMEDILIB_VERSION_MICRO@ COMEDILIB_VERSION_MINOR = @COMEDILIB_VERSION_MINOR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_BACKEND = @PDF_BACKEND@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_QUIET = @PYTHON_QUIET@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_CONFIG_OPTIONS = @RUBY_CONFIG_OPTIONS@ RUBY_PREFIX = @RUBY_PREFIX@ RUBY_SO_DIR = @RUBY_SO_DIR@ SCXI_SO_VERSION = @SCXI_SO_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ VERSION = @VERSION@ XMLTO = @XMLTO@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pcmciadir = @pcmciadir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ udevfirmwaredir = @udevfirmwaredir@ udevrulesdir = @udevrulesdir@ udevscriptsdir = @udevscriptsdir@ @HAVE_PYTHON_FALSE@pyexec_LTLIBRARIES = @HAVE_PYTHON_TRUE@pyexec_LTLIBRARIES = _comedi.la nodist__comedi_la_SOURCES = comedi_python_wrap.c _comedi_la_CFLAGS = $(COMEDILIB_CFLAGS) $(PYTHON_INCLUDES) $(PYTHON_QUIET) _comedi_la_LDFLAGS = -module -avoid-version $(COMEDILIB_LIBS) pyexec_SCRIPTS = comedi.py EXTRA_DIST = README.txt comedi_python.i setup.py all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu swig/python/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu swig/python/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-pyexecLTLIBRARIES: $(pyexec_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(pyexec_LTLIBRARIES)'; test -n "$(pyexecdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(pyexecdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pyexecdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pyexecdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pyexecdir)"; \ } uninstall-pyexecLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(pyexec_LTLIBRARIES)'; test -n "$(pyexecdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pyexecdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pyexecdir)/$$f"; \ done clean-pyexecLTLIBRARIES: -test -z "$(pyexec_LTLIBRARIES)" || rm -f $(pyexec_LTLIBRARIES) @list='$(pyexec_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } _comedi.la: $(_comedi_la_OBJECTS) $(_comedi_la_DEPENDENCIES) $(EXTRA__comedi_la_DEPENDENCIES) $(AM_V_CCLD)$(_comedi_la_LINK) $(am__comedi_la_rpath) $(_comedi_la_OBJECTS) $(_comedi_la_LIBADD) $(LIBS) install-pyexecSCRIPTS: $(pyexec_SCRIPTS) @$(NORMAL_INSTALL) @list='$(pyexec_SCRIPTS)'; test -n "$(pyexecdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pyexecdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pyexecdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(pyexecdir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(pyexecdir)$$dir" || exit $$?; \ } \ ; done uninstall-pyexecSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(pyexec_SCRIPTS)'; test -n "$(pyexecdir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(pyexecdir)'; $(am__uninstall_files_from_dir) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_comedi_la-comedi_python_wrap.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< _comedi_la-comedi_python_wrap.lo: comedi_python_wrap.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_comedi_la_CFLAGS) $(CFLAGS) -MT _comedi_la-comedi_python_wrap.lo -MD -MP -MF $(DEPDIR)/_comedi_la-comedi_python_wrap.Tpo -c -o _comedi_la-comedi_python_wrap.lo `test -f 'comedi_python_wrap.c' || echo '$(srcdir)/'`comedi_python_wrap.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/_comedi_la-comedi_python_wrap.Tpo $(DEPDIR)/_comedi_la-comedi_python_wrap.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='comedi_python_wrap.c' object='_comedi_la-comedi_python_wrap.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_comedi_la_CFLAGS) $(CFLAGS) -c -o _comedi_la-comedi_python_wrap.lo `test -f 'comedi_python_wrap.c' || echo '$(srcdir)/'`comedi_python_wrap.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(SCRIPTS) installdirs: for dir in "$(DESTDIR)$(pyexecdir)" "$(DESTDIR)$(pyexecdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-local \ clean-pyexecLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-pyexecLTLIBRARIES install-pyexecSCRIPTS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pyexecLTLIBRARIES uninstall-pyexecSCRIPTS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-local clean-pyexecLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am \ install-pyexecLTLIBRARIES install-pyexecSCRIPTS install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am \ uninstall-pyexecLTLIBRARIES uninstall-pyexecSCRIPTS .PRECIOUS: Makefile @HAVE_PYTHON_TRUE@clean-local: @HAVE_PYTHON_TRUE@ $(RM) comedi_python_wrap.c comedi.py @HAVE_PYTHON_FALSE@clean-local: comedi_python_wrap.c comedi.py: $(srcdir)/comedi_python.i $(srcdir)/../comedi.i $(SWIG) -python -o comedi_python_wrap.c -I$(top_srcdir)/include -I$(srcdir)/.. $(srcdir)/comedi_python.i # 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: comedilib-0.11.0/swig/python/setup.py0000644000000000000000000000121612416542105014413 00000000000000from distutils.core import setup, Extension module1 = Extension('_comedi', define_macros = [('MAJOR_VERSION','0'), ('MINOR_VERSION','1')], include_dirs = ['../../include'], library_dirs = ['../../lib/.libs'], swig_opts = ['-I../../include', '-I..'], libraries = ['comedi'], sources = ['comedi_python.i']) setup (name='comedi', version = '0.1', description = 'Python wrapper module for the Comedi data-acquisition drivers', author = 'Bryan E. Cole', author_email = 'bryan.cole@teraview.co.uk', long_description = ''' Wrapper for the Comedi data-acquisition library ''', ext_modules = [module1], py_modules = ['comedi']) comedilib-0.11.0/swig/python/README.txt0000644000000000000000000000454012416542105014402 00000000000000** General info on the swig-generated wrappers for Comedilib ** 0) Installing required tools The wrapper are made with SWIG. Any of the swig-1.3.x series should work. Run $ swig -version to check the version you have installed, and upgrade if necessary. 1) Building the wrappers Note: the following applies when building wrappers separately from the comedilib library, using Python's distutils procedures instead of Comedilib's `make`. In this case, Comedilib should be configured with the `--disable-python-binding` option to prevent it building and installing its own copy of the wrappers. After building the main comedilib library (running `make` in the base directory), just follow standard distutils procedures $ python setup.py build $ python setup.py install If you want to test the wrappers before installing them, you will need to set the `PYTHONPATH` environment variable so Python can find the compiled modules. On my system, that looks like $ PYTHONPATH=build/lib.linux-i686-2.7/ ../../demo/python/info.py 2) Using the module All the comedilib functions are translated directly to python function. The various comedi structs are now available as python classes (e.g. comedi_cmd_struct). The members of each struct are now attributes of the class and can be set and retrieved in the usual way. Comedilib functions which take a pointer to a comedilib struct as an argument (in C) now, in python, accept the appropriate struct python object. For a multichannel acquisition, a C-array containing the channel list, gains and referencing is required. This can be created using a swig-generated helper class: chanlist(n). This creates a C-array of length n and type Unsigned Int. Individual members of the array can be accessed/set using pythons indexing syntax: mylist = chanlist(3) #creates a chanlist array of length 3 mylist[0] = 100 #set some values mylist[1] = 200 mylist[2] = 300 The chanlist object can then be passed to a comedi_cmd_struct object, for example. N.B. The chanlist object contains *no* length-checking or other error protection so use with care! Don't try to get/set indexes outside the array bounds. All the comedilib macros (e.g. CR_PACK) are now available as python functions (e.g. `comedi.cr_pack`). Look at the examples in demo/python to clarify the above. comedilib-0.11.0/swig/comedi.i0000644000000000000000000001166413072702330012777 00000000000000/*********************************************************** Interface file for wrapping Comedilib Copyright (C) 2003 Bryan Cole Copyright (C) 1998-2002 David A. Schleef Copyright (C) 2003,2004 Frank Mori Hess Copyright (C) 2003 Steven Jenkins Copyright (C) 2010-2012 W. Trevor King 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 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. *********************************************************** * * This file was created with Python wrappers in mind but wil * probably work for other swig-supported script languages * * to regenerate the wrappers run: * swig -python comedi.i * ***********************************************************/ %module comedi #define SWIG_USE_OLD_TYPEMAPS %{ #include "comedilib.h" #include "comedi.h" %} %include "carrays.i" %include "typemaps.i" // Uncomment to finalize the removal of the comedi_/COMEDI_ prefix and break backwards // compatibility. //#define SWIGPYTHONONLYSHORT #ifdef SWIGPYTHON // These need to be explicitly written as unsigned ints %rename(CR_FLAGS_MASK) _CR_FLAGS_MASK; %rename(CR_INVERT) _CR_INVERT; %rename(TRIG_ANY) _TRIG_ANY; %rename(NI_GPCT_INVERT_CLOCK_SRC_BIT) _NI_GPCT_INVERT_CLOCK_SRC_BIT; %constant unsigned int _CR_FLAGS_MASK = CR_FLAGS_MASK; %constant unsigned int _CR_INVERT = CR_INVERT; %constant unsigned int _TRIG_ANY = TRIG_ANY; %constant unsigned int _NI_GPCT_INVERT_CLOCK_SRC_BIT = NI_GPCT_INVERT_CLOCK_SRC_BIT; #endif %inline %{ static unsigned int cr_pack(unsigned int chan, unsigned int rng, unsigned int aref){ return CR_PACK(chan,rng,aref); } static unsigned int cr_pack_flags(unsigned int chan, unsigned int rng, unsigned int aref, unsigned int flags){ return CR_PACK_FLAGS(chan,rng,aref, flags); } static unsigned int cr_chan(unsigned int a){ return CR_CHAN(a); } static unsigned int cr_range(unsigned int a){ return CR_RANGE(a); } static unsigned int cr_aref(unsigned int a){ return CR_AREF(a); } %} // Give swig prototype for each of these macros so they can be properly wrapped. unsigned int CR_PACK(unsigned int chan, unsigned int rng, unsigned int aref); unsigned int CR_PACK_FLAGS(unsigned int chan, unsigned int rng, unsigned int aref, unsigned int flags); unsigned int CR_CHAN(unsigned int chan); unsigned int CR_RANGE(unsigned int chan); unsigned int CR_AREF(unsigned int chan); unsigned int NI_USUAL_PFI_SELECT(unsigned int pfi_channel); unsigned int NI_USUAL_RTSI_SELECT(unsigned int rtsi_channel); unsigned int NI_GPCT_SOURCE_PIN_CLOCK_SRC_BITS(unsigned int n); unsigned int NI_GPCT_RTSI_CLOCK_SRC_BITS(unsigned int n); unsigned int NI_GPCT_PFI_CLOCK_SRC_BITS(unsigned int n); unsigned int NI_GPCT_GATE_PIN_GATE_SELECT(unsigned int n); unsigned int NI_GPCT_RTSI_GATE_SELECT(unsigned int n); unsigned int NI_GPCT_PFI_GATE_SELECT(unsigned int n); unsigned int NI_GPCT_UP_DOWN_PIN_GATE_SELECT(unsigned int n); unsigned int NI_GPCT_PFI_OTHER_SELECT(unsigned int n); unsigned int NI_MIO_PLL_RTSI_CLOCK(unsigned int rtsi_channel); unsigned int NI_RTSI_OUTPUT_RTSI_BRD(unsigned int n); unsigned int NI_PFI_OUTPUT_RTSI(unsigned int rtsi_channel); unsigned int NI_EXT_PFI(unsigned int pfi_channel); unsigned int NI_EXT_RTSI(unsigned int rtsi_channel); unsigned int NI_CDIO_SCAN_BEGIN_SRC_PFI(unsigned int pfi_channel); unsigned int NI_CDIO_SCAN_BEGIN_SRC_RTSI(unsigned int rtsi_channel); unsigned int NI_AO_SCAN_BEGIN_SRC_PFI(unsigned int pfi_channel); unsigned int NI_AO_SCAN_BEGIN_SRC_RTSI(unsigned int rtsi_channel); #ifdef SWIGRUBY %typemap(argout) comedi_cmd *INOUT(VALUE info) { $result = output_helper($result, $arg); }; #endif %include "comedi.h" %include "comedilib.h" %array_class(unsigned int, chanlist); %array_class(sampl_t, sampl_array); %array_class(lsampl_t, lsampl_array); %array_class(comedi_insn, insn_array); #ifdef SWIGPYTHONONLYSHORT %insert("python") %{ delete_comedi_prefix = True %} #else %insert("python") %{ delete_comedi_prefix = False %} #endif %insert("python") %{ # Add entries in module dictionary without comedi_/COMEDI_ prefix import re for k,v in globals().copy().items(): if re.match('^comedi_', k, flags=re.IGNORECASE): globals()[k[7:]] = v if delete_comedi_prefix: globals().pop(k) # Break backwards compatibility del re, k, v, delete_comedi_prefix %} comedilib-0.11.0/swig/ruby/0000755000000000000000000000000013162722664012432 500000000000000comedilib-0.11.0/swig/ruby/Makefile.am0000644000000000000000000000157712416542105014407 00000000000000EXTRA_DIST = demo/cmd demo/common.rb demo/inp demo/outp lib/comedi.rb \ ext/extconf.rb ext/MANIFEST setup.rb $(srcdir)/ext/comedi_ruby_wrap.c: $(srcdir)/../comedi.i $(SWIG) -ruby -o $(srcdir)/ext/comedi_ruby_wrap.c -I$(top_srcdir)/include $(srcdir)/../comedi.i if HAVE_RUBY all-local: ext/comedi.so install-data-local: $(RUBY) $(srcdir)/setup.rb install else all-local: install-data-local: endif ext/Makefile config.save: $(srcdir)/ext/comedi_ruby_wrap.c $(RUBY) $(srcdir)/setup.rb config $(RUBY_CONFIG_OPTIONS) -- --with-comedilib-dir=$(abs_srcdir)/../.. ext/comedi.so ext/comedi_ruby_wrap.o: ext/Makefile config.save $(RUBY) $(srcdir)/setup.rb setup if HAVE_RUBY clean-local: $(RUBY) $(srcdir)/setup.rb clean $(RM) $(srcdir)/ext/comedi_ruby_wrap.c $(RM) ext/Makefile config.save distclean-local: $(RUBY) $(srcdir)/setup.rb distclean else clean-local: distclean-local: endif comedilib-0.11.0/swig/ruby/demo/0000755000000000000000000000000013162722664013356 500000000000000comedilib-0.11.0/swig/ruby/demo/cmd0000755000000000000000000000356512416542105013767 00000000000000#!/usr/bin/env ruby require 'comedi' require 'getoptlong' require 'common' include Comedi cmdtest_messages = [ "success", "invalid source", "source conflict", "invalid argument", "argument conflict", "invalid chanlist" ] class SWIG::TYPE_p_comedi_t_struct def prepare_cmd_lib(subdevice, freq, cmd) begin cmd = get_cmd_generic_timed(subdevice, cmd, $n_chan, (1000000000.0 / freq).truncate) rescue ComediError printf("comedi_get_cmd_generic_timed failed\n") return cmd end cmd.chanlist = $chanlist cmd.chanlist_len = $n_chan cmd.scan_end_arg = $n_chan cmd.stop_arg = $n_scan if cmd.stop_src == TRIG_COUNT return cmd end end parse_options begin dev = Comedi::open($filename) rescue comedi_perror($filename) exit 1 end $chanlist = Chanlist.new($n_chan) 0.upto($n_chan - 1) do |i| $chanlist[i] = cr_pack($channel + i, $range, $aref) end cmd = dev.prepare_cmd_lib($subdevice, $freq, Comedi_cmd_struct.new) $stderr.printf("command before testing:\n") dump_cmd($stderr, cmd) begin ret, cmd = dev.command_test(cmd) rescue comedi_perror("comedi_command_test") exit 1 end $stderr.printf("first test returned %d (%s)\n", ret, cmdtest_messages[ret]) dump_cmd($stderr, cmd) begin ret, cmd = dev.command_test(cmd) rescue comedi_perror("comedi_command_test") exit 1 end $stderr.printf("second test returned %d (%s)\n", ret, cmdtest_messages[ret]) dump_cmd($stderr, cmd) tstart = Time.new $stderr.printf("start time: %d.%06d\n", tstart.tv_sec, tstart.tv_usec) begin ret = dev.command(cmd) rescue comedi_perror("comedi_command") exit 1 end while line = dev.ios.read(2 * $n_chan) data = line.unpack('S*') data.each do |d| printf("%d ", d) end puts end tend = Time.new $stderr.printf("end time: %d.%06d\n", tend.tv_sec, tend.tv_usec) tdiff = tend - tstart $stderr.printf("time: %.6f\n", tdiff) comedilib-0.11.0/swig/ruby/demo/common.rb0000644000000000000000000000500212416542105015077 00000000000000def parse_options $filename = "/dev/comedi0" $value = 0 $subdevice = 0 $channel = 0 $range = 0 $aref = AREF_GROUND $n_chan = 4 $n_scan = 1000 $freq = 1000.0 $verbose = false opts = GetoptLong.new( [ "--filename", "-f", GetoptLong::REQUIRED_ARGUMENT ], [ "--subdevice", "-s", GetoptLong::REQUIRED_ARGUMENT ], [ "--channel", "-c", GetoptLong::REQUIRED_ARGUMENT ], [ "--aref", "-a", GetoptLong::REQUIRED_ARGUMENT ], [ "--range", "-r", GetoptLong::REQUIRED_ARGUMENT ], [ "--n_chan", "-n", GetoptLong::REQUIRED_ARGUMENT ], [ "--n_scan", "-N", GetoptLong::REQUIRED_ARGUMENT ], [ "--freq", "-F", GetoptLong::REQUIRED_ARGUMENT ], [ "--verbose", "-v", GetoptLong::NO_ARGUMENT ], [ "--diff", "-d", GetoptLong::NO_ARGUMENT ], [ "--ground", "-g", GetoptLong::NO_ARGUMENT ], [ "--other", "-o", GetoptLong::NO_ARGUMENT ], [ "--common", "-m", GetoptLong::NO_ARGUMENT ] ) opts.each do |opt, arg| case opt when "--filename" $filename = arg.to_s when "--subdevice" $subdevice = arg.to_i when "--channel" $channel = arg.to_i when "--range" $range = arg.to_i when "--n_chan" $n_chan = arg.to_i when "--n_scan" $n_scan = arg.to_i when "--freq" $freq = arg.to_i when "--verbose" $verbose = true when "--diff" $aref = AREF_DIFF when "--ground" $aref = AREF_GROUND when "--other" $aref = AREF_OTHER when "--common" $aref = AREF_COMMON when "--help" usage exit 0 end end if ARGV.length > 0 $value = ARGV.shift.to_i end end def cmd_src(src) buf = "" buf << "none|" if src & TRIG_NONE > 0 buf << "now|" if src & TRIG_NOW > 0 buf << "follow|" if src & TRIG_FOLLOW > 0 buf << "time|" if src & TRIG_TIME > 0 buf << "timer|" if src & TRIG_TIMER > 0 buf << "count|" if src & TRIG_COUNT > 0 buf << "ext|" if src & TRIG_EXT > 0 buf << "int|" if src & TRIG_INT > 0 buf << "other|" if src & TRIG_OTHER > 0 if buf == "" buf = "unknown(0x%08x)" % src else buf.sub!(/\|\z/, '') end return buf end def dump_cmd(out, cmd) out.printf("start: %-8s %d\n", cmd_src(cmd.start_src), cmd.start_arg) out.printf("scan_begin: %-8s %d\n", cmd_src(cmd.scan_begin_src), cmd.scan_begin_arg) out.printf("convert: %-8s %d\n", cmd_src(cmd.convert_src), cmd.convert_arg) out.printf("scan_end: %-8s %d\n", cmd_src(cmd.scan_end_src), cmd.scan_end_arg) out.printf("stop: %-8s %d\n", cmd_src(cmd.stop_src), cmd.stop_arg) end comedilib-0.11.0/swig/ruby/demo/inp0000755000000000000000000000077612416542105014013 00000000000000#!/usr/bin/env ruby require 'comedi' require 'getoptlong' require 'common' include Comedi parse_options begin dev = Comedi::open($filename) rescue comedi_perror($filename) exit 1 end if $verbose print "measuring device=#{$filename} subdevice=#{$subdevice}" print " channel=#{$channel} range=#{$range}" print " analog reference=#{$aref}\n" end begin data = dev.data_read($subdevice, $channel, $range, $aref) rescue comedi_perror($filename) exit 1 end puts data exit 0 comedilib-0.11.0/swig/ruby/demo/outp0000755000000000000000000000103012416542105014174 00000000000000#!/usr/bin/env ruby require 'comedi' require 'getoptlong' require 'common' include Comedi parse_options begin dev = Comedi::open($filename) rescue comedi_perror($filename) exit 1 end data = $value if $verbose print "writing #{$value} to device=#{$filename} subdevice=#{$subdevice}" print " channel=#{$channel} range=#{$range}" print " analog reference=#{$aref}\n" end begin dev.data_write($subdevice, $channel, $range, $aref, data) rescue comedi_perror($filename) exit 1 end puts data exit 0 comedilib-0.11.0/swig/ruby/ext/0000755000000000000000000000000013162722664013232 500000000000000comedilib-0.11.0/swig/ruby/ext/MANIFEST0000644000000000000000000000000012416542105014260 00000000000000comedilib-0.11.0/swig/ruby/ext/extconf.rb0000644000000000000000000000013012416542105015126 00000000000000require 'mkmf' dir_config('comedilib') have_library('comedi') create_makefile("comedi") comedilib-0.11.0/swig/ruby/setup.rb0000644000000000000000000010657012416542105014037 00000000000000# # setup.rb # # Copyright (c) 2000-2005 Minero Aoki # # This program is free software. # You can distribute/modify this program under the terms of # the GNU LGPL, Lesser General Public License version 2.1. # unless Enumerable.method_defined?(:map) # Ruby 1.4.6 module Enumerable alias map collect end end unless File.respond_to?(:read) # Ruby 1.6 def File.read(fname) open(fname) {|f| return f.read } end end unless Errno.const_defined?(:ENOTEMPTY) # Windows? module Errno class ENOTEMPTY # We do not raise this exception, implementation is not needed. end end end def File.binread(fname) open(fname, 'rb') {|f| return f.read } end # for corrupted Windows' stat(2) def File.dir?(path) File.directory?((path[-1,1] == '/') ? path : path + '/') end if ENV['DESTDIR'] then DESTDIR = ENV['DESTDIR'] end class ConfigTable include Enumerable def initialize(rbconfig) @rbconfig = rbconfig @items = [] @table = {} # options @install_prefix = nil @config_opt = nil @verbose = true @no_harm = false end attr_accessor :install_prefix attr_accessor :config_opt attr_writer :verbose def verbose? @verbose end attr_writer :no_harm def no_harm? @no_harm end def [](key) lookup(key).resolve(self) end def []=(key, val) lookup(key).set val end def names @items.map {|i| i.name } end def each(&block) @items.each(&block) end def key?(name) @table.key?(name) end def lookup(name) @table[name] or setup_rb_error "no such config item: #{name}" end def add(item) @items.push item @table[item.name] = item end def remove(name) item = lookup(name) @items.delete_if {|i| i.name == name } @table.delete_if {|name, i| i.name == name } item end def load_script(path, inst = nil) if File.file?(path) MetaConfigEnvironment.new(self, inst).instance_eval File.read(path), path end end def savefile '.config' end def load_savefile begin File.foreach(savefile()) do |line| k, v = *line.split(/=/, 2) self[k] = v.strip end rescue Errno::ENOENT setup_rb_error $!.message + "\n#{File.basename($0)} config first" end end def save @items.each {|i| i.value } File.open(savefile(), 'w') {|f| @items.each do |i| f.printf "%s=%s\n", i.name, i.value if i.value? and i.value end } end def load_standard_entries standard_entries(@rbconfig).each do |ent| add ent end end def standard_entries(rbconfig) c = rbconfig rubypath = File.join(c['bindir'], c['ruby_install_name'] + c['EXEEXT']) major = c['MAJOR'].to_i minor = c['MINOR'].to_i teeny = c['TEENY'].to_i version = "#{major}.#{minor}" # ruby ver. >= 1.4.4? newpath_p = ((major >= 2) or ((major == 1) and ((minor >= 5) or ((minor == 4) and (teeny >= 4))))) if c['rubylibdir'] # V > 1.6.3 libruby = "#{c['prefix']}/lib/ruby" librubyver = c['rubylibdir'] librubyverarch = c['archdir'] siteruby = c['sitedir'] siterubyver = c['sitelibdir'] siterubyverarch = c['sitearchdir'] elsif newpath_p # 1.4.4 <= V <= 1.6.3 libruby = "#{c['prefix']}/lib/ruby" librubyver = "#{c['prefix']}/lib/ruby/#{version}" librubyverarch = "#{c['prefix']}/lib/ruby/#{version}/#{c['arch']}" siteruby = c['sitedir'] siterubyver = "$siteruby/#{version}" siterubyverarch = "$siterubyver/#{c['arch']}" else # V < 1.4.4 libruby = "#{c['prefix']}/lib/ruby" librubyver = "#{c['prefix']}/lib/ruby/#{version}" librubyverarch = "#{c['prefix']}/lib/ruby/#{version}/#{c['arch']}" siteruby = "#{c['prefix']}/lib/ruby/#{version}/site_ruby" siterubyver = siteruby siterubyverarch = "$siterubyver/#{c['arch']}" end parameterize = lambda {|path| path.sub(/\A#{Regexp.quote(c['prefix'])}/, '$prefix') } if arg = c['configure_args'].split.detect {|arg| /--with-make-prog=/ =~ arg } makeprog = arg.sub(/'/, '').split(/=/, 2)[1] else makeprog = 'make' end [ ExecItem.new('installdirs', 'std/site/home', 'std: install under libruby; site: install under site_ruby; home: install under $HOME')\ {|val, table| case val when 'std' table['rbdir'] = '$librubyver' table['sodir'] = '$librubyverarch' when 'site' table['rbdir'] = '$siterubyver' table['sodir'] = '$siterubyverarch' when 'home' setup_rb_error '$HOME was not set' unless ENV['HOME'] table['prefix'] = ENV['HOME'] table['rbdir'] = '$libdir/ruby' table['sodir'] = '$libdir/ruby' end }, PathItem.new('prefix', 'path', c['prefix'], 'path prefix of target environment'), PathItem.new('bindir', 'path', parameterize.call(c['bindir']), 'the directory for commands'), PathItem.new('libdir', 'path', parameterize.call(c['libdir']), 'the directory for libraries'), PathItem.new('datadir', 'path', parameterize.call(c['datadir']), 'the directory for shared data'), PathItem.new('mandir', 'path', parameterize.call(c['mandir']), 'the directory for man pages'), PathItem.new('sysconfdir', 'path', parameterize.call(c['sysconfdir']), 'the directory for system configuration files'), PathItem.new('localstatedir', 'path', parameterize.call(c['localstatedir']), 'the directory for local state data'), PathItem.new('libruby', 'path', libruby, 'the directory for ruby libraries'), PathItem.new('librubyver', 'path', librubyver, 'the directory for standard ruby libraries'), PathItem.new('librubyverarch', 'path', librubyverarch, 'the directory for standard ruby extensions'), PathItem.new('siteruby', 'path', siteruby, 'the directory for version-independent aux ruby libraries'), PathItem.new('siterubyver', 'path', siterubyver, 'the directory for aux ruby libraries'), PathItem.new('siterubyverarch', 'path', siterubyverarch, 'the directory for aux ruby binaries'), PathItem.new('rbdir', 'path', '$siterubyver', 'the directory for ruby scripts'), PathItem.new('sodir', 'path', '$siterubyverarch', 'the directory for ruby extentions'), PathItem.new('rubypath', 'path', rubypath, 'the path to set to #! line'), ProgramItem.new('rubyprog', 'name', rubypath, 'the ruby program using for installation'), ProgramItem.new('makeprog', 'name', makeprog, 'the make program to compile ruby extentions'), SelectItem.new('shebang', 'all/ruby/never', 'ruby', 'shebang line (#!) editing mode'), BoolItem.new('without-ext', 'yes/no', 'no', 'does not compile/install ruby extentions') ] end private :standard_entries def load_multipackage_entries multipackage_entries().each do |ent| add ent end end def multipackage_entries [ PackageSelectionItem.new('with', 'name,name...', '', 'ALL', 'package names that you want to install'), PackageSelectionItem.new('without', 'name,name...', '', 'NONE', 'package names that you do not want to install') ] end private :multipackage_entries ALIASES = { 'std-ruby' => 'librubyver', 'stdruby' => 'librubyver', 'rubylibdir' => 'librubyver', 'archdir' => 'librubyverarch', 'site-ruby-common' => 'siteruby', # For backward compatibility 'site-ruby' => 'siterubyver', # For backward compatibility 'bin-dir' => 'bindir', 'bin-dir' => 'bindir', 'rb-dir' => 'rbdir', 'so-dir' => 'sodir', 'data-dir' => 'datadir', 'ruby-path' => 'rubypath', 'ruby-prog' => 'rubyprog', 'ruby' => 'rubyprog', 'make-prog' => 'makeprog', 'make' => 'makeprog' } def fixup ALIASES.each do |ali, name| @table[ali] = @table[name] end @items.freeze @table.freeze @options_re = /\A--(#{@table.keys.join('|')})(?:=(.*))?\z/ end def parse_opt(opt) m = @options_re.match(opt) or setup_rb_error "config: unknown option #{opt}" m.to_a[1,2] end def dllext @rbconfig['DLEXT'] end def value_config?(name) lookup(name).value? end class Item def initialize(name, template, default, desc) @name = name.freeze @template = template @value = default @default = default @description = desc end attr_reader :name attr_reader :description attr_accessor :default alias help_default default def help_opt "--#{@name}=#{@template}" end def value? true end def value @value end def resolve(table) @value.gsub(%r<\$([^/]+)>) { table[$1] } end def set(val) @value = check(val) end private def check(val) setup_rb_error "config: --#{name} requires argument" unless val val end end class BoolItem < Item def config_type 'bool' end def help_opt "--#{@name}" end private def check(val) return 'yes' unless val case val when /\Ay(es)?\z/i, /\At(rue)?\z/i then 'yes' when /\An(o)?\z/i, /\Af(alse)\z/i then 'no' else setup_rb_error "config: --#{@name} accepts only yes/no for argument" end end end class PathItem < Item def config_type 'path' end private def check(path) setup_rb_error "config: --#{@name} requires argument" unless path path[0,1] == '$' ? path : File.expand_path(path) end end class ProgramItem < Item def config_type 'program' end end class SelectItem < Item def initialize(name, selection, default, desc) super @ok = selection.split('/') end def config_type 'select' end private def check(val) unless @ok.include?(val.strip) setup_rb_error "config: use --#{@name}=#{@template} (#{val})" end val.strip end end class ExecItem < Item def initialize(name, selection, desc, &block) super name, selection, nil, desc @ok = selection.split('/') @action = block end def config_type 'exec' end def value? false end def resolve(table) setup_rb_error "$#{name()} wrongly used as option value" end undef set def evaluate(val, table) v = val.strip.downcase unless @ok.include?(v) setup_rb_error "invalid option --#{@name}=#{val} (use #{@template})" end @action.call v, table end end class PackageSelectionItem < Item def initialize(name, template, default, help_default, desc) super name, template, default, desc @help_default = help_default end attr_reader :help_default def config_type 'package' end private def check(val) unless File.dir?("packages/#{val}") setup_rb_error "config: no such package: #{val}" end val end end class MetaConfigEnvironment def initialize(config, installer) @config = config @installer = installer end def config_names @config.names end def config?(name) @config.key?(name) end def bool_config?(name) @config.lookup(name).config_type == 'bool' end def path_config?(name) @config.lookup(name).config_type == 'path' end def value_config?(name) @config.lookup(name).config_type != 'exec' end def add_config(item) @config.add item end def add_bool_config(name, default, desc) @config.add BoolItem.new(name, 'yes/no', default ? 'yes' : 'no', desc) end def add_path_config(name, default, desc) @config.add PathItem.new(name, 'path', default, desc) end def set_config_default(name, default) @config.lookup(name).default = default end def remove_config(name) @config.remove(name) end # For only multipackage def packages raise '[setup.rb fatal] multi-package metaconfig API packages() called for single-package; contact application package vendor' unless @installer @installer.packages end # For only multipackage def declare_packages(list) raise '[setup.rb fatal] multi-package metaconfig API declare_packages() called for single-package; contact application package vendor' unless @installer @installer.packages = list end end end # class ConfigTable # This module requires: #verbose?, #no_harm? module FileOperations def mkdir_p(dirname, prefix = nil) dirname = prefix + File.expand_path(dirname) if prefix $stderr.puts "mkdir -p #{dirname}" if verbose? return if no_harm? # Does not check '/', it's too abnormal. dirs = File.expand_path(dirname).split(%r<(?=/)>) if /\A[a-z]:\z/i =~ dirs[0] disk = dirs.shift dirs[0] = disk + dirs[0] end dirs.each_index do |idx| path = dirs[0..idx].join('') Dir.mkdir path unless File.dir?(path) end end def rm_f(path) $stderr.puts "rm -f #{path}" if verbose? return if no_harm? force_remove_file path end def rm_rf(path) $stderr.puts "rm -rf #{path}" if verbose? return if no_harm? remove_tree path end def remove_tree(path) if File.symlink?(path) remove_file path elsif File.dir?(path) remove_tree0 path else force_remove_file path end end def remove_tree0(path) Dir.foreach(path) do |ent| next if ent == '.' next if ent == '..' entpath = "#{path}/#{ent}" if File.symlink?(entpath) remove_file entpath elsif File.dir?(entpath) remove_tree0 entpath else force_remove_file entpath end end begin Dir.rmdir path rescue Errno::ENOTEMPTY # directory may not be empty end end def move_file(src, dest) force_remove_file dest begin File.rename src, dest rescue File.open(dest, 'wb') {|f| f.write File.binread(src) } File.chmod File.stat(src).mode, dest File.unlink src end end def force_remove_file(path) begin remove_file path rescue end end def remove_file(path) File.chmod 0777, path File.unlink path end def install(from, dest, mode, prefix = nil) $stderr.puts "install #{from} #{dest}" if verbose? return if no_harm? realdest = prefix ? prefix + File.expand_path(dest) : dest realdest = File.join(realdest, File.basename(from)) if File.dir?(realdest) str = File.binread(from) if diff?(str, realdest) verbose_off { rm_f realdest if File.exist?(realdest) } File.open(realdest, 'wb') {|f| f.write str } File.chmod mode, realdest File.open("#{objdir_root()}/InstalledFiles", 'a') {|f| if prefix f.puts realdest.sub(prefix, '') else f.puts realdest end } end end def diff?(new_content, path) return true unless File.exist?(path) new_content != File.binread(path) end def command(*args) $stderr.puts args.join(' ') if verbose? system(*args) or raise RuntimeError, "system(#{args.map{|a| a.inspect }.join(' ')}) failed" end def ruby(*args) command config('rubyprog'), *args end def make(task = nil) command(*[config('makeprog'), task].compact) end def extdir?(dir) File.exist?("#{dir}/MANIFEST") or File.exist?("#{dir}/extconf.rb") end def files_of(dir) Dir.open(dir) {|d| return d.select {|ent| File.file?("#{dir}/#{ent}") } } end DIR_REJECT = %w( . .. CVS SCCS RCS CVS.adm .svn ) def directories_of(dir) Dir.open(dir) {|d| return d.select {|ent| File.dir?("#{dir}/#{ent}") } - DIR_REJECT } end end # This module requires: #srcdir_root, #objdir_root, #relpath module HookScriptAPI def get_config(key) @config[key] end alias config get_config # obsolete: use metaconfig to change configuration def set_config(key, val) @config[key] = val end # # srcdir/objdir (works only in the package directory) # def curr_srcdir "#{srcdir_root()}/#{relpath()}" end def curr_objdir "#{objdir_root()}/#{relpath()}" end def srcfile(path) "#{curr_srcdir()}/#{path}" end def srcexist?(path) File.exist?(srcfile(path)) end def srcdirectory?(path) File.dir?(srcfile(path)) end def srcfile?(path) File.file?(srcfile(path)) end def srcentries(path = '.') Dir.open("#{curr_srcdir()}/#{path}") {|d| return d.to_a - %w(. ..) } end def srcfiles(path = '.') srcentries(path).select {|fname| File.file?(File.join(curr_srcdir(), path, fname)) } end def srcdirectories(path = '.') srcentries(path).select {|fname| File.dir?(File.join(curr_srcdir(), path, fname)) } end end class ToplevelInstaller Version = '3.4.1' Copyright = 'Copyright (c) 2000-2005 Minero Aoki' TASKS = [ [ 'all', 'do config, setup, then install' ], [ 'config', 'saves your configurations' ], [ 'show', 'shows current configuration' ], [ 'setup', 'compiles ruby extentions and others' ], [ 'install', 'installs files' ], [ 'test', 'run all tests in test/' ], [ 'clean', "does `make clean' for each extention" ], [ 'distclean',"does `make distclean' for each extention" ] ] def ToplevelInstaller.invoke config = ConfigTable.new(load_rbconfig()) config.load_standard_entries config.load_multipackage_entries if multipackage? config.fixup klass = (multipackage?() ? ToplevelInstallerMulti : ToplevelInstaller) klass.new(File.dirname($0), config).invoke end def ToplevelInstaller.multipackage? File.dir?(File.dirname($0) + '/packages') end def ToplevelInstaller.load_rbconfig if arg = ARGV.detect {|arg| /\A--rbconfig=/ =~ arg } ARGV.delete(arg) load File.expand_path(arg.split(/=/, 2)[1]) $".push 'rbconfig.rb' else require 'rbconfig' end ::Config::CONFIG end def initialize(ardir_root, config) @ardir = File.expand_path(ardir_root) @config = config # cache @valid_task_re = nil end def config(key) @config[key] end def inspect "#<#{self.class} #{__id__()}>" end def invoke run_metaconfigs case task = parsearg_global() when nil, 'all' parsearg_config init_installers exec_config exec_setup exec_install else case task when 'config', 'test' ; when 'clean', 'distclean' @config.load_savefile if File.exist?(@config.savefile) else @config.load_savefile end __send__ "parsearg_#{task}" init_installers __send__ "exec_#{task}" end end def run_metaconfigs @config.load_script "#{@ardir}/metaconfig" end def init_installers @installer = Installer.new(@config, @ardir, File.expand_path('.')) end # # Hook Script API bases # def srcdir_root @ardir end def objdir_root '.' end def relpath '.' end # # Option Parsing # def parsearg_global while arg = ARGV.shift case arg when /\A\w+\z/ setup_rb_error "invalid task: #{arg}" unless valid_task?(arg) return arg when '-q', '--quiet' @config.verbose = false when '--verbose' @config.verbose = true when '--help' print_usage $stdout exit 0 when '--version' puts "#{File.basename($0)} version #{Version}" exit 0 when '--copyright' puts Copyright exit 0 else setup_rb_error "unknown global option '#{arg}'" end end nil end def valid_task?(t) valid_task_re() =~ t end def valid_task_re @valid_task_re ||= /\A(?:#{TASKS.map {|task,desc| task }.join('|')})\z/ end def parsearg_no_options unless ARGV.empty? task = caller(0).first.slice(%r<`parsearg_(\w+)'>, 1) setup_rb_error "#{task}: unknown options: #{ARGV.join(' ')}" end end alias parsearg_show parsearg_no_options alias parsearg_setup parsearg_no_options alias parsearg_test parsearg_no_options alias parsearg_clean parsearg_no_options alias parsearg_distclean parsearg_no_options def parsearg_config evalopt = [] set = [] @config.config_opt = [] while i = ARGV.shift if /\A--?\z/ =~ i @config.config_opt = ARGV.dup break end name, value = *@config.parse_opt(i) if @config.value_config?(name) @config[name] = value else evalopt.push [name, value] end set.push name end evalopt.each do |name, value| @config.lookup(name).evaluate value, @config end # Check if configuration is valid set.each do |n| @config[n] if @config.value_config?(n) end end def parsearg_install @config.no_harm = false @config.install_prefix = '' while a = ARGV.shift case a when '--no-harm' @config.no_harm = true when /\A--prefix=/ path = a.split(/=/, 2)[1] path = File.expand_path(path) unless path[0,1] == '/' @config.install_prefix = path else setup_rb_error "install: unknown option #{a}" end end end def print_usage(out) out.puts 'Typical Installation Procedure:' out.puts " $ ruby #{File.basename $0} config" out.puts " $ ruby #{File.basename $0} setup" out.puts " # ruby #{File.basename $0} install (may require root privilege)" out.puts out.puts 'Detailed Usage:' out.puts " ruby #{File.basename $0} " out.puts " ruby #{File.basename $0} [] []" fmt = " %-24s %s\n" out.puts out.puts 'Global options:' out.printf fmt, '-q,--quiet', 'suppress message outputs' out.printf fmt, ' --verbose', 'output messages verbosely' out.printf fmt, ' --help', 'print this message' out.printf fmt, ' --version', 'print version and quit' out.printf fmt, ' --copyright', 'print copyright and quit' out.puts out.puts 'Tasks:' TASKS.each do |name, desc| out.printf fmt, name, desc end fmt = " %-24s %s [%s]\n" out.puts out.puts 'Options for CONFIG or ALL:' @config.each do |item| out.printf fmt, item.help_opt, item.description, item.help_default end out.printf fmt, '--rbconfig=path', 'rbconfig.rb to load',"running ruby's" out.puts out.puts 'Options for INSTALL:' out.printf fmt, '--no-harm', 'only display what to do if given', 'off' out.printf fmt, '--prefix=path', 'install path prefix', '' out.puts end # # Task Handlers # def exec_config @installer.exec_config @config.save # must be final end def exec_setup @installer.exec_setup end def exec_install @installer.exec_install end def exec_test @installer.exec_test end def exec_show @config.each do |i| printf "%-20s %s\n", i.name, i.value if i.value? end end def exec_clean @installer.exec_clean end def exec_distclean @installer.exec_distclean end end # class ToplevelInstaller class ToplevelInstallerMulti < ToplevelInstaller include FileOperations def initialize(ardir_root, config) super @packages = directories_of("#{@ardir}/packages") raise 'no package exists' if @packages.empty? @root_installer = Installer.new(@config, @ardir, File.expand_path('.')) end def run_metaconfigs @config.load_script "#{@ardir}/metaconfig", self @packages.each do |name| @config.load_script "#{@ardir}/packages/#{name}/metaconfig" end end attr_reader :packages def packages=(list) raise 'package list is empty' if list.empty? list.each do |name| raise "directory packages/#{name} does not exist"\ unless File.dir?("#{@ardir}/packages/#{name}") end @packages = list end def init_installers @installers = {} @packages.each do |pack| @installers[pack] = Installer.new(@config, "#{@ardir}/packages/#{pack}", "packages/#{pack}") end with = extract_selection(config('with')) without = extract_selection(config('without')) @selected = @installers.keys.select {|name| (with.empty? or with.include?(name)) \ and not without.include?(name) } end def extract_selection(list) a = list.split(/,/) a.each do |name| setup_rb_error "no such package: #{name}" unless @installers.key?(name) end a end def print_usage(f) super f.puts 'Inluded packages:' f.puts ' ' + @packages.sort.join(' ') f.puts end # # Task Handlers # def exec_config run_hook 'pre-config' each_selected_installers {|inst| inst.exec_config } run_hook 'post-config' @config.save # must be final end def exec_setup run_hook 'pre-setup' each_selected_installers {|inst| inst.exec_setup } run_hook 'post-setup' end def exec_install run_hook 'pre-install' each_selected_installers {|inst| inst.exec_install } run_hook 'post-install' end def exec_test run_hook 'pre-test' each_selected_installers {|inst| inst.exec_test } run_hook 'post-test' end def exec_clean rm_f @config.savefile run_hook 'pre-clean' each_selected_installers {|inst| inst.exec_clean } run_hook 'post-clean' end def exec_distclean rm_f @config.savefile run_hook 'pre-distclean' each_selected_installers {|inst| inst.exec_distclean } run_hook 'post-distclean' end # # lib # def each_selected_installers Dir.mkdir 'packages' unless File.dir?('packages') @selected.each do |pack| $stderr.puts "Processing the package `#{pack}' ..." if verbose? Dir.mkdir "packages/#{pack}" unless File.dir?("packages/#{pack}") Dir.chdir "packages/#{pack}" yield @installers[pack] Dir.chdir '../..' end end def run_hook(id) @root_installer.run_hook id end # module FileOperations requires this def verbose? @config.verbose? end # module FileOperations requires this def no_harm? @config.no_harm? end end # class ToplevelInstallerMulti class Installer FILETYPES = %w( bin lib ext data conf man ) include FileOperations include HookScriptAPI def initialize(config, srcroot, objroot) @config = config @srcdir = File.expand_path(srcroot) @objdir = File.expand_path(objroot) @currdir = '.' end def inspect "#<#{self.class} #{File.basename(@srcdir)}>" end def noop(rel) end # # Hook Script API base methods # def srcdir_root @srcdir end def objdir_root @objdir end def relpath @currdir end # # Config Access # # module FileOperations requires this def verbose? @config.verbose? end # module FileOperations requires this def no_harm? @config.no_harm? end def verbose_off begin save, @config.verbose = @config.verbose?, false yield ensure @config.verbose = save end end # # TASK config # def exec_config exec_task_traverse 'config' end alias config_dir_bin noop alias config_dir_lib noop def config_dir_ext(rel) extconf if extdir?(curr_srcdir()) end alias config_dir_data noop alias config_dir_conf noop alias config_dir_man noop def extconf ruby "#{curr_srcdir()}/extconf.rb", *@config.config_opt end # # TASK setup # def exec_setup exec_task_traverse 'setup' end def setup_dir_bin(rel) files_of(curr_srcdir()).each do |fname| update_shebang_line "#{curr_srcdir()}/#{fname}" end end alias setup_dir_lib noop def setup_dir_ext(rel) make if extdir?(curr_srcdir()) end alias setup_dir_data noop alias setup_dir_conf noop alias setup_dir_man noop def update_shebang_line(path) return if no_harm? return if config('shebang') == 'never' old = Shebang.load(path) if old $stderr.puts "warning: #{path}: Shebang line includes too many args. It is not portable and your program may not work." if old.args.size > 1 new = new_shebang(old) return if new.to_s == old.to_s else return unless config('shebang') == 'all' new = Shebang.new(config('rubypath')) end $stderr.puts "updating shebang: #{File.basename(path)}" if verbose? open_atomic_writer(path) {|output| File.open(path, 'rb') {|f| f.gets if old # discard output.puts new.to_s output.print f.read } } end def new_shebang(old) if /\Aruby/ =~ File.basename(old.cmd) Shebang.new(config('rubypath'), old.args) elsif File.basename(old.cmd) == 'env' and old.args.first == 'ruby' Shebang.new(config('rubypath'), old.args[1..-1]) else return old unless config('shebang') == 'all' Shebang.new(config('rubypath')) end end def open_atomic_writer(path, &block) tmpfile = File.basename(path) + '.tmp' begin File.open(tmpfile, 'wb', &block) File.rename tmpfile, File.basename(path) ensure File.unlink tmpfile if File.exist?(tmpfile) end end class Shebang def Shebang.load(path) line = nil File.open(path) {|f| line = f.gets } return nil unless /\A#!/ =~ line parse(line) end def Shebang.parse(line) cmd, *args = *line.strip.sub(/\A\#!/, '').split(' ') new(cmd, args) end def initialize(cmd, args = []) @cmd = cmd @args = args end attr_reader :cmd attr_reader :args def to_s "#! #{@cmd}" + (@args.empty? ? '' : " #{@args.join(' ')}") end end # # TASK install # def exec_install rm_f 'InstalledFiles' exec_task_traverse 'install' end def install_dir_bin(rel) install_files targetfiles(), "#{config('bindir')}/#{rel}", 0755 end def install_dir_lib(rel) install_files libfiles(), "#{config('rbdir')}/#{rel}", 0644 end def install_dir_ext(rel) return unless extdir?(curr_srcdir()) install_files rubyextentions('.'), "#{config('sodir')}/#{File.dirname(rel)}", 0555 end def install_dir_data(rel) install_files targetfiles(), "#{config('datadir')}/#{rel}", 0644 end def install_dir_conf(rel) # FIXME: should not remove current config files # (rename previous file to .old/.org) install_files targetfiles(), "#{config('sysconfdir')}/#{rel}", 0644 end def install_dir_man(rel) install_files targetfiles(), "#{config('mandir')}/#{rel}", 0644 end def install_files(list, dest, mode) mkdir_p dest, @config.install_prefix list.each do |fname| install fname, dest, mode, @config.install_prefix end end def libfiles glob_reject(%w(*.y *.output), targetfiles()) end def rubyextentions(dir) ents = glob_select("*.#{@config.dllext}", targetfiles()) if ents.empty? setup_rb_error "no ruby extention exists: 'ruby #{$0} setup' first" end ents end def targetfiles mapdir(existfiles() - hookfiles()) end def mapdir(ents) ents.map {|ent| if File.exist?(ent) then ent # objdir else "#{curr_srcdir()}/#{ent}" # srcdir end } end # picked up many entries from cvs-1.11.1/src/ignore.c JUNK_FILES = %w( core RCSLOG tags TAGS .make.state .nse_depinfo #* .#* cvslog.* ,* .del-* *.olb *~ *.old *.bak *.BAK *.orig *.rej _$* *$ *.org *.in .* ) def existfiles glob_reject(JUNK_FILES, (files_of(curr_srcdir()) | files_of('.'))) end def hookfiles %w( pre-%s post-%s pre-%s.rb post-%s.rb ).map {|fmt| %w( config setup install clean ).map {|t| sprintf(fmt, t) } }.flatten end def glob_select(pat, ents) re = globs2re([pat]) ents.select {|ent| re =~ ent } end def glob_reject(pats, ents) re = globs2re(pats) ents.reject {|ent| re =~ ent } end GLOB2REGEX = { '.' => '\.', '$' => '\$', '#' => '\#', '*' => '.*' } def globs2re(pats) /\A(?:#{ pats.map {|pat| pat.gsub(/[\.\$\#\*]/) {|ch| GLOB2REGEX[ch] } }.join('|') })\z/ end # # TASK test # TESTDIR = 'test' def exec_test unless File.directory?('test') $stderr.puts 'no test in this package' if verbose? return end $stderr.puts 'Running tests...' if verbose? begin require 'test/unit' rescue LoadError setup_rb_error 'test/unit cannot loaded. You need Ruby 1.8 or later to invoke this task.' end runner = Test::Unit::AutoRunner.new(true) runner.to_run << TESTDIR runner.run end # # TASK clean # def exec_clean exec_task_traverse 'clean' rm_f @config.savefile rm_f 'InstalledFiles' end alias clean_dir_bin noop alias clean_dir_lib noop alias clean_dir_data noop alias clean_dir_conf noop alias clean_dir_man noop def clean_dir_ext(rel) return unless extdir?(curr_srcdir()) make 'clean' if File.file?('Makefile') end # # TASK distclean # def exec_distclean exec_task_traverse 'distclean' rm_f @config.savefile rm_f 'InstalledFiles' end alias distclean_dir_bin noop alias distclean_dir_lib noop def distclean_dir_ext(rel) return unless extdir?(curr_srcdir()) make 'distclean' if File.file?('Makefile') end alias distclean_dir_data noop alias distclean_dir_conf noop alias distclean_dir_man noop # # Traversing # def exec_task_traverse(task) run_hook "pre-#{task}" FILETYPES.each do |type| if type == 'ext' and config('without-ext') == 'yes' $stderr.puts 'skipping ext/* by user option' if verbose? next end traverse task, type, "#{task}_dir_#{type}" end run_hook "post-#{task}" end def traverse(task, rel, mid) dive_into(rel) { run_hook "pre-#{task}" __send__ mid, rel.sub(%r[\A.*?(?:/|\z)], '') directories_of(curr_srcdir()).each do |d| traverse task, "#{rel}/#{d}", mid end run_hook "post-#{task}" } end def dive_into(rel) return unless File.dir?("#{@srcdir}/#{rel}") dir = File.basename(rel) Dir.mkdir dir unless File.dir?(dir) prevdir = Dir.pwd Dir.chdir dir $stderr.puts '---> ' + rel if verbose? @currdir = rel yield Dir.chdir prevdir $stderr.puts '<--- ' + rel if verbose? @currdir = File.dirname(rel) end def run_hook(id) path = [ "#{curr_srcdir()}/#{id}", "#{curr_srcdir()}/#{id}.rb" ].detect {|cand| File.file?(cand) } return unless path begin instance_eval File.read(path), path, 1 rescue raise if $DEBUG setup_rb_error "hook #{path} failed:\n" + $!.message end end end # class Installer class SetupError < StandardError; end def setup_rb_error(msg) raise SetupError, msg end if $0 == __FILE__ begin ToplevelInstaller.invoke rescue SetupError raise if $DEBUG $stderr.puts $!.message $stderr.puts "Try 'ruby #{$0} --help' for detailed usage." exit 1 end end comedilib-0.11.0/swig/ruby/lib/0000755000000000000000000000000013162722664013200 500000000000000comedilib-0.11.0/swig/ruby/lib/comedi.rb0000644000000000000000000001747012715406005014705 00000000000000###################################################################### # # $Source$ # # $Revision$ # $Date$ # # $Author$ # # Copyright (C) 2003,2004 James Steven Jenkins # ###################################################################### # This file is syntactic sugar for accessing the Ruby comedilib # extension library generated by SWIG. The syntactic sugar is in # several forms: # # (1) Method names without the 'comedi_' prefix. The Comedi module # disambiguates the namespace. # # (2) Instance methods that take an explicit receiver instead of # passing the target object as an initial pointer. For example: # comedi_close(dev) can be written as dev.close. # # (3) A pre-defined IO object and an accessor method to simplify # reading from the file descriptor associated with the comedi device. # Data from comedi device dev can be accessed with dev.ios.read. # # (4) A ComediError exception class. If the underlying comedi # function returns an error indication, the ruby method will raise # ComediError. If the comedi function returns both a status and a # value (e.g., comedi_data_read), the status is not returned by the # ruby method unless it carries information in addition to indication # of failure (e.g., comedi_command_test). # # (5) Ruby booleans. Comedi functions that return C integer boolean values # (comedi_range_is_chan_specific, comedi_maxdata_is_chan_specific) have # corresponding boolean ruby methods with '?' appended to the method name. require 'comedi.so' include Comedi # SWIG::TYPE_p_comedi_t_struct is returned by Comedi::open class SWIG::TYPE_p_comedi_t_struct # create an IO object to access the comedi_t_struct fileno def ios def self.ios @ios end @ios = IO.new(fileno, 'r') end end # ComediError is raised by methods whose underlying comedi functions return # indication of an error. class ComediError < SystemCallError def initialize @comedi_errno = Comedi::errno end attr_reader :comedi_errno end module Comedi private # wrap_method is the basis for wrap_module_method and # wrap_instance_method. def wrap_method(mod, name, err, multi, arglist) cname = name ret = 'value' status = 'value' value = 'value' # If name ends in '?', make ruby wrapper a boolean. if bool = (name =~ /\?$/) value = 'ret == 1' cname = name.sub(/\?$/, '') elsif multi == :simple ret = 'status, value' status = 'status' value = 'value' elsif multi == :compound ret = 'status, value' status = 'status' value = 'status, value' end wrap_def = %Q{# Module: #{mod}\n\n} wrap_def << %Q{def #{name}(*args)\n} wrap_def << %Q{ #{ret} = comedi_#{cname}(#{arglist})\n} # Raise exceptions if required. unless err == :none wrap_def << %Q{ raise ComediError.new if } case err when :neg wrap_def << %Q{#{status} < 0\n} when nil wrap_def << %Q{#{status}.nil?\n} else wrap_def << %Q{#{status} == #{err}\n} end end # Return value. wrap_def << %Q{ return #{value}\n} wrap_def << %Q{end\n\n} # Execute definition. puts wrap_def if __FILE__ == 'comedi.rb' mod.module_eval wrap_def end # wrap_module_method defines Comedi module methods without the # unnecessary comedi_ prefix. The wrapped method raises # ComediError if the return value equals a specified value. def wrap_module_method(mod, name, err, multi) wrap_method(mod, name, err, multi, '*args') end # wrap_instance_method defines instance methods for any of several # classes. It removes the comedi_ prefix and allows use of an # explicit receiver. The wrapped method raises ComediError # if the return value equals a specified value. def wrap_instance_method(mod, name, err, multi) wrap_method(mod, name, err, multi, 'self, *args') end # This struct holds information for methods with return class, # error, and multi-return indication. Method_group = Struct.new(:class, :err, :multi, :names) # Define method groups. module_methods = [ # Comedi module methods that return nil on error. Method_group.new(Comedi, nil, nil, %w{ open parse_calibration_file }), # Comedi module methods that do not indicate errors. Method_group.new(Comedi, :none, nil, %w{ loglevel perror strerrno errno to_phys from_phys set_global_oor_behavior to_physical from_physical }), ] instance_methods = [ # SWIG::TYPE_p_comedi_t_struct methods that return -1 on error. Method_group.new(SWIG::TYPE_p_comedi_t_struct, -1, nil, %w{ close fileno get_subdevice_type find_subdevice_by_type get_read_subdevice get_write_device get_subdevice_flags get_n_channels range_is_chan_specific? maxdata_is_chan_specific? get_n_ranges find_range get_buffer_size get_max_buffer_size set_buffer_size trigger do_insnlist do_insn lock unlock data_read_hint data_write dio_get_config dio_config dio_write cancel command poll set_max_buffer_size get_buffer_contents mark_buffer_read mark_buffer_written get_buffer_offset get_buffer_read_offset get_buffer_write_offset get_softcal_converter get_hardcal_converter internal_trigger arm arm_channel disarm disarm_channel reset reset_channel set_counter_mode set_clock_source set_filter set_gate_source set_other_source set_routing get_hardware_buffer_size digital_trigger_disable digital_trigger_enable_edges digital_trigger_enable_levels set_read_subdevice set_write_subdevice }), # SWIG::TYPE_p_comedi_t_struct methods that return status and a # value. Status is -1 on error. Status is discarded. Method_group.new(SWIG::TYPE_p_comedi_t_struct, -1, :simple, %w{ data_read data_read_delayed dio_read dio_bitfield dio_bitfield2 get_cmd_src_mask get_cmd_generic_timed get_gate_source get_routing get_buffer_read_count get_buffer_write_count }), # TODO: add get_clock_source, but it returns status and two values. # SWIG::TYPE_p_comedi_t_struct methods that return status and a # value. Status is -1 on error. Status and value are both # returned. Method_group.new(SWIG::TYPE_p_comedi_t_struct, -1, :compound, %w{ command_test }), # SWIG::TYPE_p_comedi_t_struct methods that return 0 on error. Method_group.new(SWIG::TYPE_p_comedi_t_struct, 0, nil, %w{ get_maxdata }), # SWIG::TYPE_p_comedi_t_struct methods that return <0 on error. Method_group.new(SWIG::TYPE_p_comedi_t_struct, :neg, nil, %w{ apply_calibration apply_parsed_calibration }), # SWIG::TYPE_p_comedi_t_struct methods that return nil on error. Method_group.new(SWIG::TYPE_p_comedi_t_struct, nil, nil, %w{ get_driver_name get_board_name get_range get_default_calibration_path }), # SWIG::TYPE_p_comedi_t_struct methods that do not indicate errors. Method_group.new(SWIG::TYPE_p_comedi_t_struct, :none, nil, %w{ get_n_subdevices get_version_code }), # Comedi_sv_t methods that return -1 on error. Method_group.new(Comedi_sv_t, -1, nil, %w{ sv_init sv_update }), # Comedi_sv_t methods that return status and a value. Status # is -1 on error. Method_group.new(Comedi_sv_t, -1, :simple, %w{ sv_measure }), # Comedi_calibration_t methods that do not indicate errors. Method_group.new(Comedi_calibration_t, :none, nil, %w{ cleanup_calibration }) ] # Wrap Comedi module methods. module_methods.each do |d| d.names.each do |n| wrap_module_method(d.class, n, d.err, d.multi) end end # Wrap instance methods. instance_methods.each do |d| d.names.each do |n| wrap_instance_method(d.class, n, d.err, d.multi) end end end comedilib-0.11.0/swig/ruby/Makefile.in0000644000000000000000000003450313140064521014407 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = swig/ruby ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/am-check-python-headers.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/as-libtool.m4 $(top_srcdir)/m4/ax_tls.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COMEDILIB_AGE = @COMEDILIB_AGE@ COMEDILIB_CFLAGS = @COMEDILIB_CFLAGS@ COMEDILIB_CURRENT = @COMEDILIB_CURRENT@ COMEDILIB_LIBS = @COMEDILIB_LIBS@ COMEDILIB_LIBVERSION = @COMEDILIB_LIBVERSION@ COMEDILIB_LT_LDFLAGS = @COMEDILIB_LT_LDFLAGS@ COMEDILIB_REVISION = @COMEDILIB_REVISION@ COMEDILIB_VERSION_MAJOR = @COMEDILIB_VERSION_MAJOR@ COMEDILIB_VERSION_MICRO = @COMEDILIB_VERSION_MICRO@ COMEDILIB_VERSION_MINOR = @COMEDILIB_VERSION_MINOR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_BACKEND = @PDF_BACKEND@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_QUIET = @PYTHON_QUIET@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_CONFIG_OPTIONS = @RUBY_CONFIG_OPTIONS@ RUBY_PREFIX = @RUBY_PREFIX@ RUBY_SO_DIR = @RUBY_SO_DIR@ SCXI_SO_VERSION = @SCXI_SO_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ VERSION = @VERSION@ XMLTO = @XMLTO@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pcmciadir = @pcmciadir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ udevfirmwaredir = @udevfirmwaredir@ udevrulesdir = @udevrulesdir@ udevscriptsdir = @udevscriptsdir@ EXTRA_DIST = demo/cmd demo/common.rb demo/inp demo/outp lib/comedi.rb \ ext/extconf.rb ext/MANIFEST setup.rb all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu swig/ruby/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu swig/ruby/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile all-local installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am all-local check check-am clean clean-generic \ clean-libtool clean-local cscopelist-am ctags-am distclean \ distclean-generic distclean-libtool distclean-local distdir \ dvi dvi-am html html-am info info-am install install-am \ install-data install-data-am install-data-local install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am .PRECIOUS: Makefile $(srcdir)/ext/comedi_ruby_wrap.c: $(srcdir)/../comedi.i $(SWIG) -ruby -o $(srcdir)/ext/comedi_ruby_wrap.c -I$(top_srcdir)/include $(srcdir)/../comedi.i @HAVE_RUBY_TRUE@all-local: ext/comedi.so @HAVE_RUBY_TRUE@install-data-local: @HAVE_RUBY_TRUE@ $(RUBY) $(srcdir)/setup.rb install @HAVE_RUBY_FALSE@all-local: @HAVE_RUBY_FALSE@install-data-local: ext/Makefile config.save: $(srcdir)/ext/comedi_ruby_wrap.c $(RUBY) $(srcdir)/setup.rb config $(RUBY_CONFIG_OPTIONS) -- --with-comedilib-dir=$(abs_srcdir)/../.. ext/comedi.so ext/comedi_ruby_wrap.o: ext/Makefile config.save $(RUBY) $(srcdir)/setup.rb setup @HAVE_RUBY_TRUE@clean-local: @HAVE_RUBY_TRUE@ $(RUBY) $(srcdir)/setup.rb clean @HAVE_RUBY_TRUE@ $(RM) $(srcdir)/ext/comedi_ruby_wrap.c @HAVE_RUBY_TRUE@ $(RM) ext/Makefile config.save @HAVE_RUBY_TRUE@distclean-local: @HAVE_RUBY_TRUE@ $(RUBY) $(srcdir)/setup.rb distclean @HAVE_RUBY_FALSE@clean-local: @HAVE_RUBY_FALSE@distclean-local: # 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: comedilib-0.11.0/swig/ruby/README0000644000000000000000000002676512416542105013241 00000000000000This directory contains files for building a Ruby extension library for Comedi. Instructions for building by hand (you shouldn't need to do this): 1. Type 'ruby setup.rb config'. This configures for the local environment. 2. Type 'ruby setup.rb setup'. This builds the extension library. 3. Type 'ruby setup.rb install'. This installs the extension library and the file lib/comedi.rb, which provides more Ruby-like method syntax. The file 'lib/comedi.rb' provides syntactic sugar in four forms: 1. Method names without the 'comedi_' prefix. The Comedi module disambiguates the namespace. For example, you can say 'dev = Comedi::open()' instead of 'dev = Comedi::comedi_open()'. 2. Instance methods that take an explicit receiver instead of expecting the target object as an initial argument. For example: 'comedi_close(dev)' can be written as 'dev.close'. 3. A pre-defined IO object and an accessor method to simplify reading from the file descriptor associated with the comedi device. Data from comedi device 'dev' can be read by 'dev.ios.read'. 4. A ComediError exception class. If the underlying comedi function returns an error indication, the ruby method will raise ComediError. If the comedi function returns both a status and a value (e.g., comedi_data_read), the status is not returned by the ruby method unless it carries information in addition to indication of failure (e.g., comedi_command_test). 5. Ruby booleans. Comedi functions that return C integer boolean values (comedi_range_is_chan_specific, comedi_maxdata_is_chan_specific) have corresponding boolean ruby methods with '?' appended to the method name. Files in 'demo' are straight ports of their C counterparts from the Comedilib 'demo' directory. They illustrate the basics of programming Comedi commands using Ruby. For completeness, the set of method definitions invoked by 'comedi.rb' is as follows: # Module: Comedi def open(*args) value = comedi_open(*args) raise ComediError.new if value.nil? return value end # Module: Comedi def parse_calibration_file(*args) value = comedi_parse_calibration_file(*args) raise ComediError.new if value.nil? return value end # Module: Comedi def loglevel(*args) value = comedi_loglevel(*args) return value end # Module: Comedi def perror(*args) value = comedi_perror(*args) return value end # Module: Comedi def strerrno(*args) value = comedi_strerrno(*args) return value end # Module: Comedi def errno(*args) value = comedi_errno(*args) return value end # Module: Comedi def to_phys(*args) value = comedi_to_phys(*args) return value end # Module: Comedi def from_phys(*args) value = comedi_from_phys(*args) return value end # Module: Comedi def set_global_oor_behavior(*args) value = comedi_set_global_oor_behavior(*args) return value end # Module: SWIG::TYPE_p_comedi_t def close(*args) value = comedi_close(self, *args) raise ComediError.new if value == -1 return value end # Module: SWIG::TYPE_p_comedi_t def fileno(*args) value = comedi_fileno(self, *args) raise ComediError.new if value == -1 return value end # Module: SWIG::TYPE_p_comedi_t def get_subdevice_type(*args) value = comedi_get_subdevice_type(self, *args) raise ComediError.new if value == -1 return value end # Module: SWIG::TYPE_p_comedi_t def find_subdevice_by_type(*args) value = comedi_find_subdevice_by_type(self, *args) raise ComediError.new if value == -1 return value end # Module: SWIG::TYPE_p_comedi_t def get_read_subdevice(*args) value = comedi_get_read_subdevice(self, *args) raise ComediError.new if value == -1 return value end # Module: SWIG::TYPE_p_comedi_t def get_write_device(*args) value = comedi_get_write_device(self, *args) raise ComediError.new if value == -1 return value end # Module: SWIG::TYPE_p_comedi_t def get_subdevice_flags(*args) value = comedi_get_subdevice_flags(self, *args) raise ComediError.new if value == -1 return value end # Module: SWIG::TYPE_p_comedi_t def get_n_channels(*args) value = comedi_get_n_channels(self, *args) raise ComediError.new if value == -1 return value end # Module: SWIG::TYPE_p_comedi_t def range_is_chan_specific?(*args) value = comedi_range_is_chan_specific(self, *args) raise ComediError.new if value == -1 return ret == 1 end # Module: SWIG::TYPE_p_comedi_t def maxdata_is_chan_specific?(*args) value = comedi_maxdata_is_chan_specific(self, *args) raise ComediError.new if value == -1 return ret == 1 end # Module: SWIG::TYPE_p_comedi_t def get_n_ranges(*args) value = comedi_get_n_ranges(self, *args) raise ComediError.new if value == -1 return value end # Module: SWIG::TYPE_p_comedi_t def find_range(*args) value = comedi_find_range(self, *args) raise ComediError.new if value == -1 return value end # Module: SWIG::TYPE_p_comedi_t def get_buffer_size(*args) value = comedi_get_buffer_size(self, *args) raise ComediError.new if value == -1 return value end # Module: SWIG::TYPE_p_comedi_t def get_max_buffer_size(*args) value = comedi_get_max_buffer_size(self, *args) raise ComediError.new if value == -1 return value end # Module: SWIG::TYPE_p_comedi_t def set_buffer_size(*args) value = comedi_set_buffer_size(self, *args) raise ComediError.new if value == -1 return value end # Module: SWIG::TYPE_p_comedi_t def trigger(*args) value = comedi_trigger(self, *args) raise ComediError.new if value == -1 return value end # Module: SWIG::TYPE_p_comedi_t def do_insnlist(*args) value = comedi_do_insnlist(self, *args) raise ComediError.new if value == -1 return value end # Module: SWIG::TYPE_p_comedi_t def do_insn(*args) value = comedi_do_insn(self, *args) raise ComediError.new if value == -1 return value end # Module: SWIG::TYPE_p_comedi_t def lock(*args) value = comedi_lock(self, *args) raise ComediError.new if value == -1 return value end # Module: SWIG::TYPE_p_comedi_t def unlock(*args) value = comedi_unlock(self, *args) raise ComediError.new if value == -1 return value end # Module: SWIG::TYPE_p_comedi_t def data_read_hint(*args) value = comedi_data_read_hint(self, *args) raise ComediError.new if value == -1 return value end # Module: SWIG::TYPE_p_comedi_t def data_write(*args) value = comedi_data_write(self, *args) raise ComediError.new if value == -1 return value end # Module: SWIG::TYPE_p_comedi_t def dio_config(*args) value = comedi_dio_config(self, *args) raise ComediError.new if value == -1 return value end # Module: SWIG::TYPE_p_comedi_t def dio_write(*args) value = comedi_dio_write(self, *args) raise ComediError.new if value == -1 return value end # Module: SWIG::TYPE_p_comedi_t def cancel(*args) value = comedi_cancel(self, *args) raise ComediError.new if value == -1 return value end # Module: SWIG::TYPE_p_comedi_t def command(*args) value = comedi_command(self, *args) raise ComediError.new if value == -1 return value end # Module: SWIG::TYPE_p_comedi_t def poll(*args) value = comedi_poll(self, *args) raise ComediError.new if value == -1 return value end # Module: SWIG::TYPE_p_comedi_t def set_max_buffer_size(*args) value = comedi_set_max_buffer_size(self, *args) raise ComediError.new if value == -1 return value end # Module: SWIG::TYPE_p_comedi_t def get_buffer_contents(*args) value = comedi_get_buffer_contents(self, *args) raise ComediError.new if value == -1 return value end # Module: SWIG::TYPE_p_comedi_t def mark_buffer_read(*args) value = comedi_mark_buffer_read(self, *args) raise ComediError.new if value == -1 return value end # Module: SWIG::TYPE_p_comedi_t def get_buffer_offset(*args) value = comedi_get_buffer_offset(self, *args) raise ComediError.new if value == -1 return value end # Module: SWIG::TYPE_p_comedi_t def data_read(*args) status, value = comedi_data_read(self, *args) raise ComediError.new if status == -1 return value end # Module: SWIG::TYPE_p_comedi_t def data_read_delayed(*args) status, value = comedi_data_read_delayed(self, *args) raise ComediError.new if status == -1 return value end # Module: SWIG::TYPE_p_comedi_t def dio_read(*args) status, value = comedi_dio_read(self, *args) raise ComediError.new if status == -1 return value end # Module: SWIG::TYPE_p_comedi_t def dio_bitfield(*args) status, value = comedi_dio_bitfield(self, *args) raise ComediError.new if status == -1 return value end # Module: SWIG::TYPE_p_comedi_t def get_cmd_src_mask(*args) status, value = comedi_get_cmd_src_mask(self, *args) raise ComediError.new if status == -1 return value end # Module: SWIG::TYPE_p_comedi_t def get_cmd_generic_timed(*args) status, value = comedi_get_cmd_generic_timed(self, *args) raise ComediError.new if status == -1 return value end # Module: SWIG::TYPE_p_comedi_t def command_test(*args) status, value = comedi_command_test(self, *args) raise ComediError.new if status == -1 return status, value end # Module: SWIG::TYPE_p_comedi_t def get_maxdata(*args) value = comedi_get_maxdata(self, *args) raise ComediError.new if value == 0 return value end # Module: SWIG::TYPE_p_comedi_t def apply_calibration(*args) value = comedi_apply_calibration(self, *args) raise ComediError.new if value < 0 return value end # Module: SWIG::TYPE_p_comedi_t def apply_parsed_calibration(*args) value = comedi_apply_parsed_calibration(self, *args) raise ComediError.new if value < 0 return value end # Module: SWIG::TYPE_p_comedi_t def get_driver_name(*args) value = comedi_get_driver_name(self, *args) raise ComediError.new if value.nil? return value end # Module: SWIG::TYPE_p_comedi_t def get_board_name(*args) value = comedi_get_board_name(self, *args) raise ComediError.new if value.nil? return value end # Module: SWIG::TYPE_p_comedi_t def get_range(*args) value = comedi_get_range(self, *args) raise ComediError.new if value.nil? return value end # Module: SWIG::TYPE_p_comedi_t def get_default_calibration_path(*args) value = comedi_get_default_calibration_path(self, *args) raise ComediError.new if value.nil? return value end # Module: SWIG::TYPE_p_comedi_t def get_n_subdevices(*args) value = comedi_get_n_subdevices(self, *args) return value end # Module: SWIG::TYPE_p_comedi_t def get_version_code(*args) value = comedi_get_version_code(self, *args) return value end # Module: Comedi::Comedi_sv_t def sv_init(*args) value = comedi_sv_init(self, *args) raise ComediError.new if value == -1 return value end # Module: Comedi::Comedi_sv_t def sv_update(*args) value = comedi_sv_update(self, *args) raise ComediError.new if value == -1 return value end # Module: Comedi::Comedi_sv_t def sv_measure(*args) status, value = comedi_sv_measure(self, *args) raise ComediError.new if status == -1 return value end # Module: Comedi::Comedi_calibration_t def cleanup_calibration_file(*args) value = comedi_cleanup_calibration_file(self, *args) return value end Steven Jenkins steven.jenkins@ieee.org 2004-03-02 comedilib-0.11.0/m4/0000755000000000000000000000000013162722662011016 500000000000000comedilib-0.11.0/m4/ax_tls.m40000644000000000000000000000573212416542105012472 00000000000000# =========================================================================== # http://autoconf-archive.cryp.to/ax_tls.html # =========================================================================== # # SYNOPSIS # # AX_TLS # # DESCRIPTION # # Provides a test for the compiler support of thread local storage (TLS) # extensions. Defines TLS if it is found. Currently only knows about GCC # and MSVC. I think SunPro uses the same as GCC, and Borland apparently # supports either. # # LAST MODIFICATION # # 2008-04-12 # # COPYLEFT # # Copyright (c) 2008 Alan Woodland # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Macro Archive. When you make and # distribute a modified version of the Autoconf Macro, you may extend this # special exception to the GPL to apply to your modified version as well. AC_DEFUN([AX_TLS], [ AC_MSG_CHECKING(for thread local storage (TLS) class) AC_CACHE_VAL(ac_cv_tls, [ ax_tls_keywords="__thread __declspec(thread) none" for ax_tls_keyword in $ax_tls_keywords; do case $ax_tls_keyword in none) ac_cv_tls=none ; break ;; *) AC_TRY_COMPILE( [#include static void foo(void) { static ] $ax_tls_keyword [ int bar; exit(1); }], [], [ac_cv_tls=$ax_tls_keyword ; break], ac_cv_tls=none ) esac done ]) if test "$ac_cv_tls" != "none"; then dnl AC_DEFINE([TLS], [], [If the compiler supports a TLS storage class define it to that here]) AC_DEFINE_UNQUOTED([TLS], $ac_cv_tls, [If the compiler supports a TLS storage class define it to that here]) fi AC_MSG_RESULT($ac_cv_tls) ]) comedilib-0.11.0/m4/as-libtool.m40000644000000000000000000000176712416542105013251 00000000000000dnl as-libtool.m4 0.0.2 dnl autostars m4 macro for libtool versioning dnl thomas@apestaart.org dnl dnl AS_LIBTOOL(PREFIX, CURRENT, REVISION, AGE, USE_RELEASE) dnl example dnl AS_VERSION(GST, 2, 0, 0) dnl dnl this macro dnl - defines [$PREFIX]_CURRENT, REVISION AND AGE dnl - defines [$PREFIX]_LIBVERSION dnl - defines [$PREFIX]_LT_LDFLAGS to set versioning dnl - AC_SUBST's them all dnl dnl if USE_RELEASE = yes, then add a -release option to the LDFLAGS dnl with the (pre-defined) [$PREFIX]_VERSION dnl then use [$PREFIX]_LT_LDFLAGS in the relevant Makefile.am's AC_DEFUN([AS_LIBTOOL], [ [$1]_CURRENT=[$2] [$1]_REVISION=[$3] [$1]_AGE=[$4] [$1]_LIBVERSION=[$2]:[$3]:[$4] AC_SUBST([$1]_CURRENT) AC_SUBST([$1]_REVISION) AC_SUBST([$1]_AGE) AC_SUBST([$1]_LIBVERSION) [$1]_LT_LDFLAGS="$[$1]_LT_LDFLAGS -version-info $[$1]_LIBVERSION" if test ! -z "[$5]" then [$1]_LT_LDFLAGS="$[$1]_LT_LDFLAGS -release $[$1]_VERSION" fi AC_SUBST([$1]_LT_LDFLAGS) AC_LIBTOOL_DLOPEN AC_PROG_LIBTOOL ]) comedilib-0.11.0/m4/ltoptions.m40000644000000000000000000003426212665545466013256 00000000000000# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 8 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option '$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl 'shared' nor 'disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], [_LT_WITH_AIX_SONAME([aix])]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the 'shared' and # 'disable-shared' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the 'static' and # 'disable-static' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the 'fast-install' # and 'disable-fast-install' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_AIX_SONAME([DEFAULT]) # ---------------------------------- # implement the --with-aix-soname flag, and support the `aix-soname=aix' # and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT # is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. m4_define([_LT_WITH_AIX_SONAME], [m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[[5-9]]*,yes) AC_MSG_CHECKING([which variant of shared library versioning to provide]) AC_ARG_WITH([aix-soname], [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], [case $withval in aix|svr4|both) ;; *) AC_MSG_ERROR([Unknown argument to --with-aix-soname]) ;; esac lt_cv_with_aix_soname=$with_aix_soname], [AC_CACHE_VAL([lt_cv_with_aix_soname], [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) with_aix_soname=$lt_cv_with_aix_soname]) AC_MSG_RESULT([$with_aix_soname]) if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac _LT_DECL([], [shared_archive_member_spec], [0], [Shared archive member basename, for filename based shared library versioning on AIX])dnl ])# _LT_WITH_AIX_SONAME LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the 'pic-only' and 'no-pic' # LT_INIT options. # MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac], [pic_mode=m4_default([$1], [default])]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) comedilib-0.11.0/m4/as-compiler-flag.m40000644000000000000000000000063612416542105014320 00000000000000dnl as-compiler-flag.m4 0.0.1 dnl autostars m4 macro for detection of compiler flags dnl dnl ds@schleef.org AC_DEFUN([AS_COMPILER_FLAG], [ AC_MSG_CHECKING(to see if compiler understands $1) save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $1" AC_TRY_COMPILE([ ], [], [flag_ok=yes], [flag_ok=no]) CFLAGS="$save_CFLAGS" if test "X$flag_ok" = Xyes; then $2 else $3 fi AC_MSG_RESULT([$flag_ok]) ]) comedilib-0.11.0/m4/am-check-python-headers.m40000644000000000000000000000225412416542105015574 00000000000000dnl a macro to check for ability to create python extensions dnl AM_CHECK_PYTHON_HEADERS([ACTION-IF-POSSIBLE], [ACTION-IF-NOT-POSSIBLE]) dnl function also defines PYTHON_INCLUDES AC_DEFUN([AM_CHECK_PYTHON_HEADERS], [AC_REQUIRE([AM_PATH_PYTHON]) dnl deduce PYTHON_INCLUDES AC_MSG_CHECKING([for python headers using $PYTHON-config --includes]) PYTHON_INCLUDES=`$PYTHON-config --includes` if test $? = 0; then AC_MSG_RESULT([$PYTHON_INCLUDES]) else AC_MSG_RESULT([failed, will try another way]) py_prefix=`$PYTHON -c "import sys; print(sys.prefix)"` py_exec_prefix=`$PYTHON -c "import sys; print(sys.exec_prefix)"` PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}" if test "$py_prefix" != "$py_exec_prefix"; then PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}" fi AC_MSG_NOTICE([setting python headers to $PYTHON_INCLUDES]) fi dnl check if the headers exist: AC_MSG_CHECKING([whether python headers are sufficient]) AC_SUBST(PYTHON_INCLUDES) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $PYTHON_INCLUDES" AC_TRY_CPP([#include ],dnl [AC_MSG_RESULT(yes) $1],dnl [AC_MSG_RESULT(no) $2]) CPPFLAGS="$save_CPPFLAGS" ]) comedilib-0.11.0/m4/libtool.m40000644000000000000000000112631112665545466012665 00000000000000# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ]) # serial 58 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_PREPARE_CC_BASENAME # ----------------------- m4_defun([_LT_PREPARE_CC_BASENAME], [ # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in @S|@*""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } ])# _LT_PREPARE_CC_BASENAME # _LT_CC_BASENAME(CC) # ------------------- # It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, # but that macro is also expanded into generated libtool script, which # arranges for $SED and $ECHO to be set by different means. m4_defun([_LT_CC_BASENAME], [m4_require([_LT_PREPARE_CC_BASENAME])dnl AC_REQUIRE([_LT_DECL_SED])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl func_cc_basename $1 cc_basename=$func_cc_basename_result ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl m4_require([_LT_CMD_TRUNCATE])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from 'configure', and 'config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # 'config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain=$ac_aux_dir/ltmain.sh ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the 'libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to 'config.status' so that its # declaration there will have the same value as in 'configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags='_LT_TAGS'dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into 'config.status', and then the shell code to quote escape them in # for loops in 'config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # '#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test 0 = "$lt_write_fail" && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ '$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test 0 != $[#] do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try '$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try '$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test yes = "$silent" && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 _LT_COPYING _LT_LIBTOOL_TAGS # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE _LT_PREPARE_MUNGE_PATH_LIST _LT_PREPARE_CC_BASENAME # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS=$save_LDFLAGS ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; 10.[[012]][[,.]]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test yes = "$lt_cv_ld_force_load"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" m4_if([$1], [CXX], [ if test yes != "$lt_cv_apple_cc_single_mod"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script that will find a shell with a builtin # printf (that we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case $ECHO in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], [Search for dependent libraries within DIR (or the compiler's sysroot if not specified).])], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([$with_sysroot]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and where our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test no = "$enable_libtool_lock" || 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 what ABI is being produced by ac_compile, and set mode # options accordingly. 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 what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test yes = "$lt_cv_prog_gnu_ld"; 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* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then emul=elf case `/usr/bin/file conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `/usr/bin/file conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `/usr/bin/file conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*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-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test yes = "[$]$2"; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS ]) if test yes = "[$]$2"; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n "$lt_cv_sys_max_cmd_len"; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes = "$cross_compiling"; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen=shl_load], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen=dlopen], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) ]) ]) ]) ]) ]) ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links=nottested if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; 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 no = "$hard_links"; then AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", [Define to the sub-directory where libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then # We can hardcode non-existent directories. if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && # 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 no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_PREPARE_MUNGE_PATH_LIST # --------------------------- # Make sure func_munge_path_list() is defined correctly. m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], [[# func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x@S|@2 in x) ;; *:) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" ;; x:*) eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; *::*) eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" ;; *) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; esac } ]])# _LT_PREPARE_PATH_LIST # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown AC_ARG_VAR([LT_SYS_LIBRARY_PATH], [User-defined run-time library search path.]) case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; 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 # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # 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' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a[(]lib.so.V[)]' # 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' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # 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 dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi 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 shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], [Detected run-time system search path for libraries]) _LT_DECL([], [configure_time_lt_sys_library_path], [2], [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program that can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$1"; then lt_cv_path_MAGIC_CMD=$ac_dir/"$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac]) MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program that can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test no = "$withval" || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], [if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi]) rm -f conftest.i conftest2.i conftest.out]) ])# _LT_PATH_DD # _LT_CMD_TRUNCATE # ---------------- # find command to truncate a binary pipe m4_defun([_LT_CMD_TRUNCATE], [m4_require([_LT_PATH_DD]) AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], [printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) _LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], [Command to truncate a binary pipe]) ])# _LT_CMD_TRUNCATE # _LT_CHECK_MAGIC_METHOD # ---------------------- # how to check for library dependencies # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_MAGIC_METHOD], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) AC_CACHE_CHECK([how to recognize dependent libraries], lt_cv_deplibs_check_method, [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 # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[[4-9]]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[[45]]*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi]) if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # _LT_DLL_DEF_P([FILE]) # --------------------- # True iff FILE is a Windows DLL '.def' file. # Keep in sync with func_dll_def_p in the libtool script AC_DEFUN([_LT_DLL_DEF_P], [dnl test DEF = "`$SED -n dnl -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl -e q dnl Only consider the first "real" line $1`" dnl ])# _LT_DLL_DEF_P # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM=-lm) ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test yes = "$GCC"; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1], [Transform the output of nm into a list of symbols to manually relocate]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([nm_interface], [lt_cv_nm_interface], [1], [The name lister interface]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' if test ia64 != "$host_cpu"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64, which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test yes = "$GCC"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd* | bitrig*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; 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 GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | 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 # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; 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 yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS=$save_LDFLAGS]) if test yes = "$lt_cv_irix_exported_symbol"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi _LT_TAGVAR(link_all_deplibs, $1)=no else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(ld_shlibs, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; osf3*) if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test yes = "$GCC"; then wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test yes,yes = "$GCC,$enable_shared"; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting $shlibpath_var if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC=$CC AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report what library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && 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 yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac 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 yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC=$lt_save_CC ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test no != "$CXX" && ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || (test g++ != "$CXX"))); then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_caught_CXX_error"; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test yes = "$GXX"; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test yes = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='$wl' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; 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 # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GXX"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag=$shared_flag' $wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; 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 yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. # The "-G" linker flag allows undefined symbols. _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ func_to_tool_file "$lt_outputfile"~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require '-G' NOT '-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(GCC, $1)=$GXX _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test yes != "$_lt_caught_CXX_error" AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case @S|@2 in .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $prev$p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test x-L = "$p" || test x-R = "$p"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test no = "$pre_test_object_deps_done"; then case $prev in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)=$prev$p else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test no = "$pre_test_object_deps_done"; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)=$p else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)=$p else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test no = "$F77"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_F77"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && 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 yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac 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 yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$G77 _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_F77" AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test no = "$FC"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_FC"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && 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 yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac 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 yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_FC" AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code=$lt_simple_compile_test_code # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f "$lt_ac_sed" && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test 10 -lt "$lt_ac_count" && break lt_ac_count=`expr $lt_ac_count + 1` if test "$lt_ac_count" -gt "$lt_ac_max"; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine what file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS comedilib-0.11.0/m4/lt~obsolete.m40000644000000000000000000001375612426145276013570 00000000000000# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) comedilib-0.11.0/m4/ltsugar.m40000644000000000000000000001042412426145276012664 00000000000000# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) comedilib-0.11.0/m4/ltversion.m40000644000000000000000000000127312665545466013244 00000000000000# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 4179 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.6]) m4_define([LT_PACKAGE_REVISION], [2.4.6]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.6' macro_revision='2.4.6' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) comedilib-0.11.0/doc/0000755000000000000000000000000013162722664011245 500000000000000comedilib-0.11.0/doc/comedilib.xml0000644000000000000000000000672112531610141013625 00000000000000 %comedilib_entities; ]>
Comedi The Control and Measurement Device Interface handbook for Comedilib &comedilib_version; David Schleef ds@schleef.org Frank Mori Hess fmhess@users.sourceforge.net Herman Bruyninckx Herman.Bruyninckx@mech.kuleuven.ac.be Bernd Porr tech@linux-usb-daq.co.uk Ian Abbott abbotti@mev.co.uk Éric Piel piel@delmic.com 1998-2003 David Schleef 2001-2003, 2005, 2008 Frank Mori Hess 2002-2003 Herman Bruyninckx 2012 Bernd Porr 2012 Ian Abbott 2012, 2015 Éric Piel &comedi; is a free software project to interface digital acquisition (DAQ) cards. It is the combination of three complementary software items: (i) a generic, device-independent API, (ii) a collection of Linux kernel modules that implement this API for a wide range of cards, and (iii) a Linux user space library with a developer-oriented programming interface to configure and use the cards. This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. This library 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, version 2.1 of the License. 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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.
comedilib-0.11.0/doc/Makefile.am0000644000000000000000000001040512715406005013210 00000000000000 XML = calibration_funcref.xml command_funcref.xml dio_funcref.xml \ deprecated_funcref.xml error_funcref.xml extensions_funcref.xml \ drivers.xml funcref.xml glossary.xml \ install.xml intro.xml other.xml reference.xml tutorial.xml \ driverwriting.xml comedilib.xml bindings.xml comedilib.ent TUTORIALS = $(srcdir)/../demo/tut1.c $(srcdir)/../demo/tut2.c \ $(srcdir)/../demo/tut3.c EXTRA_DIST = $(XML) calibration_funcref.txt command_funcref.txt dio_funcref.txt \ deprecated_funcref.txt error_funcref.txt extensions_funcref.txt \ funcref mkref drivers.txt mkdr FAQ \ acq-seq.gif doc_html man comedilib_html_config.xsl \ comedilib_dblatex_config.xsl \ comedilib.css BUILT_SOURCES = calibration_funcref.xml command_funcref.xml dio_funcref.xml \ deprecated_funcref.xml error_funcref.xml extensions_funcref.xml \ funcref.xml drivers.xml bindings.xml if HAVE_XMLTO all_html = $(srcdir)/doc_html install_html = install_html uninstall_html = uninstall_html all_man = $(srcdir)/man install_man = install_man uninstall_man = uninstall_man else all_html = install_html = uninstall_html = all_man = install_man = uninstall_man = endif if BUILD_PDF dist_pdf_DATA = $(srcdir)/pdf/comedilib.pdf else dist_pdf_DATA = endif if BUILD_PDF_USING_DBLATEX XMLTO_PDF_OPTS = --with-dblatex -p "-p $(abs_srcdir)/comedilib_dblatex_config.xsl" else if BUILD_PDF_USING_FOP XMLTO_PDF_OPTS = --with-fop else XMLTO_PDF_OPTS = endif endif all-local: $(all_html) $(all_man) install-data-local: $(install_html) $(install_man) uninstall-local: $(uninstall_html) $(uninstall_man) #named this doc_html to avoid phony html target that is automatically generated #(at least by automake1.8) $(srcdir)/doc_html: $(XML) $(TUTORIALS) comedilib_html_config.xsl { $(XMLTO) -o $(srcdir)/doc_html -m $(srcdir)/comedilib_html_config.xsl --skip-validation html $(srcdir)/comedilib.xml && \ (cd $(srcdir)/doc_html && $(LN_S) -f ../comedilib.css . && $(LN_S) -f ../acq-seq.gif .) && \ touch $(srcdir)/doc_html;} || \ { $(RM) -r $(srcdir)/doc_html; exit 1; } install_html: $(mkdir_p) $(DESTDIR)$(htmldir)/html chmod u+w $(DESTDIR)$(htmldir)/html for each in $(srcdir)/doc_html/*.html $(srcdir)/*.gif $(srcdir)/*.css; do \ $(INSTALL_DATA) $$each $(DESTDIR)$(htmldir)/html ; done uninstall_html: for each in $(srcdir)/doc_html/*.html $(srcdir)/*.gif $(srcdir)/*.css; do \ $(RM) $(DESTDIR)$(htmldir)/html/`basename $$each` ; done $(srcdir)/man: $(XML) { $(XMLTO) -o $(srcdir)/man --skip-validation man $(srcdir)/comedilib.xml && touch $(srcdir)/man; } || { $(RM) -r $(srcdir)/man; exit 1; } install_man: $(mkdir_p) -m 755 $(DESTDIR)$(mandir)/man3 chmod u+w $(DESTDIR)$(mandir)/man3 for each in `find $(srcdir)/man/ -name '*.3'`; do $(INSTALL_DATA) $$each $(DESTDIR)$(mandir)/man3 ; done uninstall_man: for each in `find $(srcdir)/man/ -name '*.3'`; do $(RM) $(DESTDIR)$(mandir)/man3/`basename $$each` ; done $(srcdir)/pdf/comedilib.pdf: $(XML) $(TUTORIALS) comedilib_dblatex_config.xsl $(XMLTO) -o $(srcdir)/pdf --skip-validation $(XMLTO_PDF_OPTS) pdf $(srcdir)/comedilib.xml funcref.xml: funcref mkref $(srcdir)/mkref $(srcdir)/funcref >$(srcdir)/funcref.xml calibration_funcref.xml: calibration_funcref.txt mkref $(srcdir)/mkref $(srcdir)/calibration_funcref.txt >$(srcdir)/calibration_funcref.xml command_funcref.xml: command_funcref.txt mkref $(srcdir)/mkref $(srcdir)/command_funcref.txt >$(srcdir)/command_funcref.xml dio_funcref.xml: dio_funcref.txt mkref $(srcdir)/mkref $(srcdir)/dio_funcref.txt >$(srcdir)/dio_funcref.xml deprecated_funcref.xml: deprecated_funcref.txt mkref $(srcdir)/mkref $(srcdir)/deprecated_funcref.txt >$(srcdir)/deprecated_funcref.xml error_funcref.xml: error_funcref.txt mkref $(srcdir)/mkref $(srcdir)/error_funcref.txt >$(srcdir)/error_funcref.xml extensions_funcref.xml: extensions_funcref.txt mkref $(srcdir)/mkref $(srcdir)/extensions_funcref.txt >$(srcdir)/extensions_funcref.xml drivers.xml: drivers.txt mkdr $(srcdir)/mkdr $(srcdir)/drivers.txt >$(srcdir)/drivers.xml maintainer-clean-local: $(RM) -r $(srcdir)/doc_html $(srcdir)/man $(srcdir)/pdf locales = de messages: .phony xgettext -k_ -k_s `find .. -name '*.c'` for i in $(locales);do \ msgmerge po/$$i.po messages.po -o $$i.po; \ mkdir -p locale/$$i/LC_MESSAGES; \ msgfmt $$i.po -o locale/$$i/LC_MESSAGES/comedilib.mo; \ done comedilib-0.11.0/doc/error_funcref.xml0000644000000000000000000002165712426145501014552 00000000000000 %comedilib_entities; ]>
Error reporting comedi_errno 3 Comedi Comedi reference comedi_errno number of last Comedilib error #include <comedilib.h> int comedi_errno Description When a Comedilib function fails, it usually returns -1 or NULL, depending on the return type. An internal library variable stores an error number, which can be retrieved by calling comedi_errno This error number can be converted to a human-readable form by the functions comedi_perror and comedi_strerror. These functions are intended to mimic the behavior of the standard C library functions perror, strerror, and errno. In particular, Comedilib functions sometimes return an error that is generated inside the C library; the comedi error message in this case is the same as the C library. The function comedi_errno returns an integer describing the most recent Comedilib error. This integer may be used as the errnum parameter for comedi_strerror. comedi_loglevel 3 Comedi Comedi reference comedi_loglevel change Comedilib logging properties #include <comedilib.h> int comedi_loglevel int loglevel Description This function affects the output of debugging and error messages from Comedilib. By increasing the log level loglevel, additional debugging information will be printed. Error and debugging messages are printed to the standard error output stream stderr. The default loglevel can be set by using the environment variable COMEDI_LOGLEVEL. The default log level is 1. In order to conserve resources, some debugging information is disabled by default when Comedilib is compiled. The meaning of the log levels is as follows: Loglevel Behavior 0 Comedilib prints nothing. 1 (default) Comedilib prints error messages when there is a self-consistency error (i.e., an internal bug.) 2 Comedilib prints an error message when an invalid parameter is passed. 3 Comedilib prints an error message whenever an error is generated in the Comedilib library or in the C library, when called by Comedilib. 4 Comedilib prints a lot of junk. Return value This function returns the previous log level. comedi_perror 3 Comedi Comedi reference comedi_perror print a Comedilib error message #include <comedilib.h> void comedi_perror const char * s Description When a Comedilib function fails, it usually returns -1 or NULL, depending on the return type. An internal library variable stores an error number, which can be retrieved with comedi_errno. This error number can be converted to a human-readable form by the functions comedi_perror or comedi_strerror. These functions are intended to mimic the behavior of the standard C library functions perror, strerror, and errno. In particular, Comedilib functions sometimes return an error that is generated inside the C library; the comedi error message in this case is the same as the C library. The function comedi_perror prints an error message to the standard error output stream stderr. The error message consists of the argument string s, a colon, a space, a description of the error condition, and a new line. comedi_strerror 3 Comedi Comedi reference comedi_strerror return string describing Comedilib error code #include <comedilib.h> const char * comedi_strerror int errnum Description When a Comedilib function fails, it usually returns -1 or NULL, depending on the return type. An internal library variable stores an error number, which can be retrieved with comedi_errno. This error number can be converted to a human-readable form by the functions comedi_perror or comedi_strerror. These functions are intended to mimic the behavior of the standard C library functions perror, strerror, and errno. In particular, Comedilib functions sometimes return an error that is generated inside the C library; the comedi error message in this case is the same as the C library. The function comedi_strerror returns a pointer to a character string describing the Comedilib error errnum. The returned string may be modified by a subsequent call to a strerr or perror function (either the libc or Comedilib versions). An unrecognized error number will return a pointer to the string undefined error, or similar.
comedilib-0.11.0/doc/man/0000755000000000000000000000000013105044034012001 500000000000000comedilib-0.11.0/doc/man/comedi_errno.30000644000000000000000000000732313105044024014456 00000000000000'\" t .\" Title: comedi_errno .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_ERRNO" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_errno \- number of last Comedilib error .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_errno('u .BI "int comedi_errno(void);" .SH "DESCRIPTION" .PP When a Comedilib function fails, it usually returns \-1 or \fBNULL\fR, depending on the return type\&. An internal library variable stores an error number, which can be retrieved by calling \fBcomedi_errno\fR This error number can be converted to a human\-readable form by the functions \fBcomedi_perror\fR and \fBcomedi_strerror\fR\&. .PP These functions are intended to mimic the behavior of the standard C library functions \fBperror\fR, \fBstrerror\fR, and \fIerrno\fR\&. In particular, Comedilib functions sometimes return an error that is generated inside the C library; the comedi error message in this case is the same as the C library\&. .PP The function \fBcomedi_errno\fR returns an integer describing the most recent Comedilib error\&. This integer may be used as the \fIerrnum\fR parameter for \fBcomedi_strerror\fR\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_get_board_name.30000644000000000000000000000633213105044005016255 00000000000000'\" t .\" Title: comedi_get_board_name .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_BOARD_NAM" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_get_board_name \- Comedi device name .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'const\ char\ *\ comedi_get_board_name('u .BI "const\ char\ * comedi_get_board_name(comedi_t\ *\ " "device" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_get_board_name\fR returns a pointer to a string containing the name of the comedi device represented by \fIdevice\fR\&. This pointer is valid until the device is closed\&. This function returns \fBNULL\fR if there is an error\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_do_insnlist.30000644000000000000000000000666213105044003015660 00000000000000'\" t .\" Title: comedi_do_insnlist .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_DO_INSNLIST" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_do_insnlist \- perform multiple instructions .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_do_insnlist('u .BI "int comedi_do_insnlist(comedi_t\ *\ " "device" ", comedi_insnlist\ *\ " "list" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_do_insnlist\fR performs multiple Comedi instructions as part of one system call\&. This function can be used to avoid the overhead of multiple system calls\&. .SH "RETURN VALUE" .PP The function \fBcomedi_do_insnlist\fR returns the number of successfully completed instructions\&. Error information for the unsuccessful instruction is not available\&. If there is an error before the first instruction can be executed, \-1 is returned\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_dio_config.30000644000000000000000000000716413105044022015432 00000000000000'\" t .\" Title: comedi_dio_config .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_DIO_CONFIG" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_dio_config \- change input/output properties of channel .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_dio_config('u .BI "int comedi_dio_config(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "channel" ", unsigned\ int\ " "direction" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_dio_config\fR configures individual channels in a digital I/O subdevice to be either input or output, depending on the value of \fIdirection\fR\&. Valid directions are \fBCOMEDI_INPUT\fR or \fBCOMEDI_OUTPUT\fR\&. .PP Depending on the characteristics of the hardware device, multiple channels might be grouped together in hardware when configuring the input/output direction\&. In this case, a single call to \fBcomedi_dio_config\fR for any channel in the group will affect the entire group\&. .SH "RETURN VALUE" .PP If successful, 0 is returned, otherwise \-1\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_command.30000644000000000000000000000677613105044012014757 00000000000000'\" t .\" Title: comedi_command .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_COMMAND" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_command \- start streaming input/output .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_command('u .BI "int comedi_command(comedi_t\ *\ " "device" ", comedi_cmd\ *\ " "command" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_command\fR starts a streaming input or output\&. The command structure pointed to by \fIcommand\fR specifies settings for the acquisition\&. The command must be able to pass \fBcomedi_command_test\fR with a return value of 0, or \fBcomedi_command\fR will fail\&. For input subdevices, sample values are read using the function \fBread\fR on the device file descriptor\&. For output subdevices, sample values are written using the function \fBwrite\fR\&. .SH "RETURN VALUE" .PP On success, 0 is returned\&. On failure, \-1 is returned\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_data_read_hint.30000644000000000000000000000724013105044002016251 00000000000000'\" t .\" Title: comedi_data_read_hint .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_DATA_READ_HIN" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_data_read_hint \- tell driver which channel/range/aref you are going to read from next .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_data_read_hint('u .BI "int comedi_data_read_hint(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "channel" ", unsigned\ int\ " "range" ", unsigned\ int\ " "aref" ");" .SH "DESCRIPTION" .PP Used to prepare an analog input for a subsequent call to \fBcomedi_data_read\fR\&. It is not necessary to use this function, but it can be useful for eliminating inaccuracies caused by insufficient settling times when switching the channel or gain on an analog input\&. This function sets an analog input to the channel, range, and aref specified but does not perform an actual analog to digital conversion\&. .PP Alternatively, one can simply use \fBcomedi_data_read_delayed\fR, which sets up the input, pauses to allow settling, then performs a conversion\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_dio_read.30000644000000000000000000000733013105044023015074 00000000000000'\" t .\" Title: comedi_dio_read .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_DIO_READ" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_dio_read \- read single bit from digital channel .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_dio_read('u .BI "int comedi_dio_read(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "channel" ", unsigned\ int\ *\ " "bit" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_dio_read\fR reads the channel \fIchannel\fR belonging to the subdevice \fIsubdevice\fR of device \fIdevice\fR\&. The data value that is read is stored in the *\fIbit\fR\&. This function is equivalent to: .sp .if n \{\ .RS 4 .\} .nf comedi_data_read(device, subdevice, channel, 0, 0, bit); .fi .if n \{\ .RE .\} .sp This function does not require a digital subdevice or a subdevice with a maximum data value of 1 to work properly\&. .PP If you wish to read multiple digital channels at once, it is more efficient to use \fBcomedi_dio_bitfield2\fR than to call this function multiple times\&. .SH "RETURN VALUE" .PP Return values and errors are the same as \fBcomedi_data_read\fR\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_data_read.30000644000000000000000000001074613105044001015233 00000000000000'\" t .\" Title: comedi_data_read .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_DATA_READ" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_data_read \- read single sample from channel .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_data_read('u .BI "int comedi_data_read(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "channel" ", unsigned\ int\ " "range" ", unsigned\ int\ " "aref" ", lsampl_t\ *\ " "data" ");" .SH "DESCRIPTION" .PP Reads a single sample on the channel specified by the Comedi device \fIdevice\fR, the subdevice \fIsubdevice\fR, and the channel \fIchannel\fR\&. For the A/D conversion (if appropriate), the device is configured to use range specification \fIrange\fR and (if appropriate) analog reference type \fIaref\fR\&. Analog reference types that are not supported by the device are silently ignored\&. .PP The function \fBcomedi_data_read\fR reads one data value from the specified channel and stores the value in *\fIdata\fR\&. .PP WARNING: \fBcomedi_data_read\fR does not do any pausing to allow multiplexed analog inputs to settle before starting an analog to digital conversion\&. If you are switching between different channels and need to allow your analog input to settle for an accurate reading, use \fBcomedi_data_read_delayed\fR, or set the input channel at an earlier time with \fBcomedi_data_read_hint\fR\&. .PP Data values returned by this function are unsigned integers less than or equal to the maximum sample value of the channel, which can be determined using the function \fBcomedi_get_maxdata\fR\&. Conversion of data values to physical units can be performed by the functions \fBcomedi_to_phys\fR (linear conversion) or \fBcomedi_to_physical\fR (non\-linear polynomial conversion)\&. .SH "RETURN VALUE" .PP On success, \fBcomedi_data_read\fR returns 1 (the number of samples read)\&. If there is an error, \-1 is returned\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_disarm.30000644000000000000000000000670713105044026014617 00000000000000'\" t .\" Title: comedi_disarm .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_DISARM" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_disarm \- disarm a subdevice .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_disarm('u .BI "int comedi_disarm(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ");" .SH "STATUS" .PP alpha .SH "DESCRIPTION" .PP This function disarms a subdevice\&. It may, for example, stop a counter counting\&. This function is only useable on subdevices that provide support for the \fBINSN_CONFIG_DISARM\fR configuration instruction\&. Some subdevices treat this as an instruction to disarm a specific channel\&. For those subdevices, this function will disarm channel 0 and \fBcomedi_disarm_channel\fR should be called instead of this one to specify the channel\&. .SH "RETURN VALUE" .PP 0 on success, \-1 on error\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_get_buffer_contents.30000644000000000000000000000675013105044013017357 00000000000000'\" t .\" Title: comedi_get_buffer_contents .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_BUFFER_CO" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_get_buffer_contents \- streaming buffer status .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_get_buffer_contents('u .BI "int comedi_get_buffer_contents(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_get_buffer_contents\fR is used on a subdevice that has a Comedi command in progress to get the number of unread bytes\&. For a streaming input command, this is the number of bytes that can be read\&. For a streaming output command, subtracting this from the buffer size gives the space available to be written\&. .SH "RETURN VALUE" .PP On success, \fBcomedi_get_buffer_contents\fR returns the number of unread bytes in the buffer\&. On failure, \-1 is returned\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_find_range.30000644000000000000000000000672413105044004015427 00000000000000'\" t .\" Title: comedi_find_range .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_FIND_RANGE" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_find_range \- search for range .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_find_range('u .BI "int comedi_find_range(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "channel" ", unsigned\ int\ " "unit" ", double\ " "min" ", double\ " "max" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_find_range\fR tries to locate the optimal (smallest) range for the channel \fIchannel\fR belonging to subdevice \fIsubdevice\fR of the comedi device \fIdevice\fR, that includes both \fImin\fR and \fImax\fR in units of \fIunit\fR\&. .SH "RETURN VALUE" .PP If a matching range is found, the index of the matching range is returned\&. If no matching range is available, the function returns \-1\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_from_phys.30000644000000000000000000000711613105044004015335 00000000000000'\" t .\" Title: comedi_from_phys .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_FROM_PHYS" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_from_phys \- convert physical units to sample .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'lsampl_t\ comedi_from_phys('u .BI "lsampl_t comedi_from_phys(double\ " "data" ", comedi_range\ *\ " "range" ", lsampl_t\ " "maxdata" ");" .SH "DESCRIPTION" .PP Converts parameter \fIdata\fR given in physical units (\fBdouble\fR) into sample values (\fBlsampl_t\fR, between 0 and maxdata)\&. The parameter \fIrange\fR represents the conversion information to use, and the parameter \fImaxdata\fR represents the maximum possible data value for the channel that the data will be written to\&. The mapping between physical units and raw data is linear and assumes that the converter has ideal characteristics\&. .PP Conversion is not affected by out\-of\-range behavior\&. Out\-of\-range data parameters are silently truncated to the range 0 to \fImaxdata\fR\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_get_buffer_size.30000644000000000000000000000644713105044014016500 00000000000000'\" t .\" Title: comedi_get_buffer_size .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_BUFFER_SI" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_get_buffer_size \- streaming buffer size of subdevice .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_get_buffer_size('u .BI "int comedi_get_buffer_size(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_get_buffer_size\fR returns the size (in bytes) of the streaming buffer for the subdevice specified by \fIdevice\fR and \fIsubdevice\fR\&. .SH "RETURN VALUE" .PP On success, \fBcomedi_get_buffer_size\fR returns the size of the buffer in bytes\&. On failure, \-1 is returned\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_cleanup_calibration.30000644000000000000000000000640613105044021017325 00000000000000'\" t .\" Title: comedi_cleanup_calibration .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_CLEANUP_CALIB" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_cleanup_calibration \- free calibration resources .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'void\ comedi_cleanup_calibration('u .BI "void comedi_cleanup_calibration(comedi_calibration_t\ *\ " "calibration" ");" .SH "STATUS" .PP alpha .SH "DESCRIPTION" .PP This function frees the resources associated with a \fBcomedi_calibration_t\fR obtained from \fBcomedi_parse_calibration_file\fR\&. The \fBcomedi_calibration_t\fR pointed to by \fIcalibration\fR can not be used again after calling this function\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_disarm_channel.30000644000000000000000000000677313105044026016312 00000000000000'\" t .\" Title: comedi_disarm_channel .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_DISARM_CHANNE" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_disarm_channel \- disarm a subdevice channel .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_disarm_channel('u .BI "int comedi_disarm_channel(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "channel" ");" .SH "STATUS" .PP alpha .SH "DESCRIPTION" .PP This function disarms a specified channel of a subdevice\&. It may, for example, stop a counter counting\&. This function is only useable on subdevices that provide support for the \fBINSN_CONFIG_DISARM\fR configuration instruction\&. Some subdevices treat this as an instruction to disarm the whole subdevice and ignore the specified channel\&. For such subdevices, \fBcomedi_disarm\fR is normally called instead\&. .SH "RETURN VALUE" .PP 0 on success, \-1 on error\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_get_buffer_read_count.30000644000000000000000000000657213105044014017650 00000000000000'\" t .\" Title: comedi_get_buffer_read_count .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_BUFFER_RE" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_get_buffer_read_count \- streaming buffer read count .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_get_buffer_read_count('u .BI "int comedi_get_buffer_read_count(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ *\ " "read_count" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_get_buffer_read_count\fR is used on a subdevice that has a Comedi command in progress to get the number of bytes that have been read from the buffer, modulo \fBUINT_MAX\fR + 1\&. The value is stored in *\fIread_count\fR\&. .SH "RETURN VALUE" .PP On success, 0 is returned\&. On failure, \-1 is returned\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_data_read_delayed.30000644000000000000000000000746113105044002016723 00000000000000'\" t .\" Title: comedi_data_read_delayed .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_DATA_READ_DEL" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_data_read_delayed \- read single sample from channel after delaying for specified settling time .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_data_read_delayed('u .BI "int comedi_data_read_delayed(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "channel" ", unsigned\ int\ " "range" ", unsigned\ int\ " "aref" ", lsampl_t\ *\ " "data" ", unsigned\ int\ " "nanosec" ");" .SH "DESCRIPTION" .PP Similar to \fBcomedi_data_read\fR except it will wait for the specified number of nanoseconds between setting the input channel and taking a sample\&. For analog inputs, most boards have a single analog to digital converter which is multiplexed to be able to read multiple channels\&. If the input is not allowed to settle after the multiplexer switches channels, the reading will be inaccurate\&. This function is useful for allowing a multiplexed analog input to settle when switching channels\&. .PP Although the settling time is specified in nanoseconds, the actual settling time will be rounded up to the nearest microsecond\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_set_global_oor_behavior.30000644000000000000000000000707713105044011020204 00000000000000'\" t .\" Title: comedi_set_global_oor_behavior .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_SET_GLOBAL_OO" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_set_global_oor_behavior \- out\-of\-range behavior .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'enum\ comedi_oor_behavior\ comedi_set_global_oor_behavior('u .BI "enum\ comedi_oor_behavior comedi_set_global_oor_behavior(enum\ comedi_oor_behavior\ " "behavior" ");" .SH "DESCRIPTION" .PP This function changes the Comedilib out\-of\-range behavior\&. This currently affects the behavior of \fBcomedi_to_phys\fR when converting endpoint sample values, that is, sample values equal to 0 or \fImaxdata\fR\&. If the out\-of\-range behavior is set to \fBCOMEDI_OOR_NAN\fR, endpoint values are converted to \fBNAN\fR\&. If the out\-of\-range behavior is set to \fBCOMEDI_OOR_NUMBER\fR, the endpoint values are converted similarly to other values\&. .SH "RETURN VALUE" .PP The previous out\-of\-range behavior is returned\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_parse_calibration_file.30000644000000000000000000000735113105044022020010 00000000000000'\" t .\" Title: comedi_parse_calibration_file .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_PARSE_CALIBRA" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_parse_calibration_file \- load contents of calibration file .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'comedi_calibration_t\ *\ comedi_parse_calibration_file('u .BI "comedi_calibration_t\ * comedi_parse_calibration_file(const\ char\ *\ " "file_path" ");" .SH "STATUS" .PP alpha .SH "DESCRIPTION" .PP This function parses a calibration file (produced by the \fBcomedi_calibrate\fR or \fBcomedi_soft_calibrate\fR programs) and returns a pointer to a \fBcomedi_calibration_t\fR which can be passed to the \fBcomedi_apply_parsed_calibration\fR or \fBcomedi_get_softcal_converter\fR functions\&. When you are finished using the \fBcomedi_calibration_t\fR, you should call \fBcomedi_cleanup_calibration\fR to free the resources associated with the \fBcomedi_calibration_t\fR\&. .PP The \fBcomedi_get_default_calibration_path\fR function may be useful in conjunction with this function\&. .SH "RETURN VALUE" .PP A pointer to parsed calibration information on success, or \fBNULL\fR on failure\&. .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_get_cmd_generic_timed.30000644000000000000000000000752213105044015017612 00000000000000'\" t .\" Title: comedi_get_cmd_generic_timed .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_CMD_GENER" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_get_cmd_generic_timed \- streaming input/output capabilities .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_get_cmd_generic_timed('u .BI "int comedi_get_cmd_generic_timed(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", comedi_cmd\ *\ " "command" ", unsigned\ int\ " "chanlist_len" ", unsigned\ int\ " "scan_period_ns" ");" .SH "DESCRIPTION" .PP The command capabilities of the subdevice indicated by the parameters \fIdevice\fR and \fIsubdevice\fR are probed, and the results placed in the command structure pointed to by the parameter \fIcommand\fR\&. The command structure pointed to by \fIcommand\fR is modified to be a valid command that can be used as a parameter to \fBcomedi_command\fR (after the command has additionally been assigned a valid \fIchanlist\fR array)\&. The command measures scans consisting of \fIchanlist_len\fR channels at a scan rate that corresponds to a period of \fIscan_period_ns\fR nanoseconds\&. The rate is adjusted to a rate that the device can handle\&. .SH "RETURN VALUE" .PP On success, 0 is returned\&. On failure, \-1 is returned\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_get_softcal_converter.30000644000000000000000000001177213105044022017713 00000000000000'\" t .\" Title: comedi_get_softcal_converter .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_SOFTCAL_C" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_get_softcal_converter \- get converter for software\-calibrated subdevice .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_get_softcal_converter('u .BI "int comedi_get_softcal_converter(unsigned\ " "subdevice" ", unsigned\ " "channel" ", unsigned\ " "range" ", enum\ comedi_conversion_direction\ " "direction" ", const\ comedi_calibration_t\ *\ " "parsed_calibration" ", comedi_polynomial_t\ *\ " "converter" ");" .SH "STATUS" .PP alpha .SH "DESCRIPTION" .PP The function \fBcomedi_get_softcal_converter\fR initializes the \fBcomedi_polynomial_t\fR pointed to by \fIconverter\fR so it can be passed to either \fBcomedi_to_physical\fR or \fBcomedi_from_physical\fR\&. The \fBcomedi_polynomial_t\fR pointed to by \fIconverter\fR can then be used to convert data for the specified \fIsubdevice\fR, \fIchannel\fR, and \fIrange\fR\&. The \fIdirection\fR parameter specifies whether \fIconverter\fR will be passed to \fBcomedi_to_physical\fR or \fBcomedi_from_physical\fR\&. The \fIparsed_calibration\fR parameter points to the software calibration values for your device, and may be obtained by calling \fBcomedi_parse_calibration_file\fR on a calibration file generated by the \fBcomedi_soft_calibrate\fR program\&. .PP This function is only useful for boards that perform their calibrations in software on the host computer\&. A subdevice will advertise the fact that it depends on a software calibration with the \fBSDF_SOFT_CALIBRATED\fR subdevice flag\&. .PP Whether or not the result of this function actually depends on the \fIchannel\fR parameter is hardware dependent\&. For example, the calibration of a multiplexed analog input will typically not depend on the channel, only the range\&. Analog outputs will typically use different calibrations for each output channel\&. .PP Software calibrations are implemented as polynomials (up to third order)\&. Since the inverse of a polynomial of order higher than one can\*(Aqt be represented exactly as another polynomial, you may not be able to get converters for the \(lqreverse\(rq direction\&. For example, you may be able to get a converter for an analog input in the \fBCOMEDI_TO_PHYSICAL\fR direction, but not in the \fBCOMEDI_FROM_PHYSICAL\fR direction\&. .SH "RETURN VALUE" .PP Returns 0 on success, \-1 on failure\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_get_buffer_read_offset.30000644000000000000000000000720713105044013020001 00000000000000'\" t .\" Title: comedi_get_buffer_read_offset .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_BUFFER_RE" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_get_buffer_read_offset \- streaming buffer read offset .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_get_buffer_read_offset('u .BI "int comedi_get_buffer_read_offset(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_get_buffer_read_offset\fR is used on a subdevice that has a Comedi command in progress to get the current read position in the streaming buffer as an offset in bytes from the start of the buffer\&. The position will wrap around to 0 when it reaches the buffer size\&. This offset is only useful for memory mapped buffers\&. .PP This function replaces \fBcomedi_get_buffer_offset\fR and has the same functionality\&. .SH "RETURN VALUE" .PP On success, \fBcomedi_get_buffer_read_offset\fR returns the current read position as an offset in bytes from the start of the buffer\&. On failure, \-1 is returned\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_range_is_chan_specific.30000644000000000000000000000632313105044011017751 00000000000000'\" t .\" Title: comedi_range_is_chan_specific .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_RANGE_IS_CHAN" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_range_is_chan_specific \- range information depends on channel .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_range_is_chan_specific('u .BI "int comedi_range_is_chan_specific(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ");" .SH "DESCRIPTION" .PP If each channel of the specified subdevice may have different range information, this function returns 1\&. Otherwise, this function returns 0\&. On error, this function returns \-1\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_get_hardcal_converter.30000644000000000000000000001063313105044021017650 00000000000000'\" t .\" Title: comedi_get_hardcal_converter .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_HARDCAL_C" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_get_hardcal_converter \- get converter for hardware\-calibrated subdevice .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_get_hardcal_converter('u .BI "int comedi_get_hardcal_converter(comedi_t\ *\ " "device" ", unsigned\ " "subdevice" ", unsigned\ " "channel" ", unsigned\ " "range" ", enum\ comedi_conversion_direction\ " "direction" ", comedi_polynomial_t\ *\ " "converter" ");" .SH "STATUS" .PP alpha .SH "DESCRIPTION" .PP The function \fBcomedi_get_hardcal_converter\fR initializes the \fBcomedi_polynomial_t\fR pointed to by \fIconverter\fR so it can be passed to either \fBcomedi_to_physical\fR, or \fBcomedi_from_physical\fR\&. The result can be used to convert data from the specified \fIsubdevice\fR, \fIchannel\fR, and \fIrange\fR\&. The \fIdirection\fR parameter specifies whether \fIconverter\fR will be passed to \fBcomedi_to_physical\fR or \fBcomedi_from_physical\fR\&. .PP This function initializes the \fBcomedi_polynomial_t\fR pointed to by \fIconverter\fR as a simple linear function with no calibration information, appropriate for boards which do their gain/offset/nonlinearity corrections in hardware\&. If your board needs calibration to be performed in software by the host computer, use \fBcomedi_get_softcal_converter\fR instead\&. A subdevice will advertise the fact that it depends on a software calibration with the \fBSDF_SOFT_CALIBRATED\fR subdevice flag\&. .PP The result of this function will only depend on the \fIchannel\fR parameter if either \fBcomedi_range_is_chan_specific\fR or \fBcomedi_maxdata_is_chan_specific\fR returns true for the specified \fIsubdevice\fR\&. .SH "RETURN VALUE" .PP Returns 0 on success, \-1 on failure\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_get_n_channels.30000644000000000000000000000632513105044006016301 00000000000000'\" t .\" Title: comedi_get_n_channels .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_N_CHANNEL" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_get_n_channels \- number of subdevice channels .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_get_n_channels('u .BI "int comedi_get_n_channels(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_get_n_channels\fR returns the number of channels of the subdevice \fIsubdevice\fR belonging to the comedi device \fIdevice\fR\&. This function returns \-1 on error and the Comedilib error value is set\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_dio_get_config.30000644000000000000000000000661213105044023016267 00000000000000'\" t .\" Title: comedi_dio_get_config .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_DIO_GET_CONFI" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_dio_get_config \- query input/output properties of channel .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_dio_get_config('u .BI "int comedi_dio_get_config(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "channel" ", unsigned\ int\ *\ " "direction" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_dio_get_config\fR queries the input/output configuration of an individual channel in a digital I/O subdevice (see \fBcomedi_dio_config\fR)\&. On success, *\fIdirection\fR will be set to either \fBCOMEDI_INPUT\fR or \fBCOMEDI_OUTPUT\fR\&. .SH "RETURN VALUE" .PP If successful, 0 is returned, otherwise \-1\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_data_write.30000644000000000000000000000730513105044002015450 00000000000000'\" t .\" Title: comedi_data_write .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_DATA_WRITE" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_data_write \- write single sample to channel .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_data_write('u .BI "int comedi_data_write(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "channel" ", unsigned\ int\ " "range" ", unsigned\ int\ " "aref" ", lsampl_t\ " "data" ");" .SH "DESCRIPTION" .PP Writes a single sample on the channel that is specified by the Comedi device \fIdevice\fR, the subdevice \fIsubdevice\fR, and the channel \fIchannel\fR\&. If appropriate, the device is configured to use range specification \fIrange\fR and analog reference type \fIaref\fR\&. Analog reference types that are not supported by the device are silently ignored\&. .PP The function \fBcomedi_data_write\fR writes the data value specified by the parameter \fIdata\fR to the specified channel\&. .SH "RETURN VALUE" .PP On success, \fBcomedi_data_write\fR returns 1 (the number of samples written)\&. If there is an error, \-1 is returned\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_do_insn.30000644000000000000000000000646313105044003014763 00000000000000'\" t .\" Title: comedi_do_insn .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_DO_INSN" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_do_insn \- perform instruction .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_do_insn('u .BI "int comedi_do_insn(comedi_t\ *\ " "device" ", comedi_insn\ *\ " "instruction" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_do_insn\fR performs a single instruction\&. .SH "RETURN VALUE" .PP If successful, returns a non\-negative number\&. For the case of \fBINSN_READ\fR or \fBINSN_WRITE\fR instructions, \fBcomedi_do_insn\fR returns the number of samples read or written, which may be less than the number requested\&. If there is an error, \-1 is returned\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_get_version_code.30000644000000000000000000000712513105044007016650 00000000000000'\" t .\" Title: comedi_get_version_code .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_VERSION_C" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_get_version_code \- Comedi version code .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_get_version_code('u .BI "int comedi_get_version_code(comedi_t\ *\ " "device" ");" .SH "DESCRIPTION" .PP Returns the Comedi kernel module version code\&. A valid Comedi device referenced by the parameter \fIdevice\fR is necessary to communicate with the kernel module\&. On error, \-1 is returned\&. .PP The version code is encoded as a bitfield of three 8\-bit numbers\&. For example, 0x00073d is the version code for version 0\&.7\&.61\&. .PP This function is of limited usefulness\&. A typical mis\-application of this function is to use it to determine if a certain feature is supported\&. If the application needs to know of the existence of a particular feature, an existence test function should be written and put in the Comedilib source\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_set_other_source.30000644000000000000000000001036013105044032016677 00000000000000'\" t .\" Title: comedi_set_other_source .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_SET_OTHER_SOU" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_set_other_source \- select source signal for something other than a gate or clock .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_set_other_source('u .BI "int comedi_set_other_source(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "channel" ", unsigned\ int\ " "other" ", unsigned\ int\ " "source" ");" .SH "STATUS" .PP alpha .SH "DESCRIPTION" .PP This function allows selection of a source signal for something on a subdevice other than a gate (which uses \fBcomedi_set_gate_source\fR) or a clock (which uses \fBcomedi_set_clock_source\fR)\&. The \fIother\fR parameter selects which \(lqother\(rq we are configuring, and is driver\-dependent\&. The \fIsource\fR parameter selects the source we which to use for the \(lqother\(rq\&. If the subdevice does not support configuring its \(lqother\(rq sources on a per\-channel basis, then the \fIchannel\fR parameter will be ignored\&. .PP As an example, this function is used to select which PFI digital input channels should be used as the A/B/Z signals when running a counter on an NI M\-Series board as a quadrature encoder\&. The \fIother\fR parameter selects either the A, B, or Z signal, and the \fIsource\fR parameter is used to specify which PFI digital input channel the external A, B, or Z signal is physically connected to\&. .PP This function is only useable on subdevices that provide support for the \fBINSN_CONFIG_SET_OTHER_SRC\fR configuration instruction\&. .SH "RETURN VALUE" .PP 0 on success, \-1 on error\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_digital_trigger_disable.30000644000000000000000000000672713105044025020164 00000000000000'\" t .\" Title: comedi_digital_trigger_disable .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_DIGITAL_TRIGG" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_digital_trigger_disable \- disable a digital trigger .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_digital_trigger_disable('u .BI "int comedi_digital_trigger_disable(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "trigger_id" ");" .SH "STATUS" .PP alpha .SH "DESCRIPTION" .PP This function disables a digital trigger on a subdevice, returning it to its default, inactive, unconfigured state\&. If the subdevice supports several digital triggers, the \fItrigger_id\fR selects one\&. .PP This function is only useable on subdevices that provide support for the \fBINSN_CONFIG_DIGITAL_TRIG\fR configuration instruction\&. .SH "RETURN VALUE" .PP 0 on success, \-1 on error\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_dio_bitfield2.30000644000000000000000000001012213105044022016015 00000000000000'\" t .\" Title: comedi_dio_bitfield2 .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_DIO_BITFIELD2" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_dio_bitfield2 \- read/write multiple digital channels .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_dio_bitfield2('u .BI "int comedi_dio_bitfield2(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "write_mask" ", unsigned\ int\ *\ " "bits" ", unsigned\ int\ " "base_channel" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_dio_bitfield2\fR allows multiple channels to be read or written together on a digital input, output, or configurable digital I/O device\&. The parameter \fIwrite_mask\fR and the value pointed to by \fIbits\fR are interpreted as bit fields, with the least significant bit representing channel \fIbase_channel\fR\&. For each bit in \fIwrite_mask\fR that is set to 1, the corresponding bit in *\fIbits\fR is written to the digital output channel\&. After writing all the output channels, each channel is read, and the result placed in the approprate bits in *\fIbits\fR\&. The result of reading an output channel is the last value written to the output channel\&. .PP All the channels might not be read or written at the exact same time\&. For example, the driver may need to sequentially write to several registers in order to set all the digital channels specified by the \fIwrite_mask\fR and \fIbase_channel\fR parameters\&. .SH "RETURN VALUE" .PP If successful, 0 is returned, otherwise \-1\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_sv_init.30000644000000000000000000000676213105044033015012 00000000000000'\" t .\" Title: comedi_sv_init .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_SV_INIT" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_sv_init \- slowly\-varying inputs .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_sv_init('u .BI "int comedi_sv_init(comedi_sv_t\ *\ " "sv" ", comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "channel" ");" .SH "STATUS" .PP deprecated .SH "DESCRIPTION" .PP The function \fBcomedi_sv_init\fR initializes the slow varying Comedi structure pointed to by \fIsv\fR to use the device \fIdevice\fR, the analog input subdevice \fIsubdevice\fR, and the channel \fIchannel\fR\&. The slow varying Comedi structure is used by \fBcomedi_sv_measure\fR to accurately measure an analog input by averaging over many samples\&. The default number of samples is 100\&. .SH "RETURN VALUE" .PP This function returns 0 on success, \-1 on error\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_get_read_subdevice.30000644000000000000000000000656713105044016017146 00000000000000'\" t .\" Title: comedi_get_read_subdevice .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_READ_SUBD" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_get_read_subdevice \- find streaming input subdevice .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_get_read_subdevice('u .BI "int comedi_get_read_subdevice(comedi_t\ *\ " "device" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_get_read_subdevice\fR returns the index of the subdevice whose streaming input buffer is currently accessible through the device \fIdevice\fR, if there is one\&. .SH "RETURN VALUE" .PP On success, \fBcomedi_get_read_subdevice\fRreturns the index of the current \(lqread\(rq subdevice if there is one, or \-1 if there is no \(lqread\(rq subdevice\&. On failure, \-1 is returned\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_apply_parsed_calibration.30000644000000000000000000000717713105044020020366 00000000000000'\" t .\" Title: comedi_apply_parsed_calibration .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_APPLY_PARSED_" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_apply_parsed_calibration \- set calibration from memory .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_apply_parsed_calibration('u .BI "int comedi_apply_parsed_calibration(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "channel" ", unsigned\ int\ " "range" ", unsigned\ int\ " "aref" ", const\ comedi_calibration_t\ *\ " "calibration" ");" .SH "STATUS" .PP alpha .SH "DESCRIPTION" .PP This function is similar to \fBcomedi_apply_calibration\fR, except the calibration information is read from memory instead of a file\&. This function can be more efficient than \fBcomedi_apply_calibration\fR since the calibration file does not need to be reparsed with every call\&. The value of parameter \fIcalibration\fR is obtained by a call to \fBcomedi_parse_calibration_file\fR\&. .PP .SH "RETURN VALUE" .PP Returns 0 on success, \-1 on failure\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_get_n_ranges.30000644000000000000000000000633513105044006015766 00000000000000'\" t .\" Title: comedi_get_n_ranges .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_N_RANGES" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_get_n_ranges \- number of ranges of channel .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_get_n_ranges('u .BI "int comedi_get_n_ranges(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "channel" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_get_n_ranges\fR returns the number of ranges of the channel \fIchannel\fR belonging to the subdevice \fIsubdevice\fR of the comedi device \fIdevice\fR\&. This function returns \-1 on error\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_fileno.30000644000000000000000000000662113105044003014602 00000000000000'\" t .\" Title: comedi_fileno .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_FILENO" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_fileno \- get file descriptor for open Comedilib device .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_fileno('u .BI "int comedi_fileno(comedi_t\ *\ " "device" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_fileno\fR returns the file descriptor for the device \fIdevice\fR\&. This descriptor can then be used as the file descriptor parameter of \fBread\fR, \fBwrite\fR, etc\&. This function is intended to mimic the standard C library function \fBfileno\fR\&. .PP The returned file descriptor should not be closed, and will become invalid when \fBcomedi_close\fR is called on \fIdevice\fR\&. .SH "RETURN VALUE" .PP A file descriptor, or \-1 on error\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_dio_write.30000644000000000000000000000723713105044023015321 00000000000000'\" t .\" Title: comedi_dio_write .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_DIO_WRITE" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_dio_write \- write single bit to digital channel .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_dio_write('u .BI "int comedi_dio_write(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "channel" ", unsigned\ int\ " "bit" ");" .SH "DESCRIPTION" .PP The function writes the value \fIbit\fR to the channel \fIchannel\fR belonging to the subdevice \fIsubdevice\fR of device \fIdevice\fR\&. This function is equivalent to: .sp .if n \{\ .RS 4 .\} .nf comedi_data_write(device, subdevice, channel, 0, 0, bit); .fi .if n \{\ .RE .\} .sp This function does not require a digital subdevice or a subdevice with a maximum data value of 1 to work properly\&. .PP If you wish to write multiple digital channels at once, it is more efficient to use \fBcomedi_dio_bitfield2\fR than to call this function multiple times\&. .SH "RETURN VALUE" .PP Return values and errors are the same as \fBcomedi_data_write\fR\&. .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_get_buffer_write_offset.30000644000000000000000000000706413105044014020222 00000000000000'\" t .\" Title: comedi_get_buffer_write_offset .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_BUFFER_WR" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_get_buffer_write_offset \- streaming buffer write offset .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_get_buffer_write_offset('u .BI "int comedi_get_buffer_write_offset(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_get_buffer_write_offset\fR is used on a subdevice that has a Comedi command in progress to get the current write position in the streaming buffer as an offset in bytes from the start of the buffer\&. The position will wrap around to 0 when it reaches the buffer size\&. This offset is only useful for memory mapped buffers\&. .SH "RETURN VALUE" .PP On success, \fBcomedi_get_buffer_write_offset\fR returns the current write position as an offset in bytes from the start of the buffer\&. On failure, \-1 is returned\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_trigger.30000644000000000000000000000635013105044034014774 00000000000000'\" t .\" Title: comedi_trigger .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_TRIGGER" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_trigger \- perform streaming input/output (deprecated) .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_trigger('u .BI "int comedi_trigger(comedi_t\ *\ " "device" ", comedi_trig\ *\ " "trig" ");" .SH "STATUS" .PP deprecated .SH "DESCRIPTION" .PP The function \fBcomedi_trigger\fR instructs Comedi to perform the command specified by the trigger structure pointed to by \fItrig\fR\&. The return value depends on the particular trigger being issued\&. If there is an error, \-1 is returned\&. .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_mark_buffer_read.30000644000000000000000000000735413105044016016614 00000000000000'\" t .\" Title: comedi_mark_buffer_read .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_MARK_BUFFER_R" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_mark_buffer_read \- streaming buffer control .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_mark_buffer_read('u .BI "int comedi_mark_buffer_read(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "num_bytes" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_mark_buffer_read\fR is used on a subdevice that has a Comedi input command in progress\&. It should only be used if you are using a \fBmmap\fR mapping to read data from Comedi\*(Aqs buffer (as opposed to calling \fBread\fR on the device file descriptor), since Comedi will automatically keep track of how many bytes have been transferred via \fBread\fR calls\&. This function is used to indicate that the next \fInum_bytes\fR bytes in the buffer are no longer needed and may be discarded\&. .SH "RETURN VALUE" .PP On success, \fBcomedi_mark_buffer_read\fR returns the number of bytes successfully marked as read\&. The return value may be less than the \fInum_bytes\fR\&. On failure, \-1 is returned\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_set_clock_source.30000644000000000000000000001033613105044030016652 00000000000000'\" t .\" Title: comedi_set_clock_source .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_SET_CLOCK_SOU" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_set_clock_source \- set master clock for a subdevice .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_set_clock_source('u .BI "int comedi_set_clock_source(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "channel" ", unsigned\ int\ " "clock" ", unsigned\ int\ " "period_ns" ");" .SH "STATUS" .PP alpha .SH "DESCRIPTION" .PP This function selects a master clock for a subdevice\&. The \fIclock\fR parameter selects the master clock, and is driver\-dependant\&. If the subdevice does not support configuring its master clocks on a per\-channel basis, then the \fIchannel\fR parameter will be ignored\&. The \fIperiod_ns\fR parameter specifies the clock\*(Aqs period in nanoseconds\&. It may left unspecified by using a value of zero\&. Drivers will ignore the clock period if they already know what the clock period should be for the specified clock (e\&.g\&. for an on\-board 20MHz oscillator)\&. Certain boards which use a phase\-locked loop to synchronize to external clock sources must be told the period of the external clock\&. Specifying a clock period for an external clock may also allow the driver to support \fBTRIG_TIMER\fR sources in commands while using the external clock\&. .PP The clock may be queried with the \fBcomedi_get_clock_source\fR function\&. .PP This function is only useable on subdevices that provide support for the \fBINSN_CONFIG_SET_CLOCK_SRC\fR configuration instruction\&. .SH "RETURN VALUE" .PP 0 on success, \-1 on error\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_get_timer.30000644000000000000000000000705013105044033015305 00000000000000'\" t .\" Title: comedi_get_timer .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_TIMER" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_get_timer \- timer information (deprecated) .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_get_timer('u .BI "int comedi_get_timer(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", double\ " "frequency" ", unsigned\ int\ *\ " "trigvar" ", double\ *\ " "actual_frequency" ");" .SH "STATUS" .PP deprecated .SH "DESCRIPTION" .PP The function \fBcomedi_get_timer\fR converts the frequency \fIfrequency\fR to a number suitable to send to the driver in a \fBcomedi_trig\fR structure\&. This function remains for compatibility with very old versions of Comedi, that converted sampling rates to timer values in the library\&. This conversion is now done in the kernel, and every device has the timer type \fBnanosec_timer\fR, indicating that timer values are simply a time specified in nanoseconds\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_get_hardware_buffer_size.30000644000000000000000000000747413105044027020362 00000000000000'\" t .\" Title: comedi_get_hardware_buffer_size .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_HARDWARE_" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_get_hardware_buffer_size \- get size of subdevice\*(Aqs hardware buffer .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_get_hardware_buffer_size('u .BI "int comedi_get_hardware_buffer_size(comedi_t\ " "*device" ", unsigned\ int\ " "subdevice" ", enum\ comedi_io_direction\ " "direction" ");" .SH "DESCRIPTION" .PP This function returns the number of bytes the subdevice can hold in it\*(Aqs hardware buffer\&. The term \(lqhardware buffer\(rq refers to any FIFOs, etc\&. on the acquisition board itself which are used during streaming commands\&. This does not include the buffer maintained by the comedi kernel module in host memory, whose size may be queried by \fBcomedi_get_buffer_size\fR\&. The \fIdirection\fR parameter of type \fBenum comedi_io_direction\fR should be set to \fBCOMEDI_INPUT\fR to query the input buffer size (e\&.g\&., the buffer of an analog input subdevice), or \fBCOMEDI_OUTPUT\fR to query the output buffer size (e\&.g\&., the buffer of an analog output)\&. .SH "RETURN VALUE" .PP Hardware buffer size in bytes, or \-1 on error\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_mark_buffer_written.30000644000000000000000000000740113105044016017366 00000000000000'\" t .\" Title: comedi_mark_buffer_written .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_MARK_BUFFER_W" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_mark_buffer_written \- streaming buffer control .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_mark_buffer_written('u .BI "int comedi_mark_buffer_written(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "num_bytes" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_mark_buffer_written\fR is used on a subdevice that has a Comedi output command in progress\&. It should only be used if you are using a \fBmmap\fR mapping to write data to Comedi\*(Aqs buffer (as opposed to calling \fBwrite\fR on the device file descriptor), since Comedi will automatically keep track of how many bytes have been transferred via \fBwrite\fR calls\&. This function is used to indicate that the next \fInum_bytes\fR bytes in the buffer are valid and may be sent to the device\&. .SH "RETURN VALUE" .PP On success, \fBcomedi_mark_buffer_written\fR returns the number of bytes successfully marked as written\&. The return value may be less than the \fInum_bytes\fR\&. On failure, \-1 is returned\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_get_clock_source.30000644000000000000000000000757513105044027016657 00000000000000'\" t .\" Title: comedi_get_clock_source .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_CLOCK_SOU" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_get_clock_source \- get master clock for a subdevice .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_get_clock_source('u .BI "int comedi_get_clock_source(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "channel" ", unsigned\ int\ *\ " "clock" ", unsigned\ int\ *\ " "period_ns" ");" .SH "STATUS" .PP alpha .SH "DESCRIPTION" .PP This function queries the master clock for a subdevice, as set by \fBcomedi_set_clock_source\fR\&. The currently configured master clock will be written to *\fIclock\fR\&. The possible values and their corresponding clocks are driver\-dependant\&. The period of the clock in nanoseconds (or zero if it is unknown) will be written to *\fIperiod_ns\fR\&. If the subdevice does not support configuring its master clocks on a per\-channel basis, then the \fIchannel\fR parameter will be ignored\&. .PP It is safe to pass \fBNULL\fR pointers as the \fIclock\fR or \fIperiod_ns\fR parameters\&. This function is only useable on subdevices that provide support for the \fBINSN_CONFIG_GET_CLOCK_SRC\fR configuration instruction\&. .SH "RETURN VALUE" .PP 0 on success, \-1 on error\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_get_n_subdevices.30000644000000000000000000000617213105044006016642 00000000000000'\" t .\" Title: comedi_get_n_subdevices .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_N_SUBDEVI" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_get_n_subdevices \- number of subdevices .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_get_n_subdevices('u .BI "int comedi_get_n_subdevices(comedi_t\ *\ " "device" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_get_n_subdevices\fR returns the number of subdevices belonging to the Comedi device referenced by the parameter \fIdevice\fR, or \-1 on error\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_to_physical.30000644000000000000000000000706713105044012015651 00000000000000'\" t .\" Title: comedi_to_physical .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_TO_PHYSICAL" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_to_physical \- convert sample to physical units using polynomials .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'double\ comedi_to_physical('u .BI "double comedi_to_physical(lsampl_t\ " "data" ", const\ comedi_polynomial_t\ *\ " "conversion_polynomial" ");" .SH "DESCRIPTION" .PP Converts \fIdata\fR given in Comedi\*(Aqs integer sample values (\fBlsampl_t\fR, between 0 and maxdata) into physical units (\fBdouble\fR)\&. The \fIconversion_polynomial\fR parameter is obtained from either \fBcomedi_get_hardcal_converter\fR or \fBcomedi_get_softcal_converter\fR\&. No range checking of the input \fIdata\fR is performed\&. It is up to you to check for \fIdata\fR values of 0 or maxdata if you want to detect possibly out\-of\-range readings\&. .SH "RETURN VALUE" .PP Physical value corresponding to the input sample value\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_get_max_buffer_size.30000644000000000000000000000677013105044015017345 00000000000000'\" t .\" Title: comedi_get_max_buffer_size .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_MAX_BUFFE" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_get_max_buffer_size \- maximum streaming buffer size .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_get_max_buffer_size('u .BI "int comedi_get_max_buffer_size(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_get_max_buffer_size\fR returns the maximum allowable size (in bytes) of the streaming buffer for the subdevice specified by \fIdevice\fR and \fIsubdevice\fR\&. Changing the maximum buffer size can be accomplished with \fBcomedi_set_max_buffer_size\fR or with the \fBcomedi_config\fR program, and requires appropriate privileges\&. .SH "RETURN VALUE" .PP On success, the maximum allowable size (in bytes) of the streaming buffer is returned\&. On failure, \-1 is returned\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_poll.30000644000000000000000000000664113105044017014303 00000000000000'\" t .\" Title: comedi_poll .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_POLL" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_poll \- force updating of streaming buffer .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_poll('u .BI "int comedi_poll(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_poll\fR is used on a subdevice that has a Comedi command in progress in order to update the streaming buffer\&. If supported by the driver, all available samples are copied to the streaming buffer\&. These samples may be pending in DMA buffers or device FIFOs\&. Only a few Comedi drivers support this operation\&. .SH "RETURN VALUE" .PP On success, \fBcomedi_poll\fR returns the number of additional bytes available\&. On failure, \-1 is returned\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_get_driver_name.30000644000000000000000000000636513105044005016467 00000000000000'\" t .\" Title: comedi_get_driver_name .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_DRIVER_NA" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_get_driver_name \- Comedi driver name .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'char\ *\ comedi_get_driver_name('u .BI "char\ * comedi_get_driver_name(comedi_t\ *\ " "device" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_get_driver_name\fR returns a pointer to a string containing the name of the driver being used by comedi for the comedi device represented by \fIdevice\fR\&. This pointer is valid until the device is closed\&. This function returns \fBNULL\fR if there is an error\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_set_counter_mode.30000644000000000000000000000677313105044031016675 00000000000000'\" t .\" Title: comedi_set_counter_mode .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_SET_COUNTER_M" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_set_counter_mode \- change mode of a counter subdevice .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_set_counter_mode('u .BI "int comedi_set_counter_mode(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "channel" ", unsigned\ int\ " "mode" ");" .SH "STATUS" .PP alpha .SH "DESCRIPTION" .PP This function configures a counter subdevice\&. The meaning of the \fImode\fR parameter is driver\-dependent\&. If the subdevice does not support configuring its mode on a per\-channel basis, then the \fIchannel\fR parameter will be ignored\&. .PP It is only useable on subdevices that provide support for the \fBINSN_CONFIG_SET_COUNTER_MODE\fR configuration instruction\&. .SH "RETURN VALUE" .PP 0 on success, \-1 on error\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_digital_trigger_enable_levels.30000644000000000000000000001123713105044026021352 00000000000000'\" t .\" Title: comedi_digital_trigger_enable_levels .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_DIGITAL_TRIGG" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_digital_trigger_enable_levels \- set digital trigger level detection .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_digital_trigger_enable_levels('u .BI "int comedi_digital_trigger_enable_levels(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "trigger_id" ", unsigned\ int\ " "base_input" ", unsigned\ int\ " "high_level_inputs" ", unsigned\ int\ " "low_level_inputs" ");" .SH "STATUS" .PP alpha .SH "DESCRIPTION" .PP This function enables level detection for a digital trigger on a subdevice\&. If the subdevice supports several digital triggers, the \fItrigger_id\fR selects one\&. The \fIhigh_level_inputs\fR and \fIlow_level_inputs\fR parameters are bit fields that enable (1) or disable (0) high and low level detection on a set of (up to) 32 inputs\&. The least\-significant bit corresponds to the input specified by the \fIbase_input\fR parameter, with subsequent bits corresponding to subsequent inputs\&. .PP Successive calls to this function have an cumulative effect, which allows digital triggers to be set up for more than 32 inputs\&. There may also be a cumulative effect with calls to \fBcomedi_digital_trigger_enable_edges\fR if the digital trigger supports a combination of edge and level triggering\&. Due to the cumulative effect, it may be necessary to call \fBcomedi_digital_trigger_disable\fR to clear the old settings before reconfiguring the digital trigger inputs\&. .PP A digital trigger may support edge detection, level detection, both at different times, or both at the same time\&. If it supports both but not at the same time, configuring level triggers will disable any previous edge triggers, or vice versa\&. .PP This function is only useable on subdevices that provide support for the \fBINSN_CONFIG_DIGITAL_TRIG\fR configuration instruction, and only if the digital trigger supports level detection\&. .SH "RETURN VALUE" .PP 0 on success, \-1 on error\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_get_subdevice_flags.30000644000000000000000000001532713105044007017321 00000000000000'\" t .\" Title: comedi_get_subdevice_flags .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_SUBDEVICE" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_get_subdevice_flags \- properties of subdevice .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_get_subdevice_flags('u .BI "int comedi_get_subdevice_flags(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_get_subdevice_flags\fR returns a bitfield describing the capabilities of the specified subdevice \fIsubdevice\fR of the Comedi device \fIdevice\fR\&. If there is an error, \-1 is returned, and the Comedilib error value is set\&. .PP .TS allbox expand tab(:); lB lB lB. T{ Subdevice Flag T}:T{ Value (hex) T}:T{ Description T} .T& l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l. T{ \fBSDF_BUSY\fR T}:T{ 0x00000001 T}:T{ The subdevice is busy performing an asynchronous command\&. A subdevice being \(lqbusy\(rq is slightly different from the \(lqrunning\(rq state flagged by \fBSDF_RUNNING\fR\&. A \(lqrunning\(rq subdevice is always \(lqbusy\(rq, but a \(lqbusy\(rq subdevice is not necessarily \(lqrunning\(rq\&. For example, suppose an analog input command has been completed by the hardware, but there are still samples in Comedi\*(Aqs buffer waiting to be read out\&. In this case, the subdevice is not \(lqrunning\(rq, but is still \(lqbusy\(rq until all the samples are read out or \fBcomedi_cancel\fR is called\&. T} T{ \fBSDF_BUSY_OWNER\fR T}:T{ 0x00000002 T}:T{ The subdevice is \(lqbusy\(rq, and the command it is running was started by the current process\&. T} T{ \fBSDF_LOCKED\fR T}:T{ 0x00000004 T}:T{ The subdevice has been locked by \fBcomedi_lock\fR\&. T} T{ \fBSDF_LOCK_OWNER\fR T}:T{ 0x00000008 T}:T{ The subdevice is locked, and was locked by the current process\&. T} T{ \fBSDF_MAXDATA\fR T}:T{ 0x00000010 T}:T{ The maximum data value for the subdevice depends on the channel\&. T} T{ \fBSDF_FLAGS\fR T}:T{ 0x00000020 T}:T{ The subdevice flags depend on the channel (unfinished/broken support in library)\&. T} T{ \fBSDF_RANGETYPE\fR T}:T{ 0x00000040 T}:T{ The range type depends on the channel\&. T} T{ \fBSDF_CMD\fR T}:T{ 0x00001000 T}:T{ The subdevice supports asynchronous commands\&. T} T{ \fBSDF_SOFT_CALIBRATED\fR T}:T{ 0x00002000 T}:T{ The subdevice relies on the host to do calibration in software\&. Software calibration coefficients are determined by the \fBcomedi_soft_calibrate\fR utility\&. See the description of the \fBcomedi_get_softcal_converter\fR function for more information\&. T} T{ \fBSDF_READABLE\fR T}:T{ 0x00010000 T}:T{ The subdevice can be read (e\&.g\&. analog input)\&. T} T{ \fBSDF_WRITABLE\fR T}:T{ 0x00020000 T}:T{ The subdevice can be written to (e\&.g\&. analog output)\&. T} T{ \fBSDF_INTERNAL\fR T}:T{ 0x00040000 T}:T{ The subdevice does not have externally visible lines\&. T} T{ \fBSDF_GROUND\fR T}:T{ 0x00100000 T}:T{ The subdevice supports analog reference \fBAREF_GROUND\fR\&. T} T{ \fBSDF_COMMON\fR T}:T{ 0x00200000 T}:T{ The subdevice supports analog reference \fBAREF_COMMON\fR\&. T} T{ \fBSDF_DIFF\fR T}:T{ 0x00400000 T}:T{ The subdevice supports analog reference \fBAREF_DIFF\fR\&. T} T{ \fBSDF_OTHER\fR T}:T{ 0x00800000 T}:T{ The subdevice supports analog reference \fBAREF_OTHER\fR T} T{ \fBSDF_DITHER\fR T}:T{ 0x01000000 T}:T{ The subdevice supports dithering (via the \fBCR_ALT_FILTER\fR chanspec flag)\&. T} T{ \fBSDF_DEGLITCH\fR T}:T{ 0x02000000 T}:T{ The subdevice supports deglitching (via the \fBCR_ALT_FILTER\fR chanspec flag)\&. T} T{ \fBSDF_RUNNING\fR T}:T{ 0x08000000 T}:T{ An asynchronous command is running\&. You can use this flag to poll for the completion of an output command\&. T} T{ \fBSDF_LSAMPL\fR T}:T{ 0x10000000 T}:T{ The subdevice uses the 32\-bit \fBlsampl_t\fR type instead of the 16\-bit \fBsampl_t\fR for asynchronous command data\&. T} T{ \fBSDF_PACKED\fR T}:T{ 0x20000000 T}:T{ The subdevice uses bitfield samples for asynchronous command data, one bit per channel (otherwise it uses one \fBsampl_t\fR or \fBlsampl_t\fR per channel)\&. Commonly used for digital subdevices\&. T} .TE .sp 1 .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_get_buffer_write_count.30000644000000000000000000000660313105044014020062 00000000000000'\" t .\" Title: comedi_get_buffer_write_count .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_BUFFER_WR" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_get_buffer_write_count \- streaming buffer write count .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_get_buffer_write_count('u .BI "int comedi_get_buffer_write_count(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ *\ " "write_count" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_get_buffer_write_count\fR is used on a subdevice that has a Comedi command in progress to get the number of bytes that have been written to the buffer, modulo \fBUINT_MAX\fR + 1\&. The value is stored in *\fIwrite_count\fR\&. .SH "RETURN VALUE" .PP On success, 0 is returned\&. On failure, \-1 is returned\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_set_gate_source.30000644000000000000000000000755613105044031016512 00000000000000'\" t .\" Title: comedi_set_gate_source .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_SET_GATE_SOUR" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_set_gate_source \- select gate source for a subdevice .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_set_gate_source('u .BI "int comedi_set_gate_source(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "channel" ", unsigned\ int\ " "gate_index" ", unsigned\ int\ " "gate_source" ");" .SH "STATUS" .PP alpha .SH "DESCRIPTION" .PP This function selects a gate source for a subdevice\&. The \fIgate_index\fR parameter selects which gate is being configured, should the subdevice have multiple gates\&. It takes a value from 0 to N\-1 for a subdevice with N different gates\&. The \fIgate_source\fR parameter selects which signal you wish to use as the gate, and is also driver\-dependent\&. If the subdevice does not support configuring its gates on a per\-channel basis, then the \fIchannel\fR parameter will be ignored\&. .PP You may query the gate source with the \fBcomedi_get_gate_source\fR function\&. This function is only useable on subdevices that provide support for the \fBINSN_CONFIG_SET_GATE_SRC\fR configuration instruction\&. .SH "RETURN VALUE" .PP 0 on success, \-1 on error\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_loglevel.30000644000000000000000000001014713105044024015140 00000000000000'\" t .\" Title: comedi_loglevel .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_LOGLEVEL" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_loglevel \- change Comedilib logging properties .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_loglevel('u .BI "int comedi_loglevel(int\ " "loglevel" ");" .SH "DESCRIPTION" .PP This function affects the output of debugging and error messages from Comedilib\&. By increasing the log level \fIloglevel\fR, additional debugging information will be printed\&. Error and debugging messages are printed to the standard error output stream \fIstderr\fR\&. .PP The default loglevel can be set by using the environment variable \fBCOMEDI_LOGLEVEL\fR\&. The default log level is 1\&. .PP In order to conserve resources, some debugging information is disabled by default when Comedilib is compiled\&. .PP The meaning of the log levels is as follows: .TS allbox tab(:); lB lB. T{ Loglevel T}:T{ Behavior T} .T& l l l l l l l l l l. T{ 0 T}:T{ Comedilib prints nothing\&. T} T{ 1 T}:T{ (default) Comedilib prints error messages when there is a self\-consistency error (i\&.e\&., an internal bug\&.) T} T{ 2 T}:T{ Comedilib prints an error message when an invalid parameter is passed\&. T} T{ 3 T}:T{ Comedilib prints an error message whenever an error is generated in the Comedilib library or in the C library, when called by Comedilib\&. T} T{ 4 T}:T{ Comedilib prints a lot of junk\&. T} .TE .sp 1 .SH "RETURN VALUE" .PP This function returns the previous log level\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_set_buffer_size.30000644000000000000000000000735113105044017016512 00000000000000'\" t .\" Title: comedi_set_buffer_size .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_SET_BUFFER_SI" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_set_buffer_size \- streaming buffer size of subdevice .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_set_buffer_size('u .BI "int comedi_set_buffer_size(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "size" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_set_buffer_size\fR changes the size of the streaming buffer for the subdevice specified by \fIdevice\fR and \fIsubdevice\fR\&. The buffer size will be set to \fIsize\fR bytes, rounded up to a multiple of the virtual memory page size\&. The virtual memory page size can be determined using sysconf(_SC_PAGE_SIZE)\&. .PP This function does not require special privileges\&. However, it is limited to a (adjustable) maximum buffer size, which can be changed by a privileged user calling \fBcomedi_set_max_buffer_size\fR, or running the program \fBcomedi_config\fR\&. .SH "RETURN VALUE" .PP On success, \fBcomedi_set_buffer_size\fR returns the new buffer size in bytes\&. On failure, \-1 is returned\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_get_range.30000644000000000000000000000656113105044006015267 00000000000000'\" t .\" Title: comedi_get_range .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_RANGE" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_get_range \- range information of channel .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'comedi_range\ *\ comedi_get_range('u .BI "comedi_range\ * comedi_get_range(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "channel" ", unsigned\ int\ " "range" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_get_range\fR returns a pointer to a \fBcomedi_range\fR structure that contains information on the range specified by the \fIsubdevice\fR, \fIchannel\fR, and \fIrange\fR parameters\&. The pointer is valid until the Comedi device \fIdevice\fR is closed\&. If there is an error, \fBNULL\fR is returned\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_set_filter.30000644000000000000000000000731013105044031015463 00000000000000'\" t .\" Title: comedi_set_filter .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_SET_FILTER" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_set_filter \- select a filter for a subdevice .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_set_filter('u .BI "int comedi_set_filter(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "channel" ", unsigned\ int\ " "filter" ");" .SH "STATUS" .PP alpha .SH "DESCRIPTION" .PP This function selects a filter for a subdevice\&. For instance, a digital input subdevice may provide deglitching filters with varying cutoff frequencies\&. The filters are used to prevent high\-frequency noise from causing unwanted transitions on the digital inputs\&. This function can tell the hardware which deglitching filter to use, or to use none at all\&. .PP The \fIfilter\fR parameter selects which of the subdevice\*(Aqs filters to use, and is driver\-dependant\&. .PP This function is only useable on subdevices that provide support for the \fBINSN_CONFIG_FILTER\fR configuration instruction\&. .SH "RETURN VALUE" .PP 0 on success, \-1 on error\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_internal_trigger.30000644000000000000000000000736713105044010016673 00000000000000'\" t .\" Title: comedi_internal_trigger .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_INTERNAL_TRIG" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_internal_trigger \- generate soft trigger .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_internal_trigger('u .BI "int comedi_internal_trigger(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "trig_num" ");" .SH "DESCRIPTION" .PP This function sends an \fBINSN_INTTRIG\fR instruction to a subdevice, which causes an internal triggering event\&. This event can, for example, trigger a subdevice to start an asynchronous command\&. .PP The \fItrig_num\fR parameter is reserved for future use, and should be set to 0\&. It is likely it will be used in the future to support multiple independent internal triggers\&. For example, an asynchronous command might be specified for a subdevice with a \fIstart_src\fR of \fBTRIG_INT\fR, and a \fIstart_arg\fR of 5\&. Then the start event would only be triggered if \fBcomedi_internal_trigger\fR were called on the subdevice with a \fItrig_num\fR equal to the same value of 5\&. .SH "RETURN VALUE" .PP 0 on success, \-1 on error\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_get_routing.30000644000000000000000000000673713105044030015664 00000000000000'\" t .\" Title: comedi_get_routing .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_ROUTING" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_get_routing \- get routing for an output .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_get_routing('u .BI "int comedi_get_routing(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "channel" ", unsigned\ int\ *\ " "routing" ");" .SH "STATUS" .PP alpha .SH "DESCRIPTION" .PP This function queries the routing for an output, as set by \fBcomedi_set_routing\fR\&. The currently configured routing will be written to *\fIrouting\fR\&. The possible values and their corresponding routings are driver\-dependant\&. .PP This function is only useable on subdevices that provide support for the \fBINSN_CONFIG_GET_ROUTING\fR configuration instruction\&. .SH "RETURN VALUE" .PP 0 on success, \-1 on error\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_get_cmd_src_mask.30000644000000000000000000000675413105044015016624 00000000000000'\" t .\" Title: comedi_get_cmd_src_mask .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_CMD_SRC_M" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_get_cmd_src_mask \- streaming input/output capabilities .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_get_cmd_src_mask('u .BI "int comedi_get_cmd_src_mask(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", comedi_cmd\ *\ " "command" ");" .SH "DESCRIPTION" .PP The command capabilities of the subdevice indicated by the parameters \fIdevice\fR and \fIsubdevice\fR are probed, and the results placed in the command structure pointed to by \fIcommand\fR\&. The trigger source elements of the command structure are set to be the bitwise\-or of the subdevice\*(Aqs supported trigger sources\&. Other elements in the structure are undefined\&. .SH "RETURN VALUE" .PP On success, 0 is returned\&. On failure, \-1 is returned\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_get_write_subdevice.30000644000000000000000000000660113105044016017352 00000000000000'\" t .\" Title: comedi_get_write_subdevice .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_WRITE_SUB" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_get_write_subdevice \- find streaming output subdevice .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_get_write_subdevice('u .BI "int comedi_get_write_subdevice(comedi_t\ *\ " "device" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_get_write_subdevice\fR returns the index of the subdevice whose streaming output buffer is currently accessible through the device \fIdevice\fR, if there is one\&. .SH "RETURN VALUE" .PP On success, \fBcomedi_get_write_subdevice\fRreturns the index of the current \(lqwrite\(rq subdevice if there is one, or \-1 if there is no \(lqwrite\(rq subdevice\&. On failure, \-1 is returned\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_set_max_buffer_size.30000644000000000000000000000672213105044017017360 00000000000000'\" t .\" Title: comedi_set_max_buffer_size .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_SET_MAX_BUFFE" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_set_max_buffer_size \- streaming maximum buffer size of subdevice .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_set_max_buffer_size('u .BI "int comedi_set_max_buffer_size(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "max_size" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_set_max_buffer_size\fR changes the maximum allowable size (in bytes) of the streaming buffer for the subdevice specified by \fIdevice\fR and \fIsubdevice\fR\&. Changing the maximum buffer size requires the user to have appropriate privileges\&. .SH "RETURN VALUE" .PP On success, \fBcomedi_set_max_buffer_size\fR returns the new maximum buffer size in bytes\&. On failure, \-1 is returned\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_perror.30000644000000000000000000000744713105044024014651 00000000000000'\" t .\" Title: comedi_perror .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_PERROR" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_perror \- print a Comedilib error message .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'void\ comedi_perror('u .BI "void comedi_perror(const\ char\ *\ " "s" ");" .SH "DESCRIPTION" .PP When a Comedilib function fails, it usually returns \-1 or \fBNULL\fR, depending on the return type\&. An internal library variable stores an error number, which can be retrieved with \fBcomedi_errno\fR\&. This error number can be converted to a human\-readable form by the functions \fBcomedi_perror\fR or \fBcomedi_strerror\fR\&. .PP These functions are intended to mimic the behavior of the standard C library functions \fBperror\fR, \fBstrerror\fR, and \fIerrno\fR\&. In particular, Comedilib functions sometimes return an error that is generated inside the C library; the comedi error message in this case is the same as the C library\&. .PP The function \fBcomedi_perror\fR prints an error message to the standard error output stream \fIstderr\fR\&. The error message consists of the argument string \fIs\fR, a colon, a space, a description of the error condition, and a new line\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_maxdata_is_chan_specific.30000644000000000000000000000633413105044010020275 00000000000000'\" t .\" Title: comedi_maxdata_is_chan_specific .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_MAXDATA_IS_CH" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_maxdata_is_chan_specific \- maximum sample depends on channel .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_maxdata_is_chan_specific('u .BI "int comedi_maxdata_is_chan_specific(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ");" .SH "DESCRIPTION" .PP If each channel of the specified subdevice may have different maximum sample values, this function returns 1\&. Otherwise, this function returns 0\&. On error, this function returns \-1\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_open.30000644000000000000000000000632213105044010014263 00000000000000'\" t .\" Title: comedi_open .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_OPEN" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_open \- open a Comedi device .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'comedi_t\ *\ comedi_open('u .BI "comedi_t\ * comedi_open(const\ char\ *\ " "filename" ");" .SH "DESCRIPTION" .PP Open a Comedi device specified by the file filename\&. .SH "RETURN VALUE" .PP If successful, \fBcomedi_open\fR returns a pointer to a valid \fBcomedi_t\fR structure\&. This structure is opaque; the pointer should not be dereferenced by the application\&. \fBNULL\fR is returned on failure\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_get_gate_source.30000644000000000000000000000724313105044027016474 00000000000000'\" t .\" Title: comedi_get_gate_source .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_GATE_SOUR" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_get_gate_source \- get gate for a subdevice .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_get_gate_source('u .BI "int comedi_get_gate_source(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "channel" ", unsigned\ int\ " "gate_index" ", unsigned\ int\ *\ " "gate_source" ");" .SH "STATUS" .PP alpha .SH "DESCRIPTION" .PP This function queries the gate for a subdevice, as set by \fBcomedi_set_gate_source\fR\&. The currently configured gate source will be written to *\fIgate_source\fR\&. The possible values and their corresponding gates are driver\-dependant\&. If the subdevice does not support configuring its gates on a per\-channel basis, then the \fIchannel\fR parameter will be ignored\&. .PP This function is only useable on subdevices that provide support for the \fBINSN_CONFIG_GET_GATE_SRC\fR configuration instruction\&. .SH "RETURN VALUE" .PP 0 on success, \-1 on error\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_command_test.30000644000000000000000000001213013105044013015774 00000000000000'\" t .\" Title: comedi_command_test .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_COMMAND_TEST" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_command_test \- test streaming input/output configuration .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_command_test('u .BI "int comedi_command_test(comedi_t\ *\ " "device" ", comedi_cmd\ *\ " "command" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_command_test\fR tests the command structure pointed to by the parameter \fIcommand\fR and returns an integer describing the testing stages that were successfully passed\&. In addition, if elements of the \fBcomedi_cmd\fR structure are invalid, they may be modified\&. Source elements are modified to remove invalid source triggers\&. Argument elements are adjusted or rounded to the nearest valid value\&. .SH "RETURN VALUE" .PP The meanings of the return value are as follows: .PP .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} 0 indicates a valid command\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} 1 indicates that one of the \fI\&..._src\fR members of the command contained an unsupported trigger\&. The bits corresponding to the unsupported triggers are zeroed\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} 2 indicates that the particular combination of \fI\&..._src\fR settings is not supported by the driver, or that one of the \fI\&..._src\fR members has the bit corresponding to multiple trigger sources set at the same time\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} 3 indicates that one of the \fI\&..._arg\fR members of the command is set outside the range of allowable values\&. For instance, an argument for a \fBTRIG_TIMER\fR source which exceeds the board\*(Aqs maximum speed\&. The invalid \fI\&..._arg\fR members will be adjusted to valid values\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} 4 indicates that one of the \fI\&..._arg\fR members required adjustment\&. For instance, the argument of a \fBTRIG_TIMER\fR source may have been rounded to the nearest timing period supported by the board\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} 5 indicates that some aspect of the command\*(Aqs \fIchanlist\fR is unsupported by the board\&. For example, some analog input boards require that all channels in the chanlist use the same input range\&. .RE .sp On failure, \-1 is returned\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_arm_channel.30000644000000000000000000000721313105044025015577 00000000000000'\" t .\" Title: comedi_arm_channel .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_ARM_CHANNEL" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_arm_channel \- arm a subdevice channel .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_arm_channel('u .BI "int comedi_arm_channel(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "channel" ", unsigned\ int\ " "source" ");" .SH "STATUS" .PP alpha .SH "DESCRIPTION" .PP This function arms a specified channel of a subdevice\&. It may, for example, arm a counter to begin counting\&. The \fIsource\fR parameter specifies what source should trigger the subdevice to begin\&. The possible sources are driver\-dependant\&. This function is only useable on subdevices that provide support for the \fBINSN_CONFIG_ARM\fR configuration instruction\&. Some subdevices treat this as an instruction to arm the whole subdevice and ignore the specified channel\&. For such subdevices, \fBcomedi_arm\fR is normally called instead\&. .SH "RETURN VALUE" .PP 0 on success, \-1 on error\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_unlock.30000644000000000000000000000611713105044012014621 00000000000000'\" t .\" Title: comedi_unlock .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_UNLOCK" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_unlock \- subdevice reservation .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_unlock('u .BI "int comedi_unlock(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_unlock\fR releases a subdevice locked by \fBcomedi_lock\fR\&. .SH "RETURN VALUE" .PP 0 on success, otherwise \-1\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_get_subdevice_type.30000644000000000000000000000656213105044007017207 00000000000000'\" t .\" Title: comedi_get_subdevice_type .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_SUBDEVICE" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_get_subdevice_type \- type of subdevice .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_get_subdevice_type('u .BI "int comedi_get_subdevice_type(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_get_subdevice_type\fR returns an integer describing the type of subdevice that belongs to the comedi device \fIdevice\fR and has the subdevice index \fIsubdevice\fR\&. The \fBcomedi_subdevice_type\fR enum specifies the possible values for the subdevice type\&. .SH "RETURN VALUE" .PP The function returns the subdevice type, or \-1 if there is an error\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_digital_trigger_enable_edges.30000644000000000000000000001124613105044026021147 00000000000000'\" t .\" Title: comedi_digital_trigger_enable_edges .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_DIGITAL_TRIGG" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_digital_trigger_enable_edges \- set digital trigger edge detection .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_digital_trigger_enable_edges('u .BI "int comedi_digital_trigger_enable_edges(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "trigger_id" ", unsigned\ int\ " "base_input" ", unsigned\ int\ " "rising_edge_inputs" ", unsigned\ int\ " "falling_edge_inputs" ");" .SH "STATUS" .PP alpha .SH "DESCRIPTION" .PP This function enables edge detection for a digital trigger on a subdevice\&. If the subdevice supports several digital triggers, the \fItrigger_id\fR selects one\&. The \fIrising_edge_inputs\fR and \fIfalling_edge_inputs\fR parameters are bit fields that enable (1) or disable (0) rising and falling edge detection on a set of (up to) 32 inputs\&. The least\-significant bit corresponds to the input specified by the \fIbase_input\fR parameter, with subsequent bits corresponding to subsequent inputs\&. .PP Successive calls to this function have an cumulative effect, which allows digital triggers to be set up for more than 32 inputs\&. There may also be a cumulative effect with calls to \fBcomedi_digital_trigger_enable_levels\fR if the digital trigger supports a combination of edge and level triggering\&. Due to the cumulative effect, it may be necessary to call \fBcomedi_digital_trigger_disable\fR to clear the old settings before reconfiguring the digital trigger inputs\&. .PP A digital trigger may support edge detection, level detection, both at different times, or both at the same time\&. If it supports both but not at the same time, configuring edge triggers will disable any previous level triggers, or vice versa\&. .PP This function is only useable on subdevices that provide support for the \fBINSN_CONFIG_DIGITAL_TRIG\fR configuration instruction, and only if the digital trigger supports edge detection\&. .SH "RETURN VALUE" .PP 0 on success, \-1 on error\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_get_maxdata.30000644000000000000000000000640213105044005015603 00000000000000'\" t .\" Title: comedi_get_maxdata .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_MAXDATA" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_get_maxdata \- maximum sample of channel .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'lsampl_t\ comedi_get_maxdata('u .BI "lsampl_t comedi_get_maxdata(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "channel" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_get_maxdata\fR returns the maximum valid data value for channel \fIchannel\fR of subdevice \fIsubdevice\fR belonging to the comedi device \fIdevice\fR\&. .SH "RETURN VALUE" .PP The maximum valid sample value, or 0 on error\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_set_write_subdevice.30000644000000000000000000000711613105044020017363 00000000000000'\" t .\" Title: comedi_set_write_subdevice .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_SET_WRITE_SUB" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_set_write_subdevice \- set streaming output subdevice .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_set_write_subdevice('u .BI "int comedi_set_write_subdevice(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ");" .SH "STATUS" .PP Works for Linux "in\-tree" Comedi since kernel version 3\&.19\&. .SH "DESCRIPTION" .PP The function \fBcomedi_set_write_subdevice\fR sets \fIsubdevice\fR as the current \(lqwrite\(rq subdevice if the subdevice supports streaming output commands\&. .PP No action is performed if \fIsubdevice\fR is already the current \(lqwrite\(rq subdevice\&. .PP Changes are local to the \fIopen file description\fR for this \fIdevice\fR and have no effect on other open file descriptions for the underlying device node\&. .SH "RETURN VALUE" .PP On success, 0 is returned\&. On failure, \-1 is returned\&. .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_apply_calibration.30000644000000000000000000001323613105044020017021 00000000000000'\" t .\" Title: comedi_apply_calibration .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_APPLY_CALIBRA" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_apply_calibration \- set hardware calibration from file .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_apply_calibration('u .BI "int comedi_apply_calibration(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "channel" ", unsigned\ int\ " "range" ", unsigned\ int\ " "aref" ", const\ char\ *\ " "file_path" ");" .SH "STATUS" .PP alpha .SH "DESCRIPTION" .PP The function \fBcomedi_apply_calibration\fR sets the hardware calibration for the subdevice specified by \fIdevice\fR and \fIsubdevice\fR so that it is in proper calibration when using the channel specified by \fIchannel\fR, range index specified by \fIrange\fR and analog reference specified by \fIaref\fR\&. It does so by performing writes to the appropriate channels of the board\*(Aqs calibration subdevice(s)\&. Depending on the hardware, the calibration settings used may or may not depend on the channel, range, or analog reference\&. Furthermore, the calibrations appropriate for different channel, range, and analog reference parameters may not be able to be applied simultaneously\&. For example, some boards cannot have their analog inputs calibrated for more than one input range simultaneously\&. Applying a calibration for range 1 may blow away a previously applied calibration for range 0\&. Or, applying a calibration for analog input channel 0 may cause the same calibration to be applied to all the other analog input channels as well\&. Your only guarantee is that calls to \fBcomedi_apply_calibration\fR on different subdevices will not interfere with each other\&. .PP In practice, their are some rules of thumb on how calibrations behave\&. No calibrations depend on the analog reference\&. A multiplexed analog input will have calibration settings that do not depend on the channel, and applying a setting for one channel will affect all channels equally\&. Analog outputs, and analog inputs with independent a/d converters for each input channel, will have calibration settings which do depend on the channel, and the settings for each channel will be independent of the other channels\&. .PP If you wish to investigate exactly what \fBcomedi_apply_calibration\fR is doing, you can perform reads on your board\*(Aqs calibration subdevice to see which calibration channels it is changing\&. You can also try to decipher the calibration file directly (it\*(Aqs a text file)\&. .PP The \fIfile_path\fR parameter can be used to specify the file which contains the calibration information\&. If \fIfile_path\fR is \fBNULL\fR, then Comedilib will use a default file location\&. The calibration information used by this function is generated by the \fBcomedi_calibrate\fR program (see its man page)\&. .PP The functions \fBcomedi_parse_calibration_file\fR, \fBcomedi_apply_parsed_calibration\fR, and \fBcomedi_cleanup_calibration\fR provide the same functionality at a slightly lower level\&. .SH "RETURN VALUE" .PP Returns 0 on success, \-1 on failure\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_dio_bitfield.30000644000000000000000000000635613105044032015752 00000000000000'\" t .\" Title: comedi_dio_bitfield .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_DIO_BITFIELD" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_dio_bitfield \- read/write multiple digital channels .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_dio_bitfield('u .BI "int comedi_dio_bitfield(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "write_mask" ", unsigned\ int\ *\ " "bits" ");" .SH "STATUS" .PP deprecated .SH "DESCRIPTION" .PP This function is deprecated\&. Use \fBcomedi_dio_bitfield2\fR instead\&. It is equivalent to using \fBcomedi_dio_bitfield2\fR with \fIbase_channel\fR set to 0\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_close.30000644000000000000000000000607313105044001014432 00000000000000'\" t .\" Title: comedi_close .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_CLOSE" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_close \- close a Comedi device .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_close('u .BI "int comedi_close(comedi\ *\ " "device" ");" .SH "DESCRIPTION" .PP Close a device previously opened by \fBcomedi_open\fR\&. .SH "RETURN VALUE" .PP If successful, \fBcomedi_close\fR returns 0\&. On failure, \-1 is returned\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_reset.30000644000000000000000000000660113105044030014446 00000000000000'\" t .\" Title: comedi_reset .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_RESET" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_reset \- reset a subdevice .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_reset('u .BI "int comedi_reset(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ");" .SH "STATUS" .PP alpha .SH "DESCRIPTION" .PP This function resets a subdevice\&. It is only useable on subdevices that provide support for the \fBINSN_CONFIG_RESET\fR configuration instruction\&. Some subdevices treat this as an instruction to reset a specific channel\&. For those subdevices, this function will reset channel 0 and \fBcomedi_reset_channel\fR should be called instead of this one to specify the channel\&. .SH "RETURN VALUE" .PP 0 on success, \-1 on error\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_sv_update.30000644000000000000000000000612013105044033015315 00000000000000'\" t .\" Title: comedi_sv_update .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_SV_UPDATE" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_sv_update \- slowly\-varying inputs .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_sv_update('u .BI "int comedi_sv_update(comedi_sv_t\ *\ " "sv" ");" .SH "STATUS" .PP deprecated .SH "DESCRIPTION" .PP The function \fBcomedi_sv_update\fR updates internal parameters of the slowly varying Comedi structure pointed to by \fIsv\fR\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_lock.30000644000000000000000000000657313105044010014262 00000000000000'\" t .\" Title: comedi_lock .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_LOCK" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_lock \- subdevice reservation .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_lock('u .BI "int comedi_lock(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_lock\fR reserves a subdevice for use by the current process\&. While the lock is held, no other process is allowed to read, write, or configure that subdevice, although other processes can read information about the subdevice\&. The lock is released by \fBcomedi_unlock\fR, or when \fBcomedi_close\fR is called on \fIdevice\fR\&. .SH "RETURN VALUE" .PP If successful, 0 is returned\&. If there is an error, \-1 is returned\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_strerror.30000644000000000000000000000771013105044024015213 00000000000000'\" t .\" Title: comedi_strerror .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_STRERROR" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_strerror \- return string describing Comedilib error code .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'const\ char\ *\ comedi_strerror('u .BI "const\ char\ * comedi_strerror(int\ " "errnum" ");" .SH "DESCRIPTION" .PP When a Comedilib function fails, it usually returns \-1 or \fBNULL\fR, depending on the return type\&. An internal library variable stores an error number, which can be retrieved with \fBcomedi_errno\fR\&. This error number can be converted to a human\-readable form by the functions \fBcomedi_perror\fR or \fBcomedi_strerror\fR\&. .PP These functions are intended to mimic the behavior of the standard C library functions \fBperror\fR, \fBstrerror\fR, and \fIerrno\fR\&. In particular, Comedilib functions sometimes return an error that is generated inside the C library; the comedi error message in this case is the same as the C library\&. .PP The function \fBcomedi_strerror\fR returns a pointer to a character string describing the Comedilib error \fIerrnum\fR\&. The returned string may be modified by a subsequent call to a \fBstrerr\fR or \fBperror\fR function (either the libc or Comedilib versions)\&. An unrecognized error number will return a pointer to the string \(lqundefined error\(rq, or similar\&. .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_data_read_n.30000644000000000000000000000641713105044002015551 00000000000000'\" t .\" Title: comedi_data_read_n .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_DATA_READ_N" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_data_read_n \- read multiple samples from channel .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_data_read_n('u .BI "int comedi_data_read_n(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "channel" ", unsigned\ int\ " "range" ", unsigned\ int\ " "aref" ", lsampl_t\ *\ " "data" ", unsigned\ int\ " "n" ");" .SH "DESCRIPTION" .PP Similar to \fBcomedi_data_read\fR except it reads \fIn\fR samples into the array \fIdata\fR\&. The precise timing of the samples is not hardware controlled\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_get_buffer_offset.30000644000000000000000000000576713105044032017020 00000000000000'\" t .\" Title: comedi_get_buffer_offset .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_BUFFER_OF" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_get_buffer_offset \- streaming buffer status (deprecated) .SH "STATUS" .PP deprecated .SH "DESCRIPTION" .PP This function is deprecated\&. Use \fBcomedi_get_buffer_read_offset\fR instead\&. It has the same functionality as \fBcomedi_get_buffer_read_offset\fR\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_from_physical.30000644000000000000000000000731513105044004016167 00000000000000'\" t .\" Title: comedi_from_physical .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_FROM_PHYSICAL" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_from_physical \- convert physical units to sample using calibration data .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'lsampl_t\ comedi_from_physical('u .BI "lsampl_t comedi_from_physical(double\ " "data" ", const\ comedi_polynomial_t\ *\ " "conversion_polynomial" ");" .SH "DESCRIPTION" .PP Converts \fIdata\fR given in physical units into Comedi\*(Aqs integer sample values (\fBlsampl_t\fR, between 0 and maxdata \(em see \fBcomedi_get_maxdata\fR)\&. The \fIconversion_polynomial\fR parameter is obtained from either \fBcomedi_get_hardcal_converter\fR or \fBcomedi_get_softcal_converter\fR\&. The allows non linear and board specific correction\&. The result will be rounded using the C library\*(Aqs current rounding direction\&. No range checking of the input \fIdata\fR is performed\&. It is up to you to ensure your data is within the limits of the output range you are using\&. .SH "RETURN VALUE" .PP Comedi sample value corresponding to input physical value\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_set_read_subdevice.30000644000000000000000000000711113105044017017145 00000000000000'\" t .\" Title: comedi_set_read_subdevice .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_SET_READ_SUBD" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_set_read_subdevice \- set streaming input subdevice .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_set_read_subdevice('u .BI "int comedi_set_read_subdevice(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ");" .SH "STATUS" .PP Works for Linux "in\-tree" Comedi since kernel version 3\&.19\&. .SH "DESCRIPTION" .PP The function \fBcomedi_set_read_subdevice\fR sets \fIsubdevice\fR as the current \(lqread\(rq subdevice if the subdevice supports streaming input commands\&. .PP No action is performed if \fIsubdevice\fR is already the current \(lqread\(rq subdevice\&. .PP Changes are local to the \fIopen file description\fR for this \fIdevice\fR and have no effect on other open file descriptions for the underlying device node\&. .SH "RETURN VALUE" .PP On success, 0 is returned\&. On failure, \-1 is returned\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_arm.30000644000000000000000000000712313105044025014107 00000000000000'\" t .\" Title: comedi_arm .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_ARM" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_arm \- arm a subdevice .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_arm('u .BI "int comedi_arm(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "source" ");" .SH "STATUS" .PP alpha .SH "DESCRIPTION" .PP This function arms a subdevice\&. It may, for example, arm a counter to begin counting\&. The \fIsource\fR parameter specifies what source should trigger the subdevice to begin\&. The possible sources are driver\-dependant\&. This function is only useable on subdevices that provide support for the \fBINSN_CONFIG_ARM\fR configuration instruction\&. Some subdevices treat this as an instruction to arm a specific channel\&. For those subdevices, this function will arm channel 0 and \fBcomedi_arm_channel\fR should be called instead of this one to specify the channel\&. .SH "RETURN VALUE" .PP 0 on success, \-1 on error\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_set_routing.30000644000000000000000000000712113105044032015666 00000000000000'\" t .\" Title: comedi_set_routing .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_SET_ROUTING" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_set_routing \- select a routing for an output .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_set_routing('u .BI "int comedi_set_routing(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "channel" ", unsigned\ int\ " "routing" ");" .SH "STATUS" .PP alpha .SH "DESCRIPTION" .PP This function configures a mutiplexed output channel which can output a variety of different signals (such as NI\*(Aqs RTSI and PFI lines)\&. The \fIrouting\fR parameter selects which signal should be routed to appear on the selected output channel, and is driver\-dependant\&. .PP The routing may be queried with the \fBcomedi_get_routing\fR function\&. This function is only useable on subdevices that provide support for the \fBINSN_CONFIG_SET_ROUTING\fR configuration instruction\&. .SH "RETURN VALUE" .PP 0 on success, \-1 on error\&. .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_to_phys.30000644000000000000000000000757113105044011015017 00000000000000'\" t .\" Title: comedi_to_phys .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_TO_PHYS" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_to_phys \- convert sample to physical units .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'double\ comedi_to_phys('u .BI "double comedi_to_phys(lsampl_t\ " "data" ", comedi_range\ *\ " "range" ", lsampl_t\ " "maxdata" ");" .SH "DESCRIPTION" .PP Converts parameter \fIdata\fR given in sample values (\fBlsampl_t\fR, between 0 and \fImaxdata\fR) into physical units (\fBdouble\fR)\&. The parameter \fIrange\fR represents the conversion information to use, and the parameter \fImaxdata\fR represents the maximum possible data value for the channel that the data was read\&. The mapping between physical units is linear and assumes ideal converter characteristics\&. .PP Conversion of endpoint sample values, that is, sample values equal to 0 or \fImaxdata\fR, is affected by the Comedilib out\-of\-range behavior (see function \fBcomedi_set_global_oor_behavior\fR)\&. If the out\-of\-range behavior is set to \fBCOMEDI_OOR_NAN\fR, endpoint values are converted to \fBNAN\fR\&. If the out\-of\-range behavior is set to \fBCOMEDI_OOR_NUMBER\fR, the endpoint values are converted similarly to other values\&. .PP If there is an error, \fBNAN\fR is returned\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_sv_measure.30000644000000000000000000000643613105044033015506 00000000000000'\" t .\" Title: comedi_sv_measure .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_SV_MEASURE" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_sv_measure \- slowly\-varying inputs .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_sv_measure('u .BI "int comedi_sv_measure(comedi_sv_t\ *\ " "sv" ", double\ *\ " "data" ");" .SH "STATUS" .PP deprecated .SH "DESCRIPTION" .PP The function \fBcomedi_sv_measure\fR uses the slowly varying Comedi structure pointed to by \fIsv\fR to measure a slowly varying signal\&. If successful, the result (in physical units) is stored in the location pointed to by \fIdata\fR, and the number of samples is returned\&. On error, \-1 is returned\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_get_default_calibration_path.30000644000000000000000000000675313105044021021202 00000000000000'\" t .\" Title: comedi_get_default_calibration_path .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_DEFAULT_C" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_get_default_calibration_path \- get default calibration file path .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'char\ *\ comedi_get_default_calibration_path('u .BI "char\ * comedi_get_default_calibration_path(comedi_t\ *\ " "device" ");" .SH "STATUS" .PP alpha .SH "DESCRIPTION" .PP This function returns a pointer to a string containing a default calibration file path appropriate for the Comedi device specified by \fIdevice\fR\&. Memory for the string is allocated by the function, and should be freed with the C library function \fBfree\fR when the string is no longer needed\&. .SH "RETURN VALUE" .PP A string which contains a file path useable by \fBcomedi_parse_calibration_file\fR\&. On error, \fBNULL\fR is returned\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_reset_channel.30000644000000000000000000000666713105044030016152 00000000000000'\" t .\" Title: comedi_reset_channel .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_RESET_CHANNEL" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_reset_channel \- reset a subdevice channel .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_reset_channel('u .BI "int comedi_reset_channel(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "channel" ");" .SH "STATUS" .PP alpha .SH "DESCRIPTION" .PP This function resets a specified channel of a subdevice\&. It is only useable on subdevices that provide support for the \fBINSN_CONFIG_RESET\fR configuration instruction\&. Some subdevices treat this as an instruction to reset the whole subdevice and ignore the specified channel\&. For such subdevices, \fBcomedi_reset\fR is normally called instead\&. .SH "RETURN VALUE" .PP 0 on success, \-1 on error\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_find_subdevice_by_type.30000644000000000000000000000675513105044004020043 00000000000000'\" t .\" Title: comedi_find_subdevice_by_type .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_FIND_SUBDEVIC" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_find_subdevice_by_type \- search for subdevice type .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_find_subdevice_by_type('u .BI "int comedi_find_subdevice_by_type(comedi_t\ *\ " "device" ", int\ " "type" ", unsigned\ int\ " "start_subdevice" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_find_subdevice_by_type\fR tries to locate a subdevice belonging to comedi device \fIdevice\fR, having type \fItype\fR, starting with the subdevice \fIstart_subdevice\fR\&. The \fBcomedi_subdevice_type\fR enum specifies the possible subdevice types\&. .PP .SH "RETURN VALUE" .PP If it finds a subdevice with the requested type, it returns its index\&. If there is an error, the function returns \-1 and sets the appropriate error\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_timed_1chan.30000644000000000000000000000627113105044034015507 00000000000000'\" t .\" Title: comedi_timed_1chan .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_TIMED_1CHAN" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_timed_1chan \- streaming input (deprecated) .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_timed_1chan('u .BI "int comedi_timed_1chan(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ", unsigned\ int\ " "channel" ", unsigned\ int\ " "range" ", unsigned\ int\ " "aref" ", double\ " "frequency" ", unsigned\ int\ " "num_samples" ", double\ *\ " "data" ");" .SH "STATUS" .PP deprecated .SH "DESCRIPTION" .PP Not documented\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/man/comedi_cancel.30000644000000000000000000000637713105044012014563 00000000000000'\" t .\" Title: comedi_cancel .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/11/2017 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_CANCEL" "3" "05/11/2017" "Comedi" "Comedi reference" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" comedi_cancel \- stop streaming input/output in progress .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_cancel('u .BI "int comedi_cancel(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_cancel\fR can be used to stop a command previously started by \fBcomedi_command\fR which is still in progress on the subdevice indicated by the parameters \fIdevice\fR and \fIsubdevice\fR\&. .SH "RETURN VALUE" .PP On success, 0 is returned\&. On failure, \-1 is returned\&. .PP .SH "AUTHORS" .PP \fBDavid Schleef\fR <\&ds@schleef.org\&> .RS 4 Author. .RE .PP \fBFrank Mori Hess\fR <\&fmhess@users.sourceforge.net\&> .RS 4 Author. .RE .PP \fBHerman Bruyninckx\fR <\&Herman.Bruyninckx@mech.kuleuven.ac.be\&> .RS 4 Author. .RE .PP \fBBernd Porr\fR <\&tech@linux-usb-daq.co.uk\&> .RS 4 Author. .RE .PP \fBIan Abbott\fR <\&abbotti@mev.co.uk\&> .RS 4 Author. .RE .PP \fB\('Eric Piel\fR <\&piel@delmic.com\&> .RS 4 Author. .RE .SH "COPYRIGHT" .br Copyright \(co 1998-2003 David Schleef .br Copyright \(co 2001-2003, 2005, 2008 Frank Mori Hess .br Copyright \(co 2002-2003 Herman Bruyninckx .br Copyright \(co 2012 Bernd Porr .br Copyright \(co 2012 Ian Abbott .br Copyright \(co 2012, 2015 \('Eric Piel .br .PP This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source. .PP This library 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, version 2.1 of the License. .PP 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 Lesser General Public License for more details. .PP You should have received a copy of the GNU Lesser 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. .sp comedilib-0.11.0/doc/intro.xml0000644000000000000000000005633212416542105013042 00000000000000 %comedilib_entities; ]>
Overview &comedi; is a free software project that develops drivers, tools, and libraries for various forms of data acquisition: reading and writing of analog signals; reading and writing of digital inputs/outputs; pulse and frequency counting; pulse generation; reading encoders; etc. The source code is distributed in two main packages, comedi and comedilib: Comedi is a collection of drivers for a variety of common data acquisition plug-in boards (which are called devices in &comedi; terminology). The drivers are implemented as the combination of (i) one single core Linux kernel module (called comedi) providing common functionality, and (ii) individual low-level driver modules for each device. Comedilib is a separately distributed package containing a user-space library that provides a developer-friendly interface to the &comedi; devices. Included in the Comedilib package are documentation, configuration and calibration utilities, and demonstration programs. Kcomedilib is a Linux kernel module (distributed with the comedi package) that provides the same interface as comedilib in kernel space, and suitable for use by real-time kernel modules. It is effectively a kernel library for using &comedi; from real-time tasks. &comedi; works with standard Linux kernels, but also with its real-time extensions RTAI and RTLinux/GPL. This section gives a high-level introduction to which functionality you can expect from the software. More technical details and programming examples are given in the following sections of this document.
What is a <quote>device driver</quote>? A device driver is a piece of software that interfaces a particular piece of hardware: a printer, a sound card, a motor drive, etc. It translates the primitive, device-dependent commands with which the hardware manufacturer allows you to configure, read and write the electronics of the hardware interface into more abstract and generic function calls and data structures for the application programmer. David Schleef started the &comedi; project to put a generic interface on top of lots of different cards for measurement and control purposes. This type of cards are often called data acquisition (or DAQ) cards. Analog input and output cards were the first goal of the project, but now &comedi; also provides a device independent interface to digital input and output cards, and counter and timer cards (including encoders, pulse generators, frequency and pulse timers, etc.). Schleef designed a structure which is a balance between modularity and complexity: it's fairly easy to integrate a new card because most of the infrastructure part of other, similar drivers can be reused, and learning the generic and hence somewhat heavier &comedi; API doesn't scare away new contributors from integrating their drivers into the &comedi; framework.
Policy vs. mechanism Device drivers are often written by application programmers, that have only their particular application in mind; especially in real-time applications. For example, one writes a driver for the parallel port, because one wants to use it to generate pulses that drive a stepper motor. This approach often leads to device drivers that depend too much on that particular application, and are not general enough to be re-used for other applications. One golden rule for the device driver writer is to separate mechanism and policy: Mechanism. The mechanism part of the device interface is a faithful representation of the bare functionality of the device, independent of what part of the functionality an application will use. Policy. Once a device driver offers a software interface to the mechanism of the device, an application writer can use this mechanism interface to use the device in one particular fashion. That is, some of the data stuctures offered by the mechanism are interpreted in specific physical units, or some of them are taken together because this composition is relevant for the application. For example, a analog output card can be used to generate voltages that are the inputs for the electronic drivers of the motors of a robot; these voltages can be interpreted as setpoints for the desired velocity of these motors, and six of them are taken together to steer one particular robot with six-degrees of freedom. Some of the other outputs of the same physical device can be used by another application program, for example to generate a sine wave that drives a vibration shaker. So, &comedi; focuses only on the mechanism part of DAQ interfacing. The project does not provide the policy parts, such as Graphical User Interfaces to program and display acquisitions, signal processing libraries, or control algorithms.
A general DAQ device driver package From the point of view of application developers, there are many reasons to welcome the standardization of the API and the architectural structure of DAQ software: API: devices that offer similar functionalities, should have the same software interface, and their differences should be coped with by parameterizing the interfaces, not by changing the interface for each new device in the family. However, the DAQ manufacturers have never been able (or willing) to come up with such a standardization effort themselves. Architectural structure: many electronic interfaces have more than one layer of functionality between the hardware and the operating system, and the device driver code should reflect this fact. For example, many different interface cards use the same PCI driver chips, or use the parallel port as an intermediate means to connect to the hardware device. Hence, lower-level device drivers for these PCI chips and parallel ports allow for an increased modularity and re-useability of the software. Finding the generic similarities and structure among different cards helps in developing device drivers faster and with better documentation. In the case of Linux as the host operating system, device driver writers must keep the following issues in mind: Kernel space vs. User space. The Linux operating system has two levels that require different programming approaches. Only privileged processes can run in the kernel, where they have access to all hardware and to all kernel data structures. Normal application programs can run their processes only in user space, where these processes are shielded from each other, and from direct access to hardware and to critical data of the operating system; these user space programs execute much of the operating system's functionality through system calls. Device drivers typically must access specific addresses on the bus, and hence must (at least partially) run in kernel space. Normal users program against the API of the Comedilib user-space library. Comedilib then handles the necessary communication with the Comedi modules running in kernel-space. Device files or device file system. Users who write an application for a particular device, must link their application to that device's device driver. Part of this device driver, however, runs in kernel space, and the user application in user space. So, the operating system provides an interface between both. In Linux or Unix, these interfaces are in the form of files in the /dev directory. Each device supported in the kernel may be representated as such a user space device file, and its functionality can may be accessed by classical Unix file I/O: open, close, read, write, ioctl, and mmap. /proc interface. Linux (and some other UNIX operating systems) offer a file-like interface to attached devices (and other OS-related information) via the /proc directories. These files do not really exist, but it gives a familiar interface to users, with which they can inspect the current status of each device. Direct Memory Access (DMA) vs. Programmed Input/Output (PIO). Almost all devices can be interfaced in PIO mode: the processor is responsible for directly accessing the bus addresses allocated to the device whenever it needs to read or write data. Some devices also allow DMA: the device and the memory talk to each other directly, without needing the processor. DMA is a feature of the bus, not of the operating system (which, of course, has to support its processes to use the feature). Real-time vs. non real-time. If the device is to be used in a RTLinux/GPL or RTAI application, there are a few extra requirements, because not all system calls are available in the kernel of the real-time operating systems RTLinux/GPL or RTAI. The APIs of RTAI and RTLinux/Free differ in different ways, so the &comedi; developers have spent a lot of efforts to make generic wrappers to the required RTOS primitives: timers, memory allocation, registration of interrupt handlers, etc.
DAQ signals The cards supported in &comedi; have one or more of the following signals: analog input, analog output, digital input, digital output, counters input, counter output, pulse input, pulse output: Digital signals are conceptually quite simple, and don't need much configuration: the number of channels, their addresses on the bus, and their input or output direction. Analog signals are a bit more complicated. Typically, an analog acquisition channel can be programmed to generate or read a voltage between a lower and an upper threshold (e.g., -10V and +10V). The card's electronics may also allow automatically sampling of a set of channels in a prescribed order. Pulse-based signals (counters, timers, encoders, etc.) are conceptually only a bit more complex than digital inputs and outputs, in that they only add some timing specifications to the signal. &comedi; has still only a limited number of drivers for this kind of signals, although most of the necessary API and support functionality is available. In addition to these real DAQ functions, &comedi; also offers basic timer access.
Device hierarchy &comedi; organizes all hardware according to the following hierarchy: Channel: the lowest-level hardware component, that represents the properties of one single data channel; for example, an analog input, or a digital output. Subdevice: a set of functionally identical channels. For example, a set of 16 identical analog inputs. Device: a set of subdevices that are physically implemented on the same interface card; in other words, the interface card itself. For example, the National Instruments 6024E device has a subdevice with 16 analog input channels, another subdevice with two analog output channels, and a third subdevice with eight digital inputs/outputs. Some interface cards have extra components that don't fit in the above-mentioned classification, such as an EEPROM to store configuration and board parameters, or calibration inputs. These special components are also classified as sub-devices in &comedi;.
Acquisition terminology This Section introduces the terminology that this document uses when talking about Comedi commands, which are streaming asyncronous acquisitions. depicts a typical acquisition sequence when running a command: The sequence has a start and an end. At both sides, the software and the hardware need some finite initialization or settling time. The sequence consists of a number of identically repeated scans. This is where the actual data acquisitions are taking place: data is read from the card, or written to it. Each scan also has a begin, an end, and a finite setup time. Possibly, there is also a settling time (scan delay) at the end of a scan. So, the hardware puts a lower boundary (the scan interval) on the minimum time needed to complete a full scan. Each scan contains one or more conversions on particular channels, i.e., the AD/DA converter is activated on each of the programmed channels, and produces a sample, again in a finite conversion time, starting from the moment in time called the sample time in (sometimes also called the timestamp), and caused by a triggering event, called convert. In addition, some hardware has limits on the minimum conversion interval it can achieve, i.e., the minimum time it needs between subsequent conversions. For example, some A/D hardware must multiplex the conversions from different input channels onto one single A/D converter. Thus the conversions are done serially in time (as shown in ). Other cards have the hardware to do two or more acquisitions in parallel, and can perform all the conversions in a scan simultaneously. The begin of each conversion is triggered by some internally or externally generated pulse, e.g., a timer. In general, not only the start of a conversion is triggered, but also the start of a scan and of a sequence. &comedi; provides the API to configure what triggering source one wants to use in each case. The API also allows you to specify the channel list, i.e., the sequence of channels that needs to be acquired during each scan.
Asynchronous Acquisition Sequence Figure courtesy of Kurt Müller.
DAQ functions The basic data acquisition functionalities that &comedi; offers work on channels, or sets of channels: Single acquisition: &comedi; has function calls to synchronously perform one single data acquisition on a specified channel: comedi_data_read, comedi_data_read_delayed, comedi_data_write, comedi_dio_read, comedi_dio_write. In addition, the lower-level comedi_do_insn function can be used to perform an acquisition. Synchronous means that the calling process blocks until the data acquisition has finished. Mutiple synchronous acquisition: The comedi_data_read_n function performs (possibly multiple) data acquisitions on a specified channel, in a synchronous way. So, the function call blocks until the whole acquisition has finished. The precise timing between the acquisitions is not hardware controlled. In addition, comedi_do_insnlist() executes a list of instructions in one single (blocking, synchronous) call, such that the overhead involved in configuring each individual acquisition is reduced. Command: a command is sequence of scans, for which conditions have been specified that determine when the acquisition will start and stop, and when each conversion in each scan should occur. A comedi_command function call sets up the aynchronous data acquisition: as soon as the command information has been filled in, the comedi_command function call returns. The hardware of the card takes care of the sequencing and timing of the data acquisition as it proceeds.
Supporting functionality The command functionality cannot be offered by DAQ cards that lack the hardware to autonomously sequence a series of scans. For these cards, the command functionality may be provided in software. And because of the quite strict real-time requirements for a command acquisition, a real-time operating system should be used to translate the command specification into a correctly timed sequence of instructions. &comedi; provides the comedi_rt_timer kernel module to support such a virtual command execution under RTAI or RTLinux/Free. &comedi; not only offers the API to access the functionality of the cards, but also to query the capabilities of the installed devices. That is, a user process can find out what channels are available, and what their physical parameters are (range, direction of input/output, etc.). Buffering is another important aspect of device drivers: the acquired data has to be stored in such buffers, because, in general, the application program cannot guarantee to always be ready to provide or accept data as soon as the interface board wants to do a read or write operation. &comedi; provides internal buffers for data being streamed to/from devices via Comedi commands. The buffer sizes are user-adjustable.
comedilib-0.11.0/doc/funcref.xml0000644000000000000000000016412212426145501013334 00000000000000 %comedilib_entities; ]>
Core Functions comedi_close 3 Comedi Comedi reference comedi_close close a Comedi device #include <comedilib.h> int comedi_close comedi * device Description Close a device previously opened by comedi_open. Return value If successful, comedi_close returns 0. On failure, -1 is returned. comedi_data_read 3 Comedi Comedi reference comedi_data_read read single sample from channel #include <comedilib.h> int comedi_data_read comedi_t * device unsigned int subdevice unsigned int channel unsigned int range unsigned int aref lsampl_t * data Description Reads a single sample on the channel specified by the Comedi device device, the subdevice subdevice, and the channel channel. For the A/D conversion (if appropriate), the device is configured to use range specification range and (if appropriate) analog reference type aref. Analog reference types that are not supported by the device are silently ignored. The function comedi_data_read reads one data value from the specified channel and stores the value in *data. WARNING: comedi_data_read does not do any pausing to allow multiplexed analog inputs to settle before starting an analog to digital conversion. If you are switching between different channels and need to allow your analog input to settle for an accurate reading, use comedi_data_read_delayed, or set the input channel at an earlier time with comedi_data_read_hint. Data values returned by this function are unsigned integers less than or equal to the maximum sample value of the channel, which can be determined using the function comedi_get_maxdata. Conversion of data values to physical units can be performed by the functions comedi_to_phys (linear conversion) or comedi_to_physical (non-linear polynomial conversion). Return value On success, comedi_data_read returns 1 (the number of samples read). If there is an error, -1 is returned. comedi_data_read_n 3 Comedi Comedi reference comedi_data_read_n read multiple samples from channel #include <comedilib.h> int comedi_data_read_n comedi_t * device unsigned int subdevice unsigned int channel unsigned int range unsigned int aref lsampl_t * data unsigned int n Description Similar to comedi_data_read except it reads n samples into the array data. The precise timing of the samples is not hardware controlled. comedi_data_read_delayed 3 Comedi Comedi reference comedi_data_read_delayed read single sample from channel after delaying for specified settling time #include <comedilib.h> int comedi_data_read_delayed comedi_t * device unsigned int subdevice unsigned int channel unsigned int range unsigned int aref lsampl_t * data unsigned int nanosec Description Similar to comedi_data_read except it will wait for the specified number of nanoseconds between setting the input channel and taking a sample. For analog inputs, most boards have a single analog to digital converter which is multiplexed to be able to read multiple channels. If the input is not allowed to settle after the multiplexer switches channels, the reading will be inaccurate. This function is useful for allowing a multiplexed analog input to settle when switching channels. Although the settling time is specified in nanoseconds, the actual settling time will be rounded up to the nearest microsecond. comedi_data_read_hint 3 Comedi Comedi reference comedi_data_read_hint tell driver which channel/range/aref you are going to read from next #include <comedilib.h> int comedi_data_read_hint comedi_t * device unsigned int subdevice unsigned int channel unsigned int range unsigned int aref Description Used to prepare an analog input for a subsequent call to comedi_data_read. It is not necessary to use this function, but it can be useful for eliminating inaccuracies caused by insufficient settling times when switching the channel or gain on an analog input. This function sets an analog input to the channel, range, and aref specified but does not perform an actual analog to digital conversion. Alternatively, one can simply use comedi_data_read_delayed, which sets up the input, pauses to allow settling, then performs a conversion. comedi_data_write 3 Comedi Comedi reference comedi_data_write write single sample to channel #include <comedilib.h> int comedi_data_write comedi_t * device unsigned int subdevice unsigned int channel unsigned int range unsigned int aref lsampl_t data Description Writes a single sample on the channel that is specified by the Comedi device device, the subdevice subdevice, and the channel channel. If appropriate, the device is configured to use range specification range and analog reference type aref. Analog reference types that are not supported by the device are silently ignored. The function comedi_data_write writes the data value specified by the parameter data to the specified channel. Return value On success, comedi_data_write returns 1 (the number of samples written). If there is an error, -1 is returned. comedi_do_insn 3 Comedi Comedi reference comedi_do_insn perform instruction #include <comedilib.h> int comedi_do_insn comedi_t * device comedi_insn * instruction Description The function comedi_do_insn performs a single instruction. Return value If successful, returns a non-negative number. For the case of INSN_READ or INSN_WRITE instructions, comedi_do_insn returns the number of samples read or written, which may be less than the number requested. If there is an error, -1 is returned. comedi_do_insnlist 3 Comedi Comedi reference comedi_do_insnlist perform multiple instructions #include <comedilib.h> int comedi_do_insnlist comedi_t * device comedi_insnlist * list Description The function comedi_do_insnlist performs multiple Comedi instructions as part of one system call. This function can be used to avoid the overhead of multiple system calls. Return value The function comedi_do_insnlist returns the number of successfully completed instructions. Error information for the unsuccessful instruction is not available. If there is an error before the first instruction can be executed, -1 is returned. comedi_fileno 3 Comedi Comedi reference comedi_fileno get file descriptor for open Comedilib device #include <comedilib.h> int comedi_fileno comedi_t * device Description The function comedi_fileno returns the file descriptor for the device device. This descriptor can then be used as the file descriptor parameter of read, write, etc. This function is intended to mimic the standard C library function fileno. The returned file descriptor should not be closed, and will become invalid when comedi_close is called on device. Return value A file descriptor, or -1 on error. comedi_find_range 3 Comedi Comedi reference comedi_find_range search for range #include <comedilib.h> int comedi_find_range comedi_t * device unsigned int subdevice unsigned int channel unsigned int unit double min double max Description The function comedi_find_range tries to locate the optimal (smallest) range for the channel channel belonging to subdevice subdevice of the comedi device device, that includes both min and max in units of unit. Return value If a matching range is found, the index of the matching range is returned. If no matching range is available, the function returns -1. comedi_find_subdevice_by_type 3 Comedi Comedi reference comedi_find_subdevice_by_type search for subdevice type #include <comedilib.h> int comedi_find_subdevice_by_type comedi_t * device int type unsigned int start_subdevice Description The function comedi_find_subdevice_by_type tries to locate a subdevice belonging to comedi device device, having type type, starting with the subdevice start_subdevice. The comedi_subdevice_type enum specifies the possible subdevice types. Return value If it finds a subdevice with the requested type, it returns its index. If there is an error, the function returns -1 and sets the appropriate error. comedi_from_phys 3 Comedi Comedi reference comedi_from_phys convert physical units to sample #include <comedilib.h> lsampl_t comedi_from_phys double data comedi_range * range lsampl_t maxdata Description Converts parameter data given in physical units (double) into sample values (lsampl_t, between 0 and maxdata). The parameter range represents the conversion information to use, and the parameter maxdata represents the maximum possible data value for the channel that the data will be written to. The mapping between physical units and raw data is linear and assumes that the converter has ideal characteristics. Conversion is not affected by out-of-range behavior. Out-of-range data parameters are silently truncated to the range 0 to maxdata. comedi_from_physical 3 Comedi Comedi reference comedi_from_physical convert physical units to sample using calibration data #include <comedilib.h> lsampl_t comedi_from_physical double data const comedi_polynomial_t * conversion_polynomial Description Converts data given in physical units into Comedi's integer sample values (lsampl_t, between 0 and maxdata — see comedi_get_maxdata). The conversion_polynomial parameter is obtained from either comedi_get_hardcal_converter or comedi_get_softcal_converter. The allows non linear and board specific correction. The result will be rounded using the C library's current rounding direction. No range checking of the input data is performed. It is up to you to ensure your data is within the limits of the output range you are using. Return value Comedi sample value corresponding to input physical value. comedi_get_board_name 3 Comedi Comedi reference comedi_get_board_name Comedi device name #include <comedilib.h> const char * comedi_get_board_name comedi_t * device Description The function comedi_get_board_name returns a pointer to a string containing the name of the comedi device represented by device. This pointer is valid until the device is closed. This function returns NULL if there is an error. comedi_get_driver_name 3 Comedi Comedi reference comedi_get_driver_name Comedi driver name #include <comedilib.h> char * comedi_get_driver_name comedi_t * device Description The function comedi_get_driver_name returns a pointer to a string containing the name of the driver being used by comedi for the comedi device represented by device. This pointer is valid until the device is closed. This function returns NULL if there is an error. comedi_get_maxdata 3 Comedi Comedi reference comedi_get_maxdata maximum sample of channel #include <comedilib.h> lsampl_t comedi_get_maxdata comedi_t * device unsigned int subdevice unsigned int channel Description The function comedi_get_maxdata returns the maximum valid data value for channel channel of subdevice subdevice belonging to the comedi device device. Return value The maximum valid sample value, or 0 on error. comedi_get_n_channels 3 Comedi Comedi reference comedi_get_n_channels number of subdevice channels #include <comedilib.h> int comedi_get_n_channels comedi_t * device unsigned int subdevice Description The function comedi_get_n_channels returns the number of channels of the subdevice subdevice belonging to the comedi device device. This function returns -1 on error and the Comedilib error value is set. comedi_get_n_ranges 3 Comedi Comedi reference comedi_get_n_ranges number of ranges of channel #include <comedilib.h> int comedi_get_n_ranges comedi_t * device unsigned int subdevice unsigned int channel Description The function comedi_get_n_ranges returns the number of ranges of the channel channel belonging to the subdevice subdevice of the comedi device device. This function returns -1 on error. comedi_get_n_subdevices 3 Comedi Comedi reference comedi_get_n_subdevices number of subdevices #include <comedilib.h> int comedi_get_n_subdevices comedi_t * device Description The function comedi_get_n_subdevices returns the number of subdevices belonging to the Comedi device referenced by the parameter device, or -1 on error. comedi_get_range 3 Comedi Comedi reference comedi_get_range range information of channel #include <comedilib.h> comedi_range * comedi_get_range comedi_t * device unsigned int subdevice unsigned int channel unsigned int range Description The function comedi_get_range returns a pointer to a comedi_range structure that contains information on the range specified by the subdevice, channel, and range parameters. The pointer is valid until the Comedi device device is closed. If there is an error, NULL is returned. comedi_get_subdevice_flags 3 Comedi Comedi reference comedi_get_subdevice_flags properties of subdevice #include <comedilib.h> int comedi_get_subdevice_flags comedi_t * device unsigned int subdevice Description The function comedi_get_subdevice_flags returns a bitfield describing the capabilities of the specified subdevice subdevice of the Comedi device device. If there is an error, -1 is returned, and the Comedilib error value is set. Subdevice Flag Value (hex) Description SDF_BUSY 0x00000001 The subdevice is busy performing an asynchronous command. A subdevice being busy is slightly different from the running state flagged by SDF_RUNNING. A running subdevice is always busy, but a busy subdevice is not necessarily running. For example, suppose an analog input command has been completed by the hardware, but there are still samples in Comedi's buffer waiting to be read out. In this case, the subdevice is not running, but is still busy until all the samples are read out or comedi_cancel is called. SDF_BUSY_OWNER 0x00000002 The subdevice is busy, and the command it is running was started by the current process. SDF_LOCKED 0x00000004 The subdevice has been locked by comedi_lock. SDF_LOCK_OWNER 0x00000008 The subdevice is locked, and was locked by the current process. SDF_MAXDATA 0x00000010 The maximum data value for the subdevice depends on the channel. SDF_FLAGS 0x00000020 The subdevice flags depend on the channel (unfinished/broken support in library). SDF_RANGETYPE 0x00000040 The range type depends on the channel. SDF_CMD 0x00001000 The subdevice supports asynchronous commands. SDF_SOFT_CALIBRATED 0x00002000 The subdevice relies on the host to do calibration in software. Software calibration coefficients are determined by the comedi_soft_calibrate utility. See the description of the comedi_get_softcal_converter function for more information. SDF_READABLE 0x00010000 The subdevice can be read (e.g. analog input). SDF_WRITABLE 0x00020000 The subdevice can be written to (e.g. analog output). SDF_INTERNAL 0x00040000 The subdevice does not have externally visible lines. SDF_GROUND 0x00100000 The subdevice supports analog reference AREF_GROUND. SDF_COMMON 0x00200000 The subdevice supports analog reference AREF_COMMON. SDF_DIFF 0x00400000 The subdevice supports analog reference AREF_DIFF. SDF_OTHER 0x00800000 The subdevice supports analog reference AREF_OTHER SDF_DITHER 0x01000000 The subdevice supports dithering (via the CR_ALT_FILTER chanspec flag). SDF_DEGLITCH 0x02000000 The subdevice supports deglitching (via the CR_ALT_FILTER chanspec flag). SDF_RUNNING 0x08000000 An asynchronous command is running. You can use this flag to poll for the completion of an output command. SDF_LSAMPL 0x10000000 The subdevice uses the 32-bit lsampl_t type instead of the 16-bit sampl_t for asynchronous command data. SDF_PACKED 0x20000000 The subdevice uses bitfield samples for asynchronous command data, one bit per channel (otherwise it uses one sampl_t or lsampl_t per channel). Commonly used for digital subdevices. comedi_get_subdevice_type 3 Comedi Comedi reference comedi_get_subdevice_type type of subdevice #include <comedilib.h> int comedi_get_subdevice_type comedi_t * device unsigned int subdevice Description The function comedi_get_subdevice_type returns an integer describing the type of subdevice that belongs to the comedi device device and has the subdevice index subdevice. The comedi_subdevice_type enum specifies the possible values for the subdevice type. Return value The function returns the subdevice type, or -1 if there is an error. comedi_get_version_code 3 Comedi Comedi reference comedi_get_version_code Comedi version code #include <comedilib.h> int comedi_get_version_code comedi_t * device Description Returns the Comedi kernel module version code. A valid Comedi device referenced by the parameter device is necessary to communicate with the kernel module. On error, -1 is returned. The version code is encoded as a bitfield of three 8-bit numbers. For example, 0x00073d is the version code for version 0.7.61. This function is of limited usefulness. A typical mis-application of this function is to use it to determine if a certain feature is supported. If the application needs to know of the existence of a particular feature, an existence test function should be written and put in the Comedilib source. comedi_internal_trigger 3 Comedi Comedi reference comedi_internal_trigger generate soft trigger #include <comedilib.h> int comedi_internal_trigger comedi_t * device unsigned int subdevice unsigned int trig_num Description This function sends an INSN_INTTRIG instruction to a subdevice, which causes an internal triggering event. This event can, for example, trigger a subdevice to start an asynchronous command. The trig_num parameter is reserved for future use, and should be set to 0. It is likely it will be used in the future to support multiple independent internal triggers. For example, an asynchronous command might be specified for a subdevice with a start_src of TRIG_INT, and a start_arg of 5. Then the start event would only be triggered if comedi_internal_trigger were called on the subdevice with a trig_num equal to the same value of 5. Return value 0 on success, -1 on error. comedi_lock 3 Comedi Comedi reference comedi_lock subdevice reservation #include <comedilib.h> int comedi_lock comedi_t * device unsigned int subdevice Description The function comedi_lock reserves a subdevice for use by the current process. While the lock is held, no other process is allowed to read, write, or configure that subdevice, although other processes can read information about the subdevice. The lock is released by comedi_unlock, or when comedi_close is called on device. Return value If successful, 0 is returned. If there is an error, -1 is returned. comedi_maxdata_is_chan_specific 3 Comedi Comedi reference comedi_maxdata_is_chan_specific maximum sample depends on channel #include <comedilib.h> int comedi_maxdata_is_chan_specific comedi_t * device unsigned int subdevice Description If each channel of the specified subdevice may have different maximum sample values, this function returns 1. Otherwise, this function returns 0. On error, this function returns -1. comedi_open 3 Comedi Comedi reference comedi_open open a Comedi device #include <comedilib.h> comedi_t * comedi_open const char * filename Description Open a Comedi device specified by the file filename. Return value If successful, comedi_open returns a pointer to a valid comedi_t structure. This structure is opaque; the pointer should not be dereferenced by the application. NULL is returned on failure. comedi_range_is_chan_specific 3 Comedi Comedi reference comedi_range_is_chan_specific range information depends on channel #include <comedilib.h> int comedi_range_is_chan_specific comedi_t * device unsigned int subdevice Description If each channel of the specified subdevice may have different range information, this function returns 1. Otherwise, this function returns 0. On error, this function returns -1. comedi_set_global_oor_behavior 3 Comedi Comedi reference comedi_set_global_oor_behavior out-of-range behavior #include <comedilib.h> enum comedi_oor_behavior comedi_set_global_oor_behavior enum comedi_oor_behavior behavior Description This function changes the Comedilib out-of-range behavior. This currently affects the behavior of comedi_to_phys when converting endpoint sample values, that is, sample values equal to 0 or maxdata. If the out-of-range behavior is set to COMEDI_OOR_NAN, endpoint values are converted to NAN. If the out-of-range behavior is set to COMEDI_OOR_NUMBER, the endpoint values are converted similarly to other values. Return value The previous out-of-range behavior is returned. comedi_to_phys 3 Comedi Comedi reference comedi_to_phys convert sample to physical units #include <comedilib.h> double comedi_to_phys lsampl_t data comedi_range * range lsampl_t maxdata Description Converts parameter data given in sample values (lsampl_t, between 0 and maxdata) into physical units (double). The parameter range represents the conversion information to use, and the parameter maxdata represents the maximum possible data value for the channel that the data was read. The mapping between physical units is linear and assumes ideal converter characteristics. Conversion of endpoint sample values, that is, sample values equal to 0 or maxdata, is affected by the Comedilib out-of-range behavior (see function comedi_set_global_oor_behavior). If the out-of-range behavior is set to COMEDI_OOR_NAN, endpoint values are converted to NAN. If the out-of-range behavior is set to COMEDI_OOR_NUMBER, the endpoint values are converted similarly to other values. If there is an error, NAN is returned. comedi_to_physical 3 Comedi Comedi reference comedi_to_physical convert sample to physical units using polynomials #include <comedilib.h> double comedi_to_physical lsampl_t data const comedi_polynomial_t * conversion_polynomial Description Converts data given in Comedi's integer sample values (lsampl_t, between 0 and maxdata) into physical units (double). The conversion_polynomial parameter is obtained from either comedi_get_hardcal_converter or comedi_get_softcal_converter. No range checking of the input data is performed. It is up to you to check for data values of 0 or maxdata if you want to detect possibly out-of-range readings. Return value Physical value corresponding to the input sample value. comedi_unlock 3 Comedi Comedi reference comedi_unlock subdevice reservation #include <comedilib.h> int comedi_unlock comedi_t * device unsigned int subdevice Description The function comedi_unlock releases a subdevice locked by comedi_lock. Return value 0 on success, otherwise -1.
comedilib-0.11.0/doc/acq-seq.gif0000644000000000000000000004410612416542105013202 00000000000000GIF89a5Æðÿÿÿ,5Ƈ¸ÿ€€€ÿÌ™ÿÿÿÿÿÿÿH° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\ɲåJ0cÊœI³¦Í›8sêÜɳ§ÏŸ@ƒ J´¨Ñ£H“*]Ê´©Ó§P£JJµªÕ«X³jÝzUׯ`ÊK¶¬Ù³hÓª]˶­Û·p›zK·®Ý»xóêÝË·¯ß¿€ùÎ L¸°áÈ+^̸±c¶ƒKžL¹²å˘3kÞü32çÏ C‹Mº´éÓ5=£^ͺµë×°c˾  óìÛ¸sëÞÍ»·ÛÚ>UëñãÈ“+_Mœ§ðœÍ—KŸ^6zMë1±SßÎ]¶ö›Ïq~ÿïN¾<Óñ0¿£7Ͼ=æõ3ÃÓvO¿>UøöóëGŒ?¦|›ýí'à€3Hà¾eà×%è iDh„ÄQ¡LÍeX „Ù¥ÇazZˆ!ÒV"…¢ØáŠ^8b‰Ùãƒ4ζ PÖ¨ccn8"‹$þ"McˆGÙ Jº¨d,:™a‘@zXåŽXžvãO9fé%aNh$=Z9&”QI¦‰L’\te¢)%•MNæ—x޶¥O]æé§]*º©¦h:¥“rž)æ“êÉ(b¡† i¡”’Úù蟘^¶gO}fêiZ”šIh¤k¦˜¦¤ƒ’j⛞©ªz•¦ÿú鬔mÊS§´æ V™ˆ>©ê¯¨úzg°¾¶*¨¬¿+«²Iêê¬b¶î„^¯ÏV›•‹ˆ†Êì›ÙFI'œH2:ª·Íƺ"ŒÔ&KeºÖ¶»»WæÄ ²!Âëî½Nq˜-ºÂɪ·è† i â^G°›üÖæ¯°Æ‰ð¡öâ+±V+/ŽW<ñÆaáZ—LJŒ×¤Kö4¯«k,òÊV—Ë,ÇÌÖ¤½F;\Œ4Ã,óÎÒòÈóÏåªÉ =#ÐH'­´µF÷k—MG-õÔTWmõÕXg­õÖ\wíõ×`‡-öØd—möÙh§­öÚl·íöÛpÇ-÷ÜS?Íg‹9/­÷Þ|cÿÚt±sY/É}nøá m1N'K3âG.9y£¬Sãñâ=ùæœwÎÛ¥–~·x:{núé¨óg¯ÍÐ¥îúë°Ûh7§±×nûí¡±.î¼÷î»ÏÁaüûðį—îó¯üòÌ£…¼±ÍG/ýôU=_2õØg¯=QÖÓ»ý÷à‡Ÿ9x‹oþùÙw:úì·ÿ»ú‹»/ÿü¯Ã?>ýøç?¹ý€¯J7Ýú  õ4»[ñiL ÈÀ:ðŒ '¨ÀÒ ð‚ÓûŸÚZ<ÁqŠ‚ ¡GB bð„Ë WÈÂ`ZìÙ]HöЄ(ÌáðThÃúð…$šÿoõÃ"q8Ô¡qÇÃ#:1„0ìàèˆøÄ*Ö0‰KÌ"ìšhE#rÑQâ¥ÕÅ~±„PÔ¢ÃwÆ2Ú°H ¢sÊGF7ŠŽÄc±¸Æ>rNv4cå¸Ìõ@¤PYA M‘/”Ð"%YÁHF2B‰ô£&3Ȉ»“"ífÁ3bM<%*óÆrQ•/Lã&g™Â1¥z-k_'K+È–ô—€½ë²KÈñXöŽz•%eG«·Ï&2´{UgýYUÓ¢¶ˆ’%­lñäZžÿ¾V¥ÄšãG§uÛÞÆv¶ÀÝQm{ûÈ’Ñ5~xÓ`Ü‚Ëܘ —¸rÓqï×ÜêÒR¹h3ÖtujÝîz.ÿú§«úÝòš·:ä¥ÉUÃ{Þöº½Óýí{çKßùÄ·¾øÍïTTF>>M¿0÷WHNqTÀN°´òVàWNÁŽpŠÌ8SXÂFðß< £eøÃÞp8ýwa›ø½"®ðp<|⣘Å#Œ]Lãòθ¿fpwì]Å5xÅ%汃K`çøÀ|‘/Ò”œ4&WÆÉ?ƒò~W›¼Ât »Ì ®°<·ÝHY2[æòrµ &*C¯ÌBy.to¨›-¯ÿµ_¶òrÜüæÈ¶Íâ•¡œÓ\g;“y(jîó½ñŸ"œ™ Ï8$ÿolßÅãEa6¦ÍÍϒ럟ÿ,¬P3JÓ†+4àî> T zrŸ¦\¡*/ê>Uó˜ûfÚ¦úÌy~Otæ¼å 5,*îj[ëÙÑã4š[iÛ†W=Ÿ­©Õ•Ž[Ù‘NêO¥z)Mzu¦ÖSª-:Èõj7mêk}ëÎËns‚>3íMeú^D.oÖÚ•Yß(ÞéØSºsð2Õûýªx‚ëÜä3ÇúDOöÄ+þs~ÿ{Å}JoÄOÕ¨çDìËÓÞPŸÞm:¸5xΣ¼òŸw&LÑûž';óÚ¨ëm^{¨bÝ÷£§ùÚ?ÖöxcH÷+ûÖ!RÈS®{¼üÈPܽW‘ÍL>ô·ûž¶õùs·üÿµqüì¿ö)ûùïÞû¥K_ñëIëî—O¨¾©´ç¾í½îm§36ÛÕçXlW’Çy¤Gpp…¼§¥G|fáYÐvhvÉw€p—t5Çs8|tÁïvfØ7€¯GTžwP (w(|ïÇvþN}·z¬X€'X+g÷Uy%IÁÇuƒ»r}!ˆYýVoøÆ€‡ƒöUFØuàå<Å€(„[Eƒ)8vwQ‡µƒ&׃ÆÇ\8F?Pá–zéhX¸k,ô…Pˆ°‘v†7”†ç„烹÷†™•†rÈ‚è5†axkP—^Q¸iCÇf|Hm(„h†è€ÿø„ÔU†‹XsB÷Nxjˆøt~(ˆÕ†‡Ã•‰‚Ȇ „“8P¡8‡˜‰Üu‡§¸y{興ˆ1öˆŸøŠî'‹c¡𑋺(Š­è…¬ˆ‹ºèEªØ‡ý—g¶Ø‰ÆxŒž”Œ³Ø…å²&Ó˜uå†ÖøFØ(Âè‚8&†Ë‰É%flóc‡†ŽéxˆÙˆÛøuîøŽ¼Ž´¨b`XŽÃH[«H_‚máx‰dèØ‰µ(Žª7ŠYmó˜)ù„‰™ã¨‰ü8‘òkØt¨iÊ8rºµ$©‘y‰%Y‡æI’›ØŒåˆ’¥Q‘+ÿÉ’)9©“*)“F†‘#g“7“ý(’#©n/ “?ù‚̨ÖÇ^‚“Ké‘Fi3+T ” I~x”HÙ‹=)\;©”`–øˆúHŽ˜F”Eù“nI@WYt¢+[é”%É–/—r9’|™;e‰•U9•s•Oé•®ö—¢A•Š - ’g‰–먖ɉÞÖ˜ŽÉ‘˜ÉÉ“‘É”Iù•y)”}·™œù¦¹©n©©š…yz-ˆ˜Òö_•…šL˜tù™ x9“P (H62õè5ËVÁù)«ùsü…œ¯)mÔ7˜m¡c{×§v&Ç3œÄi¸ÙfAöqÚÉ5ÅÿÙ”¢é›²ù1Ø92Ô]!׋éùqëÉž€Ö׿cÓŸ‰ewYžAi™³iŸÒ†ŸùÙžscð) ÑÇÍi# šZú¹ ê¸–¤ ž z ñiJã¹+ (*~JžÞy¡ú¡ ¡"j˜£éŸÂI¢# Š—–bꉟy§ )šl4Š¡ë£8Ê›üÙ•@˜.Ú0 ¢!ú;Z¢š (š£:Z¤/s¤š¤bI™VELDúž/j£HÊ=àØ¡]Ú¤_šfô¥ß9¦=Z¦f ¥Ó›Cº¥Çi¤‹¸tƒ.¥pû†Š_µ¡š¦tJ¦U:Ÿê\ª¦Ôé£O ¤ ÿižq*§´‰¨jWuDwÊG€¦¦3Ÿv¨j§9¨§W§•¤q3Éée€Ú©¨è© šo3ˆ§3ا2Z¨÷(¤¥˜d‘Ê£®çªú7O#ht‘Ç„„Šˆ¹*© Ø}5XJ£‡s8«´j¨c¬r—} h‚;Ǭ¥©Ïú2Ï)•µê °èª9HswKH¬Vó›×¢hp7…Èu—ª…NU5꺮.)oíª}Ójƒ('¯èJ¯çi¯üØŸ4É•àÚzúš¬KH®ËSnʤ«ê®wº°|Z…¢ç¤ ÷ÁŠÇ#ª +„í«ë°&ɱRñ—|¤{rë~Ìç®çš­'ë­ÿÛlÈ÷}ZX‰Ì7³<¨—6{³49ÛT;KMÔª„J÷°KŠXšZj°5*‚ x#vïjtŠÊ¢º9e8k~ÇJ¾º¯†u£zª?Ç®`K¶+³ìG³5»ŸJ°õ:¡S+…¯:P ³|Ê€:Ȧڵ)«¶T«°VÛ¶óçyß·g qD{wè}%XtYËr€{«A;¸O«^QÛ›÷éF ‡Œ5–šû¸}˪E³Sµq(ÕUË¢h{+s dÅzda¶œ@{·2ˆº{˳§[;¨+·*ꨘ˲ºû 9â‹Ûª f˜‡>d ÌÛ¼ƒƒ»$V»n7»Ù«½u ^ϪÞÿ8º(*Û­‚« _k¢ÂZ°ÄÛ²º¼ìHŒiÆ©Û˽íh¿Õ‹¿ñ+±ï›kû+°R›¥âÀü«¼þ ìiê{¢B»¶[d&"Ò+¥õk½M;¥ Ü%ØÑ¾Î §Ç;·›ÁmJºäK¸ê«ÁœÀFÁQG¿- Á¬¿)ŒÁ'<Âã åëÁÿû¦òž[3¬™[Âé[Ã|Ã8 h,|¿ú5.üÂ2’ªjÀ6|¾G¼¹ñѹÈë'à±èéÃZ3ÅüÀØ«Äcœ¿LÆTÌ—^üÅ`L½¿a¾˜Ùš–‘•“i—$,Äó Ã1¬0¹F2ìÇ`ê,tüƒV,ëurüdwÿÌhÏ2È„œÇNã¿(Ò'€ÜÇâ1‰¬ÈFœ/)À5 žR—W*È›ÌÉVƃÊN|ʪ¼Ã"ÉÁ<¼¢›Å"ÊiIÊAŒÇž‰ËTÌÈ…ìX Ê¡œË¾ÜÈÄ\Ì»ŒË°l·žœ»Å[YgÜ2·ÙËÈl–ÊìÆÑ Lj\-©z™¬)Ñ\=‹œO¬Ëžk«® ZÙÄB+Èz,¿CëÎå\ʹ̹|ΙÄíœ+ú¼Ï‚ÙÈì쵋Î3¬Î¡,¦N+ÏÝ,Î÷ Í]ºlÏŸüÌÝÏæ¼Î}ѹ©Ð -Ð}Å÷\Ï´…ÐÞ Ð]ÅñìÐÒmÈÁLÑù|Ò¦l—$ÿ]Ò Ñ+MÏÂÜ̺ÓZ,Ó3ÍÏ5-Í7MÎ@} µ!íÓ?ÝÑ-Ô9­ÓiËÑóÜ9|˜ËÔMÎ ÕïL1ãÓ_Ð- ÌK ÓµÉŵÌÕOýÏÜÌÖÖ<͵Zí7ØL˜wÝßüy­+[×µÜ×d)؉V„ݼ‡lj¨iúÎŽ­ŒúÈÓ¬Ö´›«œcm¥ÆLÙܪÃý­ÎÃ¥7Ö¡—ìÔJzØl8Ö—­2™¾‚í¢¥M¢§íØQÝÓ ÂÚ_mÛaÒÊðÙ°‰Õ,ׯY3©Œ, c)ƒ3oìÙaú³ýžµ]ÕDíÜ-PGã/uËÝ"Çÿ½Èüܼ}a¦-¨ýÛ£\Ö0‘Øè× ×ÞÝŽ–ÍÖ­¤3²ÁÙm*8£ÜŽBßõ]/†Ä–R3Ù Ù~:3÷ýÝ7µ/Ô¢/sâËlÐJ×ÄM¬¿hànwÝÜ=3ª}ïíÛñ]½óý. dvÊ®ßÎпñá¾á">8þ Ü,Üé,Ú­ðâÌ13žÞÑéâ(>â**%žc´;ä+ã=îÏî}á·›âKî×NãJ=ÑÁà–ýâ>^äSnäÿ½µ»ãÝýåMæaž\_r Î.â/]ÜI.àLnæUî¬=á³ ØêÚ\ž2ožážæ×²œpÎãˆÿ~æG®Â8‚Ùžž´ù_›ý£Z¾:îåeŽéwNé"íÒgåA~`¨l ‘~éd ä¡^êË[bª>è„~ŽÊ½Â¬îæ´NÝ{މ޾ê0Üê®nåÌ|åÎ ê-~0eL0Þå$þê….ê/NêµÞë¾.ëÞÆÞæ¾hédÞ½â}ì² éÏí·¬ÞÀÞIýä n`užév®ìH œÄŽáÕëéÎîí¾lñŽî˜Îëô˜D¢ÁÅž0ó®î‹nÓy^™·.ì/ÃàPžîúNåôN1÷.» ÿíÿðgnÁÜ®è/èõÞÅç.ñùNñí8ì¸ðà5í'ò×ήå2nâ,ÿÏñhšÖ©ò2oæ ¿æVM¤1ä3ì#ê|>îq^ãîNä«"åŸè›¾¨ªé/ïROò§.£Ó®Ù.õc|èá=ÚÚ½ò:/ò5OôÒXŽôO®éïþóþNö_Ý-ªô4¯9ëîõmîöL¯ðûóu~ߦNá¡N÷Bo÷ßôçâNî¿l߇ÝÜ0pÿôœ½övÞöûý÷|ðVOð–ÜÚäý8—²óCÈ…Ÿù‚ïöµóqÏâô± ÞVͽ»Ü‰÷ö>Ü`­ E*ù“Lù-îzú.©ñÞÛuŽ]mî·ySú•¿øœ^ôŽ?°º_Ó¾ƒÿöœÉŸûÝjüú±‘ˆŽ½Ï¿ÝN¯ø…ÎûŒ~öžžö±lëìQdr›í÷Ÿà–ÿø½×A@à@‚ D˜PáÂ…0‘áDŠ%VĘQ#Ëhì¸QäÈž$™RåJ–-IžDI ¤Ë—aΤ™SçNžoÄÙÓ¢P¢E]†„iTéR¦ “m:1hTšS~Ìh•jÕ›]½~VìX²eÍžE›–ìV…½²…÷hW™rjµ›W¥ÛŸzýþMø¶î_¼€¥fÄŠ±°aŠ&û2†¬Wðb¦Õ^ÆœYófÎ)WŽ:«LÏ¥MŸFú©ßÏ¢¡bL<ÔµÿÈŽ«gßVúx0k‚tqÿ.ê»unàÅw“Ži\ùܾÃ/Œ$ô†RÇþòaDÀ3mgß8ùqÉá#{ßn^½Óô¯y«o»ñz÷6éß·î³{`çø·¯¯<ÿò êºñ0@»ú -¾éîcð@ú"ä‰B á3Ì ÷ڰööö'ô°Dû31E4Ô‰Ee{ÑCZÏÁÑ ŒQFsÜpFy$ÊG Ü1<CpH …\‰I%3„òÉœ”ò=+”îF«ÄE.»ôòË–¨3.2G:s«#a¬±Ì¯t3»4i‹³É:± ÏŠä; Ì;¡›sÄ?rÐ’ÿ ¥.P-õôHÐ7-NQ$!UNÒI)eSÜ,ïщøä(IMã´ÏQ7-ôÔU½­ÔP=eÔêüdõ¼"kµõV\{ÛU4Wg5oÍN·ì•±_W-ÖØT“%Yá”3ËKÛt6O«ÕuAl›Ý®c£ƒu!Y‘¥¶[¹¾ÕÏ\m³í]uWd—P ÷]Ьµ7*wïÚv_uýåµÞ„Æ—X3US‹Öu D-…và†ÓzØÌr¥7Xà¸c?9d‘GàœL†W2’Wf¹eQþßb%v¹f›K®ØÛ‹?uTãoh˜ÇŒ—*‚Fºå¡YziõM:j’ÿæPæD¥ÍÔçs¥æúåœÙ2ùè®Ç¦:¥¦ûUyl²¿VsçX{fÔ[µ×6øÚ´çŽºìšŠ®•f¼¥ÖM¾ÖT·ÕüÛf±=œN«OÜåÅ9nüÐÁUõ;r–'§œm£Wˆàtë»ã“LÈôR§|q×RöÓM÷\_ÖP‡½õÜW_}wßqýèÙW¯Ývl3>ùÞ_W]÷à—Ÿ¼r¸-~ú Ñù->¸æ§õí]o½ûÞ¹ÿXúŒÏ½]|ò™Wüñy_ýÎI‡˜Yä_nß}øáÏ]ìÝ÷§ý¨§5ŒM«zKñþš½ïµO~œèt–6Î0 Ÿû8·ÁÿìÝ«Z~« -ˆA –Ïkœ yv>ðøë‚äË e‡»þ™°|$Ãï †/| ù h·êІ<Ìßþ`ÄJlN´Þô¢õ3ŽÐŠÝÓßöH<>ш0ä}¸Å Þ°‹^,âÆª(BbQ‹L4#?wÀ‚\;8ìIßWC-².~pdŸs· úˆÑó]ÁÈE9Î1T„`ÿɸD‘Œ‚ R# bÇ4¥üY>Ö…0z˜JØB ½>R’”|teéh¼GnMw¯û] KïP“ŒÛÛX8E[jNh¨ÌcúŒ©8d&óxw[fÍ„˜5ôÍÿr œ ˜'sÍ›MsXÏ‚$77×Ì ¡MâT9[ôK`SAÁ„:ǩͦ¨Rž+ó¦áÀi?hÞgôf ±öMkÉŸøTçÉ”yÐ&æ 'CãèP£ä“\+"<6±³$´* •¨/)ZQˆ3¤èCêΔ¥´$‹±(ª·Qޮť9¬åÁjjSvâT£“"v¨ä›‚EìrfKÐèøyÔQiw€pâ0ƒÛÚÉö–¡L.h¯:]£åµ¡Ÿ…ÄÜæ¼‹-k HMâr÷;P»å*…WÉüOv~<-cÑDÞòæ×À¼°þ<¾áÅ–¤¨ÅÔz Œ_Vx¿ìSâïþë»ßVÓªâZír$œÖ¯1‰Ìàÿ÷^린¸®õnO¬Äª¸ž}°€1']ÇXVpøøwcçX¹òÅÿ(}‰ùâûâWÆ ”!”‘Ä_—ɤíí“§dGò¼F>2®ÈÔãÊq}QF"#Ye×w¾ýðG¿ØÊ+Îð–jf±lü\,gy‡aìa†KiIY¢×ÃF-l“üçI†—¼\sxÓ+bÇ«§–S£–-Ê./2φns93ÍhNÇî^,˜ÅKØLιÔ7£‰=Íf4b× ,å–›§¤ÌB Öü}ã§U}hgB²×{#°‰ãAêøTs²g$ Yjç 9Ø©¶•—œd8ÛºjçLÞ‚uùJ5Ç/Àñ•³±œKQî²Ü+–ô¤ûÖlu'’Ýt7]Gë¶­4ÄM%HÿOzî=휕ŭYYð~œßT¥/ç˜EÔáñÖö®žØ„C˜RÐx^!_ooòß„kõÆ/NòU¯Så+×sÁwœr‹‹ã¡ÞZò½½\¢o¹B}þó›ã<º47)`.o” WÉ9×xE ä¶N8ÛFzÍmÞb¬‹™ÞI‡yÌ™q§w[×.RwsÝ#;.8IJÕ­Žô {îZº]å®ö»g|®ªÕîßEöîZjï_Y{­‹w,ÇÔNmGÈß®hÇ[æÿ‘8T)nðµ¾Ì·M|¿ûžÙÉrêðtÉmN£Îø&þô?ÙkOq]yÍg=Ñuíó”`Kÿ¼Ø}·š5=èSh†³¬yמð!O¤²ïüì¶ç1{)ŒðÐÜòÑ—þç©?|Ú¾~﵇þïQwÊnù¹üp·öÛ“Ø»æwöõÅÏ÷mú–ûMÚ½?§"yãÓ?ùö??È(œÇº´“0Äk/ýóšÞ½îC@ê‚¿ø³ˆü»§ýó½+ó¿ÿ‹ÀË#•Ì˪ÍcÂ#³ú«°¼°^´çi0ËÀ§s@÷Ó>÷º¡ûÛ ”' lÀÌÀòSÀlA… ļâë?ä+±'2²±Eâ½t>ÒS4í 7 6\RA«>ë›À ÍÁA"ľL%ýZ°ë!ÿº°Sb@ÿžk'!ì@0l?òûZ±tB=œ=QY<Âs5+j#;ƒ<£D=œÉ“C?³¤:¼ÃM£24›C¼Šœ/ÌDã£":¤¶TEE×@K©À ¿ã²Å+B°SS¤@ZÃY„Ca$µ:‹µ%B5ÚaÅ—pÅ’A'Y¼«+°aìÄgœc”ÆJD·ìR?¨c¿ „Àcã%D°eëœdÌFt„n£N»6dBj|Å2L?¢ÿ©"rk ÓñÇü'µŠÇ4Åz$Ægü³5"D®¸ôsAÿ$;G…”ÂuË¢Q¢$Hû£<GÎÓF SÇ:\tG IxÅ©ÂX"Fk”¡$´6X,´lRÆœŒ§’¤¶“´6wlÂ]ôDH|Ž‹H±KŒ´-¥\Ê’ØÇI„Êh´É{lÈÈŽÄ ³‘È÷“Kx4GFJ[F¸DL¥›K¤dJ»$ÁÄÌG4Á§{ƒµ#úK@êÌ-zEEì$LÉÈt8ŶlÍÕ¼ÈÇŒ'¼$¶Ú„Lã¼Íª”‰­äÌdëË­D±žL—$Í¢\NÚLÊãTË7TNüÅrlN­j ïC‰Ù|Mˬ(å³NX„Fïäž‚üÌšÜMr³IlÏ;¢LÔ9ùœHSO£”?çÄ@áô»®«Le2þ€O•äÀ-ü›þüDÝÐð„POƳРÌâ\KõE5Lºœ?#<ѽ¸Pʸ«ÃÔAE™iÔÌÄñPÉ Ñ8 ¯Ö³Î£dC¸DÑ ÅÀÍ ¾êÒö”NûÂÑʘQ=™X´Á/{'ñh˺|Ѥ2½­H²KÏ(uËÿNŽRÔ=( R)S*M--8]RÅØRqÐÆ4ƒÖhµ0ÿ~DW~4ÈiU½-ÍwÕ׈ÍÒ‰¥ÂŠ¥B,Ó5T4uMW×E­ÅfìD)SÅHÖ=äXxÍVGü1HTÂÃÃ’mªðëTOuSœµ¡Š­1žĆ5YaØn-X‚}ÕytÙ™4H¶z½V!=Ö–=Å[„Ù\\V”·¬»Y•…ÂQëÚ:ûÚ”ôÙ`=ÙaX³…ڕém%?Gzý×¹uVwµ%z ´G[vÝÛ±mRråÛÄ­Û´íÆª\½%Ð#MRÈjL¹µÜ»äɆT¶h¼Éo%ΚÕX´eÈÎÄ[BƒÜ=«8Ú¬Í×ú\N+ÝYSZp}[Ïmúdݧ-×GÛÍÿ|[£}›ÝÐ]šKRòµdóʼ=]œ -X¥Ôm]~ÍÜ_K^BÃXÉuC·¥[¿ÕZêÜ:n½\‡Þ1ÙߌÊo|™S ÞÃÖç^Üý?²ì]ü]ÂÜç ÂÊUÝåÞèÕÀmÛþåßÜ•W†[{¥SÄßñ½ÓYßý­]¬…àí]`øåÁ°;`¦`è…@K `vÞÕ}ßîõU ¶ÝäÖæE &^ÖV–àöß¶M.\V±}åà¨-O¾_S+ý5ÓÖà¾-áïýà"VÜ 6im[öm_VâðåWNbÚeÚ'Æb#fâ¶Ùõ>-þ\ã&½ÿõý8Õ•â)àFâ ÞâümÚBÝà®c›µS¼@Ð6¾ãQÌ 9´U1Ž>V¸«å ½Ýæ{`Gîc?Îe<†=Þã.^e>\ä“b5\Pþäe {æ"΀UäváHöfÚøÔ™-ff~dYe±@ãqNc2žærÎäípßdFe9Þæ¡ìæX6笘»QVçvæDUcfÞ¼awÖeLžå^Uaj^ä,Nç_–fÿ€¾çsVè…6hU¾h|~ç5Fݱ{6O–èˆx­çŒž^„ã!6iŒþg‹Øç”&e–NebæCŽhþYvi†®U’~艶goáyÎgžéj®h‹né’†er¦Ó–Ðòխrje^éª6X¨=ìmjˆæi­>jŠfyÖh«k}öXhîh¶£é«nk k›^ë¨Vi‡gí=ëìÅê¢îRºþf™æk´–ëÆéEÔ›Îë®~ëöÛk%ê žã NìÈ6ëÄ&kÀlÊ®ì`.Ĺ^’Æí¿í²VêɶD½>iFm£Fè¡îg°níÑ&íFîlÄ^ï l÷…íÿÒægÌ>è̾l¯fdÂÆßÌÖìÙöm˜~íÕÞíÍŽmÏV¼ÞfF g¶íä&îç^ì¯fn]-lá¶kΖlífmãfêàÞn·nîßVîb•Äm^©ì–í¾6ïŸ.oönoÕæä:ênôãnÅÎoç–n¸ðõFnì¦m–+ðt™:¤8‘§ïôïú¦pÓÆoûÞêâ†l¦@¡½ —Þ × Ï lžp ¯pçmLö·o©ø&o\éÿ>î¯daÖæ oèâ € ò!'ò"r5ò$Wò@ò%wò#·ˆ'—rôçé,+¿òÂD­O»ö ñ¢†6ÿÎ0q.Ïr,Oó·eeæêÂ’r'oò9Wò:·s#Çó<'r*/ >Oò=ô ‡)ô>WŒCrµ¾nG1‰Ò”qëë2Wt(oŒJ·t©ÀtBòM÷ó§gð ñôNÇtAtTôOÏŠMgrS¯ôB/uX?tF×pzyôï¤ùþgJ?uZ¯u`Oua_u÷ëkÂq7O¥'7ô%Wõ>§sb‡vg—öEö6¿tf¿vM×vj¬n¿óD§óm?Oþ‹ê>ŽÚ@÷èÕ¾+pôj?rroˆ)§÷¶°wo/wðîñ»æ÷“w=—wB¿÷ÀÈ÷pÏöq×w_F“ƒ÷ÿ„wö‚?÷€/òÏhöˆ_ø 5½}‡î1¡xD‡ø;—ø»pxù@ùèNÙõ’_ôgò”·‰’¯x™¿ø‡çxÚ°yçv…GxŽÈy”Ïøzz/÷ %èÇ÷£7ùŸÇø çˆžù“×sš×Â7å×ú£€ùLŸú¯çt«¯x¬ ªû¥ß ´{¨ù¢§:±õú›ïò‰wwz»w{¢—z£ß{ŸûÀ¯úóáîxøEˆyo|¾ü#ü™ŸüÂ|BŸ|C¯ü´ozÆwÇÿ|ÈW{³©øÌgòÐ|À—|Ô×|Ô·ü÷ìsÓßü¶wû“ýºŸ{ÿ ¤½ ßoˆ}Ö?}ÜtÛ'øÙÏýËþ‹o}ávâ§|×çül&ÖP÷÷Ô~ùy/}ìýÎ'øìïþí7xk÷þ™O}î'ÿØ×þèЪ˜vôÿ~õ'yñwÿó‡ÿÃ’ÆOÚ|áW~ÑýÝ,X€Á„ \èðaB&H‘"‹/Nl‘!G3bäXñ£@‘M’ìÈ%È‘&+jTy&Μ=êìéÓ'Ïtýiô(Ä¢H#b´¹ÒeH˜"[†”åT§S_b©ÕêÈ¥b *KÖëÌ­W?fM £Ô¦nK®e+—åÛŽfÍ–UØw/`¾ÿ[ó+ݰ]ïVM wqGÄPÛeüÖfáÀI5s–šshÎÌG3$“æÜÉ+GNýtuR´xë…Œz¶êÚ¦qŠFÚ÷kݱ-;Æ·5pãÇo7Î}s7ïèЧGϘ1ôîf~™kwªßë–Ý<øsê„ÕgÿL”ýôÞFµ'?ùyî÷½·_ž¸júÁQvæGÙ~âõGžCôåçßüá€IW!†¥‘e[âw lJøš€ ¸ ‚"*8!ƒjèâ^òÚ…0&#P’H¡_'²˜¢‰:ªäB¿=Øb†8æ(d^é©(z½9¢p÷­¸#’IÖh#ÿu}Y祇#b¢Hf‘>bIdLÒæ$ŒJrY¤{ØÍ£iFZ4f•eâ·g“R†TÓh¶É oÊ9Ú¢¡ JŸp¦i^¢Î Šh¡}úIU¥QÞ™Ò–Ÿ6ÚaR’&s–8)¦kÊ¥™JzèŸ²ŽªÙ­Ÿ¾ˆžé*V®ûÑÄi Ë5E¬¢ÆF†¬¥ÊKh²w+ì³gjJë²Ð6k[µ¶ò6(³žŠê¯œÉøå®©ô¥µ³ÂêU¸«bÛ­«×¾{¬¶âÎ9í¾u’[î{¤95ÁöîT0Â<Þ›0—2œ0¿†¡ú0ÁS\±³¿º°ÆW(ß`è¦dji$_êÿÈ!t2C'ó$rÉ,§¼P$‡&ÚÀ[Ü1›óìîÁ?gù1À?ÉØ+VEñ¼<ï,ôÓ?Gíô¸y =ôAW÷´Ö km0ѾÒiá‹,«ýÜE²N÷ø) ß¼óèC¬~Ãóžºî½¿¿ÿïÐo»å—ç_ùñ’ëOíÿD4¹û1Ï}ôó÷>—À’-0ndƒ›(Aê…¯T2û’ëÎb¿ýO€ ÿl„¼° nwó#œºÎGÀr ì`œüB?=Ž}³aZ¢÷¯º,mmkÙÛX=Ô©­é¢ ên†Á%jO…-$ÞYøBŠð„|Èà®hÅÎ1ʉS„â¥èÁÆÐj^ã YUC* CÒkÉLöC™ч‚`ø¶Â4jQL\¢»ÆÆ6&O+|Ø“¸E¿ø‹s‹d¤ÀÎHâ†j\c¿Ì¸Á0"r[ã&3™´G.m>Fû#Ñ&ÉKRr’dÿdå+µDJ$Æo‡³LäiBYI*º2¯ã¥‹p™K]öÒ’¿ã.‘YÆQÎR‘†;%*S™30&S™Ç´&âŒéÆf "Y¤7»˜i¢‡d »Úw¿tlxìÌáí4ÙÎôƒë«§uî¹Î|¶S‡Ž '3ŸY³h.bôä =ÕÙÂwÂó‰ Å|„©ž£™ GgÅø©ÐNÉœªœçˆt —ÊMØjzÌ|&*ãÂ5e·’ö¸"r©Ý V\SN×®±5¬gQH˜´e,†«ºi^ÇÕÔ\îKLJÿ¥âù‘´×|…R;”ÜS ·¯ÛCj&¢ZÎÏ¢í`ÍÍѧ[ÝÌ&á¢ñåã\£[Ü\…÷>å½Ûfrû˳&µjuœðkvòÐ6t¾c™M`2ü¹ oø}ï]_„csÒ÷¸/'¾ðW+ÚËÚ&8Ç1W‹‹¼ã©9¾ykÈ(ª|´,oùÃ!®q G\› ÷ùËînŠ“üàˆ–5Ê/MôŸ/=èMúÈc¾ÜV^¼æ Î9Îo.õÿ:åXwzÔÁîr¨=Ù¶·É] k™S½âZ'»Õ«þõ+ýé~úÝÃ.ö¹ÓëËž:Ì÷ÎwÜÎ|å}æ¹ÑcÝíE~»íY{Þõù²#ÿð‡ûà7,ùÉgþï~ç²×!OxbÊ]ôšß¼ç·]à˘Qýãe_ÏÄØË>•X©= 3®.ÜÛž-¼Ï _7áûóólv=ño/|)-ŸùËW®v¾ø-6õø çÝٳ˗Ô#]õÐ7¾ºÐNg[W8û¾·WŸÓ.›?>#¦cÑàïd×»TåÛvö ~åé\×ç?ú^þ­_â¥ö¥òe‡ü™ßÎnÝ<`ÚŸR_öÝþ1JÿK"‘ßîñÆV^ô)žÁ%¹Ü_Œ  `„`œ¨ Ù Œ  ðÑ^2` ÒR†ò)Éyà8q` –ß þ­Ýÿá|Ìà²`0)a³Á &aŽÎ*Mï…Zš Ê &Ú8áŠV¡¶²ž¦ ÆÚ`6Ûêܶa¦¡ø¼!ãÙ!fáöíÂÑ `Ì¡j! …šàö¡*â"b—äÞÀ¡!#BÓ$ÞQ%Æ$F¢îá ^".Eõâ@y¢ž!âJ")Ò # ŠÐìa¡*¶¢e¢+¾âûÀž,n"'&â*bO/"(ö‘.Î_Éb÷yߊ Î ~â Ú"nûí"/ ââeac3V(¢ã©$©U(2ã2âÎ3ŠÓv])‘cñ]#žüÿ7¶c)&a<¢•2–!šâa=:#8c7 T5j"<Òã9ª!5Nã)­£¥£7¡b> £<dü¤Äøc2†#F¤Df¤C$CŠä=>d"ãôYQ9VdBN:þÐ?ZäFRß;zä7²¤BêT?:`LãIFäLÒ¤L†äPþÊKÑHâdPžÐQ"¥MzcO¦ I–ä6¶¤O""J–`*&¥UF%À4åEeW.åü€eX>åTrå-6[¶%ï!¤5" žÜVŠ%E*e¹€¥šãG ¥î¡%TÞ%]‚ŸýudYŠ#äNò¥`Z¡a.$^j¥\â#`’ågYæ½æ_Öÿ¥CÐØ>£Î 46æYÞ^bähFài~Ž#c¦äa®_šeAraYðàAj¦:ªfjrä\ª¢­â¾ßêP Ñ&ëÑ"í )ß)tÞfrÅ/*QoVæZ ¢s¦erfï(§òQ§b.„gºæuIãxÊ;Ö‘q²'öax®e©g-^вÏvº#ù8›ë '¬icÚ nb&U‚ÎMV€Ê Ì(xvf_ª¤[ÂqºghZ"º8(Äâf¨…†¦.>§|Ê_&jèÜ㚊‰j‡*‘í(lÚei^çŒnF‹f£‡"PÆh.Þ(+‘N(A•¥ÿi‘"—~¨%•‘&vRb“ÖèjàX¾‘ºh“Ê^y*ÄyN©Ñ-hëü§e%)ÒŠž ™Æ!‡¬Lšß‹>âó¹#Šâèš>©)µ©›fwŽhéØM±)yú©Ÿæuª( &žª¡™niBt)ú&⣂¤{.Mïi}Vg™Â§}ŽŸ˜Ž©†ètŽè…Å¥Ú©‚ çÂè”nObºê÷‘ɬz)Lî˜úÆ©êè)(:NªlÚ*QÒâŸÆ¦|)yZâë<æQqè¨*ë&+ªV”v²«ŽÎ«º¦÷슬¶ŒS–͆ШnŠæî&¤få`N&iª¥”úÿ!³î¢¶*Jgù‘(¶F«¶öŸ°VëgÚ&zž‰Âä§Öj¦î*½ ´v'¹Ìk¼¢æoR©_z¥Œúëk äX«ÅRêÆJ,d ,tZÍ‚l}g¸¦¬J2ªA8*ºNä“bêW^¬cv¬Çvì^–àÀžìÈölÜ, ­†åwö+S²lA¸ì­B$ÃúÌæe„ò£Í&mÔ>¬Dý…«zO‘¬Ï‚kjBзò¯Âl¯òh|’íÔÚŽ4íÙfìÚ¦m{†)),›nm·Vêñ¬Ýãg²+Vî¨d¦_ƒ¨Š"è|òé±¢iÖ,éô¬škÌ`êÆ~aÚH®Ü.©¸^ÿëg¤ríÏB+ã~'è–ê¾®ÙŒ®”¬-øîæiæ–ªÚÒì0¶î-. ÆîÒréÓ2¥öÄ­Ör-¿„ì¬V®ÁÂjãú¬¬’®ç ïé²&ô.݊컊Sܯ·ÆªÞ^Öê­ò^¥öƪõÞìÆ^Ͼ^/òb®¯æY¶*ø:¯ÉŠ-„¦¯KrnôâíôŽú.ðbnõ"Q²Öm^*8ð†R«ùì›&sölânoöÚ¯†0ö pZIðÃúëÜþnëïîj\R0¡JíË®¬ôým8Z.~"¯ßLþ2ð’Bb¡:p÷¬°´4/ÜníØ p·Êðýz.¹ðç6(–ÿì «ìü~+rpî¶­¹–èïZð_SÙð³âðûòíØš°P.·q‹O #ð ,§> ×pøf¯ªë"s`ð¯fÑÝic/GñÔîÑo°¯ëçùg{î_qºú­ Ol!ïñ!×Lcmy©×š±W ü½±k52 ï±ïE²õP±ÔV²±Óú°Ÿñ«îÿÚk*_2Ñ2¨ÒÒ#_pÍF,[`¦nkç¯(zñƒ° ¿rÏìçzNãfù–ðº ׫ÿjðqjË0»ä.Ko1ï­ê2Ð1Ór£ï¦f)9i"13²-_d /ÿ²„ ê4soŸvoß‘k=o ®'ð4Ÿn_3¨ü© Êó@_hä°ÂV±>×í®òǰ»îùusÿ3) Zô¹Jk¤R4p¯yvp.V,Gcq‚žtØv3äà®J_©Hë®üÞ2ƾ4J¬MÇ4›tN—ôJË´ÙBlM÷tÑò4QÿjN·ôQsæMµ“ðRó¢KG5ÛžíTSµ»6u£’tÙbu^µW/æKƒuXslßf±;uYïY¯uJ«t[»õe*mü56˵ã5[÷t\ë5WÓ´º†ôYûµú¶,'µas]_CtËþµPã,Ô²ø&6Å2öSCÿ6e{ï§5Rã2L¶e›ä Òµ* vhŸ2O67³r.g6\ƲiOl`«vg÷³1v³2µd¡@»Ïbsßn·6fk°kgup¯¶l+rl³ëo÷Lcd°Ps"[,ØæöIKwqÓlt-A ­s×¶žÎóuÐ.Ým4ÝîAïsÁÞá2ëyû°Õæ³íŽ÷åº!Hgh}òx£w§qÈðµ|#.}{tv£lí"³¡®ðogû4ÝV®¯½%®·z-‡ïU'ï…‘‚ƒ3÷‘„·çBw.†3í‡3HãöNK3„;ów¯µ†£8ÿª8Të#"Oä—lo/¦&Û/…{±ZGÿÐ6G0'OPŽóìŽ;ä‘GpiáŒ#¥õV`s+×’‹ë÷ÿ·‹£òf«ÃvwòÏöçhË1†öoºqºBøC;ëb•‡N®Šõ’³9={9‘¯wöùiwý޹…øº%8—7yWù:ßõŸ[y n¸Sf¹›²M‰s÷òß3НV÷9qç/cOù_Æ9¨ zÓª¨Ïè‚#梶©oùó¡Kô0Ë6'?¹³îc¬¹1vú¡gæÙ«$_ ©kU¯óyv·2${¦GöV?÷m;r5 ¤?°‘Kò‹[š(ƒúæP²c{™‹9:ïÜ×2ï‡à±‹ÿv¸»/ª§³»¿ðˆÓx϶pã¹/ßú®³Y0{4ôÚsóî~ó÷D—;4¦8 ¿wD麕+¼×)Ák·ß¸U·µ7ô»ói~±!W7´7¶´£vÆ?6Åüf‚¹Ÿ›<`—<¾£õrO·Ê×$ËǼf¿:v®;Œ¿|Ë×õeï<Í2ÿ<&6xj }뼃+z—‡¹Ñû|Ó×6\?=Ìk5ÈÛõÊK=Éc=Ô_·Ö×;h;5Ño}׳óØ'zÔ—½ØëtÕ÷|Ò£ý´»=Ù5Ü3:iƒ=Ò{ýÜŸ|ÞS&kï½Èÿ¤ËÓvÖû½A~Í÷½áëýÔÛýÝyÒkâCáÁãÜðÙ“곡Ÿ~Š"úŒL¢}îÕ®ã·þ™Ë»¦ê¾_Àðå×¾ï3w*‡·gh9/?ó7¿ó??ôG¿ôO?õW¿õc¥£êõo?÷w¿÷f¹º…ÌéWÆ¢çþðShR~T‹*b“ÿð7âà .ªç§Žñÿ>çmü몚³>@8`Aƒ&T¸aC‡!F”8‘"D1P‘cG+nˆ1#H“'Q¦T¹’#É‹ºd™Ò¥H6 ˆófÉ™'IäÙsèO£G‘&ýfAŸJ¡F•:Õÿ!Ó¦T±Jåi5kW¯_Qréô%Ø…b‹*Ô±hÙ¥ Ý:E˜ÖlݨtíŒsn^¿Tñþ™6°`Ã}…>¼¸%㹄õ:Þ;âZ‹gÒ lSñÄÎŽ‘~f)Z2h³¤U¢f¬ÚôéÖ^Y}Ý0¶ÇÚ™#Z~¸7_ß 9¯¼=Û6í™Ãó"'Þ¸·ðå •?O]úåæ©«G†>úxîa­wÏn—ºÐñWσ-/7=åö~׿§ÿwzÞ¯I뮊yìSÎ%ÿ‹+¸‘j"p²íìóÏ'®6zн›ˆÒ@ÿˆÂ)@ ߣ/+¤ÐÁ«pB+‘ 僯=Ýb0BÄ Tÿ°,]4Cq«žúËh¯àdD-¿ïäÑHë°Åúóí@³kK»Ezò?MümI-±tï< ÓŽ=*»4¯K˼ÒK%\1Åäì³)2|pÆTI÷ªl3Î"·,ÓH³ÌSPã*#¸$e’OG÷|ðºê~¼/RÈÖQÓ&ëäÒÍÉâïRñÜO ûL¬V}Ó3P%µÔM3­õÒTÍŒôKYÑÛÑÓG!%mH¶xýuÔÁªÒ;ñjõ.: TWcO•iÍ*É’vïæç?€4àXš´e/ tà!A JpX œà1˜A nƒoª`ý:BŽ„%4á[®…-tá 7øA´Á†5´á qØ>r}A]D!qqàÁN g¥èŽˆMtâ¡èAä…dŠ> %%›(n‘‹]ô"~œ“º+ªð[HûÑ‹¢U¯™®Œ_tãáÇÝÊ^rù”eYŠ~I”ÓôLV85ÑÑPr4ä!ÿéEƒÎz“#¤Í(wóYîLrœÑ@ÇÄDn’“táô¨·2@&/‹ËY%‘9LöL_žtå+aÃ~…2le eL2É›¡sšeÄbLa³ ¼äÐ2É]^—¾ÊÓ~õ$bN“šÕ|Ÿ1U‰LV®d™å¤ëjùËrY“œå4'øI´‰Íg)é¦Ôô¢FßMoìlã9ñ™O}Âj+gôØïŒyÇŠ¼³pû4èAšP„´” uèC!JM†V1¢µèEå8QŒn”£u£F=R‘އ %éIQšÒšT¥-uéKÈR˜Î”¦5…ŸLmšSîTx8åéO ÔêøT¨E5êQý!ÿ STARDIV 5.0 Toà.;comedilib-0.11.0/doc/calibration_funcref.xml0000644000000000000000000004717312715330034015707 00000000000000 %comedilib_entities; ]>
Calibration comedi_apply_calibration 3 Comedi Comedi reference comedi_apply_calibration set hardware calibration from file #include <comedilib.h> int comedi_apply_calibration comedi_t * device unsigned int subdevice unsigned int channel unsigned int range unsigned int aref const char * file_path Status alpha Description The function comedi_apply_calibration sets the hardware calibration for the subdevice specified by device and subdevice so that it is in proper calibration when using the channel specified by channel, range index specified by range and analog reference specified by aref. It does so by performing writes to the appropriate channels of the board's calibration subdevice(s). Depending on the hardware, the calibration settings used may or may not depend on the channel, range, or analog reference. Furthermore, the calibrations appropriate for different channel, range, and analog reference parameters may not be able to be applied simultaneously. For example, some boards cannot have their analog inputs calibrated for more than one input range simultaneously. Applying a calibration for range 1 may blow away a previously applied calibration for range 0. Or, applying a calibration for analog input channel 0 may cause the same calibration to be applied to all the other analog input channels as well. Your only guarantee is that calls to comedi_apply_calibration on different subdevices will not interfere with each other. In practice, their are some rules of thumb on how calibrations behave. No calibrations depend on the analog reference. A multiplexed analog input will have calibration settings that do not depend on the channel, and applying a setting for one channel will affect all channels equally. Analog outputs, and analog inputs with independent a/d converters for each input channel, will have calibration settings which do depend on the channel, and the settings for each channel will be independent of the other channels. If you wish to investigate exactly what comedi_apply_calibration is doing, you can perform reads on your board's calibration subdevice to see which calibration channels it is changing. You can also try to decipher the calibration file directly (it's a text file). The file_path parameter can be used to specify the file which contains the calibration information. If file_path is NULL, then Comedilib will use a default file location. The calibration information used by this function is generated by the comedi_calibrate program (see its man page). The functions comedi_parse_calibration_file, comedi_apply_parsed_calibration, and comedi_cleanup_calibration provide the same functionality at a slightly lower level. Return value Returns 0 on success, -1 on failure. comedi_apply_parsed_calibration 3 Comedi Comedi reference comedi_apply_parsed_calibration set calibration from memory #include <comedilib.h> int comedi_apply_parsed_calibration comedi_t * device unsigned int subdevice unsigned int channel unsigned int range unsigned int aref const comedi_calibration_t * calibration Status alpha Description This function is similar to comedi_apply_calibration, except the calibration information is read from memory instead of a file. This function can be more efficient than comedi_apply_calibration since the calibration file does not need to be reparsed with every call. The value of parameter calibration is obtained by a call to comedi_parse_calibration_file. Return value Returns 0 on success, -1 on failure. comedi_cleanup_calibration 3 Comedi Comedi reference comedi_cleanup_calibration free calibration resources #include <comedilib.h> void comedi_cleanup_calibration comedi_calibration_t * calibration Status alpha Description This function frees the resources associated with a comedi_calibration_t obtained from comedi_parse_calibration_file. The comedi_calibration_t pointed to by calibration can not be used again after calling this function. comedi_get_default_calibration_path 3 Comedi Comedi reference comedi_get_default_calibration_path get default calibration file path #include <comedilib.h> char * comedi_get_default_calibration_path comedi_t * device Status alpha Description This function returns a pointer to a string containing a default calibration file path appropriate for the Comedi device specified by device. Memory for the string is allocated by the function, and should be freed with the C library function free when the string is no longer needed. Return value A string which contains a file path useable by comedi_parse_calibration_file. On error, NULL is returned. comedi_get_hardcal_converter 3 Comedi Comedi reference comedi_get_hardcal_converter get converter for hardware-calibrated subdevice #include <comedilib.h> int comedi_get_hardcal_converter comedi_t * device unsigned subdevice unsigned channel unsigned range enum comedi_conversion_direction direction comedi_polynomial_t * converter Status alpha Description The function comedi_get_hardcal_converter initializes the comedi_polynomial_t pointed to by converter so it can be passed to either comedi_to_physical, or comedi_from_physical. The result can be used to convert data from the specified subdevice, channel, and range. The direction parameter specifies whether converter will be passed to comedi_to_physical or comedi_from_physical. This function initializes the comedi_polynomial_t pointed to by converter as a simple linear function with no calibration information, appropriate for boards which do their gain/offset/nonlinearity corrections in hardware. If your board needs calibration to be performed in software by the host computer, use comedi_get_softcal_converter instead. A subdevice will advertise the fact that it depends on a software calibration with the SDF_SOFT_CALIBRATED subdevice flag. The result of this function will only depend on the channel parameter if either comedi_range_is_chan_specific or comedi_maxdata_is_chan_specific returns true for the specified subdevice. Return value Returns 0 on success, -1 on failure. comedi_get_softcal_converter 3 Comedi Comedi reference comedi_get_softcal_converter get converter for software-calibrated subdevice #include <comedilib.h> int comedi_get_softcal_converter unsigned subdevice unsigned channel unsigned range enum comedi_conversion_direction direction const comedi_calibration_t * parsed_calibration comedi_polynomial_t * converter Status alpha Description The function comedi_get_softcal_converter initializes the comedi_polynomial_t pointed to by converter so it can be passed to either comedi_to_physical or comedi_from_physical. The comedi_polynomial_t pointed to by converter can then be used to convert data for the specified subdevice, channel, and range. The direction parameter specifies whether converter will be passed to comedi_to_physical or comedi_from_physical. The parsed_calibration parameter points to the software calibration values for your device, and may be obtained by calling comedi_parse_calibration_file on a calibration file generated by the comedi_soft_calibrate program. This function is only useful for boards that perform their calibrations in software on the host computer. A subdevice will advertise the fact that it depends on a software calibration with the SDF_SOFT_CALIBRATED subdevice flag. Whether or not the result of this function actually depends on the channel parameter is hardware dependent. For example, the calibration of a multiplexed analog input will typically not depend on the channel, only the range. Analog outputs will typically use different calibrations for each output channel. Software calibrations are implemented as polynomials (up to third order). Since the inverse of a polynomial of order higher than one can't be represented exactly as another polynomial, you may not be able to get converters for the reverse direction. For example, you may be able to get a converter for an analog input in the COMEDI_TO_PHYSICAL direction, but not in the COMEDI_FROM_PHYSICAL direction. Return value Returns 0 on success, -1 on failure. comedi_parse_calibration_file 3 Comedi Comedi reference comedi_parse_calibration_file load contents of calibration file #include <comedilib.h> comedi_calibration_t * comedi_parse_calibration_file const char * file_path Status alpha Description This function parses a calibration file (produced by the comedi_calibrate or comedi_soft_calibrate programs) and returns a pointer to a comedi_calibration_t which can be passed to the comedi_apply_parsed_calibration or comedi_get_softcal_converter functions. When you are finished using the comedi_calibration_t, you should call comedi_cleanup_calibration to free the resources associated with the comedi_calibration_t. The comedi_get_default_calibration_path function may be useful in conjunction with this function. Return value A pointer to parsed calibration information on success, or NULL on failure.
comedilib-0.11.0/doc/extensions_funcref.txt0000644000000000000000000005175712674013666015656 00000000000000Extensions Function: comedi_arm -- arm a subdevice Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int source Status: alpha Description: This function arms a subdevice. It may, for example, arm a counter to begin counting. The source parameter specifies what source should trigger the subdevice to begin. The possible sources are driver-dependant. This function is only useable on subdevices that provide support for the INSN_CONFIG_ARM configuration instruction. Some subdevices treat this as an instruction to arm a specific channel. For those subdevices, this function will arm channel 0 and comedi_arm_channel should be called instead of this one to specify the channel. Returns: 0 on success, -1 on error. Function: comedi_arm_channel -- arm a subdevice channel Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int channel Param: unsigned int source Status: alpha Description: This function arms a specified channel of a subdevice. It may, for example, arm a counter to begin counting. The source parameter specifies what source should trigger the subdevice to begin. The possible sources are driver-dependant. This function is only useable on subdevices that provide support for the INSN_CONFIG_ARM configuration instruction. Some subdevices treat this as an instruction to arm the whole subdevice and ignore the specified channel. For such subdevices, comedi_arm is normally called instead. Returns: 0 on success, -1 on error. Function: comedi_digital_trigger_disable -- disable a digital trigger Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int trigger_id Status: alpha Description: This function disables a digital trigger on a subdevice, returning it to its default, inactive, unconfigured state. If the subdevice supports several digital triggers, the trigger_id selects one. This function is only useable on subdevices that provide support for the INSN_CONFIG_DIGITAL_TRIG configuration instruction. Returns: 0 on success, -1 on error. Function: comedi_digital_trigger_enable_edges -- set digital trigger edge detection Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int trigger_id Param: unsigned int base_input Param: unsigned int rising_edge_inputs Param: unsigned int falling_edge_inputs Status: alpha Description: This function enables edge detection for a digital trigger on a subdevice. If the subdevice supports several digital triggers, the trigger_id selects one. The rising_edge_inputs and falling_edge_inputs parameters are bit fields that enable (1) or disable (0) rising and falling edge detection on a set of (up to) 32 inputs. The least-significant bit corresponds to the input specified by the base_input parameter, with subsequent bits corresponding to subsequent inputs. Successive calls to this function have an cumulative effect, which allows digital triggers to be set up for more than 32 inputs. There may also be a cumulative effect with calls to comedi_digital_trigger_enable_levels if the digital trigger supports a combination of edge and level triggering. Due to the cumulative effect, it may be necessary to call comedi_digital_trigger_disable to clear the old settings before reconfiguring the digital trigger inputs. A digital trigger may support edge detection, level detection, both at different times, or both at the same time. If it supports both but not at the same time, configuring edge triggers will disable any previous level triggers, or vice versa. This function is only useable on subdevices that provide support for the INSN_CONFIG_DIGITAL_TRIG configuration instruction, and only if the digital trigger supports edge detection. Returns: 0 on success, -1 on error. Function: comedi_digital_trigger_enable_levels -- set digital trigger level detection Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int trigger_id Param: unsigned int base_input Param: unsigned int high_level_inputs Param: unsigned int low_level_inputs Status: alpha Description: This function enables level detection for a digital trigger on a subdevice. If the subdevice supports several digital triggers, the trigger_id selects one. The high_level_inputs and low_level_inputs parameters are bit fields that enable (1) or disable (0) high and low level detection on a set of (up to) 32 inputs. The least-significant bit corresponds to the input specified by the base_input parameter, with subsequent bits corresponding to subsequent inputs. Successive calls to this function have an cumulative effect, which allows digital triggers to be set up for more than 32 inputs. There may also be a cumulative effect with calls to comedi_digital_trigger_enable_edges if the digital trigger supports a combination of edge and level triggering. Due to the cumulative effect, it may be necessary to call comedi_digital_trigger_disable to clear the old settings before reconfiguring the digital trigger inputs. A digital trigger may support edge detection, level detection, both at different times, or both at the same time. If it supports both but not at the same time, configuring level triggers will disable any previous edge triggers, or vice versa. This function is only useable on subdevices that provide support for the INSN_CONFIG_DIGITAL_TRIG configuration instruction, and only if the digital trigger supports level detection. Returns: 0 on success, -1 on error. Function: comedi_disarm -- disarm a subdevice Retval: int Param: comedi_t * device Param: unsigned int subdevice Status: alpha Description: This function disarms a subdevice. It may, for example, stop a counter counting. This function is only useable on subdevices that provide support for the INSN_CONFIG_DISARM configuration instruction. Some subdevices treat this as an instruction to disarm a specific channel. For those subdevices, this function will disarm channel 0 and comedi_disarm_channel should be called instead of this one to specify the channel. Returns: 0 on success, -1 on error. Function: comedi_disarm_channel -- disarm a subdevice channel Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int channel Status: alpha Description: This function disarms a specified channel of a subdevice. It may, for example, stop a counter counting. This function is only useable on subdevices that provide support for the INSN_CONFIG_DISARM configuration instruction. Some subdevices treat this as an instruction to disarm the whole subdevice and ignore the specified channel. For such subdevices, comedi_disarm is normally called instead. Returns: 0 on success, -1 on error. Function: comedi_get_clock_source -- get master clock for a subdevice Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int channel Param: unsigned int * clock Param: unsigned int * period_ns Status: alpha Description: This function queries the master clock for a subdevice, as set by comedi_set_clock_source. The currently configured master clock will be written to *clock. The possible values and their corresponding clocks are driver-dependant. The period of the clock in nanoseconds (or zero if it is unknown) will be written to *period_ns. If the subdevice does not support configuring its master clocks on a per-channel basis, then the channel parameter will be ignored. It is safe to pass NULL pointers as the clock or period_ns parameters. This function is only useable on subdevices that provide support for the INSN_CONFIG_GET_CLOCK_SRC configuration instruction. Returns: 0 on success, -1 on error. Function: comedi_get_gate_source -- get gate for a subdevice Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int channel Param: unsigned int gate_index Param: unsigned int * gate_source Status: alpha Description: This function queries the gate for a subdevice, as set by comedi_set_gate_source. The currently configured gate source will be written to *gate_source. The possible values and their corresponding gates are driver-dependant. If the subdevice does not support configuring its gates on a per-channel basis, then the channel parameter will be ignored. This function is only useable on subdevices that provide support for the INSN_CONFIG_GET_GATE_SRC configuration instruction. Returns: 0 on success, -1 on error. Function: comedi_get_hardware_buffer_size -- get size of subdevice's hardware buffer Retval: int Param: comedi_t *device Param: unsigned int subdevice Param: enum comedi_io_direction direction Description: This function returns the number of bytes the subdevice can hold in it's hardware buffer. The term hardware buffer refers to any FIFOs, etc. on the acquisition board itself which are used during streaming commands. This does not include the buffer maintained by the comedi kernel module in host memory, whose size may be queried by comedi_get_buffer_size. The direction parameter of type enum comedi_io_direction should be set to COMEDI_INPUT to query the input buffer size (e.g., the buffer of an analog input subdevice), or COMEDI_OUTPUT to query the output buffer size (e.g., the buffer of an analog output). Returns: Hardware buffer size in bytes, or -1 on error. Function: comedi_get_routing -- get routing for an output Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int channel Param: unsigned int * routing Status: alpha Description: This function queries the routing for an output, as set by comedi_set_routing. The currently configured routing will be written to *routing. The possible values and their corresponding routings are driver-dependant. This function is only useable on subdevices that provide support for the INSN_CONFIG_GET_ROUTING configuration instruction. Returns: 0 on success, -1 on error. Function: comedi_reset -- reset a subdevice Retval: int Param: comedi_t * device Param: unsigned int subdevice Status: alpha Description: This function resets a subdevice. It is only useable on subdevices that provide support for the INSN_CONFIG_RESET configuration instruction. Some subdevices treat this as an instruction to reset a specific channel. For those subdevices, this function will reset channel 0 and comedi_reset_channel should be called instead of this one to specify the channel. Returns: 0 on success, -1 on error. Function: comedi_reset_channel -- reset a subdevice channel Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int channel Status: alpha Description: This function resets a specified channel of a subdevice. It is only useable on subdevices that provide support for the INSN_CONFIG_RESET configuration instruction. Some subdevices treat this as an instruction to reset the whole subdevice and ignore the specified channel. For such subdevices, comedi_reset is normally called instead. Returns: 0 on success, -1 on error. Function: comedi_set_clock_source -- set master clock for a subdevice Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int channel Param: unsigned int clock Param: unsigned int period_ns Status: alpha Description: This function selects a master clock for a subdevice. The clock parameter selects the master clock, and is driver-dependant. If the subdevice does not support configuring its master clocks on a per-channel basis, then the channel parameter will be ignored. The period_ns parameter specifies the clock's period in nanoseconds. It may left unspecified by using a value of zero. Drivers will ignore the clock period if they already know what the clock period should be for the specified clock (e.g. for an on-board 20MHz oscillator). Certain boards which use a phase-locked loop to synchronize to external clock sources must be told the period of the external clock. Specifying a clock period for an external clock may also allow the driver to support TRIG_TIMER sources in commands while using the external clock. The clock may be queried with the comedi_get_clock_source function. This function is only useable on subdevices that provide support for the INSN_CONFIG_SET_CLOCK_SRC configuration instruction. Returns: 0 on success, -1 on error. Function: comedi_set_counter_mode -- change mode of a counter subdevice Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int channel Param: unsigned int mode Status: alpha Description: This function configures a counter subdevice. The meaning of the mode parameter is driver-dependent. If the subdevice does not support configuring its mode on a per-channel basis, then the channel parameter will be ignored. It is only useable on subdevices that provide support for the INSN_CONFIG_SET_COUNTER_MODE configuration instruction. Returns: 0 on success, -1 on error. Function: comedi_set_filter -- select a filter for a subdevice Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int channel Param: unsigned int filter Status: alpha Description: This function selects a filter for a subdevice. For instance, a digital input subdevice may provide deglitching filters with varying cutoff frequencies. The filters are used to prevent high-frequency noise from causing unwanted transitions on the digital inputs. This function can tell the hardware which deglitching filter to use, or to use none at all. The filter parameter selects which of the subdevice's filters to use, and is driver-dependant. This function is only useable on subdevices that provide support for the INSN_CONFIG_FILTER configuration instruction. Returns: 0 on success, -1 on error. Function: comedi_set_gate_source -- select gate source for a subdevice Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int channel Param: unsigned int gate_index Param: unsigned int gate_source Status: alpha Description: This function selects a gate source for a subdevice. The gate_index parameter selects which gate is being configured, should the subdevice have multiple gates. It takes a value from 0 to N-1 for a subdevice with N different gates. The gate_source parameter selects which signal you wish to use as the gate, and is also driver-dependent. If the subdevice does not support configuring its gates on a per-channel basis, then the channel parameter will be ignored. You may query the gate source with the comedi_get_gate_source function. This function is only useable on subdevices that provide support for the INSN_CONFIG_SET_GATE_SRC configuration instruction. Returns: 0 on success, -1 on error. Function: comedi_set_other_source -- select source signal for something other than a gate or clock Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int channel Param: unsigned int other Param: unsigned int source Status: alpha Description: This function allows selection of a source signal for something on a subdevice other than a gate (which uses comedi_set_gate_source) or a clock (which uses comedi_set_clock_source). The other parameter selects which other we are configuring, and is driver-dependent. The source parameter selects the source we which to use for the other. If the subdevice does not support configuring its other sources on a per-channel basis, then the channel parameter will be ignored. As an example, this function is used to select which PFI digital input channels should be used as the A/B/Z signals when running a counter on an NI M-Series board as a quadrature encoder. The other parameter selects either the A, B, or Z signal, and the source parameter is used to specify which PFI digital input channel the external A, B, or Z signal is physically connected to. This function is only useable on subdevices that provide support for the INSN_CONFIG_SET_OTHER_SRC configuration instruction. Returns: 0 on success, -1 on error. Function: comedi_set_routing -- select a routing for an output Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int channel Param: unsigned int routing Status: alpha Description: This function configures a mutiplexed output channel which can output a variety of different signals (such as NI's RTSI and PFI lines). The routing parameter selects which signal should be routed to appear on the selected output channel, and is driver-dependant. The routing may be queried with the comedi_get_routing function. This function is only useable on subdevices that provide support for the INSN_CONFIG_SET_ROUTING configuration instruction. Returns: 0 on success, -1 on error. comedilib-0.11.0/doc/comedilib_dblatex_config.xsl0000644000000000000000000000050612416542105016664 00000000000000 ansi comedilib-0.11.0/doc/command_funcref.xml0000644000000000000000000011403512726276340015041 00000000000000 %comedilib_entities; ]>
Asynchronous commands comedi_cancel 3 Comedi Comedi reference comedi_cancel stop streaming input/output in progress #include <comedilib.h> int comedi_cancel comedi_t * device unsigned int subdevice Description The function comedi_cancel can be used to stop a command previously started by comedi_command which is still in progress on the subdevice indicated by the parameters device and subdevice. Return value On success, 0 is returned. On failure, -1 is returned. comedi_command 3 Comedi Comedi reference comedi_command start streaming input/output #include <comedilib.h> int comedi_command comedi_t * device comedi_cmd * command Description The function comedi_command starts a streaming input or output. The command structure pointed to by command specifies settings for the acquisition. The command must be able to pass comedi_command_test with a return value of 0, or comedi_command will fail. For input subdevices, sample values are read using the function read on the device file descriptor. For output subdevices, sample values are written using the function write. Return value On success, 0 is returned. On failure, -1 is returned. comedi_command_test 3 Comedi Comedi reference comedi_command_test test streaming input/output configuration #include <comedilib.h> int comedi_command_test comedi_t * device comedi_cmd * command Description The function comedi_command_test tests the command structure pointed to by the parameter command and returns an integer describing the testing stages that were successfully passed. In addition, if elements of the comedi_cmd structure are invalid, they may be modified. Source elements are modified to remove invalid source triggers. Argument elements are adjusted or rounded to the nearest valid value. Return value The meanings of the return value are as follows: 0 indicates a valid command. 1 indicates that one of the …_src members of the command contained an unsupported trigger. The bits corresponding to the unsupported triggers are zeroed. 2 indicates that the particular combination of …_src settings is not supported by the driver, or that one of the …_src members has the bit corresponding to multiple trigger sources set at the same time. 3 indicates that one of the …_arg members of the command is set outside the range of allowable values. For instance, an argument for a TRIG_TIMER source which exceeds the board's maximum speed. The invalid …_arg members will be adjusted to valid values. 4 indicates that one of the …_arg members required adjustment. For instance, the argument of a TRIG_TIMER source may have been rounded to the nearest timing period supported by the board. 5 indicates that some aspect of the command's chanlist is unsupported by the board. For example, some analog input boards require that all channels in the chanlist use the same input range. On failure, -1 is returned. comedi_get_buffer_contents 3 Comedi Comedi reference comedi_get_buffer_contents streaming buffer status #include <comedilib.h> int comedi_get_buffer_contents comedi_t * device unsigned int subdevice Description The function comedi_get_buffer_contents is used on a subdevice that has a Comedi command in progress to get the number of unread bytes. For a streaming input command, this is the number of bytes that can be read. For a streaming output command, subtracting this from the buffer size gives the space available to be written. Return value On success, comedi_get_buffer_contents returns the number of unread bytes in the buffer. On failure, -1 is returned. comedi_get_buffer_read_offset 3 Comedi Comedi reference comedi_get_buffer_read_offset streaming buffer read offset #include <comedilib.h> int comedi_get_buffer_read_offset comedi_t * device unsigned int subdevice Description The function comedi_get_buffer_read_offset is used on a subdevice that has a Comedi command in progress to get the current read position in the streaming buffer as an offset in bytes from the start of the buffer. The position will wrap around to 0 when it reaches the buffer size. This offset is only useful for memory mapped buffers. This function replaces comedi_get_buffer_offset and has the same functionality. Return value On success, comedi_get_buffer_read_offset returns the current read position as an offset in bytes from the start of the buffer. On failure, -1 is returned. comedi_get_buffer_write_offset 3 Comedi Comedi reference comedi_get_buffer_write_offset streaming buffer write offset #include <comedilib.h> int comedi_get_buffer_write_offset comedi_t * device unsigned int subdevice Description The function comedi_get_buffer_write_offset is used on a subdevice that has a Comedi command in progress to get the current write position in the streaming buffer as an offset in bytes from the start of the buffer. The position will wrap around to 0 when it reaches the buffer size. This offset is only useful for memory mapped buffers. Return value On success, comedi_get_buffer_write_offset returns the current write position as an offset in bytes from the start of the buffer. On failure, -1 is returned. comedi_get_buffer_read_count 3 Comedi Comedi reference comedi_get_buffer_read_count streaming buffer read count #include <comedilib.h> int comedi_get_buffer_read_count comedi_t * device unsigned int subdevice unsigned int * read_count Description The function comedi_get_buffer_read_count is used on a subdevice that has a Comedi command in progress to get the number of bytes that have been read from the buffer, modulo UINT_MAX + 1. The value is stored in *read_count. Return value On success, 0 is returned. On failure, -1 is returned. comedi_get_buffer_write_count 3 Comedi Comedi reference comedi_get_buffer_write_count streaming buffer write count #include <comedilib.h> int comedi_get_buffer_write_count comedi_t * device unsigned int subdevice unsigned int * write_count Description The function comedi_get_buffer_write_count is used on a subdevice that has a Comedi command in progress to get the number of bytes that have been written to the buffer, modulo UINT_MAX + 1. The value is stored in *write_count. Return value On success, 0 is returned. On failure, -1 is returned. comedi_get_buffer_size 3 Comedi Comedi reference comedi_get_buffer_size streaming buffer size of subdevice #include <comedilib.h> int comedi_get_buffer_size comedi_t * device unsigned int subdevice Description The function comedi_get_buffer_size returns the size (in bytes) of the streaming buffer for the subdevice specified by device and subdevice. Return value On success, comedi_get_buffer_size returns the size of the buffer in bytes. On failure, -1 is returned. comedi_get_cmd_generic_timed 3 Comedi Comedi reference comedi_get_cmd_generic_timed streaming input/output capabilities #include <comedilib.h> int comedi_get_cmd_generic_timed comedi_t * device unsigned int subdevice comedi_cmd * command unsigned int chanlist_len unsigned int scan_period_ns Description The command capabilities of the subdevice indicated by the parameters device and subdevice are probed, and the results placed in the command structure pointed to by the parameter command. The command structure pointed to by command is modified to be a valid command that can be used as a parameter to comedi_command (after the command has additionally been assigned a valid chanlist array). The command measures scans consisting of chanlist_len channels at a scan rate that corresponds to a period of scan_period_ns nanoseconds. The rate is adjusted to a rate that the device can handle. Return value On success, 0 is returned. On failure, -1 is returned. comedi_get_cmd_src_mask 3 Comedi Comedi reference comedi_get_cmd_src_mask streaming input/output capabilities #include <comedilib.h> int comedi_get_cmd_src_mask comedi_t * device unsigned int subdevice comedi_cmd * command Description The command capabilities of the subdevice indicated by the parameters device and subdevice are probed, and the results placed in the command structure pointed to by command. The trigger source elements of the command structure are set to be the bitwise-or of the subdevice's supported trigger sources. Other elements in the structure are undefined. Return value On success, 0 is returned. On failure, -1 is returned. comedi_get_max_buffer_size 3 Comedi Comedi reference comedi_get_max_buffer_size maximum streaming buffer size #include <comedilib.h> int comedi_get_max_buffer_size comedi_t * device unsigned int subdevice Description The function comedi_get_max_buffer_size returns the maximum allowable size (in bytes) of the streaming buffer for the subdevice specified by device and subdevice. Changing the maximum buffer size can be accomplished with comedi_set_max_buffer_size or with the comedi_config program, and requires appropriate privileges. Return value On success, the maximum allowable size (in bytes) of the streaming buffer is returned. On failure, -1 is returned. comedi_get_read_subdevice 3 Comedi Comedi reference comedi_get_read_subdevice find streaming input subdevice #include <comedilib.h> int comedi_get_read_subdevice comedi_t * device Description The function comedi_get_read_subdevice returns the index of the subdevice whose streaming input buffer is currently accessible through the device device, if there is one. Return value On success, comedi_get_read_subdevicereturns the index of the current read subdevice if there is one, or -1 if there is no read subdevice. On failure, -1 is returned. comedi_get_write_subdevice 3 Comedi Comedi reference comedi_get_write_subdevice find streaming output subdevice #include <comedilib.h> int comedi_get_write_subdevice comedi_t * device Description The function comedi_get_write_subdevice returns the index of the subdevice whose streaming output buffer is currently accessible through the device device, if there is one. Return value On success, comedi_get_write_subdevicereturns the index of the current write subdevice if there is one, or -1 if there is no write subdevice. On failure, -1 is returned. comedi_mark_buffer_read 3 Comedi Comedi reference comedi_mark_buffer_read streaming buffer control #include <comedilib.h> int comedi_mark_buffer_read comedi_t * device unsigned int subdevice unsigned int num_bytes Description The function comedi_mark_buffer_read is used on a subdevice that has a Comedi input command in progress. It should only be used if you are using a mmap mapping to read data from Comedi's buffer (as opposed to calling read on the device file descriptor), since Comedi will automatically keep track of how many bytes have been transferred via read calls. This function is used to indicate that the next num_bytes bytes in the buffer are no longer needed and may be discarded. Return value On success, comedi_mark_buffer_read returns the number of bytes successfully marked as read. The return value may be less than the num_bytes. On failure, -1 is returned. comedi_mark_buffer_written 3 Comedi Comedi reference comedi_mark_buffer_written streaming buffer control #include <comedilib.h> int comedi_mark_buffer_written comedi_t * device unsigned int subdevice unsigned int num_bytes Description The function comedi_mark_buffer_written is used on a subdevice that has a Comedi output command in progress. It should only be used if you are using a mmap mapping to write data to Comedi's buffer (as opposed to calling write on the device file descriptor), since Comedi will automatically keep track of how many bytes have been transferred via write calls. This function is used to indicate that the next num_bytes bytes in the buffer are valid and may be sent to the device. Return value On success, comedi_mark_buffer_written returns the number of bytes successfully marked as written. The return value may be less than the num_bytes. On failure, -1 is returned. comedi_poll 3 Comedi Comedi reference comedi_poll force updating of streaming buffer #include <comedilib.h> int comedi_poll comedi_t * device unsigned int subdevice Description The function comedi_poll is used on a subdevice that has a Comedi command in progress in order to update the streaming buffer. If supported by the driver, all available samples are copied to the streaming buffer. These samples may be pending in DMA buffers or device FIFOs. Only a few Comedi drivers support this operation. Return value On success, comedi_poll returns the number of additional bytes available. On failure, -1 is returned. comedi_set_buffer_size 3 Comedi Comedi reference comedi_set_buffer_size streaming buffer size of subdevice #include <comedilib.h> int comedi_set_buffer_size comedi_t * device unsigned int subdevice unsigned int size Description The function comedi_set_buffer_size changes the size of the streaming buffer for the subdevice specified by device and subdevice. The buffer size will be set to size bytes, rounded up to a multiple of the virtual memory page size. The virtual memory page size can be determined using sysconf(_SC_PAGE_SIZE). This function does not require special privileges. However, it is limited to a (adjustable) maximum buffer size, which can be changed by a privileged user calling comedi_set_max_buffer_size, or running the program comedi_config. Return value On success, comedi_set_buffer_size returns the new buffer size in bytes. On failure, -1 is returned. comedi_set_max_buffer_size 3 Comedi Comedi reference comedi_set_max_buffer_size streaming maximum buffer size of subdevice #include <comedilib.h> int comedi_set_max_buffer_size comedi_t * device unsigned int subdevice unsigned int max_size Description The function comedi_set_max_buffer_size changes the maximum allowable size (in bytes) of the streaming buffer for the subdevice specified by device and subdevice. Changing the maximum buffer size requires the user to have appropriate privileges. Return value On success, comedi_set_max_buffer_size returns the new maximum buffer size in bytes. On failure, -1 is returned. comedi_set_read_subdevice 3 Comedi Comedi reference comedi_set_read_subdevice set streaming input subdevice #include <comedilib.h> int comedi_set_read_subdevice comedi_t * device unsigned int subdevice Status Works for Linux "in-tree" Comedi since kernel version 3.19. Description The function comedi_set_read_subdevice sets subdevice as the current read subdevice if the subdevice supports streaming input commands. No action is performed if subdevice is already the current read subdevice. Changes are local to the open file description for this device and have no effect on other open file descriptions for the underlying device node. Return value On success, 0 is returned. On failure, -1 is returned. comedi_set_write_subdevice 3 Comedi Comedi reference comedi_set_write_subdevice set streaming output subdevice #include <comedilib.h> int comedi_set_write_subdevice comedi_t * device unsigned int subdevice Status Works for Linux "in-tree" Comedi since kernel version 3.19. Description The function comedi_set_write_subdevice sets subdevice as the current write subdevice if the subdevice supports streaming output commands. No action is performed if subdevice is already the current write subdevice. Changes are local to the open file description for this device and have no effect on other open file descriptions for the underlying device node. Return value On success, 0 is returned. On failure, -1 is returned.
comedilib-0.11.0/doc/deprecated_funcref.xml0000644000000000000000000002757012726276340015532 00000000000000 %comedilib_entities; ]>
Deprecated functions comedi_dio_bitfield 3 Comedi Comedi reference comedi_dio_bitfield read/write multiple digital channels #include <comedilib.h> int comedi_dio_bitfield comedi_t * device unsigned int subdevice unsigned int write_mask unsigned int * bits Status deprecated Description This function is deprecated. Use comedi_dio_bitfield2 instead. It is equivalent to using comedi_dio_bitfield2 with base_channel set to 0. comedi_get_buffer_offset 3 Comedi Comedi reference comedi_get_buffer_offset streaming buffer status (deprecated) Status deprecated Description This function is deprecated. Use comedi_get_buffer_read_offset instead. It has the same functionality as comedi_get_buffer_read_offset. comedi_get_timer 3 Comedi Comedi reference comedi_get_timer timer information (deprecated) #include <comedilib.h> int comedi_get_timer comedi_t * device unsigned int subdevice double frequency unsigned int * trigvar double * actual_frequency Status deprecated Description The function comedi_get_timer converts the frequency frequency to a number suitable to send to the driver in a comedi_trig structure. This function remains for compatibility with very old versions of Comedi, that converted sampling rates to timer values in the library. This conversion is now done in the kernel, and every device has the timer type nanosec_timer, indicating that timer values are simply a time specified in nanoseconds. comedi_sv_init 3 Comedi Comedi reference comedi_sv_init slowly-varying inputs #include <comedilib.h> int comedi_sv_init comedi_sv_t * sv comedi_t * device unsigned int subdevice unsigned int channel Status deprecated Description The function comedi_sv_init initializes the slow varying Comedi structure pointed to by sv to use the device device, the analog input subdevice subdevice, and the channel channel. The slow varying Comedi structure is used by comedi_sv_measure to accurately measure an analog input by averaging over many samples. The default number of samples is 100. Return value This function returns 0 on success, -1 on error. comedi_sv_measure 3 Comedi Comedi reference comedi_sv_measure slowly-varying inputs #include <comedilib.h> int comedi_sv_measure comedi_sv_t * sv double * data Status deprecated Description The function comedi_sv_measure uses the slowly varying Comedi structure pointed to by sv to measure a slowly varying signal. If successful, the result (in physical units) is stored in the location pointed to by data, and the number of samples is returned. On error, -1 is returned. comedi_sv_update 3 Comedi Comedi reference comedi_sv_update slowly-varying inputs #include <comedilib.h> int comedi_sv_update comedi_sv_t * sv Status deprecated Description The function comedi_sv_update updates internal parameters of the slowly varying Comedi structure pointed to by sv. comedi_timed_1chan 3 Comedi Comedi reference comedi_timed_1chan streaming input (deprecated) #include <comedilib.h> int comedi_timed_1chan comedi_t * device unsigned int subdevice unsigned int channel unsigned int range unsigned int aref double frequency unsigned int num_samples double * data Status deprecated Description Not documented. comedi_trigger 3 Comedi Comedi reference comedi_trigger perform streaming input/output (deprecated) #include <comedilib.h> int comedi_trigger comedi_t * device comedi_trig * trig Status deprecated Description The function comedi_trigger instructs Comedi to perform the command specified by the trigger structure pointed to by trig. The return value depends on the particular trigger being issued. If there is an error, -1 is returned.
comedilib-0.11.0/doc/install.xml0000644000000000000000000002742012416542105013351 00000000000000 %comedilib_entities; ]>
Configuration This section assumes that you have successfully compiled and installed the &comedi; software, that your hardware device is in your computer, and that you know the relevant details about it, i.e., what kind of card it is, any jumper settings related to input ranges, the I/O base address and IRQ for old non-plug-n-play boards, etc.
Configuration The good news is: on most systems PCI and USB based boards are configured automatically. The kernel will detect your data acquisition devices, will load the appropriate kernel drivers and will create the /dev/comedi entries. bp1@bp1-x61:~/sandbox/comedilib$ ls -l /dev/comedi0* crw-rw---- 1 root iocard 98, 0 2012-04-26 23:41 /dev/comedi0 crw-rw---- 1 root iocard 98, 48 2012-04-26 23:41 /dev/comedi0_subd0 crw-rw---- 1 root iocard 98, 49 2012-04-26 23:41 /dev/comedi0_subd1 Usually these devices belong to the group iocard as shown here. The only action you need to take is to become member of this group and then the &comedi; device is ready to be used. There are a few PCI drivers that for one reason or another do not support auto-configuration, either because there is more than one variant of a board sharing the same PCI device ID (e.g. Advantech PCI-1710 and PCI-1710HG), or because some configuration options are needed (e.g. Amplicon PCI224 and PCI234) or for some other reason. It is also possible to disable auto-configuration when loading the comedi kernel module. In these cases devices need to be configured manually as for ISA cards. Conversely, most &comedi; drivers supplied with the kernel sources that support auto-configuration may no longer support manual configuration. By default, the comedi kernel module does not reserve any devices for manual configuration so manual configuration will fail. To allow devices to be configured manually, set the comedi_num_legacy_minors module parameter to the number of devices to reserve for manual configuration when loading the comedi kernel module. If using modprobe, this can be set automatically by editing /etc/modprobe.conf or /etc/modprobe.d/comedi.conf (depending on the system) to include the line: options comedi comedi_num_legacy_minors=4 The number 4 in the above line may be adjusted to increase or decrease the number of devices to be reserved for manual configuration. Old ISA based cards need to be manually configured which is explained here. You only need to read on here if you have one of these old cards. On embedded systems it might also be necessary to load the driver and then to configure the boards manually. In general manual configuration is done by running the comedi_config command (as root). Here is an example of how to use the command (perhaps you should read its man page now): comedi_config /dev/comedi0 labpc-1200 0x260,3 This command says that the file /dev/comedi0 can be used to access the &comedi; device that uses the labpc-1200 board, and that you give it two run-time parameters (0x260 and 3). More parameters are possible, and their meaning is driver dependant. This tutorial goes through the process of configuring &comedi; for two devices, a National Instruments AT-MIO-16E-10, and a Data Translation DT2821-F-8DI. The NI board is plug-and-play. The current ni_atmio driver has kernel-level ISAPNP support, which is used by default if you do not specify a base address. So you could simply run comedi_config as comedi_config /dev/comedi0 ni_atmio For the preceding comedi_config command to succeed, the ni_atmio kernel module must be loaded first. For plug-n-play boards on modern kernels, the appropriate comedi kernel modules should get loaded automatically when your computer is booted. The modprobe command can be used to manually load/unload kernel modules, and lsmod will list all the currently loaded modules. For the Data Translation board, you need to know how the board's jumpers are configured in order to specify the correct comedi_config parameters. These parameters for the board are given in the kernel drivers section about the dt282x driver. The card discussed here is a DT2821-f-8di. The entry for the dt282x driver tells you that the comedi_config parameters give the driver the I/O base, IRQ, DMA 1, DMA 2, and in addition the states of the differential/single-ended and unipolar/bipolar jumpers: dt282x configuration options: [0] - I/O port base address [1] - IRQ [2] - DMA 1 [3] - DMA 2 [4] - AI jumpered for 0=single ended, 1=differential [5] - AI jumpered for 0=straight binary, 1=2's complement [6] - AO 0 jumpered for 0=straight binary, 1=2's complement [7] - AO 1 jumpered for 0=straight binary, 1=2's complement [8] - AI jumpered for 0=[-10,10]V, 1=[0,10], 2=[-5,5], 3=[0,5] [9] - AO 0 jumpered for 0=[-10,10]V, 1=[0,10], 2=[-5,5], 3=[0,5], 4=[-2.5,2.5] [10]- A0 1 jumpered for 0=[-10,10]V, 1=[0,10], 2=[-5,5], 3=[0,5], 4=[-2.5,2.5] So, the appropriate options list might be: 0x200,4,0,0,1,1,1,1,0,2,2 and the full configuration command is: comedi_config /dev/comedi1 dt2821-f-8di 0x200,4,0,0,1,1,1,1,0,2,2 Setting the DMA channels to 0 disables the use of DMA. So now you have your boards configured correctly. Since data acquisition boards are not typically well-engineered, &comedi; sometimes can't figure out if an old non-plug-n-play board is actually in the computer and at the base address you specified. If it can't, it assumes you are right. Both of these boards are well-made, so &comedi; will give an error message if it can't find them. The &comedi; kernel module, since it is a part of the kernel, prints messages to the kernel logs, which you can access through the command dmesg or the file /var/log/messages. Here is a configuration failure (from dmesg): comedi0: ni_atmio: 0x0200 can't find board When it does work, you get: comedi0: ni_atmio: 0x0260 at-mio-16e-10 ( irq = 3 ) Note that it also correctly identified the board.
Getting information about a card So now that you have &comedi; talking to the hardware, try to talk to &comedi;. Call the command comedi_board_info, which provides information about each subdevice on the board. Here's part of the output for the USB-DUX sigma board (which is on /dev/comedi0), as a result of the command comedi_board_info -v. overall info: version code: 0x00074c driver name: usbduxsigma board name: usbduxsigma number of subdevices: 4 subdevice 0: type: 1 (analog input) flags: 0x10119000 SDF_CMD_READ:can do asynchronous input commands SDF_READABLE:subdevice can be read SDF_GROUND:can do aref=ground SDF_LSAMPL:subdevice uses 32-bit samples for commands number of channels: 16 max data value: 16777215 ranges: all chans: [-1.325 V,1.325 V] command: start: now|int scan_begin: timer convert: now scan_end: count stop: none|count command structure filled with probe_cmd_generic_timed for 16 channels: start: now 0 scan_begin: timer 1000000 scan_begin_src = TRIG_TIMER: The sampling rate is defined per scan meaning all channels are sampled at the same time. The maximum sampling rate is f=1000 Hz convert: now 0 scan_end: count 16 stop: count 2 subdevice 1: type: 2 (analog output) flags: 0x00125000 SDF_CMD_WRITE:can do asynchronous output commands SDF_WRITABLE:subdevice can be written SDF_GROUND:can do aref=ground number of channels: 4 max data value: 255 ranges: all chans: [0 V,2.5 V] command: start: now|int scan_begin: timer convert: now scan_end: count stop: none|count command structure filled with probe_cmd_generic_timed for 4 channels: start: now 0 scan_begin: timer 1000000 scan_begin_src = TRIG_TIMER: The sampling rate is defined per scan meaning all channels are sampled at the same time. The maximum sampling rate is f=1000 Hz convert: now 0 scan_end: count 4 stop: count 2 subdevice 2: type: 5 (digital I/O) flags: 0x00030000 SDF_READABLE:subdevice can be read SDF_WRITABLE:subdevice can be written number of channels: 24 max data value: 1 ranges: all chans: [0 V,5 V] command: not supported subdevice 3: type: 12 (pwm) flags: 0x00020100 SDF_MODE1:can do mode 1 SDF_WRITABLE:subdevice can be written number of channels: 8 max data value: 512 ranges: all chans: [0,1] command: not supported This board has four subdevices. Devices are separated into subdevices that each have a distinct purpose; e.g., analog input, analog output, digital input/output. Here's the information from &comedi;'s /proc/comedi file, which indicates what drivers are loaded and which boards are configured: cat /proc/comedi comedi version 0.7.76 format string: "%2d: %-20s %-20s %4d",i,driver_name,board_name,n_subdevices 0: usbduxsigma usbduxsigma 4 usbduxfast: usbduxfast usbduxsigma: usbduxsigma This documentation feature currently returns the driver name, the device name, and the number of subdevices. Following those lines are a list of the &comedi; kernel driver modules currently loaded, each followed by a list of the board names it recognizes (names that can be used with comedi_config).
comedilib-0.11.0/doc/error_funcref.txt0000644000000000000000000001323412416542105014561 00000000000000Error reporting Function: comedi_errno -- number of last Comedilib error Retval: int Param: void Description: When a Comedilib function fails, it usually returns -1 or NULL, depending on the return type. An internal library variable stores an error number, which can be retrieved by calling comedi_errno This error number can be converted to a human-readable form by the functions comedi_perror and comedi_strerror. These functions are intended to mimic the behavior of the standard C library functions perror, strerror, and errno. In particular, Comedilib functions sometimes return an error that is generated inside the C library; the comedi error message in this case is the same as the C library. The function comedi_errno returns an integer describing the most recent Comedilib error. This integer may be used as the errnum parameter for comedi_strerror. Function: comedi_loglevel -- change Comedilib logging properties Retval: int Param: int loglevel Description: This function affects the output of debugging and error messages from Comedilib. By increasing the log level loglevel, additional debugging information will be printed. Error and debugging messages are printed to the standard error output stream stderr. The default loglevel can be set by using the environment variable COMEDI_LOGLEVEL. The default log level is 1. In order to conserve resources, some debugging information is disabled by default when Comedilib is compiled. The meaning of the log levels is as follows: Loglevel Behavior 0 Comedilib prints nothing. 1 (default) Comedilib prints error messages when there is a self-consistency error (i.e., an internal bug.) 2 Comedilib prints an error message when an invalid parameter is passed. 3 Comedilib prints an error message whenever an error is generated in the Comedilib library or in the C library, when called by Comedilib. 4 Comedilib prints a lot of junk. Returns: This function returns the previous log level. Function: comedi_perror -- print a Comedilib error message Retval: void Param: const char * s Description: When a Comedilib function fails, it usually returns -1 or NULL, depending on the return type. An internal library variable stores an error number, which can be retrieved with comedi_errno. This error number can be converted to a human-readable form by the functions comedi_perror or comedi_strerror. These functions are intended to mimic the behavior of the standard C library functions perror, strerror, and errno. In particular, Comedilib functions sometimes return an error that is generated inside the C library; the comedi error message in this case is the same as the C library. The function comedi_perror prints an error message to the standard error output stream stderr. The error message consists of the argument string s, a colon, a space, a description of the error condition, and a new line. Function: comedi_strerror -- return string describing Comedilib error code Retval: const char * Param: int errnum Description: When a Comedilib function fails, it usually returns -1 or NULL, depending on the return type. An internal library variable stores an error number, which can be retrieved with comedi_errno. This error number can be converted to a human-readable form by the functions comedi_perror or comedi_strerror. These functions are intended to mimic the behavior of the standard C library functions perror, strerror, and errno. In particular, Comedilib functions sometimes return an error that is generated inside the C library; the comedi error message in this case is the same as the C library. The function comedi_strerror returns a pointer to a character string describing the Comedilib error errnum. The returned string may be modified by a subsequent call to a strerr or perror function (either the libc or Comedilib versions). An unrecognized error number will return a pointer to the string undefined error, or similar. comedilib-0.11.0/doc/tutorial.xml0000644000000000000000000002433312715406005013546 00000000000000 %comedilib_entities; ]>
Writing &comedi; programs This section describes how &comedi; can be used in an application, to communicate data with a set of &comedi; devices. gives more details about the various acquisition functions with which the application programmer can perform data acquisition in &comedi;. Also don't forget to take a good look at the demo directory of the Comedilib source code. It contains lots of examples for the basic functionalities of &comedi;.
Your first &comedi; program This example requires a card that has analog or digital input. This progam opens the device, gets the data, and prints it out: The source code file for the above program can be found in Comedilib, at demo/tut1.c. You can compile the program using cc tut1.c -lcomedi -lm -o tut1 The comedi_open call can only be successful if the comedi0 device file is configured with a valid &comedi; driver. explains how this driver is linked to the device file. The range variable tells &comedi; which gain to use when measuring an analog voltage. Since we don't know (yet) which numbers are valid, or what each means, we'll use 0, because it won't cause errors. Likewise with aref, which determines the analog reference used.
Converting between integer data and physical units If you selected an analog input subdevice, you probably noticed that the output of tut1 is an unsigned number, for example between 0 and 65535 for a 16 bit analog input. &comedi; samples are unsigned, with 0 representing the lowest voltage of the ADC, and a hardware-dependent maximum value representing the highest voltage. &comedi; compensates for anything else the manual for your device says (for example, many boards represent bipolar analog input voltages as signed integers). However, you probably prefer to have this number translated to a voltage. Naturally, as a good programmer, your first question is: How do I do this in a device-independent manner? The functions comedi_to_physical, comedi_to_phys, comedi_from_physical and comedi_from_phys are used to convert between &comedi;'s integer data and floating point numbers corresponding to physical values (voltages, etc.).
Your second &comedi; program Actually, this is the first &comedi; program again, except we've added code to convert the integer data value to physical units. The source code file for the above program can be found in the Comedilib source at demo/tut2.c and if installed as a package usually at /usr/share/doc/libcomedi-dev/demo/ with all the other tutorial/demo files.
Asynchronous acquisition Of special importance is the so called "asynchronous data acquisition" where &comedi; is sampling in the background at a given sample rate. The user can retrieve the data whenever it is convenient. &comedi; stores the data in a ring-buffer so that programs can perform other tasks in the foreground, for example plotting data or interacting with the user. This technique is used in programs such as ktimetrace or comedirecord. There are two different ways how a sequence of channels is measured during asynchronous acquisition (see also the Figure in the introduction): The channels are measured with the help of a multiplexer which switches to the next channel after each measurement. This means that the sampling rate is divided by the number of channels. The channels are all measured at the same time, for example when every channel has its own converter. In this case the sampling rate need not to be divided by the number of channels. How your &comedi; device handles the asynchronous acquisition can be found out with the command comedi_board_info -v. The program demo/tut3.c demonstrates the asynchronous acquisition. The general strategy is always the same: first, we tell &comedi; all sampling parameters such as the sampling rate, the number of channels and anything it needs to know so that it can run independently in the background. Then &comedi; checks our request and it might modify it. For example we might want to have a sampling rate of 16kHz but we only get 1kHz. Finally we can start the asynchronous acquisition. Once it has been started we need to check periodically if data is available and request it from &comedi; so that its internal buffer won't overrun. In summary the asynchonous acquisition is performed in the following way: Create a command structure of type comedi_cmd Call the function comedi_get_cmd_generic_timed to fill the command structure with your comedi device, subdevice, sampling rate and number of channels. Create a channel-list and store it in the command structure. This tells comedi which channels should be sampled in the background. Call comedi_command_test with your command structure. Comedi might modify your requested sampling rate and channels. Call comedi_command_test again which now should return zero for success. Call comedi_command to start the asynchronous acquisition. From now on the kernel ringbuffer will be filled at the specified sampling rate. Call periodically the standard function read and receive the data. The result should always be non zero as long as the acquisition is running. Convert the received data either into lsampl_t or sampl_t depending on the subdevice flag SDF_LSAMPL. Poll for data with read as long as it returns a positive result or until the program terminates. The program below is a stripped down version of the program cmd.c in the demo directory. It requests data from two channels at a sampling rate of 1kHz and a total of 10000 samples. which are then printed to stdout. You can pipe the data into a file and plot it with gnuplot. As mentioned above, central in this program is the loop using the standard C read command which receives the buffer contents. The source code file for the above program can be found in Comedilib, at demo/tut3.c. You can compile the program using cc tut3.c -lcomedi -lm -o tut3 For advanced programmers the function comedi_get_buffer_contents is useful to check if there is actually data in the ringbuffer so that a call of read can be avoided for example when the data readout is called by a timer call-back function.
Further examples See the demo subdirectory of Comedilib for more example programs. The directory contains a README file with descriptions of the various demo programs.
comedilib-0.11.0/doc/mkref0000755000000000000000000000451412416542105012212 00000000000000#!/usr/bin/perl # vim: set ts=4: $manvolnum="3"; $header="#include <comedilib.h>"; $end = ""; $refentry_end = ""; $s = <>; chomp $s; print ' %comedilib_entities; ]>
'; print $s; print ' '; while($s = <>){ chomp $s; if($s =~ m/^Function: (.*)/){ $funcname = $1; $refpurpose = ""; if($s =~ m/^Function: (.*) -- (.*)/){ $funcname = $1; $refpurpose = $2; } $refname = $funcname; $refname =~ s/_/-/g; $refname = "func-ref-" . $refname; print $end; print $refentry_end; $refentry_end = " "; print " $funcname $manvolnum Comedi Comedi reference $funcname $refpurpose "; $end = ""; }elsif($s =~ m/^Retval: (.*)/){ print " $header $1 $funcname "; $end = " "; }elsif($s =~ m/^Param:[[:space:]]*void/){ print " " }elsif($s =~ m/^Param: (.*)/){ $p = $1; $p =~ m/(.*) (.*)/; print " $1 $2 " }elsif($s =~ m/^Description:/){ print $end; print " Description "; $end = " "; }elsif($s =~ m/^Returns:/){ print $end; print " Return value "; $end = " "; }elsif($s =~ m/^Status: (.*)/){ print $end; print " Status $1 "; $end = " "; }elsif($s eq ""){ print "\n"; }elsif($s =~ m/^[\s](.*)/){ print "$1\n"; } } print $end; print $refentry_end; print "
"; exit(0); comedilib-0.11.0/doc/FAQ0000644000000000000000000001056712416542105011517 00000000000000 1. Should I use CONFIG_MODVERSIONS when compiling a Linux kernel? Short answer: No. Long answer: MODVERSIONS allows you to safely use a module on multiple kernel versions. However, making comedi work with CONFIG_MODVERSIONS is a real pain. Sometimes it works, sometimes it doesn't. 2. I get the error message: Makefile:14: /usr/src/linux/.config: No such file or directory make: *** No rule to make target `/usr/src/linux/.config'. Stop. It means you don't have the file /usr/src/linux/.config. This file contains all the configuration information about your linux kernel, which comedi needs in order to compile correctly. Some distributions don't contain this file, so you will need to create your own, by compiling your own kernel. This file is automatically created when you run 'make config', the first step in compiling a kernel. 3. When compiling programs that use libcomedi, I get error message: /usr/lib/libcomedi.a(range.o): In function `comedi_from_phys': range.o(.text+0x169): undefined reference to `floor' This error messsage indicates that the linker cannot resolve the reference to floor(), which is a function in the math library that is used in the function comedi_from_phys(). This only happens when you link statically. Add '-lm' to your linking command. 4. Someone on the mailing list told me to look in the kernel log. How do I do that? Kernel log messages are continuously written to the file /var/log/messages. In addition, a shortcut to get recent log messages is the 'dmesg' command, which will print the last 4-16 kB (depending on the kernel) of kernel log messages. 5. I think I found a bug: I get Oops messages in the kernel log. Oops messages always indicate a bug. If you are not using the latest version of Comedi, please upgrade and try again, since these types of bugs are usually quickly fixed. Look at the file BUG_REPORTING in the Linux kernel source, follow the instructions, and send the information to David Schleef . 6. Could you please add a search engine to the mailing list archive? No. Please use generic web search engines such as Google, where you can add the search term "site:stm.lbl.gov" to limit the search to the site where the Comedi archives are located. 7. I apply a signal to channel 0, but I see the signal on other channels. Typically, this is an electrical problem that can come from multiple sources. First, any inputs that are not specifically driven or grounded will tend to float around, measuring random electrical signals in their environment -- the strongest of which are usually nearby channels, 50/60 Hz line noise, or the A/D converter itself. 8. An FFT of measured data shows lots of sharp peaks. Yep. Not much that can be done about that. Well, actually, there is. Peaks near multiples of 50 or 60 Hz are electromagnetic coupling from the power mains. Almost all the time, this indicates a ground loop in the measurement path. Peaks that are multiples of 100 or 120 Hz on photodetectors are because of the room lights. Peaks in the 100-1000 Hz range, with harmonics, are sometimes stray fields from electric motors. Strong, sharp peaks in the 1-100 kHz range are typically due to the horizontal refresh of CRT displays (like your computer monitor). Less strong peaks can be due to electronics in a computer or other device. However, a sharp peak in an FFT does not always indicate a problem. Remember that you always have noise, and that some of it will be periodic. You just have to make sure that the particular type of noise that you have does not affect your analysis. 9. Ok, I'm getting good results. What should I look at to get great results? - Make sure that all unused inputs are grounded. Electrically floating wires act as antennas, picking up stray electrical signals, and often strongly coupling them into the signals you actually want to measure. - Get a flat panel monitor. CRT displays emit strong magnetic fields oscillating at the horizontal refresh rate. It is most easily observable in a Fourier transform of an input signal. - Calibrate your board. - Read up on ground loops. Make sure that all your electrical shielding has exactly one path to a common ground. - If you use a laptop for data acquisition, make sure it is grounded properly. Laptops usually are not grounded, and you generally don't want your data acquisition cable to also be your grounding wire. - comedilib-0.11.0/doc/reference.xml0000644000000000000000000005251112731737534013654 00000000000000 %comedilib_entities; ]>
&comedi; reference
Headerfiles: <filename>comedi.h</filename> and <filename>comedilib.h</filename> All application programs must include the header file comedilib.h. (This file itself includes comedi.h.) They contain the full interface of &comedi;: defines, function prototypes, data structures. The following Sections give more details.
Constants and macros
CR_PACK CR_PACKchanrng aref is used to initialize the elements of the chanlist array in the comedi_cmd data structure, and the chanspec member of the comedi_insn structure. The chan argument is the channel you wish to use, with the channel numbering starting at zero. The range rng is an index, starting at zero, whose meaning is device dependent. The comedi_get_n_ranges and comedi_get_range functions are useful in discovering information about the available ranges. The aref argument indicates what reference you want the device to use. It can be any of the following: AREF_GROUND is for inputs/outputs referenced to ground. AREF_COMMON is for a common reference (the low inputs of all the channels are tied together, but are isolated from ground). AREF_DIFF is for differential inputs/outputs. AREF_OTHER is for any reference that does not fit into the above categories. Particular drivers may or may not use the AREF flags. If they are not supported, they are silently ignored.
CR_PACK_FLAGS CR_PACK_FLAGSchanrange arefflags is similar to CR_PACK but can be used to combine one or more flag bits (bitwise-ORed together in the flags parameter) with the other parameters. Depending on context, the chan parameter might not be a channel; it could be a trigger source, clock source, gate source etc. (in which case, the range and aref parameters would probably be set to 0), and the flags would modify the source in some device-dependant way. The following flag values are defined: CR_ALT_FILTER CR_DITHER CR_DEGLITCH (all the same) specify that some sort of filtering is to be done on the channel, trigger source, etc. CR_ALT_SOURCE specifies that some alternate source is to be used for the channel (usually a calibration source). CR_EDGE is usually combined with a trigger source number to specify that the trigger source is edge-triggered if the hardware and driver supports both edge-triggering and level-triggering. If both are supported, not asserting this flag specifies level-triggering. CR_INVERT specifies that the trigger source, gate source, etc. is to be inverted.
RANGE_LENGTH (deprecated) Rangetype values are library-internal tokens that represent an array of range information structures. These numbers are primarily used for communication between the kernel and library. The RANGE_LENGTHrangetype macro returns the length of the array that is specified by the rangetype token. The RANGE_LENGTH macro is deprecated, and should not be used in new applications. It is scheduled to be removed from the header file at version 1.0. Binary compatibility may be broken for version 1.1.
enum comedi_conversion_direction enum comedi_conversion_direction { COMEDI_TO_PHYSICAL, COMEDI_FROM_PHYSICAL }; A comedi_conversion_direction is used to choose between converting data from Comedi's integer sample values to a physical value (COMEDI_TO_PHYSICAL), and converting from a physical value to Comedi's integer sample values (COMEDI_FROM_PHYSICAL).
enum comedi_io_direction enum comedi_io_direction { COMEDI_INPUT, COMEDI_OUTPUT }; A comedi_io_direction is used to select between input or output. For example, comedi_dio_config uses the COMEDI_INPUT and COMEDI_OUTPUT values to specify whether a configurable digital i/o channel should be configured as an input or output.
enum comedi_subdevice_type enum comedi_subdevice_type { COMEDI_SUBD_UNUSED, /* subdevice is unused by driver */ COMEDI_SUBD_AI, /* analog input */ COMEDI_SUBD_AO, /* analog output */ COMEDI_SUBD_DI, /* digital input */ COMEDI_SUBD_DO, /* digital output */ COMEDI_SUBD_DIO, /* digital input/output */ COMEDI_SUBD_COUNTER, /* counter */ COMEDI_SUBD_TIMER, /* timer */ COMEDI_SUBD_MEMORY, /* memory, EEPROM, DPRAM */ COMEDI_SUBD_CALIB, /* calibration DACs and pots*/ COMEDI_SUBD_PROC, /* processor, DSP */ COMEDI_SUBD_SERIAL, /* serial IO */ COMEDI_SUBD_PWM /* pulse width modulation */ }; The comedi_subdevice_type enumeration specifies the possible values for a subdevice type. These values are used by the functions comedi_get_subdevice_type and comedi_find_subdevice_by_type.
Data types and structures This Section explains the data structures that users of the &comedi; API are confronted with: typedef struct comedi_devinfo_struct comedi_devinfo; typedef struct comedi_t_struct comedi_t; typedef struct sampl_t_struct sampl_t; typedef struct lsampl_t_struct lsampl_t; typedef struct comedi_sv_t_struct comedi_sv_t; typedef struct comedi_cmd_struct comedi_cmd; typedef struct comedi_insn_struct comedi_insn; typedef struct comedi_range_struct comedi_range; typedef struct comedi_krange_struct comedi_krange; typedef struct comedi_insnlist_struct comedi_insnlist; The data structures used in the implementation of the &comedi; drivers are described in .
comedi_devinfo The data type comedi_devinfo is used to store information about a device. This structure is usually filled in automatically when the driver is loaded (attached), so programmers need not access this data structure directly. typedef struct comedi_devinfo_struct comedi_devinfo; struct comedi_devinfo_struct{ unsigned int version_code; // version number of the Comedi code unsigned int n_subdevs; // number of subdevices on this device char driver_name[COMEDI_NAMELEN]; char board_name[COMEDI_NAMELEN]; int read_subdevice; // index of subdevice whose buffer is read by read(), etc. on file descriptor from comedi_fileno() (negative means none) int write_subdevice; // index of subdevice whose buffer is written by write(), etc. on file descriptor from comedi_fileno() (negatove means none). int unused[30]; };
comedi_t The data type comedi_t is used to represent an open &comedi; device: typedef struct comedi_t_struct comedi_t; A valid comedi_t pointer is returned by a successful call to comedi_open, and should be used for subsequent access to the device. It is an opaque type, and pointers to type comedi_t should not be dereferenced by the application.
sampl_t typedef unsigned short sampl_t; The data type sampl_t is one of the generic types used to represent data values in Comedilib. It is used in a few places where a data type shorter than lsampl_t is useful. On most architectures it is a 16-bit, unsigned integer. Most drivers represent data transferred by read and write functions using sampl_t. Applications should check the subdevice flag SDF_LSAMPL to determine if the subdevice uses sampl_t or lsampl_t.
lsampl_t typedef unsigned int lsampl_t; The data type lsampl_t is the data type typically used to represent data values in Comedilib. On most architectures it is a 32-bit, unsigned integer.
comedi_trig (deprecated) typedef struct comedi_trig_struct comedi_trig; struct comedi_trig_struct{ unsigned int subdev; /* subdevice */ unsigned int mode; /* mode */ unsigned int flags; unsigned int n_chan; /* number of channels */ unsigned int *chanlist; /* channel/range list */ sampl_t *data; /* data list, size depends on subd flags */ unsigned int n; /* number of scans */ unsigned int trigsrc; unsigned int trigvar; unsigned int trigvar1; unsigned int data_len; unsigned int unused[3]; }; The comedi_trig structure is a control structure used by the COMEDI_TRIG ioctl, an older method of communicating instructions to the driver and hardware. Use of comedi_trig is deprecated, and is no longer implemented by the &comedi; kernel layer.
comedi_sv_t (deprecated) typedef struct comedi_sv_struct comedi_sv_t; struct comedi_sv_struct{ comedi_t *dev; unsigned int subdevice; unsigned int chan; /* range policy */ int range; int aref; /* number of measurements to average (for ai) */ int n; lsampl_t maxdata; }; The comedi_sv_t structure is used by the comedi_sv_… functions to provide a simple method of accurately measuring slowly varying inputs. This relies on the COMEDI_TRIG ioctl and is no longer by the &comedi; kernel layer.
comedi_cmd typedef struct comedi_cmd_struct comedi_cmd; struct comedi_cmd_struct{ unsigned int subdev; unsigned int flags; unsigned int start_src; unsigned int start_arg; unsigned int scan_begin_src; unsigned int scan_begin_arg; unsigned int convert_src; unsigned int convert_arg; unsigned int scan_end_src; unsigned int scan_end_arg; unsigned int stop_src; unsigned int stop_arg; unsigned int *chanlist; unsigned int chanlist_len; sampl_t *data; unsigned int data_len; }; More information on using commands can be found in the command section.
comedi_insn typedef struct comedi_insn_struct comedi_insn; struct comedi_insn_struct{ unsigned int insn; unsigned int n; lsampl_t*data; unsigned int subdev; unsigned int chanspec; unsigned int unused[3]; }; Comedi instructions are described by the comedi_insn structure. Applications send instructions to the driver in order to perform control and measurement operations that are done immediately or synchronously, i.e., the operations complete before program control returns to the application. In particular, instructions cannot describe acquisition that involves timers or external events. The field insn determines the type of instruction that is sent to the driver. Valid instruction types are: INSN_READ read values from an input channel INSN_WRITE write values to an output channel INSN_BITS read/write values on multiple digital I/O channels INSN_CONFIG configure a subdevice INSN_GTOD read a timestamp, identical to gettimeofday except the seconds and microseconds values are unsigned values of type lsampl_t. INSN_WAIT wait a specified number of nanoseconds The number of samples to read or write, or the size of the configuration structure is specified by the field n, and the buffer for those samples by data. The field subdev is the subdevice index that the instruction is sent to. The field chanspec specifies the channel, range, and analog reference (if applicable). Instructions can be sent to drivers using comedi_do_insn. Multiple instructions can be sent to drivers in the same system call using comedi_do_insnlist.
comedi_range typedef struct comedi_range_struct comedi_range; struct comedi_range_struct{ double min; double max; unsigned int unit; }comedi_range; The comedi_range structure conveys part of the information necessary to translate sample values to physical units, in particular, the endpoints of the range and the physical unit type. The physical unit type is specified by the field unit, which may take the values UNIT_volt for volts, UNIT_mA for milliamps, or UNIT_none for unitless. The endpoints are specified by the fields min and max.
comedi_krange typedef struct comedi_krange_struct comedi_krange; struct comedi_krange_struct{ int min; int max; unsigned int flags; }; The comedi_krange structure is used to transfer range information between the driver and Comedilib, and should not normally be used by applications. The structure conveys the same information as the comedi_range structure, except the fields min and max are integers, multiplied by a factor of 1000000 compared to the counterparts in comedi_range. In addition, kcomedilib uses the comedi_krange structure in place of the comedi_range structure.
comedi_insnlist typedef struct comedi_insnlist_struct comedi_insnlist; struct comedi_insnlist_struct{ unsigned int n_insns; comedi_insn *insns; }; A comedi_insnlist structure is used to communicate a list of instructions to the driver using the comedi_do_insnlist function.
comedi_polynomial_t #define COMEDI_MAX_NUM_POLYNOMIAL_COEFFICIENTS 4 typedef struct { double coefficients[COMEDI_MAX_NUM_POLYNOMIAL_COEFFICIENTS]; double expansion_origin; unsigned order; } comedi_polynomial_t; A comedi_polynomial_t holds calibration data for a channel of a subdevice. It is initialized by the comedi_get_hardcal_converter or comedi_get_softcal_converter calibration functions and is passed to the comedi_to_physical and comedi_from_physical raw/physical conversion functions.
Functions
comedilib-0.11.0/doc/deprecated_funcref.txt0000644000000000000000000001026312715406005015527 00000000000000Deprecated functions Function: comedi_dio_bitfield -- read/write multiple digital channels Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int write_mask Param: unsigned int * bits Status: deprecated Description: This function is deprecated. Use comedi_dio_bitfield2 instead. It is equivalent to using comedi_dio_bitfield2 with base_channel set to 0. Function: comedi_get_buffer_offset -- streaming buffer status (deprecated) Status: deprecated Description: This function is deprecated. Use comedi_get_buffer_read_offset instead. It has the same functionality as comedi_get_buffer_read_offset. Function: comedi_get_timer -- timer information (deprecated) Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: double frequency Param: unsigned int * trigvar Param: double * actual_frequency Status: deprecated Description: The function comedi_get_timer converts the frequency frequency to a number suitable to send to the driver in a comedi_trig structure. This function remains for compatibility with very old versions of Comedi, that converted sampling rates to timer values in the library. This conversion is now done in the kernel, and every device has the timer type nanosec_timer, indicating that timer values are simply a time specified in nanoseconds. Function: comedi_sv_init -- slowly-varying inputs Retval: int Param: comedi_sv_t * sv Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int channel Status: deprecated Description: The function comedi_sv_init initializes the slow varying Comedi structure pointed to by sv to use the device device, the analog input subdevice subdevice, and the channel channel. The slow varying Comedi structure is used by comedi_sv_measure to accurately measure an analog input by averaging over many samples. The default number of samples is 100. Returns: This function returns 0 on success, -1 on error. Function: comedi_sv_measure -- slowly-varying inputs Retval: int Param: comedi_sv_t * sv Param: double * data Status: deprecated Description: The function comedi_sv_measure uses the slowly varying Comedi structure pointed to by sv to measure a slowly varying signal. If successful, the result (in physical units) is stored in the location pointed to by data, and the number of samples is returned. On error, -1 is returned. Function: comedi_sv_update -- slowly-varying inputs Retval: int Param: comedi_sv_t * sv Status: deprecated Description: The function comedi_sv_update updates internal parameters of the slowly varying Comedi structure pointed to by sv. Function: comedi_timed_1chan -- streaming input (deprecated) Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int channel Param: unsigned int range Param: unsigned int aref Param: double frequency Param: unsigned int num_samples Param: double * data Status: deprecated Description: Not documented. Function: comedi_trigger -- perform streaming input/output (deprecated) Retval: int Param: comedi_t * device Param: comedi_trig * trig Status: deprecated Description: The function comedi_trigger instructs Comedi to perform the command specified by the trigger structure pointed to by trig. The return value depends on the particular trigger being issued. If there is an error, -1 is returned. comedilib-0.11.0/doc/Makefile.in0000644000000000000000000005036413140064520013224 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = doc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/am-check-python-headers.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/as-libtool.m4 $(top_srcdir)/m4/ax_tls.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__dist_pdf_DATA_DIST) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__dist_pdf_DATA_DIST = $(srcdir)/pdf/comedilib.pdf am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pdfdir)" DATA = $(dist_pdf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COMEDILIB_AGE = @COMEDILIB_AGE@ COMEDILIB_CFLAGS = @COMEDILIB_CFLAGS@ COMEDILIB_CURRENT = @COMEDILIB_CURRENT@ COMEDILIB_LIBS = @COMEDILIB_LIBS@ COMEDILIB_LIBVERSION = @COMEDILIB_LIBVERSION@ COMEDILIB_LT_LDFLAGS = @COMEDILIB_LT_LDFLAGS@ COMEDILIB_REVISION = @COMEDILIB_REVISION@ COMEDILIB_VERSION_MAJOR = @COMEDILIB_VERSION_MAJOR@ COMEDILIB_VERSION_MICRO = @COMEDILIB_VERSION_MICRO@ COMEDILIB_VERSION_MINOR = @COMEDILIB_VERSION_MINOR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_BACKEND = @PDF_BACKEND@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_QUIET = @PYTHON_QUIET@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_CONFIG_OPTIONS = @RUBY_CONFIG_OPTIONS@ RUBY_PREFIX = @RUBY_PREFIX@ RUBY_SO_DIR = @RUBY_SO_DIR@ SCXI_SO_VERSION = @SCXI_SO_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ VERSION = @VERSION@ XMLTO = @XMLTO@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pcmciadir = @pcmciadir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ udevfirmwaredir = @udevfirmwaredir@ udevrulesdir = @udevrulesdir@ udevscriptsdir = @udevscriptsdir@ XML = calibration_funcref.xml command_funcref.xml dio_funcref.xml \ deprecated_funcref.xml error_funcref.xml extensions_funcref.xml \ drivers.xml funcref.xml glossary.xml \ install.xml intro.xml other.xml reference.xml tutorial.xml \ driverwriting.xml comedilib.xml bindings.xml comedilib.ent TUTORIALS = $(srcdir)/../demo/tut1.c $(srcdir)/../demo/tut2.c \ $(srcdir)/../demo/tut3.c EXTRA_DIST = $(XML) calibration_funcref.txt command_funcref.txt dio_funcref.txt \ deprecated_funcref.txt error_funcref.txt extensions_funcref.txt \ funcref mkref drivers.txt mkdr FAQ \ acq-seq.gif doc_html man comedilib_html_config.xsl \ comedilib_dblatex_config.xsl \ comedilib.css BUILT_SOURCES = calibration_funcref.xml command_funcref.xml dio_funcref.xml \ deprecated_funcref.xml error_funcref.xml extensions_funcref.xml \ funcref.xml drivers.xml bindings.xml @HAVE_XMLTO_FALSE@all_html = @HAVE_XMLTO_TRUE@all_html = $(srcdir)/doc_html @HAVE_XMLTO_FALSE@install_html = @HAVE_XMLTO_TRUE@install_html = install_html @HAVE_XMLTO_FALSE@uninstall_html = @HAVE_XMLTO_TRUE@uninstall_html = uninstall_html @HAVE_XMLTO_FALSE@all_man = @HAVE_XMLTO_TRUE@all_man = $(srcdir)/man @HAVE_XMLTO_FALSE@install_man = @HAVE_XMLTO_TRUE@install_man = install_man @HAVE_XMLTO_FALSE@uninstall_man = @HAVE_XMLTO_TRUE@uninstall_man = uninstall_man @BUILD_PDF_FALSE@dist_pdf_DATA = @BUILD_PDF_TRUE@dist_pdf_DATA = $(srcdir)/pdf/comedilib.pdf @BUILD_PDF_USING_DBLATEX_FALSE@@BUILD_PDF_USING_FOP_FALSE@XMLTO_PDF_OPTS = @BUILD_PDF_USING_DBLATEX_FALSE@@BUILD_PDF_USING_FOP_TRUE@XMLTO_PDF_OPTS = --with-fop @BUILD_PDF_USING_DBLATEX_TRUE@XMLTO_PDF_OPTS = --with-dblatex -p "-p $(abs_srcdir)/comedilib_dblatex_config.xsl" locales = de all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_pdfDATA: $(dist_pdf_DATA) @$(NORMAL_INSTALL) @list='$(dist_pdf_DATA)'; test -n "$(pdfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pdfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; \ done uninstall-dist_pdfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_pdf_DATA)'; test -n "$(pdfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pdfdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(DATA) all-local installdirs: for dir in "$(DESTDIR)$(pdfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local install-dist_pdfDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic \ maintainer-clean-local mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_pdfDATA uninstall-local .MAKE: all check install install-am install-strip .PHONY: all all-am all-local check check-am clean clean-generic \ clean-libtool cscopelist-am ctags-am distclean \ distclean-generic distclean-libtool distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-data-local install-dist_pdfDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ maintainer-clean-local mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-dist_pdfDATA uninstall-local .PRECIOUS: Makefile all-local: $(all_html) $(all_man) install-data-local: $(install_html) $(install_man) uninstall-local: $(uninstall_html) $(uninstall_man) #named this doc_html to avoid phony html target that is automatically generated #(at least by automake1.8) $(srcdir)/doc_html: $(XML) $(TUTORIALS) comedilib_html_config.xsl { $(XMLTO) -o $(srcdir)/doc_html -m $(srcdir)/comedilib_html_config.xsl --skip-validation html $(srcdir)/comedilib.xml && \ (cd $(srcdir)/doc_html && $(LN_S) -f ../comedilib.css . && $(LN_S) -f ../acq-seq.gif .) && \ touch $(srcdir)/doc_html;} || \ { $(RM) -r $(srcdir)/doc_html; exit 1; } install_html: $(mkdir_p) $(DESTDIR)$(htmldir)/html chmod u+w $(DESTDIR)$(htmldir)/html for each in $(srcdir)/doc_html/*.html $(srcdir)/*.gif $(srcdir)/*.css; do \ $(INSTALL_DATA) $$each $(DESTDIR)$(htmldir)/html ; done uninstall_html: for each in $(srcdir)/doc_html/*.html $(srcdir)/*.gif $(srcdir)/*.css; do \ $(RM) $(DESTDIR)$(htmldir)/html/`basename $$each` ; done $(srcdir)/man: $(XML) { $(XMLTO) -o $(srcdir)/man --skip-validation man $(srcdir)/comedilib.xml && touch $(srcdir)/man; } || { $(RM) -r $(srcdir)/man; exit 1; } install_man: $(mkdir_p) -m 755 $(DESTDIR)$(mandir)/man3 chmod u+w $(DESTDIR)$(mandir)/man3 for each in `find $(srcdir)/man/ -name '*.3'`; do $(INSTALL_DATA) $$each $(DESTDIR)$(mandir)/man3 ; done uninstall_man: for each in `find $(srcdir)/man/ -name '*.3'`; do $(RM) $(DESTDIR)$(mandir)/man3/`basename $$each` ; done $(srcdir)/pdf/comedilib.pdf: $(XML) $(TUTORIALS) comedilib_dblatex_config.xsl $(XMLTO) -o $(srcdir)/pdf --skip-validation $(XMLTO_PDF_OPTS) pdf $(srcdir)/comedilib.xml funcref.xml: funcref mkref $(srcdir)/mkref $(srcdir)/funcref >$(srcdir)/funcref.xml calibration_funcref.xml: calibration_funcref.txt mkref $(srcdir)/mkref $(srcdir)/calibration_funcref.txt >$(srcdir)/calibration_funcref.xml command_funcref.xml: command_funcref.txt mkref $(srcdir)/mkref $(srcdir)/command_funcref.txt >$(srcdir)/command_funcref.xml dio_funcref.xml: dio_funcref.txt mkref $(srcdir)/mkref $(srcdir)/dio_funcref.txt >$(srcdir)/dio_funcref.xml deprecated_funcref.xml: deprecated_funcref.txt mkref $(srcdir)/mkref $(srcdir)/deprecated_funcref.txt >$(srcdir)/deprecated_funcref.xml error_funcref.xml: error_funcref.txt mkref $(srcdir)/mkref $(srcdir)/error_funcref.txt >$(srcdir)/error_funcref.xml extensions_funcref.xml: extensions_funcref.txt mkref $(srcdir)/mkref $(srcdir)/extensions_funcref.txt >$(srcdir)/extensions_funcref.xml drivers.xml: drivers.txt mkdr $(srcdir)/mkdr $(srcdir)/drivers.txt >$(srcdir)/drivers.xml maintainer-clean-local: $(RM) -r $(srcdir)/doc_html $(srcdir)/man $(srcdir)/pdf messages: .phony xgettext -k_ -k_s `find .. -name '*.c'` for i in $(locales);do \ msgmerge po/$$i.po messages.po -o $$i.po; \ mkdir -p locale/$$i/LC_MESSAGES; \ msgfmt $$i.po -o locale/$$i/LC_MESSAGES/comedilib.mo; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: comedilib-0.11.0/doc/driverwriting.xml0000644000000000000000000007617612416542105014616 00000000000000 %comedilib_entities; ]>
Writing a &comedi; driver This section explains the most important implementations aspects of the &comedi; device drivers. It tries to give the interested device driver writer an overview of the different steps required to write a new device driver. This section does not explain all implementation details of the &comedi; software itself: &comedi; has once and for all solved lots of boring but indispensable infrastructural things, such as: timers, management of which drivers are active, memory management for drivers and buffers, wrapping of RTOS-specific interfaces, interrupt handler management, general error handling, the /proc interface, etc. So, the device driver writers can concentrate on the interesting stuff: implementing their specific interface card's DAQ functionalities. In order to make a decent &comedi; device driver, you must know the answers to the following questions: How does the communication between user-space and kernel-space work? What functionality is provided by the generic kernel-space &comedi; functions, and what must be provided for each specific new driver? How to use DMA and interrupts? What are the addresses and meanings of all the card's registers? This information is to be found in the so-called register level manual of the card. Without it, coding a device driver is close to hopeless. It is also something that &comedi; (and hence also this handbook) cannot give any support or information for: board manufacturers all use their own design and nomenclature.
Communication user-space — kernel-space In user-space, you interact with the functions implemented in the Comedilib library. Most of the device driver core of the Comedilib library is found in lib subdirectory. All user-space &comedi; instructions and commands are transmitted to kernel space through a traditional ioctl system call. (See lib/ioctl.c in Comedilib.) The user-space information command is encoded as a number in the ioctl call, and decoded in the kernel-space library. There, they are executed by their kernel-space counterparts. This is done in the comedi_fops.c file in the Comedi sources: the comedi_unlocked_ioctl function processes the results of the ioctl system call, interprets its contents, and then calls the corresponding kernel-space do_…_ioctl function(s). For example, a &comedi; instruction is further processed by the do_insn_ioctl function. (Which, in turn, uses parse_insn for further detailed processing.) The data corresponding to instructions and commands is transmitted with the copy_from_user function; acquisition data captured by the interface card passes the kernel/user-space boundary with the help of a copy_to_user function.
Generic functionality The major include files of the kernel-space part of &comedi; are: include/linux/comedidev.h: the header file for kernel-only structures (device, subdevice, async (i.e., buffer/event/interrupt/callback functionality for asynchronous DAQ in a &comedi; command), driver, lrange), variables, inline functions and constants. include/linux/comedi_rt.h: all the real-time stuff, such as management of ISR in RTAI and RTLinux/Free, and spinlocks for atomic sections. include/linux/comedilib.h: the header file for the kernel library of &comedi; (kcomedilib module). From all the relevant &comedi; device driver code that is found in the comedi kernel module source directory, the generic functionality is contained in two parts: A couple of C files contain the infrastructural support. From these C files, it's especially the comedi_fops.c file that implements what makes &comedi; into what people want to use it for: a library that has solved 90% of the DAQ device driver efforts, once and for all. For real-time applications, the subdirectory kcomedilib implements an interface in the kernel that is similar to the &comedi; interface accessible through the user-space Comedi library. There are some differences in what is possible and/or needed in kernel-space and in user-space, so the functionalities offered in kcomedilib are not an exact copy of the user-space library. For example, locking, interrupt handling, real-time execution, callback handling, etc., are only available in kernel-space. Most drivers don't make use (yet) of these real-time functionalities.
Data structures This Section explains the generic data structures that a device driver interacts with: typedef struct comedi_lrange_struct comedi_lrange; typedef struct comedi_subdevice_struct comedi_subdevice; typedef struct comedi_device_struct comedi_device: typedef struct comedi_async_struct comedi_async typedef struct comedi_driver_struct comedi_driver; They can be found in include/linux/comedidev.h. Most of the fields are filled in by the &comedi; infrastructure, but there are still quite a handful that your driver must provide or use. As for the user-level &comedi;, each of the hierarchical layers has its own data structures: range (comedi_lrange), subdevice, and device. Note that these kernel-space data structures have similar names as their user-space equivalents, but they have a different (kernel-side) view on the DAQ problem and a different meaning: they encode the interaction with the hardware, not with the user. However, the comedi_insn and comedi_cmd data structures are shared between user-space and kernel-space: this should come as no surprise, since these data structures contain all information that the user-space program must transfer to the kernel-space driver for each acquisition. In addition to these data entities that are also known at the user level (device, sub-device, channel), the device driver level provides two more data structures which the application programmer doesn't get in touch with: the data structure comedi_driver that stores the device driver information that is relevant at the operating system level, and the data structure comedi_async that stores the information about all asynchronous activities (interrupts, callbacks and events).
<type>comedi_lrange</type> The channel information is simple, since it contains only the signal range information: struct comedi_lrange_struct{ int length; comedi_krange range[GCC_ZERO_LENGTH_ARRAY]; };
<type>comedi_subdevice</type> The subdevice is the smallest &comedi; entity that can be used for stand-alone DAQ, so it is no surprise that it is quite big: struct comedi_subdevice_struct{ int type; int n_chan; int subdev_flags; int len_chanlist; /* maximum length of channel/gain list */ void *private; comedi_async *async; void *lock; void *busy; unsigned int runflags; int io_bits; lsampl_t maxdata; /* if maxdata==0, use list */ lsampl_t *maxdata_list; /* list is channel specific */ unsigned int flags; unsigned int *flaglist; comedi_lrange *range_table; comedi_lrange **range_table_list; unsigned int *chanlist; /* driver-owned chanlist (not used) */ int (*insn_read)(comedi_device *,comedi_subdevice *,comedi_insn *,lsampl_t *); int (*insn_write)(comedi_device *,comedi_subdevice *,comedi_insn *,lsampl_t *); int (*insn_bits)(comedi_device *,comedi_subdevice *,comedi_insn *,lsampl_t *); int (*insn_config)(comedi_device *,comedi_subdevice *,comedi_insn *,lsampl_t *); int (*do_cmd)(comedi_device *,comedi_subdevice *); int (*do_cmdtest)(comedi_device *,comedi_subdevice *,comedi_cmd *); int (*poll)(comedi_device *,comedi_subdevice *); int (*cancel)(comedi_device *,comedi_subdevice *); int (*buf_change)(comedi_device *,comedi_subdevice *s,unsigned long new_size); void (*munge)(comedi_device *, comedi_subdevice *s, void *data, unsigned int num_bytes, unsigned int start_chan_index ); unsigned int state; }; The function pointers insn_readcancel . offer (pointers to) the standardized user-visible API that every subdevice should offer; every device driver has to fill in these functions with their board-specific implementations. (Functionality for which &comedi; provides generic functions will, by definition, not show up in the device driver data structures.) The buf_change and munge function pointers offer functionality that is not visible to the user and for which the device driver writer must provide a board-specific implementation: buf_change is called when a change in the data buffer requires handling; munge transforms different bit-representations of DAQ values, for example from unsigned to 2's complement.
<type>comedi_device</type> The last data structure stores the information at the device level: struct comedi_device_struct{ int use_count; comedi_driver *driver; void *private; kdev_t minor; char *board_name; const void *board_ptr; int attached; int rt; spinlock_t spinlock; int in_request_module; int n_subdevices; comedi_subdevice *subdevices; int options[COMEDI_NDEVCONFOPTS]; /* dumb */ int iobase; int irq; comedi_subdevice *read_subdev; wait_queue_head_t read_wait; comedi_subdevice *write_subdev; wait_queue_head_t write_wait; struct fasync_struct *async_queue; void (*open)(comedi_device *dev); void (*close)(comedi_device *dev); };
<type>comedi_async</type> The following data structure contains all relevant information: addresses and sizes of buffers, pointers to the actual data, and the information needed for event handling: struct comedi_async_struct{ void *prealloc_buf; /* pre-allocated buffer */ unsigned int prealloc_bufsz; /* buffer size, in bytes */ unsigned long *buf_page_list; /* physical address of each page */ unsigned int max_bufsize; /* maximum buffer size, bytes */ unsigned int mmap_count; /* current number of mmaps of prealloc_buf */ volatile unsigned int buf_write_count; /* byte count for writer (write completed) */ volatile unsigned int buf_write_alloc_count; /* byte count for writer (allocated for writing) */ volatile unsigned int buf_read_count; /* byte count for reader (read completed)*/ unsigned int buf_write_ptr; /* buffer marker for writer */ unsigned int buf_read_ptr; /* buffer marker for reader */ unsigned int cur_chan; /* useless channel marker for interrupt */ /* number of bytes that have been received for current scan */ unsigned int scan_progress; /* keeps track of where we are in chanlist as for munging */ unsigned int munge_chan; unsigned int events; /* events that have occurred */ comedi_cmd cmd; // callback stuff unsigned int cb_mask; int (*cb_func)(unsigned int flags,void *); void *cb_arg; int (*inttrig)(comedi_device *dev,comedi_subdevice *s,unsigned int x); };
<type>comedi_driver</type> struct comedi_driver_struct{ struct comedi_driver_struct *next; char *driver_name; struct module *module; int (*attach)(comedi_device *,comedi_devconfig *); int (*detach)(comedi_device *); /* number of elements in board_name and board_id arrays */ unsigned int num_names; void *board_name; /* offset in bytes from one board name pointer to the next */ int offset; };
Generic driver support functions The directory comedi contains a large set of support functions. Some of the most important ones are given below. From comedi/comedi_fops.c, functions to handle the hardware events (which also runs the registered callback function), to get data in and out of the software data buffer, and to parse the incoming functional requests: void comedi_event(comedi_device *dev,comedi_subdevice *s,unsigned int mask); int comedi_buf_put(comedi_async *async, sampl_t x); int comedi_buf_get(comedi_async *async, sampl_t *x); static int parse_insn(comedi_device *dev,comedi_insn *insn,lsampl_t *data,void *file); The file comedi/kcomedilib/kcomedilib_main.c provides functions to register a callback, to poll an ongoing data acquisition, and to print an error message: int comedi_register_callback(comedi_t *d,unsigned int subdevice, unsigned int mask,int (*cb)(unsigned int,void *),void *arg); int comedi_poll(comedi_t *d, unsigned int subdevice); void comedi_perror(const char *message); The file comedi/rt.c provides interrupt handling for real-time tasks (one interrupt per device!): int comedi_request_irq(unsigned irq,void (*handler)(int, void *,struct pt_regs *), unsigned long flags,const char *device,comedi_device *dev_id); void comedi_free_irq(unsigned int irq,comedi_device *dev_id)
Board-specific functionality The comedi/drivers subdirectory contains the board-specific device driver code. Each new card must get an entry in this directory. Or extend the functionality of an already existing driver file if the new card is quite similar to that implemented in an already existing driver. For example, many of the National Instruments DAQ cards use the same driver files. To help device driver writers, &comedi; provides the skeleton of a new device driver, in the comedi/drivers/skel.c file. Before starting to write a new driver, make sure you understand this file, and compare it to what you find in the other already available board-specific files in the same directory. The first thing you notice in skel.c is the documentation section: the &comedi; documentation is partially generated automatically, from the information that is given in this section. So, please comply with the structure and the keywords provided as &comedi; standards. The second part of the device driver contains board-specific static data structure and defines: addresses of hardware registers; defines and function prototypes for functionality that is only used inside of the device driver for this board; the encoding of the types and number of available channels; PCI information; etc. Each driver has to register two functions which are called when you load and unload your board's device driver (typically via a kernel module): mydriver_attach(); mydriver_detach(); In the attach function, memory is allocated for the necessary data structures, all properties of a device and its subdevices are defined, and filled in in the generic &comedi; data structures. As part of this, pointers to the low level instructions being supported by the subdevice have to be set, which define the basic functionality. In somewhat more detail, the mydriver_attach function must: check and request the I/O port region, IRQ, DMA, and other hardware resources. It is convenient here if you verify the existence of the hardware and the correctness of the other information given. Sometimes, unfortunately, this cannot be done. allocate memory for the private data structures. initialize the board registers and possible subdevices (timer, DMA, PCI, hardware FIFO, etc.). return 1, indicating success. If there were any errors along the way, you should return the appropriate (negative) error number. If an error is returned, the mydriver_detach function is called. The mydriver_detach function should check any resources that may have been allocated and release them as necessary. The &comedi; core frees dev->subdevices and dev->private, so this does not need to be done in mydriver_detach. If the driver has the possibility to offer asynchronous data acquisition, you have to code an interrupt service routine, event handling routines, and/or callback routines. Typically, you will be able to implement most of the above-mentioned functionality by cut-and-paste from already existing drivers. The mydriver_attach function needs most of your attention, because it must correctly define and allocate the (private and generic) data structures that are needed for this device. That is, each sub-device and each channel must get appropriate data fields, and an appropriate initialization. The good news, of course, is that &comedi; provides the data structures and the defines that fit very well with almost all DAQ functionalities found on interface cards. These can be found in the header files of the include/linux/ directory. Drivers with digital I/O subdevices should implement the following functions, setting the function pointers in the comedi_subdevice: insn_bits: drivers set this if they have a function that supports reading and writing multiple bits in a digital I/O subdevice at the same time. Most (if not all) of the drivers use this interface instead of insn_read and insn_write for DIO subdevices. insn_config: implements INSN_CONFIG instructions. Currently used for configuring the direction of digital I/O lines, although will eventually be used for generic configuration of drivers that is outside the scope of the currently defined &comedi; interface. Finally, the device driver writer must implement the insn_read and insn_write functions for the analog channels on the card: insn_read: acquire the inputs on the board and transfer them to the software buffer of the driver. insn_write: transfer data from the software buffer to the card, and execute the appropriate output conversions. In some drivers, you want to catch interrupts, and/or want to use the INSN_INTTRIG instruction. In this case, you must provide and register these callback functions. Implementation of all of the above-mentioned functions requires perfect knowledge about the hardware registers and addresses of the interface card. In general, you can find some inspiration in the already available device drivers, but don't trust that blind cut-and-paste will bring you far…
Callbacks, events and interrupts Continuous acquisition is tyically an asynchronous activity: the function call that has set the acquisition in motion has returned before the acquisition has finished (or even started). So, not only the acquired data must be sent back to the user's buffer in the background, but various types of asynchronous event handling can be needed during the acquisition: The hardware can generate some error or warning events. Normal functional interrupts are generated by the hardware, e.g., signalling the filling-up of the card's hardware buffer, or the end of an acquisition scan, etc. The device driver writer can register a driver-supplied callback function, that is called at the end of each hardware interrupt routine. Another driver-supplied callback function is executed when the user program launches an INSN_INTTRIG instruction. This event handling is executed synchronously with the execution of the triggering instruction. The interrupt handlers are registered through the functions mentioned before The event handling is done in the existing &comedi; drivers in statements such as this one: s->async->events |= COMEDI_CB_EOA | COMEDI_CB_ERROR It fills in the bits corresponding to particular events in the comedi_async data structure. The possible event bits are: COMEDI_CB_EOA: execute the callback at the End-Of-Acquisition (or End-Of-Output). COMEDI_CB_EOS: execute the callback at the End-Of-Scan. COMEDI_CB_OVERFLOW: execute the callback when a buffer overflow or underflow has occurred. COMEDI_CB_ERROR: execute the callback at the occurrence of an (undetermined) error.
Device driver caveats A few things to strive for when writing a new driver: Some DAQ cards consist of different layers of hardware, which can each be given their own device driver. Examples are: some of the National Instruments cards, that all share the same Mite PCI driver chip; the ubiquitous parallel port, that can be used for simple digital IO acquisitions. If your new card has such a multi-layer design too, please take the effort to provide drivers for each layer separately. Your hardware driver should be functional appropriate to the resources allocated. I.e., if the driver is fully functional when configured with an IRQ and DMA, it should still function moderately well with just an IRQ, or still do minor tasks without IRQ or DMA. Does your driver really require an IRQ to do digital I/O? Maybe someone will want to use your driver just to do digital I/O and has no interrupts available. Drivers are to have absolutely no global variables (apart from read-only, constant data, or data structures shared by all devices), mainly because the existence of global variables immediately negates any possibility of using the driver for two devices. The pointer dev->private should be used to point to a structure containing any additional variables needed by a driver/device combination. Drivers should report errors and warnings via the comedi_error function. (This is not the same function as the user-space comedi_perror function.)
Integrating the driver in the &comedi; library For integrating new drivers in the &comedi;'s source tree the following things have to be done: Choose a sensible name for the source code file. Let's assume here that you call it mydriver.c Put your new driver into comedi/drivers/mydriver.c. Edit comedi/drivers/Makefile.am and add mydriver.ko to the module_PROGRAMS list. Also add a line mydriver_ko_SOURCES = mydriver.c in the alphabetically appropriate place. Edit comedi/drivers/Kbuild and a line according to the type of driver: obj-$(COMEDI_CONFIG_PCI_MODULES) += mydriver.o # for a PCI driver obj-$(COMEDI_CONFIG_PCMCIA_MODULES) += mydriver.o # for a PCMCIA driver obj-$(COMEDI_CONFIG_USB_MODULES) += mydriver.o # for a USB driver obj-m += mydriver.o # for other driver types Run ./autogen.sh in the top-level comedi directory. You will need to have (a recent version of) autoconf and automake installed to successfully run autogen.sh. Afterwards, your driver will be built along with the rest of the drivers when you run make. If you want to have your driver included in the &comedi; distribution (you definitely want to :-) ) send it to the &comedi; mailing list for review and integration. See the top-level README for details of the &comedi; mailing list.) Note your work must be licensed under terms compatible with the GNU GPL to be distributed as a part of &comedi;.
comedilib-0.11.0/doc/calibration_funcref.txt0000644000000000000000000002733012715147476015737 00000000000000Calibration Function: comedi_apply_calibration -- set hardware calibration from file Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int channel Param: unsigned int range Param: unsigned int aref Param: const char * file_path Status: alpha Description: The function comedi_apply_calibration sets the hardware calibration for the subdevice specified by device and subdevice so that it is in proper calibration when using the channel specified by channel, range index specified by range and analog reference specified by aref. It does so by performing writes to the appropriate channels of the board's calibration subdevice(s). Depending on the hardware, the calibration settings used may or may not depend on the channel, range, or analog reference. Furthermore, the calibrations appropriate for different channel, range, and analog reference parameters may not be able to be applied simultaneously. For example, some boards cannot have their analog inputs calibrated for more than one input range simultaneously. Applying a calibration for range 1 may blow away a previously applied calibration for range 0. Or, applying a calibration for analog input channel 0 may cause the same calibration to be applied to all the other analog input channels as well. Your only guarantee is that calls to comedi_apply_calibration on different subdevices will not interfere with each other. In practice, their are some rules of thumb on how calibrations behave. No calibrations depend on the analog reference. A multiplexed analog input will have calibration settings that do not depend on the channel, and applying a setting for one channel will affect all channels equally. Analog outputs, and analog inputs with independent a/d converters for each input channel, will have calibration settings which do depend on the channel, and the settings for each channel will be independent of the other channels. If you wish to investigate exactly what comedi_apply_calibration is doing, you can perform reads on your board's calibration subdevice to see which calibration channels it is changing. You can also try to decipher the calibration file directly (it's a text file). The file_path parameter can be used to specify the file which contains the calibration information. If file_path is NULL, then Comedilib will use a default file location. The calibration information used by this function is generated by the comedi_calibrate program (see its man page). The functions comedi_parse_calibration_file, comedi_apply_parsed_calibration, and comedi_cleanup_calibration provide the same functionality at a slightly lower level. Returns: Returns 0 on success, -1 on failure. Function: comedi_apply_parsed_calibration -- set calibration from memory Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int channel Param: unsigned int range Param: unsigned int aref Param: const comedi_calibration_t * calibration Status: alpha Description: This function is similar to comedi_apply_calibration, except the calibration information is read from memory instead of a file. This function can be more efficient than comedi_apply_calibration since the calibration file does not need to be reparsed with every call. The value of parameter calibration is obtained by a call to comedi_parse_calibration_file. Returns: Returns 0 on success, -1 on failure. Function: comedi_cleanup_calibration -- free calibration resources Retval: void Param: comedi_calibration_t * calibration Status: alpha Description: This function frees the resources associated with a comedi_calibration_t obtained from comedi_parse_calibration_file. The comedi_calibration_t pointed to by calibration can not be used again after calling this function. Function: comedi_get_default_calibration_path -- get default calibration file path Retval: char * Param: comedi_t * device Status: alpha Description: This function returns a pointer to a string containing a default calibration file path appropriate for the Comedi device specified by device. Memory for the string is allocated by the function, and should be freed with the C library function free when the string is no longer needed. Returns: A string which contains a file path useable by comedi_parse_calibration_file. On error, NULL is returned. Function: comedi_get_hardcal_converter -- get converter for hardware-calibrated subdevice Retval: int Param: comedi_t * device Param: unsigned subdevice Param: unsigned channel Param: unsigned range Param: enum comedi_conversion_direction direction Param: comedi_polynomial_t * converter Status: alpha Description: The function comedi_get_hardcal_converter initializes the comedi_polynomial_t pointed to by converter so it can be passed to either comedi_to_physical, or comedi_from_physical. The result can be used to convert data from the specified subdevice, channel, and range. The direction parameter specifies whether converter will be passed to comedi_to_physical or comedi_from_physical. This function initializes the comedi_polynomial_t pointed to by converter as a simple linear function with no calibration information, appropriate for boards which do their gain/offset/nonlinearity corrections in hardware. If your board needs calibration to be performed in software by the host computer, use comedi_get_softcal_converter instead. A subdevice will advertise the fact that it depends on a software calibration with the SDF_SOFT_CALIBRATED subdevice flag. The result of this function will only depend on the channel parameter if either comedi_range_is_chan_specific or comedi_maxdata_is_chan_specific returns true for the specified subdevice. Returns: Returns 0 on success, -1 on failure. Function: comedi_get_softcal_converter -- get converter for software-calibrated subdevice Retval: int Param: unsigned subdevice Param: unsigned channel Param: unsigned range Param: enum comedi_conversion_direction direction Param: const comedi_calibration_t * parsed_calibration Param: comedi_polynomial_t * converter Status: alpha Description: The function comedi_get_softcal_converter initializes the comedi_polynomial_t pointed to by converter so it can be passed to either comedi_to_physical or comedi_from_physical. The comedi_polynomial_t pointed to by converter can then be used to convert data for the specified subdevice, channel, and range. The direction parameter specifies whether converter will be passed to comedi_to_physical or comedi_from_physical. The parsed_calibration parameter points to the software calibration values for your device, and may be obtained by calling comedi_parse_calibration_file on a calibration file generated by the comedi_soft_calibrate program. This function is only useful for boards that perform their calibrations in software on the host computer. A subdevice will advertise the fact that it depends on a software calibration with the SDF_SOFT_CALIBRATED subdevice flag. Whether or not the result of this function actually depends on the channel parameter is hardware dependent. For example, the calibration of a multiplexed analog input will typically not depend on the channel, only the range. Analog outputs will typically use different calibrations for each output channel. Software calibrations are implemented as polynomials (up to third order). Since the inverse of a polynomial of order higher than one can't be represented exactly as another polynomial, you may not be able to get converters for the reverse direction. For example, you may be able to get a converter for an analog input in the COMEDI_TO_PHYSICAL direction, but not in the COMEDI_FROM_PHYSICAL direction. Returns: Returns 0 on success, -1 on failure. Function: comedi_parse_calibration_file -- load contents of calibration file Retval: comedi_calibration_t * Param: const char * file_path Status: alpha Description: This function parses a calibration file (produced by the comedi_calibrate or comedi_soft_calibrate programs) and returns a pointer to a comedi_calibration_t which can be passed to the comedi_apply_parsed_calibration or comedi_get_softcal_converter functions. When you are finished using the comedi_calibration_t, you should call comedi_cleanup_calibration to free the resources associated with the comedi_calibration_t. The comedi_get_default_calibration_path function may be useful in conjunction with this function. Returns: A pointer to parsed calibration information on success, or NULL on failure. comedilib-0.11.0/doc/pdf/0000755000000000000000000000000013162722663012015 500000000000000comedilib-0.11.0/doc/pdf/comedilib.pdf0000644000000000000000000264207613105043772014372 00000000000000%PDF-1.5 %ÐÔÅØ 5 0 obj << /Length 302 /Filter /FlateDecode >> stream xÚ‘=SÃ0 †wÿ ÍPaÉñ×ÊçÑ;Žl½mãÐMr„ÇIËÑk&Ùòk½$ ¯ áA\âꞤÞ°¢mÐxÖÇh Šæ“›¶å6[³^mÁEµQI-rnb±$LqWˆwA1'~ë1:¥a]‹ùBBßf 1÷¾“²MYõµvð"ž…!/ÅÞ9ÔÞPÏÃÖ¢% ¹¶¨™Oñÿ¢±S¨¬‡œ=ZV§l.äÈfÐ}D;gsr \lTŽÎÅ&dS¶."4û.c9iwCbÙ”Ãá),?>»P‡f?$nCFzòµ]_›}èªåẉ?WmûÖ·d 2L9G“L«äÓŒûÞwÛÕp•H„2âÒXÏmO²åÿ,ïUÔ‹W endstream endobj 14 0 obj << /Length 1007 /Filter /FlateDecode >> stream xÚ¥VMsâ8½ó+\s’«ä/p͉dóÁIX0µ›š™ƒ±EP±XÙž ÿ~Zj™˜»›ÊžºÕzju?½6PçÉ¡ÎÍà"|¼f4v/‰ýØI7N{q8£ìˆ9iá|!—rÇ á~K?kôÈ: šÆžEÌ… ®ÒÁßAê°—„¾7"'ß ¾|£N{Ÿê…ÉØy6È1êùA ~é, èW1/ »"÷.£ä ÄÓ¶q‡~DÉW?bè±$}J\þž¹>%?DËe¾-9ßèÚáÂ!yI¼!+$d&ëoÇuôâŽÑ»VYõÝ;©z·¼®O®óßvßkâ–«]V¡¡ÚC%ªüûÏw4Á|›„«Ê22—JýLÓ®®Éz-›æ]™ŽD²ÈnŒ)‘Û/Ö:‘ü“EåņZ9~è% áax£Øê;ÝŠÒRŸ2ow¼ÒQFºè>S zrƒ'¢k7¤ÄƒX’i…§š-GP.«†»,"?ONkÄëût³ÌïŽÞjÙªü˜±àÐÍjDü+È¢â†×´Ç"Já2’óª¶ëîfµ©½â œìž‡zI4FJLzàó€ó×Ý ¬Ç;>Ãð„Çx·®U¦¸À`L6ŠsŒÔrÓ<ëçÏÿ¡QL²ETn´  ׎aVÛÆ Ú¬*>J…þNbsèïǤ­ n·±í«¶@óý½›ûœÁhv'oxÅUVâbÞ®K#?ðg)í3—œ2·×ðzËíD™‡ézlèÏO »§U#¡…¬²²“ðC¹ª!bGóãbšéç¶åýÛ#Ѹ÷H°è‚§œv³BkU“­Üó.”5dí³(KôÖÓÖ|Ó–F㱩qçÏizû°Jq1¹´Q—f²XLîÓG7ñɧ.s³•ÝQîú‘åäuub·/EW»e¾ÂÍáÜ{áPÆäîjqy ºI@&ÓÙ4µÕ•½ž¦÷WË¥]<,lÑhæºÌÉÂ)I§—0r«ÙÄ"æ«ÅüayåájÉù«jQy´§<<*Ogè”§Aâ8Ì0Q]m;©ÎбàM&Êú¬]Ìè± I`¶,´¯‹?†[ÜU<çâ…ð£Âsû)Ç æSGM:`úÓNןÞ=ö§7ºþ ¨ëO£²RVO×oß%ÖZÕ1+`PG0¦Dl0ZIý9 ¢1yV¢±E4òUUfüÎ0öÆaœV¹gÝ(A›º#J8HÏž›—YÎ-fÙšJ´Ô/dÝÞMÐRŸ16dázµœx'?tçþ\…>ü¨…ïùoõ ÑZŒH endstream endobj 57 0 obj << /Length 1273 /Filter /FlateDecode >> stream xÚí›Ks›HÇïúsØysÚòîÚ©ä²›µªR[N„ÑÔòPxØñ·ß`„°—¨$[v¸ -hô›þOw3‚ ¼›ý¶˜ýr…  ¸Ã]ì‚Å-`®ãr<®¶‹%¸™ÿž%áRZ_´µ|eí’ÚR»L]¬6”²¶š].fßfH…m®ˆŸ0$³›/,Õ¹:”ûྶLCÐÁÄUû1¸ž}œÁ]7}€°ÃbÛ~R¶n¦e˜–Eë(Ú~,lâ;!)²l!œÿyg!8sý÷N†÷µ÷ãyš¿ßÍÔs2³î9QmgÜë…6åÐ!yŽ‹qûGß”¨›~Z‰Ò²1ƒsY4[Ñl>cL–¡…™ò%›cË\Ö,Ä”ŸÊ‚þjÙ.óçŽe3u±×¾¡œ¿Àm·ñ ྱuÝf³Õci,nÁþ•Å2Рvw…º!QC+ ƒ•He‘X6‡ì­ {Q‚'IZ ¿(LÃ\ÄÍ?XTŸ`lþ±Ì'#µ9¶Á¿" µ·l‚y(>ü4>dðÑߪBF©ˆ•Øú ½±è;ÛÈ<&á.@™!Ü‹½•Tš+«Ö^õ ïYp%#¹ºFxƒo•,d)³´[†y"Ó,Î"͕҉ÝÙ±óSÝÛ* 4ÉB'¬Þ‘ç—ŽœRýîuµ^gy)Óh—­ˆe9EæYÀë—¼ÊÖá”{óÛY—*šŸª•?Cˆ£*µØŽ«{Ùu/îêÞþ=m„Þΰy²ÀFi>î*Þwa¹Ñ™Þfy"6“·øšUåN‡#ùR·^8šø‡˜w€Ð#iµàS.7Û^_S½æòçY”‹¤©þ A:…øÇBγª­žµZäE9äXíÔkWW0Õø£t‚ 4^§md3¬¾†å}¦F(ÊPD¦M²e+"]¶ˆëZ®é¿T©,U&ɰÿ‡JâH×Öê…W™ùº£ËõÈUGÇu;ŽŒ*Óк(Ò`•giV™7Û…²çÓ)G:=54’šnRAÅèªÊË•‘¸Zð¾‹d‡ ¡7%¾gÕ=<¢mþ´×´ê&± _ñì¶EI©nl‚e}ßúÉ”qi{ðÑ.•ºÚ4_ê›fFôÕ”‡"â#4°gZë—ØûÜjrTQ¹Þ"´”‘,M´ƒ‹ŸAMù¶9Á}Dx‘HEœECåó Íq ¹JCÉÔ"ïӢ̫ALª¸”ëT†œMÀ&åÐ<Ôê4o± MiØ1뗆͉*W–â##Ú“;ÜÉÝû>”&™­kü j{¹ñ)8/þCâGþ_üö²RîMèžÝ^¨Ñ}h=fºe–§&,sEa^w×8õ£àÂp$.Ö5;“DÕz{%V™‡"éZŸ»I!gŸCù I.X—\\nfªŽ‰Q òÂÓ>#²ýê’.ìà<š"軡ӣ!O¢i'#“vK`õJ|…È›‚è`Dx4"ú$"•îéõ¯.žºÉ'FGc-°‹´”¶ˆ¥(êÉée_oþ´‹_ž‚gçfÉêuœiÍ»ì;½#ò‡­1ëJ« OÈDõ\cѬ_½ü¾V%U¢æ-Sfõ9" Ñî„ĆWŸ™íÐ © MHùMá’8=H endstream endobj 136 0 obj << /Length 1340 /Filter /FlateDecode >> stream xÚí›Kw›FÇ÷ú,ÅBdÌ ÓãØJÒÔqmÓ…›£ƒÅXᔇÊÿ}g`À £'µ^Æ Òáûãùß;#`, `LGog£7çPƒ[œ"jÌî B-ʱÁ¸Ü2hÌ<ãf|‡ÂóÍ/³j439šâb4À£Hž¬èß«A£³Ùèï”/>žY&Æ"Ý|†'ßûhËæŽñO124ÂTîÆõè÷Ø|•ܶ#ÐâvùÙ¶Å,hN MÀø¿ô370'HøÑ*ÏÊÝEÞú‘-ËÃÐ]|õ#‘Ê¿’?cËœv¿±9ßÁÇ*pUÄKvÉÒ(w®¦#ãf"™i«¶ò×2˱GH³8‰Ü Öÿd"© ,âH½¶Ì7óãH^ ¡{Ãa¨< ý>þwÀùœgµPþ00vMÆ÷&$cq'aùÎTD¢‚!³üІNlâì[&"Oxe˜g&&ãÄ_.µX ÂpO…±jy)Ö›éÍ:'BíCÂt¤Ð™ŽjhoýL=iD v©òš›É‡QT¾ð››)7 ¹nT£Êz€3–~œÞ²ašÀiœG™ `烟r2He·  ês$JHiœ' ½¿ ò´Üsóo~à»ÉCEò{X9z•êà½ó×A¿(VÕ,¢4KòPDYÚ´]úݡÍú|‚%â$·P·”*ïØ¢PD<1¡#Ë Qn#™mÔé;>^^£…®: Øn]Çz`b;Ĉ·õFŠ–ÿí{áz")ÊQ‘þ¢;5ÎÀ¨EqÝØX—l}­z ­Ž °0„ÕH7òºN©å0Ö>]àßvŸ‘Ék'v5ø`íäË݇d&rK–¥íì@Šn„ËtàÖ¹@ѪZAI¬„ð‘uÿû›X"dqø”dÝå;½š_šOL[ü*=äaÕÈGè67¡ë‰ÕýÁ5ŠóóOÅÞôÚœ0b°^V¿f®‚Uõ ¯N.¦góOgÓÙûG—é‰U"n&¼Òk:p ñ"ª^¡ˆò°žÑNb.ë.%š²Y›¤ÒþÎ=_2©ú´œÓ? ‘¶È&~Ü 9pHS[ÝD%Ío=a"2¾÷bž=¬„’CïRx ñHƒnrÜM›V+kÃýÎÍ\]iËà¯ÛnUš/²<Ñs°|pj;ãØí¶qí¶µ *5Ew±4hŒÄv ¨ïù0À_kÔ&ÜÕ¶ë;ß¶|âûG¾òý/¬×<{ endstream endobj 218 0 obj << /Length 1016 /Filter /FlateDecode >> stream xÚí›Ms›8€ïþ:𬾅޻¶3½í®oÙƒA±™ÚR ¸Ýì¯_ÎԪɇ’ØÅ­.ÁÁð<Ï+é}…€` x?ûc1ûí‚ÈDrÌÁâ0žpI€ö(X”àjþÆlUYEºÖ¤¶5'}kÈÁˆ½XßðK×föv1ûàjÑeVçzÕÍXϵ@}, 1 ÍnYª³ù—ªPÙò6koo¬i€üÈØ|]›mv³ŽØü¶±_\È(4ɇùX ÷Z¨Š|cBƒ‚±§û•j³¥Éë2Óù¶X$ È_ŽÜ!ÎŽˆ—uÕébsUß¡Ç!ÚŸ‚žûD;?b¿Íÿíêa{žò0ÜŸ–¾8¢¯³bk­6v¾¥S_Џ`òéù>£·Ü9¦!ð½ñ ür¿“Ê[ D„©öµÁcx~_Ç2DÂÚÂiM8"Б·”µõ-ÉW}Õ…~9êOÃú>~„÷°n€Ó4„øCÌ¥srÄ|ŸÑ7•±‰Ž±øcŠD[^¼[ÃVºUµÎ7Y[W«•ªCféÇžAön5»1ŧŽ7½Üõû ¯ªù™qkÝ}›UM_reÍ*ªnU¹è–Ó_~zeÈ#›q Ys£´K9AÿĸAïº}²?òD°_¾€³[Ñ66×YmÌÒNºÆÔÙR­óC›išºÛá@ã=cŸ#Ä-^[óíÑ£4Œ.?ÀºÇÈð˜ŠgòàV·;=¤2 ½â•lܳ_$&(IÓc%ÖÂöò¿7·ºX×F›¥ð h›ë²[Ø‘ÁÇiíÊ9p“ wŸU‘ëBÙáŠÂ°žÅËȆû.s(eè'ÝÂ4ÎèŒzÈZÕoaOºwêÁºÜû']Ͱ»îÖ¨¯UmUèVé¶ŸHHÿxæž= ¾)à ÿÚÊÎ&¶zX6‘B·8”xÿ2†ƒ {!?$.žã…ÙuoqÂû;ÖÜ#¼Ó'†÷ž6!²_@[>J»©þë68R—Ó(@Ç»JŠmiZÕU‘µ•==‘­³ ðñ"wDZ—R©tHŸóNêÿcŸ© endstream endobj 2 0 obj << /Type /ObjStm /N 100 /First 853 /Length 2422 /Filter /FlateDecode >> stream xÚµ[ËŽ·Ý߯à2Y„—Ūâ0 ØHÃÒ"‰ …,!ÆŒ0’çïsê’3Í™HjÆj’x»›]<,Ö‹§)rÁ±ãè’£X]u”£I±‹•©ãñÔ '§øp•\Ñr¢ìªu)ŽˆÑâõ˜ñZp$ö:ámEk/ _´®+BxÅ8QÑ‚cBɧ˜Ñ¥à¢à‘ݬx”0àV@K¸%ÁàrÈÕ±!Çà,ø©Ù1 J%œœ8œ·rÆCt©Ö¯: ªøÇ U\æ$˜þH± ' àEœdÅst­ÁnbÒÀ'Ù)A¾§ ph€^ ÅýŒùbÍ5CƒøQ :K7zŒŠ>I‹žT\ʦvu©@q5¹L©ÙeJäjq™ƒBÉ. F#(À Æ@.gÌ‹°¹@—œ%P8QWèÒY]‰€K«%ÀB!cÙ²=*/™œêJI€JÁÕ@茿•0#[˜ uÛÒº*ŒÕ†QT- 6õƒÉ`Òµdëœ œYC 5“°Ø¬Å "ˆ˜5Pf!³Ý3¥Ð‰Ì0𲙑’„'—aL 0-ü,E“®Å4l÷²=a{7›U*I/q*F‡ A:DZ­P6±!˘ËÅv#4ë7鵚` †ãWµ¾ò‹I Ö‚Õµ™›>8ÓÅ´ñ«h:}õ•;?sç?ß<¿qç'îÃÉ~tç§oÞÿÒ}ý5žŸÎÏÿóöÊxõËÕéüÝÍõû«ë÷ïœZÇÓùÇ«w7n__½ƒ'^nüíêç7¯¾½ùͽ¸¡U}̶¦äK}y‚”[¼ŽI_z÷¶qÿþº?QòlËŸ‹ðƒë¿þúòã]5ys֜țñ?èùHMï©UîóºØÕýo[ÿËÞ9ÿp{óúÙÕ{÷s}òÔŸ_ýöÞÝ‹û¨Hk–ø%j z ±ðÕÃÞì~ç„4?žêï˜Ðù›ëëˆ{aÑ×àPCH ¼ÆšØt©5±5MQZ£­iRb“›”ؤp“ÂM 7)ܤp“ÂM 7)ܤp“ÂMŠ4)Ò¤H“"MŠ4)Ò¤H“"MŠ4)Ò¤h“òHÇeœÎÏ>üôþrý×7×ÿ>¿½¹ýùêö¢Íðòüýù/çï^ÐåÂÔÿ˦)øŠ8œCõ ZÒ”}…F2/9£ß7î‘ÿþáÞ|ssíéf‡ÂH^†ps#Ÿ%}ƇŸî‘,Á’Å#_ÞcI…=‚æ>–¸ ¢P¶]€%°Ï›é&Š>qÞ‡’އ¢%ù˜Ê= ¥(Bö±äXRñÉJÆ;,9{®¼¥,À"he3•ê+ÕÏF¹Þ¬‘=ÒÆ= ŽžÊ®¥ÄANƒúL›Õ*‰5ícY AbEõ)Ù‡Ï/΂ð&hu)’ªçýÂ+VG$úœ·¬, Ý)|èê¨zlÀ$¢K›¡`§ˆÅÒ}(|<”Ql‰YPÌK•}(r8®Á‡¸åe®Åc'¹E‡’¢—¡‚Ã& qöóÜ…ˆø2ÄVö)íÆ9Ô{:”˜=ÕÍL˜“Ç®û“P Y%¶æÁV¬ÄŽqÏñ­ÖÖ-Ü2jí²¿P €X¡Í[ÄVhç2¥˜¸`¡"ŠmÝL8Z­­yÎõpñuˆ¼õveÝ_©ã#o´r;mµ\D¹ÍÄûPŽ4Õv•Íz£•Û•ö¡y Õ6ÇÍ~ɪíT§ FØ/¡âÎaË„Š[¤Lâ9Þ€ UKvF¤Õ—˜&ñoÅØ¼zÑ-1ª¬dÏñ¦Œ2ÊÞEŒSâ$žãí5L¤mO!ù:‘ÁÓá@J@]·ùUA!ÎuȃM쫦'‰ßÿ‹ÎÅ…}ã¨_Äí6ºð¹ËòEd¨6vQ»¨]ÔÆ.ÖÆ.Ö¦Ú&XÛÜj›ˆ}Ri-õ6ö–{+½ÕÞvò5tö5tú5ty][D]uy…&êò¨Ë»#sïØÜ;:·ó¹Ô ]êŒ.uJ—:§KÔ¥ÎêR§u©óºÔ‰Ý—‡jV”NC2ʈpŸKF¬uAÈ}­[žÎf5“xŽÏŽdã£rDò®2‰çø *fù€fNÀ—&ñŸR®ÈH4PÍÁ5Oâ9>¤D>…V͈ÄR'ñŸ’°ÏÃV%)н0ë_ùx7h(¾( 4¶vÀrê¥|ܹ޾º}õËí«·ÿjXV Áþ—ÊðÅûõð‰OfÑÄ|úÀ öêŸ:íó ¯ ÔuŽRŒE±êÔO¼~ù9âLº]˜9}ÑãØXã‘W”¾ìq? Lý,0õÃÀÔOS?lGæ[Û‰ëÜß+ý½Òß+ý½Òß+¸.¸.¸.wÇš»¼ÒåÕ.¯vyµË«]^íò:éOõ§NûS½;'}wPºŸ”îÄìÄìÄìÄìÄìÄìÄìÄìĤ°ˆh¯“DûcÖ4;êîÀÍŽÍù\”IK8vvz9Š—0çÛy Ã^‡oâÆ°çT¦Ð,àGöbùõŠò`M]À®cã;ÙÁu2!,¨ú’ 7ßB’¢øþÄ·ÿC ¨õìY*›““Nµ âKÌ:*¾4Y×ðbfü? ñ0òœã«P͈1<œí. ?‹spðëö¿$ê@°'ì€eÎ}Dþ/n± endstream endobj 301 0 obj << /Length 1039 /Filter /FlateDecode >> stream xÚí›Os£6‡ïþ:ÂVúƒ®Ýnwº—N[ßÒƒL˜`pÎnûé+pÒ„[SÛYëìDc;ÏóJú!Éd‚‹ï–‹w? È€ðà ,×€2Ÿ‰p¡¯e îœ÷ÕF¦¹ûyù©mÍA¨[³ k Ÿ3¬_¬køØ5Z|X.~_ ýKÐË b? (H6‹»Ï¤úoŸô‰Á—®åP}0ý¸¿.~^ÀãŸaæ“N‘/ÈþÍ©O|ì#äz!…NÒ}æ(“M”lÒ¨VI´‰ë×#!u|×£ÎíB„¸î;´nž¡îõ¨ ìüòqî<­Õ¡¼×îùªxˆûŒ mlÐÞÄ_£•‹¡³[»˜:k©¢:ÿSêÏ@…%>J<œB<0ˆ+ëß­RÙÌ ‡ÂVùÌ{ȉü‹Ê9dÎ!µ°Ï/pÚ£½‰ÕÃp ¾˜Ÿý+ü¶ôYºãvl¹qÞ#¾­ŠB£¥p¦¥=¿N0Å ƒSÌ„=3µöGs #Øš¸’a(8/ípt âÄÇâ%¹Ýb?9:=^bd —!böØ^€ü04«\ßA!¬_þ}\ä+7y¥Ó Sîæá34âqÇ,úºß à¥ãÄÛmñG”J%”߸œ³ÈÃ1êxŒú6VµLûðÂ-à'ÀÁÀApRȸÜml‘]Þ¹pÒÞ®ï¤rí"èÄ»¢9¯ë¼¹×ÿ# ß$á‹ =$KM²÷±J5Ñ(ÑeL óè"êHÕH¥¶e<`M&”13a×Õº9{£ó,™Ó ÌyŸy7 öŒß ÄE»/Å=÷±ðNžÂû÷y–7q¡Éjü?¾ûI³Ýò¸™Ï&%x2Lði^E«¼iûŒ,Òvk‘kèRà˜lГEk s=CÛO®dáPB`JèÎ-ü-‚CfÑŸŽžOèÄd¿ß^s_;xc"¨)¢[u=†kâLá´”EŸRÖ¥*µÏXJn+Õäe;ab³ÕL 8ÌVR©²j³²^à s2H[E•û žîÆ\ßÌÐÿsϚ׈'&x°­Ü{ÖÆkJ9t2fu£ž¬pf­\F‡ÓR{N_YÖyUÖzBaÈ.·ÌÒâ1‰Æ¾©Ú´'Î÷Šrà˜lˆ‰’û¸,ÛdÀ²®JßX…阣FåY&•~^Ç«v)N]ekøMÀLþ³,[Ê‘L3Yë]ªo¼ÓÊO>DÆÌÕ“Qª½»o€n/žPµlÈ·î¦MÚûµ Ù&Øàc6^æÊ€Kþ:äCóARTÉCTW;Õ ¦¡=rwôñ“Ï×±oÐì HþËhÿõÍ2 endstream endobj 381 0 obj << /Length 1346 /Filter /FlateDecode >> stream xÚí›[s›8Çßý)xÚ13…Õýò˜Æ»é%í4Ù̾d;ÄÖ¬†ôòéWâbHR¼vR;å%B–ÍïtŽŽP€5±€u2x}1øýO˜%]ɳ.®-Ê\&±Å¥.9´.ërxß„²?_¼3½¹%to†óÞºœ#=XÞñNå½\ nP· ®FD®ÀÔòo—Ÿè{ï,à)¬/yÏ‹Bà"Ìt}fý58€‡&DÌ%ZœBW’âÛ©K\æJÛ˜‚¡Ÿÿèñ$LÇ›½4/â,ñCÛ‘ ]Û¡ì[A¤|–/2"Ut ’‰UTÎOÖ¥FĆœÔúU¥þã@îJŒ×±C`;¢Ž}ê%Á‚¡—„ã+avm#:¼“ñB}×B_2ìn”éã”Q2lQNâ,UÑD§¤{jÕ`êtSG5’p¦¶ƒ¡8$ü‡# ÛDÜ–fìO½( gú¹¨èù?-RãŸÓŸÅþ¿ËÐK™üÅÙwƒÎ7 ´ =΢T‡Ù›80a–“žö´ë&ÎZ´ÿÍ4n½²¤¬÷÷[Š!6ƒ·Äh.ö1"=ý'¢/ZôãtjV÷%{&zè] ËM¼½lA_¦°ÞïìX½°w…h›¿ö<éáGá< }íqÛAZ—ë,òSG ý|œöIÀÓ)&ÀýŠ=$˜ ë[CŠÇW*5Ñ;œ&&½@;ÖܧjoÑ5¶‡â¢–'ÖT^í@ë à¶©º1+X†pזּTn0H]‰ÅÝXEJ[½¸Ï/mÉqz‹,Ñ‹Y"úýÕgÑ€µ4Èæ^`ég°Ÿ [*6¼®„ ÁšýTkÈžþÎé׿hÐOÔdbB4’ý+†Ýª‚Hý¨–A’¦6&F­Ë©M2oyߕЄë´O@ôRÞíQJ¸ Ar%lë™'†&—ÿô-ÆQSOÉa/ÝOŸ‹5í–Q*_+èÑß›|1Lò×|F½ Q¦åΆ¦yaf,ä/sVªÐd“9Êò9J´²QZhì8E9 £0Q~q±º½Èæó8Ñ©”°kÇ*¶@¨Èóg!zUéhtúöãû¢þ1ÙD7Ù”ÏÊÛ¦áøÔYûäoE¡W?s/UW³ÐÌbˆå!îÆ–vf‹+¶Ál<÷C@<Œ÷Óñ[‡!Èþ¶&yoÞ[H°Š3ùFÍšaP—`T 9åË€¸¬¤Óð~¡Vã`TüÔ5§‰ÀP-âÙê½B &*õÊð¦âr‘{I`/˜ü~¬³ Ó&?º#~Õ8I8ó¾Õ8KçYZs#u|Ñò¶Ÿ¤dïù±&?Évï§*—ö÷˜Å Âöõ4‡à™òSRÍÁ-™.Çaäç4ïìEŸ€ÕónÇo5NY}ÍXWbó~µ¨ÇQšÄ³ºmJt ö'ëü$4ç{ ë¦Ç›sÛáâ×[¶vƒ/:Ã7'Öe >ú!|݃íà ÆXYm l !~(„¼ª7¼i5œ›|’Idg¯k¬°àu Q#Í s¸”ŸÄG_UqŽFg9¯ËOz©WÔ<ÿ6S µr²^T¹Øš·-VNœÀý ýt7:œï aMñÎXäÆ`Ý`Pšò(¸3(½(µá0ô§E«±.Ó÷•9Y(——¹õ­Ý‡ù}Q]â²ûjÌÆ€¬}À<Äò t%¥Å]ð·°4ôH¸É²â¬|1KD¸áöêÆRù¶¢#G¨?©qÿ›¶ª¼ï? r% ÿçÿz!\ª endstream endobj 232 0 obj << /Type /ObjStm /N 100 /First 919 /Length 2194 /Filter /FlateDecode >> stream xÚÍZ]‹\¹}ï_¡Çä!jU•ªJ³°»ÆI ³öC’Á³Þac²Ì˜™1lþ}ŽnkúÞ‰"7WÁ0ŒnwK¥#©T§.•R ¢² µÀí¹xÈ\Ж NhkpÊj E -…Z+ZDÿ*cä*z-C+Ä,c+úŸ{›ÿjûy^·áœRà61' œÙñ€oÕ $°S:pÊ [ëŒ~óp² $€œ<{ë\‚d†°Tƒ¨A¥ Þ„¾)X#F,L0©TÍ& Y¼aá•[g Ù,7t!ˆgÒ«B²¥  ËeHW`1*mv“ Ê˜#Ãltnô4܃¥k3nà­GOÁ0±Ü`ÖÀ;+ËH°š1ÊsðTìÀ®ÁY Ð-¸ #C„+µ>%¸á”KrÇfsIÁkFçB¡¤…Cax|(P E(XØ¡C±ÊP¼A…6”Ú b×jj+…>Tnû …À/˜½i„¶#‚JTËíˆ$T‡ Áî×ÊÀŒã®‹à¡”³6uI9·'èKRæ¦0É¥ …²¤âMT†-Ç‹'Â)HSXl`g †Ù‚‰‰šÉBMŠ@:A£3ž *mÉÐ>h°`¥Ä‹…²r†–+–-ÚôÚ¹=å¦áV¢˜CRS¬v„Ð[šZK[(æ´&sàŒZ‡ f$)ø¥måÔæ…ÚP¦Üú-—§ÒáÅ‹Ãñí??Þ„ã···w‡ã›O?>.Ÿÿôáö‡ãww÷?ÝÜ_%ÜÝôîø‡ãß_Ñòápüáæýc¸RÕˆíS©‘´©£ÇŠóÖ\bJ„n߆/ÂñM8þþîí]8¾ ¿ùx}ýóýõÇ¿G9R$ÿmøæ›þöƒÃ—ë GRCSöG“$\3âèTÇàÔÝáäb‘e…{qÛ†àpÚŽ•¨¸Ög8îfr íGS,«æd­Ñë˜ê0ïF$6¯x†“÷lŽì‡4<ÊgÜ3ƒ“w‡#VFó '.Zƒ£ûÃ)°2ðDOp¤T‚ŒÁ±ýáÌLÞÀqÅÊcpö·Éð™žw…£«Ž¹Þß(#‹ÙV%bQhÎþFYR…W»#T¢AÙß&#º‚ÙY]Â\´1%ûÛd„£Qóê"Mâ¢y,Ùß(#aˆ«IFðköŸêáÓíƒ?ÜÝ.€& AèÅë-gD^”F<Žx0¼Œ6›ƒÀ+›¡™°5¼¬hxC³¿óDÖEVo…Ô—,¡ÙßwÂ.««ÞÂ.Í2„f×I £«s „]5ñšý='!êB¨³¢AÔ…<|Íþމft_=’Çhc[³¿ÛDÄ…ÝY± âª^‡Àìï4oåºz)„["cXè™Ï|®Ùz ?„ã_þú·ð;ÂMMïˆ/¥†ÛO¿üòî©ó«»ÛÇEþ+,>ôQxF÷åÝŽ¯ïïÞ¿¹Ðp|ýòU8¾½ùõ1¼{¾ö××?ߎßCÚÍíãCs±mx[áÃݧû÷7}:}õ盟>\w÷kXöDa7S2ÅÒ–ûúú" '§Þ˦>`n>}³ðM§Vz›{«§ÖRo{ëý­÷·Þßžú[o½·¥·õÔz—ç]žwyÞåy—ç]žwyÞåy—ç]^éòJ—Wº¼Òå•.¯ty¥Ë+]^éòJ—W»¼ÚåÕ.¯žä½ÛUI½%”y½¾Ófu̘ÐþÚaÛÙy†Û–Æ\"íï¡¶Mmƒ¶-§Á;¼¿‹¶Ú`¬ÅaÞÜÊœý}´ÁÀ5òð ŽÁÂÂÙßIJ]7ÇOæâchöwÒ–slìþòÉ’ßý½´!Ÿl¤ìòI½XûûiC>é´ƒ|Rm,ØœÀ9*Êäkìk)¡‹6'pŽŠ„2Ëü*Jx•18ûÛdEBéu7)¥eL)÷7ƒ—³ù2!§¼˜Ì— )åå\¾L8¨Ë©|™R^ÎäË„”²ù›;5NäË„Œ²ñø’.áñeBFù%4þçöækâñó{s9?ƒÞ»œÅŸá.'ñ§èÍÅ~ž`p¾€ÂÿüRéWÄákœCáçMf5NákœÃà{¡!ÿßÑÈ×Ãàë„;õ% þçjl_‡oÔørß&¨ñå¾Í¨o\ÌáÛŒúÆÅ¾Í¨o\ÊáÛ„+u1‡obÑK9|{^Üx®Ú‹– Ÿ–ÌèÿJá—Ï(|ñ/¢ðåÄho9üÚ¹íÚ¹íÚ¹íÚ¹íz‚ÜÞW<µÒÛÜ[í­õÖ{û4îĉ·÷O-õ¶ËÓ.O»<íò´ËÓ.O»<íòzMAzMAzMAzMAzMAzMAzMAzMAzMAzMAzMAzMAzMAüëâìmB™Ë…c¥ + ­q-c.0Màìs³Î^Æ=2MáìÓ&Aò¤¸ScNpBEüb•²áìÑÚš  ko´n*VÇUgBA#KDx»áìi\u&4áü&F0É‘ÝòŒŠFräD› !hä1g8ã%êůL'ÂÕä /Q;E©¾¡ì > stream xÚí›]S›L€ïó+¸ja¦à~—iÒvÒ·ŽVÓ™ÎÛv2+`dB Äê¿ï.,P#±±~åBÙ%g‘yÎ9{>6mªíCïí¸·÷¦¹–ËÓÆ§es±f»âjCmìkßôA~hü”Ò¶æi†¥4q]Ëv xX.x†¹Xïݸ÷«'o ®‰,SÍ‹zß~ÍŸ}Ô€E\GûKF…ÀB˜‰ñL;î}î›ßÓ%¥P³)´\Rüuj1 RÄ8:÷Ï' /œøal˜XÜ0Myµõ¾n ¢sêó,ðΊO#Ú¼S„Ë)Χ¨œ’æ”~yÓX̾B½q—‚Ú"ÉFÃÐrÍ„âÅ)-Þ\ˆA!†((W¡æï½kÞ Í)kL2LƘn&àN¡Ø¿Y~ûEZI©ÞÂP’©V Ž>ô´o¦01ÝE ¹òª™%CÛr1®iŸ¦+0ð0žˆˆ&NÁE*_^ûž¤Åp´w ˜%±¿ô²´$(ì‡(éÑD¦zDÎgñ´µömÌ_XBö£eˆ¯g®Ág¯ð…aO$ϻ㎠ôƒò)GÁŒ_–0}%“Æ3žål¾XfM²`‹·Â Õx9ŠW´˜yr§A´€‰OB/ž³êãã KÃpf|V£êû¾ìæÞMò.ÀIwuëÀžˆëx0ëç[òذ‰¾Ú#óu6ûG,þ1ôØÛÙ#ÐbÏðzöB F\J3fÿS¼Ó,>_Nϲ )f^ž$¬3î‡O ~ݳ0éÝ9¿“‰ÏSÈ&^ÚD(Ê1‘&•Þ*+RÙ× 4TÈdòÕ?†lO&`t+Ñî±å³¥[áÔ>÷ÚÆÉÓeDÁ<«£çÓʳ•`8MøÊ¥ÓZ>Wz5uì'SkuÂXßYcz#Æ«Me—WÉý³³b”j—Ý Ô6A…"[ZÛ¯ØIf3é t· £{RŠdÕ„ &Ã3.:òzìÔq0rq!ã:_¿¾)x^'‰2ÿ’£Š˜+bbT“üôµ¸ÀÕ_¹©ñP'È z€ÈýÀ—ǹ¡‘ÍÚÈi¸£Ï7rÇ›îè:ÎÓcÜ.íîÙnƒk;•)ãp_«¨;jewͭڻ¹XyjˆL‡{ì ÷ISeƒuªÑºèñ×A˜AòT¢/ël–6®ñ÷›î—n˜ ó^}FÞ½©Uçå'““¸ìKVežª:’Ð@T?7 ÕËÄ;SÛÁk¹Jyÿw@A$ £O1ÅíHV‹™JjÒå‰ä «vêiG×É^Ìâi ‚½z‡Òwây Ùˆv‡Ô½qÒ‚'‹8ÉšœŽ3‘ªäÅXaaÅUˆr‘\¨æf±ÊadáA÷V& úI6ɨÔ-E¼´Ý@˜Ïb%²L+ÇO>3åjeJ<ý)c=tŸƒÓ»Ýí™6ˆfAÚ2æi0Dd©|3Ò?åoEîw~Ç@@í§q"; ±]*ÛT ìÞ7ÂeQËsÙÉwPÖ¶rùI1~ÿ*¯þ(ö—39aÌÝ)áJ°J¨NÐoRÃáè2È>©huå,«JÆDt¢ø¹s†ÝwuU²ùüWŽöÑ¡¨#D‚66l±ëxgõ–žA©þ9/:öŠeŽý¬›û[ÕAÝÖÝR)h}O@5eÌò¾ Qjœ”iÙªuï:/®‰q_ú  ¦+]ï¶JûƒQ¿¥ˆèN×ëu׬ôÐþHu¦°Þ-˜_j‡o3¥to¹TSJ[yt`®Ž{ö¡Ü˜ܵ\ïK/ugÁ+½8íþŸ,Þƒ0;"ê„˲?“%üä2 š>U­–M„WmK‹n”wŸM§v?e!¤âÌ@wç¼Zý‚8wïyZqþ+sîdÍ6Ïõ˜á6äõ­]¾~aÄ[5ï0äQÕ•l|W¢.ÝêOÒ< b¶û’‹Þ l^½~†Ð ­Cž©öúØÀTOø<Õ†ãÕ’z¢jÆ ÇšïþÏOxØóƒÜýÔ‚8+ÈpsÈr et—¾lY+nM+ds­V:kÅî(¨i…n®ºÓʶ´Ró kZ±7׊½ÓJg­\>V^¯û÷2‚,»üwÙÙrS@ endstream endobj 539 0 obj << /Length 1662 /Filter /FlateDecode >> stream xÚí›[SÛ8€ßó+ü´“ÌàDK²i`!]RBI_¶ídŒm‚·¾Ûié¿_Éò5ÀV¦ÀÈX’%ÙþÎÑÑ9’´¥´£Þ»yoô'T³†ET›_j„©…5fñ+ƒÚÜÕ>÷Çqè¹þàëü½¨Í4“צ8¯ ðQÄ;Ë+ú7¢RïpÞ»îA^4Xwˆ†&&šö>šËï½×ÀаLíG^3ÔC„)OÚyï¬îKË5FàÐ2ä³É è}7C&º舧u]^ìÌ–©ù“~bGi`g~·ç¼ ”éÔK|/•é/€?r‚µëG˲êÀB}ýðo~·`–Ùt€â۬n ~ï"$R¢”BI–šL|<êiŸuƒÒ>„V«byåÿtȆÆ Ê¸¤Œ)×MJÊ`ó9y<7ÿGjˆÁ(Å`™uCÝäÓù;™cwx\½ôjÌPW}"™“Mèëè[éÿˆ„V›ðвíÏ$<*…·LÅÕŠOh-éy‘—ØÌœgväÚ‰[Lã8YÅIcûË«¢æÊó\™œ éÛ¼À+º9ð—~Vö9‰2/¹@зO%©a™¼ˆåã¸Þ°ÇÕÁ0 ÆwV‹pdd&\«ù—}ª]X•Éx¶˜~:óà|2Ð)Æ;E~t 5m½YHÈ_¬oΦˆ2/ü¥eeAš%ëç ž':âs/˼c'|úMÊ7ÐMÌ^&dEžH]ã-ÉóŸ  m˜ï?âÇ%3—qRŽÖÔ‹Ò¸MŒ?“¼9%tiP ¥ñMGoáÄka*7<šÄöç»°Då½ËR ''ªF‡çdIùNi¿=ŽsÉQhmŸÉcuòP’=ã–+?õüàÊ^öcz¨·\÷æÄeRc§ô¿Bß0é•è®}ý_è+[äV^½í\¯ýÔ¯§ðžÞ½LÞPWù"z WåÍÚÜ}'‰GéÏRçgc½ª3 0Úó¥i½e]ïÀܨ˜›ˆgnpŸEyaŸgÓv@*ÒKá—æÜm¹Õ£S™üHØ$j‘í´ÚDg…æ¾ú5n³<[ó`¿šëâ(•Ê¥«©Èœé¼ Chç±t“@Óx¡dä/(A¬-y X‡}ž¸l¡±‹‹~$°†nn:Ê¡lf¼fe[â[9yµÓ&U'mÖ¤)èHºjP¸ö£Ì[±§ð1}›`­,ë 6o°3%÷Ë)›t*9ØÙÂF€N²Ø@ûrkh_¶†[oÒgÊÚÏ`‹züpäBú§:åNºá«ŠüMuþ¨Á?ôÎ:9Õ76ö6vÀ7ã6pHÝßbé˜È[QmõýQfT¤]ûzÁ@7{>OÇ“ýbñq`òÜœ‰ÕC½êë`RŸqü¬—`ªïð3ÒBÇ}âÍ•’‡ÁÓåÚkANBî+mI„ŽÕ·YöÅÊéïľÐgãúøÉ¥ï®xËÀKåÁbÒW·vÝ…1k3^8é“`f¿°ê›¬õøÕ놭,6dÚži˜[;]=î¦×àÊñÝŽ>˜Ø×å¶£ãó½V‰EyJ0neX$ð¹©¨ï š I%|•;<Ò|ë$*trz÷a?;š ÒPHŸVÇù©ïì™u`•u„·lž„Y­“Uœz­å›ôG¶hèª/›¨ Ù ÝGç\ÌHa¥µézµŠ“Œ«$Û ZM•,BŸ•0Û¨ö]y¼ˆ¶sUŽá½ªW}?/¹(,ÙþÁÉäÃ_eXÄgÞÀ„âTÔÚæ(§ T£†ºé¤ß{Íjæ0¼.ƒUÝFQÕÙ¡ŒJ 3Š ¸cwTñóÕWOMÒø|¢øùä×N„O¾‚ô25ª?Ú@OÑõnc ƒØ^´ë¢ô¬&ù²ÞNéï@¯¾^mš`‚}~„ÞàiÁ^\7Ø‹¢Y>'¡Ñìh¯Y€GïŠ|igótc;8ÕÍ·„#o´*ï®aÈ_¿.Z„È×5!¦D×å ÁÙ¹Ììë¼Êìè˜?åDüéäí½ú6*nçE0/ÂÍ"Y‹æ¯)r·$Þ ´ßkr~*ˆOè‘•#àîìòz׺ 4´€ñßsý <ñCg endstream endobj 612 0 obj << /Length 1554 /Filter /FlateDecode >> stream xÚí›[s›8†ïý+¸43KB¸tã&ãNÓ“íδŒÄaŠÁœ8ÿ~%6P;‹S§qcßD ‰CÞGÒwÚDÚYçõ¸Ó;…€jŽéPDµñµF¨IKcŽ(ÔÆžöµ{O}/пßÊÞL³Eojå½1±ÄÍòŽ Ù§ófÜùÙ¢hpu?dÚÑÜiçëw y¢í­LìØÚ]ÞsªLdQqj£Î§Øü’6 #Ðt°z41©i;ºáй¡ ©n qlªì{·:"]e¾{£ª>ž¼3–ý\žxé«jÖ a×Ô ÀSØqžø ë I©”WJ&š:ø|ÖѾ˜Ò.´œZDz ÈLDzVÊ; ¢¼ÝRy{½òL6¶ò<¬<ª(Kå§C¸…ôç†êhSð ì…í`ÀöÓU`X C(¯*¡<{vå÷ÎvŒP{FÖ’÷ꄾètƒ(½O3š®æK¿7€èUý\˜ Ç&/DùÝ‹Œ—"{¢Æª¤ / äât«CÒõUwÙÿ0“A¯oÈC¸KKñ§to)¸ÕÞ ¥àÓ þ ½¥¶çÃêd:³àz¹YGªê*æZŽ}v8:W6]ê<ÿm/†°]\Å#¯ÖàÐ~Eðbà_'ñtÝ´ÿ¯má§× ·×‰:Ån]¤3?ò“Àm!UQ{¯ÎÒ`: íƒá»Þ{?3>žH²Ã2õΖƒ)¥çQ/d‹UèTÖò4»+çÎÅûá‡ÅÂ(îñ À+nÜ2aá“ +—¯ ‹Ž°šºÈ“öÞFzl1ŒíBÜôÊ›/¶ÐöbôÚ\ük Ôi|­Êáû“áøM 2±æ¸7Q,$.Ìû»`䦀!úw-[©êTU½Î­]š=BÝSán4~¤È[{8<Ûï>AªB¦ÁdÊ¡âhxvÞ¤„b†Ðç•kýEïTʆÅL›ØšDé¥!-¶æ¾SDå2§Šâˆ¥ù‡y~HåóÖ¼vˆ‰T~I=ÉÜü¤ÁÀ60-l×± ¨â¥,¿ÀT¬é._¥âçÂoÔ‘ ›Î¸[ø(ßbêH9ÿ›½/*t#v*2ˆën“à˜Ï2¹r–Éì4Kæ®Lg§rU@øHíÙáYдY»œ2v–‹ôe˜ðhâˤ<;âÚÒvI8PG:¿ZmØÉctäðG8XuU6ƒÇ©±#$ív \GÂÓûÈÍ}çˆãÏà¨ÍÒ˜!ðHTöÈŽ¸lØ®26XuTxdÿû½H:ŸÍâ$«;ßÒi}°ªùÌKBVû¼–9>aúnð ´>bGOìiÙÙ-m.³ < ¯¸û£üîÞ_M«(K Þ Êü$™Ïdƒøˆp·ìœ–‹ì?nÓ¢èr™RU\rƒÐbÇ4ÄÞ²¥Û¡˜jÚ$á«äò›Ñu¤ƒ¨Ñ©š© ƒ«„Ë/(éþ%¡öÒK¡ ]úbÓÁ¸ž>fEúø,ŒÓTªÞ21¼á™ë~E‡…)ø1?¢ûHé8Û endstream endobj 412 0 obj << /Type /ObjStm /N 100 /First 923 /Length 2369 /Filter /FlateDecode >> stream xÚÍ[]o·}¿¿‚íCy9œ#@Ãm€0l?´5ôà8Ba4 Y’ŸÃ{ÇÚŸé²5`«Õîð;œ3sH³i*‰Í‰ m©º£õ$\Ñö¤Í·’Z%´”op«‰ áÅÆ‰HqÇq§v?pë‰X8‰Ø,ÏH"§q¡‰º1.,U*è§¡¿ªè¨yªÜ[’ZSU©¸àTÍÇ&®©šjoãþ.µ%®À(¶„èF€~€+x˜Û•Ïãé3~!ÁÃ,ã…rÆ/–N?Š¡ãÍVÇ,àÇ1aLE©–¤dã JÊ4îÔ¤¢6l$µ‚×1—ÚÄ‚nÔ;:KV`C¤%#¯{2:‘žLƸ´$³1.¥dmt©±>ºÀZÁ<‹ÕÔ¨÷ƒhÇ'ýa;ÁPI­ „x®¹¡XòBÀ£-9©Á%ç‚·JI>zÖ‚Oª}Ü© --œÜÝpGR/˜6-š:¡KP1³]†wà+vÃÌ+¾to˜y”Þñw%‚“·NîÒí )<&ŒàEàlŠ·©>¦WÍÇ7\u|h%‡‡•6¬À³¨â/ŠA1* â }ÔŠISx¼ÈÑ/>4Uåñú¨G¿QõzúÆÃµ±4Ÿž˜ˆ ÿÀæ×Æ(¹¢wÅL Pã àÛè£"îu|&Ë Iy,¶Š±*ž øú«FƬªecʇgÏÇ7¿ý÷:¿½¹¹½?_úéþôûnþs8~w{÷óõÝÛ‚õ[®Ž;þpüþ-~9_]¿¿OoU5cMUñÜ0Xµ–ûXDÚ2¼}›ž=KÇ×éø×Û7·éø<ýéã§ŸÆ?¼þáö&k¶lNß|sÀ¿Ëáá’Ûð¸Ïx¸gšÄÓ.‡jv¬«<•r+>‰Ç/Ž }ÃS8·f“xúåñ4Xíö€Ñ+»ð$*—¤ž»lD£õ¢ËãÊqàtÜn³€êååA€jÉÅû, ¾8 Î™6‡¦R3éôüÈÎóô–}tø*ÿñÏ¥¿eFÜôæyðëͧ_~¹úüð‹Û›ûS/@0©ßÂ5?]ã±ãË»Û÷¯¯5_>‘Žo®½OWýËwÿ¾>¿‡µë›û á1ÈWcŒo?ݽ¿Æ-ÐñéÖ߯þðî»Û_ÓiV´k®Èvršÿ—ïî` Ÿ?ÍëGt>²¤i$IçÖ¢mÑž!éÜr´­FkѶh?¿×Ï-—h)Ú°ÇaÇ={ö8ìqØ“°'aOž„= {ö$ìIØ“°'aOÞ†= {z¶wuQ¿l jܘ±IËg#-éÅ× Ò·ì¼T{ö2j/ÏÕ Kµ—-Ô6DŸ^¹—çjspcÛB­!²tžåjº#Ú=Y–V'Õ˳µ1ȨmddR@1³dT/J×%wGµEœy7CµbܳN]ëå š]†nE@³zåˆZ˲ËÑÕA³Ó9z•ˆ´gÝeéjže:K¯ºHÝvyú¸/Óyzµˆ›lÑ…rVŸž£vyD‚øìÅ7Dà鳈|¢†êeøHÀ(­NÇǾêñ.[€C•;­sY€!ºln„-ût¾Î "6²^Ø ‘Å¢ ¼ d B4íjP!$JÓE(/ÙŒ}R¸ƒTŠÎ.~^²!º¶-@¢–AY: yAÈf´,õ3H…úl~Í B6sÍC}@R™Ÿ¢›IÀžŠ\©N¯ý»vË&ÛÚ碾=‹hAÀ® U#mRÉ’ÍRˆ,ØÕJ6ßI˜†d©ÎRˆ,ˆØUjÞ±lUÊÚgýZìZQ9’íTgÎf³" v-–Ýw:8in{&ž!]¬Ûl¡±—\Ë,y(}!†möŽäëÿT Wî_ŠázÖŠ/†­ì³è¢±†h¬!ëòØÅ>·m–£•h5Z‹¶EûÙÎY|{×ç6ìQØ£°GaÂ…= {ö(ìÕ°WÃ^ˆ÷⽆x¯!Þkˆ÷⽆x¯!Þkˆ÷âýÕe³¡muóÌ†ìØ¦k]@Ú ÙqÛÕ4 ®Ó¦k]@Ú†Ýw =g¯³„¤ HÛ@ÒeWÓ4äÇ>]ÓèÒ6tÝÕ4†üx:÷Óœmàèê;¾ä2]ÓèÊ6AUµ«iL+j÷iRZ@ÛV5Ë®¦1–LÓ5.àm+-ó®¦1âûlMc ˆ[½gÙ¦H»ç:í×F+Tz‚]Û©ô%³Í.}[±“ìØv5ZEí4K!¶b'Ù±íjAš9K!¶b'rÛÕ4`}D½Y 1]¡Ò÷Üv5 ò"|‹ÙÅo "¶ Iö]M#È’g¶­ØÇ0λöˆ¸¯ØÇ¨ãLöNçš‹Ìrˆ·¯KwÿB×8§ü;$ngíx¯‹ÛY^~¼.®qX[ã°¶ÆamÃÚ‡µ5‹ÿVtjãļzèÐv<ìxØñ°ãaÇC‡ö°ça¯‡½özØëa¯‡½özØëa¯‡½~¶g¡ã[èø:¾…Žo¡ã[èø:¾…Žo¡ã[èø_•.î}.Þ鱺x/+tqÍ¥ù#uñNktqz´.ÞëW¦‹w^£‹“Ó#…ñ.k„q¤¥Æ»~mÂx`îßÃme endstream endobj 656 0 obj << /Length 721 /Filter /FlateDecode >> stream xÚÍUËVÛ0Ýû+´”ÏÁ®~©;ú€eQJvÀÂØŠ£âG†þ}G'$ØtÓn¬ñèÎèÎÌ•ÍHC9>-‚gœeDÅ*Y,IšÅ™’$W°æœ,jrK?®Mx¿¸t蜀ΤG3癀døìAÁ×Eðpp2Â_Џ)©ºàöž‘ö. ‹U­Gv$å,2»%7ÁuÀŽY„‹XqžÒLT IýáWfœÂHä–¸ž™fcõ¸#~X&Ob•$$PK.0#^0FOÇß}µ²C?lFH”‚§zÚ˜ÑLfèÑq£Ÿ6º¯4Dð<¡q¥ø.‰RÿàX§ƒÝQ ¶!hü8ÈmÄ“,£ÉÇ3T]â†'„á˜^JáôNÆÉ–ÕôNF<ú‘ì¬o³ò_²F‚Ë8ŠD2e–¿Öþ>—RQâ² eè_—Vk´Æa9mCÎhigÏÚ?5Póøi@§é'm—BB v@ˆç øì/Wm3•-—ŠÜËû%4ó×b¼c)û& ã0Mé5¼rLR•¶ÝÄòŒ^LáAUŠN+t«¡{0}‰Úw;îv!b_1`Ö­ît?•ö·ãÍ”*.àfEp©U:ÏèUg¸ fÒÝøD*SÏÓÌì`«Ä¥Ñ½¶¦:7QÐZ‡"¥¿L¥#Ó×z­áÑOˆ<ý~q‚–Ïô:•šm cÀJÀí+õÊô›g4;m{ÝbH7Ô›V¸9­Êù(³«w·aÆ= \vw¶ë;nÄÖ@!‘Pµeßxë\~,¾N˾F'–4×äÐ%úgîγµEç¸v’òÎÖ> stream xÚ­ZI³Û6¾¿_¡[¨*‹æ¾$‡)Ïd’r–²3yUsHr (Hâ˜"|Ïïß§7pe§29M ÑË× z›ÓÆÛ|ûðÏLJ×ßø^²ÉÝ< ’Íãq'n’‡›4‡gêo›_œé‹:TÛß¿Cêt“u"u”nægÀŒýí.H3ç5?üÄÇ9ÿ~|øýÁoãüaboÊËÃ/¿y›Œ}·ñÜ(Ï6ÏDyÙľçaízóóÃOž,Ú›/>Ûø›û~<]}”»À\Ö„k°“6¿ì|ÏóœwOÊl¡é®í5ÈB7ˆ»àCÑ"™ò÷¾j«®ÒÍÚ>“ØõƒØNûr»‹ÂÌ1ª8TÍIÀbaâfLR?Øì|ßÍc9ùg¬‘4H<\=‹¦¨µôµÕ ÞÚ¯ð-93Ù«Lթꊚ_ªæÚwíkÝwø$f‘síëV-Xú½WM‰Âá®R÷ ²—%LfT£L¢Y,÷ëÍ7 <õŽ)cÏQ]é¢|<çñ¬¸«Õ½)¥´ÜB Åç¡j;Sí·çô:È`ÃÏîy œ4¿\ Û}-ÊÅI¡Ú0S2jó†‡NP¤/çö&6k-ô× ˆg þT27J3wFS²0?X:2¿4pP×ÒÖR×`&¨jÔG‰ý ‹àAVv-øÝê¼ê^æ³a‡ËQôgMôš†®uÚU îuaò¡_½Ø{>WåYÖj”ð-`µ¡ ‚P¬¹*U ¯UÍ]§µÙ‰0fzrÇW…¹Ó)s© –ñKòA}bpà¤>8|+¤È“ÅÂhu¹Öê¢Rì(Z~v4?"EØWM!’ŸÂ8Øw°†®¢x‚†Èºó!RÌlø À¨@%„ØÞÉ—v©Æ¬‘ÿ‡_~JB€ã‚l®Æ^Dšã…ƒ¿‚ž™¿‚¡Á_Ášý­†ÑsÕ™d<Ë™Ïò3À¹ið'¼V掫”s·ë ¨¾¸0ù2 µÅEÖ;Wv¿¦jœÙˆà>)È]”n”."鲿p÷Ð$sFUÁ¸Ìˆ:{e{’ªïYÀê¡àÆþeÝà“AÉvõ®«.«è;ÌÝ -ùraâoÁ0£ÜsÞvÜË©ÑtˆC&>å… ~`|Zr—%¡Üœ›Lx×—õ½!©¾ˆy¾{ù\üfCÁ¢ý0Øèc›‚»õo#7Æ•æƒ'Vv«)`$~#Âæ( ;Å`$ŽÖ­^òª:a¿Ø %};Õ´àAÚO ©ÿ³Dþ¸ÍCçÍÛµ­ˆ·ú< ÚÌëoßÿ°àâ¸TïE,»Ç3#ôbi]]êœ&Ê#㜫Óù$h±s£Ó<"à»æð„F_tÏceÑpËíJ 'MB¢‘Žs„ÓWòF¹œTþHލTynª’Ñ Q»¶›hV›xöË€©x ¢N9ÜÂȱNEÓ,ò› !`5pñ 7ÊòhÆ IŒs—a«à¤Ü–BpbQ&•÷¶ö€u‘ÿ’»Åñ‡gÁAú>GwîP÷¤ Zþ?Ö¼¦R!Ä mo`RL ‚¼/‘!ôÑ·sÊðq­”¥¦ýÃszØJ  ÙÓ°àT˜®*ûº0w9ŸÁº-ç/1àGÃdCœ·ñ_Ih±‹é &C³„Ù4(ŸÄhÚi³²U¡¢„xE³Ð=˜§˜¢ikÀ›¸‘ȪJˆ˜°ºTÝœaMå»;¨+à@Ð žŠxô¸åù⇠ßڙ͊°o*‚©½µë &ZV_…+[%®SsÇ·ì±XÀcwŒ ËøÑ@"p/ FcùŽ8i~^{é(ø1Ê x±øÎDêÐËŽY\¹¡e©µæ8ö*!†Õf—\’ÀQIáôTÑ‚„/BdϘl]¯Êµ7WÝâ”u¡ÝËUÍÝëð͉ÿcýö˜Áß ¶4w½(׉Ígê‰p¸é€ëuÃVUOéüÈÅ*·Ð}½ cð«Qìü´Æ4ðÝ0šðô'›s×V¿ Gi Ê&eä7X–Äňå\Tä&‹\a\[Dž»É°`+W˜ñ¬H°Ñàt°8â¦%Ö™sÒˆ#.ÈÌèD/_ñÛˆ³à¥aoôI²;:;b -“n\RÁ³Fò˜9ÚüÆñàÚ5CY–Æ,ñ¶ÛÕê´ecÕåN‡ò ÈwîË=õ 7Íf‚ÇãùëòcQäzcBMÕ_ôò³Ï!H5«_‹ÝÔKÇŒS©nD5®[¦å$¶°Œ#RXÖÆ.„èÌ+Ó”Â6’„N¦ÒÊ`š$æ 8o‘¯a¤åâÔ¡ŠŽ4L8`¬¾sÍ‚ð+>·Î¯¶2 MÊ FÂ}QM)d{Õ=+Õ¬n˜¸Q8dk”ñíZµ#&ÓwNví !Ü_o{ÎÇ{L!гÉ%F á¹ê¾À°#{b-® %‚ð~WZ\/"üN°ð„E±™ ŶH/¨|8!(Zš/g¯Ê‚“apfN Œ®ÅBTkñkGSLÔÍÉ5Ð8-Á’í¥"̇D+㘓Ý S£`9åR{ñ½µ*Œò¦«b ö q✫ôµàoHR§¡i,û„g%A!õç’¶ûÉë›÷omj Úæ‹­Ÿ9’…¶åÍ ¾YÄÓ}ážá¸¸6ÜŒ5ml‘V2*ovêCªò¨ÌZ½·&é1áùËû iJ–þ'SŸÔ¦>ÁjêóF0C®/œá<XˆpP÷¹hªöò'’¯'1"Ü*KÒO,´À>¿ÃËþE'€‘:FˆÈw£Áp»ÃIèKÜ£›ZÉ ‘Û¤B«ß¨ä Éíá+”B)=d×€Ÿ—dgMËxq42&i¦©ó .ްŒORæW,uºjÁ!Ê(å\+]Ií•6!1–è¢ÕÜ}Õ¦ÖƒŸÁþñ;dM'Ÿ"-…î°ê„¿f‰S2JQ¨µ+X7ðÙ²1Œ9?D¸®®WN|cI õï"P;Á¨˜ƒ^áÌùjè,…pI© —–ÏyŠ­#K¾Œ×ñˆ^, áqéù[£÷Ù„y=SÊjÁ…¸l£ÖT¤ÑdìU2žSž0ÐýéÌ^à¹Wéú@6tFjÛöÊ)·wž7½ßÔ&rÖIù&×ÔÇÅÚ»!¦Ÿ1ú‹¥†‹µ+»7çMôöÛîêÍ@âfã…"_¥Ú«¿á¨€õ™HhvÝ>Õ±Éeû0>=BÀn¾ÃÀl!]œ2"V™,cHbXµ‚7Y3˜¬ÿ_Y&l‰øRxr Hlõ&Yxׄã$>9š$ñÜ=Â;3nϰrŒ1ºuÒ4œL·QYùŽpàyâÉ7¹Ž­¶‹KL)å’wì_Ë]÷B¢q|zã9öÈ÷{iÎÑ?ÃÛ,ˆø˜˜—Ü=oÁUµ\&G‚¾©:ÜDäÿš’3Ü¥Q:ߌìçÂcÃ'»‚ïLîïôI‰7ϼI>ÊYR7æ4zø{× B“1£ìí]¼uÜ{´kÈyã‡GµrÙ‰Œà$¾'1—uñaÿÕ‚¶$áÔ.år(°÷‡°˜à„ 1 ¦8"¦?yР;üuIèÄ#¶ e!Nȯ]Øöm]l2:ÖKù}òKÜR"Ì#÷Œ´Üæê¸Ï rr½×‚BŸ¾ÙʌЇ…½šç­¢G¡lUwÕc°Ün Ãr0+7v–ýå¡d/> stream xÚ­ɲÛ6òþ¾B·PUÍ}ñœ z☋ÂÅ/Î×OoAŠÏžñø" °ÑDïÝðvw;o÷íÍ?ßÜ<~î{É.wó$HvoN»8q“<Ü¥9ü§þîÍq÷›óuרcµÿãÍ÷¸:Ýe°: qu”næg€ŒûCfÎcþóß¹ùæÍÍŸ7>¬ñvþŒ^ ã]ÙÜüö‡·;ÂÜ÷;ÏòlwO+›]ì{n&0®w¯o~¹ñ>Mtì»yĤ¼îÑæ¸'â{·Ó£nv¿Â$³>ËàÆ™(rN]9 jØÓC×Öôˆÿdz’Ã<‹ ?Œ]/Oõa4ªÜû±s.ÚjhôáÙTG™ë{¾^~)úQ¶9ñÿ³}ä9O÷qìü€ªUÚûžS”U{çîq:o€š¾ôÝ¿U)Hަ¿íF3½¯ŽjþÄÎ¥«+"V>iÁ8Ia*ϼªð+v? ]uðá¸ã˜Éÿ¶/.çª,jà}ì9oÕóè…E4’„°±ã è®/~(Ú#ŽÕp©‹-ÿœª¡«®EŠ4Tw­Þ0ÖNƒŸëê¶/úJéµPQvíØwòRQßu}5ž›Á]p”í@ìÒ8'y»COþFß ×Ò⣠?eyà+U«z¢ ÂAøù…pòÄRÉs_½§ƒ‚ñ¥(÷ç¼+ð¬×–ØQAÊÃ4=ï;8¿0Œ…›!r…‡$J!î¨öAìÜ/¡Åå|/ðlp¤Uï‘FUwÕ“Ä âî{¡MÑj‘§^°HHéøÿ^Õ%(ÙŠ¾aVý±úÛÚZÓdV=}õB6D¹ÐS(€ÞRòоòŠsâÄÌÔ˜e0Y'ÀÛÈ(A˪É*!àXiêT+´§‹ýoa ‚tËÁ°`ß=("ð7H[¥l‚*ª¿I¯qŽÅ òH<£TLœ…¢«{·~Y¾mï;ú}†žÐHà:U©PkÔÀ3‡4 ¼ÈÐÄè€9öIì YŽ绎PXÕ£ø Åæ][&má“J6 µ(ϽÐoÒ.6"ЭR­¼ÛZ–ýîÅž¶‰÷U]ÃÈ_šeÖYM½™D*Cî€j][i3ËF‡.0ŸU3¨šÉ[YÝÝuçàçn˜åŸ¥oÀTdºeÂ$6f'7M©ïyà‚cK#cà†eØ4„€³ïZpðœ¬×,Ù¦ëeêÜò¨kÎ yD°cµÕY6¾Uã=q±(½Uœ!¨œ¬]ò5 õb‡0Í9pˆe–âÃ0ª¥Ñ E¿a‘YmË<.Gµ”/XSvGYmÔVöêwÏ )aŒÕÀZŒA?¢0sž#ªNP‘[ü«h.µ’f&9–±Ý‚BœÍÀCßxÙNƒ-`è‡Î«¯ÑÏø×Ÿˆ“ R22 îÀ5˜'ð&¬ºV5ƒ/$õ8*ž'€g"cÎb*ZYD>·ìÚ–£8Ü¢“ɳ¼°b¿os 6ÏœïÐ Í Fa-†¨G=l™ÚvûðJGeKˆ²Õ $㉠q…t¤8 ãã!‹X”Y‡EOpXzE-”®ãéáÕ–d€ùV‚ªéŽ8DҘŽ:—ŠÛª6sDÚFKÏçn‰Èóª=² ñ€°-ñÆwâ‘9ð|í”É ó4Ç+85G!o:Ææ¯ÅgEvqö¬ê‹à"Wƒ/,3CÖÂ5áº5‹p+É0’PÃ"!0Ю@`kpz㎠5@%w>'m¯íøèEk ½øbXE_?Víô—¸ŽaµúÜ â)l3…ÞE›)J lÄçµQBO¬0n²™4ÚwxJ]Vûž:-tfÇj&§TòU ˆÂñaò9þêÜ#‘ü6j‚Òra;Úþ<$¯TgQzÖÝôaïFžÉ:)Ä7ôq>ûL)ÏÄ ´0¤ Ca`˜„¥>ZxHÉzÙfm™$Y]#˜gôÄVJ×KL©Ùg õ ™»_«šüÂê;ÙYNö”XÌ’í*4»0—°½‡Cƒx/‰Œ,7O+ŽT—¸ÙÒ8ƒÒË—vX«½YÌkg"ÄbcÁ3ÆB d»çç®o zÙÊrì\ÍÊ­n¦³§P=öís#£‚†-ß“ÉÖIÎDÝ䬙Vç2Î`“á\©ú¨$‡?QZJ¡`¡Æ³H‰ ?-Þ²= eG`(܈ãÔp á £” %Zf®J`~K'p2J:ÝÄ­#0Ï:òtó×\N ³XÑ×0²YÆË •Ó(蛯wެ·â¢ã+ÌäÀW‘"s§ï¦»ófM*ÝtŽpê“ÈÔõ°Y—JÝ,Éõ+®NÝ|7N#Än’JñáÙ"Bð·" îÃ9@2kÄ&GÞÌÒí›*+ƒ’Ÿ‹ã±×RyTyC°xoÈmP['J{#¿Fè:ÛRVè}|Êy Ù³†BÀXäª.I€ÄʉbÀV]„‹Ÿ™¢®^GT±NÛ¨‘“¼ã2»Ø•;ÅÝdºjÙ?é°&¨ìv›ùƒÅÆ$q“ȸ–YW·› \/3 %FµÃ&uñ VÎ$ƒÝØ0M\?‰?c?ø€–wLèX«aõÅí§qk‚CòÙL­6u${aè¹9 ܨho¾ApÙb¼¬aÛÔ†¡e‘©ÚbL©ÈC;­J Lf¯le³pPYàs:ûYÙì3»HÞÕ‚IÁSº¬$œñkùv´=C½Õ[OxéþÜ1&Š FN@Kçœã ?“.•W§>ª÷[ÊsÐë6¢”N›ÎC˜¦Î7ô¤+ ítÁœ—â¤T"Õ…—t,âDC˜¸•½º€g¤ŒŒ‘pqë] ˆTà”Øú Šø¼q‚… £´–¯ã”ïM§÷Auï†"E‰òne¶¬‹a°:E º6)& »F_>Ù┟‚˜kè Àí§ êÉ}ÓZÃü£MŒ¾›øaYwÃf©0ÈÝ,Ë>c¯Šã%‘íó—$±êʱþ_0šð}u¾,7¦iŠËÿõkWùÙ'}ið /}ŒéŠ&sáõ7sdwJ±!žÉf™cz1G–\MIœ;]æD‡€o~ñ/ζ–V“­8ö¤ù¹Ùƒó…ÞuâPWlxneq%øÚ8b¢}d袷„ÓÁšLr®`×Òle×^¾>ôªÖVÛhoÉ÷HÄ À÷UÁƒ,«â{ù;¼;’ÈpM›ÔŠã0÷±¬A>vº¶ñ7¤ÀõÐÍ´ëÊ?L€´<á‘PŸ_Q/1²µ¢Ñâc´cQ¿ó`>"ך#±Ñ„\>Äo8èA%íH“œcÍŒÜâq,óúà;tIyÑ1=©âún‚Ñn«²mÝn|`Ýf¡|nò’qy´|·ì¦~ÐÕ½s±ºŒ#‘©<›å>½xÔº”Î_µåÆÿo[ó+óÃX‘M¥>ž¤xµ©e›"Y´ø†¸8—¼8ñ‹\)Nýe'ãßáäX%üÆç‰âÙPBw„½g Ý'žó†Â†Çß¾úq}…(BT©"ñÉ>§/®®¬¥ƒ#/0wvÄ^¾ªà瓹Þ0öŽc_ˆÓ’ƒZX6)ùc#ˆÚ¡àènUYp+4öå ¸èFÈ•Fž'Jb¤„ÊíVÁj¾Ÿ€ót¨±úpÝ¢xÔ0·ô–là¼fź×1|ôtãO³Žóc,Z)þGxE "`ãK{žõ>iÓÑ—y+N/v6™Ï{¥ÖÝÄUÓðºËÈÕòÄCþNº›¼=xB€ìË’sÒº4&mÌeGÅÃ$Tñ9¼ œº“gþøÀº8"X@ÿ6SM£é1 Yn‚*˜ ¶WÆL‰$KN*g Æãåkm益íXð ž`ëµY6Þ†n’çeÅã-¨kñfoõk´¦H£Ÿ.£6ÃX5ˆÕX~âN¢¶¦Ë‹‰ÑæÅÄ«û‡|urøôµB–ÏÐÜ©À¡vÜ€GHÕ~Tl`Åb†kñß ¾i¹DƒS'þ—ÛÁªq»‘ßiìF© ?òᡤy`ÝŠR¼TSÔÝþJFé"ddÁLŠReâXÝU#]yŽù(ìIé>n©.ã$ILZŽZ •\ ÒxõŽ]ûjª•1.é­¬ÄÔÔ î&V¼'\å5![;5·\uÄW@Á¹ðÊh¾à˜/ì”ZPÌBþºKVWÁ›ipš^¬0hy7¹ÓÙÝ}ÆXT_µ0¬ØºBYGŸsƒþ?˜?¢Ñ endstream endobj 705 0 obj << /Length 3598 /Filter /FlateDecode >> stream xÚ¥ZK“Û6¾Ï¯Ð-Ríˆ ‚ìÉ;[ÉÖnœxj/N…‘X¡È z2ùõÛnð%ÊN¼'‚ žî¯¿nPlN±ùçÝ?î^}Šd“y%›‡ÇJ‚$—›4‡gnŽ›ÛoÚ‹>V»_¾ÇÖé&ƒÖ‰ÄÖqY˜Á`®¡Üí£4Û¾¢G˜„ØçîíÃÝow!´›p:Jµ)/w~›#|û~#‚8Ï6Ï®åe£BD2r½y÷ãàE‹Ï/^…AÓ’~Ž"åVá»AŸpÚ' âdØÀ릨ۓßé´™”¹ogª´4°O•n‹Nc!Ûô~¨,.­ÿR¶—§º*‹]¸µúìöRFÛ‡]&¶/OP]×/»Dmï¡q"¶EÃãÒb¨\þÖW¦²UËËsÑ4ºæá}—ƒ¦çSמºâÇF lKõ'Ý记ܪíèk§‹#Oƒ[ßìy³ûä¨mùã.Û¶¶Å {§æ²ÏZ7ô‚[OãmÝî"µ}Ö×6G_ gÿôä¿Ùs§Í¹­Ôóg¡„NÁ= ?L'ÂÂ4ˆ³AúûPüwíŒ"8~ùV8ùÊX0T(†ÿÛ­¡d‡¾¬- hÕgÞ}YtǯvJm ­_׺´]ÛT¥¡—â…÷^›Ö—X>üÚÛöRX>'ø(SA(’7*Oã4Žà‘ž=Œ¶ózV CoU3ký2/»ê@zº#œì"˜ÙÈfOV±A"(¿nIïúÚèUÉF`£j8ÊCaÜb¢lbTQîô¡lûÆêΠ]€½Øêâ_äV7e{œ¼Ú2ÀcË’-2B»kJýd{'aWÓ6TÊH ‚¬ÞÙZ#¶V½ ÕöwúdÏNáÓ±:U¶¨é¥jžzËë%UÇ z‹µ÷| ´ÛÙyº3‘ ŽŠSËJn¶ªç%B©8©faFbªÌ"qS/Mé ô5Oº¬~"* D ³vYÄ#¨9pëÒ<«;¯„à¿n|é_w› m5q£}p# Ã#Ùª®¯vGßjX´u:uM98„À–ÔàØU»( ÁÌ:€Pô±íü‚+C¥_«†%Ý„yÈ$YXiÚ=ÛFmÏm:ÓÛ¥5 ‹"y@¡Ñ¥6¦è^èõõ»ïx€†Íɾµwì›%_Ô•å•ñÖXú¡ ¨êâPë€ËV© ’–ú7àãq@Áxî–fxq`ž€¼†gL5ov1,­ûÇùŠH9o)¶¼q¤NX¦Äx¤w°äªäe¡¥òºK”Y°@`pï©Ê çr²$¢=‡ZN"¡xã¬äcUj"ç œY‡²,w¡Øž±ôrskKå‡I£ØéÆ‚ä,· jfÛÓN«©þÐþ BCá žàçgàö À: öä°øZï†6´•ò “¼|=_„˜+Ä_ƒáo˜&¬14€øëÝ^ Ik”q:xrc÷…Püˆ²GÂ!ãd±gl˜Ù6º±`T2 ܰm§ÑëÀC-yŠI °[iþ€ö†õ0 UOÍ…-x&ÚÒßá-WØ€ð]¥æ%f›¡Î`äV‚`üÞ;Ä™¿á¿9dÿ”§T_rDïûÃqT앃ŠEÙä dxÛý¨S{Ð9‚ì‘dÌùA@ã|‹3û]Ïeø)–&«ƒ_‰Õ,ÅL*ΓÿG^o>)¬( D2Õj)¶NsbÚHÓ$à5Š>¢Ñ }óŠ{ÝŽ·OÎ, 5WU¡Œ.°wt\nÈÆwçNÀÚ¸T!‰yÜ… ‘%W!{t :6à€že‚ ƒ’I:ŽéGó‘ÚI ÈqEö ÒVåÙ˜Xò·( ¢4ýLfhvþY>=x06•q*›eÄ(3òþðPöŸ’é(-T@H¡ ¤^kBŠAH™¨,Ösó<w%pN~‚yt¼në·S”˜Q¢2Å%¸‘©Qs»¡gÁXå§Üòמ’äAÎ…„ˆÆ-ÁP.= ¥Çœ³+ÑZbrí¨1§s¡ê¹«¬uF [Ì¢F‹lû¶pàU†ÒƱ÷FQì36Xµ®€ 49çAŸªæFöØ–oÆË[7Í0mûS¦]wôKuOYD*AEÛþ‰Åsà æÊU<‘oßµà©c®žÎ¡Óóã…Yxë“AG âé tH˜pG(~guy¦jªÙLu]¬zÛ8„v.Œr¤àí"+¡=s]f˜aæ!î$Åô´.XÞ·÷‹®"œ&ÇœÞ`ê¨í›ãWCL‚‘™"¤àFEàH/ÎùÑM¼šðP@„a0 Rh'/ »·RÄhñƒÌZ^°dÀã¾.xÊI $XB .RË|ýæç#ýxvˆ:«y Êж¢¤æH)È–ñ0¿¤â"y©|ð BÍ`íÙ< žÝ†¥Ñ,dK=¤!¶ó¤Zô0CŒŒM]Ð%ðS Ý'-?ëºGS¼> q Ž’Ä!ÇÓ”¸Ate߆¬ÇPui™C¹¢Hn˜„.UÇ^+ ßKp”B­]I鉬iŽ ’4É µþbž‹¨€4 §R°>=ldjÆ£®µ…Õzð[†éeÑßóð2gÑ]u:énéI´ñùBžxEp2‚LÝ0·UJ+ÑI…3âÎCeDZ3Èuw±îØ1‰ŒÕ] {'wÛb¨²åq˜L¨øÖ8ò“ «?…Ù d4²XK=™Œ íŸ«‰¨ysŒ)3î3â4n¢ò»÷#"^óNzϹ`ð`xGxe¦B•-Ýö†X6Mžø¿.2ü¿Fã¨c»yÏ[‰;[.a~ë<¡¼>Ž§Þ°1zz9¹S™_˜Ì¿ùlŽžû֯ߦÐ.3ãnJý·o€c?n çp0Ú6­¥/þJ݇¨PEyWçÄ‹!¢›ÿ@N' ¯¼a¸ØÔ© ¹ Å=Â¥ˆ½,y…ÔâžWÉÞúËVYœÌhÿZØ)‚$Îæ9¡˜ã™¯ #GÉñ>Q±†–I B¹Ì‹Üø+"¹uŸãO8” ÇD‹Žþ¸ÈÝ/C̨òbZþhÌfóÏHϘ½M©ðo«)—I1áÔw´ÍÙêà‹G7¨ƒ—ºv#ðä½áïÿÓÅææþ‰2-LyøOŠ~’Xÿ ŠG~iûù.…þøâÿ[å¥1þì5^_¿ÃA—º2ë.S‹éŒEç±@¨ >ãmÇqª©®÷iötý¯+Ÿ’™„Œ=ÉËv&Žý„hv?®ýLG€ñ—üKù?…Aè> endstream endobj 719 0 obj << /Length 2378 /Filter /FlateDecode >> stream xÚµYKsÜ6¾ëWð8Så¡€Ð7e³Þr²©Š#Ý씊CB–8ä˜çß§ ÅÑzÊA"€è÷×ݘÀûìÞn~z¸¹}Ç‚ØKý4æ±÷ðäE±§ÂKRx&Ì{(¼›5GU”Û?~Á݉'aw,pw(¹/™„ÃôÆp»ã‰ÜÜ҃Š¿¹ù÷ÃÍ—{MçÇ"òòãÍÇ?¯€µ_¼ÀSéõΣ±Àç"†qåÝß|¸ Óמ QkšÂ—?LD’è ÎP/ÙÏÌÄíû#ó~n€Þ‡«v†ÄΡAªäÒQ%SŸ3`ˆÃ®”4ô®ü<´ ô›¼Ú^uzkžèùë–EX ·ß>‰$¬*Õn£hãkuZn––Û á‡qOæKù’{»ÝÅ<ØÜu—:?´MÝ ­Üå_†²+û²©iâ^}T«½åéKŒ”D)1À¢Ô"ä öN0?™â}Ü1tŽŸ·!ÆÈ[ž†:G:ëg®l·ã¡/âˆ}8™öYWæ4,²>£Q¶ÇU0©ŒÐý!ë gd×çÑ ~E.qÏäø.ÿÆZ<Ú<©ÖœvÞ2˜lŸ- áüÕµªº7fº¥g§únnt»ñ휊ùi HìOœGK`®š$8ÀŒ÷eý¹=‰ ™©dE½IäGà¡æÃ·¯©%±×Õ‚tYG­ÊñMnò¬ªÌBßÐÓqÂêBS'Õ>5íÑ0È7”8÷cÉ-‡MmäêHÆ‘Bpf÷“o,¡Y£',˜O*/?W…a,³e¤Ôx2 ºƒîóÓÈøg®ôˆd[•k ¦‘‡£DŸ‚(€?öf-ãÄn]þX¨*»¨U",DLø?¨È5*ç¶ìW•ÌæÇ,ýÇ—ÍUÉÔÎ~ìlÜåíÂ$ñe$çÆ1d¯ •dM®céúàâïMdgE¡èHUƒ¸p¼¤ÝkÂÛWDtp¡5ÆÁ¯_*¥y,ën5P¥€0ˆ—¼ÍQÎ Jf{ÃÙСKkfzÚx#êàé“9(R&»Ÿ†l„"q?…0¼†ôýQeµ‹°sõ @Èúm“«ÎlÞWMþlÆCÝ—ÕâËWà]ƒ0në²;¨bž)½ãŽ&yô#`úÛЗ'DS.¹Á®-Cô $*Åÿ‚X&R?dᄱ;‘D:‘­¸ä:¤W~@ø˜ˆ_úpìø°j ßÑî<5]Wîˆqý8TZÚé{£}9bvÖ? úfA¦Iq°Š¬â„U žnÊq·QÆ\0éËPXÁ–Ê_QEùÉ­:5g—mŒ`:ÛÜ7†.yvôƒÌ—ÒhôJ[¯„áøÝùÐh§à¡Q ä ë™0Gž û\ÏÔ,<ØN-h¦3xÅâ’I4We_ÇÙ«þ¬T½ˆ™MôLižuÓÛi RÄT}Ö}Û@iIÁ‚µ†p"ªq.äέ¸i(}.×Á«*»~tÁ5o…PŒ"¾â­@T!`~Ó¨™½.Ø•µÂ âÀÂèôHu= úI2UOt ðÙ·CnÕ2òCXÑõL}¡ÇÈ£ö˜Cÿ …[ÄLÜ£÷Øõ!?Ф­6!\DˆÝ™86&¶–lPhÊíó"Y³Æ:ù+¦”¦¢ÕiÅ] ŠýÑUT¦iëMP¬a*‹!«®€¨õ˜VCþ(ԌǬ.®”jrJ‚€ŒajàHSô*ýæqÅâØgÑèÓº, !§‰ã+§YøThvy¶Þ@Þfb<ê €²ºÀ®Ï‡•<ƒeŠ12aé¡Ɉ´cO k‹âsÌ °T¨^µ€æ›óÁ~£]§ùlÅB„s09—m¨w}†M&IÁz®9¡,‚OsD GäQ8¡È#µ£vTLøÔÏØÙÙé:DÍP™3›<LG»‹‚úÀtÀw,ËÞüº]+Ž¢Ó ÿ٨݊!ÏÉfú)%Ï»ë@$sufß‘Œb°B4ïD0÷8özK¦¤dnÐPþ˜fL¾qÂs ÚÆ,žÙt“Út“Z—‚zb¼Í³LB¸BÎT@9š²¿¯r$ææÔ”TNE9tL)„ØL‘­ê‡¶îL•=ö÷/Ӗ혒²µumöŒ[mƒŸ_ÿƀĈ•¤RÜáäÚ_½R‚Ú ´ìÒVÝË›ù‰U! öÂD®^˜Ü§“ÆäRóè\šàÍÆåû/N˜ãHwOú¥¿Ð,D®)˜i"Øtí¡Ì§û -˜ë醘¥£¡íø¦Êòg;gN\Z˜›ö„m²¡‡ :š œ±Öi{§Zs§ÃŒÉÁöTÖ8™öBÝÃ$ÈD§“Ä®næl´Áº£¤¥ªõú13ƒ½9Ì®xY~“ %ÄôSoÅô aïêÂ~gCgh’rb<­7ÇC¹‚Ê{z…^ ÚÇš-h§lÕQÕ}7ÝØž²SB©5q±$™¡jAÆv—K^è2ëU—®WG36ã½ÙnšNi«â³ÓT™)±b.¹anÑ-Að²gŒ´P<÷ÕeMZdY£^ຠ7aÍÙ¬úó_»ñÂäzå"®É;"p[9Ä}$Ä[Ûþ9m¿ÿ„ˆÒµx3¥ßM1P'ÂHÕ(·FŒÞ¾èrFëM–Hü ‘ÿkÙöT+ò`ãà? 7ldéâJE}ÃBýJç p/åXu¡Ì5èÛ ~›ŠÍÝûù)­ü·¬‡o·ïZ¥^±Ïοc‰Ÿ ±üÁbn.i"qVkT©ÙU.·. ƒ»ß߯ªŠÇÐïŽu i[BéËŒµ²úW1*`<~ (Ü¿ËÂK€{,‡ÞP«ºf•¹ˆA/™ƒhWóX3™zk‡î)Û—ãuùk?™--$¨Ôb€¢ÌÕ‘ˆBHõ‹ôA§C¢hBê€Æw@‹–FãÕ¾P sê¢ šlsÈy<Î^¢Ó›Î'z@7p—•U¶¯”%j²'`—¦JËÁam.]™c艬͎X…/ÏÇÀPûlÏ-JD%ª5cfÚŒ%<•õièoAx˜;DÕç>Ý4º~»öãPPØÿÀog¾ÁP endstream endobj 702 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./fig0.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 725 0 R /BBox [0 0 1077 454] /Resources << /XObject << /Im0 726 0 R >>/ProcSet [ /PDF /Text /ImageI ] >> /Length 32 >> stream q 1077 0 0 454 0 0 cm /Im0 Do Q endstream endobj 726 0 obj << /Type /XObject /Subtype /Image /Name /Im0 /Filter [/LZWDecode] /Width 1077 /Height 454 /ColorSpace 727 0 R /BitsPerComponent 8 /Length 728 0 R >> stream € P8$ „BaP¸d6ˆDbQ8¤V-ŒFcQ¸äv=HdR9$–M'”JeR¹d¶V˜LfS9¤Öm7œNgS¹äö}? PhT:%G¤RiTºe6O¨TjU:¥V­W¬VkUº¸ ¹_°XlV;%–Íg´ZmV»e¶Ýo¸Sk×¥Öíw¼^oW»åöýÀ_.x& ‡ÄbqX¼f7lÁãòY<¦W-—ÌfsY¹þG9ŸÐhtZ=&—M§šçµ½f·]¯ØlvSpwg·Ünw[½æöݵŸj§\ ÷ÇäryZ¾$ó…9æòú];/FkÖ˜ö:¾æËµ7çÎ;ýß'–™ã˜wýog·1ë™øvžï§Ö©ðû~XÄÇä›?¯Ü¦p Á | ÿºðLÓ‹­ 8¤"™9°Ì ;/L8ôô0Cí¤K CqD;ÃмG»1~7•åù‹G‘cy¾¥éª¾~Kê{Ï´¢z×§·ïü2ðx_Íóû>ïCô}Ÿoõqwåùõÿ‡ÇúÏ'ûp^èÝÔ€IéÙ«tøàD P.@Øà„‚PN:XÞ›ÿmNµà¸%9!!„PŽAh1 ÞX„®Bдà+=ƒðºCX[ ¡D9xpªCØ} àãDƒÊÞÄXáÄ:‰NâDxa„tq'ÅXkb\Yv6+Dh¹¢ŒBŠkJ.¸¿ b„ZO†3ÆXmbDA9Ï–2FèE ”x±b5Ç×9£´f1ȹ‡ú€ ¢2* ¡h'#!z‘rJ É"„dL~“Pf@ÃùÜRvÎÆy1"l§•æ0@ø¹*¡|i“rÎÇ™)%âú“–ÒÂXËyQ#¥,„rñÐáÈùs*aä¹–ÑîWIY&e¤Ñx’SJ™'3ãÖšò®_͈Á0£HŒæcJ¦i7$\»™Q"_N¹¡4§ƒ¼š“mÎé³6åŒéîoÊÅ8 Ÿ’s&VÍé],%|ÚŸ” EÏíçœæ—Sæ}PyE(¤ö›.HL8†âèdú—”.(M‰_7©  ¡ô­×P))(Ô ž’LFÿ(í9D’²nÓØ‘>(,–¢µ „SøKK*C¨¤3&6ÓÙPhÍF‚ .C“i GOTê˜ó¶LQGD¡Tæ¦T2>TšÌ½ãÔȨV‘Ö9™PëU6P”âª$H«2$„Ž5ž¾9Ó^eÅ ¬3–±T9/F'ís†,ÝõÓ¸ŸJkÕe¯¶MZY K/ìwYv.B;-ëÔ²²–½YùhkÚŠ³“úªÚkQl•¤¶Iâ×SË_J–$s£ëNÛÛÛclî;¶¶öG²Zèü[Än7æ3‡q+’c¸ïÞæÝYir›Bƺtêë]Û¼\üÿ€ÕVïÞ[Ìuo!4ª÷†óÞÛÝz.¿½÷Îú;ã}oÅù*l©ò'Æ~°{ŽB©Ê9€°F ZMçà·+‚°†E8=Æ`ì)„°Æoôxè4l3‡ðœ/û â M{ñ8x{âÜQ‹1Æ»^\gpî Æ¸îï8¬Šñ.<ÈWaÌsËåòi)¤äÃ+“™þP¿v­ä˜U;v ¹Wa¹›¼¤d²Þ\¹yi0eG¡™JϺÜÝe¼×j2þV9y»7ÙÛš/2ÎY§:çlÈPóV}Žù{9½Í s‰Ñ%>íç„q¡ã¶‹h:HF]%¤ÎVtÒ±[K—Ý:RônŠÐC@؉ŸóåÄÔ¶COä ¨õT=Õ™ßQJ+Ǟʥ…Ú¯Aês©5–½×ÇM[}yh¾­):„Àe}hvQyض¿]l#q´uÆ¿Ö;CZlÜÌõõ®Ú·ÙÃnî-¹7.ÄÒ›nl==·Þñ~ÙÕŽ„UÉyXkm2°ò7{ÑzO/ ®éK‘ï{X)•À%o°NŒoŠa¡4Îëßœ‰Óþ38W’ÿ|í‚ïÇŠ.ÌÓš~r]õ>$ý…¨TfšpÚÀwtªT“ÓîSB¹UEŸ|«˜s}´õ7Aæ|ò{ÎŽsËhM†• Wklõ£§F­Ò6ÛpÞ«>h•5êÝ*Ü;'IÔªT”´›«ÔÉëT¹oAä Wã&›Ôë]oç}—›PIŸÚjoL/|‹yZÊí;:ÍïÒÀÊyÝàé—z~óWÀðNuɹŸX¢~²xŸçû÷â´ûzxЧQ§=ˆåý¦†óç¼,oMÜkÀyÎQå|üΦ£ØsÝ“æP-õÜÛÚÕ±ï½4íl¶ï1î¹_bë~B”y)\#ß—d~¢äw¼«"&oÉúoØÓÚÛóûŸ–ÚþããýŸ¿íyObüýßÞô¿¥â]i÷/úU S}§ÜöÝ{otëÛ/ª±ÊØ®/$óHàŠàÿxÿOJø‚̳àíìÏ“îàé.jç,øbéÞÌï±o^¨< ðîP4øOÞíüœúõoX°/°NWÎ,«êò’O‚ë=vúðB³ úÞ­ñŽ1 ìª0Œë«ÀyÏ‹0J·Rìn¢ënM¯Œ+¸Œl~  Âõ#ÒѰ×hY ð +a-# èo .? Î#Ïs ë3 0å‹Ñ pÂÖî ½0¢Ón†Íø,Ú+(Òï<²ƒ2Óg>Í¥?ó=¦:Æóá@O£;“šFÔ@4µ3õAqÕ-sI<@óâ”ÓÆWt PüT <“½Bô=CðB4E0ÓG?Ó…D†?@T4) .Å3Õ?óATRÙ4iC×F4q7“ù+°;4]´aDB+ôwD´3A4QG4uH¦_Hô!I2Å2Ь˜”‰=ô_FÔ{‘ÁC´»I´¾Í3éJ3¿Lt{L´ÍJ§64‡KsHÏ; qê\áM÷ ¿Ct9M4éL”«>t$;Ô¹MS©GÔŸH<ÔãNSiQÔꮉï•LgM?PõNÐsON/N©*ãN.f’ËÕS±QSÕ@ß0gOgO´eP±ïHQJÉ5#G]UÏôžpFèÏ# • sRPû°j”¯Fç7VuiPÆ#XÎäû0ÎwYŠ SUžeóŸ*UkAÑaUÐræŽ&–î‘X&­7å®ÑNàþq ë•/ JœjµÕ]r\ÞUÚûU§ÎQ^UÑ^“Ï^Ñù?²i+•ÀõµõY0—\–¦$ÝI•W]Ôïatù ¯EIÖ :ï‡TVOÛV61aÒMc‚¥/îùH6äïÖü/™]ÕÏ[6O[Ö:Ù¯û𵯙fpy/Vmfó h6r©¶vš•© N•aö”°54µ`ÔkPþöFì5ÞèÕE“tÊvpüÕŽþ•}_k Fô+Tî]–Ál–-fOÙf–k?u`•ëBv§ U^ vf4ùuM•k¶SmV©aV­m¯æóÏ¿n4Îâˆîð&ûÐJè¶²å—Vöƒpvž½V£7³îÎ ?,w5qöûU‹f ¦ãjP«¶5E–ÐVôæÈŠÈìÃ9vnðeu÷g—Nþ¶ÿPv7nTUQ×1e—uAäsÕ¶APÍ(|@×™y§w Iv®Ývw³{V꼟T1½tvP*6U[·AV¿DÕ…`·‰e´?yqÙŒÓS—·{‘Û~׫ãbWÞ×7÷`V¥K7Å€7ùyWý Ó×ÕDò…v7lȬ,DW¥JWëzÖ›JxK£±}³Nnv?ƒ4Ût—Ép—ÕƒX, ‚Ž£~˜[‚#XSƒO„wÆ*˃×ÿMíå<&·Xw3„·Ó†¸†øpÐY~åôj]…øe$5U€Øm|øscãs·OÅÁb3чƵŠx÷±‰XÇ8-Œ˜©/˜½‹øÁzƒ|Ó15£-+3'.ØIˆWç†baMrd˜5ÔÀYØéø¬&KÖ0øäÉøîÑ…Ÿy &ÄPO¹¤>cÙ‘XŒ_2-€Vk„=.´¯Y7“ŒŒ¦3•”ùU‡rEƒ˜yEv7‹$ÿ”RÓ”˜ƒ=—©‘™ ?ر”C—9}‘¹‰˜¹w—anÙ=w7в¸Îe³o—¹‘,Ù•Ó£ŽZµR*ù2SY¢z¶=9Ÿ—W=VÙ]µ‰¶…Xõ~V‡ÙËš¹is˜œò!‰9ÚW9õŸs‘¹ÙkÖgYCLVžY»œUïšt¸ žÙ?™úŸ¹Íz-¢ós¡Z Z#Šùïž«i¡½ 3йã¡Ú¥?Ùƒ¢™ó¤ùM.ÚI¤º£Wž™…™´+§xµ¦ZgŸškšZoœš€<ù;jC§Ú£º=¨Zs§VÓ£™æ)¸s0÷©š›œ:!ªÞb™Ç¦:¿¡:[˜—¦k‹™k«šŸŸù¹­š5­ykš´oÙ±0šî5¹¾=úò-VW®¹k¯²É°R(­ y¹0ÐÕPÓåZ5‘ù§­WiW;8;þ:ÇJÙ²•¹‡Z [çKŒoC¹/©Ô•°ðÙ¬{.e[3}EÛKD›O±Ú£§¥Aµš¿¶ÄÕ¹á²3a«?®SŒf¹RYRÆgß³ÔÃ;ûg=ûkªº‰¹ØZ &Ž_Æ ê;–E»‘x/¹ûxÂûL[Q·ùG¬¢a±0¯Û!®½¬'›;­IDgƒ{²TÆq¹E¾›ê^¬-‰,f»³²üf{ï»ên_e¨_DçÙ— Ô)®›‰X‘ÀÎݺû¸f{T>ûß·Ûãz»æ]÷È ”ü5¿\¡ƒÃü1Ã|Dp{ý¸;¸YÓ´PZ;áÄ;˜c™á[÷çë¾ýMÂCîž…îÞ7é¾-ÏÅÜ™¾Õº8$a¾áéû9í|íí»÷ïþùà>­à™-µ»Èqå/çz‡? ó?íÊ9ç~ãÅŸèùc¼­{›w¹?ïí¸zÀAT‹òY'òž[Üõô<]R=ã·¾ëú»Üßo;óô¿+ñ}9è¿`t<¦+}¿‡m8ÿ“÷?ºÔ7õãc<-{Ÿ»~ñ] ÷ìý=í9cÖÃØÈ¶åÛ?ïÁ?,3ûð $ ƒAá˜T. ‡Câ”DA¢ñ8ÔR7D£0ðNC“Iáx´®Q-—Kæù\° %˜Æ¤³9´Þy=ŸL¦pIÜþC¢QéùÌÒ“M§Sæ´BFªJ*Љ‚¯DWìŽÉe³Yí›U®Ï]„Ælë•Î=q¬Õ.÷KÔvá:½ßðšüóNÂàaxxn9ˆ“ʯØì•Òã5À@­™œÖo9ÏgñTO%˜ÐiõV®¥{Ñé2ÑdC_°ÂAu»mÕ##·¿Èp{¾{#µŸñ¸vîç“Í—eyÎŽ#C³¥s¨°x·c¹XíÆ2ýªgwÉ8ñôæþ/Åõûâž=Ž»á¾ˆu»?Zœ§õý·¨oRd…=Ïô ¡@ÃÀÌ{ÿ@ÎûÀß¿NªIÁp{É +Ì:ë¼0ò¯ Ä.lF“DÎR$ü!±BçÄ´^ÆQƒI'ªŸÇ.¤@øBªãýÇœ‹"D’#«Ò\‘=ò• I°ô“ÊÌ­+ËL¹,Éï\¢ÚBòô-E“,ÍM)ŒÏ67“Ë1Ko¬Ý7½’4ïÍsÔ9>ÏsÌÃBÒÿ(N43±;14J?EÑ®}îÎoËûGÒmL94»ùMДüKI;”¤ÑBÔ4åGT2tëµUÌu{…VÁ3­ ÒÕ‹wY¿uÌc>W°_SPÕm)V¶YUY,¥fV–|{bRv5a\Z6u›l[6Õ¶ùÛËÕvûPí•A)Ü —t0ÖåŸq\}ßL¾÷5‘u®Wïn¾—…õ]UMË[Ü÷ÃX¶T÷ã)ƒ-XFmÖxZ׆ßtcÐÀcxæ;cùC^SöŒäYFS•c¹%ç“Z8†W™fy'ÞÉëŒ9Y¦{žå±>ÑgÚ&U Q×m™˜èºfC£®ºejΙںiºÆ=§¯šŠ«ë;·é6N—°k;qiÔš+‚g›>Ñ›_ vã¬m9ÖoolÛ¶‹¼`x¤å¶ÔÖ¾O¾åzþ9¿âû¥ÃÃæ\N5ÅÚÙ}ÝÇqú6µ¹Å9ª³$]¥}-Ñ€}7%Äõh¯OÖô7«n½W[Úõ}GmÜôý¯]«öGeÙ߬§KÝxÿÜw¼—wàx<-ÓΡ¼ýá)¾_æõ]çQÞvÚÿuïežº¡]û>ÿKîù¹îò_/ÍtlÜ·Ö}~ÿÃ÷{|Wãv=2õV þ+Ïñ÷¿§ðýŸKÚ|EÀµh  Cü}-÷½Þô›Û—~¯Ž@—Ç`cýÍér/GÕQƒÐ†º÷Œûa±„®5âÂØ%^ã¬u/Ö@G°üàãZŽEûÃÈeàÄsª·–*ÉàìF‡O5ôA§„Ce‘»ø• lí*.Eøª÷¢¼8‹0Ö&Âvs c„‹† Â×Rîáœ8‰q:7¸h}£Ly|Q²1ÄÈþ̼lQáÅ<¨»ãìs„ÑF8¸É-ËÊxñ~@Ä—Õ #$6tNÞÀyË!ëZuqj-Á¸o&âD¨”2ž>>'&Õ%$™z‘AÁJW0ÏårL‘sÈL9‰,&Ƙñ¹áÇâ‹{¡pÓ1ÄL‚|ùæ´Í”rîEK¶ÊeËnŒ­±‹9Ia§ יȉÚN¶E8Ü#•ŒÓ‚x3YÚ^&ìÑ—ËeÏv?<k|Ô§M‰³§µ„“îwN’µ?V¢.b%¦„)ßC(mŸOѧá>_• ÓIOR%ahº_+†Š–ÚPލU¥åš‹¥ÚHAi2®¦è ÞÍ:=Ž’zÌ=²,$^|ªʨRò'Ç*œcÎ 8ôÔ²Ò9èw©ý''µZ›?ú°A•ª“f¯:±Seü(“¬ U20‚&Í æ‰®’ÃO -t£r¾¬ÔЇ\+‹^¯’Š ÖE9åÕQ¥5æ­œ{ Hkj%¥Š¸×*çddœÉ¯õˆôÙdf,Í…Lô¶hšv„©x´âÍZZî|j¼êµôÊØ©ôML-¥¤­3•E8:jí•dµÖFØX„gZ!]µ²vRz“ •ríå¶³¶&¶N‹N_-mÅ Ðþê\äOth- ¶ä+svïÝ®µúßåKphuÚ¯2iäHI7-aã¾–V»^rIz‘Ô¶¿±ZHAI:ëãÍ›OUÞ›ët¯¾ Àðzü`§od­nsÔJs] ‰w"ž„6FÅŒ57¬®ÄQ =—Ù%Ú¹·½^á zñ/ữÌS"gõ×±xpçãœ-âö=ÂÑböµënm2E´Çp~ Ahï-îýà°æ^<« ²d"‚÷ê°‰9.Ë.ŠX»+cÈ‘–nö5ÅY¥f ݘ±&qÉÙ?æ{ÑWl~x’9¾#Ã埳þ6Í^ìIK í3 wŠ‘®1WÛ݆éÄ¥Òr&èXX–—•+Xt&3ËH¨ë£ Áš/MQ<Ó<éËP‘rIçïóæËŠFXëhõª^dz̸Ó^kÜog$ªÖð çÛý¦s®ÑÙ!Ñk!/ÆÎ•RýæmÉdÚ“»rGí퉫jíG³ÚºûnGѤþYØ›ƒF;ãQožlnO:d$Û1kæ¢Ý›'w].f~!v¥ho¶ƒÀ©öÕúF…ñ<·½Õz4›W…Pü×Ipõ¿ÔÜ^òqú;Áï^þ¿ø9TqÊ3]8¦ÓäšÆùk6¹Ä¨×3àZñÿÏrï%çüŸŒóKáp7×8lfòÑŠÏ€²‡.ç=£l~5ƒöVýá=¡t›š¸f¾ª¹}q£[MÑ+7O0G©r®¶9‡Ní…G·e>áÊ{¨ä}ƒuœM’{½ŽÊ=öÆçu¿Ú8*¹î}—ÄjF‘Õ †ù¬½1µv¿ö,ÓÁí=ÿAbà<,ÔtÏÏyÿ2h½~ó¹§Öݯ¦òõSñKÍ™ T3µ‚î¾ÛzZƒ¶=G¼ð^ßÐô‹­µ{Œ²¾;·×¿î}…Z,œ¯™|‘€}_wò¾ÊÏØêˆo>7­ö2÷Ý~^}ìôš¶¿“€ùŽñø¾Ò%>n{”oú¿_òþz©; Y9 Ⱦý¿â€"Ë÷?I6¯ë8Ãà{û'ƒü:Û1dÀsúø¾ý=¬?¹ò@zÊÀŠuÀ›¼ª”-ܜԹ«å@ ½·”»K1#+Ÿ³6ØÁë²B"0!ä/Ëož2þDAYÁš é³Á³µ@ûÐ-Û Á; ¯ÛAÎ@Ê»¸q^8„¿ƒð´"4$t#³#P»½=ll³lm´ô"µÔ3Ì«Å@¯Ë¸ÍC|‹.ä·Ë3Š»ä‰ÈŒEJ"jˤÃ*äÁÀ»“˨º™Cm´ò§¬Ãœ½§ÄÈF»åÊó„LtŸ“›:\¡:l¥L$Ò?ôÁI´ÀijH*K̖ͤžJÔ'ŒÐ,ËÌc®Mkp·ÄqÌü ËŒÑMcë˃ˆÍ\ÉJ4Ê äjÉ”±HÌ—Â<ê§ÞÈ;éÀTàÎ\ǺøƒËKÈJ ïKk Kí½$ð­TàKœðMœª0\Ý04½'Œ?δgÉœãE$ K”ÑÏŒ×)dâÎãËFLæÄ\óOˆJL÷²òŸO\“Í(í|ÜF} ›ì®¶´þÎL0P KTx½s†ÐA]M„Ã;’µ DÛ‡Ð=ÝФÅÄ!ÃÐËëÐ\ÿÑÔ¶QTFNe¿EÌLQí¾¢ÇÑbæM L‹²CÁQhÃÝBÜ65O< ±ÍQkGȤ‰Ní"Ñ­/£ÚDbѺí&Bm'AÃÑp™>5-‰%+¦Ý Ò#Á=­Ó•9¸õ:Î$Oô_NE#Q”0Í‹Ó .R:ð¿?Sý@ShœSºkSÌÄÓÜEÁËèSeÓ+×Ôe!Su33çÔS«ÔýROEGÔåTUMB ­)*ôíÓmMCƒ³?c–UPR2;õGU].¿ŠÂ/#ERÍCÓ5aÀ-bÔU82ðÕ­a+}Dɽ]ÍEQÌE_Ë]eQ…DAsþCIcažLÕiÖM8V%NÆ£uOs¹V[À%pVl´Åi?üÓ×ÌÖí`¼=fVlGW$TÂL{T Ó}u׫èWûX$}ÃE)½4eWzTŠ®Â„}ÉŒ)GõsØEÔlT-„Õ*äØ bÈ\ì œhH5^WMV¥†,„b±å•Ä%Yu‘›,ïX´¦ΣÂEƒÔ¥~Õ ToY¦2M•3„oIåWäsXU$ëz5KaE¼v×}¦ü¤ÕͦÒ}5ZtZËó,I5tVå¤Z5`WU&Ù2ÌÚ{Jµ]¢Ö}×ýCC“TFl6òòÛÃ@Ñõ²ÛVF ³ÚÜg µZKRÁý—ÌUFÛ…˜Dlt¥yI-©Zô6Ú]ÉÜý³GœÛHl;ÜrÜCݹJmCœ­]# ]4]ÙªWÕ½[ÝÐC°Ë̱ÈãhÝœÕP}ÊV³`\ÃsÇeÍÜäKœµÂYªÝKß$dœ£ÄϽäQ]•S±Ü­ÃOƒ [u’Ü=¼±ÜÆÝÊ…|^ÍhY•”M}ñW ò¤ô‚K%ÞßU£ÕõµÕíî_Üx9ÕXYÝîÝ­÷^õïܾýjßíàNUEÝe^ÅÖÍñÞÞJ+ûßÍÛ` U|£`qH1Åv_ ÏAÕß×Ýû[~ àÍþ`æ àõmàž N~á3—àFàY¥kÝõØáFÞÕÛánVµO\Žaž%a&à3­aű`­çM%âuëâdY&^$½Ý>Þ aÝTÆân$\å¿Í«b63`[n+]¦.b..Ú½õRæß~1`F/ãJ¤Þf=á]VãëÑã܆7\–%â&AÖø‹¾®Nsvç$ßå}“‹¶c\ìÃåê~f•¶dn)gP¥U>pfeæîqâ†(áL¤gN~fV~æ%öæ=e6ReüŸæ¾Rææ„dxfF‰c®ƒf¦„讋dނ辌ç.׆xç®yᎆd&ƒèÅ4i…BÆ•fmçn—^NŽæ†|g¦–i¦èæ˜df“èŽQéŽTe>‘h¦Ÿ9œéF•è˜×ΈöÕššé–gþ鿤^¶ç•mj+ê6u耢è]è{ê¾¢Ö]Œi~Ÿâ 5kN³ëqj>µêL|`”ñëžëF¸döëv^kŽ™ëíj¦¥f¶-hÃköæ¦Åì ûê‡M6¹iÖÆëÌh^lÞÇç¶}çäòê¶Éë.Áj&Ñjfv<é$ãìæÎí.ÆlVtm†Ïmv×ìý½œÒÎHç~ÂmÆsênÛm>¯j\JëÖ`kæâmŽál³kþÛîåìE÷Ò¢¹ °¥íÞ»mþÙnžªìÎÊånäVàh~ãmàîŽîíNðlïnþ­jÞÖ@àP5 ½ÝoVöí6ýîf,ën®(ŽËc–þnFÔoÖÿì>Êð>÷í¦3î~í’ nÐýðŸîæçnopÆËé·i6®ïEOPβ—çÏëÎép7n§pþ¶<¸¸W‡ľüðçðïðÖùñ–”ã‡ì‹€#r?$rO%r=)ò_'rxòo(rŸ& §*r¾ñfðÍñ0ÎqG.òäÀšé o ;iîÆÓ8àÏs0ñW/ów-ñÏ"j*+òŸ)s¿'óÏ=r_>sï$òÈt'sÿBr2•CôŠt_$j‡çX•Oví,ÇñÚäôw*ŠWMtØ¢ôïDr·PtóbÇHâèuQtïCt?Vô'Ru_Mu@tOUu—Eô‡œIÜï o¯4Ž'[ôÿa‘gPr\uÎZk¾_oNmO*tW(u§GóÇdó÷ktçhöÍ‹ç,vçcvßiçÏqsßFóÇpqføs¨øåÍó»+ ôtwmw¯sw¿i÷HÄöÿ{vîÕ`‡ êç÷/Bö¿%v—|ö'|x?}sß~i¿ox7?xG@øˆÁx§„÷?}÷ü×Qg€pˆÇø×FxBøÀ”÷÷…÷†ø¯9wT´qvg‘Ÿ’t‹v¯ ¯•xw†xï•Ë?‰ùoù7lyÊŸy¯Oyï“ú6’õÞÚïgø/¡y/¥z_Ÿ÷ï¤u¢xO”pV¼9êøézÏdzß‹ú`·ùß—z¯¢ú¿‰y§²v§&zë¨{Žx‡´l×uìO ”w»{7œ{w´ûÿ¶zç¼ú÷Tl—gx lô‹{ŸÇúª‰_ȯµùg&|(òË|—ÌtGÍtWÍy·—„ýÎxWÒ|ŸÔ}¤ÏWÇ|ïÍýw­xÊtGÔü¿umþí'¿tÖý—ÕüÿÔøWÑ~×úÇà}—ãýWäý7Øþ7Üü÷ |fòo_±v‡¹ý?íþ|à~ïçüñ|Ïòû/¥~wÐ?Xý·?~—ª|ÿõ|çöw'óÿ§ÜÌŸæ~£¬ˆ ‚A`ÐxD& †CaÐh>‰EbÀŽ#qˆüv%!G#1é<š5#“I$òt®.˜Æ¦¨¤ZuœÎçÓø¬öP¨zD&I‹È&²I.'§ÇgÉ|ª5V–Ö)Õª…^™cT¬–Z¥‚¹"™Úg¹=zQo”×nU[­²ÏI³Aï·¼"=?¿Ó&‰-ÚPÄVñPÜeªóq¶Ön˜›Ö}…ÍgsJ$ó;£™é-ü¾;3 Èêj5é¶K1”ÅÛ¥· š‹ºÖíò{œ®£}³àmxW }ßeªÚn¤twGEÁô4Ø~_'ÇÉö²nE‹·±×xºZÏ>ò-¡ëz}ZNÇ—¬ðw|ßL·™Åïþ|/›Ü¿7«fï?ä û¡o‹õ@ëœ@(ƒÛ ÂÉë¨Â³ê<ÿµp\æAÈS{9°;ÉÀ² Ūö9ñ{53oóí©Q Ã*qÄ/Ñãp™Fˆ$mÈ%Éqì?Iò,7Ç2Œ_*Èð ¥ Ä&HJlÃ(Dñ¦ßÈÏìË*KrDÞ±ÅÑ“K8¬’JŠÛ#ó3ùE3ÜÜà¸TÔϦ‰¼Å,BóóB8“\ýQÏÝ!4Pr ÒôLÏKS² ÒÔÜùJÊUE9WK5õ·uÂùSª”•ñ©Ö ØXtEC'¤¯UQuõdR–R[fUµ•WcÙµµf—Ø–MAOׂyRÔIå«oÚv2muDv͵kÚ–·lY÷w9×wà h+Wü›M`!à˜=íƒaÏј]ÿyâ Ù‰Û—†-‹Þì]Hꬵ,[¢˜öG’còCªœËÙA”/µV¢³‰®-‰c8,É›çu1½Ømq}4Wåúøg¹Ü‘£én•g9î€Àj6u›j¸®j éºš÷q)PË”NɔŹUM²ì[&ÃŽh¹‹–Ûº†±¬Ð[¦ï«Î:äß¡F&ÿ©k{®'«fü63¾NX~ñªpü&*ðs¶½°T<¾Û¶d|ÖÙ³óÎÛ´sÌ‚€¡n WO…q³fÄnÜwÊp%:mÝŸhÏr}‡_Öusöõ¾ñž}âx!„q\]F‰òÝ>Áä¹MÍó¨EÑÁ},¹T0Î=ÕxÕò|{ŸË[÷¯k}ýgu¥uÜ/“å~¸?—^ßßN1Çï/!ÿ»Ô¶å[KcmP°½g>© SÐuç4S ÜŸÞi/Éû°GæÄ Û‘vO½ÒWma·~.¶ °ÈRÀ ëöoo ÿ;Çéaœ4ƒ‹…ÀÀ¶OÞË"mp=±²WG`ƒÏ}ÄÎ Ä—Å ^,Lxð&ÅŽþ_Síw0•í´h1 ¡¼\ƒÑz<'öùßìR|Ñš3À(§YsÓ¬© =B É£lzp‘|˜H’øä[†Qv?Åù`X‹1Z6Hh€à£ôQO¢20'øÆá<(Œâ±I2Àd¡è‘Hqî¸÷d‰ò>2ʉ%$PœTEùæÉøŒ`Y¤5‘ÒÚSˈÓ*¥l0¦]I 0$b~Ê#Årƒ(à©§’ÒLIx5&äâ\™Ì™®è¬š.ñðM8l†gœ²Ŧ7ätá…PÒs· Ò¦k†tÉYÛIè½+ž°‘ûÒ_Lilë•È|#И³%ß*×Y]r껂åe\W¤µ”ðÖ•û\Ѻc°q5ÓØîJæ½EMkìðØ™²Ä­\†²ÍÿWVž¹ÖIûª°îÓ™µ_áýÁD6æŸÇšãoku—…3ÆëÜ[Žüb­w±åîÚ‚»h­E¢wf”Ýîçh-¯¤6†”Õâ@h™‹Rx^«Ù2³RÌq»÷ÌÃÌÛÒý^î€ø–`ã¹ïéÝY6vIJàÓ?…\ÞÆøŸÐ;Ÿ”pÎUÇ9g-ßóŒ`ÎaÄ1<Ü|‡žÄî¶oîÕäÚKsnooóOá<óî+źw3æ[ssÒ8§Lém7hbyyȲÖXèõNƒÚ¹ÿOå}czêkÈ;wWé=+RvNµÆzçMí}¿ôÛÜû×G轟ÃvŸàû‡Uñ¾ºõ™ºîùOwîž?ÈyŒ3Þüß}ëþS™yoè¹×eÕµËÄ™ë-çß«‰Q#×Lßaì]NÈF¾ÒR7q‘'»|0OßC9Öχ¾Pßãüo[ðrGhôü–Oà_¼ÝžÔñ ßâYŒ_ó~0ÊÊ“ïýï‹õý/Îäœ,VÿL0×ë\»É5/Ûü=n…ú×Gîþ/Ùô 7|ÿO€û¢ànOذOx–è\0ü¯ä¿pþ«Ÿÿ)h:ð&ŽeÈúä²ÚÏÿFk° ,ïkÏî”P0û0CÏu¯«)¦ºø°b‘o±dîEÏrèoRüð ïobùðy¨§ï:õP“М"p–}ð}ðkÐ OpýrjEó PVüÊ„ÿŽ ° P¾C©pÐÿÐY ÐS ‡¿ N nã Æ °´‡ðtÿääI/_ °†ùð¶„ ;O æe¦úöQ0Ñ ÑdPâ_öÐï°±HtPûÐÏ‘=ŧ‘Ñ!qToq,âñSŸ†;q Ðí¯1${ðø3Ðüt¯YÏÓoÉ 4ü1Eªqk0¸Ö™1}±C /û @y‹HôЃщ1ÃEù _ï¦3k…±Íq·O´¥ð-ñ©hJÐjÄûqÏ1ôú±¥PÛ0E±Ú¬qÇqáIE °=îÍ1»ðwåyd¿"Qù 2! r q;!2 "/QQ¹ "ÕÑðàR $2U"‘ý!r- øR9Ò1¦a"g»&Ñ/²ÅÒS'1Ÿ&É%Ò?%…&’E&°9)’n2’r‘)2w‡r•)²ƒ!ñG#r—+ò„²‘,ÒÎù’2þ2{*±¿Ò/%r½+™.R»)òß(²Å#±¡­èa²*¥Ò-²Ç-’³.ã+rI1 -RÁ'’õ/rG/­/òó*ñ½0‘‡q‚1÷/â0A0G3±zfSs"}sAóQ2b› ÷5ÒÜç3*–p4²4!rO"Òdlñ7 Ú/Ñ6ޱ9(ä7‡¼Ž0ôu-©4¯7.GмtÓ_2H}:“«.ó j3leÓ’÷óC%ó'êÑhe³„³>f3Èv‘cÓß=°ÿÓœŽsXýsá%óÓ Ã?Œ6г>óE31Þ³}“åóé31<êç-Y=‘o,¤½@#KBѪ\Ñ'Ñ…?~ýÑ!C/±PnetK&T7=Hå;sG5( 6ã¡E“ÿC£'ÑØ¡tj÷¯dþt&Ÿ§H‡HmôAT‰-3­;4”¨460ÁFg;—IO]GÍGLµA¢n+?Ï€”T=yA´ÇCÑ%I 8ùÕM3ˆ\©›L‹¥LÔ¼”ÿ„á9S•;õÔ¾ëqgMtqL4ÎŽ”™ µ#?()@ÓT( U5CUszˆˆ‹QçoT‘ƒAÓB· 4 6rm“‹JrgQ°/ÿæžÆ ÚéË>Íð]Kñ>ç£>ï°ÞóÚuÛqoy5Ÿ­Ùg“ß,¿\ƒíx‡óTÙÖÝç |¿ðÙëâ?7PÝóðó¡}±õogžŸ;=¿_XX%ôÿk·¿ Wu K/_SiEýΟVšîÝ ñÞ×÷Ý °T}ä”Åœ_£ú_§úŸ«ú߯û³û_·û‹#Ò›1û¿Ãü_ÇüŸËûÞÞKôOŸ—Mÿ‰;ù÷ŸÝTï§YýøåN?éþ)Z‰\3¢@ÀX4 …BáØd Aâ8t^1Fã‘Øô~A!‘E"±)$FG)•Jå’Ùt¾‹Afs ´Þo3™N'“Ùôþ€ɦ‘ †‡BŽ£³Z¢£La5 ^±Y«Ôè’zÕ~Áa›W+¶+4ºd³Úí–Ù=:•^·Lj×u29vOnÕ+íþçŸ_pTXV ‰˜a0·¼>+!Ãã29XÎSŽªãñ9¨¥.›Ìa2“¬^Z¿˜žj²ºÍDçS¯Ñlµ»JÞÇmœ¨ëªZ ÎÏ4ÏÃtÒýææUªãïù>lÿ•°çÙzvÎ_W{ëÆ»x--¥¼Fû°½ç—/ذú8<ÿg«“áéûþ­kéæõwòܸà¢j‚tˆÀŒóЧ¤°KÎꬊä²NÀp[A®Ä”B ´1¢P¬ «°Ì4û¬ÏÊÅ3Pó<ªBpN,DŠù­/å%KÏԜޒMÉ*SP 2ÓÔ W83stÇ:=tÊéSÎ4ý9JUóí+BJuTñU×3Å0Ñö%}XQ-o4*pýQ9OJ¬;hDÕD jM´ÔÄ÷Cv’énS¶¼EÔ4•—;VUŠÁt¿úßeY5ÕÉlÉVÝnÒ*MÏ?_¶¼Fí7Ï%kQÞsüSM·="÷Wu¦ …âóu%À–µI†Õ·5oqXT¾+…_¥×v[ØÖCxâø6#~MøC÷‚UØõå(äOj1c`7Öi5âtâÓjѵ„‰Ÿe– M*Þ]Úü>¹>— ã”Vehùcm¦da?æu¶­@b—Fi|רýq¨L:Ž„‹ç9¾e¢ç¹F]¸5ÚËw¤U;yê”>çXl¸¶§´n'Ç8>¹­+º„h6eF«‡/~æÍÍ7®º›sÁëodeWµÉ=ò0R FXzÂëÈN¿xÊöå›ÙUük µAýÏ TÚ¶E ÷ü{oÝù+GaÛu:Ž÷áñ6ß^¡öÇ…¾i}ý!ѹ‡å|?Çò|¿7ÏôqØEÆ}?wßø~?—çú~r7½úÿ?×÷þ¿óÿ€ 1œ:H`4&@²ÚýØ ‚F A8)`„}Z A¸9`ôlª:BI a4'…¤•Á‡¹ ¡t/†ÆAXX±áœ7‡æC·É YÔ-%‚D8‰b3#8ÆbÂ6¨~TôGŠF)E7«›Y"‡Í½×©bô_Œv%ˆ³—³u}g¢T„ë¼aŽÆ9G3DW=K+8“gŠëZ¹ mÑ™`3ƞǓThvñÒEH¹Õúº¯i7GuÈlm’ Ý7¶¼Áb|”†QBæŠÔ˜£V“‘\…IƒôÃÄ©p¬ù}Ê9i-e´”²ÁϲâÔH¥cb‰®y”¶™=-æ4Ç™2\Ì9b¼šd¿oÓMÌÉvØfL×›eúL¶W&¦j¢%SBK9YÉ)äë›S¦uN¶I#Þ• l–N)Tõ#LÌžÒæ5ÎÉù?gñýMÙ6$ç§ÙžŠÚкChm ’´:‰Q:)5è„¢´fQ¸ãEè夆/QêEIi5'†ô’”RºYK`í*¥ÔÆ™S8 L)¥7§å÷ÓjuOiõ?]tò T:‰QM•B¨Õ&¥T²Î@@ endstream endobj 729 0 obj << /Length 730 0 R >> stream ¸ÿ€€€ÿÌ™ÿÿÿÿÿÿ endstream endobj 622 0 obj << /Type /ObjStm /N 100 /First 905 /Length 2450 /Filter /FlateDecode >> stream xÚÍZ]o»}ׯàcò.‡3œ!/Œ $1r ‚$Ú~ðµ•ĸŽÈr“þûžY­­Ø±o6–·ªa”–ä’óqfÈR)¤Pj$Š’Cn„R‚°¡,}½T Æþ»…je ”²?lÈ0BK˜lVÐC¡OØJèÔ8ôj¨%ôj%äT2*2aÐÒ,dÎ^©!‹z¥…ìÝ5¥­ðL…\ÑCSœ¸¡Â Ø5I`Åè,À£Ikò6ØÄ+5p­^iARF…8 ΔRŒZ *˜´œymŠw/00F.X<2<ªóOh¨ŠÙf SÅܸä™*‡R’?Šøðª¾jÀ«ª¾^1@!ïUƒfõÆx_ÿvŸ º¡âò¹£tȆzÅlñJ­ŽÏ0JÅRãÕÚ°wŠ}Ò†íUËÁ|³Ôw‘zääÛé•L´*˜f™):˜PaY­±Î¡&4ÄkBÍý/5TöeÇÉý{QÁ ˜$ãBj)Þ§„Šmšf\Íabm8! -™WJhÙñaoܱÐJö‰Ôа¨´Ð 2æ;ÐZT g)™bhua$Œ]¼¢>]C}Gýïè"ËÍ{Bf“pÅb$¯ùL±E‰4üæíTPË>Ö`fÙ‡üæO`£/`ËóÅÅòh~ÞçÏúŸþ6?>9|¶øúu)­€h¨B°'˜ò«Ã%†p2µnÞ¯ì9^î¹9‡ä©9/h;P®VŸéº/_¾Ä£Å',m\,?<¾..¾ ؘd÷>ö½œàKöœeÝJjL¾“Ë[J®ÑzŽv]R¤<”2”e(u(m(ëP®'ê©Ù»¥ïÇûŽývŽcˆ¨2I¨-zR¾œ¨>Ü®ÿ$(•Hžm. tTB³èÉRLÁÃîP5'Çë<&”æ.ÞsËÙÀRig° ŒkŸñ1Ž–áV¥DQÏv‚Lç²;\kÉ*ÜÀšë YEZ4Þ(®ØÄ”¯PI‚}#Þ ×ru¸%*§—ºY+©ðüI¶Duzrvñõɇϧ®»?:*5úÉ›§82(6yêì@TûôÂŽ¶Òå\(°añ’—N+×iN»±¦‘ŠÇÒÏXa&µê„ØÛ¡ö£Ç–XëiÆCÃrÿn<Ò¿ßlÜÜLaÑ@FFµeñœã¨¶G"4²-œM‚5Ó6ÃûÓØ¶ s~¢·Ïù†ÚÜd=˜ñv¬§Úw¬§–Ÿa=ÚòMÖcÛ±µÔÕá÷:° :° *[±˜öÃeDšVýдÄ×mÅuqw®šAˆ_·ÄCÜЯ$˜²]ÛyI ªWèhµm‹nkߨk–œfAÔ¡H”Íïk >Úñ’ D•  Z¬€˜lmÞÕ‚Að#¹%I u+T!üTr,~!â¨Sqk){hTudòáfãK¯n«E¿¥­Âág„…cÚ¼J-:®­0H þ´§¸îñÞË/·¤mü†¥rÓoøu–íüFüA¢â6DÅmˆŠÛ·!*nëéùõœuI[ùN0…ÈbÃ;Ù÷DØ'ÛÎ4)CƒÀ9údM¡2ÜZõ{h •ê’vñA!üâUðù- J²kL" —”@ŸNµP?ò£êG'Œ¦ôûJÍ-¤!’«k÷Lùý< ,Š_¬Ì̱zúY9'+âWþW(2l°¦~`ÒÌïh°ŸãÀ{…M–þõIÂ"Š{tpŸæì- ?IõÿFRríÓ´Ä{#¸lþ½õ¾"ß~R°Fqôéx0Ê7òô~!rt°v­ñ¥û¸u£qmÉOÁò¨¶‚ÀÎoêŽj á 23hP-ÞZ‡!u ]·9°øÞÑÞážïëu©}çuɶóº~“´÷žÄC)CYnxÓ“Õé<콟¿¦¢ø4|à|9ùfô|9?t Ù?\Íãý_r*àó™4Ñc`\ßù Ëq|q4_º†ŸÎ¡UÝÅù²;ÿÜÝñâ¨;ù„µÀçäè'ú‚þ ªøqõé´;9;ž^}ìXßu/ý‡ùq·?ÿ÷ÉÑüõoÏà4ýL¥_¼ƒ™Rš™Ö{¹c®0Mð1'ÁteOH9ñÆB³éî·À”ú-qhGQ?“F´ ¢$ÚPwGÈïjo³¶,Cù¨@‰ÉvÍúSXºd žä'jøÕîÑÑɵƃ +€h·™Ü[ÚJƒ¶—oriÿ¾r–• endstream endobj 739 0 obj << /Length 3798 /Filter /FlateDecode >> stream xÚÕ[ݓ۶¿¿B} :øà—g:Sç³—Nâ$¾çþ,¡)oªý>)ÓÆ]áoA½3K=}ÏiòÎPLêŒ `“5’®’ôç®i“u‘¹#MàBº±>îQHE®´ûYNõ&ÐÅ|Z•o=Oî:Z‚¹½|däúŠùÜÞávWR9 lhcåø‘4M·Ï¸¥½KZ*=T$lR”ž¶6wïÀ@›fÛÅÕ€Æy*7K.ä%Ì·èë[RäIC’yC1ƒVÛ–,¸Æ=®´ [SéÌÝ’‘üC_e„j¬ps«Jœdš9u`ŠKí9Æ©ø41l£‘±dÔ$£Àù¥¬pœ{KQu4>þÃ>5™Ú$/"IÖUÇõykF œÜÍ\.ÞóX0DnÇ'?ŒN©NmOþmzYqŨöçn ÷Àâ·-앆Z@¾¤Íì´*"ÉK˜ùœvÀëí236Í 7ׯ©°N®JÒ´á#6~ÿhC¡*¸©¬ÊÕ¡èv+üI˜:/;\Önf÷ç†~lí])88CÞ7®¸dç(7–¡Ý9*»ªBycé”fUï>mÌ‘+Ǹf¨ØWMK„ÍCÓf{¦ûöÓ*J ù‡7ŸP ê.墙6µ“ÊM/µ%Kº¶ÚÃ6 îÃÀwÀ_i¥­´Òù÷øÒ¬ ÷yÁ%°?:ÓŠ-kÑ›W=à³ï&烖bàFyq˜5”Š*I'ök]ꈿÂßÉ^wV\1å M¿¨_þëú4}¶¸®~›öù@2¹"_ÿiÔiŽvx°kš©«ÂÚL¡˜£ÿ€@°ž,¾7î!CíªPƒopý &Ýÿùܽ"µ†þó™ò˜ÿ…¦|±°O1eѼ@’:7õýÌx†þ,)ˆ“ÝLs]Uíy–™W&Ș±¶8ç/$”<SzB®<½’«—Z,Ÿß2Ï0?< o~6óó¿Ðü.ö)æ'BWxêj~XÐÑG7¿wM·NŸl„žt#?|>#ó¿Ð/ö)Fè®ÐþÚãÿŠ'¡Žc7 ¢K‚ÖÉïi$U‡0–ä£í‡¦K/ðLðŽ™"GŒò ûÉŠ ¡CWõôTØÕUw˜‹ûE(]%Elö+6•MEÆ®™.iˆosGÙ{IŸwYa6ʦP®ª´Ò'=2Á$P(3sa/tBy}åÍpJ8M\FªÛgû5¦çX†ÔÞ@•20>Â*sÎŽHãD ´TŽ’£SH ’œ€äFÙ1³CZÓ§I˜ýˆq¥nŸ:†®Žý>s68L3 {-â÷6c¼?LbŒ…G© ö` ;!p€…ªd¶ UcèlcgŽýô©šî€7“B½ÚŒØÒZj'ËL\¶âô“2« ¿ûªž Ar”M[¡@HdÃ)0úaÄ‹Í]bp|CF{k“=—HkPa\@{óÕ¿õ|/sw.: Ðy•ö(”p2DÓ™ ,™ðXˆ2WÿíK`"^ð$jâTʃv<L´ Ä"tª–ú “‘ÙÖ,DÈvãܴTi–yME5‡ªiòu‘ÑW˵iÞ Ž; œÏl’ tîi{‘ÁH®ÂS@†Ð¡C`æYežÂ0B¼–l„¬ó}•vˆ7¯T œ›²Ñàt É&i `„l<ˆØ£™Õ˜í„S, ZöI‰îìê*æJHTܼyEŽMD«•k ½µÁÛu€øb®Ödn!Ð?Xûk ä)×È )Æ9ÍD:÷°ë©DøU0ÁѰCÕÕ¬%i¡`æcü ~œ2 ªz BYÑ/wœð˜1,R1acƳ®÷ã«ñ΃n„ºÂ€ËþI‹ ¯?ËÜ´Ïڛﳽa9ÇKw!>¹^,Ô`xµ½JÀŠ#JFèÛ{dÛÏÝìV°kSIhÁD`n´’¤¼ÄE1Ìk¤òÛe‡ ^ ¯*Šà×ÓÝ¢yÀ/]ø=Ú#ºß#½5Q“µÜ»_%ñ±ô|7ŠäxUÞ•Ýþ]‘í’Íû}^Vu3·NBÁr†} Ó/ vHj8BZcsÉù1t€ÿÚ6š›~8_£/¥ÀÖü‰Â(.ÓuVv%å`ÔÜIë%¡ùè%}yÊf!vuåYF«"1o´rà$Áõßl©²kŽ7è£÷rÏèõP/ñhYg'îÛ}Xê43ÆI¼U¦*Ф$[TŒÑ}Ry,!£“ãSvÍ!̼HæÊ%ql-ëdMo2앚ÍD&|ÁÂÚR›g &zG&VT„m‰A6“Qn†ɰ–Ç<ž9†tkI‡ÐRWáÃá1ÃÃoí0|ο ž£¢qÀyFõÚ\NÚÄ®PPý%-ÔmøŽjm ¬9PÖ(«ã‘O]&a³†Ã.7šz–€UNç·C‘€ÆSjb4BùÂùÇ<³cÞ-AX²"¨^~¹ð4ÔPÖŠ¥|K-–Ñø±æ)01Éíl ù|…é>†×B;¯KªC`#Mé}?¸ ‡z± }¾»k©ŠÒ.¬\3ó2×&Iý@Õô@Á·—ÌQÿÆLOB{æW²hŒŒDüê)­Åˆ‘¼}GÙ!›;”ßpFÇÏÌ8é²1&Xs™`ÎVÊZ釚º+˹Ìp¸y¥Tàl¦A¡höš{„ðó&Ïݤ™u#àÒz/b±Ò)g|%!Äàœkþí8Ù„'Ož@^Ï9¨ 1¡á®¯ƒ¨O9e àO§i€ÞöÇ9ÁÎéÕwÉ‘+²sßÀ|}qÂㇶ™Ó³…+Ã^mÀVÂU½É.³ïYÌdP#ç!RDnÏ…H/„Õz¾ ˆ ÿˢ˅}B‚`+äZÓ µÍwýšýôd}Ø<ºìÀûWº^ð>ðÞAÞ´ç u®Yzäã܈H›|wð^‘2ù~wÃ!Bok}m¡ß:o(¼çˆn°ÈÞ"P8—´@.èEs„¼¹íB~Ù§Aœ­ñ«^øí(ðùdòéínÓ¥ú ïŸDáý ?œl×dã¡°D*èSTc8d(3ÍC*oiÍágKG¾ëboÒÁ[yBë]¡j78©ÉœñHlždVT gܪÍ÷5õ`DC­è¼g× LCÊÞ{Ö¦¥úÒõÃþpDqgo‹\/ì½¶šÕ‹‡Ñ£ƒ-r¾®jžÜHò€/8LcƘ퇚UšÔ4¯‰vŸ%öœ§KlˆìCN¼â+!…q{8^4)ÛW/„fƒö»¶ªsŒHðkg`9SWWݯ¤½bƒZÈßÉ„ñÄâð{ cc8ùˆˆO<âöúG³µãç„Jæ*¾11“ü¦lÚºÛgæ;2yÁ°pn—±tV_ß¼^‰àó•ð, ºÀk•™¸í3z8õíRùø®µ)’ãÇÏne$Åê‹UôÙÍ©{-ÂǾ¹aØÏ¾³ç€a6|Î bЃVzŸ©¼øØwÓÕ5ÌfÞ@µˆÖ/ówI»Ï«YC…Söˆm=²!‡þ›ŽÀ×ʾJF²‚Z!Ëùö›o˜$šaJ›¦ &ÇžOsèjÑgfÒ-ý¢ û•àÝc=±ßÊL-Çh‡l“oÕJN<,6`缩&Þæß59„˜Ì\Î|$-Ði>-’VïÒœy†Æà”tø|‘]$\?Šž-°³¿,®»XÔ'„uM„ÁÿuT7ÜÙOxÆF®Ç¿cLöhÍ50óôó¿Ôþ ftv† endstream endobj 763 0 obj << /Length 2487 /Filter /FlateDecode >> stream xÚÍksÛ¸ñ»¿5#ÑH€dfò!wiR_§wMì>f|™X¤$6©ðŸÿ}w± %Ò”­ØuÚÉDÀžw±Xš9k‡9ïÏ~¼:;Ç™rb/VB9W+G*OžÆð ¹s•8×îOå6M²Ù§«Ÿ:t"€V>B‘ð"2¨f Fî9=¸â¸çìOWg_Î8À0‡ïñÃF_:ËíÙõ'æ$ðîg‡yA9·rëHÎ<á+çÎåÙ‡3f™f3/¹ÄÒ»—nY;ÏÜf“Ò`W¥K©X[¡ø!–PzŒ‰N¦¥þ÷eYü«Ý†Yx\…¶ºH,Å’žu»\¦i2‡Y>,áð`õdÄ;DEö»n¶Y9E$Ä ùyÆ™›VEšµm™´¹uÛÖ ŒDìÞØ•¼ÔIjùC™ªºñf | ”µËÛõ¢Xìr}‡8 >Iå,8¨WJ"}Sê*©aGì»eAO ÌÐxÏZ Â"¶FˆWïvU¹«2ݤKªïëq‚H–P½)Û<¡ñ:mhЋ…¨Û¦Üê&[ê<¿£×·›Ô²tW¶UOp×6©eµ‘“,›4A)æ^í 7°FÐYØÜU3¹åM:e·T¨¢ Wf4òçÖN¾ÛÖ©}E^¸ÜZ‰|ø¼-ðA C7:7à.ªÞ—ÒEZ싈{’ûWy §˜‘F²»ÍòÜ2’Šº[²‘RµU•Mn}(Õr5ò¡ÎrBv®[{½)B/öýQ,,$ ‹Ü·ºÑ´t5ó¥[é¢ÎÁô茸h]/Ñò´X¤Hw£jqåsQ΄toi¶ÙO¢Ž’Eõà YÓ¿Ûí.­jÓ•ëRE[‘ÐÍ )«$íØ/i©óìÒe¶º[– ¸e3e¯‘‡ž–¡DÐg¨®ô6¿¯Ñ­Cݺ6öŠÞÑ|Eé ê,‘p’ȸ¶ÎP__Ñ>&Ê`)+öûð  Z;4øøþ̹6C¯ ݤ:@V™˜ìs¾ÝRƒbŒq¢oʶÐçUü;½'ˆÄSjòc8qúü;dÍîY'Ž/f|hL æØ[õà(Éêe[›(Æé&­,dóÔôx{ ñÅj%™‡¹Hî±AìTw44¦ÀÁ1Ey;EÌÈS¾:"&QHóÜòhb†¨êæýC´±ôâ}9Å+}OI~ß+‰Ê¡OY½!œÌ¾Õ»¢mä—9–×ú—ç¿ÒàFש9…÷âã‡9-¾ýëpûª_v²4,·†§N’Ìúà!ºÓ¬¦q¹½L²r¸J1#f:?¯¡ÉÓEZÐÁ%äžN[d»2×Õù =§Ž&›~^íu É2ÇÄÓçÛÙB H’–¬j_NÈ Ì̯˜BΕøqþ/à8 ÜŸ ú_Íï/ðËÝwæñÞ,ýÝü~4¿of€ùÊ /ú]wù¡´“¿Ynq|1B-ÜËi) d_¹½¦Ž÷áœ= <ô›rœb$cî5ûDÒ‚Æp°+«†FèJ4g¨Òz”ªÐXÀ›Pâ#B?Lã‘àC<Æ…qÀŸ†Î?‚NÛîeR¬ÓæÔ`å!‡8^.Z9\ï98ûKEëÿó¢õùÌ~C´rå{AþÏ¢U­ºù†»Ü3 ®ŽÃ§÷¡1‡ØÃÒgÕ—©»àkÚï÷hø©± áÌ ¿OˆûÊ|t3¶ÿ¥ìºŒö»éA°ë¼.»£¿»+@‚Ÿ4¨B(&¿yÕLý]U’ÔOø³ªÿø òW endstream endobj 776 0 obj << /Length 2648 /Filter /FlateDecode >> stream xÚí][sÛ¸~÷¯à[噂;ÀÎìCn›Í6éÅqÚΤ-Ѷf%ÒKQvÒé/@P¶@[6 c¬6y!Mƒ>žï8Ï>ìým÷¤±O^g¦¹Ç^”slj"Ú±Xß–}ËîMÙ¶³êÔQU'ûêfQ´³ºr‹ãzÕö§î0)Ûlº6Ŧáp6¦1)\·êý1£dTÕûTŒ.ÝíYÑÚ3:úZ¯Ü¥³Â"^ì1*{žÎT¿fë³?Yζíµ›OÓó_»‡é~¨×½•®³³¢™^î<*šòs‰å£¶ù:hl®®ìÂc„öÇ‚òÑËb>÷ú'£I½XÕÚjdÓj,WHåùÚ&òÑqmu¢ˆQ}›µßQJÖ·õuy6›œÙÖÙ˜kŒ0ÍÆÄ8‚è%9ojkæ‹Ù´\Z=™•}Srv-9•…Á2g|´\OKËäb6)Ý/×í»G´'cc¦òÑÏeSþa_ˆÑÒÝ^4=f}2¸Íôv¾îÐPüöã‡ãWÿÙ³˜.ŠÎÜé¿°Àî±Ý-¯øõÆV¾‹vöÎϦåÅ3gq|›AŠ]ÙØôDŒ©0n´ìîДËÕ¼uçÝš£{sr‡ö†ÒRÝ­}2¾¸_ξ¢‡œ;š§³ioC óÌLæHíÄc¯ "%<£(×yÖ”ÙÉæLã¡Ý~õfÆ5gë0±­¡ønnà¯gÉ6±$Êiþd;Àæ4s'ëi™ô«ߘ•¥–³~M©/ÊÆÎ›“ÈM03áHŒ»q:œnþ*¸ucÍÓéáãõ“ ÑC*Ä…e.VÔéaäXÎÜ´q¿“zZÞÔ£ûî¯ß¼sôc¬øÄïâ~ý$FšŠtúùø@ýÀdcô“œ~Óff$ “¯*å–á´í–ÕòxºúâÖ Hýxnfy™N?¨˜lŒ~ÆBDôaª[ÓŸ |Ìð612ù|| |`²1òqŠHÞÇ–Õjq:üLŒÔ®‹;m̹Ü2×òÐ%*“étúø@ ÁdcBF:ª†WöfXݺo˜ˆÒRNflhl0Ù˜C U¥œ±Û¯çÛBâ6µÙLU1¯OCÃG›d :³ùL¨¤Ø®É$õñ’‚ÉÆHŠsĈv’žÌ‹Óåa!Á„ä&6Œ\™DîÂ×Tª ðaªÀɆ¨BˆÝB£¦7˜Av;Q¯~:zùþÕÑÁëç¯ÂÆѤL¦uX»bùµšœ5uU¯–»ŽÛ;2’n›aëCÚ…ÐÉ|ÈÇú˜l”i3į=ÈzÏóï^GxÐíëév Cî8°)‹i¬?(’'óè`²Qþ $âœ^{Ä›ƒ¿|üóãÎ(My2ìÿÇíýŸ6õªŠöé¢üdáã=L6Ê#¤@\³kx÷áùû¿¾K7C¬–7R¡î:£ãí}Ï—e±8Ÿ—K“ݬOº0 —˜$s;èv`²!§ Êӥݓ³¢ªÊù¶H–ÈÀ¬Ap—î$“ÐÇJ&#!gH¬_”.Š/«BÑa-/Šùjkr)•R”ˆP©Kp’‰èãE“‘QdrM'bST§·mS™¸t%™‘}| ‘ÁdCŒ¬4¢Ä,±” Éû-“à×evÛ6}}Ĩ¸{»øïÛØå¦Ï¡òc›i$(=hÌè2ÀRë«7ãëwè» /žÛÈ=ÝöÕfc8ÙˆáÅó)Úï“,[[§÷^¥ª/‡wüg{(:«ÚÈ0kb'“ÎÇJ&#Öh½—¼4™åÑqy:«"åkg‹aôx¿$ÊÅŸÉ$ññ’€ÉÆH¢Ò„¬ç¬ê¢§9¤‹%“Éáãå“‘ÃtªÝ"åÖ5d{öºŠŸ³„ “)âã“QD¤×u©Ë¶>U±Üì$wg2ñ|| x`²çåLlȶo,µÍjÒ®šÀ]®“Ù|^B_ÎÚ³°–çM}\MÓ£Ó²*›ÙäÈ.~ÓÝv»úËë­ø”ÀÀ•¹ 8™3úø@g“™IC¹’¸n¾¦½_âçdÊøø@eÀdc”¡¶*ùáÓõÃÝ¿P™p$'SɃŠ¥¢‘Ére4"a¡‡-›Ém6ÿñn­Þ¾9:|ûþõÁ®óœýÂΩtàÄ‚“Q „ó>A?<+#ÞäØÏaÂ^m î,ðåд<™U¡këyèû‹å÷§÷;–v)@2ÇòñŽ&áX,Ljô‘ø¢,ª`o‰Ú„½üÜõ*;æ-e o±á?S.CIæ0>>ÐaÀdcFåˆè~s£˜‰[Úÿæuw/<¡,Å—Ùbµø6&Ï›äº6pË=?ÿ;ÖÏ¥Kæ’ù¹ôs0Ùˆø•Is¤ô!7ñ"s &\n“L¨ ˜lŒ6B!*Ùïè ’ùûõá.ÃI¦ÔL6F.Ãbçý½­ÚÐPi˜Kl’Iã㥓øÐƒ1Œ<z଺Ü$™±}| ±Ád#¶J™ýCúþ=èCèÑN¿û—ŒtiA2I=x ¢Pª1‚†8~æ1¡"þ3š»À;•&|˜(p²1¸ SÄåà3¼=|ým}çq˰}èzZª]X›Ì‹|| ÉÆxÍ äÚ‰¬}c_z\6³¶-cwǨrát2Ÿðñ>&å#±éÿ{Piøtëÿè`²•99}´ªûÐOÝ©pq~2}| ‚`²1 $cRto4T?îR‡dúùø@ýÀdcôã IÅ¢Þž2Î'3²42˜lÄŽ¡‰YocKí)JUhobÊ._H¦»ÔL6fpQ”PRnOIO'3²´1”jÌÐ"©\?ÝZ{Š]Ì›L8¨˜lŒt˜!ÍòG(¶'Ú…©4àÃ4“ЄØ? «ßZ{¢\™L ¨˜lŒš˜NÉï^kO¤ “)âã“QDaû‡bŸr­=.ØL&žL6"##ŒÙ÷Zûë×’>ÐÁdc&ž#Ìù£•ÚæâædÊøø@eÀdc”aa-žF©=¡.FN&“” L6¢r’P…•O¦Úž.rN&”Ô J5F&"‘ú{©ýn¥ö» ™[ùø@¿“q,,Åù÷ZûÇä.AIå0><Ì_ÀT#Ü%爊ïeöÿeöÚ¥q©\܇‡¹8˜jDઢ9IWbß_¼íÿÝâæÉ\Í@ì»õ_óÉŒà endstream endobj 731 0 obj << /Type /ObjStm /N 100 /First 881 /Length 1650 /Filter /FlateDecode >> stream xÚÅ™]o\5†ï÷Wø²\àc{fü"¤*TQ5E¢^”t…­ÒôƒÏ3»Û6¥ 2M¥\DÇgÏë9ãyíwfNj )´"A5ÔzçFC–Zn!7 MziÜ× cp_BµÌUBOÂUÃ0[5±s(5äbXÒ²æêàj˜ÒÌÀmðÀ”¹Ztæp“«`?rõ×*æZ˜k‡‡zª °× ¿ùË}( m†ÁÑ›„’ `SÕýn¡äÌ#l•"eÕp©HóY5Ë` Lmn¹‡Ò þT¦æ³,H"&­VÕµ 9á*ÖÅ`0²j˜âAk™AŒ ‘â`~÷‡EŠúºŒY6üÌò´†å>pìPŸÍF'ÈmM…Ù=1h„ãšÝ/V­Ùýê°Yܯ® ܯn †ƒápK&1Wq¿`\µ`¹cYݯeË€–ÍiÃ75§ Z7b®ÕyXnÎÞª/© ,wåÀr¯ƒ™:Ø=ayÀYOÙ·’2(Á¼ùF²Ä zÒ`Þ: °Ü\ƒ•ìàÆÀ܃I*«ž6Jg“c‹ цC °Ì|X¶ê`,×ä`,Ws0–ëp0–Ù¶+_€yüzÁr/¼ìT<,XLíœpÖ915%upe0ÜBÍœ 7Qs«££ÕòU8agsðî‡åÇŸ~æÝ±zh[‹çΟŸ=\}þùbµEþl)‹ÍÙÍÃ"¼¾½³9¿ GGa¹“ýôíæÜñ£Þ_‹ëF~ó¤ÙßxÇb`of¹ÂÈîŽW-?~ÿËïëÓÝ«îþÉžbw¼~vïbsz¼¾ 'a¹÷Õ°ò¶G˜@·Ê~ûü|ƒÅ“­ºK.‚»«ì¯º¿ÚþºÃýÃíÕòÅæâñúbûêôpùf¹»|É öÐ%'ˆb~<¡®³‹ó(Ñ\=Ä"'Üñó_.±¹|ûäüåöÑÑö ËíÓË'›óåxùáþ]ÿ»õÛååÓÏ–ååË—ñtó'«Ž›‹_?Á©óKªÆÚØîZcâ#J±°*ÛgŒ~c~¡¾Ñ’‹’ÆÆAÏ]¢Dmk¾A¿Lâp}#+üjøéB" vs<¶QšÜslÅSŠpúu»ÍªÈ¹UšÄŒÆf%<¨*y6ú‘Ë–c)‘FW?¹¢~Ÿæ Zë1¡ïI¥¼/•NÓhsØÊùå÷)lQI©3Xƒ@í2‡Õ=Îaú3Â0k¶^Jž)ln1§¹¥IáøOÒ&’\ª¦°¥¤Ø•9l‰¹Îa‡’¼mJ>ýß ù¬ûn>~›t¹óB_ûµÒl•÷ÒlÍ×L³¶O£¶O·Öö×þiu¯ a+‡å&ooÞf3v9åuõl!^,STU?ÙJöhànoÃ|–¯76Žnm^ž­_¬Ï_nf¨åjf õpJþ53\¿–OcÃ&±TT6‰E>åÄÄŽèÊ ¶ µÞbÎañ˜Ã’Ê9_u«QS½žÐý£¡ø5kõ=5kz]5Û9èýýµšz>m»¦@éB½zKyרØÍ)†ÔhlË×~m‹KrÎG÷Ë·N³ÿQµ]ï÷¹)ŽCeÅ!,ÔJ™ÃV¶Ã8T*ÄÒ-õ9k§Ó:T ÂÒí¤Væ°tJ9O®.&ÛäÚHµïV\[ë–R¬´6‡¥‚–ܧ°F+6DžѽÍEÁÈšªsLXµÃ5ü!¬)5ü¤*Ñ¿wMa…¤Ÿæ˜ ‡ @˜cÂèskŸcBé§¼Âö'7ƒUóÏ‚SØZc·9ÚÔ¨ÌǪ‡ÌQ¡"q´9*´P¸æÉ8ä“MR‘È,cŽ ¨ý\¤ jÉ9*¤vZþ9*„Ú´Ô¹$ê9cŽ !‰ÎQ!Å«ù9*$ ‰rŽ I%úgùl9Ú\xK§é˜ÅÒ&ùÿ'¦°Öý Ò–zÆ?&Na¥nëþ)l±èã6ÓOŒ9*Jzñ9*üKÚ¤îy7Ê™Òj\ý€ò7òRÖ endstream endobj 848 0 obj << /Length 2682 /Filter /FlateDecode >> stream xÚå\mœFþ¾¿EŠÂH»½Ý Ý€ï“s¶sÎÝ)нºèäX+˜Yd&¼xíûõ©~avšf!½\tº+ _Š¢žªêêf±³u°óÃÅ÷7×oæN„"N¹s³qG<òœ ‚c@œ›ÔùàþµÚei¾úxó£8!Œæží‡…$ar`¸º¢Aè^«áD̹x}sñÛ1Ø!òa¢Çœdwñá#vRèûÑÁÈBç^ŽÜ9Œ`D=ç…óþâç ¬•Æ(bâT~8–ì¡ûNà‡ˆ3*$‹vŠ¢0rˆ9uælF%=)_knÊﵜr‡cYE4ze¥Àz먓w=¦D£ä ”‚QB€ù ©&‰ËÛ¬L%@½0h¡†RWc7©º²Ì‘¾j4t4q×èxXÑ_S¾%:ÖÊÎAÇ‡É¡Ž¸¦­öÏ å(P!¹ 4¦|Kh¬•ÍÁ©0”jhºuš}Γ줭_L56a(ørÆ6å[ÛZÙ)Ææò™Ðaˆ·t [Ugdn0Di¨¢ìv묞†Bµ™ÿ]\–Y1¶ ЩÎU™½€¦|K­•!÷å‘‚p™†K·ñ´‘Ÿã¢+榖Nœ©J|1ôLù–èY+;=°§wu\n³f$?mcOà‹ÙØ”oickeglѹO‘Ç´‘㢘ž¹ÆÒÖ|~Sÿ¯á¼K6sÂÇ©¨SUz/†º)ßukeçD–GéÝRívñ(mö´•‰ª¤³²)ßÒÊÖÊΉ- •¥§·ýeÕN‹­¦Û﫺Íf—öXÕ¯‹á`Ê·ÄÁZÙ\Çò×åMuz©Úp)cäÛÛ^Ù©…E!b„=Éu:…ìÚßï,X)ªòo1”Lù–(Y+;¥0@ŒÖ¬Åd6+ÅYÖ-Š!Þ[Uç,à¢ç€øçO¯^“ìÃd:!­¦ÛUéÉ499þ¸*.ƒÚ”o‰µµ²³Àæ A¡ÿÈ61¦jÏŜ”oéÖÊÎIÊÌGüÏã›Â©Qí«²v1Mù–Z+;@,DÉŸB712õ¥8£ª^ ?S¾%~ÖÊÎÁÏ£(àô9'FT¼˜‘Mù–F¶VvÆ®˜Q‚Bì=+ãtI¦rB «Âw1\Lù–¸X+;ÇùApèûÏ ù‘*e—²ò@¾•í•áý~¡0dÿ%NÈ<ÄñÑ•ƒ¾~ĉÏfÇ?¯ô Õ‹ÞRÞÜåÍêŠâÈ]WqªÓ»X·mª®Vg²„]QæŠ2¶YA{¸¯ŽåÀ¸ÎôŒl×±0\†n^¶ÕIQ²­½‹[u–ÅÉ]¯ÅŠÂRº"ÌÕ"cuHó¦ÍËDOØwõ¾j²¿À¥n†¶èNIàÆe\T[5(/÷]k¶@`¨+BÀŽæªkõ0†ŸïÈ 9ÿZõ£ÃÔE=kø·¬Î¾[1æÂyœÂeâ„ÀÌMUïâ6¯JÕ³©«ž*QNðÉéÏþ.ÜHLzøèõ8¨µ|õ),øì²„c€;èOa¯÷u•\'Æ—³ÇŽ0äâzô¯Ó"ƒ§ö"Ø*Ü宀@èš—iž†ú¡î%JBÁ´Î%‚œZwKèEoQÅ©À]6–i?9Wb‰rµ£IžW¡¡‰HR•B½mWgéäœF!?†Ô&–Îåëc0%]®®È·LšÖÊÎ p}⡾¬¿9EIœù®MxíŒÏà’ÇA2Á90˜ÅóŸ1Ñ>á,döhIoôBaºÜ.a ßÎí•á^È‘GÈ¡Pzä-£Û7Hi"_Ÿp_ȳ°ó˜˜‰Ç™ô-g¨»SNðG¦ø34ûær|ð£ªàÌXX¥Á•oËx—͘%W繓ÊÛÉÙÌLÉP QŸ,%¦|Ë(±UöÔ¾/zúV ø‰_\tÍ:í¾4ùv7’ŸýA8ãW4ÈøËmÌò-á²VvNR ùž®\•¹7qÓþѽ¹çEˆ„ËíÍò- m­ì$DGŠO‘𳆞`_ ;}ºÜKç|KûZ+;Ç‘=‚ Ží{*oL÷dØ)Ó3†!ÞÒζªÎqcب2ž7óëúˆõ» wDa7ãqƒ: |7­’n—•­f9h๛,n;IAÒÕ5t_ÕeAWÙ¨’(‘B JAµA²"®à&hˆ†è#%CÔ*zŒ¤Ä=Øë_ÐÉÆj£Ž&…VW^HÜ7âÎUQT¢ã^T™ZÁªÉN±EE^Jb3Í|`_0TâºÈ›V‰;Š¡Î9Ò†ž$}dϧÁ`“2+”°¡©Ä˜]•vE¯Ï‘ÁÅxÅdž‡ô›hÞV’50oýU?ž7x ¦i-èÒl¡hÖ×÷Í[Õ[gIµ-óÿ¨Zð`8ÞN ëI‚[ÓÜS/¾åÉ:SÇ®‘ô!œÝçí]Ï|û% yÐsYj—wÛÓF§È/.Ø!ò@~1‚ ›‹ñ¡C |ˆø:j#x¾~耗@£þÀEÄÏΩóöarj1ì4Ô¢g_ Ò³ÚÖñ®9¥=˜V‚( F rØe‰Ž>AÏeMRçëL÷Ý)”ÏjÃF´â=0‚¹Ë”D ̨êQ# ÷ûBp† ‹IT©ñª¢+%Ÿ¨äûT9Y¢«¦÷OÓª“Ã+ó­É­!î÷½6’LúLMŽ*e1Í7e ¢~{z¼!…Г‰ÎÒ¬óB6ƒEÖUתv•Œà䳘×yÕé¹qò[—7¹†6])uÔýÚ2 N󧆸#c«†}-]g'\+àDGV‹m¶¥ ?¸ý‰——g­ÏF|Æ=I‘¿,á ˜©*¿[‘ÐmÕ%(&®¶óˆ(‡ö6V‰O]Åê°­ªTUõIMˆµ d±ã¿øïN³]u*´(—?6íGåÄÚªþªDË•#êMõnWäkÕÞT]hM“*ÍÀá`+à¾mû&Xs ªÔ¼mL±™ð§/ñn/S¸/ŒrüP÷â×°Ìh7y¢2dï8qpö¹õ‰ð9à0%b°¨ÏBžyW#ë!r2þàä;$¸)¹z(ÕíäX~„m4gF~døØÂª¡ÎÀõëÞPq¿ÕépURoÃĘþ…’0l=ö–H¤ðÚ‡;‹˜\AÔïôÌ}VV>­ËC¦Ò/Ÿ  ½ìI{ÑyÙ̵ºt^†;õ/P`©ß0Ìý(¿6Éù endstream endobj 895 0 obj << /Length 3130 /Filter /FlateDecode >> stream xÚÕ\[ë¶~ß_!$hc1—WID’¢i.Mƒ´Í9y(N‚Ù–m!²´•äÝ,Šþ÷EÊkɲ—Z.öe­¥ÈÃùf†CJ"¶ÞÜüùÝÍí·‡D2¤aðnˆ…’‘„߈ïÖÁûÙWå>]gó_Þ}§jGA µC¦j󘢘ÄÖV”óâÙ­þ!!Qmn¾ywó¯up@žð¡!Ájóþ¬áÞwF\ÆÁC[s‚e!\çÁÛ›Ü`#4FR¨Kõ󿙡ó I®€U± !¢„ÉXUl."Ùâs¸“® LTmW|£™>~§›N±B$©tV[1œsÅy!.”œÑPjâoÑ@,‰®ø-ÿ}ä¾52Œ0¥þtÚÇwÔ©«°c:¥GJN‚"NzÊk{¯¶¾øñÍê+áŸÔüîДU–ä¦éû¼áûEˆñ,ý-Ùßåi¯²¹õ1±%ŒH„!x#¬ïH˜«°W£ÀEL§ö÷¤jìÈ*7võtˆÎ³e¿úóDâÌýÙÇw$ÒUØ+Db‰bʦ…­PFˆðЛòønÊsö²òB£X•Ló‚¯Ê»Ç*Ûîš±Pô3øÒûÙjÐDU'ó¶!‘R~J1¾Üº­öurŸ­í|ëËagè:ôÛÕ.OÓÍØ¨>¿<¤uý§z´á•îfeµÖþ£­ñÆ!"qäÏxûøŽÆë*ìã#$±˜èù‘@”Æþ”×ÇwTž«°W”AT¦&,»¬¶ó½M6ÈT.ÖÜ'v—–€›*MsKÌ}¹Î6Yº:ã§×#Å:«›*[šÉ-“Â2x­Êý2+RËÚY³›˜A€A´ëo®ÐÇwtWa¯¸B(-²uS±lvieÇM]nš‡¤J§ZŠ¥§åe±µ«i‹xW•w¶ƒKíYYØ5° Ûì>µ…´¬”Mõøeþ¶ úðŽâ(êÖÍrê\Q—‡j•Ú»uz!{zž#NIêã;²ä*ìš8‡ß–ô¶Î #·¶e1éoWg€ï¨QoÂePŒ8ó·c2ÀwT†«°#æu”ôAÍ×Ç—W6Y±Êëtâ"ªnÖY9aý´;_=-,͆&!0ô(ÛÓ´ˆ\›²²(³¢ÙŒ,iq»¬U’„I&Ïy¹sb‰xäoãg€ïh®Â^±G 8 ©'{\nËM¶I;J…Œ‘ Â¥|7Jý k”Ëz!ümo ð•á,ì™!]¶x!1Š¹Ù­ƒÀc¹ú8,×éý˜ù¡÷Ýðg:ã§Ð‰)¢$¶0Ô“ª«]RlSÛ|Üv1Дvõ!ç´]3Ü&i0䲑 …0q¼^hQˆÀ½ü™~ßÑô…bú‘Dq,&š¾²E{×q¿0eø1{%g‘æK…ìU-9€èooi€ïhÉÎÂN±äŠh8Ñ’«3ë:7eÊ_+†ïËÊÒ”ËâµM>OšÁÖÓåѼÜ<G¡Ç8Ûƒw4NWQ§Ø¦ˆ (žh›I5þÈì‹ëÛ›_þøÍ·Þüø·Ÿ~øz˜7¦ÚØ2ãˆK½”›ºIû?iÈçC9Úq4ÑŒ¹^’{³ã>¾£!{Ö(ƒéõ 7eôñ•á,ì·f!ÂSs§}’c×ÚÖc»²¢R–¡©­(f¹»3œ# ÷ájhöþ—n¿ÆÆë(A1ö·!8Àw44Wa¯˜K³!øo[彆õ¦¼>¾£òœ…µñRóZ¦ fö³ôöÓ‡Á 6{ž¨OÈžÔ¢ëC•&kÇy÷¹7ªG_…x®ÑÈrý¹&cOëž}Ûûü) 4ioýþJ9²\2)AÎÓ&ÀÞ ¼ïhàÎÂN1𘢊—e„—âs³É3=Óc¡JQýí. ð©rvBþÀ"‚Â0|µTïb8š”ï1ÑæŸÞèêÁ;²å*ê²B ê‰^-Ùc\'ÞôÜÇwT´«°Wâ—(âñ´d1!zS^ßQyÞ„5Ê  îo6ÀwT†³°SæB¡˜™ÚåwÞ?úÝ•Då¬aürõó¥ösdº&BDç³ÞÈïã;’ïMX£ ¬soÊèã;*ÃYØ)ž€’„=7{Y?ãR§.¾4=ÀwÓ´³°—ß% ’CU>mö¢±N%¼)¯ï¨¾£2¼ Û)#T/:%6ø½|ÞåjH¤;!/¨ÀÝ·¯íuûmk{õ3Æ47×ê³ö¢éÚ$ËrNÄì^ý1EwU¹­’½ÁI }±oË´ßCQY亨 NPRV«´®7S5ÛèrsÃYHm¨Å>ÝÅÁcáˆ3‡ä)vÍ)ÄÌleº=†XÕemä- U¼=TéZßiOKiï%ºà^¡$ùñ`)­—_ƒîê¯Z ìäDÍ¡~ÖUÖŠÒ†ïj.„ •TŠÙÛtu<cLñmkо³ !F,dÁ‚°³™*ôßîò$+jNw¥êõ¡‹¸™)H£' s/ÏŠ_ç½S3y4å ^ÿ ¦ÚSìqî‚;¼õirA"ÄäȨ́Ébô$ž@Y=î‹9¥1ŠÁ L5MF•%KÍ$H–æy}"åEjðìa—­vi;èv¶ÔŸWµ-µéça—š[û4©•š©Ú•«šI‘ä¥)1aÌ›d›¶L³ÙÛ¬XuHæw]ŸÌI+ÒZKÔz„ºaxoÉ`êÜ1! a·ܤUZtÞcZ£ž)*Qbó­U+ 8c ´™e¢CÓ%ê,Þ¯ r©÷­ƒÉj“„Ë´yH[s…²¢I¡\)¬Ò%í†H{•´I"\Üí”Å>Öp]r(²¦S³ULÍŠì/¼™ ê;CuAgušCTSD+ïP¥w¨2ý}­®¬»uÑD)=Š:$¢rÃ%8ú£®Z” Ô1°6`(Ö<@Qyh ,1'l*{=•œqà˜‡ÇÝ<}f …"êj©Èx:CQgÛ¢“C»¢bÁßæîªžÇÇSYÑÂ\?ÚS#ÞÅ àñUç’³ãtgN;sR³ì?C!˜ƒbkð#–ÕÈp4#¡þwÙz+é„–Nt-ó_Áª}ûnëVªÃ6tAž•^)>õî~r—¡½šªô®Jë´ÐÞ¢ºÔ]æ:§u£oœDq]¡Ü<µ8ÈØaØ`kRk:õ,ìÿ¼P} endstream endobj 836 0 obj << /Type /ObjStm /N 100 /First 882 /Length 1637 /Filter /FlateDecode >> stream xÚÍYQo7~¿_áGxˆ×cÏØ3U„@´H­„•ÚFy€pPTz‡.Aÿ}¿Ù\Ž4ì"¨Ò‡Óz゙ñŒ¿ÙÓl!-)0ãBA—-%P«¸rÈÙQråЇ’ð=·Àä¸Ät¡ECcýK0Å)P˜å„ Ø-‹? ÓlŽá@•} ˜Ì ÈœàqS[¨PÈ d¶rrFRB&§$ †ç1çò°ž³O* s°†\ØÁ†\SÈœÁ¸Â27Ì^aYH0€ePa4ׄIë¸ê†,Wç\a¹Ãrk†eÍ7Xp¡0š0iƒeMm°l†£ûà m‚–T‘ÐÖ0hnGCÁÂ00 ÀW5…‚Ǫ„ÃŽf v´„Â¥L…‹$#RøAªC1SõP1fªð• ­z¼1¥‘À®NãL8;ذ+ œ¯X4‹ûîä*>@è«/n¾ÃSM+"§|Cù`¬za)ĺᛂ&5ìII0 Ø÷KÅá·„ÍDÅÁŠ:Ø‚ ¤ÁÝ)Ë1¢ pØÂÀR|?• Œ™`™±{°$ ÔÁ°,ØÎÎ@¤9–kv0,WDÜp# 3[†å&´° ËÍ0)¢*㎆?Å]m "– ˆ@ûMMä`ÅûÍÌJX·Á•àuCnU²´8<\ ÃICðSx†_~ý $bÅÚ©¦˜à£ÕÅÛ·§‹{÷>‹e‹ ëì¾Ϻ°¹Eº°T#!]Ø$1#’=Xã˜o°}´^mÃáavJ»|c¤å~¬˜äêÆƒnû›æ.ï`nx²YŸ/·á$ O> óå‡mØÏôì¯wKüðüõr1<À¬ËÕöy3>¾ž.Ï×›³åù˜JãW?-_¾y~ý!œøìbX§—(¦¨vŠÙžo`Yµƒ­VkX<˦SÒ5ßdã•ÓîJ»kÞ]ËîÊ»ë¥çn0í/†ûëÍËåf¤”N‡†ÇÃÜ Ÿú"ΰzj=¼þÞ^­æèb¨ +¨uÜE•6¨¡.lŽ€€éÂtD-}X¸ŸRßjÐ\û° Ú…EèsÖ>låñdëÂJ‰¥Ï½•½”ub E×è]Øœ°«ûBQQŸ »»°èÍ¢÷6]Xm(H}¡/^Ö AÁ«$‚´î4Ë%¶Ü ôÉÙ‡ÍPo©/B)*÷…‚38P':£só(fk½ØÚE^ê£[—è9û°ÈËb}Þ-ÈK4¡}X$&·¾šS˜B}~ȻԷ#3¡>i?ÖZîó¥o–½Ž¦èZës³+úØ/}iSdòISdå+›"Ý5EºkŠt×Ù®)2úLÓó¯åô$©ä-2yïsŸk™T¯.Vg›å«ƒKq°~·\}…d±ØŠí)°yœË5 ÿìi¨{–{™üG_¼¸RÊ9ÒW¸ˆp°ùëA¨1B*è¥suŠ ~kª4 :Bt‚‡^¡²A¡ùûFtž­(5¾.JQ•=ÇçDéuð^”BhNgSX™QXSXžQXSØ2­°¦ yFaMaiFaMaӌšÀVQXSØ6£°¦°uFaMaeFaMayFaMa˴š‚æ…5…¥…5…M3 k+6£°¦°Í¢j_(¤¢Ýx×9‰E²[§Ï„[L©/RjLt³Äd}¡‚z,}¡H ÿÓ¡ë¯q2õ…‚õZúÖÆ-Eÿ³¦ +^aû2ˆYci}¡à‚zÞç2Îç^_(ŠÐEF6qDOÓ……‚Ž¢×Bñ7¹G‰B endstream endobj 956 0 obj << /Length 3120 /Filter /FlateDecode >> stream xÚÝ]msã¶þî_ÁIfZ¹cã$Á&is¹·$MîÚ‹ó¡s¹ñP"$q"‘ IÙñtúß» HHS4`™k>QÅbŸg» hcoåaïÕÙWWgO^z1ŠCzWK/Qû^Ã5"ÞUê½›=+¶"ÍÎß_}+[G‡Ö¡/[³(Bܧ ¬iHðù%øì‰ºÈNg/®Î~9#Ð{äÃzÞb{öî=öR¸÷­‡‹¹wÛ´ÜzÁˆú!|Þx?œýë ?¬u@PÌ”.OŸ?»8¿ô1™%y*?ÐY¢¾¯“2½='x–”â2;‘§"¯Õ½mòk¶ÝoUû›sÌ’Í^¨{¥Ø•¢‚¦Y¾R êu{k­Ö¢je@7<+6u²¨™¿œ¶œÒÏ^÷égÞ»K²#Ó¦w¤ìE±ͪ¤•»,Ên>ç$˜ÝÕëƒbSµŠH@º$`‹ PÆØ&ù>ÙÈ&q''žÝ{ù ‘ 9Ó›l!Ô*¹«Ô§Ÿp€„÷×d»ÛiZʤÜFu^€eÛŽc©æÙ®Ø$­œ$O6ÅJ}ÎòݾVìÖ IÚk•­r‘*IY^7z¬DYv_2;.änÕDä}Qž3<»³LÊélWód¾¹“ß|ø&–Ы¹SêºN¤RJ jf¯Ô½|¿Ú—I^m¬´mÕöOÔ¥G‰K†ùìuRïËd³9'`= ”Ƹ™ñ¡Ÿ?[EzPuU&Ûm7­¦µBP6ü cZJʶ¿ì‹Y‘«oYõW°\Ì~¢ÔoÍ4f•TªàÙ7êÒ}mçHË«kÒ68æ2ËÜHÞ^ä¢ü;ŒÈCE(ö}5Ô•ôXîó…Ô´j<@ùF¹jäí+éç$êû¹ð.Ü,ç¹®‹ëÝú®ÊÀðcG ](ˆ£®·¤¶$Ð…æØ`+âŸ{r\¿é°Ë²ØjNšÄ(èpte~õ´  qÒbRƒ8@!#÷´¸ 0´ƒzD„°¬X´¯w’$lɸR³ÎË–lsQß ‘O…ZÙl4ÔÎþ|³Á¡¥¥xR·doÖùÍ/µÈï»"ëH¯âAÕiZBüÛyzhÚMb·>‡© k~8¬3U7F€ƒá…úYÔ ¤"ÞÐܸ¢ nì ¾æûˆ‡­¯ùÈ./D.Îÿ†Fh|­Ø6´!´_®ä]Ù(,cT—(“” ùa ñÓE ëÞ0˜]Ü‹3U÷‹8ؼ nXY\Ïʘ?ÉòΪ͢¶»Å[”8 ù²GšvD\©Ð äAõ Je“ìØçY]µ˜ƒ“È™ÉË«AZå£3/”axi•ü= !¢„yÅ<öJá-ò¨¾´ñ_ïAûQ7€Ldk[ù*…Èïr@Že…(¦±½²*Õ$mÊËšh# †ÆÈ§-Ÿ4Ñ,@§/ ÂXýüMÐÀqޏ3›äÛÙÔZÙ›†DJ=#Á}l¼neÂÝÊÔ„:Pþƒ™¯öuQfƒup¤ã»Ë"žP ì0LÈ[ŸR]Àx€`auX_¾%`¶ÊNÆC(â¸)`ÿLÊZ¬b©×N…þM6ï7Ȉ!ºÃ±'ÞFKU'PŒÄ#Ó˜úˆbâÎt}ù–¶³UvÂx!ƒ!L=àY±»+³Õº C2ý;% rïa«ÒyÙ‘Äq|A1>Ý»iö<¹ÉR=¿z: M‹þa±Þ±›Õç§§”V_V£'†›åjØúoºÜ (¢ÌwÇݾ|KîÚ*;Á]°G’ƒ¼À[>M®—e’ÿ¬ÇÛï!!Ðkùµ¨*Cº.·kèô%T§ee@Ø j­…Xo…A¯\Ô¦9#ˆræŽæ}ù–4·Uv‚æÌGPA®o¾Êï¯/ßÒx¶ÊNχ+ósrYÍk9à2$ã'[n“;½†sMËRˆ¦Ìm‘fËL¤Cg¼˜ŽYiVÕe6ßׯ=“\s^Ûy– ÍÖ·Y½6M’IŒüÐa–Ü—oé ¶ÊN¸%s¦ë m[ÔkQêaSËúVî~2EÓÓ6E¾Òk©+qW;ÝÉ%µrù\B«ƒnYe7BW¤f»ö)š‰`Žv·-6oé#¶ÊNøˆ!rË×l¹P¹‘n¼KO%PÂÄâ1æn§m ß&keOÃÄâ‘ðx§Mí^AòDפ†ÕWU§YaP@­ï—O—”ÁjÓžP@ÎÆöí5â–<¡¹Rfy½©~?< c=@x¼g† ²w[tù–t´Uv‚a„x»ããpßÙ˜šxÂ5$Ôž}ù–xÚ*;'\]¡¹}à PFQ¸Û È·ÔVÙ @Y€bF\AZßíÄï§O`:î¶Œò-á´UvNŸ4êÎmR¯4),ö¾»]|K4)ÛÇ(ŠÜ•·ù–ưVö‘&ÈN|„»cMò(˜ÞNÏ~žŠ›1桞†àÏäÉ×Y*YD*K 7 ë$_ ÝÝ]—ºÐk×QÕÜœ‘' Ì— v <CÎsZéAGf ´«BÆëòíXo¯¬ ë1Eò€Ÿë% 8cPÂõ+3˜èQÓÿÚK=s±09À(«J] ú\AθܗoÉeke ¸ìÇr¹¼Ç®2‡£Ü|›a[”šL.òßšñò¥†rÀÎSžùxvF²¤sÆÍcé–Ì´TÔ„—#¹!/“rüøÍÓÏž¾}ñòúÕÛ7?¾~>L˜È„ 2Ôj4ˆ•ÿøLU-ëŒË}ù–l¶VÖ„ÏaŒ(íVç"¯ô³†Rÿ(AžlïûïÞŸ‡æOžLE»—•Ïž<´[„‡=>ùL—,ª”‘¥/ß’,ΔmÁÂÔÝÓ|KcX+kâ9,B>!†+Á6Éò±S2Ú‹ÌjaxHáž{„ƈÍ•dŽAƒ›ûnÞ=KÑq=_Öíîö^ò-Ùf«ì·|ùJe»Y÷]ãQUþ93^_¾¥ñ¬•ÕqÕ0B,šSc¿ÿŽhŸ¨Œ#FâÇÑ~l×Cfhš°Ué8ƒ­/ß6keM`# 1¿=Úµ©äBך±°y¡ï±€`•â;¤/ßkeMÁ>bÑáÍôý\÷h÷RôõMójå#¡\媮€È·Æ^Y`hLQ@ŒwKD}3xAψ#ê.lõÅ[ba«ª V†€÷Öš‘m©SçJtÖ›FÜu–/‹GcªÜÕx}ù–èY+k_„QÇYs¶É¯6Ë TÎç “¾|KLœ)Ûƒ©ŒÍ™1úò-a­¬ A!S 9™ÈÎ P-þhŽ ÷x“%º¢^Oºól5 gˆvóuü¹–!ëN<û˜ywÄ¡öDZ™Á•|™þÇŒÿœI Û endstream endobj 1026 0 obj << /Length 3187 /Filter /FlateDecode >> stream xÚå[Ýoã¸Ï_!,PÔÖŒ(‘úØ¢®‡ÞÝ^Ú¦}Ù]²,ÛBd)§Í¥Eÿ÷ÎpHYR$ÇŽÎ}éî(z8ÎÇofhǶv–m}óÇ»›Ûï¸íY! =dzô˜º–ÂÓçÖÝÆú´ø¶8$›tùåîG¤ö­¨=©…ï³Àu€™"ä|¹rü`qKîq\tó§»›Ÿo8Ù?nàÀJiŇ›O_lkŸýhÙL„õ¤(–ä6s\Æ™õ÷›¿ÞØZj›…‡øø¾ËÙe¾-,_Ì“rÆy‡…Ahq¤­2±¶“œ^å¯%ïó7Rž³C——ÇB'ü„U ËEƒ¿£rm&fò|&$H.9 ™ê±Lóz«ÌcXÁìg[Úï>Ùï£?ò’ÍpÍ—åʳíÅêôütbín¸öý%Ä_>sWLÓçCúwï'‰•¤‡è—MTG/d¢‰ž¶û¬ýÌõÁÄõü¬Ï¦ŸÍö?ã¶dœ;àÕ°:ÐèQFù.¹Oóm1Ô4¸Ì¤5i>a˜)s¾qŸè—‘ à¿;× ùc×q‚>ÿ™N0[ØKÀƵ™í8möÏUGÙý×(k’•õ~Ú¸±JA÷uq¬Æ`ëbMùå¾ô6L¹È¥¸d¾ï]Ï¥úügºÔla/q)2 t©t;æF§=!­ò(¿ÌyNz®²+þ£Ô÷ïs-l À¯fá>ÿ™ž-ì9öæ`â°Æí×K”i{ýÔÔ½“‘ZlÏ£SP0æjW,tÞ[ƒ€µY ƒ«yÒ€ÿû™Ÿ+êøíù’9Nð*~_‚†¯µq¯gè³É£¶åjVíóŸiÖÙÂ^bWO0Ç É®ÕSZÇûËʨ·c“§õ˜A/+·ÞÝ-²¦ùðJ ¾¡žS ÿù:Q=µh]&ÑÃpáÙHàR§q5—éóŸé2³…½Äe„Ã\ù6Ÿ9|ó¿ò˜—;]ßej]®æ2}þ3]f¶°—¸ŒË™:or™¼È“ fž9u W³bŸÿL+Îö+:6®¾|Ù$Û¨ùUÀ·7MþOùyÞ3R:¨ùK¾Ù@È8¿·©û¸šçôùÏôœÙžã9aÈ|<Ç™ðÅœN|ª<7¬eH}ɵŒ3à?Ï8³…bLrÙk‘_W^@ÅÿÕ”×ç?Sy³…½eà3)ýׯ+[t;?Ys²¥ù¹—OçCe5z³}ñ÷­g¡x•îòdsžlY‘ïF;À‹¾í¹*|Õ]ÍÙ{ìgúúLQ§¯Ò¤ï1ÀŠ q£ÖàjªëóŸ©»ÙÂ^ðÅ•ô$ƒ.MgÀ¤nÊ|¬6±ÏöQIõÕ4Ýç?SÓs…Ñk+§`Þ¥^*¨Ž½šîúügêîjÂje¸à ¢ÓTzׄÞçÌ0è?§R†ÌÓÞí“åÊqÄ¢*š2Öã¸Ø¨‘À¶LÏn‹’µY­‹%—‹¯øŸ^ðX»2:h>QNƒuË¢É7D˜æfôã¶,]å‘‹¨Ö¿yß;Ç…vV®ùÍÛ&9·uS;,6¿ë C‘¿½¦g^ÕQ–%Zº¨Ò'¤Çc?Dôí£µrC,£¹µâL k¸¦j`ù3K{B^ü-ŽôŒ·MUÞVû¨Ln7E| 禟V¬–+à°I¾ÞªŦÁqZNOi½×ûf H©0(`T깦.Ê4Ê_š"ëV¬‡¸[€¾íËPm·r´·'wÉÈebkøMõœÇKn/öåÒò¢©èWˆQüs“ViùØ©lÜöÑWZ?¡a¾¨“¤¦—ôðX”u”+Ç «hžÎ‹Ô=ccK¿‹P¤}iDuª6Qv„zG3O 1sÕAQú`™ÑŸñ˜Htü%fWJD½E³Š&šÍ‚®Á£v¥”£¦eZ¬]ºtL`)m¡zºþ¦Ø#/@Y'l¹r!sQ8Ã\S)»Ãˆ‚É’ºL“#_š%‰xhtS ¼C§ù¤µ~VDƒ…mdL“¼f'µ†SZ¦øfRMJ”ê#èW(ðw«5ºW³E9·$cHæW,"-­Æ£ê¨‹e>&%€‚– !l¢ê¡¢Y%úÅØÈ³¢®Éd{2ÜMo-KRFñ‘ÄDµÑL)›J¹@[»Ø:ÕÂÕI¼ÏÓŸ½—™úMWúŽ6ºJÐ_ÍWMl`¤2ðÕO@[)¸‡:=€?Eq2Ë"`ÂnÁÎ8Â&4$„}ål”ÄE¹c*©o0Âb.BæØ! |æ‹ Íi`ˆg™Aý„˜Tà‹»Ø¤ä6KÞ ŽK³Š"z®hÁ¾@’'͆U:VàƒoÅ–ÖÅû(Ï“L¯KõóDUS¢ðmӔʲŠYŽÔLKìÜ*”.¡÷(« }޽Þý»tטå£^Ý&ð­²Ø41òÇìC?x%s….‹?Cþ†¨4ÐâÚ¢w^a4,{Ú}qT›uû${$RÒœ µŠÅ¡Éê#cÆ@Žb²Oã=-¡ï:½i] xç´¸&b-¡Þd[~Ik¡´°…Z+á»M¨Eð2(e{šê¼2™U!K7Çv^Ú ŒµÚõ’ ayº¡h´ë燼9¬MšFÝàÓh¹Ÿœ­•/dæ&ï´Á|Þ5¼‘Áp€Õ:–ó)á³6Ëá|z„1H'lt8×C:œÀìa>:æçž(ô²´Hxí¡szy/Á”u‹}Xëcn„LõRõ}F+øÐ^'kŽ˜*OŒmò˜W×HëäW³bk<n¬~08ƒäÏPôžL¢@3‘DUÑH"ÆZ Ø{“%Õ@ÌA5„3]øQRGyÿð¦nÇ“5ZADz³e (~ÀÊzíÁg4 }¼¿_Q¹ÁKh\+|õu üC—Ù|þ"Lzüø#§íDF*q‰W“rØ8¸CÄ¢K ­ºNEûÔfáb{¸Ž9›{F:(ð Ä*UY tÄOUÏ4“&¥cfêmˆùù UÉ—Uýž>xÒu!>éNP¯;L:a?D&ÜËwuwƒNÁÛcZN <+ý)Õ¸@ÏÀ/â™ßSkÐR´1cC~7¿*¦ÊÕö `ª ™@4›­ z>äm˜¡…,ªûK' IJÁ€±Žß$ ü—ת٠mª­BSÚÃı´ÇÔâ:hôüti<Õ!Bf«*4Äà[®ø¢¤—«‘ª¦ÝI-(Žž8¤»}MS‡ žg}•ï\¾øµ§ªÏpâ8ñ¤ÏÒráÚ sͳ.Æô´°(oÛ 7T;<:–‡7 ¼0R6vñ/Ô~øMQ]_ÓË“¡Ë•ºa´KôGV¨®ÇƒZ(×Íwg î]G¥^C6B±ú±êÃXµýÅOÔfµÒ)Ш„¥dL’.sºD*ãéEr19E™”†Ðz¤`žøxyêÔaz„c!¡•‹×i­3èš!µ t—Åáí)¥*†eÊÕºªLÊ<Ò7/º1©a«È‹U½^ݹ/*!¨X«·‚Ôɧj ›”Ï£éëTö2êÒ]Q~š8m‹,#Th+ ´#²Ïœ× äoˤ-(¢~B¤óÔ%Ôàªhï–õó#]7ps‘Í;ß½h.˜,ãÃ𻚣|ªä¯È§œ‡:ƒà`Ûä±¹Ù˜7}ñPr8$Šv¯2Zßc‘¸yq£Ôëü<Ÿ¹~ûǪØìÐ •l=ÕÝÔPÞVŸøÒÑ'¾R=‚#UEztl5>VG˜t ¨šuwN•Ž+™†#w-#UckÙëÔïÆŸÜ@Á(>4ÓU–b˜«P7´é…æRýz<>©’ÇåF}øÒªàÎw} è¡l¨ÚJ86ÝØQŽJo½/šLs]ë­è~jóR‰Ê¼›4߬°H—;¯{²ƒ\‡ž¬Õs_#ˆžt`î2é‹—ì Sãˆüм£xa÷/ñ.q‰äõvüJÛ¢Í߸Àäï.Ï핎ï8©ú> stream xÚÍY]\5 }Ÿ_‘GxØÜØNœ­ ¨€j‹T}X¦Ó²¢©f§*ü{ŽïΔ.`ÚEËÃ(Ù{ÏuNlÇYN%™HªCMc`h‰ðÜDuÅØ³£Fbu˜%)ÀÕ’¤W)‰éÊ*C pÒFM½¦ÆÃØ9 “¤Ô’µ–:–†OIð¾'*Šu$bò/ [IÔ˜ð %R1¬GƒA¢I"sv ìˆ{ê ã M&c˜(áÇRð‘&u¬L' ’¸b£†q†œæ+¨b¢ £XA ,Ôú¦¬fÉ:$wì×:$÷ÑW<àɤ z`#C²/è´¥Õ1©þj`bþ º%(Ü@Eh@~ÂÜV6¬lC’ˆkJinIjùÉÕM9 ¹º1ñ“æÖÜ\aÉêö4HV­+ƒ"¤»EÁ@º›Ô ¹â'7ƒä•Í Ù o3Hö}Q ,KjÚ1£T©È 3xÍ6.ð Âê˜ÕTaŸ5̰{Ì4UlÔg3h³"Pmø ºÉ ãƒVý%4P¡{,Ax;ÌÅE+Õ©ÀÙŒë©Éõ³‘Z5§s4u7+PDë6K¦Ô¬ùØRqü>ëk°afNTJR®NfVØØgœTd~/—>?«Ië¼!x»VŸiÒFó3¬ÑÚü kháÕùùjú,=ô”t/Mß}ÿHfu£ Ίo_>{öhõñÇ‹í”Ú aµäކ°ÕrÇ aeä‡ a¹g?0!,i8a!liÙãKËV³ûX;$û±aÅ2öÃVØb݈ŽY[Lˆ­¹ÿîÝÝöÎÏÓtoS¿þæ®»ü8ÍqjH^ÿ×vÛŸp~ ^qÐlþ§oö»õýÍ!=LÓ7ŸÝMÓƒÍ/‡ôzÝ¿¾ØàÅÅÓÍjú6ÛÃUò3‡ÏWÓ½ÍÕîå~½¹šÏûüèëÍãË‹Ov¿¤‡¾Žgf„°Q){„Õ.ö¤u”pg»ÝAâÃ9¹8%O.×ã8Ž×T=³\txÄÿÀx–»š>Ùíoö3•òhúbúrú 5=ròkìZàHꀲfcVÙã^oc8îþË9}u¹ýyºs~>¯0ÝY.wÛéþôí½/ý÷ÁO‡Ã‹¦éÕ«Wy½{-äÝþé‡ µÄë(3ÍB—iÒülj&ç‚D¦P¨x.dÄ ¤Ž3ƒ< ÜÙ=î§éó݃]‚o}ðäåv}¶ß<9»æsvؽøé׫ËõųÓMCšÎH'^~Þ+²î;ðº9NÂ-+R̉T­=Sûw¤žìwÏÿuUµìljZÓžÕOô»PûKZÿìö¤#%Elô¼Ç…³˜ûb¥ŒÿÈí¼e¯‚ÔMV½bäìe­*xŽz‹¼°>{‘ÌEC3Ê éØnŽR‚—Û¯SÂQfÄòÑ–äÏùù-ð1h/¹ǰÌKõÄ"–,{%Â">ñb© ç¶¶òóB­´ˆ#×àÞZï¹.ÔJ‹XEŒ1[´Ör“´ÖÜ:Ű"ˆp17F)Úb¦hp7µ ) "¿ÄLuåÞc¦¨põA1S FG‹™¢b "+ ѳD¢#f‰ŠèQ8æ •p4f‰Šàíea+FÙ›»v”L#f AbcŽéWÚȤ€< 3… Æ–3…—b1S¡D”Ø’"¹ö˜Ù¹­QL<(·3#þ#Nư^æÆ¶Æ¨uÄLÁÒsç˜)˜ÑîhÌL(“JoA®®1SÊïIBX´öÆ1SZ{¿{ a•r‰©—2| bÑÑF«BóC3úÍL=f ïhaºÖ;ƦïÙýþÞï¾c‹K…ÿÔãâÙ{6¹ó˜³šoÀŽ“všèiÒO“qšØqÂå4¡÷ëzQþÃ*JŽùB¯xwYýž.ÛM–³ÿ–£;¿Lt>È)¦Ãi²_öÜ-CííwÔÚB:$A‘„f€awØæÖh¡´Tëá5 Jm”XðOV8㸽ŽQ¼“a³Ê~ëŽw¾¡—,"·ëZÃÿãàžo³o5ç‡ç•åÿrÏÃÅPž!o8;¸˜òœÊ ®WY¯üfÀ9]¬Ÿ?¾¹û ÷u¿šóþ·û?6 ú:¿׊b …î+žnN ãv³¿\Ÿ.ñøæ(B5¤œ M$…þ°³Gð´â‡áùÅöñÙasux“Ôüß‹7šq˜žtþ¢}Ìg&7Ô 5ˆ­%ÛB=¶ T Ù2~Y¨È–Á5C rF¼‚{k<íG‚;âÞBU¶ †÷²m¢¹ÞPóoq»ú endstream endobj 1057 0 obj << /Length 2932 /Filter /FlateDecode >> stream xÚ½\koܸýî_1@¿ÈˤHIhQl’ÝìÛEZ»Ú$0d‰c «‘&zÄñýï½){$kÊ  –†"®Î¹¼¼¤þæzão~Ã5É~€|ŠaÜi¶›½HsÙPh!›d·/à”ZÖ¤SÑ"ðHkÆ 4;£,öö¢Î«,O¡àN–Dú‚áZfI©_Û®L%kº_tŵH²¡ûªH(ŠñŒˆ€. ?{-R‘K>?ŸbæiKîMÊ’6‘²Qî] eµhº¢U­Ïï! )Ø­ü“Ü5ª¬WꕽºP ºD_½Q‡ŠJrüP1„ýx,ÔC)iòFKÔ•%赤Ò×z@¾fBú¶„í¹P={Ä”vÉÚ9TÕÝüh¨ô&)aôh—$"ˆ‡ã`"ãe’&¹yˆùò—ŒùjO2BiàáßúC7èãçC˶j“â°2ó°ÿp¥ªg ®J§}ëZ(d`¢TE{çZ‘ ° Íª®Õíÿ}ŠåEvêPš ó½6W…o@UÉ¢> Ü‘*ÎúNä¥yû¢’ÄóXù?”ô}¯ß».;yX Ĺ÷ªQ¥;Qʸ,4@rUIßRöB&ÔK¡J-©êqKU±½É5ƒOËÃÍpX¨‚¢ªöª¨kTŒ;<ú0~Êâ7sî@ÎúäÉQp‡ô©?¥’²÷¯€ˆC²5âr2f4“Þ?MgdYZüe;¤ˆ€%ƒ£Üü8ÉÔ)\J°Üq¿ÏÔe9ôÅQ¼©Åf{˜šÐæKŸ€C2ðá ËÚ¶øj60Á¦&g8Äâ0®ÄöƪY Ö³¨ Y`7$êTO[^ö¢3DejÓXÿÙT4F ÁÝq:Æ·äÔÖØN9A~(í PàóyCÖãßg=²Ó‚ñ4ÿ𥨣Üa¦Ýû3ÙÄc£z*¤UÕ1 ™&/òØÙ±«P‡G3$£“åå¾çzþóÉgþ5Æ·ô/[cü+ (µþõNÎl¿©s©5š"¿Z+$ÛƉ¼¥Œ–¦.¨(³Ç(Zba¦Á 1¾%w¶Æ.GÀ±I¼¶ ¼©öwu~}ÓÎÅ8™ s^:iâ©äI6Äq¿ Ë?x9R~Ÿ|Î3³ÞõjzF´ }žÞBlç.í¯Ç¯+k¾kf.œ&×ÓÚ3õ`?‚¹qçÁc|K¶5vÁƒ†ÆðMÄá@tè®àNѲæ¯E]ºÓ»ª®WúÆ•DßC»ï¶¤YáI<Õ=‚X. Pgî1Á·skc»GÇ0ñÂëF‡ Rɼ3òÆø–äÙ»@Ln8t[ÃÑ!– rÃäu››¦é»äάâ•!à¶¢0ÄÜUY¾ÍE6í‹/–cJ–Ë…µ«®]Ý21E ®òRÖGWd˜AÈ`zËÜõ„1¾eO°5v¡'„!ج͓ª~ÑßHœ¦Ú¶·rÅo¥«vµ~ÙÚ¨¦)â¾®ö¦—´ª'è;VÓZC#®óÏÂÒ°ž¾Á´¦“p†|ìn l‚oÙIl]è$pⵤ©º:¦/G¨¯ËÄä3wÓå ¾¥L¶Æ.ÈÄX3î eî—*$yiJi@‘»[Išà[RêÌXM%ÓØc|K2lñ¯{; ˆNÿt|v“—iÑ=êÎ_›K5m–W+æP7OžAŒ°C×Á[Šiiê‚–$èŸp£e:»îéJOI1q·`2Á·TÔÖØIå#m~ìHÒmZ¶ÅsÈIabO¸»Ž ¾œÖÆ.Èé4ÜPþæjv%Ìa³g‘3ŠõÝ-¹Lð-å´5ö¸œ4†4,ƮϻGË/×nóxíarMw‹ |Kím]Ð>ò§Ô‘ö¢®ËgIœ(0E#wÓá ¾¥œ¶Æ.È)ŸÃ wyð3%N”©|Þ™žc|K=m]ГE(ÄÌ™žõô Wz*§w¦çßROgÆj2¨Ê†‘1Æ·$ÃÚØGŽ´à0ÖÓxñ¥ui|SB¾I2y6@ß•yî1Ît9*ýéÿ‹©¿“>Cv¦ðÞR`W¦j&°J.Q1Æ·äÂÚØ5ÎŽ…Ât[w©á#^û¤nDvYíå½ÙGþþkꦾÊþœ‰3Æ·ÇÚXqxˆ&-§pRýÁM2yú‚pÅñÓ‹¼]&»'‡©Ï•f|;Íì]¡‰ŸëylVuW¦wú?'E÷t=B•¢9ÓcŒo©‡µ±kôˆò}2¼acÝúÂlÆ^§™»¹àßRkc×bäÁJAô[KO–ƒ©œÎ™c|K9¬]#÷‘±•r$õãÇ=µЍ»iØßR kc×hÄ/MkQ'åõÓãUùŸ31Æø–bX»F !ÌÕb|õUÕ<]Òg|ÎÔÁ[Šakê-Hˆˆ­Ô¢¼”£Æ“¥À*‘s¦ÅßR kcר!_¦ âÕj4©…¾J㜩1Æ·TÃÚØ5jø /²¬™olkñé©jàXæpî¦ì|;5¬=¾z‚ãQª'{ÿ3f/R)—3öÆø–ì93V“ÁUÎ㌌1¾%ÎŒÕd0•s8#cŒoI†3c5ô‘1Æ·$ÃÖØ… Ã䯸Wo¿eb›—†Áÿõ¿ÞžÿgnÑV}žÃ0ŽQ•8hŒo)µ±+VÕ1£á‘•Ûãïðt&Õïë=§¡÷Ñx"}ÚàL»¼¥t®LÕL`5ˆ;£bŒoÉ…­± N‹CÄqüMãÌo—o~zõÛù\¤!Œ›ºªO Ýåþ|K¬]g|Øòáæ]Òæ©áG=Ê&¿6~}nÕ"m‘7íŠ 6ï æa,&(Àî&"cx;ϰ6u…cÄ ØÁëC?Â0³¤ˆý±Øð9ùª\ÖAÕñ2/·Õ3:G„a†ìî&åÞÎ9¬M]áQ€Â€¬wŽÙ3.¼¹ü¥ÿÐÚ7“[—Ì}—7ÂÔcÉk?Ëûß²µ endstream endobj 1110 0 obj << /Length 2452 /Filter /FlateDecode >> stream xÚÕ]]sÛ6}÷¯àæ¡ãlßÓ݇6M3ÛN›®ë>¹-Q g$J%%7³;ýï:kH¢ ð ™n^ä‘©£ã{..Î@gó go/¾¾¹¸ú–`™d$•ÙÍ,IÃ2eì«"ÙÍ4»½|½Z–Óêùû›ïº«U¦íÕ’uWs¥fÔ‚í.$ìù+ªôå•{!’tºxssñÛ±áŒüï ¨ý¤È&Ë‹Û÷8›Úß}—aÄÎ~ß]¹ÌÁˆ2i^d?_üû÷¬12¢û±{yû™!…y¦¸FRй{Ÿ"£MFº«MÖ”ÙléIüž¹ÿÀ2äcId¨IH¶S–4O Œddû`P‰”˹4ÁðñÁ“Ý6óÌýpý0ÜI?€ùãáÎ0”ºQ\՛ݰÊn_IŒ/×M¹.š2Ÿ,§ù¢ºó>dq~Å÷ï\NvE%÷¿*#–&2{EÆñùûˆ@Lg.œ–÷û^ØýÁj»½³èÕ¤LõuÞNŠzÝÓׯ¦}f”’é2ÛÇf6˜lHfc‡µ_fî&«¨Ì®óɇA5†>´­Ûj^—ÓÀÁS6Õjš×E½jËÉhá1GÚþÝÉ„÷ñÂƒÉÆ5"6B;áûbc •haQf\µ9ÛU<òe r6ºH L¹=|˜réÈöÁÐÖ “.>>0`²3³Ô­\ÊݯªÀê2]åÇó3~F&öTê3Ìȃ£TcŠðQjô‡©"(¡öáy™Šj i£IºPøøÀX€ÉÆŒQÉ}È·ð1ºn¬ɧÅf»Œ¨‹¶X®y —iŠßS™ÖÎ$Õå"¯êiù4Ê„ë?’å–Ì­ddû`0gY“ÃÇL6f qŠ˜èW¥lò5~ÎÙŽY›ñnnS¶›|Y¶m1/Ûýl¾}ÿ|—òÿt/ÿ Mlê\h2-}| –P²G”“ qÑåAÌô φK[»L¬ûÑÚI¢áéá=|`¼¡dOÄ›bÄ{2ÞU}_,B'¬vµmW@µÁÎÊ&ÓÆÇj%{BlWüé±pîá™xUÏÕd3Za¢4];º‡LvXa4DœwàÍ|»,k€:Ú9Ìdêøø@u dO¨£B=©ÎÑ€'<Š!–®3òá⩞ÐFIdGÏyGN×a,ª t–1™6>>P(Ùaë,¤@Ö«;uþíË„p¶-Yô||`ô’‘íƒÁ§J  0Ùˆ¾Lp!J"7Y–EUÇ-|CÛú?‰\ô8l' 5¨ûsGõ“–ÁýaÙ­‰„=ê\b²lóñÙ%{"·EJöchÛ-ˆsqÉ‚çãƒ&2TfiJÆÌÛÛ›]¹Fœ˜³-øÏ5Øy»dšùø@ÍÀdc4³ÀšŸÞÊ®kGë`& 2Vº3í|>^ûâÄÏØÜàÆyËT¹±‡Ë 8ÙˆÜàÆ ­EäÔÛ”›ÑRhg$“Iá㥓‘BÛ·ºS”QRlV›bqb8á`aG2áñà²@©Æ¨¢”}KGª2Y-FéÌp2!|| `²1RØWŒM¤Õh!„sŽÉ„ðñB€ÉÆѲŒ3ÜÈ|¶(æíhI¸sŸÉ$ññ’€ÉÆH¦o¡ÁüÁz0ç,“éáãõHF¶qV*Y0||`0Àdc’“2DTß4¶›f; =!^4m9ÍWëMµªÛ°Ï»8&¥±saÉTôñ*&#ë‚ÁLg~ÒõÔ{ø°`ÀÉÆ¤4&ˆŠ~\–Ëö°#êÖ"O4³yú²·íO,7¶ÕÊÕ,nùsà»EŘÃVL;–,)||`R€ÉF$3–ªé;¸h£a}fÕ¢¬‹ey¢›{v5üñ#kgWO–ÅcÁY v0YxðÀ€RIecjl Ý'4ª£gÒyÂdùø@‘ÀdcT’1¥ÇªÔŸ[=‹F‚#ÂÒ5™{ø@Àdc4ö•Ž•¨)êùywÞ5™@>>P 0Ù¸D\’± M9;.ÐIãóÕõ›oó·×ï~ùñ›±Ÿ1Š(I×µîá%“‘” $ðèAwô¶ÇÇ£ŽKD½N&‘”L6F"Ê‘àl¼DGî~,Áö_°LÄÞd2ùø@™Àdcd" ÍG·MùÛ"¡`•¨qž4•J{ø0•ґ탡õK  (Ù᥆ )û^u×'º}ú }KA ï6ÉÕº¬7,?žI?ÖiÛÉ©#$Î\…Ž µs™É²Áƒ&”jDù¢Ú*ŒÕСœ£Ö49HŒ±ËTñ 'Q·RéÜl²Lðñ©&“ Ò ÅvÀzöNпE­LíN2FÝ gÖΛ&ÈÇ &"Ò¶5 öË4RÚxç»ÖeÓ¬šÿ‹Ç¡M¦«ÔL6FWÞ=­o°ËÕц¨¥{Êœ+Mkk(Ù%I¤Ußçþ>0ÕÀdcœfÈáMüm¹Éç‹Õ]±ÈW«&¿+?÷U¬xýî‡7ßü+÷î:ÿñ—¾~s ™à‰vþ1•~{ø0ýґ탡œWK  (ÙáÔ%šÚN^«nþ\VÍí:êÑ4aÞaJºû;Ì9*ˆìÌ`º¼ñài¥Q‰"ˆ¾9Ô¹OÝ鉛v CÏïÞüÇéÏœi[å2’Úå‹ñ=w÷8ÕÎ''Ë:˜v`²½‘a>=Jèè]æ·áYwùéù@Êp IX|| 2`²!Êt·ÏXù 7¨ïì^_ç?}õúûÔ« 'Žƒ¼ˆ¤/Ï];Žƒ~:,a®¹I–d>>0ÉÀd#žK˜-üœgâ,5uÆ?™0>>P0Ù˜ºL¢ºßß%^Õ³Õç¬Ì„!ÌÒ­Œìᵓ©ÌD"Fýûç¶]=Z£NéøGµŸï,fxùÄ®ÇI– >>0ÀdC2±óhÛ>HŠóÀüL³gL¡6®;I•><,ÀT#ª´áˆãþìÁ²ø8-6Åg¬ÐÚY÷T¢øð0QÀT#ʳfˆsuPôùë×çþcÿ{·‘t*ýσþ9jŸÔ endstream endobj 1052 0 obj << /Type /ObjStm /N 100 /First 979 /Length 1427 /Filter /FlateDecode >> stream xÚ­XMo7 ½ï¯Ð±=˜#J”(F€| m’Ú9¸Î¦êìöHÿ}éÔu‚Ù‚Ms™ápÞˆœG‘¢Ä¹Î”gÉIšÝ9M.‰«+jâáI¥¸¦¥¢®é©²k4Õž“ö$Y6xIdâE‘$S ´žz¶oJIÚŠ †üUµ Û| °^»I¦ûXŠbø°¨ëpi¬&a”Ö]‡zv|ën¬c¨>]‡‹Šë`C‡Ùè°1ªy`¿5´Ã†âq×ÒŠë`£©q¤³qPa£wã ‰f×Á†6ÇÁ†N×ÁÆ×ÁÆ0îÙ2s÷ŒÜ”‰É©¤f©©BꮓÔàÛæôt³óË¿Ý,/n~;øóowl–Gû«×Û+·ž_-ß/?,ÏØÌá üꨄZšT)ê*c¡ k› œzèä¾HËwû—û„Ø|óæfwqrµ}sr±‡ÿ³Û»óÝë“Ãöúð­ñøuüLü¤îØÊ¦™%^ë$íý¿øõõ\ÂZG\udƒÕý"êñDᦜ۪SæY9¹¼>÷þòä+2TjÖ´;wf!›Ý!wV¼ñ´kýŸ´;a&¬Öiè ¼šý÷ÑwueLŽ‚™PƒàÞiV ‚[£©-–F¥ ®ByµÊ®K¥¼Ze×ÀŒ†yÎŒŒˆaef*«Uv ¬Ó+B ÜY¯7¥*Á˜ W¢:‚1‘Úíq\„¤G©ãJ-c‚N p ['cý æIëo0&µ£vk0&hSI9ê3 ž¶`L°…!Á˜`O€e'“ÊBCƒ1©¹Ò N}« ³cRFA™Ž¬L¶‰ŒÑçØ¾'–IÖ²ÇÀu÷`LJÁò–ƒ1)Ü ®ÁP‹=1a[£›Áî)ÖBHï ¸3I ö3T|j5lÄ+lÌJ£> stream xÚå]mã¶þ¾¿B Pdty|A›mz î>´h³ýt9,´¶ìU϶I>gÑô¿—²¼¹¥,ɤG¼; ŸlØÔøÙ™gșዓe‚“ï¯þz{õâ;‚eb‘T&·‹DH$ K”±¯Š$·óäÍõ·Å:›ç_½½}ÝŒV‰¶£%kFs¥fÔ ; $ü«ªôõ‹ö…HÒ|áŸImébLhÑÀ•!0Â4^q©#¨ (Ø‘Ýꃑ©²ÎÙ!¿»;7w6hª/ u›'ã\à\²Ê<3†|qa rÞ«Y[7ˆFdW>ÈP°#±=·lÔ4˜²u™/—™gZÙxuæ x×Êånm¼ _z’î}ºÊ?YŽ<|!ßåŠjDpİȕ$6챩Aš²`b¿ZL:^à'žS£'íóÍ)ŸÏÇL¹or›¯V~#ï=ÿ®U±Ìgéj噆ÿåïËæ¡s?QˆðxµóŽ| ‹@ÁޏÑHKì"û¼~˜|*µCwYÕ—CŒgÄ"ß#Õ;ÆÞçõ:­ÞU}9‰wê‹Û‚B4»ò †‚a0VÈàð’yŒ‚ o(0}…±ÌªÝªö]&]ÞºÄ@´%XîÑ‘s0Øa÷Æþ—ñb MX¤þÛŽlÒùvUMœK‡§¾BsDe¼:}G>Ð; `G¼C +M…nkm2Tuœ(tsôÕÆ—%¾^µï,Oç=já¿òmƒªNU ’Çbê êPÇ‹æ Žx '¡Ž8‚Ó Ê–¾óíí/¾³óÚ<ùvåÛã’¯}ƒþݦÎWÓbݦU•U¡ž}û¸íɃ¶Ç„¤ˆ‰ˆÜvåÉ ;ÂnÉVÁäö-=ŸÌ9ƒsÚé®Ú—#i­ŸÐeVªx>hgÀ7í¨÷…ÿ”º‡`°8‚[ Ñ#3ˬî+7~s¦›Ào¯vÊ`ƒ qoG¨#H0Ø:0Š”¤½ ¾Wñy€Bj»eÚ ûÃÛÿúÚŠh$H¼3ù@[ÁúØJiD µÄ Hcæ4Ll³²ì$ŸG÷ûbäÏyþ"Ƚ°BBÄ«ÅwäMb2+Xs>à^g\ËšvSôÎÏg&è—¯þÑ7[úz 7 ¯vÜ‘3'l@c!7i}ÜlYlË|SÚ´ªçÖ¬—&´\ $Y¼ºeG>Ð2P°=v°úWÌÚ¡±=VõG&º¯×ë“¡s9’o¡°¿Se¸½È¢ì»í¶(kXYñGÂøHG,hy°Á ’§G<³@¨Ã+AsNÚHvÞ“Ë6X¦:W>Pw`° +·ñ+ÆÇ¬0û9ïÍ@HKE GÓµ+¨k(ØáŒ€[¼OýÞ<åmdMw®| îÀ`ò+ÎÂæ7–nsÖF½ÑèàÊÒ 6„Œ#Â>§t›“6¤f+W>ÐV`°!K eˆ¨Ï0Ýæ¸~£™Ì•4lˆÉµ¯|¨€™&l‹WÚèȇé vdâÂQ0ÝiÑ”çÊ* 6``ÆB5rúBÂÈ4Te³Âû“w»‚]vå&›÷­J¿‰I†–¾‘gzû…C×3‘Ïéúê]œaê8G#»#Èu(Ô€9™)ƒ{ºa=o¨u·Îª*]ž¶„¼ ‰|®ßÍä²Ä£ÙÇ•4lÈd$5bJO”þ£R&Ú89š±\ù@cÁ†¸“°F£*ÐûŒ,/O"ßáv¯Ãýùf ºÑ$fI’ñ6¶Æ/W>_`°!üâqI¦ ¡Y”GÓµ+¨k(Ø‘i– $0 ¡iwGSž+¨¼h`Ê mÔM®| 2 `G˜DšO|÷B•Õwe–Îï`ûÝÀÖu¶ÞúžI÷=äÑ\ɲÌ&>j>Û•åÉ¡œ³>IMÑÆ¢aG>Œ†`°ÃMŽ ›E«ƒÙlDñï'fûû¬¬òÂó˜E±¹xxâƒ0Þ÷*ìªî¤ðáîJÅíôÇ'lš§²Mý¢±ß•¤?l@…ŒJƒ×„Ë‘wåoþ|îKÈ>¾Íåk4B¸ò„€‚1¿ÐHi3q¾µœ(ß²rª¿º,ž?O5Αàñ rù@ªAÁެ½\"*Iè‰üsw¦A3Žî±uŸÓ»Þm´yõQn¹»¨<‡Þïš?Öµ”µuhNàÊ:ìˆ0;½âð‹ëú& ¿9´9f>õ¥(þÉ×¢,Öác6{çKÄ´Ž[X€7öý_{ßqixYR$i¼R{G>Ðû `G¼ÚÄ‚‡ß‰ç[lÛU·ñs81S&4„ )ãítä- ’Ðnæ´%/§Oƒ‚Rlyˆ#Öâ]ù@ƒÁ†˜3dŒˆÖjܾüòKh?ÕSkÈÇIuÃÚNˆnóüXlêȇ± 6 - ¹¢3ùÉN>Õ¦àÑ,ãÊZ vø*Ña¥Îž|\¤ùjê{öz¶`AE‰Ò·žè9¬ûÔW1á]­×v§žwÙü×ÕxÞàˆ:jÀùl¢"D…5Ÿ]•X}k¯ÀÚ‘4$lÈz#1"bÊó„ dHDŸqåu ;nP`šÄÙB4Õ¹òª‹ö¨ ÚÆÕÑ”áÊ* v„GT!ªûÿílð²UúÞ`࿉Ñ×VlìÖòÒøGHG#ƒ+H0Ø€ô“‰åÓ|þÌÏ<ÜæÑ˜àÊ2 6„ Ø:—ŸÑ™gÓF‰±L劇Y 5 æ2q,§>ï :§¡Û(0–¥\ñ0K¡XJ3ĹòŽß¸>ö¶HÛ?õæ-Næö«×7:Ù®U NVÉÏþŒÿR¾¡é endstream endobj 1244 0 obj << /Length 2650 /Filter /FlateDecode >> stream xÚÝ]]oã¸}ϯhëíL~ ÍC·í,ºØm'EÎ Å–cl9•å ¦Eÿ{)SΆ²$“¾æí“ …::9÷òòò’”qöá웫¯ï®nÞ,3ƒŒ¤2»[dB"iX¦ŒýT$»›g'¿Ý¬‹ùò«Owß6­U¦mkÉšÖ\)¤µ`û†D|uM•žÜ¸"IsÓÕïï®þqEl#œ‘@í"›­¯>~ÂÙÜþíÛ #ntö¼o¹ÎÁˆ2i¿¯²W¾Â-kŒŒh¾6ß¼FfHaž)®‘´An®Sd´ÉHÓÚdU‘-‘Nâ·Ì}üË'¼Æ’ÈP'ëLHZ£ðÆ(R!.,OAáÎ0ÿÞÛÁGð­ÒjÇ”ýy:í|| v`²{Àê!s_þ2ª&·7ë¶Clw÷óâ‡éb•?l²-böñZb<¹m/váÛ?ÏöýiúPÔS‡´œ½`“ï±ÀƒX{g÷†wãOÞ<ÕËMyô4üŒ‚=ÔȯBÝŠJ¤\gOãV>>ЭÀdcÜŠa„)un5Û¬ú½iÿƒÕ&)%Ó©íãÕ“Q›„›‘«Qûùq¹*úôn:iÜÛéþ¯PÙ1GÚ>5™ì>>Pv0ÙÙ•F”Pû0n‡¢ª¨Ï™U‘Ïã‚cdÖÈåWwŽ­“ûÝ"<O¾þëû‡ÄSëH ÌÕ:ø0Wƒ“p5i"\:W[.†º÷°mÜó×m Ž RÛDטt¶òñ¶‚’í±Œ¶_•µŒ–ˆhå,sÓˆ— ÄtvMÆ]þå],;F¼j¹µ½Û³Ó`ä(ªjS…5ÝÌf»ª*:ÆÎx0꘨ãÿêêM¨K¨}fžÌ#¿”¿ØñCQÝo¶½Kq °.ñKfShT0Ù«cÓIkU)͸UO•qÕÙm=/ªê¸Üº7P\q`ËÏF ÁÀö“ï ãÃÍË£ZÅ»è ó.Ô#…K1“y¤ôH0Ù$¤Ùo`]Rp$õpü*Í îÏd:ûø@¡dG¢7·zP·ý@P—/&ÏÇŠ&32Š”¤ç†§¶,ü|<ò|øÝûéw~óÇ?}wÁ‘h$HºÝ| •ÁdcGJÆí¬õÄ4(dÕt»üg±‰^Wû§MkPÄ.¥Nfaha(Ù‘^ka4ç?I‚—.§Ò¼ƒÓN6¢Wqû©µø¯öª t*®]æœÌÀ>>ÐÀP²ÃŠ7ŸTÆev nr¼dÚyð@é T#ÒŠfÿ®9例£õÖ€¼b°cmp±ª§Eähùfü®À’b(ÑÉÛ·ñi—.#Næƒ>>Ð Ádc´Tcó‘ÜráõdVöñV“™gsû/àv®òç‘ÀÑXûœ,ÕÄ…X²ÜÛ5f7_sÃÇð(8ù<ªs—ò'óè/P²#1€ „ ùiReæÒòdšûø@ÍÁd£ú(ãˆ0z™NÚÛGµ ê¬7Hæ/>>Ð_ dGú(eˆ(™yc—®'ÏÇŠ&“öŠ(i«û•é<¯w븙åq'=uèø˜IÔ<”™fή¸ÓÁ‡N6Æ ˜ *ÄÐa;kÖX»Œ8™Æ>>Pc0Ù™±T `ƒÿÐ!«ÛKŸœ+§³Ç¼„Ï(˜Ú§ÍÉ\Áƒz”jLªÂ”AŒ©Wá³·&÷&v 6*J—µ&3Ž´˜l”y¤FLéÁ`x|ž‘ —“&ÙÇŠ %;ú„BœÆe_Œ»”-™v>>P;(ÙáB'ãq¹͘KÐ’‰çãŃ’ÞL˘@ÇzuÉP2ñ|| xP²ÃgŽåHðÈI#.ËI&ž/Y'5n O%F&œlÄyv†)’T¼¬ÞUe_n<ÒRíÆìdJûø@¥¡d{t}ñ‚¤Œ\b¤j?<'Ó΃J—Šj«„tƒm2)|| P²#n$mâÆuÈñ¯ÓÞ%ÜœLS¨)”l_È£«†§B‡÷¥„»{\nß¹,ß²k7Ïë1 a&Ëoûˆc£•/´0ˆ(s^È9{½cë´á”FJ§ÛàÐÁJvxø!ºëÛÙUèŽ"›·n§Ó΃J¥Q 'Š BtdÀ¼¸¡²µJW“ëà-‘Œl+È„^éãÅ“ñKnP[±\ëmQG¦‹Çöy»ìøñ´á×Y‚~Ì–Â\ÂÌO|| Ÿ$#ÛŠA]Ž–L (”ìH¡ QÍzWJT@YÇ2ø±ex±ßåEÝ Ü`óÅ®œ½(o¸²\­BËîcÕî²ËQåþz¹î&ø§û:qIh2÷öñî %Û·¦ù‘“†'·>*‚ù%ÜÆÔ¦¡¯9Îë‚ËÙn•ÂÞoòj»"ô‡À¢ê2<›ÛUeï!Àk<«Ä.)Oæ¶>>Ðm¡dGÜ[={­#Üöh•Ä^ûÅHÂè_y¿we’#!Ì_TjÜ<"•ù}x˜õÁT#òXÃÇò+¯~ø¦©œ¶ãÏôxhIðÓ7çÖ1ûÒïñ;FKh'OcDDºÂˆs>0Õ ýäÔg$Ó qÞfxÄWS’öb߯qKÚ½ä7öGÈþ07ý endstream endobj 1174 0 obj << /Type /ObjStm /N 100 /First 973 /Length 1163 /Filter /FlateDecode >> stream xÚŘϊ7 Å÷ó~êÚ²$Û0dцì !Í¢mÈ"¤—R™’L }ûiÚ»dÑÕèžûû,’ÿœ;­‰–ZZ+ˆðw”Ÿgi=„UÚtEkaZa[pé-”^º†"EªÜ Ð" Æ]ÁŒ¢=”Yt†²Š±+V‹ W¬•ÑBá2,”^f EÊTÙ´ÌŠ•%Á`Ê3̹öð±ŽhøÔ™=j,"|äZG¤®UßÚ`¢éð€&Ó<ÂxÚý /…ÆÈŽ;7ñ…™sã¦144õ††S 9&˜+4äX=8äX‘ àÊ^| \ãFÉ<êˆ,4AGjhŠHC3DK‘cÂ]B›ˆfp«°x͹"‡xÑScm¡!‡ZhÈa54ä0 M½í¡!Ç4sC4CCŽÙ½œxŒ§—Žr,v %áeó¡ì(shX4UC¬£šúŠ Í­Žm”Î}¸6ÍhÞ*½³k\ECÑŠ.-4ä Íf 9TCS_¬¡!‡ #†ê6CCŽÑƒCŽáæŽÓ×wä˜r¬r, ÍW M}„†õ_WE¼‚Ä–B/ùBblñ 5F£„£ÓÏÆ¶béˆVD±¼Î±O%žÀxê{•Q0±.7··7—Çåóž~V.?þôsQ#Ã’‘Úˆ±+ß~xóæåÍ£Gÿ ÷U ýJÂcZ„mRÇâÈÁ:H8ÉŠ‘àüÈÁ]IkvdR´"·N~ºåàÊdœì ¯F~ÈäàYiÔdO°«iH²'¬“|Çç`4{²)Ø*4G²)Ø4´Z²)8`hi²)8ûh­dSpBQíÉ¦àž ¿”rðh„;! [%¿Ns°,JV÷ ±$û×x®€$ÜŒ°±’pUê–lÉ’úEGžÜ½½/··åò¤á«ñð âQæß±_ýáº<}w÷ú‡ë}yQ.O?)—ç×÷åÓxÏÿøýŠ/^ýz½¹|‡±¯oïßûÉ#ß\ž]ßß}x÷úúþá4íûë/¿½úöîcyQ!èRb)æz‰|¯Þa?Ë[ðŸ¿$¸O/ùMÃ1Ž»,Þ®ãŸÓ•d“{¦¬–$Y©ä–%÷J•9 ·EÕz®“ZMÎÙÖ w»9x¹YËÁM噄MÈ]tÖN=Yfêš…{£¾’=1®$=Ù¸Gr™‚uMÒ¦IxRMöD‡FO¦dÙM¥*dÙ¥ÓàdOð;ƒ°c“0ã©Éžh«4%ÙØMš3Ù™“'7•ŒA+[:±Aµ&{"ø[³S¥º’=‘.Ôz²'Âü—enLþ(Mü>›ø|4ñ;øhâwðÉÄïØ£‰ßÁG¿ƒ&~Mü>šø |6ñ;øhâwðÑÄïࣉßÁG¿ƒ&~Mü>šø|4ñølâwðÑÄïࣉßÁG¿ƒ&~‡Mü>šø|4ñ;øhâ7ðÿgâ÷ã—&žq~}¥‰÷ÿå|fâQ7Ÿ÷ÉÄÿƒþ/¿…&~Ë~iâÿÚç΂ endstream endobj 1321 0 obj << /Length 2643 /Filter /FlateDecode >> stream xÚ½[k¤¸ýÞ¿M©*šöØ`“M"m63£Ýhe¦£(š•h ªÑRPË£{ZQþ{®TMUC{É—Æöåúžû86nìì켿úóÍÕ›ws'@w¹s³uG<ð?€«Oœ›Øù¼ú¡Ø'qºþzó“ìí;zsOö¦¾„ç‚0Õ‘ðõµë‹Õ}!œÈAWoo®~¹"Ð ;äôF2'Ú_}þŠžýä`Dá<¨ž{‡Œ\C;s>]ýã ­1 ˜lÊËû®dù˜:>ˆ3WJ–÷]ˆÀ!²wà”‰³=+éYùFó¾üVË)oèÊâ(pƒ_AY%°Ü9ºñ±•˜¨„‰ûˆ2МP UºUдbœÏ×ãÕ̰¹? cʤô‡µº`Ltó?º[Oᾨ<LJ—ƒª/ß*ke§@å äü ÛC™æõ°gÀªê8)Ëá˜×S‘q9òux.ƒL_¾%2¶ÊŽà  éFØu5¯Î[;R)r³KêM´áš'emên÷0­bf¦Ù ¯Ä˜xôü[óa÷W2¿›Š1aÈ÷ùr÷å[bl­ìœè#²ÂÅ:ë5e> ħr5 L‘eC£/ß [e/),Á¦Jýw¢ñ`‚H0±˜ñò팷œ²Æ¨U,gŒ¾|KcØ*{Þ“¸àˆ_{ÒéICžp® b<зw.¹‚ >¨Ðéú¡ˆÓíã´C®+´- ËÁõŸ.ˆ»0ÏÒj”dÿñì0 úøÐÉÕ‡sÍ7ƒ³/ßOkeçÊ)rÛàx! ›,É_j¾‘^ )ÓÔu1Hûò-!µVv¤`!¼|<Ó ªº8lª2õ€g\àæãï7?üýŸ»YýÍ\msO³ÚÅ¢/ßÒ!¬•Á÷9u‘ÇÈ‹b\¡–»ÅwYÄ·«‰òbpöå[Âi«ì…höòwæ‚øˆÐåÖ¾ù–Æ[LYc ¬‰òbÆèË·4†µ²s*õéÙÈxj̲@³Ã¥,=ogikeGìzÔS Fؼ˜eB3±ÅŒ×—oi¼Å”5Æð‡YÌ=ñ–¦°UuJÀõæœK;Ö}‘NÜ|Uì›8¬›ý¼]ö¬ ÷‡lSOÜ ÎlÈŸjM\õÃJ!O²MšÇÉ·Q®81ȸ¦B‹9V_¾¥gÙ*{Á‘8CÀAµ#MeØŒi*²˜ñúò-g­ìŒBÊEÜ„e\4·ÙÄͬÃÝc•Fa¶¹³&y)Uf#ê-·òÈ·Äe1e1\Íi3F_¾¥1¬•㤞‹|nV=oÒ–œþ$X)j^Y™_(Ê0ß%ý·ÅpàçËûSg‹Æ×©ßŠÑdn1‡êË·t(ke§8!ò(‹ îKÀæCâ>ü #üÕð™ó­—a1¶Üo ß#keç=Ô,ñδxõÛßÄÏC5ºÿóê™ ½\ÝæàKÍ{—Âw ß_keÏÓ6Hˆ™ K*4×[Ìx}ù–Æ[LÙÖ.âdË‘K¨yÍÄàë_Ï2¤œ ¿ýVvs—¬¯]†WUÑ”‘iGElZ_0v3ÓÞ¥nÔí˜ð¶X¶º—Ì­CYìÊpo䄹nÜE4y¬›©y¤O9féík#³6'ÁÏNª»Ž'ãd_¼©›ÚCQ{>²;QXDøcLg´¾ö^ý{ åaU4Õ€/ÒvŠÇ™õ¦ÑTi¾›êÔ@ï}Îm€|ÆQ€§ ¼\IÈ·Œke§”shŒRŠp`’PMü¾N4¬è5«7×6*¢ã!Þ9£ö3/œìö|$ˆøÿ$&.®|'“ŠÊ8.[…ñýZ^ò(‘éÃåm€î“²Ò]tè“m“GuZècÒš‚´¦fÂ1òa.&YtNÞ6ÛmRn¢"¯“|p®d8¢ ×H‘ÔE)”ª¥•Ö¬©’m“u }/ºK¢ŸM·­¾3)“þÈ0ª›0Ëõ]Egõóü8D*Dø€fׄ &€]ín×.$²­´"LªMùmÖƒ¤«“o›³L·ô1™'6Ã`ƒc6.“0Kî‡2b’±ÊJýîåŸ"“xPqé ß䞟éþp—䃔m¬Â°Ò§hÌ”” ÍœZ¹·½éÊã¢å©×õm¨ ‘ _BOÀ樒šè5õ²]°¿‡D»”õ†1Á…ïù2¥y©Oìw¦W;×.E7¡ñ)‘SA ûXO{8èÖÊQt8ø=k{UÍmœ–ITå£^HwâT õm ÜߥQ£<2ÁYAå¥àšcÀýÁdd…i^é‡áøTÂL´Z~|ûý_>¼›'O;Îfh È}Hë;ý¾8©¢2=H@+.Ôeq¼~¸¨‰w=Kçž2-ãKʤ]žP:$I"¿¶(AÁök)}âÒ ¾~iÒ*U©KyE¨¨4ÀNrB»¦ OO[×<ë0²(’–äÉ( ×ѹQýØ¥rbš½™ç¡zDV^WÞ§‰ì÷ {H먞"ô4tjýÙi[US pçXz“ pGyõSC¤ZwidšááÁ*­U—ôS¾ì…f"©t½=$iý€KKÝÔIA‰;™W%m¤Pç§üô¯5aR/à«/®ëuFÁOª<$úºO¤²¥ò¥lŠªJå6«úõsšÇ•nJ³É+,t“r»&R!É*µÀã;•ÏÉF–k²Š«ßËÃ&. ;450dêy@aëö‡;ô Ó¥ª!îA¾é•Ôj¿F'ÎÚlr©\`ÒÏŸd²SV>d&†»!s,ÂǬZõi?¬ &HÙ3÷S+Ed4†ÞüJňª'&ÉJ¯r‚ ­N¬=ŸoUþò0˜U9ZUë_ ÷º¥À”: …ñ¨Ç£B>‘A*¯’È+#?Oô Ú9(eLÂíŽsUª•…QMy¨”Ýñ;# \,–š&A(©Ik@ù«°tW˜\Ð}m\Œ9VÕÈPVDCÙí²‡Åé.­ÃlÌÏÚcµgdžy˜»Ñ¡' Gsôé꤇Ôž[;ãbŸ:nÔêüŸúÀ€m ¹- !Ìv8eÝá*Jw(9öΰªvyN:«XòÉqíOÆ„1¨Œ¢·;@VŸÀˆ†yl9èûò UùÚ hsž~‰‹»{@\z$aP<uJµ#ü¼K–è˜vçÄ¢[¦’„m¤`ŒfEŸcW‡$JeµHŽ{0qrHàO^gýü\ÛúA¥‹2éÎØ¿•R :ú˜ÙÜÿ*ý>öm endstream endobj 1308 0 obj << /Type /ObjStm /N 100 /First 967 /Length 1506 /Filter /FlateDecode >> stream xÚÍXMoG½ï¯è#\ÓÕUýYHD‚”H&R‹ƒ1kÇŠ³‹ÖkAþ}^õb’ Tˆrð¸æí›®êzýYœ´‡8å4Û}¼§À2 Ü¢!¥äê@JH ’»-hÔŒT )h·«² $…Ü"¡¤h(u 9TH ?è¡ÅfF - Z.=´nBèjœŠÛ@s”áëÀÐ.§!RF{° œÌª‡èa,1ÁAE¢†Y·¥¯q`•áUÛÀÐhNƒŒ(`ÁGak¾áQÊÀ@©q`ðQ3ÃGƒÚ ³d75^Ç£µ¡ù.ƒ>ÂESLCúcX ‰y`VXƒJÑ|ôK‹u+²æ%rH"K°ÚÀ$$Mj|h±îGøÈ<0øÈy`ðQ¢É¤ø¶h[±$´\ÓH¼uSJ8|e_ 4I³ Ù"ÙÚcÁP±lš—"ËAªå쀄ÛЃdÒËð¡Sø V†ejI*A9^…¥ÃØã>0 ¾dj‰`ô ÉéT#ÃJ°êÀƒ”+| US QbŒø&Íy`ð‘ûÀà£èÀࣘZ¢ðQM-ÁZëÀࣞc„j+>>:ÛÂDÓŽY«„c< ¸u` VXÙ&!Fi¶9ˆ1šÇDaa`¬f¤ou|¼šž†3H#˜Í/Âôó/¿†\¨`U‰‘ÓÍÝÍͫգGŸ's§ˆ™ç#ÇFŒá"—^‰Ñ_¹bL¹fJPßG.J¶†øÈYÊú¸šH²—,L¶²øÈ)’ŠS“;iuj’{£ŒÙç#·J9;5ɵZw’K¦"NMrV*Þ†U¨&§&YÕâÔ$'¦šdŽÔÔ©‰öN­95ÑÖ¨'ç¤ÂÚDÝ›:-•btj¢ø½!k¦Øš¨(a=w’“W§&ʉ{5‰Lvìq‘¥G²­ÙG®lñ‘K#©N%WRgæ°‘m>²dÊÑÛrRÂ,t’YÈŽ†>rLT’Sœ~¨§&8÷QNM°—PU§&8SmÎI•´Róî>I µêgêì“„zvŠ’¢PïNQpÆ¥(NQ¸%ŠÕ) W&f§(\"qvŠÂÚÉ™e–FIúáÚAv£ð‘¹‹}ä˜IŠS’®¤ñEžm7ûp|¦gŒŸêáظ™ÝÛlçêÃ>š~Üm/N×ûp¦Ÿ> ÓËõû}øØÞË?ß®ñÃùÕz5=AÛëÍþÖíl߯¦ëÛíÝîbm÷öÃúÍõùãíûpäŽóŽÙ¸6Që¯àï|‡Fìbò¡“Íf‹FÏ÷ k\K>|o¤{Cî ½7ò0>‰y4»šNï^ïÇû÷×›ßWÓãíîÍz7"‹¯¦ï¦çÓ“3/Ö™ ¤!A/Å–®Xߪڢ/ïX‹VðNF‚OÃôíöå6@ž—w›‹£ÝúòèbûztµÞ½¾»¼\öÐ’=à\D¸Oþ;"lhØz°z!"ô:aŸí¸ráºL…-¢}œNއ‡éäb½ÝL§ÓO/žÛ߃ßöû·ßLÓ»wïè(mwWâúâÄátqmOÒÇa ºG܉RëólÚn×#BÊ_‘Æ6[q\ãÆ”Í=všqwï GëþIŽMl\±~ul„6ƒpº+V¬¡œt6;o®·‹yùrÿÁ®¼÷þkà–Ïú¿½Þ\ݬÏ7ç7Û«¯‡ »{c>‰_p±¦túïô±UÒJWÉ#Æ9Çц¾Æ¹ Ë¿Ø÷·ä’/93uur5Roì$/UfÉKU€YòR`޼X˜%/UfÉKU€YòR`–¼P˜å.UfÉKU€YòR`–¼T˜#/VfÉKU€YòR`–¼T˜%/Tf¹KU€YòR`–¼T˜%/UæÈ‹U€Y2hö®š±‹fgÌ‚¸©Sma ïp¶KVîΦ„ÛÍ?Eù 6f endstream endobj 1380 0 obj << /Length 3569 /Filter /FlateDecode >> stream xÚÍ[ݓ۶¿¿B}“Ò@¦O©c§NƾÖ9O’Ì %Q:Ž%RáGœë_ßv‚Å»³3mnD °»Øß.pl±_°ÅwW¿½úêgr‘© åâv·2i´P)ü*¾¸Ý.~Z¾¨Žù¶Xýrû½­ Œ–‘+$Q“™\­®C•,¿Â.¹þèêåíÕ¯W±ïáK±Ø¯~ú…-¶Ð÷ý‚qš,>š‘Ç…à,# χÅWÿºbDµžEø°°O?Ìq"xÆcFÜd‹Ÿ®£0\îëª;5+ó¼-öE›ðesŸ•e~0]Ѳ(Û Û3Gȼ%¹H®„GÓ­·ùŠ‹åoÅ&·âóIŒÒ€G‘þ%̳åÇûbs‹]̬nˆÄ–j÷­á²½ÏZ|ºÏV![þ¦)Éq¦ö>Ç®&;æîã:Û´y]4m±i‚Õµåò•þ¨ª5ñ‹kžª b <€H…@ª ƒ¿gÇÓ!7 D>Mñ²êÚSgèËCQæ 6,l\çØb˜Ë·Øhå#ë±?§ðæŒIÆ!ʘXÛ¢Î7mQ•ö“MŸF‡òîf [¾þê$#Ζ·÷]ó%vƒìë7Y‰kj8v‡¶IâÛ`úÁ¬ ¶Uôy†?§¬†­ëYM³VY½ á*©DÂ_—`f®mgP¤ÖêiUˆÓBK†¯=І\êVG v /ᦆ:϶ؒ•[lúXm›Ó¸®)Ê=¶uÔm»®4ÛÖEã®÷dåï¾Ó6Εo@aDIb-hcìûn[TwfußÐǶ—¤”±ýòg&üq"xÅ—@%_nŸHG(ƒ8âd áÄqÄI4T-Œ|–Ä0 ’ž9Kâ×8'uâ¶*êJn†ûóð(`|ŠºzÅ“% j¼¸ÿ¬¤¿8}Ø¢r}10;ÝÒ•M±/µéè7M˹âÎ%6?è PT-‡¿¡rPCõ~®ÜVœ &çâO(„‘ ’ ‚2¸½·A|6;62€ÇÔ2´Í/F&(¥ì8p,' 6€3Ã’àè'¬CÇTè>U@n^Ÿ…[è2^U``ƒ×¦Û€OkvÝáð€-Õ)×Lã§çឦ¹Ï¡gà€%.‰#õáq<ˆØ—d¢w¡Ú”|%Nch/§f‹yÀ…<“°m“ë,Hä(枪¦hÑSPeª•Ãã½™%” AìÛ›¬¥‘1ôã@1ñ+t×Ðg©Çüí£Œ0®(±½7¦mJjQ"túÚ=%2ÐÝ„«Þ~Ë6+Êf@Df²CG k dûQ < "Øñ@ åµµ2X~2j"7&0¼ 0¼³ß p‡n"¨1ìŸ ÷[؆DD ø`CâS#ø‘Š 'ËíŠýlÀጒ§"N”çñç¹ZËô¤·8,Â?¡·…mõ¼-d.\FSªСw•j.Y b‡÷aÖI-)(7¨¹¯ºÃÖGVá2/4†´b÷w_Ê@¹í{qóæå·¯ï^¿ýçûÛIq(‰¸«É ÁHÏxóþöÒ”*PÌ!–É}Цÿp†&ÃMž¡[ÚtG?ö™~3¨U’ ’bhÌëCµù@F·«ê±±9sÆJý,²w½U™4ĪÄq›¥úa{këÎzó²-,Ú7ƒ'Ë›ì÷˜r„«5%=ô¸Z+¡³ˆ¬Ì«®Ñáôr,“ j9aÒà.wE~؆ó¾ôZ ­Ûó-±FÐüÉp6jš½Ç–”3ÄžQª î%#÷üúî ÉÀÀ³œs4TØ¡1‚ü»cÖ|˜' ¨m.®ŠÙ7 Ž×:kò;R˜ÞEÔëef¢½J<]VérWWÇ)/¥@N‰³y…)©JD} ó 1ˆîòÓfüë”[‚¬/u.2â“n4z/jÀ ðŸ5N´ BM+¾jÔaÞ‘+‡ι C;vú-žÒÀ·GAc,M>1S Þ(Òu¤ù#Ä„ž Ê:“ ‡ú´«‹=9è7ƒÆáw¸' !ô‹>V<ºƒ1˜zâ×µ"†âÕËðO¤ƒ³O†ÉD=¢F*vdNj‘€Õˆ‘¼Ýèêƒðµ#VðÇqX”“Ñ‚s$ž¨6 ¶n ¾zÞ&o‰†Î*QœwySÕuÞœ*ýèö%)·hK@¥™Ž£à"Sœä ³€¢dáµÎh'“=s¦¬fÖÍqY/DI4¸/JJßé”| ~„Ô0³KÃZ›:ÏíÂÆsÒsªC.¨¬òa9m^ÜA„ÛNS9qޥס ]o±5íV7]k«"vKŒ³u® h]3¬†¹}Ýçe^g‡ËÅbL¬›¶îú„t`:}?AWƒ³3ñN£«ˆCÀ X!!Ç“q½G?‚U›l[ƒÿ2;T{zöbB…a~ sÂçÿ¿œÝ ä⥃¢FbÏϒ婆ÂS5ˆ)Y›a³ ®4žj»0&s~apF`ÆamŽh'ƒgIŸ+™´IªÊ¶(»ªkh!OT:0dÚæ®#H_Á¾’§]Ç‘F)•W›&3eÄâ-e1}e°’@²Öcœ²Õº cÑž¸>œŠM¦ÏÀ¯S[B¿œÙ‡lňKW n†U*O8-Òt:®çK6$\S¼±¿$Ôq©é)s€EѸT:õøùh*óK¥``I<¹,ÒIæN!\° §KƵš0òª&ºßVôÃY­æòо<3Èè×üPúÝ—T*æ¦R0Ä”FWúš6ˆâbåæ–Ð ªP3ªL6݆¬…Ü„` >Ô·yÂ.‚qÜU:EÅ%kì€E{@œO@¢8ŒïöÛ°s!ÉìóhwšßM¨H9AãÔCÓ êKè<¦<$uSÇ¡‰Âì~ñR <ü'¯«kö4 ÜR(5¯æîŽþ-óaƒ›`¿‚=ÔÂŒÒ8Z¢éN§ªníÄë‡Ñ‡´Sà•UÈI{|3ü¡Ô<Û*àâZ0@†ÑY½È¤Â÷·×>Ò%Ý6Ì\6`Ñx¼è6“<<Œ¾ïyÑ Ôû&õ?·~ *±qýzŸ·wå‘5_¾ÖJ5u_ÄÌÖ§Rˆ¥e$£ çÃc zÁè*'è2‚Ñ2Ã84xæÚ»3ÐÿÜØ ë‰ÑØ1ï@Wïœ<÷ ­Î&Ïjã 4q&ªBcfy¾>ä÷ÄOUØ}&_úÞd·É¸"æ¶ûqî¦C¹¶Ê‚Úväë¶y›‡¶0ÆÛR RÈ[ÑbdqùîFäÕ’!Ì\p’©à¾Êóí^`‡ƒ!ð ƒuc²íi78󯟸 º¦ÁúRí7ï^¾ºûîÝÍû·ßÎ ^ ƒ*\¹õi‹ Š,õâæÍ››·ÿ“¥¾}ýêÕìB«Ô¯…X?UÒ¯»›onÿñòÝü’i ú«[õî*Pñ‹ Wý „)A%ãh©º›4w»C¶Ä· Ä\Í$ãtØI—WFØÙ)m3ÊbG¶·~˜+;ØB»&Çw&W× ×ø!Oõ%s'Çfwš¬·˜÷£ì@÷¹ì@¿˜ì@¿¦^W7³WؙѻeQ?Û¸îw©‚î Ta@ÝsÃcšátªðøEÅù{#‚1sIü‰ÉBt~{e@ÅYa‰›û<ÓǺÉ8UÓÔ?`M·߸âËNßútú }äã4¹4ÈÅ·ËCü¤AŸ\¦sIÃlÎð.ÓXó£Î»…«Ä£úp×scŒ¸Ê?¢Fc&Êž­ÀC¶®ÌUv{áLÅÃr™°É~ì³¨ÄøZôSíÏÌž{I(îCgþ+ÝH†ÞŠúˆˆxyÌ~/ŽÝ»ÑªFÜM•·Î*RÄÆs(g™ûV‡ÎcQþ‘7´"},+&|&pg3ŸSí¾—Ç€}B>T§;öÉ 9»§5¢å ± dÿŸkZNé|¦þ·$Ö‡™ñ§ükÉä)DÙ endstream endobj 1423 0 obj << /Length 3599 /Filter /FlateDecode >> stream xÚµ[ݓ۶¿¿Bo¡<L€ßñ“Ó8§Ó6M®'sCI”ıD*$å³ÚéÿÞ]ì‚)êNgÝ=øËÅbñÛ/@v'ë‰;ùpóÃíÍ›Ÿ¤N‘„*œÜ®&A(ÂÄ›D <#9¹]N>9)wÙ2Ÿþqû3RG“¨C©ý(±§€™&”ñt¦¢ØyCJüèæýíÍŸ7ˆÜ‰ì&Pðe0Yìn>ýáN–0öóÄ~Oî5ånHW(/„övòÛÍ?oÜÇ¥¤H|#t1õ]çËTNVÕ9¼ÎT’8ó¬¹Ï2ý;UŠÃ÷4²L›”Z_¦*pÒí!«‰,-–4p(é6ŸWi“qÏ~3 œcC?Ñм©il‘¶sÒØ>«Veµ3ßÎôl6<¾þ HZkµ‘ƪõ„¿~ÀeËÈZ¶/¡-£þ…Þ§»¦¼ÛoŽÄÃèl¨°ØašwþéÝšÌ]9™IÐf ªà2¡d(â(È´ªÊÝãR%}9”ê{KJ%C#Fªey˜o3F¦´Y©ÖŒiwœäNÆÂ•=ý¶Nwûí]Û¸ ¯©É «´XgÔóJ·y¸ÿÝ.ýŠŸâZÞÒZ’X¸‰ä¥°•µßŒ¬ÆJy¢Ó©Œ­×ókŠ¥pUo£Ygϼ"ÀØsÔÛÛMV1¯Ô4j˜¦››ûšê°h•67xÏ z‚]ÔY+Ý X›´ð-JîY¶Û#óͶ«Y†ºùºß¦EÚ”ÕñûáÏLI!ëG© Gp ÷É'0V]MŸÝ'çûéÌФsÕó|^¦çÝ2i`QMšL–n·D•è"ÒF;,¡ÅâPJ‡:«¨c_•ë*ÝQ÷&eVMI£Ÿ‹ýØ=O0/†OÁHQ®íLÀì=·…J¹Ï ^­ýóÄ´þzb¸J‰Öâ»haé…T‘¡<_òE&¦³ ô „Ðxqßåðêv¸Z ˜2«‹ïó¼Õ›tªŒ‡g`”ôüÝu*´¦¼>‹<ëâ ™y¾äyÖYSÛ|µÿ¶8Ïo¨²¼X·àåÙ¬U÷”2wâšcøÞSh»‹!À.²ô aÅSé˜EÈO½U¶ëËŠ†¿) ©JœÖ³ÍøSœPoŸ8ÿ(¨sWÖ ‘¦Õb“72x 5Ô|7 ùD6ºÑú¡+æ /˜uxŠžsIq  ÈZ…£8 ,‹&« ܼi8¯Ï"´‡›2Rƒ²¡«ZŒåèk ªQ«K$£¨!ÖZlÂ~,ʪMÑ”í¨ÖÀ^ún[¼š'ä-öº]ÕÀ=kÐ,ò{Võ‚Â)ÐPL6+€Ä¦Ü.¹Ià‡Æ./òÝaG/”FaoúµëígPþ û‚wð‡ü==Ö@ŸjÛƒ+^Õ‡ý¾¬(3ó9»ê¾ZÊŠŒ§(W½±ú0ï¬ôõ9ˆiñeí³EŽ®%”‰¤åâˆNþ&sfÿpXç8<Ϩ<8³Ê &)wó¼`¯÷y³0ç‹Â1DÁ ç|…wÀwJ¨ÂáV“ÄH“ÙpnŒlœk‹:_-8µn\Ö Íî®Ûß;×Õ ‡V6´›ã>;“C¢í÷iz¬¬þöŒ;Ôi­& ôA£8×mSvhæ Á‚ééQ”€aC‰Ë±k€Žûýl!=2ڀKaàÒd^ ßž9™÷!§–ž÷ÍÉ<$ª÷ŒÉ<8Ð*tÀVBHþ…y\®®´µ‘úŽsÓeƒ*VIø°p,QIO`݉¨d|”S$…NËä4/ô]ÖÂ&à3!WŠ¢þ†°i‹Ö¼~‰ÆþF6–Vy¯ŠÜÐêHc$4Ø!"ºæçI-ïsž¨õ>IБ‚T"<)û¨õ ä’Fó/ñ>¦;Ó©¢IÞ™ÃVëȾ i”…Cã¾Ò‰‰îëÛ‚k7½ƒýÖ/¡Ú(Zî¹c58q]gEVå‹Î ôÚèð×€p Èâ¯1 ÈD£ÄÅzNçÄZ ¾PC^/B?vsÕt5ºÒ‰DE/;|é’èé%=#èÄk %’Øë\Óȉ>ïíØ`½CŽ~Ui›«Sn$9ñ©Ã,ˆt tî‹-ֶΫ¼^6µ-Ó¥¾i*Â@(uÎO™s>79ž½÷¡¤sõP>O€äL<žï~ù(ˆÍGÔ,ŠÊ`½š’z¸žE¡‡†W˜òBÍÆh =‡AßÂt‘ëCl„Å6tª„¯ýÄ{t9á›ì:(9ÅVgù^i¥DÃ|tlÐß•ÔÃ×È<|æšqY`¤Xªt êZ¬•ád‹Ê“2Nœwã—E2ên|lhiº¦»`… *• 2k^ó„(¥TZJ¯g·ú–O˺0ÍÝÝ Ê{2å=ßaüPâ+Òæ=ER×á|DŒ‚ªŠïIA¾ ûãwl‘pU{žV‹~³©¦塆UŒeb¡†[—‹éË‘ ÖÀý&¿Ÿù€Ø$Júº4ÉÎØT^"TáÉÞ#_gL”>À˾*Y­/*bi.*"ß1OrØXѳe£óÆ´u„…­æ·è‚OlÎf*®¥x¼7òtæír©¿òoA}èTVÝÓRΧäè©·_º‹½|—U¥J¾š$B7P¦G?X4Ý•Nµ"†±.ÃÞ"mC¹X<*ÚVcì$Ðî+œ:ïä‹qÝO|0Ô$"N¼6Ä 9ä(?†FÏ`gÀÐêî[jvNaÒëj\§%Y¶4º2×k§¾\g Ó“ ß»Z«(»—'??xTë˜ÓÑbäš™}CR||ü:Ê‘ëCäv…’1þ: ûHµ ˜™ v’I•MVÖÏ¡úÜÆ{O'ðAb& Æ©¯åO¿Äð7?åºd›¸=•<ƒ°f]³ƒô2Yå°‘hxz¨õ“úØýËÞÔ%x£¯ñ‡ OÜs×Tµ/¶ç}þWîùÕÂ>eÏÝPDæá…öÏ÷ðrld×/IÉu–}©Pæ'S—QÿT ßòôÄ8¡zô¥Õg ®õ xJ{þ‹ÂéPè«‚˜>y¼½0QŽ©}©­ë³¿në®õüJì‹8â«’ÿ=l€çÔœKUÅ"H’kÎÏ­ûÀ &ú†ÿ¸øÁ endstream endobj 1464 0 obj << /Length 2702 /Filter /FlateDecode >> stream xÚµ]sÛ¸ñÝ¿‚R&FÉÜSr—óø:M¦±:}ÈÝd( ²9G‘>’Šëvúß»À.ø)Ù²<$Åb±ß»ï]{¾wqö~uöæWî+/a‰ ”·Úz¡b*^”À߈{«÷eñsµÓ›|ùÇê7y1@+a e±X€ÌòdyDñâ þኛMgVgqò=ÞÀÎÐËvg_þð½ ¬ýæùL&±wg!w^È}ã»:ûÇ™OTûSr–H¤é½ÎÒ}£—ç"‹jkþŠE{CEZ/y¼¸Ö8ÿ»ï ½äáâßù:/òöþȶ¼lÚzŸµyUâÊv_Ú¯×ð)ƒÅ.- ÚÞÞßêfŒi‚@.6.”U‹¥Ö:µÂ .( G®¥nÂ,êbÓUMëm›f7F À²sl CäË&ß.ƒp±Õµ.áÈ ªuZæåuƒ_æØ ¡K›‰&ÝшcËs)Ôâý¾@fûºÇšïn ½ƒÏokæ€ F1Œ>Yÿé¹Ñßμ/¢×¹NÞvE,jý×>_røÛôÇ8ÄP_ªÏF=@9­ºJ£"RLF¡S×MÚ¦£¦êH&wàtë!w‚ÅZ#)ݶÐiCê$v¬ï[K¡w.}Ÿ%pÄHEU^³NDK„À…ÕÉ3»âÎ A¹ÊÇîåw×ÚéÝZƒº¡oÕÓü=ÎR#鯙°¼´#\Ø×z&<¦[]ïòÒÊŽÂØÈ˜†497y¦ùOgûÖXR2Á”U |ÍmUn@——Sjߎ©:— ˆ$ð C|ÿ=Â)ÿx4à_̤Šÿ.?^}üúùû_œƒ9$Á¢¤};!uÆÅɉIÄØZ§tgžvÓ¢¢»f7iYê‚Mî©(£x@[>ûžÿú|¹úp𢠋"õ}.zWç­~þMcHù⛾¿\],Ñ”-KÛ^«­;x»}ÓÎäZÏðÍ8é´Ø;Ôýö¢ÍÁ±’õå×y›øqùæÓˆA̓º žÍ¡‹Õ§ï¡ó·ºÞVõn¬@ޏÐÄ ÕR„FÁ'ò¿¤÷%gÎâGiþ»ËÕw¸íº¨²?é®['oç9ou–Û(CúPî箹L˪Ѹ·‰\ añ 7ë..8‹#$O2˜›úenrµË¡0á,Ô·j¦\Ä¡ˆ­ŸÊÌÜ;’h¯Ñ$Q ¢ÐÅ Xêã„ý¼I¬µ&XLx,3,*Èm‚Ø1f¦ž¶L΃]„õ@ð€Ù»¼½ÁR—ɼ#E‘!$­ßËlÖòuS}¥x«îÕ©ÑY°dt„>üão!®a–8|-‰†±p1žÏ sÇOO·©d0<–ö¾Úh㊾å™~í­]·dÀ}CóOHsÌ™ Å8µù»KLùÑ4%mó@¾H­*%`G7UÝ‚”iž¼qbRÆ"Ç[XEpË4¸­«ë:Ýí¬ÅÁ÷¶®vˆ•ç¶È³¼-îq•Ï’3ÁFŠ£¡¢'&„mp>KûLbG7Éãç’=ªX±`*VSÍ"_DjÏHf:’Ù;„,r¸œKšˆÂ¨†‹×k}Jò€ ‡¥ ¶oº\®s­O4TáCÒE‡ ÂÞé!ÖAÙËÂD±J QÑDÅŸa—ŽŒ™à8‘|¦möòze†ÃLÀuÇá¼æŸÖ‚-˜lÕÊg<è¸qŒl㬂¾*iqJø+`55ø°Õ”];^u@U ·‚Âot±©g(²<9¶<ø¼© Š‘QÒߺNïqhuI]^€ƒÍÃÀ¹?XBÖÎÀ€â7Z¨ŸŒÇ¶{Ü€fU¹,Õ.°ß\Øü¹˜ôV ñ¥'yÀ"ˆüÙîÌ̇\±€K/€1ñjím‡Í”¶Ã³ó|H)üÈ€ˆ¹~)~ìßLð»FÐ)' q)P¿ä;ëÔÑwêˆ' ,¢£nè]·D?0X|ì»*K–àÀl¬‚8 ˆ°@?‘Á{¨°¿D1 ¿›ic¶£v H´gÊгrœûú›„¬ÊÉgü†íÿCáãh endstream endobj 1355 0 obj << /Type /ObjStm /N 100 /First 998 /Length 2799 /Filter /FlateDecode >> stream xÚÍ[Mo9½ûWð8sÅ*¿Æ™ ²;Ø] H²Àî9(VÛÖ–IÞ$ÿ~^±EÇNüÑu`&b·ÙÅ×,²ê½jù@Æ™ìŒC>°)¿Tôÿ¥bXXïD’Þ¡d‹6²ÉIw\†(ÉZ©ïŠV6$±ÚÃ?‘ ­ˆ1RŠÚÂeá¬-6ì²½a¦zO ûúl †CE£á˜cÄd8×qc6\z{Åxbm%g<ÃZd¼8µœØøÐ¿—7x^±à|öµŒ/YŸÈd„¼Õߊ)ˆ®c¥ŒŒ®ˆÓÀÐ’*º”Œd#08ª-2ôåű žH[Þ þˆÔ@ˆ.è½ S\ÿŠÉÎE´•Lt>j+›H¹Þ+&z¯-r&JÖ1`4F¯SMlb*j…¼‰Ecx"Wï ¼W]B¸ç‹Ž צ Õ |Kme“²Ô·Ä%G/gçu)d8Þ%í…‰ÎÄ|„IËÕ*'tÄÀh¡W?“½Ó{+Í‹ÞÄg_ê=Ø•ŠÜÊäzOL¬#ÀY9$}LBŽu>=ƈX.° +ÉéìÀÑ¹Ç 7R_;SX},"¦hg´‚)AW”H4%‘Î"Ü…T_è$8猢t½×ÿ8ït耜ԷRG¹Xº’¨­ø.×Ã’!mí6®®Ô®]`”ú?ÁÞôåzuòºÛš·fúò·fú¦û¼5WC½ùò±ÃfgÝÑô9†í–ÛZ®Öަ¯ºÍêr}ÒmúM]ïý³›/f¿®>›·Ú)”`þÉB6—wo¶†LªPßÿÙr¹‚Ñ·}€TX5êíy×ÀÖé¡õ ­Oh}°ÒúFt­A­ÑÇ"ß5¤5Bk4˱YŽÍrl–S³œšåÔ,§f95Ë©·üÍdÖ÷=šþºZÏ»u#÷nú·éïÓç¸ÀÂ{§Óz‡„`5$É6!@åb5Ž„‚»Úéõåû- Nÿ±Xþoúìø¸šŸ>;Ù.VËéëé¿^ý®ÿýôa»ýø—éôÓ§OöduߨÕúìg º ÔΦ©FoÇHõ¢aôY¬Ëƒ.YÖPŸ‚Mðl¢l)ô{VWêk3ýëêÍÊ`¡ÿtz¹<™¬»ÓIg2_¬p9›ÿlÆBœ³„-ÖP…˜l©|?TŸÖ‹m7"¬Þ¡±è/z²AÁ×2—ÇE ›* Û€´ÀŽ­ÃZŽÁ[º–"ÒQ¬íp^å^}„ÒÆͰ {ûëøOc¡‹X.àެCæEž³ 9Ùâ‡/©“Õòtq6žûÙlˆÊ‰°Š²2'±š @F,Œëýb{ºèÎç|ˆ+3[ ž`+Vã+ø‘P†g‘~+Æ…|n•ÎùRl± .X%à~6Qz*KŒ¥XRòÀƒÒqÀ¯°‘"ßêÊÅr³]_Vœ›<‡"’÷¬{É™¬Ð{ñø Ofbë| Bå\ (®UZê óTü°¥>ÛÎîO6Oè M`Â4×±Š;Ë*®"8›Ä§2[ÐBÖ9ÕQ# ì¬Òvöɺ2,buÛÉr²ž-ϺÍx1‹SAÌ„%ÄTüB;ZO‡–d°ÓÅrÞã==kTÒ@H@@éAdð|ŒŠ ŽêSö%ºk³WÍlÈùVX3…t¶^].çãfv_h”/aÌÍÅj9ˆ\ëù0cÒZÇC@æ‹ÓÓ1I¦·QUåFˆÁªÖ~Æjû¡[HàR51¢¶w&[å66Uô~ð²Ý\¾Ÿwÿ_œt“ÓóÙÙˆ»"ÞV±ýÕnpÐBÂ¥óixØ™øjz-ÀQbOèàξ1˜Ïé´]Ì>+¸ë°ª–Oå«–ŸP´ZûÈ)c¨Û”ÿõÞ;åõhˆÝ°Î ±~ß2ÁµZÀwE­V–váYuè÷õ„?[AößU´ºth!5 Ÿv^kˆ»µ·†o iб5®ìäÖØÕ„šej–©Y¦f™›AjCÐÕ6D+vÈ®Øñn¤}‡‰¯ê!̵Âà |»š|üðeÄX€ -(k½6¹šRÄJòqXæ_¯.FF!™Àߢp­O#0öALضwó1° b',Ê6~€lb‰×Æ|²ÍXwáZäµ’0KÀG¨œofÏš%Ò:ÒGd¶E«²Z'À.G޳9ŧ6KÚ»€ÌDRÉé­¥‘ $!ÿªÚ ü¿Ò$™’WA˜tÜþië¦`w58¬*.ó08££iA²¡ÙÉûÀüð ™Á³Iã5x’~|ƒZÊ`&¿ÓcIŽÅzD¥˃̀(íëÂt 0&¨Æ à‘D²ñ¤ùŽðrá‘Ê¢šƒm§9äÛŒxé!'Kýȉ¸åi?X“å!õ íÛAÄ„ Å¸„ÚŽéÉw‚w໩V»àÒ«š=ø–%{Î×¼;Ÿ}鿣|áöú9:G M–Òcƒó2´vŽè)z•µÂX~dáÐgDQÕ ®"¬ø­ƒ aÌ ?­Ê¡Ë礛Rݦñ]Ï>ÀåÁ ê‹ö—ë™^è6­gz­ÈõŠXC*TÑB°Ü±äµ˜2[Î7×Í.Ë1?%pD\AÐ5^áÄ&A!Ãǃ¸ fmù­ÖC×´0–¨žW¸K ßèÝä-"˜~ºÖÙA'Fz ³`odè[NɆ¡8j)5…#Ý&àoë¬ÕÇ{tP¨Ã:«æ’4°³¦†œv ’è|…—„õ+&Õ0ÌÈí ’ˆ_«Oã;ŽG‡àm0E©H–{‹&†{ÂÑ'±Ëu7—u'_1éá…¢GÃê×f“°³äÁ˜¾M‡*Ý\¿Ü4P ê­_pöD5æ'ä‹ ュzH±ç´ƹ<Œ6®Fž¥“ I„õСEˆ‚XqÁhÀ×f ‰$#Êë ½P)Apz:'?AÒÏ“€"juqÐê‰.bïÇw+ZÏ5"ÌZ_ áT”#Ä ØÔ^ΛQk:¾j6ñ `>hTp [ñwê â‡í==Ò­›t­iâGEá 6”ol›Ë÷›®®1+–G K‚pÀêSõ½5-3¢ULé‘â7³žg*W¨”üëñæ=QX‰#±$þ X‚Õœ X¦$ÝQ:š;r¨l^Ïi1%åòHŽë7x¾B壨 *f?Tc~DE òú¿ £àyÑ#`˜&R²"wzíbv²^Mž¿š¼|öüï#."‡UüpE=»q/œÛ¼vòa¶Ü|ìN¾“²»ãÃÃ>ëÞè½PWˆÜC;ÃÝÑɰÎ81ÐðÎHø;ëI¢2†/ØÇ>ì %K×ÎÿüõH endstream endobj 1487 0 obj << /Length 2321 /Filter /FlateDecode >> stream xÚåZKsã6¾ûWð¶RÕ€{ÛÌL¦”Mì[S[YÇå‚(HbE">2ëüúm%’0©±tÛ‹I™Pw£Ñý}Ý-bgã`çóÍ‹›÷?8Š8‹µã(ˆ\‡EpeÄY¬œÇɇl/VÉôiñ“\ÍœV®\í1†B—‚°z!ÅÓeá佺€È/Ý|ZÜüqC`vÈQ…oúN¼¿y|ÂÎ žýä`äE¡ó­^¹w|‚u¸ß97_n°¶ú(+ (}‡Á•a¯+Ë=•…A–ï6²®.# ='#Ę;$; ô¸D‹P@N ˆÃ¨‹¨*¿®xÉñSß™”H/^I3%¤£ú£(â<9”I–öÕ»‹8ï*êÝ ¾w˜ï"Ç^«O!’|<ù û8­ö3iˆš‚"ßWK–"W‹²uë±– vÂúµ½HËÂö Ñ:¥ÓmÏyžó0ÈÛD, ÃëøÃ#ÜCdÒQª•ÿ"x𤛢Ùqcê#yz§>!„ÞÙ ¯W¥3òdKJiÌ[ ï%’á³ÁD">A®Y‰aÏ£B0lX„ȨŒÂ³„x alËhy’QÈ.3ÄÀ`±a§úÒñA;XŸFzê@ç··Ïînœ~þ8¿{žßþëëb$Þh¶DäaßDúÆtSåBÐó&\^ü ¥>ï’Ô<)Ô5IU‰¦3‡“y©–'…5y‘˜/3u­ QïSm1ß8êæþsÏoˆk*{^%Ùsœ¥ëdS‹1ÌÒÝ,ÁÓ$2ô&Q¨N|eË–§UÒî™YÞÒ(MÕë¶qã.^ãjýÏ$-Ê¼Š Ðö’7ÉE\î^¦?AH|36HÜ ¶!¸»†Rw-¥é{>Vß­¶V ‚ÁúËÀê!£`5.d¬.1Dƒ•Ï È¡ô*`åG 1ÚÁêîëb­Þjˆ­(œ7lh©ÇÕE¡Üh´’O ÑV¥†+‚%\Ùʽô:püÀÕUÙÀU+Üàê*J \µ”ÂÕ÷«íÁ•‡EŒÃÕYBÆàê !£pu‘!®< hÛt* rÅ+/ôñ,ÅÕ?~^†°ÕùÀ!DiJ€Ø$ìÒº“eR~K åfùߦ²›×g•”ÛÁ8êˆ:'HµCi€›¯h†œ[ØJ_'çëh5ìÜÒª§$W±v€Ú™ü 6ö¨\Êü˘ücD>.c”Ç/1CÓ8…ºÇ GZ9⹜ã4îÒÒ–õiü‡Ÿï>üóùaþŸ³%Vw#y¡£? 'k §Ë]ÿ®ã-ùKá:Ë­èY¼¤ñ6K³ª©È÷{ž®ŽÃ?+Ûÿ»AªƒÈAô¾Á{à~ÁëØ·Ž AË”øcsÆó•6Çqµ¯vMþ|؉ÁjÃÁz¤‹é:3ÒÌfÊèjÝôO[±bÚ·YQ6®ÍFu¼­Òß «—€%´#ódJýÉŸrÇ"×–í ™7œTT›0ê¸í¼Žjô/_JQÏXÛ,µ}Ó ’M«Õß+Uê}h;¶Yµ3µšaÐc…†GËmN¬Ra±$[—=‚³¸w ®Ï9¯M9vd2n*¨…õž¬ü“¹õO]'c OµÀc€§®£Õð”ëC-G|O-Ì!¬D‘äMqnƒÄ^$ËØCaª¶³o'Ò-²Nt™"=OšxYrc“IP½­sýJà4qÖëJd¸A ŸØoŸ÷¾ûÓ`[¦†5ã†T"·69ɺ“vwÝz_ïú/‘gåÃB§W>H$¼ppy–±â !£ÄE†è‚01L†½ºà½ñÁ%%>"¦ûî.¿|ýtÿëëÄ[í°ÖÎ=·üáš±´^'¬ùaÐJO–9ç±u5±­$e;ÖyÚ+—3kNw'¦-)‡<[ò¥Éʉé«H¡z;èÛ5©Vi3мèG¡(Ïš´Rù´?iUm£~رüdüÚl±3i½ÎPõ*hø°• |x¥†© ƒt؃ü¢)xÊ.KøÍ«òWÿö1(N-õ×w¿|ú8?þÈÚ5žyˆÒf”YEÎô¢V>jÁÇDz’¸¶k 0Ë÷BX¤Ó‹Þ¥yƒŒ×ßD"^ˆ"˜I¨èÁ_ VbŸµæ’¶S ®‡X­\|ç=ôWY!žcIô(¶àÄǹ]SÇ›¼²oøoݵAXM«N ±_TP|àl!ÏüHE,G! ™KkÞ¬ ‚N³õ5爅“y+Qàë)­Q»þpÒ”Á§2àƒ,sá/ÐM3fk¹2ƒºˆD­±²°‰œ4&R˜üÐÊP7&[^X &Œ˜qlÍ·óÛÅâ~þÙš >TOžY͵fÝ0ÙÁߥê5¯æVȦ°™¨‚‘é Ô˜Ö¨Û‹}ý¾‘ÚŸ¾ª÷ˆ,ªáä¾;Ž`êÕ"å°úž’Ÿdù,$sêý©èª[Ó¸:JŠ9Ј^Â_£?G¾q¨Ëº}¹9zðg}ôuâõgqì…ÓÒb#Ä|ouý¯˜§ï¦3„*UÔª&EêGÚ~mÀV߬”°$6Ÿ[}¹^<%“LÝ%ϵJ®5ƒw<Ü4òà,mˆ²Ã­±_}5;èo¦êš¥›L}³_Ûë‹EQÿmÁsÞ^üóÕy endstream endobj 1509 0 obj << /Length 3100 /Filter /FlateDecode >> stream xÚ½ZKsÛ8¾ûWè¶ò”|39y73©ÌÖ¦v&¾%)MAשð'µ~»Ñ ¾DÙÌ(Þ‹I€@£ÑýõS¶Û…µx{ñ÷Û‹ëߤå/"ù¶¿¸Ý,<_ø‘³"xrq»^|\þ£Ø«uzùùöw\,BXí;¸Ú :6Ó my¹²ƒpyMéKÜtñëíÅ— ‹¬…ì°a§·Hö?[‹5|û}a 7 zå~áIKØŽïÙâÃÅÖó\{RD.ñ'_š´Jë´ÈÅåÊ‘Öòv§€/ÏZªKé-¿ÅIMýŠó4ßÒ ØÐ³6‹ë2ÝnUÙ.X«ƒÊׯÎG«“¸\Ó[œóKZóâC\ÖiÒdqÉ”ÊôÒö–_‘U^zÞR ¸àŽ+ b =º²R$–Û½üù¥²×ÚpQ °+ [e¬ã:ÖÜÆB³¥ðÚÕ­Ï,œLíU^KƒÔ/ƒ…ÀˆI¼{ÿáýÝ»÷··¾{kÀÒ?/p…m·¦yU—M‚úa9±˜JU©’„ÂÜ,±MS7%Kº©ÔÕHÒÕ®h2~¿çe•â«ÔÅÔ lǾl™²¦øöD„f…8i¸œ^¤×®\ÛØÈÊqD²Ñ›\á ¶->®$Ö>&0ÁhsiƒÄK€pT¼'ÔÁ°‡æ)2¶+vYÙ¶»ÜUMo‡±ö¨ÊM“1/„£‡…yû'ò…k;{ïsŒ_úlÀ„³<”醎é4­Kxv¸±­òBáûÒÈ4!1L]Ì E^¢þʱäò]ý7´–jâfzæ^%1ÃÃŽ–i½£ù"gö*kÆï|8/®äe±-ãýJ[$(hx%ÁÁxl˜{ŰÌâ&Ovªz5*Åd°R>Ùö < àËÞ¡¨ªô>ûÎÆ²,;OëIù…R„h+õ¥Qy¢†&ÛSU5%Ù(®åWCÎÀE–xáH„Ás7H@ˆp¢Æ`Yäðöu—iÑTS‘Òvä·@ˆ³ì>NÐ&ÑàS-Ï:^/Îà–Š½Ç'˳ÞüëæÊˆ±VeÙêêjÒçÂA«ê ’¥®™x0.‡©€°<’ÄO²‚§…„NlÊlá-ÀãœõŸ7û{/£Ñ™ÞÅy®²izàì“Õ1%˜Çl§À8ŸâÚµ„ç-×å}Z—È]\2ÿpY'€XYN1ê;Âñ[FÛ뙫±æ8Å sR%qÞéxh.ªSj>†` ;® 4‡§ŒŒ‘ø¤†-pçv4Ojˆ\ÏîzüÄO·˜(˜£ì‚#&—²è?&ùrUÑhÁ&j-uÐ'R¶v†BTP~©P‚ì gyăb[aæÐd•Òˆ§ qÅ÷RY6œÑ6M8`2ôi«rU²`¨ã<ÉßÂË›K×ZÞ [ÿƒ\.$ œ¡ËíÒ+ȪT¶¹jѦŸýC0`tÄ'ò' j¨ûbS÷îßå|‰]¢2T:ÞWRζ …ë‡ìð#…uŒì6ÀéAßm]Êåwš%-¥UÍ[4þáÉôd¸†%'Âu$—7ÿ~wEd8$Ò`J˜Ð©¢~3Q£_ɺÒDñò]ŒŽ³÷Ì%Ý4>Ä÷)ÜL_KbÖ¥çÁÐÀîÛü¶§Ózg2¿‡Ôdr­O€¸’‘hŽ¢Ú”GχŠW`‡­ÍW÷E Ÿ¢ó­°yÓÿT§Ø«QjɈ¨&3ô„°ÛÓ2Zª‰*d®ó0?(`ºÍҧቦ6ȹ`KïGhds~Ü¥ {ŸâC öi¡"A¶!Íq3å“ß²ËïÑuMºˆaÒ Fn‡%áŽ2!îr~¨ÜCY©uË¡6&'ô…32}ä:Œ:®#ë×`’¡åu¹eŽžå+ì ¯NeCn ¬î¦Úh¢V’plS5|§s“¢„"åPPæ_5ÊáÓ÷6½„©›ë7ôR0Óo®ohÂpF©HEuªk‡ËŸOu,å‚m?™“H¢š•>DµN¢ŒBBM=%Y )raë "£»”Ú¼ü¥MC6oéИH–`8,m½žË¸âuf¿±v·ç^¯ns¹nóQ¸±,‹÷ƒuV†hMO„È©ö ’†û4Ëf ™õ” Š‘ÿ“Å75è7 Œ §‘¾-9PñLiPè30‚Ö‹O¹Þ«þmá«#|2ò ¸xUQØÚ#M iޱп —Pó: ®éIÔÁx@Æ;Ù^X™MQ÷kt¼qYÕ½“ÄQgï 8·ð8ŠÐSåy×®å:èd[– 9Y˜ÿúM'^ISw8=ž¨UGEøMÂö]/¨êw ´åÃ㋶ݤg'µ4hf`ÊdÉžëüà®ÇñI]…Žðö Ã4S›W\üº®,ɆášöMmú)}BÒäiŽ2V¨Bƒ¨0ïaTü2ò$VKsÏBû…©#ïÙçaqÊŽ!,mŠ,£†A—T+ªðúéò!‹ÓaŠê÷ú„1õäÓ– züŽmÈpæ……†0 ^79Âåoè²è46b·õžýåH)²údFð„œ¡V]ÍÒ½éÕ¤÷#t†àsaWI•t¸ÜÏ?ä$±L­·™Á2¾/šš¾2ZÃa[5œ*ÏCö˽Mý¼_SÆEà¸}ô  y5[8j‘Yza¿‹ãEupúælCã›s“G7rœÐÖæ‰Ïx€[Ó}8>“¦¾>î%–úûÎld«^àŽÝqR´B02¨AɘsYæ·œT&sr­ÄÈÒô‰äcª `HÀ øZït"Tã×®à‹H€ðä %]÷³»þ®Aãïs¤\¶$¡bÕµìÞÇ:Vñ!ÈŒSÄõšªÆt„?Q-f¬# ‡\¡Œ¾Ñ&ý„I‡u¬ûá#ÆïRÅ&œµM´£À¥hÙ¶å¹O¯FkÀ‘4º±Ð¶³Ætùm ý|Í5A÷©bÙ—§ŠeøÂÎàRè‚>¡]‹&ÉåáK¾߬hðHê‡7bw·‚Õ¤¸$&'ˆÛ7D;¦á  ãNí4ŽKû|—ä3‰*¢A´äqhld®áqlc[ePO_¨ÇàuW•ÉÝ>®ž´@çM`/™y:E[1‰£DÍžLÔÈnƒ>–aÀQ•~FaWûDÂôrG:=· ƒQªVÑ,¶¼Ëµö›8Ô1Ÿ†Dšc»ƒsy½æ`Æ[p7jmhö{T‚lqš \ÕEi6¤yGðdÂ:‘ƒàWÓ‚8 Fvü»zC؈·£ßtЙ ù'þT&ñ7]œ÷$µëm…Ñ¢T‹MïGÜ!µéÙã<ÒKÛ@„%®>—>ý~<¢o~€žsBŸ–¯[Æç3kÔiuÒ/ß2èUf-ç¡à!Pkµhú˜èÞ‡¸G:ž·¶CÑÝ_Û6nX½ž‹+(@,Ï}9µ韩öc–…á@‰y/'Œ!ý3…q6³?bŽ/ î;¯Ÿl^ôß¹`ÕÝPÿåô3¤¦~ÎfvŽ~|(ò=äÜ®Í^ªÉ«t›«õ< q·a†?kî×êë±£Yy˜å__ó—»)ÞþÀAé¨ r9ý÷É ²ºÉ;\û<ä jË x9È éŸ ¹³™ýÈI²YïE!·Éâm58øö<â 4/Ö31¤K»™-ߤm/yÖú=Ý”)?ˆ? !×Ãßþ™ø;—Ù ´Ù¶0C2Žð,®šžS}13Eë~~>Œ5zOï›nüÿ¦ýúÀŽ×‹“ë—Û£µW3ƒh ôñR€’?Oç²úœ"[xn0M¦%9KùñL@™ÿ„šµº,°‘8«iõsãæýÆÌ륗ÂWŸøyè:Í'°Já…á> stream xÚí\[oãÆ~÷¯Ð[åb=;7É}HIÐ4mÚÄ@ $KK#™ˆDjIj·.ÐÿÞ33gxeSær‘vû`ˆ—á™3g¾ó %ÓÅvA__ýþöêõWŒªELbÅÕâv³Q±X„1|†lq»^ü¸|“ïõ:½þùö3:\D0Z 3Z†!‰av ç×7<Œ–¯ÝSÌ”våODélÊ¢1¨$ v6ctåO4Æde/qYšÕeWIvw¯·iv&ýêP2nPK•®Ž»¤o˜ù€I¢ š ô=ùÓ@?]Ù @¯â0©>臃Õ'«`¹ÿpž‡lµXÏÙ®ü‰MY4FÈÈŒSWüDSLUõç Ây4«ó®òì>[0qù‰Æ+g–rÖêJ)W Ïû®ü‰¸Ÿ¬ì%ÀW’pà‡¬QÀÿDê+¸Zw6œvåOÄélÊ¢1DL¨ó£+¢1&+{‰ÓJNDÀæO5u¶>®Xôÿòê¹%ébŸfI¥/%îªçÙpß•?÷“•½÷‚óƒûáh5 ÷ÿ…Ñʃõ$ {®ÌÕ½³Áµ+"\gSAaÑ|=Ážü‰Æ˜¬ì%¾Kc"Ù{‚U~8¯$á·ïGûá¯á5ÓKãK»Zw.ŒöäOÃète/ÀhG$`ÁüŽ-£0úIÅ– rÕélPíÊŸÕÙ”Ec„‚ˆùz]ñM1UÕKœ6T÷C8íBÅ$Ñ↑À÷D~{Î#[WI¶KËêůsPG¶\:QèìÈ|3²™ËÌô®ü°zÞ$2Ùvýí}žF”«—gs®ü‰¾3YÙKœGD‰™Ûèw;½´¢ÊŽûû±¾ñ?äÀUÀ³!¹+"’gS!)‘b¾aOþDcLVö·–`!Ž B‹´»^\‚üþE‘nTÉ€#Çt„#'ëu¡ËòÃzòýq³é³Ãó®Ä]A:zºò'¢g²²— GpªyÛlCg¨2hŽ€à(ùÇ[Ö×èÌU¢³³+"8§*;ÅÚ‰‰¨pPü÷ç#¿ñÊ€·ºdŠp&Q±‘îÒý<ÿSK¢(ö n4dû<Ä—p¨–I¶v×´?<ÚÏÊVË÷ù\åû}ýD»%d–ú­­Ð_Á©l‰®.šW'«”g^f¸©ÎZÁì’.ß]³`é^Ôãô®þûÜ0æCTEºÝêã†ÀÍî3qe~³Jv˜ø€I9m™4†} #ÿs m&ôoúÖç”D!óC (ÄèòO98šÆÌ|‚aJ¼”â¥ôªîD0ﵬåµf$ôúÜDìra±¦‡lbgÕ¢hvÞ©)x Æ0$Š”W³<Þ¯õ»¡å˜.Žý¸½¶äf^Ûýà’Õ}Äa•¥yËn~Ær·Ú¯{zÛ»eUWÕÑÚ¤ÁÖÙË8æ ÍÖÖÞÿ<Õ=oT¿æ°!éJwže f­ Ò ¬x0d“×A`÷‰*o¬µ8hì"© B׸IÝNHðAiëõþÌ+KkgPôîþñ®zÌL¥£ sßvÝíݽpÕìš½VéÃA¯ýÐ"?nÜÓö*†_3¶ìÄ Ó ÙA°D\KqÁŽKj~‹(.%©êˆë½ít…Ž™atÈ®=Ó R™d—þ«ŸüĹ8$«_€)áPöØ·ì•;+’l‹7\Ì1×üxz3¶«|«A’ëû´zh¦‡„Œ ߨS“7ßßýå‹7|Ú^¹6NÕ*ûdUäHå"¦¶V9•SVOsRšŸäM’Кlþcfí¤Q{–gyÍúi/¥A·Ã0êḭ×F{jƒj3ÇØg˜\ãд,C©ð)ÊÛùÚ|H–‹kN—7%À ç8ù¶Hö–¢bk`ˆÀ8gžùÙóœ‹Üj)Ð\ö:Éœ.<ò:‘™Ç­|®Y*‡ÏÒ$²öµ… ¦‚¬“Ž˜od6œøË5$¶°Pœ`0Ž!­Ó—}¾>šbÂÌt,QÉØC½ëx lærz—ÞÍ£8¡5ïÚw£[bË.„K€¬ARC^æp•”¨KÕÔ±´½ylnÙƒ{cûãÆä:ØÏ÷à§^Ž&÷™~Më"µI’Kº0uBj²n_¤•~]èÏÓªÄmâáxâµÙR—5=¼"Zš`ìoNâ&‚–†EüLŸÈƒàn;ûi6=ÑäÎMÍÌj@lvɶ|ÒSÿ­0±t·6%ž‚:hb¬­ÁŒ*fŸj‰;}oPk¿zùÌ2mf÷¸ð>-õM^üæÚØæÉÙÕAxö[˜ˆMhtÖùZ¹s«Ð»¯w6ñ qÙöaÑÜÇž‹ËA9XvŒµþwÀGÀ>„Nç¡zò†™ÿ"`qeÖ€SD³Â*ûÛ«uE\ù'Ìì.þé ›†‚Ä\פ/îúÊ£»è |œ;Ì3º # sðÄ&€ 0ù°C€èJí¯¹,žÃl(÷Ίìòª¬ïØ+‡¼,Ó{à *Õ8Èfú0d§QÚ:õb,©š{I±¶@L\¯­ß•p& ^¾©êxåX¬ì\p²ÖîÛ xÏq»9j™‡6LÓE[— €!ý¨Ï›™«Üd}ãŠc¯Â^÷)ìÊæ÷*Xâ“ΤBÖ{ø«È:ô÷WÞðI¿-À~HÊ¡FLU7—mJx§‡ iAóï1L¡]v½R7Œ  ýÌ„^æ{TO'`¨ß¹/EÁt˜¶¤%OË:ùæ®Â.rÚ ;«W~hu¾˜þU/qmÕa¬µbâìõ¥),ª˜HÙKª;&‘Âô lzŸÛVdÄ[Ž#á 7·ÞgçcKŒÆ$PMCËt,D¸\=Ýa …ö*ÜánYD„lšz„ø/óä–”á@ni† |ZÆJçûep“8ªý \ îvá¦+ÓìÑé>”×li¹¥·-9fBŽ©z”eÚ¯P±æE¡ËCž­mМó\ƒÛãÞÑ zʨJÛPµ­Š…ý@Å"BqbU#ßu…ŸéB:mÏæ6ð8öx`\ǪN¶ïÚÀÝ:Ä›“µ>h›ê›A®Î}Ç›YÖ©utÆT ¤oǨ©+l(a‡Ú'”-¿2{aKoӲɂ}dˆØ$Ï96¦|ÖÚôüpˆ.)d&}'ßôj)hv3Ŷ6~^ Ñ´€ôñ¸)çI°EëAínS ؽÁ®_SÌ~¶ÅVy̘¢G!Qý6¬Ë ëì*²!pš×Ъ®+Ïx»}}SÓÂïF–ìQ¬^õí÷øúîË¿ß>IS%¢™î@%…aÓÙžÑX]‡Ô«.†„@ÝÓt|ßWŽP’œ–&œñå&ßퟻü.™¯‹BÙ{x0ôÁÄ4§eénZ®„ÏœÖ>fó5seïÞ¤˜t•¤;wµòy²'}æ3!¾ ²!¬€:†èEHBÁÚ-FB¡~w!´­S'Í¥6O–ˆÕ*zÅY=áâa½>¨ë‚1"¡جnââÓ%ÿv¡“vÛbó*È>ª"·¯Ï: ´ z½Q`ÿó™÷¸Áá4à1k^˵s:|óV¯ C7Ó]r¿óïã˜8cYöY7:Üp¡H1Sñ‘˜âW€+ƒ¾^ŠˆlÈúøŸ¿ûÛ`d IÄë@ÊUrÅ–˜­!°ù¨è ¦áR¾ZñK×#ÌL™ý9`ÇÌÏõÓ7´é°dIñvÜv¹@dS¹¾FŒª+Ú*•GI ª|<Wy¿9¦Tª« ˆíyì(áj$ìNÃpg9°¦h:´qÉU9âûæöD/À‡Ü”a¤-H±H̃ë«ï¾ýv[* a ÛØ2m`”:©h»v~¬ÇÊ¿å«ßêaÔö¤>*ƒST5*]‡ ›¥í––gÓýªtÝï½Æ›MŒÚöú‡’ƒ§Ê—ü‡Ãÿ"û¢ endstream endobj 1481 0 obj << /Type /ObjStm /N 100 /First 986 /Length 2479 /Filter /FlateDecode >> stream xÚÍZ[S9~ï_áÇ™‡8¶«|[µFb±;Ú] +í.â!¤M4Ýɤ‡áßÏW•84ÐiÜp¸H\ê8×wªÊusJ4Îxfo8âÿL•ç’L "VCU?q&r›T«ðS¢|TÈxç‚Pø ¾sª° þx"ý ß¡,;¨„ kº3X¢f®Ø£ rkÖ5ÀÁvBeË µ˜ÀA?­&ÄD²‹3!{ʈ—MŒœWdÈ>(6D>  qʃ/Ý%-'Xsx{ -ÿËnÌÁ°+Þ]Ìò=¨ÎCÞñ2²B ä%# p Ý=‚*"P˜B’Ý3¨¬kØ·Ç.¢tƒƒIœ¬1ë¤Çªk‘HÖvIb‚±sñ‚ jÁž"#dñª²VÄ€‚0bbÁ5Çâä»óV±fsrbà³%(V(2i‡Ø¤¨zÅk¥dP2©Às@e“Óï“½Ú 3©y!2³ê î–“Tž³j šÍEœ$2€R>6ŧ ðÎBâcÌ…UpDzÓ˜Hµ Hцƒ+‹ÏÄèM…K UL%iPq%]ƒcW"®QYí!Ç ªÏàjTŸIljrºAE]K ª®eS3ëdä¢kQT÷2JƹˆØ¾Ö ºÏQÕ󲞯‹,¤Ú!ã,êj’u5 ©Î•ñnnç]¹ )ÿœ )ðÉééÉôó.I8âÌô¿ÿû?ìnS•c-A¹Ë«‹‹g'?ýt+s(ÅFœÔw˜¬–[szj¦ƒ¼Ù›HPñ;þ{Ëå ›>ÝÅB¥±pOø=OÚÔVâ=¨ºÛÉôñÕó­>ÿk±üídúój}6¬{6ýÇô×éý§^äæxûà‹uˆ!)²ÍøŸ‚· §<%àç¾{jÇfú÷Õ“•1xqµœOÖËÉ|u‰—žœ-V —/ç?ŠjGÅ…ch+à—‹–Sý渂s–]‰£•è¼³•ûqÛñ±eØÃY(,Ôôr¨m¨|#°År³œœÍ¶³Éf»¾šo¯ÖÃDÖÆƒDÉÙŒ¸½Ãĉ­+ù®˜Æƒ#RI±¬á-ÁÇXª%ºÙtÛõâ*ÙÌl×óë`4°!"ÛÄãÅHÒ:¼/üa¼Î½ƒ(c¬äŽ>f—¬GÞ¾Ùç`5YÉyw¯ï„Í[Âëµ8ü©5ºúAD•Âãs#jå}´¬±©¹¥ûð+UÞžð Fp#ö;K}·_IcFæL6e)q<2¿õxÏ,/ïR÷i–Ç£Çç& HòÆ0ÀÄÕ‡Ôc6C¼OÉJM‰²Þ(ÙaÿZúVÓ{§§*azo¾]¬–ÓÇÓÿ<úUþþðr»ýýoÓéëׯí.ÚÕúüÇ±Žµ/Î:è ÎnªÉ€pÃ((#’àÑÖV÷._­gø34ΪYÔÞVš—3 ¡FÅæX¿MIš"'åü>IzE™ˆÃ`«?’¾góW“ÍðjÄ\b/úbP¬ž‹<#Ÿú#ù®Ž …múìv÷Á£ÁBùmkˆ·Â‚™.g˳ëGo29[^,6Û1 „MZɤ‘=‹¤Tô“ÖÕ¾:mtL#f+–ç -$IÑ#J¡½”à)P—#¢( ¨[Ç(ý+¾hI«F-M¶Ã-æûx@€d™LˆŸgéú* KˆP)}/á J5=5”ÍÝßÂü¸¾´’½<“Úhr9Ûü6zµ†0a‘sfvÕö‚ ©Þ¯;1$È:yóüÇQ èd°dM)][#¸#oç~æ;µác±ºð,Ó“^Äÿ(¡“9 …^ž­Œ.û˜ ×iÀж„ó—ø\›ñ¼ÓÇ|r{?øÄøÙ£îZ†±oFd†º_i] µ®„ÚGÔ:j] µ®„ZWBM5ÔDPÛ™ÛÎÜvnS&šî‰ÃJÁM7ÜDpÁMDl"¢ul…Š_ôÁ¹Zé褒Ù-KåïnΛ«çògÐkQ X/!hH((€x°†Œ •1:'Nåë—BhK+ß:T²·z?¾X ‚ÎΆ?óaòüÂ=ÁÃp6Épµ¬ö Æõô]@ÌlI®]Ð…'™–ûªómfD²ò Û_Й§z 8”Û€}YwÛ›úÉR… £5FgB¼³¢&ÃrÌÁhDÉHt%…ÄwF·™Ï–“‹³õù˜3R¸=ж†Žqr5”|¢îF¬r£ôš¨ý2º$SÛ*ÀŸû–¸¢wŽrl‹\“¢ú–¸á¤EŽGÿr6_¯&÷MÞ»ÿÏCAª6â(ÕeP':¢Rl.¡[I·êîPÁ%Ô. ”UÛ”OA5îQ”j¸dtäˆWé)ÀÙ‰ä%É=O/²1cC¶2…n€NÄw…3yq1;ߌ E¤üÒ‚\˜h;Îòãb[ wV7€¬ã¢•¶\÷KŠŸw½Z?ŽlÔz–a²$¿SÚ!‹,7yd:XŠw¹q‡»MI“Üòô2GœQîäe—â;™IÎZèdFôv‰:™]±ÞubNrµÌ©“¹ #(¹“mW@OÚÇœäÆ­Ó&)ÂS'/b*Å^fdª6IA®™;m’\µœ;mk±òËÎ>æ’õ²«9'ÄÕN›ÄýõYs”¨“A6‰´»œ:0ÿð× endstream endobj 1624 0 obj << /Length 2793 /Filter /FlateDecode >> stream xÚÅZ[sÛ¸~÷¯Pß䙋o»Ó‡6“l³gš¸Óv’EA»©å%®ÿ}pð"Ú’íìöÁ&€¸œÛ÷€t±]ÐÅ÷½¹øæ-£á"!IÈÃÅÍf„$LÄ"Jà±ÅÍzñiùºÚ«u~ùËͺw´ˆ¡w(toE$3¹¸¼âQ¼ü,dú¥‹77¿]0èD¬Ÿ€Ã›Á"Û_|ú….ÖÐö™ċ;Ós¿%\„P./þ~AíªééÕŒ$×ô™óÀ¬Â½ï°hðNLd»Ü|x÷ýí›ݸÍ—°WÎ\Ïoa _¶;¥ LÏ#š6­[(HlS—SlXçÛ¼Åù²ÈKEŒ PSõv…Fd d£vi$AðĉÂlû6­·S9Äw%A@ãW ”øj¶«ªFiÔÊ /Ϻ"­ñw¿PøÑ/ÔÍ´¸B^1˜ÏÖû»ë3õNÝZ¡0Õ;TMõU^ïº\â3µËC1ÿºp¥/ŸL‡Þïú­bK^z#_h`œQ°ª<Ûa}n'lïy–Å=þÌÒ®Qk,¯lXàƒªIMˆ€0&4Þ]¼ÖrÓò{Tû‘ îµ¼lÚºËÚ¼**Á8Bº‚ŠIB…ÕŠ3#`,ËÊxÍ6/K´øA•‚(æ÷¥©Îì·¬èà™Ue[WEaäXyÙÙÏóˆ`„I"õ„·+˽mêìq‘ÝQo¡#£jˆv|Ú (½äZ¡Kš骰ÕÕA‹Øî%­Õ·¿L€/Ž…þ ǹy÷ó›s®$$ŠÂ¡ë1zLfbüòê³þD“­b7ã@X<¨:¯ÖÖ¢Ã`©e!„“E¼ló½rc·wÊYõÄ´ñì´`ç©Yð˜D3J>µ’ãÀ½X¦%„ÃìÊùDHDÈÆ³*×Ícá/|¶ß¾ÿé§÷ÿœS#øfÈ‘¶7,=ìq< ñPûÚ^‡¹´U…u®tÓªÚÙõ̪\Ÿ1øTH‘$œóƒÄÙä Q씈Øã"bŽ*©‚yaDôdž*@³§ ~ ïì{HtÑÊÖS…ÀSB}§³§QÎHØ‹=ÙwBdœŒÍû,§‘#úñ±¸R’$Ñ1=“Ïñ{°,ÿâ±`r¹SµÒ¥`¹Oﱪ¬Z¬Y)¬hºÃ¡ª[|%°–fma_XÝcƒ…®X£uå™Ò$Q°åJ£E×bkn‡¿Ë‹Â`ßK×ÿé?O[a­6X– ¥i§‹2RM"B£ ×Cx*:å¡ôLÊùè“Rt }Z®o[½‚ÇÍâ‚þõÏ4 ðǬö™LH,uìŒH"¦´ÄsŠ–Xb"ÝÚæÎGÿïœ# @¦z©Ê/ ú)ÂjWM~gÂÁH9ÞÉ8A$q)©ÝUÝäU9"Í lÚX2Ã8†ÂpŒcb%:êglÀ-‡„ç³ ©2Ÿ*øTÐ G±Ø’9B!ÁA$•X†Â*)”óJ‚Gƒ¾NIÐl1J#¡q‚‘z‘Ðì1#50†‘ÇH(¦Øì1R/1RO¾±óáÏa îIÉ ÂÅñD›$%at’'Í%¡ìkàãÐu9‘ÑË“ìëyŠ9ËŸþRO÷ÛFáÛ7ù¾+Ú´TU×8ÇGΠõ•ÌrاCø\¡ÞQ¹Îm:ÑÐ-cV’;’¥ŽP2Ï´ØWz±|©ó~ý/½·íÍAeùgJ¹¨0 ¢TÛ¢)KþDeá˜èÀfNCJÅùÖ.¡:ûàr12¥×ïÿ'6NoÐÀ¯úNy—·»~ÿ(Âú’ÅËm·÷ëZ)-%tAªIÞÄ=µ`K©1@Þ7•Ý~å¹ãÓÙ.-KUØ®¹eóç+‚ifaÔûvZù $¡Â+ aû÷%ƒ©:»¬ª+ÖX<ÔÕ ýW¨m¨\r6 “nñi‹+ÝvgÓ–¸Z»ë³‹¢Q¯°§g º>·OcÂf!Fîœq©#‘6¯]ù¡:-·–ÄSËßø„¿©r=>zð˜Ë:šýÖA¨×æ‰ í\íÅ„÷ªhÚêpÒ…ÆÉÎÈ…¾)ÓÎ…Ñ‹I™÷dzH™Þü“†âœœ)[ «ÙH¶OK$uT;¢BðN~¼÷®ßÌÊFB<– ÎMUï{kËË@èHJ¯°¦ƒE/Õƒ³Ë®±AìŒøª€ÆÉ4ÍJËL§N°"šÌæWS] )I„ LЕdÇš:R¾†êŒ]._>)]+H“Öí0a$‰ÚYî± ³5;J³Ã §\ÊÛ¬Có Ý#5˜ì¸Wøa@éòÝfnÓRL]¤ÏÛ­Ðm—RÙ—ÆÀ(I,üðtÖÆHÅ6*5ÚvYÇ(#4f‰eû¨ïrcÛðs]™¸qëŸP¥§·Å¼4¹0(lU©ê<{ôóíÏ"MULìñ›4§™ÒCë¥^¶«SK¶õ²7³ô"ˆ M‚ó,1äD&ž‹Xa58>xýþúí‰otÒ%åÌ·5qÛa%úœj|4ðhL˜Å+Ÿ±ª> Í±”X½ø4Mq7IB8gãÈ}mîŒd¢3r,Lýª¬_ÙŽæÞI‡"Ï0y2F†ýàHÚ+C-?Oï¿ÓyLØ4µƒXt<,νV“›þù¶Äþi‰W]21ŸÒèç=L1ç“CdÐqa|&jlǰ/P=…¥ÊÖ´—l¹³u€EµxBžÒº¾Gšé”ö÷8$™8 -~üÒqì’$±'©ÚVµ·ÙÞÉÝîÓæ×ÇoÅDDdÿÝËÚp‰›®Ì0,˜4–w|ò5‚ í#D\+ˆ8û¼ÿçn—¶G—Ô´7Œ–7Ýj|¾äéé$3Ÿû¨Prpùœo ÿzQu endstream endobj 1655 0 obj << /Length 3411 /Filter /FlateDecode >> stream xÚµÙrÛFò]_Á}Ø X%¸¼¤œX‘™¸¤¬$—7•¤TCpHNhf”¯ßîé\‚W¼y Ñ3ÓÓw÷ÀYìÎâúâÛ‡‹ß»N´Hí4ò¢ÅÃnFv”ú‹8…gì.¶‹_¬ïʣܪåo? v¼H;ò;ˆc;ñ=XL#zÁråʼnõ‚nä⤋«‡‹. 9 ·ßÀƒ™á";^üò›³ØÂ·Ž¤Éâ¬1‹ÐulÏ`œ/î/þsá0ÕΘúd@Yª²­Жå®'TDö¡UµjTYÔã³0iL±½\…©k¸»X©íþbå‚\CfýQŠB{Zèèð©wÂAÇ0|Á3áSðsWæy¹ôBë\=æŠ7´SÇg¶{^8•’¤”ØAÔ õán}ýx÷0§6k'pFüȈàÌõ{Õ0ØV Éú¸tCKVü±Ägˆái¼;Ü -OR³ÁAT[B®–nbI‘¯u”s”Eí¥®™¨ŠFVU{jhöd‘!ahHüБhf=gµt­<§—JnÛŒéËE#‹ ðD”q·‰LCy«šÞwUy¤Ñ(ÉÝs\;ò&‚'Eö"ß6á»§}FÛ•DzƒÄZ7„š ÆÙH;wmNcµ£o°1/\1V-ŽpÊÓrG…¼ìAí4wWÉmwn`É%Â#«¬žíÁ!µRŸ¯>ŠœI,‹MÉBõˆÈ ‡9g6hƒíUh×I-ˆCëç¥ ûàé|'´ŽmÝЈ­V«A=ªNeà5°Þ#™²*dNŸuB‡í‚|Îû…ýŽÄº[FŽõ°L}ëåú™“ùeõ'³5­ðFíï/®z3Y p™`íßF§'rR¹ü«-ú°6%﬚à B«nO§²j@´>˜Š¡ ÚÄPaç´}Áꬴ$a´-éY”0¯ØÛcVäQV.X¨þm/ôîåWW·÷s1;vÒ¡/Jë|Z aˆ¦’G@Ý“kï´>,4áE»_xÞƒ™áERüvùŽ àDs´F ÙAÂñQŒTé(ž¸ÕgÝWb+é ï5ÖC/"œdŒ‚¤Ã ¢¢<ð¹^„׫d–é2:^""e€§‡—àRô aÑñxàôŒÝ«+‘³üX?ŽmvàQY±Š0EÍ3ý0 æ`ôc”±äy'õöô‰Ì¦×Ì9wÿO8“»Û·7¯o®^Þ]ÝÏf7PØa\ŠïDVU¶Æ7ë@…­#7gªÓLx/«ø tUnQž‘`låN+n›7:®ÅFÛà[§mÃÏ2Ïid ¼\8Èy_üVI‰Ú̾Ãld!ªØª rcP´K‰¡õCç^ûöRgÜúP¶&)ݰ<5›¤ÉT§Òž$ hü¢€ÐÁ[d5ЮÉ\ö+Yóœ6­Ÿà”¶ÿ¤Æ¼º}w3§.IjcQ4@† 4$éwѹ[LéLë+"4úBBßþôyqòÓd¶§gŒŒl7ŽÿOœ|û˜ß?ÓöHLÍSÆo”².¾B•lƉx"ÌYu6b\›9ãÚ Žf¾/†:>†+~’Â2˜ç÷ n¢í¶va0~|3á"9¶Åö—²ñÕúáõÕÝlýÚq8UFYˆMnøÉ HºØƒYŸc½2ï“Ú’-¼Ü5c{mdv(˜Û˜õ±,›ÃÄbU~ c™{ÿ­ª³J6êÁÕ ÈÀŠRÕ’2®1ãb(ë<ïËùvuýfýðÝë϶ç(ØçªÉ=ÿ^bâkò”цŒéøÛ±ïO ìï{€ww뇫¹ã…©ÇÑ0¦ÁaΕj$ uLƒçFmU%3”‹ÀPãxpôÉ*“5¦EºÖÐ~_ãó|*@1Æù”Ù!ðŠ•)J5|Gpl·hK&"JC„ Ç´o€D4Ú,õäA uuy´¢ðÆG·U8×ïÔN··j¯ÁeÌúÅm'e>l—Ú°Èú`g|T½ìUqjÓlT¶ Àþ™˜ôííõÛûÏôàÎ4¥îZMT”Ø^|1qßÝÞ|¿¾þ,ÿä;®IŠé%+Ñkxû¶ÒÎá’įsüÜTj¿× “¦(è’&×2OAœìu jeÚ7ÖÙ²ã™Ä j#y…¨PŸn?j°À~D©çø¼Ø6•Žº¾$g_|ôQ ÞE¦ƒ‰/Kj×Yï¥5ä_ö³^ë°ml4Ìwí$îÛÆálÛøeѨ•È•ÐÚ_·ˆ×蓘›K ¤¤ª>HÇxbK‡ ø*² )é …’¾IƒRÇÅK#ж€£#ÌüÈÆ‰ “ w¥ö!nV˜§9!èú£éÛFºê9Ô¸GÕC=8§^a ;D_ºT@÷–gjOjuBå %·Ëj#PIê„EÃjXR³44uU™žjd݃PƧm0&©¬‚ÐRà²êZQ­p­øÔý"’sÕ d-(úxAdŽ„s–D|*D” QE÷…Wï9 ÒÐÒA¤ï"´†X'”xá¶¥/›§Y_I®‹(†¦xœw÷„ó¼t:¯# q0˜Öôƒæ—tÝù5[6ÙØ½ò-ìZ§! ¼>Ô:ÿ‰Y&ÏÚ¦¤.(½O-'1×IÒOç4£ðØåT h[ËLOô \çß¼ZIOÏ62ïZ#ÃÝzËž£/¶¶­¯h‚œYG̪Ġ{ÜÐÕÊø’ɤË#Å4½¯€zVŸOw'EÅ]瞥õ\êì:™§&Ûõ};‰|“7G³Yó}®½à9ׇ^}Dj0NÉW1€¤5³ž»ÞžäÔ7Pc)YýÅNÏäÿ|=½•uV© 9³ÐBKÆ›pŠ9|—’g™3Þ2vˆjBOh™‹ï‚/ä󲨛Kz…á½f¿Í“IHÿôçÎßCâd¾vE–QÌÇ]Å“:ÝÊCI÷úêç9ýx·~ó†zs‹Îð^Þá ·w?þëåËÐøð/@uÕ‘t8;?CÎJAqÐßæÁ—šíAëXö!8 kaDN¦RRî"ÅÔgÑ^+a–?öY*Ì®Û,“àÕGñ1¥ñ›È[]< VßkÛŽõ(zárþzlPžA^r”¢†zõH÷:÷ë"Ó6ˆ´ ·C~o´òk\+A*ÑMåë$éT‡ÊÇ„IgÊKŠ¢]¾©+d/äщ¨N ò쎯yj…¢¡Èav,1Ç㺾ÍÎí°ÍáGvàv?½ÔªfNß<ßîÿ?1?Lÿžòm¿ÿyªhY=–»GØ™eS×Âx°.ÞPbÿñv£Ó1U¶uÞý¨AÓ²íz·¹:B`6^eê°¿>þuhî'·À³S'ø;ÿ¸ý2:G endstream endobj 1680 0 obj << /Length 3402 /Filter /FlateDecode >> stream xÚµ[Y“Û6~Ÿ_¡}ã¤F4À›Î“w§’­M6ñT탓JQ"$¡L‘2+[ûß·Ýà5²­±¢'8î¯-±Ø.Äâû›¿ßß¼x#E´HÝ4ò¢ÅýfFn”ú‹8…ßX.îóÅ;çÕ^åúö÷ûqv¼H`väãì ŽÝÄ÷€˜™è…·K/Nœô##‰‹n¾»¿ùp#a’XÈaV†‹õþæÝïb‘ÃØ ái²x43÷‹P ×ó#h‹·7¿ÜæZ|™ûPºi@<ýæWÈ…]¶x· …pŽUw»ôEâdµÂFêtE{+½ÏZU©«Ð{ݪœ&®Žô ý·‡®ÖU×PÏ›Z1×Ç2Ûë5uÿš•[³÷v$¡s¿Ó¼àí›×¿RËöT%S¨6ÔÑî5Õ¡+²šö*kºZ54·­¨÷C—•­Þ0»êÖ G<4¨*ˆ’ÅR‚<²ïÖ;ÐO:e¥EÍŒ~½-³‚Ú묮µj€w? œ6ÔkĆ6{+…3]ÿæV†N¢Q5Ϫ³²ÙTõž«J=Þñ’ø£.˜‹F)ÛÀS=શ<¢**{ß ”©K—¼óÎ, ^ÂIa$¢S±T†!ÏÙWµY(™YÏRòœMWæÙ^•-mï9;P‹„¥^7Ôód +,'’£Ó‚ÌÊœæUÛL·,tÛLáÉ¥ó›Å:+ •S@¤™ƒ’º×Yר¼ØgtŽ: '%AàôÂØ€Ó Kê¡sA#×ÔÇFÕª\sßJµŠf&ÃÌl€ãt9?š#”’™Ta¤jDÊË”`Þlaì QÈÄÙª¦¥ÍEeÜ»©Õ‡˜Ôª±l# ±‡èð»¬0ûÞOØý„óÓñC§i/ÑSE<?±àõ-ÀíÕm:¿PGƒ²PõßPEîÔ)-­¥¦.ºÖ/z./ŒœRíB þî²[O°‘°¿öÄÈ?Æ P—Ö]7à×­W{QÏw…×;uë%€|Uòv;îÐå¡k©¹Þee© ¶QË0¥~ìö,³aCke†Ðsô×ÙV—ÛÙ 3n•Ý~~…–ñˆa"E’ôÿtêP‰z±Ñê=y6°òó†~©Qwh€„È2žB@™:Œ²`Åïª"o¨©çè¥'ؚĀ[zTeÕmw¼¬¢_c¹ÔÌp8nfŒ·R-WšûrݬkÕê?³VW¥kœÀ§&?°ž{v†Ós°2Åmw³sokq´îWp } O]áâŽÙ·Ç°Q…EµÏÊ‘ Ü!53¡Uûƒ*Ø–M´ªgLéd”‘O´gšÙ¡8Ëš ƒü *¨‹6ƒ.¶N쪨NJ+@¨Cà¨K‡g'‚È9¸Ž»áÉ4Ê⣙h†ÀJQZL¾QëªÌb™c¿ êAX¡eÙ ˜½-ò„Ëð!Ad-çAÕÇSæB  lØÃÇå6²ú–ÍœiW¹|´²jÙÂDìÊhj`£•sý·àlæÐj­Y1”:ˆKu›é²=~ ttO²%â‹Désl9^ä&¯0“>g‘ÐØëí®¥æÄ ›žm§@Ý:œÔlO˜¢œøý¶þ‰øò˜q@rˆž)zUƒhì†Ì „Ò5š??šôÇUq˜±‹Yw`f [B4kÚéºl½îj› ã)—¡‡AÅô<ÖÖ‰¸j"Eó²ŠÁÆb;ÔZ§>AD!ÙǪµyù£yøC—º=…ÀÈw£ÐN7R¿„ñMóp y×]ï.pØŽå”_êµue]‰†c}2IÐèVçN刾ø[BR ï'‘äã'Äê½Ec¶ª38²¬PÂH½e°üúýÍ<Æ©!ÿI‘õ(zAvI4g‘æ8ºÕY¡ÿìý-ã÷)?ΑdàgØ5¡*k9‚5mÝ­[€”•cïš­OÏ«™ÉžL {¹™FY½¤=z¸-þ|?{õÝXð»!ÀÞ@±?”‘ëÉ`á¹i’.jµØŒ_9'ÔN÷>ÝF˜Æv",qö¥ôé-wFß¾.Ÿ³Ã˜Vä¦^ú0kÑ ,èý\ò÷‚`ô~z)äkìæÛãAåj3AÊSb€HXÄœ7w€á‰U<ç¿ç‚E†Æb¯¦Ë)ý uy1³çè2ŠÝ DΡˋ&.g&ê¨LÁë¹a”ÒÄoxÆÕ….0>š˜«‡™ÞœoÏÕ™Ü(N¯§³)ý uv1³ÏÑd[iÄá·^gë3,ã$ÆÈ¯U_¯w5íMÉ_¦¼‹Y}†î‚4v…H®ª;L\¾Zm‰çÆ„\MoSú*îj̲0bé&¿ž0¦ô/Æ¥Ì~´qè öè/L*lüüY8ˆƒÑÔ¿«Ÿ‡äCUèõqŠåò^ÿD8z{^œ ùH¸I\OËSújùbfŸã¬¢À•ökÓÙîç©~ŸãÊ-¯¦Œ)ý •q1³ÏQHHB˜zž2²z–›?G>å†WÓÅ”þ…º¸³, ’®« cJÿBa\Êìg`èK׳߸.íÀ—±\ù–ɺðRª9oE[iMøÙBzů.Ÿ:ö;óñò¼ʬ¨¶ç&„øQnnÝöî`á¥Â eðWFJIÉëÕl`JÿB¸˜Ùç8gXM£g:ç¯ÏÒ~Õ¿Þ»ñŒþ…Џ³$ ?5Ùéµd1%™(.fõôÓÄõc~Ó,ÌÕgârŸ}4_y¿~BiãÕ42¥¡J.eöÓßIý$6_ÎŒþ÷Éà0ûÚÙ~½Ø¥+ÿ’/âg—hùø"åü dÝvT2ù¤?½?ÏM­¶u»›Ý<óÆD¦ž+ –=¹2±w]Ÿ»5‘Bº¨gvmB—\K/Å ©xzÙóÌ».â¯5Oj$à ‚g\yåU·*”½ð]M±Ãé«)?´I´#*s¾áÆ;‡›«š†wÚÔ™Á –Õ¥h¢ŸSÊð†Â““Ê8SÄÃô²Èòjp£}qvšú(ß^ßCCãéLY#&wu ½ÅqÐrÈéÍuF³Å½RˆI C_ Ô_‹²ð6(R¼ ÑkºÀO¾.„«R*S1­^¶æÉöÅCVK#F“4£ÞWëª;¼å ®*Z–ÉHá¼2uXÁ¯¯qÊP0:¿ûkT±YÂaðúz`µku¡Í5= X®©ùêß?ÜÙsñnôah.0õª«3[zº Ðe«Y¦¹Gs ÀÃ0¿ð›öøuåI¿Ö[݃×VîBò¬•.isxÜgk —;]Rôý<ªíW«yF뻾ìÓê·p®yI‰„šRH_¾lQ )ËälT.Ž­$í%Ó×"Ù¼êh¦µöãÕÓšæÔõ£qž(9 <7JfiúLÁ»Ùÿe`ë䢸éÿp0·¢ÅþªfÚôçXF¥MØeªëàw_åô— œVÒ,_°¯/X6˜ÆŽÒèŸÇóã L«zÊeFÖ¢žðXè’³+Wº½;U¤›áß„ðT‘Ós_º…ä§±{”·à#ŸÚà'|¡øhΉDâIæL¨ŒÒ€Ü*çC~¬0rNë1‘ [뉇º@¶ÚDÚúÍ¿)T‰¯žƒªéÏsÒhæc>OýÓ ð•ŠàkþèôØÿ×ï endstream endobj 1595 0 obj << /Type /ObjStm /N 100 /First 978 /Length 2324 /Filter /FlateDecode >> stream xÚÍZßo7~÷_ÁÇÞƒ¸’Ã!F´Eî ÜE’îÎȃ*+®P{•Ó&ýïïJ»qY¥m¹îCàYf–ü8Î|3«âŒ3ÄÙ›ÈFˆL!}Œ†BR ea6Þc$ù`BÒWØW}Áä¤ÊŒ·å3â‚Gb+bÈç*eC1V©`å0‘$•¤â½Jd¼Ó5“óX3•‚ñ!ùÝkž©œA¢$¬³`,‡ú¿Éø¢«%'&U)›à¥ÎRLˆx¤DήóaAðÉ›+ &Ö}$Š&RÒ5ˆM $*%ƒm¨ä1–¼¾ ËĤ6ˆïV³$/¸š,›˜]+Ô)¤BXÀñVû¥Z»xîš;0$Ñw¡Â»”êX6ì]+XÇ¢ƒ¤"Q׈˜/T»ÀÄŒ@Âiáèô(°-ªæË©JÅà$ÔØ ö\%2@«VÃB)ŠŽÁ T°¶šD¼:PʤVf”ÔòœM*ÕòŒy ëœ(•Š[ŽD\ʼnׄ*N,-p¬€ƒïëX‚”ªž ÕÞ)CªöÆh`EQÙHT¿NâŒpµ5 W/h‹S+¼dÑýÁ]²óº?l2Sõ¸Zu_’LŽ¢ç.ׯÁTYê9á*å\=%c–\½ ÷)'X*®c˜¥”ª'¦¸XÇ2¤\Ç Y}º8H¢˜‹n©î;+»ýcoe·ÿ!q:;??ë¾3¸Ž Wû•éþýŸÿNVU¡i gÞo¯¯ßž}ýõaeOÁ:8€/lâ¸ö~jŸ¡•Áøw›²«Çø™òËe¿1çç¦{IðÙ½2Èza|R7æñ)¨k|ÒÄÕ*ã8bW°T÷Ãj9{=ߘ ÓýðÝKÓ½™ܘÅ›_ßÏñÓ«ùY÷-ÍûÍZ/JÔ÷ϺWóõr»šÍ×»‹WÇþ9¿\L¿Y~4ºÃľúÙ\Þb½é “h ¡þ‹¾_bÒ‹]ÄUX5âî…¸J„<»Õ`»Ü(Ð øAƒ‡×Ç‘42y†µhX‚†%hX‚†%h˜†%h7óoÌ[-pÖ½Þþ¸©ÏÿXô?Ÿuß,W—óU5¢{Ûý½û¾ûö‚êƒÚ}†cËXmq¯áNb b¶p_ô^Tzmº¿-ß, ð«ÙòæfÚ_N.§›éd½Ymgü™®6“éêê/ꇠ‚ð`hÄâ}†#ÒP²È\d‹Æ%/6“êí·Ww×½8?¯+t/f›Å²ï^wÿzõ½þûê§Íæý_»îÇXáKv `wືÉbëÊ'˜H.6ûÛ0¿4Ù¢_÷“E¿Ù¬w[èÞH@,ÃqPÖiÒ'o >H dù ’õlÚŸÇÊ9”AHÅ’áݨ&?ίýd½š_do‘‘-X—æ|[)8-?Ý1¿ÿå Á*ÅÀu·È#ãåClÄ9–gÇ—|!Y g‹Š(e}ŒÏŽN"Ò#ÎTØF°=b²ÊÁÍ€–žnDÑxlÛñÈϬœTQçtÝ»m?›¬æï&» 5ÐnæëÍ ¯¬K7”#[Æ_,–@¸@*läðÄŒàñ2BBUSApèàfËþ—9’ÎiFToÿ'ä?ð)†µ4ásp–ùÞØN.=¸v,ÅŠzþ>\09‹:ëyÁícEÌb¤”ø£TÃßçE潇¿¡¨„¹@!ÈšZ– (Oä?ÄãÃlÛâŒ&§ýý"Õƒ§õxáÙ#6”è6 ®9NY ÎjÛŸ2,!çi5E£(ô`åZŒ`Ww̃.ôÓ´¿^œ2`’fgøMt¼µá áÚ•;²ôtö¿íb½P^º™¯nýòzyõë)­pZqÄä0éõ;‚é0m_¾?­;y=?ÔqA”à ñá¯ö2J_WÒý4„ŽŠò0p´ÚP[‰"Sr(myÚÏæ×)qrŸ6³f_xyôô (–?K‰³æ¤Á\{N°\ÑþIÁsÉwU8õàs0þnqµ]Mõ鄦ÇÚêm†+!ïÁ¥H¦M‡w5Gt¸©Ñsr3]ÿ|˜¶U´k;¶U&(î‚6J$Ü¡fÐgÚû&ŒhÁêB£2v‘c£rÊ0¤Q¡Û£¦oS±ñ !R2Èi„åñ\;uG`iäÕUÆÜysùÈÄ©.RòVÏÚs±.‰I±<(q®6Ó£i³®žÚa@L•†=Õõ¢ß~œ\½¿VpÝÃÑ)Á .ŽèbÔŒ“…î)ú©0šàÊi„ÔÏRìPÖ *‡:MB“sí«6X UŽR™EÖ¥3¨bd¥ e'´T´û{žA5ýÞÍ3nkÿ.ϸ­LKŠahÇÆ™µ DŒkSÖàÔ¦š"˜£kÜkëŒZ•* •QL¢œkTöPέ3£óÉ·)ÇŒ‹yÍRÆ#µÎì3(rãùE‘­¡]:‘FeËp­0ˆMñþ,ãÓ7È/¿U~F@>}¹|0ãÈîKÆ!ùÑŒC†ï}2|ï“á{Ÿ ßûdø’(r„hü~Œƒ+×Ez»BýÕJ ļ„0ëëÇ?E6 šè3®*¸§`"ëÏ:Pµá¦JoýËdÑ/NÙœBYà45íA”6%ÅôÛ L§¤ñ4DXj%X?Ñ$ÜRrò­Vº™O×ÛÕü1™Éš”o%—Ú®Ó_žhË—û‰¼ª…/«?BZAûc¨E; ân9q:—rŸ¶Ámí±P¬•µ[•}±9s£2eäþÔ¨¬$-I›r,bËÊ9!.5š.Švuµ«u0)Ræ`I|£r¼«árH9€ñqã™DpýÚ¨üž™Œ endstream endobj 1717 0 obj << /Length 2439 /Filter /FlateDecode >> stream xÚíYÝ㸠Ÿ¿ÂN1ñú+vroÓööptíp»÷ ØJbÔ±r–¼iþû’"å¯xf;‹Z÷0#™¢(Š¢È•Ð;z¡÷ÃߟÞ½ÂÌÛ»,μ烷ɂl—xùÚ<òžKï“ÿu–eµúõù'äν-pg r§yl“„YÆ8[­ã|ë¿£&Ê"œôðýóÃo0…^4,ÃÌWœ>ýz%Œýä…AºÛzWËyö6QÄIýÚûøð÷‡ðëZo¢`—’.Ÿã89«²ú†±lá+]­“0ö«æÒ¬Öi–ûß—GIdÓŠFW¦R&‚j°M|-ù0´Š7þ—U´ñ%$â.D§YRqÍQj·ñšªÎÀ,êëêØˆú>@èõ$[)4±;ÅaaÙ.¬f—`ÅA2,³Ž`÷› m_P݃,`­xúê@­´;ÆÞdÇ–¥¡w<Û.’{Ã%QèPƉ9 3f ~!XØžÙöÊœ¨7Êý4Ñ”ÿ‘nÃy°KÚð{dS,SWçKmW)®½(-õ# sz»ÅµîÀÑçÛ:wµ©.5kPVÇʈú^õRQÛ(žç‰õ)¢‘ªÓõm•müÅ=<£—ÄÉÎ/Ôy_5VøÒF°Ç­qœkÂw¯ôKid{9ô)–gXéx¬a62" HQœÆê8KŽÔX”Å«5Nû…£tŠ>.¹®Á›L醎&ͬê𩥡o»>ö•a>/ w Ÿd)à˜Ü°{±3™Ó]MìA^Qw<·ìœ4Eð£ùžR¶ŒÂÚ@<®@Ä=ÓôÞá¬ÃL‘%‹Á¸µ˜=¨mPK7ŸŽmrÃï¶°{ø|t>N†Fßws]Áõf_fóâT‰ÇܸÛ!˜|Pu­PÏ«þΆz£!@Gã :Æ›`²£‡áœ{ΣÂxê²Ê|î¾BôT­,ƒW^³¬u´˜MFoX^E·W\úõ›¢•gÙY²AGïI#nðÝoÐ4 MKùM‹ZŠ7Ú5cmßb×VjÙ’ÓZƒÌ±«ŒB$Cüø—€à.q#IJA-¢€/©?„èdì¡’eØm┋,(x•ĺ¿ÑÇÖÝŸF.Â@Liˆ ÎcÛ(dö’³¿•nX:¦n£g{sc¿aá÷¡§L¢²ˆý…|Ïátg‡Þ,¡“ÔÔ' Óë€}Ô!K_ X8sP£OºóŸh`0t†ød•†<¯5ÖØHåÕá|ªZ´U}£oðkÛ†‹„Ô§y=}ÓFžyâI¬âp¢ŽjœÕ¸wó% -¦Ý'„U)øäî“Å[ð1uµ$Û¢«á€sµ"uw!Z¡º÷ `æë©Â0Œƒ}œàe,²„öþà‘:¢œhštòè¨q™ŠeNœ èÌØ¢·¢”0Cov1æ,˜‡¬Nà$zHhmm{òëÈlѺ¿œ$î3܉nµŽü:‹˜*ÝMá á€׫’Ö |ÁxŸ¾JR¬*í¥¶âŒšg6 ›ÛeÀ#A|laéRµ‡ôÄÎ"œ"ã°K`U‚K¸n…ŠÜA–dëÌ 4T‡›—4|–¢©š#Q)lç"çx-ù0ò °Ýß@4Ø}€kÛXÌ ¿ð+Zù[Wµ¬+„B;±.­Õ`›{¼—oÀ! àl¤,Y¤a‘{K$£Ü„ÑPâײ9Ú’úéŸ>‡›0þG!v>¬#hìx%û`êœ4YFSÉ0S®½ˆüG5µŒÉ £ØC¿éÎ{ÙNµYzë„¿,®Ó¨íYÃGÌ"XTb•IýkÛ^0ÔÂ]й×nåüâèBÔäN6éëNêìk¬P¹ŒjîáK¸=€¶IlsR6 ò žð{ŸÖ> Ã%ãˆ9žíncÆ1Œ@ÆÑ–Ÿ9( Ú´CÀo²½úØäÞ~‹¶ÙŠ£uœMl$8…ím¬J2WåÅ‹G@–ì:{ü_ú?ƒ]˜~Ëï÷ÿ£éš  endstream endobj 1735 0 obj << /Length 2393 /Filter /FlateDecode >> stream xÚíËrÛFò®¯À-`• ã ŒoŽ£x•ª•²6×Û¥‰!9e<<¢Õßo÷t€m9©ä’‹8ìéž~L¿¦)×ÚY®õöêÇÕÕËŸ=7¶„#b?¶V[+ŠXV"à3ñ¬Un}´ßÔ¥ÌÕâóêÄN¬°ã±Ã$qÒÀ‡Ã4¢Ÿ,–~’Ú/éË=$ºº^]ývå’kyG>PFÖ¦¼úøÙµrØûÅrP¤ÖƒÆ,­Ès?ˆa]Xï¯þså²ÔîTút$9<ò’L¡“8¡ÃÐY—Šwý¿NV¹ÌIØÕ"uíFížkïKø+UíXkol#×Zú#1øäFîû.ëúöÕb]Vö™`ϘlFì%N%D½ÚK-™§ÙY´x÷uËjÝB$*‘¦VU[M´šóñCÇõ ö'×õešF®]oé³{’5X€G×ô›NÕQäY—ÑŠ6úFÎ-‹›û¬%¬ªîh±–’ÈÚVí*É¢<ÊÎÁ¬e7&ü?Ç6›}Vµ¹¹hŸ0r¢àï±bó€!êFæl8p"ïĈ$¾ÝJæƒ_6õ‹ìßñlZ+K³¯ªmݔّ¾Ò"+ž]ÐZ"ýéÀÿwäö|f…–Ùõ>ëÅbºUŒž×²­~Xx©Ý1@¶pü¦QkÉìèã5ÚôEÆRtF[£òàQDjO%ÓwA’-¢Èv 4TJ£XNÅD?MÉàï[Âk‚5”¼1!¶¬vª’-oÀ9Ó“‡ÃžÂ{ª¢ÓS}'`­ÖÃù±}SBƧ=Ô.DÃM½k²²dnåo½¬6òÅ9¡k.}ÙÙáPÀ!ì‚"´TQÐ({Á}av»D?òéöÄwH«6!–D˜U´1»;$ixæT{»v³„ ¾¸ù’Väk²jKÎ$¢Sb½â]m9cŸO^2‰¨6±I«w7oïïVÿº~w1i,™jr&ÛÕ•!9Ãâ7e0ûÍžV}<`¡Ë™“vlZñ1à>†sÆg€&”P`ñû‡Ë+³ƒHÏJÙAV« =»U¥¢¸ÇÃkúÜ×HõpγÍEDˆl;JF~B×ÍŒ¦( ì×!ÍÒ`Žì–ž³[2Í܈u4dJ1X×òìy±Ïšœ H[‰«2tñ¸ˆ#í•abÃ=HºÀåTåy¢—°@T=–-|—Ó>oõU§Š™·µýš’ßÁ¤“ÚÓ¶=–ݱP™Ñå¹(ènø{Y7|*ˆ©ÕZª{$°v½è»ÞàB”ÍVÛgà ¬É»¹×sò¾A{Ü7>gU„P߀ ›.À{©M«¿ð¥ˆ37`!Îv¼?Ü1€ Ò2JFÛ]ý%–•9–BBh“1#Þ£:‚{Y;âè{xrƒÅq×—ú.¢X']A_^KÛÿm©DéQ8}/‚¯Q˜œ“Útû:' ÎÑkÁíö‘äºÒ¬± ¥ÙÐE V󲛎׉}[fœ1ƒýÈ; ŽØ,hv²µöœ3škd¥T·gõèšýØŠÂ9ôåØÀí\·´® –q͒嘢 ÖJ¶˜&‰'¡"töá•*¥¾“ÔþõÃ&–nF`İLèi-sÜò¦±ÜP½N*93™F¼‘øûC`šÈ7Frmn9á^²1t£ÜÅÏhªN«Qltø0²ËåFøÓ}ÆI—î…N™’«›å‹/baÐ?zŸ‰³9à‹ )ÛéjíÇJ Šs8èðL/&ÐZu,5¥k5ÊÛIõV•ú0ˆnaTîÄLÙ"”"Æç]xH­ÂÐCt‡ï('Øâ¯ôºíœÙŒpÂEí´‡¨Î$ëlæ4¹D^[ëÇY¥÷åzC÷åãæùNóaáyDÕ=Šï<•—úX7œë#ïÂoä]¸z†w%¾“†éq/-HM"~©¸IÑЇ½Âþ —Áä: I½¤ŸB͹KÍ`&1Íq…ÍqNp’‚Ú· t0@3Ùdé‰Ð âdšT†×çÜ…5ð[ü{7λÜÌè7!wï~X ÷j¿<Ñànk“ž /¾švé8-‰(åaÒ'ßæ÷2iÌSh°‡[|s÷ïëŸnî¯?Ü¿_½~·ºÜœ%˜Ä1†ønfo^ßÞÿxýöæö›9†â±|swûáú/Öðúö§¿Œßêî×^ãÑáxNÇÙ]tvv÷ºÊŠz÷ìÉï„£é]zy|w :Æ“‚`é0\«Ô}©ê{JýÎæ_á;^© ĺUBQ¹e.…Ú -Ó’o%§ûùäP2°pB?žöÕÿÌÿ™-^š-~Ÿ¾^Xÿ>ï0Úó OûļBµ¯Nò×tÄÃÞj$I|Ô;„KjCsB&d½'#Ÿáõ 9b­*~;`EÝ앙͞WÎe)™Û85k!ýç™™,zìëÙ0”²âøxG§ÿN™‚çÈthT™5ÆpG‹QãUŠ Ù=VVÍg§O‡üEfgŸÂ7XîÄ0Íæ'1:XÌ£Ì+¸  *h/Èûù·Ÿi1Þ(3–#ì±fx0úï˜Á“`#ilÞ¤ß{†~‚eàŸmܧæ˜ßš9/̺¥ñ‚Ú4ÔãW†¥Žwœ%¹çšâÈÉð™Œsÿ‘úŽpÃïù‡„ÿ9{³÷ endstream endobj 1758 0 obj << /Length 1835 /Filter /FlateDecode >> stream xÚíYK“Û6 ¾ûWèVy&Vô~ô¶y4“tšI“½mr %Úæ¬®(gë_€ )ÉënêívÚÎädAà#ˆ‡ì;[ÇwÞ,^\/žÿø©SxE¦ÎõÆIR/-"'+à7 œëʹq_v ¯ÄòËõ;äΜ¸Ó¹ã,óò(aŠ1Ì—«0ËÝçô¤nZ¼¾^ü¶€Éw‚ñ€v&NÙ,n¾øNkïß‹‹Ü¹Sœ“¾F)ŒkçÓâ×…ÿm­“À+bÒåzÇA‹4wE;ð~ßó ¢k‘V¸Ý†Öb*ÜrÇZ¹ç%‘Y[Ñàë2ôÝ®ØVóÕ|&@—×R i­¢5Qêƒ+¾çmÅÛá¹kvhQîºC]éû¾çrß™S‡ŽèR4¢f½U%qY}àúT2¡0& Ò¬î¶8 ´ ‰$!(D»WÇ&¾+ëQÍgDúÝwRŠuÍ=+#óŠ("ï»Ë—«(ðÝœU¢ÝÒ®žµ Ônº¾10#AÒoÛéãYU¥’WIºÞ–†Ý.ÀõTè (Ú~öý°<Ôš¨ðßΉ}}ý`ˆÍžõlèzšO®PηWl`–Gc{ÖöÐ9Í\ŽÇý>ðV‚IÇî­áÉ Ãi wÃZ@ßh*um8hy ˆ°þ¨é¢á†Ãl¶¼’k X^ §;f¤vô»æZþÀ Èz±Ý’²^ÖßÙò–šöÆ®´¯Œ†*H•®ÊÁ¦†Ò’öމ¡Š® o¶¼à$ÜÞ§5§ÊÔé-®e*QÈÔ™D ÏŸW+w¢åsU'ªÛ·qƒL> v€LxyFÀÄ^æ¥3~çf`Ø{!€zÞ0ÿ°ŒÀó«%Â/l(ÑÙwôˆ€òý©âzÃõ2…Äy€ŸE¯£o0z!„ËÀY…±¥úº>û‰ÿ L=˜·Zq)¶­¾¼÷Æó{²¿.I4ÑìkÞ@´²÷f Ùp×/ƒÜÕ˜Õ¾ÁƒÃ“¦z­´bÓ7„áÁ¢4Ðo|T0CQ0Ǹwå6¥ˆV¶÷neBìùáq5»Íè熣¸%Á{ÊÑÉÆÈ@ ‡žŸÞôÌm|[s®E0‰¸s­ÊQû–³ŠámáÓ`c“ÖCøÄ‰—Dÿ>Æx•F ¼$x"”"ÿQï0Ö¤ñã.›®®;L9wðJO´Ÿ=pë-aâ~8Ú||yÐì(ñâ 3vÛ0‡ÛJïჵ€U4$ÙƒÃKn˜¼½ä drPtÉA{ ¯ÚÃŒL…ÚÄÃVQ˜Vš@±RRŽÂi:„%!¥ªµpÌèg¶~·ã-mcuM$t© »J…¼|ä¢Ü=áÒUkHGr¢‘–;£\·šY1=‰ ÷­7'eè™|ά멪ÔÔPžš*1‹>Hµu*Œgu*°© ôû"¢QDL/ HŒ~*±«im²ã^i ÊíH×IÑÝcÅgUZË;Qk¦ÊõQWÝZ·‡a±µ:fJ?t_3¼…vìmñ‡³Qy˜ÔTEÀH—00*YKƒµ^Rª"L”¾XkŽÙgz‡Ð2Dk¤ZòV³¶zÏè¨îÕ‰ªž% ®*¡(:[öéâ36Åbœ[ŽÄæ 5Í8nœ›-ÙÄaèÁšR×P3ż \sÄhTJFÍv”5g½zJ›õÀ0tkVmš‰¬™¨f­É­5÷J`÷féË´ái[”Úf&r»VyŒÆçFó(¤_0JSÔ %¡©T#Âs¼)Õ¡Åk„rGXm˜–¼ÖìC×Ñ`£ün™&®*÷ ÷•uyy²YöûŽ:&˜@G-d8êé"Óumx/Â0…)qš~Æw6}×P®±zåºv•M+1‰Ý'×+!Ëß½~üG„:ñMs_¸í¡Y«Ì–錿[ÑcÌt“a;9—Çu¾>Ò:X©QÈLïùæÍd¾íÌ…ß ~X&ðÜðl¢Ø“ERÔSQ£>šC„VÖ6¡4Õß èL ÂhMýŸM¿zø±&…I‚+Ê~†:»“×Wo®Þ¾?W¬C²Ì¡{Ð2î€Všù´ÊÎöA/»CK"L Ã¶=ôô}àíLú½ùÿµ3áÅØž^ØÎ¤^’æ÷Šª3¢$y dœ„÷þ)@jŸ$vªèq¤¾·à6Uꉨ£Kó”^ÝŽ.Œ”{¿õ¸a>ÊuÀAÎɶñTÓè5·ŽýLê%“Ï´£â«Ú¿bžÏç–×ÖßOsÚ÷fì/4cÑ“4c'Qñ±½ÒEMÙ¾ý 7ù4lžßc;ÃèÑJ”]³­ý¢<û>÷DÅ—('9~t|*Œ¦j$C¥é¦—¨W•܃ǟû÷'á Åùóç©çã; endstream endobj 1773 0 obj << /Length 3136 /Filter /FlateDecode >> stream xÚÍkoÛFò»…ÐO`ÓË7y‡Ã!IÓÔêô÷! ŠZIÄQ¤Ê‡]õ×ß¼–/ÉrÒ;œÝ÷ÌZͶ35{wõzyuûƒ­‚YlÅÌ–›™XAìÎÂ~C{¶\Ï>Íß”{½Î_–?!v8‹;pÛ C+rØŒxqã„Ñü–ìÀÆEWo—W¿]Ù€¤fv€+ýYº¿úôEÍÖ0÷ÓLY^Ížs?óme9nã|öñêWêeª}ÛŠ=¦å¾l4’áÌ›]ÒàÈ…QV3,-‹ÏJ9Û¶Jš¬,xÚL–E~äQ[ëM›ËìÆl§–mÑdÅ–Á»DV7%O¯äøuYÈ‚¬:j@»«€hº&Ñ]—›æ)©n8׆å뺮ûǭņóŸ“baûó£–Tks•ÍÂñç]\{•¯¡+YÀ4În\×·¢(šÝØ@ïói;Øøia«yRé¿ÂÉŽškkk]ÃPÅó­.t• ·âp~h«CYãq0o²=QpC §ÐQ§× !^ÂIÚ0 ©Íöy-«øØ¦¬j¢#šo*ý[«‹Ôp„væ; ¥DAÌrMŸxq5¾±nR«ƒ‡–…Æ$:¦¹®ÜÄõø&(HÝ :©x&ÌúX¤»ª,ÊVöØ<ú¬|ÕÖ¨XhIÞm±° Gp‰#ŒM€çìÌlÒæMvÈåøC¦É½á˜ä¿ë¤I̺ßÚ¬ên/wÖ ‘ƒD{•øû‰“ˆÙ&PìÚ– «= ’ÏIp¹±1ñ|ÏWDV‡ÌLåû`”´¿gy†¡.|dXç\øãÄ £:-ÒU\„g);î©úØ€ljá%„PK‘ß½ðr]eèëñW’í¡hµq-cY/lHUp¤uEQûLŠx#„ Å‹æðuÑVÅQ翳¢..znº}ŸG@„2êot¡yöhLH[ë¦jSIÄGÚèé9ã$§Ü0(ÊÆXœî4ùnÔîÜbî­ÆÎ‡7é.)00_äç[}ìýßòçÔ/c}´‡?ÄH|Û°&øÏXCþŸªÍ)[ŒmÊ—'Ž0ϼL ºJ8<4 $qedí/ûm¢ŒŽÛ4úêK™+ÕΛ#<í²³™§èqš´µ%㔼Ÿ¤îõîzcË¢ó%ÀV7£à›Üøl‚{ŸpÝ©êB“;à]׉ƒ_ºN|H­‰—®o—Ô–Ã!Obòúî—7ËçòJ5ÎuMÝzËí4ìÚ¢œŽ2:„õ:ž"êxdù2˜Xg¦è»0 iL¡Ëäqu[¤Ì†¬9.ŸÚn$åS#ëvZú€¸$-«Jׇ’‰´Ùz50iŽz64‹Yå°Ö%îúzƒÂÔ£èeªl€I ðÏÉP™+ {žgØËéã¡QÀ£ÐÆ}+U˜UMÓ;CÌw¦ïù]W@Ê÷wf'éÇz18ÅYõ˜­Ç›tµðþ\ÑÛ4Z)Å*ÖzÚ*)’½ Ô¹EèQg >_¶—¸Ò9qúä­KVI¥bìR\]ÎëÔØµÜõ¤JJ°T_îcEVt޶†Ò}¤+è¤n;‘t’Ò¼LÿõÌM×»ÓÎ#.†U¡hVß%Íåk8Ýø]…䱩ʼ6ŽÎhð wë^B(ó•¹V@Y 3Ò`ÆK¥i[½˜ ðùDtÄD|ÐÛ¬F}¸µ”åF]W{WRÈ“ÚVì\:º_ E¶ñï=hÅEöÙ@v§§ÝBöc‹éyw*eðœ¦iþÜ6¬a&Lòù#]Óg·Ûù_´¦bàO¼ï %;T¼%‘,Î}¿¸åŠg…f=Ø“óåUž÷^™)ÔÔAW– !e1Á껾Ž2ó¶½9$ò mŃ#~qsÎOMK Èß~@é*”ž0ª,–']ø™„šã!KÑñcܦã.r0°ÄÁûÉVÒyû|SñcmÌ“)À:ÛfM’³ÍÐ qŒIü`­q(ãs‚a¯œÏD0jÙrûÕubêÎáï 3¢$@)”9øÒõV3”Cql$ ¥H‰7€nPQ4òAdל^Ùí=&­(ÖÀua*|³¢=J96AY0Å“Ý{.¸ªÃßë}YQ΀šé…ó»æœ¾©ž‘Ã,?™ºž=?–-OPz‡Ô¬ªnxšÓš=õ³?ˆ¹€"¯žmb<‡ÅŒAÚêÈ wäèŠÁÂñ—B8O®Ë”Ò@S4â¬÷£Ïld u5}Ú8‰¢@PZe‡A>õÿûäpèÐM2¬ìñßL¯[WÌŸg^CÞRgص‡ú‹&ºa ËæÚ#1Áo¥APµ¼, Y/íÄà˜‚`.áÏQObrÔñ`^àGï[®ò $tÑñÍûŸß~÷ðñ××ß?¼yÿëý’Ÿº¦1Á¶] ÞðáÎ0·õO ¸¿É´Jïêò&?Zؤ‰¤§5AË4ã‡hžó?M]Ÿ»˜­bËv»¸u»Ö·Ì:õ€äÙöW\LL8ß`ŠCI ‚ÈþEšÈRfžª¬\X.qƵ”ëD\¿©Êýp½Xv`¼_Ð×íüz€ÆÓ„p|t+œ>Ꙏ‰‰;¾Ýë¯NäcúÏÜî©´À¾Ã¦p¡sJ¹Û†Ò´wjÙ>‡‹2ôå?Mè(^ÆŠaÜð‘»É{±þ–Ý?t&-¹$þ"/(ÁO•ÎØ<çyƒâ¨fë¹ÆoÜöûâ$1É>ÉÂG÷^‡~5¶¥»”ãÓHha_æîEyFÉ•<žÖœ!K†5_ñRNàûõuOޤ2HSR0ÞJŽç׫ó“xi •dôri> stream xÚÍ[YsÛF~÷¯`ùe©* Æ`×¾)²âeÖ–‰©MU’bA$D¢ Zq~ývO÷àâ²×Ö>ØÌÑÓ3}}Ý€ÜÉzâNÞ¿únþêí÷ &±^0™?NüÀ b9 cø Åd¾šü2½,·é*;ûmþÎ'Ì$ÎVaèDÒbz¢tÏν0š¾¥\ôêjþêW&¹ÑmàÁJ²Ü¾úå7w²‚±&®£âhò¤gn'¾pOÐÎ'÷¯~|å>ϵ/œX/ó³È–ÀH¬¦Ë²øÕu½õ¾J±ÃŸ6›”FÒMræ¹ÓOY¹¯h¬|¤¡vβÜMÊ£OY³1Ýx+oÎÎ¥t“÷ŲÉÊ‚oK„=.=¸-éû消À¢N›o±Ø–«ÔÜsÿ|B†ŽŠÚ•¿º¾ ÿm™ÕÄÚ¾NWÎÙ¹Rr:7ììʺÎrMtr®„r"59pMÀ‡¦¥·q‰é§3ÏŸ&ù>Ez¡7M*hJú}Hià¸]QWVð” Ùb½[6gbª³xÈ&—û-MqÔMR45p+C5ýþLÀµW†"Ž-Ó7øN>S÷*}<î4Ùç ‘ãEO<¸š7[î·ûÑ5üPgë"ÉQAÞд²à‘¥!•¬V‹ª*¥@á¤Q¸ëÙâýíå|ñáæ‚5‰Ç÷nvý~qs½x1¿Z|7›Û49ŽÑ9 ­Y¾Ëç€ê ßì¬0cIC­eRëÛé/è¤OYžS뇫Ì‹—Œ÷jõµÝ÷Ç/ T•uV·ÛÑ@“E -#J‡.ˆÏy.B'–rä’”¹$e¶…’µžýÀ“ÐÄ©'©y†Yöº¶L_k‘{Fä—ô¦Ú¼’:^Û¼R^._Ýã^IY¼ìÆŽ˜nY1vOOU¹069—±rÂ`¤UìQÜ·ÄÚ­ ÆÁô?›u&0v£»´ÊÊujC_;ØÞ4 fL…ò§ö +êH ^þ{Q¢Â<Ú(2lè¯7å>çɆò.]fH*åÅI=Ú;Oj^¿Kªd›¢FY|‘æYJ^ ˜¹)WÈ‚ §%tWOèj,r®ëÄBé¸6 FNkâí1`“Þl—ÔS¤ëO¯Ë&5Ìh‹„–v•ðKJcFõ]â¨þ…H™äyʤ_k1¾6û,“}i5ÙV[4éî‘‘}NÓÔti•4.@µô=´¥Ö áÆŽ‡¦K øhFÎ`¦š'¿µ$´æzìRC§•°74`éCƽf; ÚÒðì£m±…Û–½fŽ,•"³á5½¹V Žz-x ôN°p|7<4`ÜŒ [-'hÀÞȆ±ƒl¸ÇÚ°ëøžJÀØ0xËÓ%êPìV22›èË^`ƒÞVÐ&Ô#§EÉtx^ñë5€'•Ç´w³û‹ï>\½£°uõáêÒ¹DË£àÀ^z[÷̞À’xáШïA@äC®gôûP&Õª¦6R탨§yBèSÒ_H­½) OÜðŠ1¬….0år™ÁÊ=³Sðj° »:fm_ïÁ”?óCÑzD^®9”ä{«* »Ý¦ÅÊl Faqu«¬N©’™6ŒØë p{˜ž5·Ú­$`| ÎgLQ“pÔoÆtO{ ƒ$ÐQ¼Ýú÷.ñýéЕ, 'FòdÂà+Gª‘Y¢±èg(œP K0†MA«nʶ;Wè2 š ý ˜‡¬°Cž6V=¯õ:$¡á–fŸ¤êíÒ(vÛ± EÁ¹Æ”"E¦}¯“ Žûú »u/pÜP æi“ŽŽ ®(ÅÓƒÛIjLrö 8êåNl÷ N7 m)o…ªŸpìQç7œNL‡¹=¡*¶ =¦„èÓt®´_s•¸] Ç›_ÔÕÒÊ4`‚ ºM·æn4Òè6×å{Žß9Z2)èxw.4†ÃlɘœÏeµƒ-'¼G¦óP“ó ‚Œ¾ßgcSÀkÁ7ê³kñM¯WƒSîùRáP}o¦v¹>‚’Jë,ŒE‚&VF õ)K¨Áüéí÷3ž…p[•kp[ã» í„O³b·oj:?DJ ü «¶ùÀ"Ù¶Æ¥Y!#{Ü×Ü­zþ,"Xqâ3= ºõdHJ¸«h[$±n4Ò ¶Õש^ &ºÛ€3ý\gË„ýG†Çy 7¼ÓAæï cï,ÙeØ=0hÎeÃ6nèøq0vfZ> â–õþaE÷—-™‹6„FÒ]9‰:œ¾›ÝP£Mì„pSJµyÛúµÀá÷ãy É\Z÷k}••{Ñðîô KU§ßøpS;=lkŽÒÜ$E‘戼Câ²'HMDë¶L¸Â¶Æõð‹w›rŸÆüð›ñü´X–+3hvdP®·a¤­ ÒÆÆ£Ù•;Úš=2ðVÁñtˆ{‡ ºè´F“,»«;ô­2hlW˜SêŒÓ¤ÐбËxd»×)«D£ÐXO†œ)b$«ŠÆ†2êéÕ¶\°•”ƒ2ŒdL”²ÅÐà,ÉI3Žäl;^D¨µÞÀ ѱ¡Kvèî1³Èï{ãпÊÊúßìˆÕ'±èZT³aBöÆØ©?¦¡&ªvº8èfcËk\©ã)³qyóñêÝl1»¾ýɚǀ©x^ëÊÊ^;pÂ(Q¼ùi~Œdè„n;];²¶Zs£Þ+ƒsàJû) ' i ô8¬›ü¨/Œ¦×ÚçkgO3°‚jX ¦Ž;„óû=5H à*¨;üOEሡImã´Ä°–\P‚b\¶µ=„ÒšªÕûÝ®¬ÆÉ×ÝYвD‘î.%þåt~&d˜ôïþsݤ[jÏkïWé³"á†Ä=êy$¦³†ÑƒÛUÙ6©LBVÒµ†SÆús±ÜTe‘ý•Û}Þd„BaøBò ¤ú£Í“ PÂÝOZ.ÔÜþ<£ÝúÍÈøM_önçäY¡ ºÐMÔ;eâ³v•[áÊ–0Jr­Ýô‚KóÌÂP3æMo/g4`ăƒúBô¶Îêá–`Ö…®AôÉ™µ×;( ¯DA£ý(vö§ˆVçô:ï¬Ö¾†´o‡ÞˆWÙ:kt”]â‰æÔÐM ©c ¸Ô©™†ßz9@áK]’B&²óÖ»#À†ÅôJ—¬ûŒÀ©k^Ñíïòþ–Ë l+â*{$Æî>⢌˜™Æ…cý¬¢!ráèæ¢ÈÀFã,£^©íviR1Îp˜Ú7v´p”…}\™èÌçóŒSþjŠÖ=zu7VÀ˜õÅ º>×%M¤f“¬Ç6«¦tIÞ Xo¨GŸ-†ì/_ií7„xAOÉ\s2l…ô£Hd0ëÕ<ƒ+ÐÒÈ\³µá±%0âþ»#TÜìÈ "‚ŽjK‡7–pÊÒštJpømx°Öæ *@ QÁAé?iŽU¡y¢#ÚFK[„„HãG=^·×­Á¯‹|«ª÷ú°âBvÓîÊ:Å÷žãoâzXdNè§µy|˜½½9Š PA,Ým€‚¶p»äB¦G‰lµ¦Ào˵µØˆo€`³c²鯖mÖú=øÑ­à`¾wd+²ë à÷/¾ÁA@ö˜ü=!Áðøn.8àPÚ¼ýcŸBt¥º6(¦££}D³ØŒËóÙåùnµ_9vo^BuŠC•2W¤›ÙŠŠ²Á©J£”gÅ.ò4¨¡LMOGËcÒ‰ºJÓìúþzqysýýìýâþj¾¸üpsùïÅýÝ¥U€¾˜²­—Ñ`<”Ö Þ¿pƒÎµ'¦¼Š5-Ä™ÁØm#¦$Ã@$#ÚŠt=ãR=v¤^ëH©Ö©§tQ„5Fw?Q@†V›ì¹žqº^<ó†§GrÙ°C¿ïÄÆ6¡ÑzcòÛ´PûkÎë°‡^oWY¹·qú2$˳&3*E| 6§xžÂñ²¢SJ›ÌÀ½ªqÕÔÙ)?Êî•ä&MVÆ‹á†yúÏÃï…ÏqC9ñ0Ãó}/${ß ©8vT¶ß }s^èûò¬»ž ³a?¸g"AŸ+‰þ5‘£T ´À²8.»w÷øÎF@NÞz¡nð›°!ÑMDÑ€wi½¬²1™ñ·['¾|óCQÀ¯:MÂSÀ©Œ,¢H[|) _Æ'Ä @8zñ=†qúYÇ~ûvñãì²ðùÕÝõÅr]'äù•|¸Vyöùé¦hÇÓf‘Ú¾ nÕ!¨^fy®ß°›—Wv-x1ˇZ$ÔiÏkÁ—Ñ8­Bø”§"}ÀGÁóZ ñ5ñP î €?«_Ƀ]Lõ ûTh€)”0é‘ÒI„åÓ"· 9úú8"LhjnÊmÎÈx¹NA,‡‘† .2íªô|Ë%ÞžžÖæ;;£½…†0O&n´K,;µ¥z{kÿέŸE°¸n?|‰ÌŠF¥½ð‡pÛ Ãy±¤ HøêoºÏ/£qÒpD9Q}ñr$cIÜþ<[ÜÏ/îó»Ùû÷WwÏÒ×òd7$Bcè›w•º¾­Ó8Ï|?˜åÝW íËÐcJªŸt«¯à–¢Û}‡ÿêçÜ÷n“$=׫žlXy©ßôs6Ò¾ãt§Õ¾°š‹ù¼"r?þë¯NŸ¾›lùÇ7Í> stream xÚå\Ýsã¶÷_Á§Vêœq@d;}plŸÇÉÅw‘•Nf. -A2'©Ô]¯ýç»ø %RM‰V§Iî’Àb±ûÛ`1v…ã:wߌ/޾îï„(ô‰ïŒçó‘R‡‡ð˱3ž9Ÿ×éJÌâá/ãoeoîÐÛ§²·Ç9 (bª#ÅÃKƒÁ[ýƒ},]ÜŽ/~»ÀÐÉuðv#™3]]|úÅufðí[ÇE^8_Tϕð‹õ¡½t/~¸p_æšazš—wCÌiœÐ`-—²ÁÓe:ýU¿ËÓM6¹~/dïNź0ËÄ|‡<Æq o–ùp?ùþþÃäþa|;z¸z?¹~ÿáú»R<»laâ ýr\”̬Ô}ÄY“øÇ÷ï'ºÇn uŠu˜oô²¾¦½¤ü9Ý,gúå:ÊÍB‹ga^‰,Ngúe:—ôK€j½Ð¹Ä GÆ4]=‚¹•ì  “dºeæë\F’…~(Ró[Ž}J£l¦›_žE¢[›\°H„¸â.Wvÿðø0¹þððîþnòx;Ö™<Ž®­RñBäѰ‹Ìʘ‡p ã(¤Ô $N_‡>“²£nhØ ƒÁ4M~v]²ØdQ§’Ýâ$/²ÍT¾È­zdŒâzôáÇñýÃg@¾¼„ŽÀ`,Ô>½È'¡×µÉÅL¿µ)iyŒ 7 ê8ÈÅRL‹·¿mDöÄE(h2ž>ëfœ"qê§<^Tí/ñRµÈ Z¯E”é·R¦ò7Ò?‹xHØà³4Ba¾Œ†¾;?Þ›þ›b½)t{' / c©0ùîYD3ahKÍ-…M‚”ƒ†x…«©òkèÙ&4ð$.­lk&$ÑDz 9CQN;O—ËT²þÅ dG<ºMÙHÔoýŽ2%Be^‘1‹'c3,ZÌêUöÙJG>I‰üußÕú EN?€USÜtµtÇÕz! ç•«}u„â bС…ô†ù@jš„öôxW/~XCÄ7†ü¸#ÝGé™0X°Ø—•¿#Tº’ ¨sr#òi¯•ϰD>, øøÙ÷µ$h; n0¤ETÒÆ]i0åJi”2Ä1n_ ô |¿.HnÑ(Xa´ ‚#@÷œÚÇÇ“«›Ñäq|5㥞ȋkUªO#VÌèÙ‡!\i³ÃoêÆúRùâDù)eèE”•M…PpZD…hDLJû?¨¨\Ö\ÇÍÐsWòó—ãk=`<äî@LŸ“xZ$æ"ÉÔü>J6å§yj‚õ*Í„mŽ8.+êÐaÜ-à}ÜÂg†I?Üv£ÑŠ[®*ðü×Á-fˆ¼·ä0nOåÅŽ[H8©Gà–tÅmºþãÀöxùîÁV’ðÛI¼ÛŽ4Úa ¡&Üß3Õ—B( ñ‹¨eƒ½VhEíãõûïîZ{V¼²«œA‡q9o QÀhµ^îo?ºâR=5‘hR\ëé‚Äc·D ÀiO v£ÑD¹? ¯D ì@¼¹ºþñãÍC OãÃEŸ#øWó^ðŸâ ÊY45û×õ,*Ä+CÒÿ¯BòXîCÒ¶€ô„d7íÄ>Â,|•Î(FÜÅ0ùb&z*+vXzù%(4nº'£å®ù˜/ä}èBæöDn'­Àõ‘Ð{àz!ô£¾¸wòÀÌ=ŒÚSù°£Ö切ƂôÌo(ÓÇ »€¬Ÿt,D"²òåz“­Ó¼LÒË"T”ÅéFÕyÃA –éo%qõP•<šïU–?ÆáÛS`¬€hºƒhêú»÷0àéIcäÃ:NLk%»únFé;%²™.E/êŠ<¨j“ù \¤&Rª\>É|S{Ö•|¹j¹¢_²õÝ…óIuÙÞO«îˆ™/µIç›dZ ñ@Þßz<g*–·3vYº¼4¯rQÔ8mfž»:â†RL–ë)ÌE>®îœŒG÷w“ÛŸÆÖ4t¼½ùUÙ¬F2Ðß3R÷!›ÄmýUß»ªÈ„Œùú¥N&–›Ò.çYºÒ½Ì÷îk‘aîï\a¾•C¶1ï³Ýûn¯˜ jf¥–õ-`XR/Cp¯âe”-¿¶®åÒs=Ä®{³¤ï¬+2¸ÃŠø±+òhmEÞ žë·úž4´Ï׺¥aÞùŠ‚Q ºo%ä:T7éJåLÒ/»\Y½M¿˜AÚ_Ý©»Mnoînm+ûn¿Ã…Çï»øÇíÈŽsØn²‰K£E®— \Ž\d‰©~¥Ü>ü*‹”Rf¥e‚n±ÜþÖï7V’jœJ6 g'zäk1ç&6‰ÙB4bç\©d¹¬ÌLöyknŠ™&¶7ÞÊ“"Í Ú¦ÞòÊŸáóÊX§¾ªºS­¸EY—ª×«ôTqµ®¼öyåÕ®½Ì&÷ñtPò™¿Œ™ô·òç®&)â®ç7D«â“|/í †×A…N&œùεÞ:5ûÛ½ p À Ê 4a,{÷¥¯cbƒ~y%¹Ë »´|’ð˜U³…££»mª¼u3e4w Âe-àsÏjñqŸDLß-7s·Iô´ßkdÔãjåÞ¬4ÌøIQ…9‡M‚4<Ä|SìýË!"Ê îtœ‰Ïð¿;b†áù R§ß"½™íH 9„&bÛ|÷2ìòšäe¤à@A%™Ç‹ëÕ¬©¿uÕ ‡EÓó)¦F¾§^ú²zŒZdM¨ÜY.Õ˜†=YuBýJ'7Q5•ò‰üÒY/¡…ŸO1uú=5Ó›ÙcT㇈°°¬SwЊ/µÉõÉ6ÂrõuÇóè¢N¿§.z3{Œ.X€Ìfu“Èýºèâ:é èÙôljøß‡êÇí¬Aȉ]æOƒuú=5Ø›Ùc4èÉÛªæ–@^DE<횤$yÑ­ëqÐÈŠ<žä›§ý”cWõ¸»î)-ëêçÑ}~OÝ÷föÝSÒ<ò¿¦{u8QŒ‡õÏ;«Ÿèülê¯Óï©þ³1k„u¶y6aÔé÷F_f[=äùfSÿVíôÕŽGîø [#,{mÇ‘<ïïò4®ƒ…©cðN]uàå~‡ ŠkƒjßRÊ2D§Y!f]­=Mºõ[gMÆ—‡Y]Ñ×T>:q¡+#Ýúæq2툉âYÄõý}ŸæêÝÉÙ̸N¿§÷f¶KHØ¡€ƒe»±òvÍVwÔl´ü"k{¯Šïƒ–©O…¥w².a;¼Ù;©yÛ1.zu.ÕÉ÷CPoVȉB‚˜g<ûJ¬òý]£t”j;|;p"óÆìYÞk\Ç¿„þ[Çø˜SHþëš,q¹;$v‰÷DO6€C€ÕÝ‹¾p°¶I€0lÄÁºÞ)ä?;·ŸÕ endstream endobj 1702 0 obj << /Type /ObjStm /N 100 /First 988 /Length 2142 /Filter /FlateDecode >> stream xÚÍZMo7½ëWð˜Ä&Y¬"œÞ Û’|˜H³²°ñŒ13гÿ>¯8Í–}l·ÕÊø ¨š]$‹ÅªÇšöRØ8㥈‰lJ4¥>%ã‰ñWŒÏµ!›Ð BBKòbHu“#é¨M rM®:NŒw!¨„ÑY¥Œa=«„NQêX:…W=·‰¡ÎLÚ¤"Ú£‡P¼,¤ª:PɪFÑ—‡÷&*' b®zd‚Pz)GHJÐ 9]g ÑPu6D\ßb¥ìª” ɾ-ʺ¨„¨°ŽLÎDïtdò&†¨z˜2’Z3‘8B‘sÆ”LøH’âÄ¢¢Â„¶$½9bqu†bØc Ÿ`uX(†Õ¹00s]EÔ- SÄh8'í‹ÝçI#^jßd„tCì+û½l§ûÃÎHÝ‹ÄÞH©+Ãâ±ÏºØlWt ô‚yµ‰!Ô½O»@JÚÀ¯Œ•$ÔqÉ$U†„áJÝn†ó¸ŠD‚ÉÁ9‚L¦¨=;Ç¢=zëlw«» ƒƒ¨}`¸ârÕ+¦„ê pÉ]•àæ ¸p?ÅcŠçíŠiŠTNx©ÉC’Ú†Ñö8upçÔxjçXsP±TMmU3¡•õˆKÍãöç&c=è¥x¼cmHêÁn頻å$i«®Ø¥z’ŠN‘êQRkb‘µ5ªX7«èlv;99ê¾3§^WãÌ+ÓýüË¿ ‹ô‹®X‚ÿ­®~ûííÑ×_?ªL%[ÂzF) ÖÃã”]´Xí8eÏÎê§؆¿*¿\¯væäÄt/aX“ö ÃmšŒÐ"<<éy¡ë'1\†Nºgõƒw?nÖg¯—;sjº¿{iº7Ë?vf˜÷Íÿ>,ñbq±<꾆åj·ÕPTu¯–ÛõÕæl¹Ý´Úö¯åùåâ›õæT'á‚ÕÀsô6—·˜o±Á ~ü^ÿÅjµÆ §û€¬°j@în‚4!5!7¡ôB¿ª¿€¯ãu¯¯~ÝÕç.Wÿ=ê¾YoΗ› ѽíþÙ}ß}{ê냮ê öHdu{(“­§Èzø2•hÅG(½¨ÛñÚtÿX¿Yìæ—«íêø|±[ow›«³ÝÕfy¬m_ªg„pk5šô˜BŒVCôDPóái&¶IO»Ï ‹9ûÑ6:{·Xm?,Ïf´“D›% ÀþMûÓÍn(IëÀNzgò9[;SÕ¼i"ªù$Îz% {o±¶ÎÉgàM Xó¦‰ÈnÒØ¯#ׄ6)…gÈpH©û " ?9t†ë1µ˜4Ôì1IrAâ “’s¤÷3ˆI X‹I‘͈ƒ\4p+³JCcq‡Š%<¨¹\¯¶gëÕ./®6 }šVôb3.) î¯'ìQXgë÷ï«ó-À-ï/WóÁa'¸b¤K²1á18»ÍåÅñz÷n¹™q·RŽ™â ¸éú?g½£#píØú8*\¼­^n#hšV|Êi !'+1U@xÄè>L†¢‰:8L6P-NND5¿‘¤XVÒ¶“!;q²kqr"²ù ÅQ7jð& €•äáƒ7õ oš†êÁ¥x“àŠ%eÜ›Ú=³Lâ­Ö¬Æ)#†0¶QÊœoœr1te2Á½Åio±Ý÷N­ÌPÊë3û:ÐmòËòdòK™ÆÆLcc¦±qÞØ8olœ76ÎçóÆÆyc™ÛÈìŸêŠG8ÂþØI`$štà Þ@µc7Õ챉‹Ø2ÄpÏ*^ÏÃ{\-„O6¿™BJŠ9 &ž'T½ž'„7PÍ—&¢š¿4èØ2ËP>Eˆrèêii(ŸN5£‰¢Õ_ •ÉþXã‹M\)‡|Èó†Ëþ´Ñ€ìe£¼=è>Î à\_“;“À ]“®ô‹ªkê^œœÔºõ.Ù½î~zõ½þ}ñn·ûðU×}üøÑâV‡Äg×›‹/gçrºqñšËeÜVNåö˜®©ÜPw˜§)¥Ê›Ú=…\é\©Ë”„Ç)–²ŒTŽˆŽ9ÿDî“©[¢»Ô-ù'S7nüŒ?ãÆÏ¸ñ3i:Òt¤éÈ Ó8œ4'ÃIãpiÖßáÎUI²/ "£0Y¼–Ë#.½Y.Îg,$ÁsPpZûÅ3Ö‘*7c#§¾ bäôÖmÈb¹yηg‹Õñ¯Ë‹ËÕñv3cþȯzêÑováQxZãª%®ãåïpáù¹K a 0rèwi`jÓ@Ío"x4ë—?{ÚÏÐü9”¸°Æû'"›ßPZ3u׼߳uå༿5xÓ4T󢔬~ø¦…÷€}²”ô«2ÄMINéƒ|% »ÐSð-63FvÜßÄéWNbI ó Yp‘ë] ïKaJ)î¦vO¸”z Ç)ãjãÇ©’àÿ½?Kß§ ¦ã ÍúiÔm÷Óûd6—Ý=l.›»e›2…ß÷ û‘Ê„`’§‘ö·Zî:Ç'ÓæLPÙÿ‘¥@6è_Š­ãŠU–­¿>x¡ùî±uç2O9ã7µ‡9¼â±Ê„ 3VÙ«ŸÿŽRFVµðÑÊ0¥Zxœ²n´†g„Þ‘ªI.Þ8MUÈ  endstream endobj 1804 0 obj << /Length 2145 /Filter /FlateDecode >> stream xÚå]ÛrÛ6}÷WpòÐ:ÆýÒËCê4§§µ”éCšÑ¨ípjK©$·M;ý÷‚ݺ0Wk{œ'j$ððhÏ8»¤eZœ´x¾÷mïࣺpÄi®‹þi¡4ÑNÆù£aE\¼Þ?œ^”ãêá›þ‹z´)¬­E=ZC¬àl9Pð‡¹±ûáÀ4«OÚû®¿÷ûóƒhÁ>\€û3U1ºØ{ý†cÿÙ‹‚élñçräE¡%\hÿú¼èíý´GÖ”8U¿¬ϯ# b¨,Œ´D+^#×ïsâ¬+X=Ú³²8ÝŠôQü†yŒÅ2å ×±4qÜí€ìpvV„'W¢²F&YËä1^%£q2H5šNN«³Ã‹ñR¡+4ÿiÞX…õU“ùdeøcMéþ7[OY~|tÜ;¾<~vô|õb_…7¢ogK£©0>öOÓ¨)˜lŽ¦ÒŸlYwQç—¿ŽË?:È:[Ì«ÁƳÓeåÚ …'kŒ”L6GVA å¼»¬£·ÃÉü]9ê*ìè|:úmp^MÊÎâ2EŒÑxâÆø@qÁdsÄeŽÐzí*î–UxyàÉúPI¬§‡¦OŒÔL6Gj £€r<\ ;L¼p©§ë''Ï9wb•EÓt¦)œl†¦Ú¤ީ¦û¯é›‡™hÐû®?8yùªtÜÙ ië½³sx*Çø@•ÁdsT¶š0kv¬2KSùøhpÒï ¼¸?¾ê7¯{‡U6K·Ž&rÔJ5Gb£ç6H<+ÖÙºžŒ§ƒ Íþ/TÑ–Yw»Bv|Öbƶe¢¿KΜ>ZBÄøÀŒ“ÍI - ×.¤Duš'è–ú:ˆJk…þIUHÓŽ¦PŒTL6E!&¹÷ÕÌ_Mñ•ºœ~ïÊÙl:Û$Öƒ¶™Ô6u¿ì܈x5Eðïh:Çø@Ád³töG¡¡Ë¿ªÅ&}YV°y0ãhÁŽñÁ†’mYä#Â5SƒÇ‚ëE ^Œ ”lKð8%R4÷ÁAû2Ñ[Ù¶ûˆºG’6´6ƒi#×Z.[Gçi㦗‹w—+_éã™Cƒ“FËœ˜9`²9nƒ:"Ü…­¦ƒ` wàA»öjšÒ ß§G/›Òâ‚• ö+/Wðay '›‘—ÊY¢˜ºu¬lpãh Åø@…ÀdsÜ‘²†(evgƒ·. Y~V™¥9G,‚꥚%—ÑÄϪšY¥ƒ=F uŒŒ5”lËZ¥ñ…Iž™U*8`´àÅøÀà¡‘m‚!ƒ£E FŒ ”lK&IÞœKc_("lñ˜uÕúbÛBê)ÿ>ŒL¶þ3oª«ÉY¢?M·x[nÚ„E»ÇºV“4ü'G».VæÕÙdxžX‡ 'ãä8T³´¡ãjVŽÕ41‹iç’éÃ}ƒ/T0yÀdsêyl¥Äz,ö©…‹t¡Â’i&œl†LÒ­U7ÿÈãëÏPh0Ù¡­‹ëOïÁï‰Fœú<0! TsòÁÿ–½õ~«Ô¡FÓ'Æ &›ÓÀ“ÚJÝ=yì@ªP;¡ ã…“ÍÚªvب•2w´XÇøÀXCɶ,rRêX^£VŠà\Ñ‚ãƒ&›³gI˜à÷çÞqØ®nü.°dÁt£eXŒÌ00Ùœ ã‚0#nß•Ðà–ÑŠñ ÉfmVŒÎä]» ,\ígñ:1+ø0Åàd³£ŒpµK!lp¦hÁŽñÁ†’ݾ\ ç‰9ç/„Yº=´ØEðÀÐaQm"¡ƒ=C EŒŒ˜lÆ>(´%ÂXÔîiúlWÁö¡Éãe“Í‘I"ùkžò®ÍS!ƒùBÓ9Æê &›£³ÔDjöé5O…f-%b|`J€É椄PDQ~땊àÁÜ¡)ã“Íñ½‚K¢¤¸'ýSÁ‚×D:Æ &›%4DY¹Ã‡ûY.^5¹‚ 6˜lË*G9Ñ\å8Üóм<0ÙŒMƒ;F´Ö÷¬Ên¼ÊÍÒw£%XÌ/(Õœô²Ô‡Çܺ'á:Øe4}b| @`²9[×^*iïZ÷Ô›²¥›ES,Æ*&›¥˜²ÄX·Ks!ƒ/E vŒ 6”lËr%ëŸß̼;ËEðzhÁ‹ñÁC#Ûƒ{†Œ 0Ùœ­+â˜@m &ÿVgÁö¡Éãe“Í‘‰I²¼ÔÞáßwþU3·ô^hÇø@Áds4¦‚8§>½æ)³Áëa¥Ä >,%àd3R‚9A¨Ð·^¨0¼šB1>P!0ÙÛË,'Ô˜{Ò$õߎ¡…:ÆÆJ¶e‰Ó”0•ùL׊¼<0ÙœC:rß<å7Þ7e"Øm´üŠñù&›“_Â.Ùí;Ì2šB1>P!0Ù¬½Š­¸k­SÆ‚—ES,Æ*&›¥ÓDð]Þ—e4¸R´`ÇøÀ`Cɶ,WT¡3ï˺àõ°bÃÃB¥º!rW,%‘4ó‰]k ãת8½|Ì(°Jœ5›ëàAðæþ[©ÿñ 7 endstream endobj 1870 0 obj << /Length 2723 /Filter /FlateDecode >> stream xÚÝ][sÛ6~÷¯àô¡#oc÷Ëv÷!«\Æmjgm÷ÉÍh‰v8+‰^Qvšîô¿/HPŽ!‰2 #4™oï—“IYWùX¡Ã#&Eï¹»q;϶C<$¸WÞMÆîö,ÏÇîÆÒæ»*oi êÑës*‘KNO¿œœ Î//Ný7uùì¨-qD¬ƒì±)wÖÿyÉéc_RŒˆõe v]Ö¯E•}ÙÜŒ&åè?î´*ïæ£ör1³.ŽëWÆ´w2sW?Ùmµrœ?³§ŒÔݵéð“;NªÒ},ªíËeÅÙoÓ›»y¾bɃ×í¹çÊGµk=®%Û€°gÃI×5>káù¬}K[XX¦®Ýñ®*f7î´XTíÉìá ö·åì鸘ç£Åä“ûí7,°s±ýå}^-ÜYõi6š—³âᢨ_߯uÓ’°µ¤nõáõJ»bHaž)¢–ªnWõuA$¢„gm²yž]?jH>Úæ«ëÀ ¬—pÀ¤. ÅoÛ°¿ìBžðK"CÍŒmç7™;9_ö>¤íùãÞÇ3#] Ü—ÅØQÖ‰”]Ilc£é]_Άï'ùÅdxŸ{Õ,T#íµuˆ¶ú`á×"Š""¤ ^$¤q&ý­ D ¦³GÇùýÈÿCPÚ±ƒp“,BVða76$BŒAÊ“Ò9SÎË-q¶G™=(D7‘2».núÓñ*;?†2£…íÒÒãÁyšC‹Öˆ+íh™TµVXiO9aò“ÃÅp•”+ö.˜Å­«h:b|| 3`cc¨±S³|X‘5+ó|±s‘ QÅÒqáã¹Ã…}¨h‡·»YUÜÌòÀ!.ˆ8BmÉÕ®­©þÏÃæ€ æPPĬêIÆ¡äll ‡B ‰Û¼®ZXy9 U)Vù†‹ù¢*ÕÝûuÑñ˜{‚ƒ¹ç1!Òqïã¹Ã=çHröµqßäFƒI1Ë·ð¯‚égN„'£ßÇÒŸÌØÖÄéÍdÎðñÎÓ(EжIý4ŸVë‚¡N»¾ß–wuˆñgíhõ¬³ns¿*þÈËëØ\¯ã™uzVÿ·ìo²Àðñ66&0AJJp`lÊ’GƦ‡Æ††0Nq§ |XhÀ Œ‘ÆÙ{GSDÝ$­¥úcÜÖx89½8ôÏN_¼Þ5©º‘îÉ8õà”BM`Thƒ4×»3ºM·nå´[õ†sªœ”OFªdll ­J#­Íî´Ž> gÕm>ÚšŒ†Ò$kÕnngHØØš¤B†íÎÒl =,˜{”:ÝTÁ >°±1ôØ70ËOÀ»ð3^W#!]c·” æ”;qŸŒSÈ)ØØN¹D˜Ð½rÚ»Âï#uÌàâåå ÿæ¬ÿóà⼿3ÏÌiõd<ûø@žÁÆÆðÌ‚í™gÆs»þàí›7Ë5íJƒðtfûÄP/*Ÿ¡Nµ' $`cc‚„r„ØsЇ i'n­R:âõçËãfY©¿è0÷eZ=ñaÚ¾¹’Ùç‚Í‚˜ ™ÅEVî¦XùÞÞý c:Y:¯x„ΗëP ›U$AEoóyQ®pI¹B\ñ5Ï?|ÿo/‡¶,ì²§d-ËǶ,°±1-‹0DX;‰´þ-2L5«Æå`ìÁ½ç†¤²zú~ǹÅÐΖ—y¥ ‰|XHÀ L‘íúÚÙ‘³{!ô6YœÃu“t%#ȃò55„RËo›åpC%Ú[šc;Ñy9ßDÕwO®Çêh¸ßyªï»¨v¨\î–ŒfÈ3ØØ(¢µµU´“CùïÅÆéý¨s.]R•ÌÙ>>ÐÙPc»»8. jSŽ?C]'\ž’Ìu>>ÐuPc·¸NhÄ8y¤¿œ( Z¾ù ’¥7åY¯—ÒŠu’¶wº–¶u–V¡‹ˆnïVW¹j¨ënZ[Òªi9w9Q²€ôñ 66BÀp›=0M÷¡i‹ràBt²vׯ,!5»' ž…Ït½89œœ¾ýõ¤«™K(’…¥ K°±1aÉ$â”}y]M¾OÆdll”â¢qÉ÷'­;û8LœâOƘd llc„#å>52vª;™³}| ³¡Æné®0C‚«8•Ìt-¬S¹ÎC‡9hh·Û˜¡Hh½'}ÜO¥k©¨f?†ªãP+Ý!½^éy; >|ïzÍïpR%ÐûÕÆÏ«—oºGáÏ”ËÀ’µ2ØÎÀÆF(,¦ ’Ô|;Â?hæÞ%<“.J`>>0ÀÀÆÆ˜ÂH~ù™q&\&‘Œ HØØ=È„eНMÁ3î‹dŒùø@ÆÀÆF1Æ5R‚îQÁ3VçéfÆVðΆ»¥·bÊJÈynFìOæ<è<°±1?•H3þ© ò—« â¤dæã llL€´_^^`'£“1äã5XaŽ ‘_›¼ ¦Ñ¥©óáa|M¡‹fkë=j ªœ¾Læjèk¨±Ý}Õ͘8mA¥“zÉœçã66¢ë§Š"ü­I úWK *œàM_>>0¾ÀÆÆÄ—$kòÅ¥åNC'cÈÇ266j¬J¿:iÁœ(MƘd llcÌ "Ù>Õuò2™³}| ³¡Æn鮨Ft9« âÄ^2çùø@çAíÞÜ‘…(‘ÎÃNÏ%sžt^2c3ˆiÔX*_øð0W€MØ5”U1;Ü=Óf»Ð‹Åp¾ØËž¡VÎÔ»}‰=C‰vR*YtøøÀð!2‰æˆ}^ÙÛ7šüÃuœì¾Y(QN:%£ÄÇR66†ÅÐr±vŠë?–œõ? g³|RmÙä@S)œ¦JF¥¤ll •’".Z.ÇåÝûIÀrÁë5/Í–òçÃŶmë„mƒÁ;…îôY2–|| K`ccXqCÓ¶¸zÓ—7Eµ6”^éà}| s"1ƒ>>A°±1 rŒc*GÕÛÁ;^T"ªÓå|+ø@&’Û:ƒ8‰™Ì>>ÐPc·!ÑH’6‡;>Þ>z‘/înŸí9Bˆ®n¤út$c§ÿ’‘çãÉÓ§`…ärCêëÍ3z[6ã ØÜ«sPÙ«÷Ã1‰•i¤jªàñÐa¡54fޱþçFf¹‘c×°:½°}qú烷ÏcwÂ)v\¿úüüå«Áëó³_O_@>þh'SÅ ¨©Ýö ½©¿¶Î¦ÿlecÌ8aû­þÇŒ… endstream endobj 1801 0 obj << /Type /ObjStm /N 100 /First 976 /Length 1249 /Filter /FlateDecode >> stream xÚ¥X]o\E }ß_1fFŠúUÞªÒ êCTV©JP’Jåßsì”’ÐxÙõ={îx®=öÝ1··ÞÆÜ³©Å÷j;¯w`õ@–6f i"# k*†7]ÆlÆóc5›ÉÙÍGpFoîŒÑfO„Û´D¤Å6`h[šˆµµñ¶ÓטmOÃÊcµÑ965°Åî±Ç¸#0wXbØçæY`ibØ>ïÄp)ù| 72wX³ e…†õÄða#žZp›Y`±ï‰Á‡kbðá;1|LI,â¹$¬x”Xt |¬)ð!¸Ü#1·O{ÖC¸[b k'&‡&)°LXQbKÖLl6@ º`yb»±Žà|¨†Ø³õÄàÃ41ø°|xnádOy >&'s†ƒP|,žÃÇîAqÞ–|ìò§k¨à k… Q†$æ°ff7ÄIðH7Þ¿{xñâŸÉl¤¨œy()$¬‘»á(‘7S$æ3îåíÍC»¸hÇK”›÷ÀžmýaGLäÏ+oú§ ËÔÇŸ°ÞñÕÝí»ïNíª_½¼lÇ7§í³«7¿ýzÂ×?ŸÇoàötóp™©qÿáøútûáîÝéþ1[ûöôÓ/×_ß~lW€m#FΡ ií·ðw}‡E"ÏsãOŸ?ÖÏÏÿÕ…\¥ŽTø"ZÏØŸ¢5)R¡F¶AH´W;mÔE,:s‘<6u—"¹/½¸gß“pŠÉË)NÔyBTç5²+±5q’b˜]™Äªd$»¨‰s'•¢&Þ7é,jb{‘ +’×$³¢&6°z‘ìF^-*3%¯.¬BÑXjdaBÅÉŒ¤5±Ñ)†„Y÷¦èe5òZ´¹XT:'íjèÔ'õ^ÔDñÝ«[V£¾‹š S´ˆ™…0ëɃ S@‘Üqú[ñ1¢ï¢&uI¤XTâ‹d›˜Š\u EM0§SÌ©52+&†¢&9ÉVQéLÎEMxr/j«ÓìEMÐK(˜ÙÍU,*ÖI«Ú}ð^A1ƒ×È&÷(Š‚"¡mEQÃäÞEQÆÌREQðÂF}EsÐEQðòHÊ¢ ÝTŒ2&^ÂK^‘Ì“x%ÁM(¬"¹É__þÝÌþŸóÙ¿Ì}ýïÁÜ÷ÓÁ±ˆ}ÿí`þ”ýdÊ]gÓô­^¬JF«—³‡ÿ²£ÕëÙÃÿ­^ÏþçÈhõ6ŠÑÀÁHVݲaTë£HVŒjgÿsdÌuZ$3f5.jâxw›^}ÀŽY­5±…<Ò¢&† ]«¨‰aüÚÅȾ÷,jbhõ}p‘ŒV{ÕÈhõ½ZT†V?¤¨ ¦ vEM­žGQE«g+j¢hõÅX(½hQE£?ûGÐY2ý³?‚~n/ØN endstream endobj 1942 0 obj << /Length 2789 /Filter /FlateDecode >> stream xÚÍ\msÛ¸þî_Á¹ÎÜÈ @€/iú!uŸïzÎÕQ;In4´IœR¤JRñ%mÿ{(‰)“±×ñX<Øgw± ÂÁÖÒÂÖÝÅŸ&×ïv,ùu¬ÉÂâr|Ûr}øu‰5™[G7ÉZÌÃËŸ'ßËÖ®åAkÇ–­™ë"Ϧ ¬hh³Ë1u½Ñµú!‘.n'ÿ¼ Ð[d?…žÜš­/>þŒ­9¼ûÞˆùžõ\´\[œ`Dm®#ëÃÅ_.°F‘Ïå¥ü¹;”l#3Ëer8•’åsŠ|Ï·ˆlí[©°­’^”¯‘Wå—(»Œp(ËA>õÍÁ* ‰&…IR|¹À‰Ë ò™"æúº £§KK]<Þ]XÇÆ£"× ôXm ·›nífÉzÄójãʪF¡©³]P1Žºª|CêŒÁ)ï™ :{Ú×bÕƒ§Ÿ0Çß¶Ò<š­çõW—Wøê´qdáW‘,š†ë5t òßÔ‹—:0u>œ1Tåƒ1Ø>Æ`c„)UÆYBAÚOs:+Bút)ò)P¿±HÃÙ4áq?¦çâó±]¶§ít g¢ÅûqGs"¹®3œ9Uåš“)Øã!Œ‚L²}„åò=‘Û0Î[¼“ö^¯wº>=L|³ âXDYµ!0o׳ÆqÇWxß&”ã‚ršfÁz‰Ç m‘¨W4 y ÏÁ̧*ßÐ|ŒÁö‰FØCëD#ì¹NG¯Ñk,yùWG^@wÈãÞ`¼Ôä›ñb¶ /¥£;¾‹s1›œ¹‘œoN„Û®«Dk¬_aÔ°¢¨ÚÃA½ù7}Õñ °ðýá ¢*ßÐ ŒÁö2ÏAÄswyÃ6»±Øà¥ép‹*d06*â É0„Ú"—#J=¥øÿtÕœ£RþÁTW•o¨;c°=V¸C´\æRBt"¢A¦…ÙQÊ̼93ôýóqßî®ÀUÚ>¡Uù†„ƒíC(hÈ&&|N#Q_6Æ”½ÌiKêÙƒT[eÓƒ‘Z•oHª1Ø>¤Âªcó³XÍfA<ñ|¤Ë߆UªrÚÁX­Ê7dÕlVm‚lŸžÅj¤ù4KgçßÉãýÝôö%*ŒÑª|CFÁöa”bÄlû|Fœ´ £7ÓÛ·w·M›Wÿ>Ýóá^ZÂôqòᾩ Á½Ê¬râÁì¢*ßÐ.ŒÁö± ì#æ²³Vå$þ,š}½Kø6õuî«t{(NkòÍ85ÛƒSî{ˆnÂé™K2xûýÃßn'gøû`‘‚ö‰ÜSUÇ`VU•ohUÆ`ûX•ç"ÎÝóVdc”<¼¸=;N¸EÙ1¡ñ†|UkÂQ¹ú`ª¨Ê7Ô…1Ø>¶ípeÓ¯ð­­é“x—¯kø¬Ïd¸é£GgÇà*É̪ò ÍÁlsà 9Þoô­ƒ3•©FKU¾!-Æ`ûlms*¢Äü[GãÁ•ÿŸ¯œª¤|0¨Ê74c°½LÀ†_‡þO¿np¢òéÁè¨Ê7¤Ã쉰H ò°ÝïÇ*mLyUù†Ê3Ûg•Ác­¦¬ w5Sæ;J¿Á4]“o¦ic° zÝáô‘çñ~fÊ|9ø .s%LãêH}ó¯>~ëYò  ‘eù)çÈõ´ðZSÿa•W?Hƒ òÄíþ¤n¥>‡7©X\<©ˆk¯4„âüLq[c#íÌ‘º¸b¤ïD0é'Œi$²Wúl0Î ÌÓ˜mäû¬<¬ÖW´*W†t`<×)›êõ÷H ¥ˆPZ…O{™‡™ÇÄuƒ¼p Ýœ’ô7QTL‡”ÞH(˜GÁf…³ “ø²x°I“e¬³#¥Â»õ6ËU«0žEÛ¹P7ùJ_¬ %©k¥*Œs”J‹b]çõˆËwZE—cÛq‹Üf² ³ÊP Xž‰hQ™5 ¬Ýieës‘GÉL_Š Ì›ðÑ5Ú,‰ó Œ÷*QÖRBÄ=ô¼*‹-Ð2¦Ëg"-,5˜ õhwô´Ñìe‹F«½P g.¤:b‘])q‹m<Óì°›'ù—Íîõ<Èu•åév¡WdÅþ…t Iׯd¥ñ-’(J.)=‡ñR=ú Š!2u· åÛÏR5ºË:IõÕ\€Ž¢ ½ì‘1î—>I}ò†Ìƒ8ÏÔñ{éFÅÅ:˜¥—4™5 ³?Ì£P†¨»¥Å÷o§?Exôæ’öh²'\õ;ÙåÍ®eÕœ u`viNe ­`!ÜGp¹ýáí¬sÄM¢ áÄ/[]5ÉaÈÇ;+Oãe“ ÙáÝ¥2¶6¡¡»ü`bà&V¸)#£m&æêIžè7q˜‡A~úyacÐTDb-±¬ðˆÝëp¢)ãôPY呇#Ýó¢FÛM$ ¾”HÔÀzˆ–xÉö›G»~Å[íMìÀ›¤Ÿ1[gû$Æ6‰}¯(ä\²˜µÌÅÁ»°´ë§"ôr­/Ž_˜ ßM&Œ³ãÇuL¨Ë‘oS“Ôáô¾uÀÝávjòÍ»áÀjep†0®6®É7T†)Øö,—rÙX/S¿;µ·¸cÑ­F>ˆß=þD‡énPF㎭˨[ß㔩.Ë«ò_qßžèó‹ÝÔãõkÊõªˆ ¼ˆa±hAœFýØÚ‹(®:F=f#̇Û©É7ôÃÁÀ–ÊÀ;ίX=¶ÿÑ&…Œƒc¾ÏO›’F¦/&R28íÓ‚Kâ–[™è,=Û/¨jáTç­ÔÍ—d«.žÃl¥&êRž«ò]¾:%$ÞÊõ{—Q'MvwÆñU¤ Òud ²ØkHÑÉ( âe£6¤¨ûR¦-ôÙ§SjîõÆó¢êùåJÝ"¥))êÏ«$Ó¸Ö"ˆuS² âd¹ÎDy¿0FœËZØ%± YÌQaéÂL]·ZÓ§ùãi¡’ãz 2o¥šË3sÄÓŸwEá L«…¥¦ÌƒªŸÕ2<…oGX+¸¢ ¶›°íK,Tò> stream xÚÍ[moã¸þž_a @+kI‰”Ôû”ÛÍfsÍî^³¾ÅÝ!-ÅΖ\IÞ4hûß;äz³â8+¸è'Ñ|ŽæåáÌP¦“Õ„N®/~˜_|÷žQ9 I(¹œÌ&Bº?„§Ï&óxò‹ó6ß&q:ýmþ£šíO˜-]5Ûó}¸ˆé‰®˜Î¸8ßáƒI¦]\Í/þqÁ`°f+Åd¹½øå7:‰aìÇ %^LõÌíD0J¸+¡½™|¹øë5\Ó.÷A‹K\0zÈ“ œp͆]7ùeÆ{oïîš2JË©G·¹{9Ô¹þb^•ù-ÁÐÉŒ»Äõ\#X|‰kêùA‚d|ZÉüJ5³@\šaOÍа‹™´\GÙ)Έ`5©7Ct$aÍŒ"ÊVÉ !I‚ð„¢"y¤Ã õÅét6Ѫ|™!›Î\9i©žÜ)Ómº‰ ì¬r­F4¤b5ÁÆÝõE_UØ™¥j4Õ1>#h¶¥¬†—Å”Sg_!CKÐö&øÜ—IŒCÀžîYæÛEš™áÜÉÍKló ýJ©­pt‘VZ>`c¡O$ØÍŒ Ñ0SÓ2™}¾Sr°Ó*_%Õ:)ðWš™Þu2¤FÄÀ'^ÔHHÜZ!»¨ˆ¶I•( Eþ1­ÖÍFº‘7LÔ J‚ò†wP"Wë¸àÞħÊO¸ÂÕ/˜$œyN œÉä¡íøjýH@2tk6@ÂLÍK±¦Gß‚Ö);´iIòðŒÌa‚øw>atéÆXfñ€`~Ë j>C@0ŽVþ V¨…Š“åÊmèš7“pŠœ­§Æÿám,ð·W¼yvºÞ­ÆøW¬±pþŠ%5Nô^Ð@ ÿÊ\ïDG—¾G.Îgz]ú#Mo,³¦†ÄH–~G£Û †Íbèäú¶¥Æ.þmÌÒ#ܾ`_<ÎH{ÛýÇË/CbbšÒ‰ö)]Hy>ûìÒiŸgcÖ ƒ’À÷ÇœÊÃÁú@ª!=ˆ&©I5Þ%»$‹ÓLÅET@ø„ÏežUÉ” çŸÕèaá³a IÀ‚#jqæàfÛtµ®°™å¦¡Ã=xF† ›%›ïá—ë:ie¹ÜoâÁùU‘®V–~™ï‹ebÞc¹É—¿ô¯¦°¸JÚ#ØNª%ÁP°—¸ ¤ƒPQ…‚V8ët¹Ææ2*5eàöÉ”PÎ^L!\˜&d dñ |"špúÙ,R³&wlBGÃ<¤fŽ(üÜù"Zlžð—/“N™TعA?`Ò&è¥C\úA;Ñbòô«é=tœ«öÀ€}˜½m§†¹zA­6h£N€cÈ¥Q}.˜jÈ=£>‰ ÄÉ” çkºLf±v…(«Là­6Œž¦R8¨HHÁ-Cã8s?ä›M®ˆ…£Y´Ó¿h³±PÏd9Ð(Á:M¤~í’¥V8§Ê£¢Êt+íšVaúò|*ñnÀ¾Q-С’\½EŽÏE‚äb4ê¥Y ƒ;o >|±kA5Ô(¥Ö¢~XäxV·3€Å*zàÊ”w4üåóÏwo¯ŽJ1à€çVˆZ@ê•­¡!i¦¶Ææ"%LÃ\íIgí²Ÿ Óù6zÑKDt¬Ñ º/÷ È'³™™mÒEUižµwUª}A:ø~(œ¦ tõîú¸X< ¡dAú½¤ç4¬IaK1™Z>•Êæ,PÙ~»À~cEj¼¶LÕ‰B—ք޳œ%ñ*™™YÈ’pÒ‡•uTĈH…36Èz‡‘ÆP.C'.Ò)—> èë½§Üïvà$%ÎXäøÒAgô6”gƒ©bdÓšF^¥tnpš%€köKb徇g»ˆÊ2)ªz«j’܄ޮ=0R#ò¡'jæ¾Åín>ýíên~Ô¶D@šÃëˆËÕ.ò<:ÔÇ0nÀáõ¼SÂáæQ# %áƒ÷íigÈ5€ÄƒºJëViï.?]_Ýß^}ºžÀ²²òl8‹d üÆ6ÄW¯½SMõ´Sk½µŽAÕÔV&ªÁ¡x𥙆¦ WùïÊØ“ÌL7’…V¡)}JÃrUDzEô„Mÿj¦©ô¬4ðÚZ ‚±²*öËj””¤)WÇy9eŽ™~ÞeU@H”n£"iŸq½œ”Ùî³tÙ¾ER=&IÖ3|×¢†Rt>há‹A†¢0Îä:Îëès¨nÎà,f§Ô̓N°ªu;@Ï ˆÇ‚n‰Y½Ë6ZÆŒ‹DŸ•=)l’lekZ‡íA«ßŽ—Y÷hÑÈmñt´6Ë=<ú'½Ž€<«‰§j»4)çB¸å £•Õ4%ú׫ňBe%J0Öi)À³qQ…#®4f#ågÕF†´Dc‰ëYÃUiUf¦h¤}ÄÎh·ÛF_Ρ`7.—ë$Þo,™Êð…¸ ím® áʰñPä[lÁqBŽØuªuÅu!uQXÕö¼x`vo©Z¿Zoja/Øq¿E˜]ê[¿{H½5¸Ã{ÃÆjÛû8Åj9­´âò€0Ú³Õø]•pž¯´Ø%?®r3šÕƒZØóUn—SÈÔÌ ›À!rZ!»QüW´³¾ÂT<•DÀép6ÅtéÔÌXf(BU¥üñ¯½†‡‚H—ŸMx=úã„7žÙSìZúÄŠsè²qòçWïnîçŸïúð÷/7o/oŸ)d¿,ïÀ#Ò?ßEaþHyfö5ò ‚“¬#ð÷wŸ?‹üIûðdç»…ìÑ)é±Ì> Ü÷ µ ß¾?ÕNUµª}ÑuÆÚ<êÃ\—*Ü:ˆ šp¤uL¨â&~Ä Ì'ÐÒŸHÀÈrçe‚}u ‚´;™¤¹8ª"œšjáWIš ˆJ̆æ’ÀTÚU³ÛmÌ>íŒOMF^ÇÐÝ­!ÿ}*!´Ü ¥Sõj¬´Ò’NLÍ}âúuL=ŒM}Q3 Aè÷JÐj ˜¡¡Äâ†X ØÖÕ _ØÀÕÇb<Ú/¢;:¬ ‡¡»+>ÕÓŸê°âSË: ó ¸Ô%‚÷E Ñ¦(*ÝRÉ1ùx§ðvæñB¸;3 ‚^qzЛæ¯rYÀ Áù‚\æ«/x³¡fþ8ÔÏì+â\æ{Ä üoŒsu}òAÆ$Èè|çX—üH…Œdõˆô¥òøàuÁ-óBƒóe=ú#e7šÙW[LRɰŸ7Ÿ~úyþ­q-Àuùùòˆý‘¢ÍìkDí1Ò k?ÿ<ï‹ú «c_žºôGJx,³GN\)Ø+ãYÆÕg ÿ›x–Q¡?1·ñ,ýÁc¬'ÂS‘ }Œ`¤L60ûšz¨nùwû çèztåû úÈtæ î¼WñŽ@ä¡?hÑ1Ö›¿lvÕ-[ ÖcàBćtuô²ˆQeîá@ _²D¶ªár±ç‘@¸½¸Î„tœ¤Û‰˜kÌ:ø‚Dá›wøI¿8M%ïíÖ8çÁÕ3%nP_àwbUš«Ñ }5:kûñ´ ð¢5Tq¶*ë®öE´Ð¯ººLWi¥ci˜—~—›™õU³º´õluñ˜ôI%±½f´W™ø´¶"µ­˜/z(¡Œui ¨­Ú¡Txà1Ôû–?Tü°•ñ endstream endobj 1931 0 obj << /Type /ObjStm /N 100 /First 967 /Length 1678 /Filter /FlateDecode >> stream xÚÍXMo7½ëWð˜Äå3ü(ŒŽƒ´A[ °S ­áƒ++®ÐX dnÿ}ßP–á$ëxÒ8@¶fgß’óµ3K-µ@ŽE£ký:9J]ÁŽj׈‹±k²‹¹©P\"V¡º$]ÓžP£à˜UCX·)†¢“Ô5ÉIív9v¸\’ Ùª*Wr×TWC×4W%aå\mª‰ä+&ÂäÚ5¸ ©«°~(E%XL@@Êr×á_¤®ÃcQº†¤±A‚³‰¡«wS#Üeüã¢RÂc9kšm¦â#sCö±s‚–ëS4–3UöhÀFpIža¦=‹,ä¹sB¼$cN(6/Ř¢ê3szà³sÒô磔¼\-7noÏ / ý²lŸ\\ÝÉ`1”¶Wxhx½^ÍŽæwì†×/^ºáÍüï»]ïÍ?ïç¸qz>Ÿ X{¾Ü\ê$Šúüd8œ_®®Ö³ùåv:uÝÏó³ÅéóÕßîX‚‰M•É×v‚ýN×XDyLÙâ÷—Ë=ÞÒ5«³˜w‚센ÊN¨7BÙb>2¾¯?ž¯Ögóu·)œ ? ¯†\€œ¨3 4Ÿ`)¢gewxó ÇúÄ€]ý±Á’ÃO‹å_ÃþÞ^ß`ØŸm«åp4ürøJÿžü¹Ù¼ÿn®¯¯ýluhøÕúü)l3ëfM×·’úÅ­•ä)(Ki>+“T æ7ˆ‰j¿§ÿÈ ß¯Þ¬ŠçÉõz±Y,Ï߯WçëӋ˧îSŽÅàƒ²µŠM•< F-hoj¿ò Gí?ÜIÀÔáR|:…0XâhŒÖó·SÝdº5g:»8»7N_le­}Œ*ü(8ÙÄF\ÓdÏby¹|<ƒÀ)=ƒ"E\0qìQ»BàQ{Þ^-gS5êÆžóùfºœ®O—çóËdzKRÆ|–]¹x=)}©]ݪG4Jz›ÅaÏwÎ1¯ô|”K´ÿn•¶u=Âݶõ)‘hµTÒÈøü}3 FbmV0Fbc#±ñŸQpBcã?£`j>ŒñŸQp¨èwF›‘'ä(Á5{ªÅ.c±Á™}ÌÆœdôÐd 3Ž>‰œÈ§fÌIFgçdÌI˜Å˜ÑÙ0ÆFÁ,"ÆœHÉ}úØÀ¯±õ¥a U#–“/јœÁ=ÞX#8b^cNó¿²1'ŒjÑøž°Rc¦oÖA˜ÙÖ3r´Æ9!ÎBù[€Ñj2–sD'ÇL³‚á +4f ­ ƒ"¦ðPÑH“rj%”8ÀYÑ©úöàkE`úáIùc~pé‰I¿ð&¬~®ýŠŽÞ“» „,·Û+ÌÚÂ_y*íÓ“P)_j»3MþÌ™æË‰(†~è+úõ Ý"ÜD´Ð╸ÞKE/NgëÕôàpúzÿàÇGä¡ æY¿@"Ó ÜŠ«2 @òÑH­Î+ˆË·‹óO¸U©w¹Ô"¹—[ÝEßr+Ð¥Ñ<FZÛhc‚Šuatöfµ8€‡%£¹‚‡•h#pÈË`JŒ³3é‡àžP#š‹çQ&vݶ½Tp,—ÑþôÁÒã„ÊU|)Æ€p ^»‡ ÌïØñ/Eëí endstream endobj 2015 0 obj << /Length 2783 /Filter /FlateDecode >> stream xÚí\ßoã¸~Ï_¡G§¸0üM©}ÊnÒC®›Í6É¢(ölˉp¶äJòî‡þï%Eɶd%!M3]}¬HäpÄï#‡3  ~>zwwtúWyˆcÜÍÆH "ù+Pp7 ¾ŒÞç‹dš½ûE•A(Ks¢JS!@H°V$üø‹ptªGªÒÑÅÝÑ¿Ž,´iËš,˜,޾|…ÁT>û%€€Fað½.¹‚.¯çÁíÑß`£5ìjnéÓ gDTëļV£­|9AJ½$;Fp´Zhe'õKÞ—«ñ49Flô-$÷ÕÓ2ÑuAÄTuõósï…‚0ÀhýBê>C`D ¢0 Š$˜m¿AGÚðÝÝ0,ämZ0R¥]å7Ö•ßö¾I Û²8ˆptekÅC /nZ¸QC?º 7–, ÞI&݆{W’$‡°ƒxí STÁ?L)€àXøC¨+ß!geMâP¦4—"ÖL'×Wç—÷·Ÿßßþøùöâ¼×食Žë~?U÷„¤nB'0ijjì +_@ÈÙ”\£kƉ´4+·ÊVe25+;~2+7-ÒoIÑí 9…ñÝ— áö‹žš’Êù‡þHÚ•ïHRgemH ™¬ÌwIzvù"A#$«‡æü”ºo³xž?²3[®ª®.\šn\¾Ž€‘7~ôä»ñÃ]Y ~ðˆ‚(ü¸þAø‘¯ª‚ItP‚„JGüèˆw¤‡«ª6ì)€²GwØqîsö˜¦iÏ÷ž>Ï9!‰ù£GW¾#?œ•µ!ˆ Šh€ ×? A†æ9„xtP†°Pz~ÄCºò⬬ C8Í C Ax³D–Ë$Œö]"»Î!kèê RJ¯èÃCrŠjЧºò9嬬 §Ò‰Ø%ÕûëÏï.n^!–ýKö%Ö$_eUߣ¡r<ì‚•hßÒö]ùŽØ;+kƒ=•ªÂ åîòêUä¼î*]ôq'rŠÅkwÍî]ùޏ;+kƒ;ަt÷«‹«ë›G[„)ìMÁE²È‹§]ñχºÙ‹‹O7×W–•Î?Ýœ]õJÛU|Í/aI/¤½=oôêÊw¤—³²6ô’=Ã`Þû³—ï̧[zMây:.â*Í3³µÊùÙ{Ãp^œÆò–yUöxG( Ñyµéw]ù޼sVÖ†wP‚âsryÿò¤æ´>^ù$)˼°¤n? ¸R‡\ö²H»”¾¸Ò“ïÆwe-¸Â"ˆÕÝ^Ü\ž}ð¹á©©3Õ÷ë¬õµYX{”ÞøÑïHWUmØ2@á@¬îÓ?®†6ˆY®æ¥á&Ô÷tZ=š]äÓÕ|×$6ŽÛAç¡Io\êÊw$“«²Ïo63!í=m:ïß1í=$°KvÀpöÃ@î£`Ö¸üw‰Êoèîvãíü†ú±Ú6OšÅU}£\&“ô~…'¥¾WµÂ–yY¦ãyóß7%/ž¯Úb3i*닸µÝ¦¼Å£‘jŸùTjX>#(.šõfk]qüÔSe¶Ê&'5³¡d;’ÆZ4ÏôZ µ£µ£Gc»é9Œ@ÈÃ6¥éª‡¤z)9 ßûˆF€’¨ò+dPþ!©%Û,0 TáBÒSe–fÓ-]ÆOêÝQìT ›Éª®¥\Ž’Bd—6‡† fМÇU¬³g”:¥¾T¯Z_”U±šT«")ÛÔ¡mý$Z˜JÍZž¦¥îªÛdÒ°PþS§âü¾œÇiÖ<ÖÀË‹©n\^m5Ô‰+}%yS47óÙ¦¾~ ÁoA{õ7õ^ªÈ&ßiûÕ“³O— žE£Å$ÏfEžU5?™š»«Ç?N Tš#=¦ Q9# ê/DÒ“ï6g»+k‘2D™¬MˆD‘wšÌÌ,®&›U†‘µÙ,¿7­ZûËݺý«©Ý¡”ú‹bôä;2ÀYYÐPÁÞ†•1ö4ܪµ7ꄌýÅzòQwVÖu"€œg=£^Æ‹åÜtF7•öÆ\®øåÉæ]ùŽ˜;+kƒ¹\R±6 ç ó¹-èõHŸ»¢Ž0 ÈŸW֓³²6¨#X¾Íü^~³žÀnޱ‡æ/ºÓ“³²6ØC 8‰ÞûÉbj}·Þ¾È“ùK¡éÉwCÞ]Y äeC€¿Ñ —.i¶× W÷†^hÇÅô]ùŽÐ;+k}ˆÀøm°/âì!1Ó^ͽÑçÚiñ†~W¾#úÎÊÚ /m¼Ê7ú¿ÙÁÂ~Õ½ñgÚ}ñ†W¾#þÎÊÚàÏ!!}»™ž–æK¾ºûS€¶}ÌãN!ÒšB¾½“ðbൠÓ3•&Ú‹Ö¦ÒÍIIVÅ›àîAB²Ó"­·T xì]‡g§I9)Òq_­6Æ<’o$ËŽ¨ÓPü|sþ'P¬Ãæ;tà|ÜÓ'M³Ù1–ÝñR˜¼'-š=yo#k©¹¾_GÖeÉv…ŒªæIYåuOɇªx±hÑ‘Ïâq¾ªšK]d³‰£¶nh¤‚öÇhT¶²2l7Jd£«x.KÍŸôÿj?i>oIÛÆVU.—åÒIÆ«LFaTŸ õÅäž|7&»+kÁd)ù홅Ǹ0ÜÿÕŸÿ¸ÏâÅÎ<ûåùó•Möêdz«‹û¿š.‘Çó“]ñŽ`ºªjƒeˆÄ¡5–ã<.¦ÿ-(¹va¼aٕ靈²6h `›÷lj5à¨Hâ­äËÛLlGšM“ß=™ôòÇÜ4}¼šÍL ©™QÝxØ&íHÜÊs}ålNRM#{’9$Üb )Öc“EKaSŒ¢­b’_bý¼Ó*Tˆýíß÷ä;TgeMj(¡œ @MÆt½3Kç‰ézGÅ„—UnHðY‘Û}QN©’åÏ1S5Rÿ=o ²ä!®ärÀðHg†ƒ0˳d@1dJYªÞ(Û•ïHYgeml j]˜Û–ïEZ%/þÛbмìÆ*Ék^jl^´/;ÖB.MCèÉZëñ6ôºò‡ž³²6Ö‚„@:]Íç?Ÿ1ìîõÿžÉßÐÀ˜î}©ƒ‹‘Ç#+=ùŽ4wVÖÆÂ`!U%¶fàK¥Ê %ÐÜ¡D: á ’®|GH\•}~7©}Øö3ÃÆ'?Õ· Ç³=ù޽çMYÝQTüép¹+íïÀq…ÖÙ~^ü?eœì endstream endobj 2070 0 obj << /Length 2455 /Filter /FlateDecode >> stream xÚ½\]s£8}ϯà‘luÔ’Ú}ꮞ®ÙÎ>eºRÄÆÕ<`'•ÝÚÿ¾WH² &i@QR|‰«+Ý£s$ù¬|¼øûõÅûŸ DRP\¯.QK8Æ$¸^7áÕ&[æ—_¯Q¥ã Ò"R¥Y£$¢`¬-Å—W4NÂ÷ú@Q/]üt}ñçB8 Ç (¼ÉƒÅæâæ+–ðì—#&“à±-¹ 8ÁˆF΋àËÅ¿.°ñw½ONü±Æ9A’iŸ8Šmݰï7WD¹·h›u»³ ;í\Q†"bŒ\ßgÐ$ŽÃeºKõÙîikîì´Wy£û&[š’•>ÖٶΚ¬4ÓR«mVÿt} ìÙ?”¯ªÌ1§­hÊ.)òEöWýI®J¨ÃÇ^ÏG(Æ,ˆIŒb"TÏ«ûœD¡ÉDu¬N»ºcmøîyX ˜Ç¶m˜¨Ò®öMt»ö-LÆÔpjK Iå+8Û¬×>ùÝâ’˜qÂNq †13˜RZf«NPÏA˜Æa³«÷‹Ý¸²·s^êa,üÛXTa8ŠÄUÃÃ{€œDBÕ«m/~€A”ðA‚´ÈÕK:Cn«¼Üeµ~ÔŽO¸Yg»}]¶c®îžôÓT_6ûÅ"kšÕ¾Ð׋´(t̪CˆíGbûQ‡üè+e–½Z?G'ƒ]·²ßDÁŽÌ¾õæþÈ;Uy”aÜmî«}a]Ï´g†pàΪ2mmöwMöç^Sê‹m‘.¬c÷À4¶¨¢WÜ#Öyd‹‰V¦ZNJËg”ÆÌüŠa`ô'¡ a†»3\½©;­÷ù.[€fæ¼Oðú@ÄÕ]¾3¬~€º. Ä~I8Ĩ¾äiœ€º/³+-Þ”A@ã: Sº­côÆQºja$§ýòãÏ·¿~ùðùŸ¿5SPDÅ¡7¬ˆ/3í&/MUùª'ª­›vq€¥×‘Ô$¢ž…øð;Z-)I5”êbšVžøÓj–ĈÀ¼Ì—V÷ì»iµ»³´šIŒ BïZ 7®`á(Õ,aò&RÍÌU%íloÈó§æÏFù¼þ«Ò’À™aýði›«…Õ“¾4"+ìò@veá¸÷"»Z×­* |®åQbTOZÕª'êIí·0ª'ÈjÕðïkೄ„Ï©ˆ¿¸AUçk½¡¦”e©:t"[¶3Y°:§Ò#K”Pùc©ž}7–rwvKEj-KÅíùTng¾7—µ¢„ (ñùŽyÇÀûrÕôD ‚D‰¿®èÚwì gg§ ‚XõY¾"®ÁÚÇ”KÄõœ®}Çà8;;&8"FŒƒç0¯û²öº3£v ðpÎ0W$§ï[%°ŠRþ]Ä…Ê_Ì+gf¡/bèÜcI]ƒZat*QÁÝ;³pE'wß…KÇ‘?uí;ÂÈÙÙ)0âjRC¼âhS-³!Ñ#Š´2ž‹¢sûT ¤Ý5E1âŒùP×¾#€œ †Û“}hU¤ëföLÀÀî/t]ûŽ¡svvJèÔXy ]y»°{¢Ï~ ‘ŠæŽþr¿¹ËêqÞT#'ñÊç2+z˜#˜Â,~MZ!z™á ›]ûŽØtvv 6 ܲ‰nØ „D2JÆÁ«I…„"ov/Ï‚¦Ôp`¶~ ïŸ3pÖi¹ÎFînù®Qüª³+Ì“]ûŽ(vvv Šq|Ü|Üyc‘œ‡ÍvkíEfb]áúà%ûPv¾{¿zq‘ÿg$„—Ù6+—ÍH†/ǯmfO>(`ˆ_oQ©—Ú¾†PϾÛrwv¢*µ»®¾&)/"ð ™ÂîÝQäc~Ò,Ò²‡ÉD ¿&«Ó¤Ý`ð†ÈŽyG@ºº:ª££Ø+ÕÆYS/æ®xh¬×ôÞB×µï;gg§/æ0J¤÷à=¤õìà ½žö¼®}Çà9;;%x‚!Bß"vdvð˜^Q{ ^×¾cðœ<è!"üî3ªùêm‘•³£é5§·èuí;FÏÙÙ)Ñc°fÄ~ÇÞ¾ls z±»‰¾ŽÕ‹-oáëÚw Ÿ«³ÏÿlG#‚(3Ûzÿß{Lz“4µ~",9McÁ¬—87ôO‡û6%sæ·S[¼ÜÕU1XÔd¥Àƒ6[Ž&aþ,U0R 5‡$À~ûüÓŸn¯ÿôq0•.Fñ1c0¯»B%W’HgÔCÅU±lsA¡ÆM¶»¯Œmj¬nâf_¶ ƒm>¡jU©}Ï/IXÁ²#Ô{•ÙOID7åƒø´©“™ÙËß¿Oëåã%QÉ3öS€7æÅjÕýJ÷úIé1e¥ÿY€-QgŠª\ÛºóͶÈ6Y¹Jןý½Ô7Õˆ¬V»dºÆôifÎŽx)g§yÐÉÍ9;„1„9ó—³C±Xúc¹ž}7–swvBº‰,uéÛäìTæ½5;ÏPŠ ‰þßµïxoΚÎR$±¿¯{ö;ÃÙÙ)£€0ÄŸ´3 ì );ãö÷o¡éÚw ³³fÑGˆcqþyÜÉÏ bdîÏC¹:ãb–HD¹¿Ýç®y·ˆ9»:!`’"Îâ7ȱ:Ë€šð o‚üí7œwübÛÍÍ AK`H$‰×  §4œÞúç °†–˜Íùß ÿÐùgš endstream endobj 2006 0 obj << /Type /ObjStm /N 100 /First 969 /Length 1663 /Filter /FlateDecode >> stream xÚÍX]oT7}ß_áGxˆ¯Çöxì*BâCi‘Z *µx€°Ð¨a7J6þ}ÏÌ&!… %­*‘Åwöì̱g<—˜C 4F•õÿ†=×@Åøè&i!g“HÈb’ Ç-*¡¦ºÈ)¥PëXP¨P…E\LRw“ÔвI84š!„:$PÚ9ëWHŸ°êHŠê†¥RDa Q»ª ÔjÒU $½€~ÚM?éJT ”Ó “)ݦ²¬¿J*Ë„VúYm“•©dÆp9“鑈ÉÀ§(8el 4Ý…¯¤²•UV`ƒ“n£ÀW“ÂC)ã©A{ëöS“l21Œu;(÷f2Iez ƒÕD…1uV9”T‡’ºÉ*¼§,_‡Opbɶù —榇\%”B&ƒ» › ¸š&8a0V„Õ°#„1.&ƒ1îÛc ¥e“ÁX“AŸÉ Oš:¥# °‚¾Î 6p„¥“i|m#áºõv_‹¹«¾Æ¡nc«µPŬa3 §^Ã#+„`Œ‰hA0„ëOq õºB flÀ„3vF„päb;C8q± ~Z³ÂðË*kÙ6&ºjzP8^nIaPÛXãUy´a°XªiXÙpç¸k¸$˜á.&ƒ‰aaŠØàÑL†k„›°ØÝ]LÂnQÇ…ÞÓ/¿þý± sBlˆ¤ÕùññÓÅ;Ÿ—;6ãçŽÅ©™¢`ÃNÍ)vÄ·œFì8;8pvî/w‰àSŽ”‘’"Sö‚sd/˜£ÞIXj¬Ý«¹•ÈÙ»Açæô UŠóÞzµ »»aÚÓ%Ûßìé%ìWk$ôtù y¾\}…Ì&õê ´÷H\Ëa05=:]>^nÂA˜=Ø Ó“åÛM¸bñäÝÉ_<{µ\L÷Áh¹ÚœiÒ²¹¿˜ö—gëóÓÃ¥ÉÊVöÓòÅѳ{ë·á@-òà˜q};¶ØÇSØ{v %pS“-þîjµ†ÒƒmÁSZVï.ãbq±Q+vºø€¡)YLÏŸoìùÇ£Õ‹éÞúôÅòÔx¤§ÓÓÃéþÙƒR?ĦaØ4›Á[š³ôBãŽr-¹°»æƒÇaú~ýdàÁ[/ÏW‡;§Ë—;‡ëרêΫåfçìüù‹åŸG‡Ë5[öFèeM¨ü*ø¡Î|¿—G«×>÷yŽs¤ÐizOªW\t)qVÏI›È;©/öiÛœîîîš…éîáæh½šO?ï?Ô¿[¿o6'ßMÓ›7oâ–k\Ÿ¾ºýÏyIŠ(q¥¤Xµö¦êCAä¡pÿK´¾Ú¥e £”]ÒÄ_ì×H~ìPøNÿ-gl1Gºî=$믒ÊQD;ºô¨Ñ‡)èïè‹$PÊŠ ¶Z‰}àÂqT¯æÒQ÷¼à,Q[[˜šE«œÀ™›ÜF:øÀ¸$i¦°ÏƒqÃ’8=Ø#;±L‘šÓ-"úy'8˜«Ó' ™#w§OZ’ˆ®ÜF{Ñh;ÁÚ2$§O˜Fdqr®m99׆âãýŠdW†Ì#bLp‚kÕ½Á"V˜|àÜfû¸y0qäát æn´øÎ‹‚cCapbÑzJvÆ>æ¹(ÍéÌœ³ð,Xï1gÜ*ò‚{ô¦Ð\%Š[qi±{O.gŽÝ{r™o“—3º€Q'G#ÇѪSIÊÎ8´ÉyrhãÑO9OŽP³7i õG3^otÐÐ÷¨”6Ƴ|Ût!éãé¢õož.pÙ¶#D+—‹z¹àËE»\ÈgÆ G/ÚÐ :Ì—²º+¢½P‘ÿM/šq|ZqšŒ(è` &\¬uXŒ’È5^¬O–«›x¨Ö¨oYô&’¾|\E_¡kæYFJF­ìŸ={}r¼³¹9:E“Øv$}Oˆ~ŒôÍ£‰«ã¿fCú†eT4 hÈPí¨Ž¨£rEÝ¡Z¾‘ΗƒºrŠ ):ìV›÷³Rl½¹ ¶ôÕÆõ‰Ýœ&¤ON4×Ñ_œhæÀŸœhæÀÚÎö¸sàL1yi4ÖÈ^0Zm’á—˜Ù­¹i@ùÀŒA6Ïöåsà¤/Üœš+²æ|¿8«™fßûÍkÖ<ÜØ NÃÂÞ F ^ qwÒ(HÖÍ{ÎEßÑÌ6¹s`¤5IÎ@*3ÅK™õ•÷µ[õO÷K— endstream endobj 2107 0 obj << /Length 2024 /Filter /FlateDecode >> stream xÚÅ\ÛnãF}×WðQ^À5}o6ö-—$‹`±‰ß¼ƒ–(‰ô’’³Æ"ÿžnvËéKHÖÔä‰4Õ<<ªS]]]*šewË>.¾¹Z|øg&sàŒ0ÙÕ&ÓŒ“™uþhyvµÎ®—ßÖûr½½øtõcm³Ü62ŒVÖB.…ëÊüâRØ|ù!¸áá¦Å÷W‹ÿ.¸Ä2þüáïÔÙj¿¸þIJµÿìÇŒryö[7rŸiÎ@HãÏwÙ/‹/XbÍÀépÏ‘%X¦2«r0Zäp]€Ë]ÆÃh—5e¶yéOñó>þ‰å˜'œcpÂ’MÆÖ“VtÆèã#%ý™'UÁC¥ƒh~hžüùCðÊLƒÌ³KÚ¸xùo³²ŽTs—Å“Ÿ?.ë)œ mŠê®Lá—·]_Æ–÷õn»zìÍŒŸoÒ½|xätvõC¼¯÷eû³)É, Ø8›hdîã#eF“}aëw„— ˜ÑœÛê0N´—úú»ÿ>V ®ÁZC'F)šì1¸VŽIbM¹™­S{*dZôñ‘Z‘Æð„!×9™1ø8c É¾í†ÆYàʼºØÑkAY÷·e3Γë͸qû²hM¹/«C;îŽC=r.=”Mñ"´uý‡iöÖ·¾^nê‘ß±ØçªîòÀLHÒþ¡Ÿ–=;mÕ3¹Ï!£óç>>ÒŸÑd'Z“à¹h«¹QÖï€0ÉìÃ#e ¢š,abžIfŠ>>Òh²S\Ò(§¼v×ûûÝÍH¿Üÿ[‡b¶wꘒiÒÇGj‚%ûŠO<%È´ú}´ñ”&åó—3 ¸J¼F:IÿøvÑÁÿœ§\ýêsyq)¹[®ºêÃMûàÝ¥»Ðšãêà×Çøç¶Çc[®ãÙíc<>—©háÍñü4nhmNE‹g|89ÎÙYë-áNÃÃ2Ù­hÝ#6ÇjuØÖUâà—áîxßÔ\/¶ëD²HÔ·ÞíÓ¥}yø\'Æ>1ˆÃV«cSÊ]÷ ò”l«»n™¼*÷s(, >ˆi µ»úBèåoá¡Ùò!üU4á®î¶º?ZˆÌ›5Ø+\nÊݶLçuoYÌøµ‹ç'|û¯Ÿ¾ÿ«Ÿøøš½Œ'©Ôið¶^v½¨Ö‰QzlUÇã®öÛ­&žß>ö¨,‚/Ïû5;ý3Ä…0ä¹.užË„O~½ð_µlª2=yW9;|õ­ä9«ýzädÒFû€c&ÓûËÖ œ¤ u|\¨Ã“³ü<1÷^™BËáñ¾\—#sñmÆ}vˆ›y·Í]â´’à,]6ÀGêNF6CJ`œ®6ÀGMvÊ$$K³àË9¶ûÿXG˜¦« ð‘Ú ÉNȵð Jµ±cÕnïªr=NѼöx».fŸu0GWKà#µC“¢W sMªÝfWܵ³¥c ¸¤«ü ð‘Ò‘‘ÆP¹néÊF|œ1ðd'ø±r”±´1èP4‡›¶YÍõee»LŽL½R64Ù)²IŸÛé÷ÞæüË6®\pà„…þ>R44Ù)¢ ŠºÐzÅ€ó˜i’i×ÇGj‡&;E;.A)A^÷lïËÙ?±9œðg‰>> stream xÚ½]“›8ò}~vUF‘¸{ÊîeS³U—Ô%Þ½‡ìVŠÙCƒp²sWû߯[aƱ‡øR5K­îV©»õ6õÞÜü°ºyù£ÂKH"¸ðVk/D$¾%ðŒ˜·Ê½‹ë­Ì‹å﫟:òb€>BQDbŸ2è'Ë[Å‹—úÁÃE7¯W7Ü0¢;à°2ô²íÍÇß©—ÃÜÏ%A{_äÖ %Üð^znþuC ×ôÛ܇Œ$Ãü-ÃEQµ]³Ïº¢®Z i#õT.Û¬)îe®Þ?êg÷ 5`¦Ð| •žÑ˜ö$Ë[Ÿ‹W»]Ydi d•OÓ¼µFkðý¦XòpñeÉÂ…lì2ý¬›\f]¸ØÉf]7[/Èâ–Á~ÃPo8««®©K€KÄ"U,$áb+Ó˜ÝʪÓ35 è¹Mp§©™Ñ2¡¼®¤*¶¸û´“壞ª=Ñ>VÙCSWõ¾…).^€4h´(ˆ$æUoñ@qɆ¨@©îJÙ€{ {2´wM½iÒol0¤‹F‚´T©‘µR¥‹ô T£‹»JÏìÒ¦+²}™6Ë€"×88Ö]diUÕ~·&bPgì‹¶@XK4í,ÄùeÉé¢.µF-ƒÅV6æ]‰žþìdS¥¥é-¡êZÒË "‰ïk¬ì£”Ë2ïù¯,¯€p[T=a ß=îÌ[½>ÚôÑFÌêV[Í”„Gv ¦iýë’1¶HË"Š pbðƒÅýME ëÚà×|è×Ibæ,I¨‘ÀÝÛo?½ýêã…N@ŒðȆ§F¦†™/ÈsZî-ë¦ÞV*Ëînoöœ=€Èò$ƒ·šÐ-ƒ!8ü÷û»ÕëÓ,F„±åñkStršI+{Ëb½ï.äQS:fò‡»Õ‡ËÄøòŸVÁÛ}ÙàÞÆPŠMÑY ¿{ùÎá»=_¸bÀ÷ïÞþt÷æ$ç‘O8–uè0›}c½Øøþ>×^Wdò4/á±߬Þ]l‹~È‘?ôUhh»t»Ã° ‡g‘ƒÓAì*5(_Ÿ¿, dàAÐoo#;DS¯óôÑ׎0‰|f¡£!…?¦ è0”É]gøAljV‚ÔòVªóG·EÖÔÎÔÐ Ô¾ƒ`_µÅ¦‚“ãØ-÷crî†ô#Z¢ÊTgÍÆÓ/ïßÜxDÙ‚ÈÊO#yÀHNkÑhoÂ__Ý­Î×â×%Dº´è\cÚɬPqÙD›j¿½—»³*­zñ)¹Ax8Šq*Êût€!ISWƒAŒ 8hB‚5zD9*ÚãæÔNŒnGñó¦øN\%51fû¤Gƺ³cœPéÓÛᘂÑʰ£‰ÒØ=ž™û5ZÃÚîr‚©, {ùé £—„O…"ƒyÚ¥p1µb.ÔªÞçõdÑòƒ‚†©rí'OÊÁ"ás*2|é3TÁÖ'ùˆ5Lô¢5xÒP&š@j™&­6ò…=.rû’–õƦM _Ye}ÒbíäL÷¥ÄààfÜxŠ›'E æIð{Ré ˜”!6ÇŒ¸™B«'÷mQmžðð£`'8 8?Är•‘çµNÊOùlì‹qÜÃD%‰ÿ<SñQ 8ck*{Œà˜©ÅðØvrkâa £ñH›iiNÊKP…aR>eÑv'e… “ !Ńúï–ÍCˆæ>#q¤—†Ä'É(ß2, KhË[†‰®‚®oFÅ¢O"xAÇ‹82ˆ•,ð8d…‰×Ho=¬lÓ£Ç|´ÈЈBÏů Ò~[ÙžCaˆKÀa•|f­%QkIº”f¦´¥tàÑÈÆ\8Žs¹vt{Œ ´-ðlQ~tìÀ0ä§ç.§?׺8'¯§|ÿLå_Y# C‘H®' ÿLaÌföO`!¡¡‰qßÓ¸ÝÏ5UJ ÂWSŽƒ~¦næ²zŽj ¢ Bä; 4‰µjòz¹ËyªÙÕs£†'$†“ïZº៧ŒùÌ^  ?ñ ó“gh#ýóÙÚˆbƒÔ®¦ ÿLmÌfömÄœ0ãÃJüÛê(ª3ܾ*ºg+N`]\Oq.þ™Š›ËìÓ§‹1¹ùàò—‘æ±¼¿KÂã‹€$A8'>ûSŒ©;åN×ZŒÒ652è,hÓCÇŠ ÿ{T¡Dõí5ˆêXÛŠh¯øIÄv+` ’™lÛ´y4€µyÙ¶L;KYu4v§5X²{X" º‡hò-Ø‚ëBOR˜lZ˜F‡¬ò] Öº/N#ÄH_»$7¾u@ :v=4¾~h娎ÐT+g@ ›•éæ|}(²=ºMí¢ôóRÕy=Š ¡ „>Ñâä1d]¡-Ky{·úô¥.»©ö&šÜ¡“¾VÝ®XØ1¨¯ ü~Bhäâß¾šÂŽ5(ôû¶(ËLHYƒþ26A%¢.• ¿®=µ‹äˆJºsFí²Ø¸Œ, êwðâv!cÝçéGDV‘¦ÿÈŽºªÙÕ¨‰gôé–=ê0zªðùân8*ŸüzÝÄW=“FøçIó™½ â!?œR×î|~v;àó¬ã‘û‘jy\Mý.þ™ê¿³F<"”‰ë ÃÅ?S³™½Ä|J|û¥æ»š÷ Á›WS‹¦zf3{AÝÃYBüÀœcg—23œ†ª q5U¸øgªb6³—¨‚ÆÄÅ¥ªx~7€%ê@\K#üóT1ŸÙ TÁxòèªí€u™nÚg«.ö±]q5Í9èg*n&«O-,$¦ió×ù¢£„%ìÿRÖ3ÈÁ­™R$e_jhXÖÇúc8ï[]•ÄºÂÆ'åú›?üê1D£ªæîe÷UJó£³´îO˜.Z‡¾Z÷ªFë'€½‡z_ }Ï+¤W–Sµê½*e}³Ÿ¦>ö‡W U1[û`º¹p]¿@}*FXgûŠN«'zX·—‚S=9U™ ÷jÏpi_ªaUì)U>µw Èöºž½$×)ÜÙ´/œK_…½û¢/ÒöwcÖêÂLÖÕ£ë0ŒªæRX½Ýü‰+‡Y½º ¶[ÚþÂ¥]Ø‹bòÚ¤½ý™æ¹º¹9Ù€‚*à}ásfgªXP‰þ£9XE{Ĭë¡Ûê0¿+Ólt5sŒe ‰[O]µ Ðà97­ÿƂպ endstream endobj 2102 0 obj << /Type /ObjStm /N 100 /First 970 /Length 1533 /Filter /FlateDecode >> stream xÚ­XMo7 ½ï¯Ð19¬F”(J*ŒN‚´Z ° ­áƒkoR£ön°»FÒßGnì|m¦éÁk ç ÉáÇ59õRÈ©Kàªÿ[vÝŒ@]%*Î*r3I…LRB©C8ñŒÿ¶”Cˆ;5Ôb µ›¤É&éAšIFh á©XPèI1ÒC¯e‰„!Io•@ª+”¹éJvƹV”°ê¤+ Tõ ˆ2Vú DÐ"d2hI0K8n2Áª®aeÖ6:C©Ö=؇±Q ¦«¦°¬²—ɤþëÛäl>ÂD.XUýÉzÀ e6üÎÝdx«RL†ËÒL¥l Ô$‹Ê lTRõ?µ6ØÐÇ$™ 6Ĥ•a2ØhÅdøiÝdPÕ³É`£7•áMó $ÃÆ $#ï) lÀÝ’ªÉ«a¸Šª`“ V(,Ä5” ¹¬…R²Á:Vb² “ÊôÂUM@{©Éd0[Yv‘C½™ fÅò\aV,ÏÖZ6l´¦2¤³t{ Á³CkŠP±œ¬¨PPLæ<Þ‹6‚¦%¬io ­a‰mKŒ@&–ÄŸÅ#Ð×,1(-n¸a°Ne†@Ö«Âàd°¬Ía²‚Õ0‡šŠÉÐ1©› -c_°j&ë¡f­EÑ…äÙÁÁlzNPj }¦_û=T‰¢ÍÉ)vTÆòæêêtöàÁ—ÁyÄ>0õ8Ð:>pjq O.0j-äÄî Ùn5¦6œ`áHÎÈåZ¢VÌ9æäÔŒˆJ$>pMQ©ÂfŽ\½np‹hP'¸H,Ý«9ר¤æ|ga£ˆ59ëhäXù“2z²ZnÃÁA˜žèæÓvÏ`ÝB¿[£Óí…nåñî ú¦gëÕùñbNÂôìñ“0=_¼Ý†;SÏÿ~½À³W‹ÙôfËíFÉˌΦ£Åfu³>_lv„f²_—gWoÉ:PGJ¯)öq {gk(Q²ë;üár¹‚ғݪnÙª‹OÜ0älz¸Z_,Ö¦=N?MO§G¸—ŸªCçxN)2ØXˆb‚.(š±bw§8Rîøæ-tN?_.ÿšÌÂtx¾½\-§ãéÅÑSý»÷çvûú‡izóæM<_]ãÅâjýê>œÚç×;Á”îw“ìâÖÍ<ÐJíh¼ɸfëZÄ ¸CKóq˜~\=_É=¸q}¶¼Øl¶ëÅÙõåòÕýðÞ-"-‰»"š# ï­#{æ#ô»’kp£/¸"¤ìÄ‚ôG''¸¤˜rv‚iÄ$Å N=j…¹À2ZÔ±ÁéSoN0HC• ÒÇœä×ÑýѨ ¬/NŸ«HÌ^/dDj^píÑ›lð!õ®/çje~µ9»~}5ß~8õ~çN˜A¿½ÖH¿ì ]¿oD¡¶×—7Ëó¹ú´;Ì/VóËåfùÿ95PjU÷öí¬ë×:pW†)Šäoñéêr³ýìˆ åÃ#‚Hí G„Ñ ¨3]}°ü¯³ë>0NÿzòµÉ÷ÒÇ>0hšGñu*ú*øvª’Ø©9Á80í?×ì³öFõ‚Ž‘ìc.ÖïÂ>0f°DâcKÕ $E?·»À:ƒÑ×Kôý FNÅyðdzþŒyÐ endstream endobj 2197 0 obj << /Length 1680 /Filter /FlateDecode >> stream xÚ½ZmoÛ6þî_!`_ìbfIŠ/: èÒ¤HÑ4[›ÒÂP$9àHž^ÚeCÿûŽ/²%YNå¨Þ‡@y<ï9[;¯'¿\MžŸ,ù‚ çjép„ï:Ò‡§$ÎUä\OO²û8JfŸ®Þ(iéx -\%ͤDžKA™dx6§Ò›>7"ˆ49½šü5! „²€ÂHî„÷“ëO؉ ïƒó=ç‹–¼w8ÁˆºÞW·Éol­Æm뽆=µrNÏŒM¹ˆ;êÎõœ(ûB½®E’é*)J#ƒ|®ÄÔãuÇrIÌérÄ™¶\µs"%Ì¡È÷|'eÓÔ–¶þÖÝ (CÜõF1QÒcõ[ï´õ×n2CS—@>õ¿ƒ±Za~똗÷5®ÄÆkâJ!ܤ¶|XÇQ¼l!»« °O‹2¯Âr˜l',#ÆvÂnúbhŒ *mý#CàhÆZg`Š„ðŽçŒ¶þ‘Îmì!ûs,Ì~øÎ!ÿ­Â'ðôPGÿ8€Æ; !ãÊr†|_€ª´HnÓ8Q’Ä2Õ0OM5ÂÃHòãa×R?º±¦‚œÇv=ƒ\c»´Ý,àðãž3'ˆ ßÈ>³;hA!â9 Áq¨ IŸ¶¶þ‘¸5vÒEXZ~î=<ìŽ)áúkÑžJZ0Ž<ÏVÒ/gs—“*©ÍßU™¤0ÍUC·”™iÑ÷Uš„AiEÓ^«"ÓliZ`­4ÉÒ¢­£¼‹ÍK”'3ʧŸg„OãÜUE’Þnå”OIϤŽgÈv¹.0ŒyM죬¿ê: h⾨GÄß.Û9ÇP``Û ÊzÎȲJõÂÐŽÞ&!ÀÎÜ%P36¸}Œ ¬³•òÄCšÝ'Áj1”péOŽÇ ¸dð¤GÛïýãöûhc÷ïw„SiÓpþ°/Õ^O$i<ì=¹¼8}u¾¸xùÇâÝï‹_/ßþùîòâüåÛÅÉåéÙÙùÉù黫ݨQ#ÙÐððdîñÐkë‰Þhc¨`9·ˆ¿ ¡³=C«VÎ)’;(mý#Am쵇`I *QVݬ⡴"^.“0‰Ór§²¹Þ¿YŸ´§Ÿ†žöœÁ @Wâvôz´±‡ µ !îá@ǯ`3YºÈòä6IŸZÆr#O磌£$4£=—!ÂÙS˜c–GPÉ=E>ÞÍSGÿHDÆûÈÁD¡Tôm­ùuoîjÞ¦@íØ©Ÿâ~XñþfÂ|¾½œPÌËޥ莻lV&X%7y ŠoÕ ¦QP¦k™åæÅ~‡wAšÆ+ó¡Yɶ¯¨n¢Xs$ŒÑlÎ<2=·³iòš“4)ÁˆäÍ ãæÁ<‡ó¦.äX‡–ÜÆåâ.È#XŠ¡VªÅ0a–~Žó²³™v¼ äVî2—9e°ä| •È^¯•E¶,ÁʶÈ®¤ýÆ´p£ÌÛP¨ÂôidÚÛ° M>Õ»"Žªo¸ã Ps.:K*³Åúî¡H¬×)FÌ5n·÷˜“ýkàº=KäX/a˜uT±UÚ±n™g÷ƾo€AMÖoE(ùåùúnTÒ(ÓâŒášlhßÑGf‰ºôòõ¬sµ96;w]ˆZ³Z¶Ci1¤¥³ ¼ß`Èò€ØèB¤WÛI¦n&Uî׫1ä ÞдG—uw8£xºÊЏþi±éa¥Ž"JI ¡P‹k§}¤TZ·nó°¿Xê÷m’©§ÙAð²ÞºHŠÎA»ñ\+„j - ?$i¸ª`6}&üd †‡î~Þ·>‰¼úˆ±×½jŽVœ¹Ò ÓpŸÏ8…͘ ~xÖu‡ Ø}>™ xW÷- Ï¼Š‹0OÖ:y|­“D(èïun²ªX=˜¶l§:ßÀ;$úi†ytݬT=º‡]źûõºN`¤`iúã}\Vyj6ÄgÇÁªÇçK³¾¢ ø(–ÕêÇwÙFsw(î’ é’=ÉHZôMâúˆzÏáÞˆB¾ôj 8¤]‚§—uÖšÁG¬ª<î_l*ëÁsÒ§<ËØæÐÏÆæ8zünoN]‰‘ÒÌ;ô±¼£ê•EÑð¼³ÒÉ=Û6uiº²Ñ]÷ëú]*6OÙj¨iZßÿF0(÷0{Ê¿Fü’h endstream endobj 2230 0 obj << /Length 2036 /Filter /FlateDecode >> stream xÚÍYݯ£¶?R_Hµñú mU©í¶Õö¡Uwt¶Õœ‰²§ùï;ö²¹U¯nŸlœ™±çëç‡z{z?>|ûøðúF•“Xqå=î¼@ /Œa ™÷˜yü画ÎòÍï?êЋ€Z C-ÃD‚ƒ0K(ÙfËÃÈSÌ0=|ÿøðÇ"ê±Ë8/=>|øzüö“G‰Œ#ïÅR½€QÂ…‚yá½øõNOÎÑ ‰%žåý¹¬ê6oí zÖ~~Ž´¦Þ–s¹Sø³¼L‹S¦7[E©ÿUjõ/ògrøº·‚šqƒâ¹ó²sTlLÅ 3Ê|Ê’.yj6,òu’-É#"©ê¹~£uœØ8ŠýÏq€³òÀÿ˜§ú,Ä‘*Û|_ê 6G²“öô<#×HÓCR–º¸-¯IÊý’œèB’4z÷ʨæmcF"*½-7 U*ÚäXV€Zu`0f]Ù—½IÆÎs "ÿݦM^wyU®ùfäÙw`æv³*ô3D~›—ûBã’=ŠÆug׺ƒûÑÙÃqÕ:Í£”uͯÏgüa wIc/&wG„”±úHsD©öÎôˆl¢‰5¸§›‹xtº‰c—vQ DÏm©×6’rl¾QRf{Dƒ=öÚJuvËpÓꮳ7 ÌŸõ®jܼ풦vMJÄÉç+é-<Á˜åû¼K ü¸H ¬±ÿÖ@‰Tþ¹:!%fLÚ—¼Kvóù¬»­Ë^öÎhn3»s;` ¶NŠ B[j¤£sÌf>aã¦ç¹(aí4æSƒ™ÌÚ®x¬UèÌizj MdÓ Ô0€/c‹Ú¦ Ä´Ù{8yw]F x5Ôž2]$gMjÊyì1)ˆTW0àŽ‚JØÀ f©Œ/êG£Ü†õÄ-&%Ž:iŠ\7øc—Æà¹ÃJ2(î#.kéò”+–Z8{:¸ÚvUy …™sÝûäÇ'Éÿ1‚}@)N JKÝ,'M’œqµ;ØKVì¶ëÂlR¨2[¨ÚäÜCàï…nÛ^”5)¬Y§ÀŠþãd“Ç%<9¹ÇäÏüx:â*ŠæÛZÑ|ŽÖˆÛÍxG¥´I‚Cž–B8µçòÇLwº9æ¨ |;@2SWÃH4ÆÝb÷¸_Æ„Ò`æþ½îž@ÇÌ×Û†$ˆÕµ‹Z¨z—Š2‰&¢¿ò`eân£P…c}Ø·yj=a”.óÎÑ\¨Ö ÀÂ3*}ÓR6µêUÑN{§½ vSQ<3WW=Õ‡s{ÓTT‘Z®ÌWžMw_îB áyßIãˆH.ŸÔôÓŽ ×[Våv|äº* Ç>æIqK²ÔÂmE-ณ{gŸ :(fÔžŽ#ß/e_?¦)$÷«¥B>àòŸ(!°˜3'm—6PÁGø³%ÉP©x,xˆÌòt|Öκ6cŒV¶'m/UdŸmPs¿Ý ¡Ý×ÂyÛW„8ê¦ð·,š…ÅÑøýf»x^&‰”CçíØ®ÎžÕÄÑ’Bçˉ£" #bÂè}Ø2Jéõ•{OW¿À„QËyx1Ά’íÚº—²{Öª®¿>ü^™ÔíW&NBÞzeZ¶hdöµw&†ïLœÎÞ™`:ºn9u>lቫë›y¦—㊼ái]Îè‰QèeæíðêCÓ+œŽÄýÎ&'ÿ'ïPïóc^ ’›«ï>|‡Ê2¦âŠ­¢ûjGûcû’êºÃïÜØ³.´€!‡Öx@Óåx"áåê²ÌJ/mdô¶OI0Iš&9/m ©a£;Ím)lñìºÆ¹uP.cs%™ØÉ)¦§t£émL ¡àr=i’&{Ù°Ñ[\‚]Sŧ€‘. ¢¼Mb®Ç³ÙXgwÜ«}Ì*Jö¯¢Œ\ƒH¼mv]oYÑX¦úªYy¿°­Ý@gû˜#Ú~òMŸ)ym­=Ö=ÅX@b)W€W¨”š¯š¼¶ÂL®€wFª.¤#à]“§.À;&Aå11Κ$Ä›ˆÆvúw7)«V§üŽ^ú;Ir@FùwþMú ‚’ ? endstream endobj 2238 0 obj << /Length 1996 /Filter /FlateDecode >> stream xÚÕYK䶾ϯ‹:Øæ’”DIHÀyذ/½ä°k Øjv·µ$뱓ù÷®b‘zô¨Ç^Ã9ä0»Tª×W¬*rxpxðÍÃ_Þ-¸ r–+©‚ÇS(¦ò(Hsx¦"x<ÿ5Ws,w?>~‡Üi·Š;NS–E„YÆXîö2ÍÂ÷ôJàGÿx|øéAĬ@—IP\>þȃ#¼û.à,γàÙr^ƒDp&#ë*øððý_[-ìðBÁò˜lù»é‹®l‡²©½åK?y°—’Ié\üP^ËJw`7O¡±f“ÅÝ9 Åß Z‘.„Ä‚ •yï ¦§£ôSgôÑ ñFßêϦâ)pŸxÂáO~³Iøß´þŽÃr úsYUnµ<Ô¥{j¼áC‹¾5Eù‰siŽÄR׃q\͉žµ®›ÞM}ì‰é`†gcj' CYŸà½ì²nGgPqÑum*t4Ø‹H±LÀ0HòKר_¥á ÿC” 5‘z}m+ÃvûH‰ðktÙº µ®š3qYmý;L(^›~ ò¡Ñ5Ø/z'yø%zë5€ÊÊ“&™ ñµ´cy.]шÃ.öbºÁ ÈÏ—²¸ÐgeO¤ëX %˜nQ²ìÞI'÷`œ¯2 “n›$†É,Òþraí16\†ßžˆLèÊ\¢MR…u㺪š<Ÿm’„§W OäßRèk¯Gÿ\ÅÅ8EÞ6D$âóçè !,§D…Õa2YÅØé_FBQ$/Ö‘„‡§±.ìžµ¿z-c»ö’]Ý™ÞEçZ3‚½*iË" ±ˆËR EÂb&X²ú"ø¸œóW•ò Â;¼U¥åv…¥ï¬•Ÿ¤LÆ;}ìJÌÏS6[\i?ÏH¾ït}6ïÁãÑ_šÑ…¸sñ87sp]¬ÜÞÅ|ìš«›Í¸É“ûÁùðR7mð/£³ˆëªËÜ´ª?”uQG0MA(ÿL1©Ê»üå^¡Iç®æÌK.±HÈÍN¶YøF€(K’U+sß#4ÿH°Á( ƒ©œeáX÷并ɘñÌD؇ÖtÅ*<ë„à[ò)„÷. µ.p?SñMï‚„Àžü§·à¿eØøWO;0wƒ‡mgZ—m9T)"ÎÕ*Ÿª•šê_N]Žc¼zóÓhh'äa¡mþ+þëç¨Ð,–Éï8È`늲ð[g3ºÜµ)…[¥0}¯»—u Î;557D…özŠÒáIÁ¸J×ø6Ž ëàdÎM$Ÿƒh*˜üjíFiêTEizÐqìðâ¹úñ„IŠUX}ð—•8ÇJ ƒ“—ã[J¾n)¹¯»ù4OÙÞÂóvé¾lêEŽØ§Í‘áÂfŒ ”o¯Q¾l¯‘µÖÑuíŸ.ç<Ÿs‘Ã'ò–FùrçÅbÞb°¦‘EQAE5«ö„DPslŒ3‚²­é ëi¾áݘémóÓÜF,Ö³]þ¯»w4uoÓa.Ì]£zÙ©$×"Að ÆSPjEP}ûfØ"bîþºí&¢”¥ÑÝsÃÓÑTúż½íD±X½ÚwÎR×åÐ,ÂÅv ",Àö‹8l1É#F§Ë9ërÛ}1`:Ûí5™ÉuÄ‚ýj.»Ã êŠç®ÌôÍÍ ± N' \ÛsËzX„þÿ¿›•ÿní(Žïôû”ú=ÖÖMïìåÏhîÜ(¼Šœ7ôÕà=ÐV2Á™.Ë&Ĭš-\cÆùdï«k„WF¸ýŶ*é>Ê 3s±j—?˜aìjºMþŒC£õð—+ë?ýÝÍXà9ãÝ@qÎÿ~uÖÖ~KU”ÃÖœf5±ÙTašË–‚çËu ëæ´œAú93Sûc—àtcHHt7WMÚEÆt0`ÛŒä°ÂÛ³ß4YÄ,Ž•çñ ( ææ®hë_±d9Ë~\@Šh endstream endobj 2243 0 obj << /Length 1106 /Filter /FlateDecode >> stream xÚÝWIoÛ8¾ûW˜‹TT,I‘…˜iÓAz(0‰9$E Èt,@–\-ÍäßÏ“HÊ’­8K{êIË[øÞ÷–O"èô÷â¯åâÝ'J$Šq,™DË5Ë8DQ ׈¢å ]yÊ­^eþ×åçN;B ´eØió(Â*dà¬Wä¡°HyïÌ…JÚ-Ζ‹o JÑý ,J·‹«¯­@öÌc…î{Í-”`J¸ÏÑå⟱Q“iôjs.(޹‰I`Ž)Žú@œ%º (!ÄKûÄnVåMVÔ…Kp Ac˜1‹ÄAÀñ®‹ÌÝNWë²ÚšPhª6m²rp<އ«Èø½|(Ê]Õ“(ÝLiôxL¿eEš·+íRúÝ„˜g·xóÇcAÑbi¬³¢±Zt¬ECL(uu}'©°äC\A¬McÐxc.%Þ÷,ÕoÍ «µGóÍzàŒ¾Ÿƒ0PKN€ü¨ë´ÊvcÔO”s¹Ñæ¸u[Œ+5[„0 êùP(ÐWr E—Á¤Cjó”˜Kw¹>ÊÏæLÇ’O’¾ÐM[fæ¾û ç­~Fúçk°aÔ«Û4Õu½nó®*LyUï°6Ò.JƼ¢,‚BûTxw¾ð’&ë+Ù=k£W´Û[]ùBxØBB½O°¬Œ´é¡?iR[ƒr=7ãÓˆ;üο\~¹¹8ûóã\>0î„ ªpÔŒ?X"‚ȉ»/Ηg³] kC ]<ªEýv¶3(f<þáÎMBB¡Àƒ°Ã¹¯´FãšÕÝß—kÛCÉv—k«YédeÅVí¾ÊšFvèî7Yº1·ÛäÁÜÜZçàd8/)Nœ\éo­®½êªM‰i&£\¹fv}ný誂€8ñfÑä‚`"‡A è„”cÎÅP¡!á§.”ñþ<š.9tº0 =¨gÐCžÕÍ‹)¢7:EÛ6o²ÝÌø×¿k<,ñp?î¯bŽ=ÈV¹{ñ8mćJü0m¨è4m@§2ñ2,àã ‹8šá8lÄJûdö ­—Lz¨—&Öf—TyÓ¯ xSÖAý£¼5/Ó$Ïa¨9,ëå&³¶Cª½zšfmQÉ0aÌ®-aâv»¤­µÝCM騩§¨2[,—²£ C(Õf¿ÁÖss2„Û5„[ã§§åµ,i«ÍžªvH¢ŸVmfVš¬ê@ÐÝ;Ç¡ ö°¢¶”lDâùƒ‘@XÓׯ}Ñ•—pï¬_ÈVÚ5WâJL½µ“t§ÚZCn'Õûƒ?|'4P”Í´ à3"Ë“Û\¿”B,cAˆú ‰® a•ÛG‘¤ÎëÐþ{濾çÒš'&Ê`EÅÏ &ùZbb+&fˆ)>EL]²¹.Êç³Ò`q@IwºÙãç†le—¢|ínʶ8~p´q¸¤ò:±€¿€¹Jòœû3欟²Wüÿ°  endstream endobj 2249 0 obj << /Length 1608 /Filter /FlateDecode >> stream xÚÕX[oÛ6~÷¯°§ˆYR¼IØ0`ë¶b}[›·¶dY‰È’«K“üûŠS å¸í^ö`ˆ¢Ésý¾Cáè>ÂÑÛÕï7«×,¢¥"ÑÍ]Ä)d OI¢›]ôqý¦9»òêóÍ;%-£¤UÒLJ”Ð6»ÚÄ2Y¿Ö"ˆZ´úófõeE@Gät@ +y”V?ãhÿ½‹0bi=Œ’‡ˆŒb*`\EVÿ¬ðTëÄÓÃnÊ J™Öå¢ËÛòØ—Mm5÷íÄÑ&ŽQoöè,øún¨so ‘¾o(J¥´Ææ£Wnïʪ¨›Ðà‰S+þ s ?¢i‹~hëN¿ôöðOÇ•ïŒþMk³'½+®b¾þZæ…91º„©Ó‰H‘$Ô¿+<Á‰šÜ šèjC9”]X<«f´5 ]±Ó£lÁ28>ÚPJ!·’hC Zœ[ý¼c8^³6;}a^›»P@RŽ#Võ¶Èv!c™‡á:´($ˆ ðC[öAÅ)J’äùŽ£¦EŸ+l}s.©Æ7;[Ö}QïF—Á[ßèç¡<”¹™½ƒ®Ïê]ÖÉ7úQ•Û6kŸf'¬ŠSð7”šÑw9a)G‰s»ŽK1¢\BÔ$J)õËÎ×ùlmqy ãy`»}3TF®nz=Øá¼j ‡Œ'Áf=x(«ÊÊ©ª³î»bxýUÕ@V•VT%¥Â 7í}¤ïß®æn¡ D$³r5w°pó¬¬ ’”ÊÚ mžU•u† ʤ<±Ò”{uü6,ÁHJ •EP"µäû1 ‡ÁGàÍj(.ÂßÎFn‚/TEqÚnHè@ h]–Ù¢(Ú¶äAÏœ?±5eˆ >1@DðdaôqC0Æ6¬ÊžzwÛfõýü±>ëŠx’ÞRãOq,M2Y›ïM Ú ×’@á‰ÚžêæØAÆøj{vO;‹ÒOeWÀF€¿hMÐþ×%À¨Sƒµ<6x“ÀPDNh²>°uB…ŒöªÁ,T•-èú•~œ¸Jåë¡îÊ{ ð·ÒhtÃöRÑ|ŸÕuQBrIh¨ËÞl³k†­&W [OgGˆS¹…ù”—Ù£*ïŸÏÅ“|Ç!ãód6yÞqœ ÁŠÄBmœÕ·eÑ™a£ŸU“g½Q¥·:5`Å!«ô‹Ú¢;(DëúÓV¶”cæûëMlBÀ3:z×Ú4‘œX€pNø¼-ª¦¾/UýúêCÂl A<æé¼­8×#Å Š™KÞ1÷–p˜c”žš9hG¦ ­CcñòÜ™ Gœ$ß ü×ö¼¬·ì7€á›mÓïC‡ÉQâ°²>˜1 ´VF‘n°›„ßëäØå¾0ŒwÍP  ‹ézU _?ê×1k@Öý¿°+1»žÚ*ÕQ2┪› µÊ”źE*« €n®¡×™ºãºái]-P;ñKû&7Â5TN. rÍDÚíVútÛ?/ nh§Øîdv¹„é'+M…zü¿¸“îŸyzÙË„J¾Ð €s^ÍòÚÝ„NÞ»¶°áÝ—€«PÛOC¶ÈϨM¨øqšVþ‡,B4í8å¬ß$E”‡>ÇØÂPL9Ɔ9OóD„)Ÿ/½Åލ`îrvÄ’]ÈT‰ÏT‚­÷z,7' <»òkÝXì×ÌDÊü(KÞSÄ@&DɘNs d¿7GádñÌc!ƃ’HOÉìåÝ’àò#N<¦ Ë1Â÷Q€5¥ˆÉ–)Y[} TÂE=ŒþÇ"/UŽÙá[vlº®Ô®µÓDê%œL£0…®½ ^?B©T‘S¯¾1¥k /žÌôÜ,‘Õ?:xj4š¨¤ÚâËͨ‡q^£M¤ÛÛ}_ÓvzÖñ1GÐÔi·fëÒêSë§¾—ê{¯:ÀépbNzž9᲋0}áN M!•~6îÚVó~oî(L@º ib(Ì‚ã±mŽm©aaù6ú ÝWŠÙ÷|‡ýD¹´ endstream endobj 2257 0 obj << /Length 1645 /Filter /FlateDecode >> stream xÚÍXÉ’Û6½ë+X•C¨TcáVR9ÄY*>${n¶kŠCB*©peþ>ÝX(RÃÑL| ×Û£h° hðëêǛի_M‚Œd O‚›m'$ÉDf0¦,¸)ƒ÷áëæ J½þxóO§„Ó‰ÀÓQš)8(3£x½á© _Ù% …V?߬þ^18Dv¾€ƒd‡Õû4(aïM@I”ÉàdN‚˜QÂEó*x·úsEÕtn½œØã•ÇŒd‘µ)&a„qc‰ Þo¥4,ÌËn·íšÓ°9Ü÷8yèü[§ÈÐ`Ã9áÜ2ŠZ±¥6<¦áÎS;+šzÑð~ÍâPµ½]tgu‘Wva¨uïDûÆŽ]~8VÊ1} !‘©µáÝCÝ;ÝÍÞæGeéÓö¥ë¢JµÞ$Ä÷ö9•¾#ûžz=ø:K¬teL¼íÝQ6=*"ó1q†˜I1‹Ÿ€X2Byâ%?И–ÍpHTʼϿõÈ¥m^ïÜæ7v0+îÐh£ùuÈÿA ”}·„ìЂˆLgÿ¤º¢ÕÇ^ƒ'Ÿ‰×s£S…y›T¯Z§ÒÅÜ¡†4LSÿb4pé.À²ÌŸÚé5Ý-µ½C»q\°àƒK𠜈—3!3rf~úójPî(éÁDlEÞ©þ¤”eg¼È“±&ÐEG‰îNäuiˆ¬7‚FáÍ^½ÄÈ(LЇ$‹c«ÖÇš0/oÕ±Uª%A³°Çq2OÞ#"ƒdÛ¦=ä½]@‰ÆŽC‡'xd4SvÕ|žPÇ£{ K–G”¤ç8xÒtРÃÁÚ{lºN›Â-£ÙÌF'ãE!D=Ôì9„ðR€?‘V5O•}^תò«yo—ݾtúqé¤+wìÎÉžZÝ÷&bQ¶A'±sq‚VºÞy_fgÕ°ë£ölðÀZ›£§NvÕ›!CÝÙ±ÒµÊÛ ™¼ë†ƒêüìkìkêÐH|%›¥·jmaÙç®zëRùš0µyGt×ë¢#£º”dàû…já,KŒÅ8ÖM“4̷読}¥Ýº{°c3ô›f»qeÐì¨}Ž-ì^ƒëâ8Ó( ÿxtÐÌÆØìÜu­;Òé ‚«rwõíPùh‚‰zMÐØ4Ýfõ ‚N'WËÌxìO€æ¥)'‘Œçz%WDJ’sR‘Y‹|TûÝa[úÙŒ8ˆÿDLŒ~y8‚ÏG ìvg³ õåÐà[W»|Ký"iFü¹hÆSÉbrî»W™FÝõ3Òql*Àã ó‘Z|³ä-LèÉÙ+¼Cp’J6¾ÿI<HHÈBñ,Óˆ â'˜†€Q»q…‚E> íS`f¿¾ÆJtÞS¨o‡åå|¨âæ”xàï â=êñh|$Ÿ©4ŒE3â÷ø2b/5égLS¦ ¹O—vØÉÛÇA/‰œÅ¢m«‘¤DDmUßîT;©]³Â45>¯RšMÃãȤ(¶iÉÙP¼Ä$7êûG¹„cÑX«Ï¬etͶR›»>‡nZÚ_XÃìLihí cXr¥¼H_ÄZg Quk¬vä$IHšFüÎÑ©'ÁÖœ±KìÀT™…ÍKÍä>(“+»fÛV>k KR"Rqi :‘§ŽeB¿j0N5³6u&#{‘ž½À䮤¬`wT…þ@)/ìVÑ´-ððøì ØÆ8T½•r U9 9œf@7C]wËdì&Òµ~.ÓðµýmzKûà³—Šì¨{ûÃè¥K=±eáï;å¾éPz¯Š¿œ@6ÛÙµ@”êãÐ/F?jÉÒÔ:‘Ž¢ÉGÕ"ÁW¥³ë7g½ßŽÎŒÆšõÐ ã‚ V&/R^ÕÝкîí¤ýZîèø rH»ælвú0vxƒÂt8 Âpþú/±“¼òr­Û»nòVõC[Û¿pî‘Öø¯„g»ù›è9i¸6 1Ñ Úb=ºÌrF-שܜ¹8]ãp`|&AJc>ásËÛÊÞËYÜÎÉ:¹ 7EhöS]¸SÓ{¾Äy¦ägŸ·ží,±ê¤X(“\–ú Gå´,:Ù9³:ã6Ò¨€¥?#N2}Ê‹ÿYƒÆ endstream endobj 2188 0 obj << /Type /ObjStm /N 100 /First 965 /Length 1878 /Filter /FlateDecode >> stream xÚÍY]oSG}÷¯ØÇöÁëÝ™ý¢­ÔJ¨ðÐ6âÁ$ˆld;þ}ÏŒsC ¦¬‰£ð{7Ç»ggçã̽)–æ‚K±Ç¢ÿG×ì9¹H¬rŠÁOÉf€Ë6“E›)ŽDgrrx’bËNbÔ?5W‚.ˆU«$,ÅÅu¯]Œ¥èÈv ú×ì"7Ò9lœY—o¬ªŽªÃO"ö͈6ìË%Ý&T]$èÎÉæ°c,6GÛ½1Òƒd›Ã#›ËIp†¥&L§€­¹ › Oü#Eçô˜9Ù6ËYWج(8©}Šè+ͦ°pÕCà+  àì‡ØªbG掳wØ[L sÉöLÑÁp6J¸½…D•¨gHä¨êoõæ8Œ‘8ŽÛ¹ì˜lŽ¢cV›âD,zCL £¬*‚18‹íU12+Qq\ͬ £¶ÝŸqùj4˜ÔIÚÎ5'¬§ka3‘Ù µá~qÃÃpûØ““b?€3ÈÅiœ4c rÒì.Éå`,áP9p5gÍA])Á³3 ©£ˆQµ¹êrªM7.s² ²Ë¢•pÊ\`µV.EÝÞš«Þ¦s…§Gq¹©Ÿ$ƦÍÜ[2¾Ø(¹[`X PUœ+bL@ºXd$œ¼T3’TWCÒß rÕ@I®Fu'˜v¶©èêÖ\'÷îMfÝb‡ËºÙ_ÿëù¬‡ÏÙk´.ÎÏÎ^Lîßÿ8ø„sv‚ÉãBû°’¼^s˜#(§N0O0F86Op†>p¨ÁÓŽ­xÆ­}~²\lܽ{nö$"¿”í0ÆåŽãd4>Á»ÔMGœ^¶=`½ÙÓÕòøÙ°qGnöôñ7{>|ظ˭ž|7àó×ÃdöÛ‹ÍZk›NfëåùêxXo³ˆÍý1œœÎ.?¸#ÝDšø„hª0~m/°ß|…E€—ºÅ?X,–Xôh›Ô•–%uhb½˜‰ã Êã ¶ÁämýÉìÙùË=ÿ~ºøw2{¸\ +£^Ì~ý6{tíAOu { _ù‚ŒöQ"îÓÈä3%ÀØЮÂ|}Q^ rZÛYåv‘ÂÛÎb» ŒkÜ»2UÜQ/8_!cûÀ1{Ut}àÎ’ûÀ¹±o­t‚+<€j'jBå{XPuÒ€°4Gì#¸“³$§nÎÈd½N'ø_eo˜Å«¨íû(~ÄHz­uÒ€`ó9”Ûè]îtgBáÐV¯ ¥ùR;o[«gÉ´·*ý¤<¯‰Ò¨ ×D)û5QªÝÍ E©¶[Á™FåIã Ñ8àq ã R‹FM½à&¬Å m^…¢B ‡¦°SŒÎ7s<ÏO¦'ÃÙüãpr@©RÕ-Ë%½KIú]ôÞœ.6W+bµ6;¨Áý £ˆÔr§Ì҅攀thï`X Zn­uKзóÊð€Ú8%kPQ¢o…Я†¬ý21Ó>ïpœÐŠ{–KN \¾‹ÓáE'tÜ^ß©¡Y×—T‰áö©îç\_Š;} sEÜeOšI¿&î>C_V–êã®Ê² gä]Úg½·UúÀhæ=•r;ňf´½7,õzé |óÒQÆŠ1Ö’C–…–}Edô’³¾ÂöÜô ªCù~÷»aZ«h¼¬! >£ ølÑÐżÜ­ØAHSŒ†ÔAÚs@±ªþ*Ün^BÍÿ©ìÑ‘}†Å¿–Ì”;Á”­ÇíSƒ†àN„.:µúC-Óõ åø]A{ÕœöÉ»WÑßjªw‚™­ºvÕ e(ÄÊŒ“’àÒ F{šKýÁÄ?·ÎPör†$ñZçñE4TÏS{#š‘ÁÕ– ÅÑ}HA©}‚ùøl¹¨°ÝbH.æ°}3šÔåí#´ýNFJfXœ¿­Ï_ž ïO‡©n}-7^Ä{gn¼ŠÓ]‚çqîëËœ&}`V)à$(» €+éð0á ×?Ð$‘‡ƒŒï?ûð¸ä1Rä _a„²)}"†Æ‘ËÖ’X#軤‹¾’Ð,åhoDô+3y‰|w´|¸Ä‘×¥¹öäuû‡(BÂ%¡ 3Ø"þ¤ý_†ÂöÃïÈ/e$Dû¾ÿ÷Ë¥Éû ÙãíýNðW…ư ¿®1ö¹¢ÏäÔVõPâð¨v¸ endstream endobj 2265 0 obj << /Length 1151 /Filter /FlateDecode >> stream xÚ͘[‹ã6€ßó+ }IJ­ÕÝ6-}èöËRh7}š]Çöd Ž=µiçß÷È’l)QÒìÐÂ>„HG·sÓ§“àháè—ÕÛÕ›Ÿ –Q†2Ie´}ˆ„D2cQ’ÁwB¢mÝ­ßv‡ª¬7Ÿ¶ïÔì$Ja¶dj6O”2 ›M¹ÜÄ4I×oô‘D-Zý´]ý¹"0 Gd9€ÂJ‡ÕÝ'•0ö.ˆgiô×4ó ‚eÚMôaõÛ ûZ§ŽvSAPƵ.?VCÑ×OcݵVs×NÅ”"J‰ÛÇ tftýpl‹qCÖË2’¸îaˆkn1ùå~_÷».ïËû6?T¡ÃHÐÌ®ûˆ†Ñ'öÕxìÛAuÈ:ײ§®nǪײ±ÓÂ\w‡±¯Û½];æukú0Õš1i2‰º-1CÄh­…eµ¡bý\f¬¯žúj¨àìRÙÅ$I!L4À³Bhýw/ÆHˆü®D\0kcYM»œÁÀíÉì ´‰ÁàÿZy@`ÇtèXá³R3oêRwíX7º©Í‚†gг´hº¡*ÏŽ™â¬‚<õl §â2Vß_ÿxÿ>d•ˆã93ê‡Y»þDŸÜYõ}×o„¨;b“û4³cÆ!4…Ai¢·ˆ#‚ˆðVFw1ÁÏY¹îR³ìë窿˜›ö"гœ†…“K7D¬í“ê)Mtë­Í%oº–¹‡ºVaÏœ/m÷4ÔƒgŽã/'÷«º-š#?–`ûwZý¦Þ¡Çï/Y ÈÊL&¹Ñôk{/¨ Rzã kˆJKåâ˾X¢ ÷Þ›MF{êIî*,|òXLG)ažãnduÇ8[r?8 'a“¯¥µ¼ gˆSΈcœ+Œ)Ù|Ï•L!N sݵˆS"qÓTk…ÎG%RˆS3ÄÏRQ îªy‹#Á_ æÒažú˜›AIáYèzÝм¡ÌõØC©‡ÑIp˜I†DúbbbQFÝÇ:Vè´µÄ\,8×Ú.]ˆé㓲ëÄäˆËä߈óT"mÏéÿ9q™ò&dò¿Ë|Ìo¨œ b ÄõáxÐ!?<5ƬÎX jÛªù"1)õêfÒ `$“€¥0®81ƒÂny,oÀâ7öÝê}[™*²Þxõ¸»uªqö̂ݘÐ×`Ö/%åuÌB¹·yM½&"KBU¤t«Hik=á$H]$@×$ë2p´zO¬ƒÕ~fzè¢8‹g&ä°«5Ç/o¨®F¥²Ð‚çý§é—ðs ±"'ôÞUM×îue¬xÒÔ‹…[º\UE¥[RüvNóKó3/½~ŸB§2A(°ÅïùbNJe—8sœÍ8R“ŒR9ò8¤I €_bú™­rƒ_Q<'7á¹½/Tá¥snø> stream xÚÍXKÛ6¾ûWèÅj†¤øD‹š>Ð (ÐÆ=í ¯¬õ °¥­$§È¿ÏðiI«õÚ éÁ0IÏpÞß MÐôûìçÕìõo”Hd°‘L¢ÕK“!eà[Q´Ú «ù›z_lÊŇÕ[K­j™Yj®ÖƒË!W‹%SzþÚQI-Óì×Õìß"‚èQNòýìêAøí-"˜þs”{$(Á,“°Þ¡÷³¿fd¨µîé/îuù¥hó¦|èÊºŠš÷í$hÉf,˜¸º/ËŒ³ùÝ¡Ê{âV îTZE5}v˜kÆ#ém±««mYmƒÈú(xÑ’ó KnÐ’‚û…è»AùiÅ$ÁD&aO+•A¼Tr#%(À•­’"çvѯa4KȼpÏ’NÆŒcÎe¤‰—MS7~¹®6~á`¾Jvåí#ÚÖúõî£ÂmÑaW1±ÇY½¤FcqK1DÎé"0ÇS=àDWKJI9¹€íÜ%f³®Â®=Ul"§-kt½fLùULM»¶IèœÝ£Œg!]£Ð¾]d`ÐûOUýЖíÀ žK±•íwe•ï^K Öÿ˜ÇàûŸž²Ë„-«.æÇ ö&”N–y0tâjH*-E¿ÆcçÝñj\ ßûƒCÕ–ÛªÉd5ò¹Ñ¯æÓ¤ÁÑR~˜ò6Ÿƒ³åÀég¢#ë£#ËžCGšeº‚³…âØÒŽØ›.ê°Ö-eHÀþYbfâz¨Ã‚Ô¿F9ÛW”çà D´¢ê‘ÈgÁxÉ ÅŒŠ!fžÆd‚ͱûÄ2Kðs>ÞjhGTe¼•/Ç[!æÏà$SZ›žÂIs&NúˆQïµöŒ‰aàƒxŸ™#Žÿ#JÊ—¢äó¾K±Öô¸<o ¼dØKà­?ü1MNÇjPOÛû´­™Â\O@œ•˜ Înº¨GJF?JwÖƒ!Ç_îy1A0!H¾+š¢Ê¡Ÿ¸!ÎB¡’tH·ŸF(ó°nÖû¢å¦9ƒyf.–ÐÝêfÊëT`¥èØ!^ŠÒÆdS3#gaÇqº 5\ÏCEï°¬îêf¿>Bì“ýÖ£U°³gΫ)‘C#œ(*Ï8!œ\êo8g&rzŸÀ*x)ii¾«2%Nc•ÄTªKÜj¼àèÄ’ŽclÖþë¡“Ý7þ(¿Ù<óýf‹üâoW9–l£Ê²¿·]sÈAT0°»_w‹ÀXuë2j0¨ {¿»ßC%Î ¯N~·Z…·ÐØÚ‡"/¯ a.ŠŠx´S$>lÁøˆš³ÞÏÞm´‡p· ˆ©9cð„î!…Bµ™|â3œ‘Ôiž 63Xète‚ôÖŽxŠ„v(Í1ÈÖ)nìSé1[Ÿª®ÜÝæ©í¨çFQp¦*;£epX&•£.ù®n‹ ÿB(±ÕÃöÇqLnFÏïõ Qp’Â4(%%± éðç?ïÞMzt€cQ‚/œ `Êö©Ã8¨{ÁŸaŸ¯R× endstream endobj 2280 0 obj << /Length 2316 /Filter /FlateDecode >> stream xÚ­ZÛ’Û¸}Ÿ¯`U"¥<0n¼UR©’=3.o¼ãÄ£M²eoMQ$FbE"µ$åõü}AñQÔÅ5"O7çt7`kiaëÃÍ»ùÍÛ‚ËG¾CkþbÙr|f¹>|ºÄšGÖ×Éût#¢xúÛü'y·kyp·ÃäÝÜu‘Ç(€•7rozK]oòV}‡È‡nîç7¿ß¸ [do€Â“¶nn¾þ†­~ûɈûžõGyçÆ² F”9p½¶žnþuƒ+¯qÛ{¯á· ò¹òÉFD•'úQëë-ÁOÂrdÏË)|ˆâ9ß-"1%öä{Šço³` ¿,s=øf¨°uK)¢´Š’ƪah n©'ß(uÕÕ6K·"+bQý’¾¨ÏÖÃÚns`—ä¹ÊìÓk’nó8oO£Ä=ìòŸâ$\ïÀÚ­Áø›Á:^ Õß æÛwÔÓqRTw‘æ]„!Lˆ¦D/*¤ƒB<äq¦!¾aW0… Ñ_ÔÇ>LoÔvI/©oÒ¿~DüÕÖ["£jóVtïDfñ¶ˆÓdæ+%sÙäe—„gZs%@üñ)có²>è hÈÈñ(£™(vY’Ë/|¨¿-âMÅ:Rߣr<‹8Yªï…ò˜OÂ`,`îåO’[Ø$ߊ0.Ñ"õŒ‰© Êò2¤”dÛb ‚´måu=NÓmŒ|ìëjM”>È‹*u¦ßdÛs‘Ë5Îa{ ¦Ï­í!èýãÞlVŽ+•‰úY–fSŽ'oLsìQ„½Z·Ä8—qîè{4¾šD½Ñæ"c@¤M?ÊËï2Áz×ñ8ê§aGrÜ2zû´›†Y# sßGžãÕiøÊ)×±l ¶Ç¼! ¸î)•ý[™ü 6,Ù´JÿOͤ£òêê„RÙΕ<¡Œû:®ü{êÓÆüHñ®ÄR¿=o˜oƒ…+yÃ1@Öñ¦“ÙºEtËÏ1ßg@8ÃÄqç™Ø!'Åuì± Ü7`ÈPRû2ŒŠ¥ÌuMŽDÃõ£^{6Ü>K¹Ã뱊¥wÏï~yúõ0-¯bZÓ²eÿÀêß ÏµŽ4ä.âŽß(™ý¶§•ÁS µ=­ú&‘½¤Ù¦,aUF¿e)n™ MÂU–&é®BJ»tZ¥øÙf«‹³µ!hݘv®y'Í®ãåªXWNFñ‹D}ú¡»—,ݘ,Ô™]âg»$ƒ{ø¼Š:aÈŽi©Û›Å«©òhpgO¬/¿<>~|ü`ªAŽ\›5ªŸž™Ý‘®ßVôë¹y悵lŸÿÿ¯¹9Œoš“\Å*0ÊÿëIZÁ%"ydñúõpc¤CdÕеµ,!?‚Ív­{Í|·Ý¦¹ä`¬Ó¥nF·zpÕ—U I.„î£EcÖÛýÀ*È"àL˜B©z˜&pE@·6y¯×Õe9Â\»Üì8þ<µíIKšá&¯•GÐM–âáî¤HÕçB¨ÏL‘ºJw…n»’êÞU9ƒpy9¨òF}Ž™þÎüš¢T«¸ŒÅhòí¸_S}Ý™™V0ëh—7Hµ+iÐ*gKK]|é/æ¨ -ÚYH„AŠuk1Ø=¬ÙÝ}‹½_C4ãÂpD„w§W„^g !!—u#A;ƒK0tgÀ1r¸=Í”òc“+DÏiwÏŸÿóxÿe ?¸†º?hyP÷t ?8Óº±?`Âéøþà@Ei­ °•‡ãN"¨ò…ú¢²Y"‚¬háƒ%=Üeû`›¥² ‰êä0öE|b„¨Æ ‹ê -*â —ñápP†|r\S,©ïï5õéóûÜß èé ¶k95×râr:ϸYMå縚ÚHyµNÃÿIê·Ù>¢4õ{Y›J¸¡ÊÔnGueÌ©êëlv©^Æ ëåŒJ/T¾S§×Ñ ¦ˆÁ˜[z9Vƒ®a¿ÖLÓZ3ÞaÍœiܬì!æ8ã+Ð^(ÝÚ£K‡¡JÔÕn O¬'G '‰àÐ Å0dP —`h1“}r1P×CÜmˆáçÙïfóÙ€®`\+¡e]+à%œgܨêqÄ5ak%l‚ñf·©^uE`|ý¢Ïã—n‘ØŠ$ÒbIW« IÄzH§½/@p‡FH`Ȱ.ÀÐ` aî]eQB90»Ñ?=|š}xÀ5L× hØÖ C8Ó¸YjÙÇkAk›W¹ÏcÓ Åêý¦À.‘›lIœ¯Dôv‘¥ªH$×NYQ¿¡1Õ•x‘Ùë‘Öéô õµ­¥¼L+ã@†µr†Ö ö9¶Ó1²\¦°³Ç÷ó_ÿy? —+˜¯åÒ´¯õ‡ôržq³\(GŽ×QK$Ëê²xÝËõ¦¥úñÌêúl†¦Ïg—²yÈ0›/À¨ØL<€¢Wa3ñU~ƒÍïX6_ðæq˲â±<´s˜Çg7óc˜Ð›TUBÖ¯y›ÛNæ·ùòÓPò(zL–˜^¸å:dÉ—`h&c•#/š=9çxC8F¾ßØr}úü0~?ûôñÝ—Ù|èmÐU¼¨yÝtCñšóúLëFbfÞAìL¬÷gÓº­ø*ÍõþRZ¥óÔÈ÷ ìFÊS­M¥<})ô¶UµýóÔøÓ(¬0å”l—ÂVÊݽ–HBî‹ÈTTšëmÃ96ê"B¼ÎöŠtûY;b 4®W°­óbÓx™eµH‹ç™6&E4é²ã91ÔÇÿÍÝÜzå&Ð:pdmvêÈ´@{§¬9E>æç²þ?…š endstream endobj 2287 0 obj << /Length 2209 /Filter /FlateDecode >> stream xÚÝš[oã¸Çßó)ôÅ)Ö\^E[Èæ2›m&³Íx·(¦‹@±[€#¹–œÉ|ûJ”¬[hÙ0@É uyøÿñ"±³t°óáìçÙÙ7»ŽBÊ¥®3{v„‹\Å©à*‰3[8_&—ñK°ÏÿœýªKKǃÒ.Ó¥¹”ÈcŒe¹:ŸRéM~Ì/Ä%ú¥³ëÙÙÏÂÙ; ð¦pæ/g_þÄÎþ÷«ƒWžó5+ùâ‚e.ܯÏgÿ<æÖ{[.Až”Ž„«Ä¼i‹Ulq¥çz¥­‘mP„¥ëH®çÊfJCY!Œ‰¼Hµ\Qñ h|×Ï»§EpNÄä5œ['7kÙ.¥îH5¡Œ#ÉUùã\щ¿Þ™jü ¼ ÞàÒÑÕL ð0Rm8& †Fm®‚d¾ 7iG]J#HðSÜ·Õ&¨°Y ®‹<¯KºO¤+zÚ€z¶Mè@R1ÈÄÿOC kT Át*eH‘º¤djL ‚™Aíêæñ_·³‹Ÿï®-|à½Ä«ê¿aŒ)üa N§9Ç4q‚°gÆùÙÊPdã ­Ž7s?ÊožÌƒ¯Û0Mó0÷ÃA€–HW*1%)èî̺ùëx™—‹wéf—êQY¸=¶mµƒÆª½— »ÚO7Q¨ºË¥ã¨ú„¨ŠÚoïg×÷wµà½T{Õ}¦v~@í§9ïV;‘ˆÈj_ÄA’ßEqšß¬üsŠ'¯: 5y›T”åç·4Ø‚Ì×ßòw^Ã$|Z›ë0 ›Ümh[î`Bý~õ¾ØÇð]ˆ½æ\‹`»ØOtÞ)v˜e#êÖz²ÛlâmjônFéŽñ{<Û šf!Pk1S aR¬.®«nÖÐfqEa G‡£…„¶ ˆÆDO#V(†Ø(¨€™¯‡Ç¡ÂeˆIº§âòÓÇŸî-TŒà»¤¢ê\SAQqšón*\…˜ø~Tì}:dž£MXpñP*ú±S1ÀFA…U¹‡ è/îV¨¸º½¹±01‚ç’‰ªkÍ?ÄÄiλ™à¶ú~Pqn}ŒbH*¯ÇF£XpÕP$ú±#1ÀFHyr$¬ÁD‰O³_®,LŒàºd¢ê[3ábâ4çÝLPPýŽL¼èRñǶµ­x° =o âû±+~€ £xáéë(Š –aœT“€]òcø.$_s’Ï× ÉŸè¼SòBIä’£%¿ÓU° £åþÐkèw!åºÄO8˜â¿|x¼¸›=ÞÜÞÍò¨7«ëa„Y™æ+?J6Áœ3Î1ó—¾+³:ÂÓ×èô4bEgˆî"J¨=L ¤~½‰"*‹í«ëw·³Ë_,ôŒá¾Ä§êð¡ñ9Ñ{7?¦+0/?–ŸìËÑr¦ó•¦¨œ‚©ü[k7EŒÂÈ!¡ˆ(Õ¢H;×yJ£}Ð::žm¶À¶›èÁV?#v¶Ø0lqåAyb—È£=òQzD*ÑzøýþþöþÃûdâ¼$«âÀòuªón°äë ³åà'ߢùjGñ΀4_^üh‘ÿ“ÎIØ.Š€1t>eOþ}NˆÞ‹hìpì’  -LФ¦Å_ßëØÄëu—çx»µ¨Øfd›”ùîÇs1Y¬î†t}T6M²w| [ÄiD $®§+qClÄÁUØw{g3.=„]¹GîîóÅÇß,û$£8/ˆ«yÇof&hCîDïÈq³,J«¹Œ±V.ƒGK’ߥE)F§Oašß¯ÏÉ$ñAþiçŒðÛÆ0FIø‹: %AÄ5&uö4æ²¶®½Fûà°ðS߯ÔÑ‘l3&„tSýŒØ™`Ã0Å@ Rq{8$̼Øá,Æ)GÔU{¦~»¸üǵe;fç%SUïødêTïÝL Žˆ‡ç‡†)½Ù¦zh°^T´$Ö´ÓCû?Ì¢ÎÌ’´M`Lêéa¬÷ ¼X/ù¾†E¢,^ØW¼iÚT²ÆnQáuíiÓi9ãlÚº„VÅQ±Õ ®û!Á,L—aêwæèZÐm›²Ç  5hB‰A§ÓN°ëgü¼Ê©=s «%@œˆÒ,ŻΗ©Î;Z@Á"|„ Ì—‚ô1©žG{ÌñŽ%ÄœÄ\RÎe2#åû´ú~.-J¥ùËgE.¨sbÜU[î®|ºùÅ›$Ÿ– *®Í¢QÕ¿„Ñ|½wSZÿ·¼æëð ­þþ^C9Œåí0J‹Zµa°œ(¿ñµ¢q(šPa$i¹ÀÓœ¿–ËI$Cù.JÂeTС+׎§†ì§® N ÄT2¯ÛƱ»÷:¾:}à˜OžwѼòN­@“’©÷¢cŒ>ß·WG&;˜ùÜén%úË&Üú!!_të±Fÿc‘5è)ûˆ¥ ¤y•™Ñ¡~¤u¨¯ñ:+´òÓüŸOÁ:Ž–Æ›^(Ʋu5Å."Ò«EySaA¢ª}gÚÉhÞ> stream xÚÕYÝܶ¿¿B@_´…—!%J”Ð @’6óà¢ö}°ƒƒNËÝ%¬¥6úÈÆÿ}g8¤v¥“Ïç}È“Hj8ßœùQâÑ!âÑÏw?Üß}ó“àyT²2Oòè~e9ËË4R%<•ˆîwÑûøÇö¤wfóëý/H­¢¨ó©¥R¬H`æ3¾Ù&ªˆ¿¡‡ÈnºûÇýÝowˆx$®Ø™Eõéîý¯<ÚÁ»_"ÎdYDGyŠ2ÁY’æ0n¢wwÿºãs­‹=ÓL°R’.ï>ÙöÜ›Þi¶†'ìêÆjmÁR©hï_Œ­›q§7ÛœóøÛÚÙߘGvü.x!_ì–Î·ÛØÁS‰[*‘2.Dpñ|8èáá÷à±îzÓÚ‡º©+"À\–‚­~÷žqÏa_g<þ+=`w’Å¿›Z‰ø[`uë«­@S•Œ¶)g¹(‰ãßu_wæ<€Ÿ3ñÆAoõ0v¶ß GMŸ'nü‘Œ²º¡ù©Ý§ƒ3o0- Õl³•…ˆ¿$`FÕ˜ÝSΓ‰{†ÞëNÛZ{òÇO ÍÎUWô ;o¤¬sˆtI,2–çSï4ºoÍ iÆÒ´tÆ›ou­û¾ê‚Ì·F[™ p5äc–M?ÖÔÕ )V3iäôÄÁ­×pN^פ°þOK‹ºëÚn#yü*¤Ùm* 8Xi©‚–[±šN’I™ßZ‚Œ;U½cdAÂsVȬPŒgÑÞ;UÓtD\p©ëFŽƒD¾KÈÿÉW‡|^ìĬꈸ×vç_Tv­Œ—*æÔÕ^¿y÷æáõ›ûû·¯^“ª$»‚%cû¡o„QiTªÄ¥\Ä—£©ôº® ^usÏÕž…ÓØ͉™ëvÀz}àjøìma_Q‡yÁòBùzàFÝ%ãó^7;&nR­„Ü“µþÕÕÍû’RõŸl}ìZÛŽ PĦҴhÿ+J,“2 ‰´™¦„WXæ S@TîuGr€.'à«ýHÇŒV"¨`âR(´jÚÛëaBfîÉÔ„3ÌÅ6†àW㑜ñï/¦ZÞÜru½cg`3ŸédúöFAÎ%Sª˜×üÓØ æŒ9È»Óg8”!naJ¸$Q'<$nð¼[äHê#pziXñ‘¦ÉÉŽñxôjôg]Ó< e"ò"›TÃÖ¬iÕ[G¶†· ,qÓY¦œ$ÌìßÌ<óÐwõZ&%)œ¸@_ðð”nX-°j¬æ%\d§+:Np߇q°fF¢XVÌŒx¨ºÃ*®Œ_“þM¯éU6¬T“@†•Cáy´¤#Aq=ã˜Ê‹RKLqFpd1Ûqäb. ˜A )½\ÐaŬ+\”€ÔZ›ûR‹K“×Èa‹Ã–C)AÿËùâêtÑ/d€m›Ð¸Ú%(Z)|×;Öj …Ä‹zQáÂK⤴þm¬šym½ª5Fþ;úéç"ŸCñ,¿zu ýZoNy=OÍz3]Óéc èÂI—]š¯éP0™Oé|ß5Þ~Wo^p¤R‘|ÍE´Ýp³,~ÑngPof&{X›=k›¶Fg||9Š…—Èu%Û|ã ßâ¡?=xu毥eÊDúÿªŸ¡y·tñ¿|½¢oEvÅ +Ù›I–ªú!ϘÊÒ'Íɸ3îª*颙=ÉŸ"´W¸K7Òâ—,\‚ÊõØuTÌáí¹kkÿ @ÈøßGÓè¹O\/ý¨›Æ¡”±mi©r/Øsœ¶(M8Iº¸¤6 Ý´]eAuž®œâWû±3 žukQè{î;VhŽTOï*²1`ºÃÑ3ñš±×Ô9Ù:”ãÅÓÈXðç)|.€…ê±½(r¬Íd:$2Ä O1}èî Þ>=ÇYΔXæÖhƒ´Y½›ÝjS¼X¦™?TáŽp9ÒG…èX\ª|¡GÝ´½~^ ÁÔü†ê³=ã“g}z¥õ‚Ê2{ÁGׄ%ªœõ¾I³µ 2a%—ÿÍ…ÿB¡} endstream endobj 2301 0 obj << /Length 1118 /Filter /FlateDecode >> stream xÚÍX[oÛ6~÷¯ °y¨YR¼Iè°‡]±¢X°Ö{JŠ@‘èX€.®.éòïw(в¤ÊŽQEŸDžëÇ/!èôçê—íêõ”HâPúmwHH,C†T_EÑ6A·Þ¯e®“týqûÖh+€¶dF›+…惱NQÐõÆW÷Ú~¨¤æÐê÷íêÓŠ‚Aôx'ŠóÕíG‚Ø{‹æa€>wš9”`ŸIXgèÃꟙzŒüpFÅ!·¾¼×M[Ö‘§µO¼(kµ‹a1AŸâ@){īÛ8Öu½k³Wý)ªÆy˜æ'K†Ìeà4ÒÚš­:·t‚×FÉp[³×•¶K§ö««ª¬Öœx‹~PŸcN‡ lè’'t¸<íŠ)’Ëî<µŸø˜©¿ðí³$0ÇûrrÝn(!Ä‹»~¹Ï£ÿ’¨‰îÓú>^C¬û¨¸¯:Nïñã J±`gf£‹ãÎ÷•]fš·y_À(?d}N}ÐEÒÇ]ö‰5Æ 9GÆA“i´ž‹òPCÞÆÑŽ6©È,ˆÒ"ÎÚ‘šŸlLYú€÷?ŸJiæ¾TEãŠ>©'ÄRWÏ—Ó´Ø 94ð¤·ÓØìüè2·ö…÷”Æú•´E>B×ôÍZ4n\Žª`¾YÊ놊 ŧéýM×q•š*sဪÐÓQ¼·+WÈîG¹³3eC:Ÿ`ìªåѳ]ì#Ok*¼~+IwFwóÙÅ ¦mf¬¹6ƒõ“Ñ48S›dœè† ¶vmwv¿ìèÕK͙€±/Ìâ< B6z ƒ$¡òn „|Nk=¾΢ ç S€ˆ tžù3@Á¢?Rà@øgθŒÝa¿ù½z sðs±"ôÙ gcœ8ið²(-Aš:i%ÀÈåÀÕiÏ ê(‹ì§\gÃö=ƒÒ'Š+L8›Ô©äÁSNq¨¨›¢« ™9Îtåç0¬n¿cn.¬’…¾ À€àáyxÔÇ^Ï#Àù*£ä,FúêÂ:(1y1L ì=n|á‡èr²C ¯ƒ®¬¬)­°ßë‘2MìŒÓMÕÆ`O, ”·íQTw¬¢—‡èS«ßà ð‹ñý`s_¶Yb×EÙXd¤2Lña  •î@?>YÖèpÈÒ82=…‹ûX…CÆþþ÷Ý»¥¼ÂhqBO±³)gÙ"¥Y—œ³GeˆiÈ1.8‡qUT<®Aâé«™›1¥/àmž#»²Ê£ãÃðµÔ-¸%å7¦n'ó´ôÐ1ó‡Ó7çm@N¯æmŒ;ÞÆÄˆ·¸ì·ítÁîVagÎÛ@dy,f¼ ŽÏy(¹6ƒå¨ÍL~Xàˆ ìˆ‰9t†ª™‡Fì%ª6áFDL©SKW[âF jFÜÎøÃ¦B½HÕÔwLÕ–þU(þ5ÿ)øŠVW. endstream endobj 2311 0 obj << /Length 1629 /Filter /FlateDecode >> stream xÚÝXIoÛF¾ëWè…¢ÉlrТ@ã¤E$A÷”-,©”]ÿû¾Ù¸™´”4‡¢' g{ï}oûF8¸ pðÇâåõâÅï‹@")¨®·A$,ˆ%üÆ$¸ÞŸÂËr¯6ÙÅ—ë·zw$°[0½›Ç1J…ËÌÆˆ^,iœ„/ìDZ¼¾^|]Ø„Ò  p2 Öûŧ/8ØÀÚÛ#.“àÞìÜÁˆ2ã<ø¸øsÖx¨}ÒÓÇ_$¹Ó qD•F4ø´$ãpm,[ÕªYÝæåMš¯Ê²Zݨ]zA¢ð.++ou#,)E”:xž¸„b{É’F8üLilGå±Y–Ûe•·ÊÎ v;‘}Ã@$#(‰­ÄEy¨³z`“ÿ…£$ž×ö§¬XçÇ ÈÀ/Vù<»A»_çlKaO«â¸·;«™jï ý;á\OÃ59aÅq{ÉgáÓº<‚Ž‘Ÿ§ð…&4ÀüJÕë*;4YYœ×;p€%Âí±X›Cæk­ƒ)„‚·Iè65;e—Þös030)ŠBt±dIÜ“·>V•*šüAFaºÕ@nÕº‹£¥mM Ùä¬n;¸zELF(JäȉM¹:ì†q8†)aH$¢ï8í+þ~§ ´Á’ÇòÁ’@êF‘—R\pPW'£ªš¬¸Õ.…q±9”YÑØ¯:ÝreÇwÚô4?ªú¹žÐ¶§n[槦÷»›¿ÓÜ›ÒÇr*"¤gœ9x*0‘ÄïhÃʤ‰7n£„û-ûôïMÚ¤SW±‰¨½K{ô}³uîœãz=mÌwh©æ)ûH!ÍZ‰—Þ½~õÆ»ÒzÂÀE«®Vï{?¥<‡ÂA‰¿Ê |'FøÇaZ)»0r½ÚØõ¥™@QÔJšQ‡ÄH2ÖÃR_h±ô9c,e ì±X å¬ZІ„C,-`½{ùújRI gˆæ´zÖ#$¥tqzˆ(öˆâiDqXgû,O+S<à,±- DºÚ݈N·¦+Õ«Âöÿ;š>xVõtj@_ÛŽõYÝÒÌdnoeÄ« zT’æU¶ á§‚)tZ¤-vç1{(ÒgF`ä 牶.unpç³µ­J8<YSÿ—¦<ÞäjŠP‰žì †i`E‚xBûÍ#70­fºn>€^˜ž Cj5÷J“å œKr¢õá¨-xi±™ì}qÁÎm~²ç|âM3é Ó–lz´ÆÙ`Ô'u¹—•™S.X2ÆŒå°ÕÙÈšò ÛŽY)¨`5Ð1Pƒ Sºõ`˜óµá‡Œ@é*¶eµO-a4'Jû{¬uÔ2Ê ÃËžTŸ íPž0Ç(fò¤êpC¶×d[ë{(ë:Ó)n–ÌÍfÔ—íM ršÀ°9mM½æÒ74¬ÙqQ¨ÜϲÖ_·÷ë©û žÖö£RéY}¬K¹Öòpp·qlV†a»0¡ïyV¨Ôigð6ƒº>î}'Í6ÊŸ÷RwŒ©Ò5|fu“­m»ÔÁ0:Uj÷Làš‰›ß?‚¯6{c6â¶ öpÁ¶ÌOuûù0ÛõÍŽÛÂU3Ü6!ˆóSÜ6Æâ·%Óø›óÛY9m»WŒa*0sóà”ß9/'>ä .”°QÉãÌTŠZ逿¼{¼÷.’À:Š7ÿ¶õïÚÙgºÏ:Øü;ÉÕ®HbCUµº6-ùÈ`³ôØ6 §Þk¨ª9=MUcŒ¤œ`ªŽhr}˜ “ù,š­½*d?ªÅ¨Á·å¨BNrÔϲþXýfÖr ë¾ÌÀ`Ä1afüVv‘ +–õ ùÄ ê°þ¾v³èYçýâFù§ýmcV€}8é"¤¼(_JÓÂþªªì@øó)œbx³ôňÓö¡üm,)’pÍ×'gr}Ó1¾ƒïw|ýÇq~;¬Ûw(s ùû,Íÿ§ï9ð1!Î|u3xt¨ùíϦܣûrooûBh1›úO›S$1ÿž¿´ÿ–›! endstream endobj 2318 0 obj << /Length 1405 /Filter /FlateDecode >> stream xÚ½XÛŽÛ6}÷WèCå"â’")QhQ × yè%ñ[,d‰¶‰È’ªK¶û÷^¤•lÙë¦EžDQCòÌáÌ™±±·÷°÷rõãfu÷+Á‘— $ #o³óx„¢„zqϘx›Ü{çÿTe®Ö6¯µuì °Ž¨¶fqŒ a3cÈé:cáßÙ‰ˆ^´úe³úkEÀ{äé€Vr/;®Þ}À^ß^{±DxÆòèq‚QH#ÞÛÕŸ+Vý| ¶Ãåþ _$PÄéMøÆ,›¦ì”ì^wKœ!ÁNÂßåŽì«}Zà0xX 9ÚÙ7ãt$ľfUÓȶ®ÊÜFÌÄ1Úu1f8¨ál't¾KŽ8@1D gk¼wÁéÓ—E•i'?ÞàátÍG‹ì}Æo¿Í¥‘•¬·²±Ø§…é ÷oAùêVµ3Èwgr0 ‹íÚ¯T™=`"ðï; ¶P[tøþ’oÅÄPú¡’Ì„‹"Lȉæ86 ±˜ ˆ[â.õ›!t¢^؉¾lÕÞ‰56XÎ9ÕRô퇴%!IæLþ»†`3à®/³ÉšßœBQ7s¨bœ,I¾ŽŒB¦­Q xK/FÙ’`fûxsᢈ³S°Ô‹ ‚ˆxÒ½§°Ä:º#çYÎ]ÅàWZèÀ¢Ñ…ªXÊ2Ù¶.p*]ÌT»x†€zHG}Èr?aTØÙ\×Pý24­2ËóCûXfúöf¢*«¾µÌÀu¡ç𧹡„¢˜…“¹¦^YZf²¸]¹œý©ruU=Œ PGy6j|Õdeå.¡nª=¨[{MÒÄ4ñ¥%í2“ÈS+ýÅ$¡ä4·>GÒ¢øº¤1„Cz3% ŽUz àw‰è[ã<ŒL™‡/.Ð`&uklØ—ºq¼@š˜NƬH¡iu7‹_i$è™[î°kú'@âE´ìàÃAe Ë´š0Õvª(ìP•Cž “y{7¦‹Õ¬ò¤ëY~]R–vÝŸ/÷,þv \T<Æx.ÍÆ JzŠmGÎy3ŒD_/¦H–þb!J0ûœ„þޱÆ endstream endobj 2324 0 obj << /Length 2180 /Filter /FlateDecode >> stream xÚÕYYÛÈ~Ÿ_A ‘‚U»O’rì.¼@ÄÖ›½0(±¥a ’2ÏN~}ªúà5Ôdß1˜D#6Àa¥ŠŽå݇Ÿi”ÃØO%R§ÑƒYFŠQÂE íKôþîŸwt.u:‘#lªÑÒÉòþ±ª¯mÑZ ÂÒð ëY2ÑšF;ΈàÜ­ýMQ/}n¶»˜ÒÍVÿKq ÷ (ċՒ$R»ÕEÕùYl:‹ B P¹=?ÁO™UùÚ®­Lt˜ÿ‘*ê×t€®¢›ß¹’«Í—âh¾saç2ŸÍó'Á>ìá¸)„;èG;A‰J•;ôo¦=6ŵ+êê–ÞÔö÷—éæÔWÇÉšÒJX~ )ÌOã) ¨;§í²¦k]; ]ÉÊ¢:»Ï¢ºö—Ô›ºq]ußAÙ‚¢z9H6é]ßø±k 5¹Û¦«]çáÑK ÞoA”(-×)aTOÔ»¥—´Óab{5Çâ#¥ÜXv2QDsíx´òæhM×j ±HÅæ„‰”o:T{²ãç¾h „ôKhêôÃ9ƒ~8¯ìÛÎuÂÊÃÅ·P?¹f­ ·Í9rwOƒ‡'¢ï†M?u¦íf1¸D‚A`¨D>51ŠóPt÷N Ìu4 S¹®/èùÙ¥÷¢×§5‡cTE׌X'i˜a$YŒþ²²ÛNjE]æõn, :^.¨Ýœ¶Œn²âÖ‹uºùaË”õ[œå]›m£¾µòòM›•WkD˜0Óºï¬1îŽÜuõ­ lzÿ¡ÏÆ­à@Æq4°­èÉ=a®f]¹SÜqÐ1êà¾ÑÿAçÿ Ó æÜÓ@¢ÔCà@B’sÁíÚOP²%lOQÂo‹6š¢ëLå>àÏ—>Š0®¾ŒÛÙNÃEHñ<Ð7fzèT286T2vqíæ@%ã¾Ã׬ÉÊ-Û˜Î4«EŽäDrö’"‡A?LôR…îÏ*Ïø bQ±9㣸ÈïgƒYÐÍrp¹+P2,³P ½Pžmî³3²ÎµLã'#õ¡‚m{ê/—G׉e®Èêmå:³<·õÔw˜¢Ô¦8¹­ÌÅ”¦êüõÉËà„™{¢“g4ƒO4¨3]*»•CV*rëÕÒn <º¯2³ a+7ÛQç®p´œ Yà}Ý7Gã&bâTŸßÄd?¢vý)k<ë þñû/„rÛá XÜg0Oëÿs³eéæÜã¹Ï ‘åÿ‚2ÔäkH„tÞÔ}•ÎNÊI® lØt&á$·“çhóWfÒ}¤4Yå sîÝa&h¨Yg‚-jŽÌ/>Õ—KsÚßÏ3Ó‚q!¥¨eÒ›ÑÍ,A¿ …Wyq̺¡Z…ÕÇú<Ûbz%.ê;¦ åÉkäcëòi½&Ÿ "„5´êÊø†!u³B[×ÁtB>µÍñÆÝ,xº4åÜ{zDàJ:e[8v—•%XË*÷ÛWm½ÖM|Èø"V&Ôç:]vnÀ»¯5¨miZƶTÉ…+žÇÌàm³ã¬ú]xÜ¿MS›'¦tVq–Œ_cI¾šÒáÎ$×,)d°¤Uh@êŠcÉ÷ (å»*:&W½¹…“”$)‰…¡jyr¯†Ã ÿ[Õ^¬©õàÓæK!Fió¦°•ˆeÍé³…òW·™†ÎW±qU^K±BB[½@“Œ¥}r˜9Ãà´hèûÀ-ƒ‹€—…xž9Ù”fËþÒÃ])¸¬«\-ýûM<ïXÝâ¸k…ÕEižs´WQ†X§ŒñQeÊhš{+pí»,Sk~Ë Zƒ;Í#kηÜiô»üáï-Ø1¾4Á‡½ÆÀ¨§÷][äfË7Yu^ˆœ…4a¯Vöù»Ç;-2‹H&×cا¨ 2ªlÁì Êñ \÷µ¸lg³D7Pÿà$cÈ +Õm,Hʆß¿{ûã§ýÛ¿ÿn /˜ËÙðª <ãá¾8Þ»SlÙóËј¼uc.à`äPgMþ[¤O?Rf¿e_ºÑöjl1¤tìyf,˘µ˜ƒ@J™z™¹ãñV3&”ß½å á%Càå6^€ŠŸYÈݪaÚoNÒr=vøzðˆ!x å‚GxO·ƒ'&Éø¨öšøúMܺ1Ÿû¢±0Á— ý‘¸|;ú6ŒN|›‹ØÇ®š¤ÁWݘ˔`•ø2?æ÷éÒqo¬Óýµ&&\zöƺϰÊËl`dÞ›¾¢æZhûjš¢ÎÃËÎ,ÿ—ôñóÍ}J­ûÓØÔ§x¸™q¦9›)°òÆ—pßkíăÜÐá©ÓGþ`úÞpŸU—bý^-á<ž='ñeíGZì¦2xìÀÿ¦O0ÃÑ•}^D„ÐhUe—úìÚá_a/ÿà÷d")ŸÓ„÷ÿ`¾a3䛾AÁÊ\Úð‚´°ó ¿È47t ýs qByŸ˜^;^ú¤‡/–ò>é­ýQr¢¡¬|Å¿ÿ‚||Š endstream endobj 2329 0 obj << /Length 1295 /Filter /FlateDecode >> stream xÚÝXYÛ6~÷¯Ð¹ˆ"%¡Ez¤@^‚&~Û Y¦m²äêØÅö×wxéXËëÍnÚ}â¡ápæãÌ|cã`àà÷ÅÏëÅÛw‹ E© "Xï.HY§0Æ$Xoƒ›ð—ê(·jùeý^KÇAÒ‚ié(ŽQÂ((3‚œ/W4N·v ‚èC‹ßÖ‹?„p@† (œäA~\Ü|ÁÁ¾½0ŠÒ$¸7’Ç€Œ(0/‚O‹?ØY§Ö'#{¼rNP9›P„(ŠŒ!þdp³"ã07ŽÝî—° e{»YRv»ÝR/ëÛ¼*[Y¶÷|ŒV”"JR{‹×4(YRîÆJV”ãð3¥±5m-³£*÷v9=åE²¶ëoû ·3‚!ìíŸÊêÔ¨fâ¤á,‰/[þ*ó¢ÛÊåJ"?ZG µA‡Ÿ.ù ožÄö´*['EÆR„!Lˆ‹spvWÐ%$EIœzŸ1ÇNIk¡ùÞ`6v§rùÆnte£ö¥ÜÚ•¶Î"ÙmQÐF~˜CuEe:ÅöWÙäµ:µª*ŸëƒÔ7Æá®+óÑ™É p†"æÐy2´ÑþØKUcÇ®±Ä!`ÆLbŠƒýÒ²ÖÎY3Ž}Ú›9yÌJ§T9¥§ºÚײq§ÚÊÞŽxÍR{ᙾ–œ[ËËî¸1žFaµ³cWBNlí|óÐÊ-WQÄÂwKÂÃÊ gvç,Uyêô½)÷¶BD0ÌÁ ƒŠqckÞ&ç&p{­—3ÈÀ,ÏJg”;©Í|¾mU×jã4x Â`ª‹Ò¶Î l|Qp¶ÃlWWG¿'Ÿ¨ê/÷u¯Ì3kãdóèdsÊr7Í´’;-š©"ÛnÛ¾%¶þÂx_«B=U‹\Eø(Û®.-ÜiíYÑɧ2'±ç>è3”y1õf.q¢aúÍ.­Ñ]Xœ(â6M|À؇(Ì}¬€¨*'géã×á`vªe3+åÆþÔ8›â™l‚=ã…ÝÙIjö:I_ãž®¦euÛ+˜~›/–ðaí%¦^Ü«¢p³:;9ëꪹÖr܃dG9õ +Tû°úíçª eü:œ“¯î5ÒQ¯!ĵ^#I’o_UàÚ¡Û±Cv‡ü5"&a6Š|68Ânæ<˜Ä¬•“ó¹[.aÖ_åsA«- zôd®¶ðK YðÁÞµn&Ià¸ØÌD‘˜43&¤ŸÕÌÌOf›ñ’fFw¼òÝLr­›ñŠ^ÑÎ_ÓÏÄÿY?#^ÝÏ\ž@H0û‡›™¦¹ÿ®"ŠR½ä¯«¿,·± endstream endobj 2336 0 obj << /Length 1334 /Filter /FlateDecode >> stream xÚí˜KÛ6€ïþz±·1CФ(¡E¾ÑmÄ lC¶i[€-¹zìbóë;|I”#Ûo‚½ô° ) ‡3Ùù´ÆÁ&ÀÁf£—¿ J¢0 fë€G(Jh  f«àvüs±—«lòaöJI‹ éˆ*i&ŠiÊ´ &ÓPÄã—f Q›F¿ÎFÿŽá€t„°“ËýèöVðîU€Kâà^KîN0 ió]ðnôf„ûVÇžN)'(aÆ–_dµ,³C¹³Ü÷Ó„Õv%=ÛJ°9aãu“/½=Dø±aˆsáœ]ê¨Ì7²ž/šõZ–óû2«å¼X¯+YID‚hØ*x9†?bÎ*36•\™¡ÇÔ U³XÉIÈÇwÙÒ[oÓZÍøx›V=a{ez†îÓÜ*ͬÒCYlJYÙ]u¡ì…PŠâ˜S±áÜØ N¦”$pœ4“eS–2·Oµ×fz(ªLV±>ª·­ªK™î³|c–‹IˆÇÍZ¹Ñ3Ï”z´{ óºr&8‹‡zBÆÒJ¯ËbÿÉYiY·:úïŽæ|Œ&SN„Éeºïx˜ívÎ×ô #…û!JË¢ÑæXÅRØ ÷[™›YV›‚°Ü*Óµ´N<˜GC=«²©“1˜–Ù~H´Z÷<ß=˜¤ÐºÙ™ùº°ºör_”V`Ÿr5tn…\âúåÞR‚¬¯oeÝ”¹©ð;µ9Ý5ò%öZïÇË%$Þ‹Á ÈPòÔ ‹* .µá•Y˜¸Ã¤Íeµ°¹¬¦] ¨•./p8µëÞ%À:³Ï!/¥=Á$eï,“”¦ÒÂ1žôÓHe깤0™ªÒáµÍ©õi¶kJ9Ц!sñ˜’Á 1ÄXäd\:™hÉ•Nˆ¶÷g˜Ï&?°åG …Hô6·S‚1nït˱ºXã¡ö.jc5_B1ÕÈ(??zòÕhgÞ‡¡°%Õõ SU§6›YÏ“ñî!/ÄÍ÷× XïBŽ\ø&Ë—»úú4‚à|o<Úe ´ýáT"”$6ÐYké](E˜ V‘ ¶ŠÐÚÜÙ`"Ö±]Õ’Ueƒzc†J/lûÉ«l“»þ’¹;èñë¼èMwÆ>UÄß ]Ä”0È6Fýû¸†üâ"ù l8ٗΧ-‰ÔH8Ô•,÷wÜ–û ^s_´Ü‡™á>H¥fÝr_øÜ‡÷™Uêq_0Ã*x»‘m[‚0ÂgY¯-µí(oö W%®W¹Ž§ÛVj/p›ªL»›>vL: våe;䙆ÇðØfʾX5»bènBž ÂÛþõ÷ÍæþøÏÐE^(iïáÛ!m1"8qƒí’£D´„iélí¿S–k öØ\ÕEÙeù`£¦ˆÃ·ï” ÁlfÞX9¨AðÌ.Oê|êqŠDâY;TBL@Kh~)ÆëZ?Íx– Þ! i‹âÓ@ú<Ràlü5 q'Ñãkh¾q.20¼Ä@_ÏçCÐ} =‚‚Îçgàà“1x!Ø„rèÜäèx‚1¢qØ¿Žk0HÅy B-‘èÒçùéh Š€-ŸbŽÕE£Å áIj†c Ráx3ƒA'u„G©ýN‡ÑàRT˜m#$¢èkbPŪv ÷?ãÓ8£ˆÄæ ¹ÄArƒâY1û¼zêA\â` úÄÿüô!˜\Á*ûhÞ<éß@õûÉìë¶¹êî7ߟ¡ß68Ù5?mþ]èŽ0 endstream endobj 2262 0 obj << /Type /ObjStm /N 100 /First 957 /Length 1845 /Filter /FlateDecode >> stream xÚÍY]o[7 }÷¯Ðãö`Y”(Q‚ý@·P¬}ØôÁqnÒ¢©oá8Eûïw(Û“ë râ¢yIhéH¢È#ŠÔõ>‘qÆû GüOl(U!/è ÎJÚ &$m Ã. ¥`ˆ6Ã¥É&²A&fm2âjW1ÑL‘ŒAXÇyÖi$ôû€I‰XAh§¨MÉwå!qÁäPŠ| +†˜ª„¡Q5ö‚²jCY'ñÙï¼W *j¿ &–Õ(üQµé'Ë0äøèù ÷X V“s$Ô…Ò~²j ´úÎ{¬›_}Þäòêä´ûúqÖÕÛmÀŒœö¹Ðò0¡ ’lö­`lYy °O>r·Ó¬ÆÝ ÕMÆÝ ã!Wxȸâ÷c\‘ãŠ[ß1…I="oµ†XŠ·ú€D9„¶ày5?l@G¤´±ÈF#ÄV«Á=4š]ô—ÃPÂ>±q½I¼Àðd˜£Õ¶ ŒüÊêkH˜Q=yÊQ78ÚqʃÎÀ–5ôÅ¥=ˆÝ@on,Ò7¶Sq6µ#ÔaŸÛÀŒSÆŽÛÀ¨ ­ãÆ zvV8ür<˜4¤ƒ>C=2$êY ‰ú>vÈ´——æþgÜb© ŒO(¼BiËq—ýøË‡ï—‡‹ŠÄ·¤××ÐZý”¸¤««’·I©Käçý RȾ_ŒOºÓ¯ûAÈí)o ïË"w‚we‘wµOlÔâΜ]`ïp$‹´ Æ Û‡ý‰…`ÊÃ3GéñgN6g.¯¿NLô™x-ÄÃ>ò Ãå!(9õ³#%GAu 6WO¦‹ÓUà!o®UŒZû¸·Š?°Ì•ú,U¿Û â¨߸)‡§ !ˆd“~Ü‚ªZ%‡œmÁ1N0nþ O ¬±/¡Nljú§à"`ýðd™ÛB.þ}žÎO‡!VöÉd¶Ñ›äÔr»œw‚áuÇÒ¸öD|#ÉIΡÌ¡^¬M`¢b]Lmà¢Éö#?¶Üz~!q}oÖ¹ |gֹ̥Ø(­`‰¸ü¥ ¬i§~k“Èpƒ?½¸ iHáÀ{Q8ðà+²~n¿?RüƒÏZ– endstream endobj 2346 0 obj << /Length 1569 /Filter /FlateDecode >> stream xÚíXKÛ6¾ûWè¡v3|‹B‹úr)Úú–†,Ñ»jeÉ¥Û_ßáC/¯¼q²Í¡@OÉápæãpæqtáèçÕw»ÕËŸ–Q‚Ie´;FB"™°(N I´Ë£×ëïë“΋ÍÛÝ++G ¤%³Ò<Ž‘b”9Ao¶4Vë—¾!’ØE«w«¿V„pDÆ (¬QvZ½~‹£æ^EñDEïä)#Ê$|—Ñï«_WxnµšØÑ+%ÜÛòûCUŸMaœýÒ¾…õ$žx£-%HªàðE••]®7[‰ñú›Ìù_tÿm‚¼X-†1·º¨Ú E¦R„!LH•×¹¿Óíþ°¡xݺٛâo½´CŸ‚÷kß`Ãúxý•oÀb*ÖïŠL¿ð]eŠ»Jç¾g s¦;Œ¢ |Ýo:uK…Žˆ¶Œ ã6ÿA›¬)ÎmQW×°˜ ¹»×vKº>vU6Y3C_0S¹„ÌÓ¨°K@ ÍbÛŠ_©Šºͼ$dZ`Ú×ø˜å¦ ‚=3•0|‚œâ„f5E±Q_vŸV[k8d™'!w…ªX¦Ý—ºú@eÊÒj$ê|_™«¥éâ¨o¬ItR“Kz¿Bg]nÄ^}ÆÃÕ·éÜU^di«ƒHæ®–œÓ&=éV7f)#S`YL wÿ‰ô.êCù=F1äã[ò;ð¤8ëEÓ[ÛÔmÏ™Iºœi´éÊÖøCvYóy:—iæ°Ü%EÛúåð1 ¸í]é+Ìk~e[ûÖ¡9Õ0 ¹¦@þÄä~F æh*`bñXݶêðî9f.VÛ%JÞ`·é™M’»ÃW`†DBæøžê|$Š8ìå;hßO}÷ Ò´,‚Ôà‘kïÓ6 §Õ|ugú,‘š™¾÷~W›S=£oî"ÿñÛã¬Jc°}ÌY}z¡˜­)&ŠÁ}• %¶·½ô¬éÙÖ¥›÷ƒ y^ØÄ–åƒG–A Ø<2Cö µEƒIð}ÈLL8`pDtá¨dæ ³‡Dh“ÝâQ ¸ïr¼wMú`ý²”‹@–a·Ñèœ4°ÔÔ@ ?`s¤é!šÖM°RÖÒÍÀ –\h³ñ’‘R¢‹©t¥Ë°¡‹ãc¾H‚~ÊXH–¶\„pV7àɹ®òžtÕ¾M}ã“ÿ@¾–n0&1ÔÑyÅXòÇþ£â!yViUÙýSÛõÔ.ø`ëQ°-ÍÿèLÛW© KGñp§¦4qÎûq¸lðp楾B©GŒªgRjú©”/i…?©®3Ï⺠C\$7P]ñ‰T—HT"çì P]r3Õ5…9ÛŸRóçÇ“\Ó„•Ÿ‹ßªÿÚGÀ”¨'0UH(úyž8‚èŒÞŽ*C¶}â„Â5IسßAþ真“sRÎü8ï9 Œ•”Ó)™³s™s+j?x…Ì©ø"¶oæ– «Paì.Mqwçˆ leê®É„.õIW­ñ3îÑáV7Ò&è0ºõ#Þ—Àë¸ÄrøQ*¶õeÆ|Šö}aô¶n®¼xÌBðËkÓOœÏu3–ÇÁ9;çœC@Y˜˜x:y97›8gKmÿÑU¹¶Ì÷Q Xz\æ ÿ”·åÁÖ endstream endobj 2351 0 obj << /Length 1257 /Filter /FlateDecode >> stream xÚÝXKÛ6¾ûWèE.b†o‰HÑCÓKÑÄ·Ý`!˲MÀ–=²Ùþú ER–´ò®méI5Î|óÍ|²q° pð×ì·åìõŸË@!%© –›@H$ "׈Ëup¾-ÙZÏ?.ßë(ˆÁZ2cͣŌ‚³ÖPÄóâðµ½I̦ÙËÙ§#ÓvŠ =Ìn>â` ïÞq÷­å!#Ê$ÜfxuÜ‹Ã;)ncyŸÕM™Û@>Ï)“}“ùúã`A œÙ}›=‡U“¦YU½r[HÔÛ”û¬ñ”×q{ ]YŸeS¶Fó#¸;j3‡‡Dï›2›\ ýÜq›´KùÃC^+¯ŸrµAUF)ü¤ót߬!P øüb3ÚëÚýz,r-¦óÚW~PU†0!¾ªÓ(uM±‚2DTäÜb“ÚÂò³½@ØÖgÛ…&¯ôˆcŸLt®)V'SðFÞLaº L" K=hϪ´ÔÇZùS| Öz¹3ç*Ü4yÚÛ3(€`HŠsØ<ƒ‹v“.&{¦mÓA<kɉp°šì÷…á¾íÜÕÞÙ8¢‚ñ¨s»ºz¨³ê侨Œ<÷Ù ëØk`(J“€„Â2ˆaÒ i÷ž„«9 ûr«Ç,Õ·S[N9L`r·Uã-&8B4î0Yg­‡ ðG1é€Oòõ¤7‰í„¡åÍ9f%鯛™”‡owI¾uÍOöÚžOô¹ð%€·i’Û¥•[HR Éq¯«ʧë]ÛëVœÊm`oÞ?îvp€TÄGt«lU¸¤‚tUÖdš‰ƒ!< $À/”œ $ô]á¦Xp{g™e›"-rSþíø’!uæXÛ29¸!`JëdäS£Ë̉Jr³c©“ÚMe¸·Œƒ> "Üfš &^$h,\­ÒôŒJw ÃÎÎ"»zÚÓ¨;Í~‘Ä #CÊùêæE7pû©ŒGꕺE8F‘"ßóg*|µSM¿H¸îK]g/Q®¾ƒë¥«hêkµ«Ä?Žz]21*ö-ÒÕå=õ¿§Haþ-+}=[éì endstream endobj 2360 0 obj << /Length 1804 /Filter /FlateDecode >> stream xÚÍYKÛ6¾ûWè¡r3$ERZôÐ'šKÑÆ·$Xȶ¼bK®»Ýß)K^­³»Ù¦=¤È!gæãpæ“̃뀿Î~XÎ^ÿ"¸ R–i‚å6І™4 âÚXËMð.ü±:ä›bþaù¥ã i¡´Šc–D6³‚:/dœ„¯©Fà¢ÙÏËÙ_3B<'Vê`}˜½ûÀƒ ̽ 8SiÜZÉC g22ÐßogÌøØêd`‡ßT –*²å§¼Y×ű-ªÒ[>ô“ ), éå.›Sn»r=X#â!6Ši­½³k‹ÊÕuÞ^ÝÖE›_5Ýj“ßë|JŸÐš)‘øÅï¹æð¤´ÎÛ®.zh½)E¹ÉçB‡Ócµ=›·úæR‡V§ºÝUŸmë<;åµ[ݵǮ¥þj.yØmqé6¯2§}ÝÕ8»@"ÄQ°,¸nm¯ó²Ý߸æa¶^çMS¬ö9=·»ºê®wþÁÌ$h dìá) ÒŒóׇ1Œ$ƒ°òr¯hïbÛ+«:ë ´U™3¿Ï0ZÂV&àV$˜HSÚïO{¹7ˆA¶ïòG„Îï°&âŽÃbñj2r83 ï3"'>œ>fP·E:âb38Ž13˜—x¼x|$ü^ÊÈåÅ[’vÛ!§†Sˆ„W=å6`ÌxÒŸØBLú§ +¼ h³‘§¹bB¥ãÈ›8ã²¢öÌùÂÐNn ç¶sxÈŠ}Wç“&ŒaZªOZ®”é-wÑÁäz}Òºƒ ‡«åB0qù“)&™Ð£•Á»…àœû¨9dõÇ+wƒ­y}7}s)Rå(î†;¸@;x c‡ß ƒÀ㽬¡Ñ¦²­«ýÔ%ãc×ÞÞ•Õ±Œ†® À¡f÷WE¹Þwp– 8|Gnì‹Û}ÿ׆I? ww£ÃÐâìJŽÀEXæ" WÀñ‹X ï¥Û¥%p¾9O~.cueS\C€¸@.Û‰p½,Zv‡«Õ]›7˜¾Nq2f"‘ãCxNMéåš0šhFáCðE1S‰š(ˆ ÑÞ%h»Æú½ª¤6£æ¼öI,YK“»¬ ;þB;—T¡ ƲrãÇ©=ÖÕu ióÛoN¶ÙUÝ~C©I¤œi»ÔdÈþª¤’˜„«œZg»N]‰J»ª£NV÷2îzÁØd’š Ó—F°÷8…¥ŒX*&„maű×ÑVd¿íI¸ÉÚŒzÛº:Pàúz®uØ8—î]ýα8Ã~ÕñX9o½’$\gû=jžª 1VüÔ[üPˆ\pˆ*#Š‘žQŒ`¡TÌRà‚£úñžs‰L%ŠðZÒ]¨jܢ!ÇÚÍû Áþm±ßcO„Y×V‡¬-й;šüh“p~¤§¶ÎÖIÖ_ÚUhÚ- BÄa}vkí%vR‚|ƒ“9‰®ò¼ì7-@¾FŒqঘ  I)õL\qcô c_Ë¥køu¤ÏÀì³Â¨û¨ç.0km®¶'ˆY{ÆKb,í$74‚)Ýç—>ñM¹$+=•ƒ–,8Ó8UÊ2Ï,<£ØW嵟,ó|ãý¢”CæHðÊÓÜ¢YgõÆ•þ{)Y É"s–’ŸÌ:å‰uJ•^d*eš¿lnVéàeR•àɬ,Z0hßT õGp2sÛÙkƒ#h‡½9Ú küöÙÆ‘5*@½J’»ÁS³ ¹mî\VN K“x£þdö »¿A4LDœ‰˜QâQ§’á+Ý&¼ª ™ü›^rLM2LóT†‰ÔºÍÃ.L¿É¿Â3ÓÏà™â¿æ™àE ¾þ_ifqü,š)‡4S›OÑÌäb*»„àô 4)¥Keúº;ja,y„æœi¯a±cš'ážiB¿ÿâýÕ„E…S0¤š2EªÙs‘rœÇý„xÓžiEÙ FœíгLZbš BUÍÊЃî4ÓÔŠ%©|.Ó„mOLôÚâƒö•œºŽjB&Õ9Ñ„™{wÆz¢ +ND³ßF_$š&f={&[¦œJY’$Ó^Ùh0ÊW àB±HÏ(@¬ÉÄ3¥1÷y¦4©ç™(Û‡ ÈÏ´g4æ™8tâ™(êx¦5ÑzÏ3qþÄ3-®®£Ôˆg¢(ñL‹ègâÀC<¨Vtª|ÏÖ1MÂ4áLÂʨ–~R)ý"L3ÌèøK2MGeŠOË&÷)Ù»:ñiõÒ ¯ÊÇË}êTêò§N€ñôÀ ejTzúà©ÜGpìxÞ‰}û­«:Yêx'Ž y'>gNÒ™…ï>©¤¢)í©§ËÌ1ãçß$‡|têìž@=ìÿ¯<š{¦ŸÃ=ã—ãžSð( wD=çÿ&ñè endstream endobj 2367 0 obj << /Length 1497 /Filter /FlateDecode >> stream xÚÝXÙoÛ6÷_!`/òP³$%R6 èz-†nMž–,16]Õ‘Ìûë÷ñ,Ù²Ó´( 쉇>~÷ñ³±³q°óvñëÕâù‚¹¡ˆSî\Ý9Œ#yNÁç*u®Ý—e.R¹üxõNQNÔÜSÔ~ Ð£ÀLr¼\Ñ tŸ›…p¢-^_->-a‡ìPxÉœ$_\ÄN ßÞ9ùQèò8âá¼'¾Á Û­qÇfÁ!÷2Ϭ/‹Fn ‘š“ÒÄ8³[ïIùi΃+î#¬˜øñ•h’ZV­,‹ÏˆøÕV‚ÔÉèÍÄÛÌC>Óœ¡€ùcO(ýˆ.¬¾Û5Æbæ‚@}›ãÄnó¥ÝÆ­ù¸› ±­Z½¥ò¸HÍwY˜Ëª.7µhšémY§†wi®tFò¬Gö V:+B"Ĩ§6(b̘wåð -WŒ÷ªÂ#TUeÝ*sÕq½3«¢6i-µ¹KÂ\`àcÃóÀFU‚Š"V"îQ,³xÙ‡MœW™h,Mmo“²’½,eÜDÖ¨Bµ.§t‡œhæ¤ä±Õ~m¿V¢HvR§ŽÊ¯±ƒ^ýþb®4¶wÔ‡eaÎo.Þ¼oâ‹Ý÷E¶3·±íDšøÁö9€|Ùô•¤`íVö’+QÇ*ßѹÖdÄÑvuaZþ½²#Î:q®¸Bóî}Ñë$†ÏæjËWYå?¥¶¼¹ÚÂn­•lzC­'‹._‹zÚ©ã4•ÊôØ6ùõ®Mïâƒd‚`}¿„|êj1k Ð ²o+2g®å½²ˆÑ_¤h2ŽZžD(Œè4@v†çF`#Ú[›„Ú Qß6òßåJm?4ޏØTV\Äá´bá0#›]“”ÅJõÛË—·¼xûúöòâ¯×:ïO–߇YÛàaŽ0”5ÌòH_¨jyÔÛW*œ|7-…½/ÊÖljñ©“uÁA§»ò©"®, ‘"P VÑÈý­Ô¸EÌà=ŸºÒ26øn&!R¹4È‘¨ª¾ÇfQÖÇéß]Óª)mJ^‘åñ?2ïrCt˜ÁZWˆù°•ÉÖÜêàè'bÅ™F’öpaÇŽìÂÙOº°¬ ­ý‘\o³ùp<¨ˆÏÑ RL;솘0‰9H@ŽÚâ³)쬻¢fô™ô¯†8Ÿp4Atئ!U¯ÛÌ"6 S“LrïhÄø> stream xÚÕXKoÜ6¾ï¯Ò‹¶ˆ’¢D‹š>€ hÑfìÀÐJ\›ˆVRô°ãþú9Ô®´‘í[íÁ%Ï g¾o^6õ®=êý¼ú~³zõ£±'‰Œyìmv^“X†^"á™0oSxþëz¯ ½~·yc¤/é84Ò"IHr0fc¶x’ú¯ðÁà”V?nVV „¨ÇŽpÐŒ¼|¿ºxG½~÷Æ£DÈÔ»³’{/b”ð0†sé½]ý¾¢s¯Ó‰£Ñˆ)ЗT—·ºéu]žOã¤^À9áÜ…¸¹Që ä¡¿ª|¢Ã’)6aa:›[T®:Õ_í³WÛa·SíU§ÿRK÷1P`Í)_ÒˆÂÃK󛬺V¾ôèŠðÁªÞ{üš•e½æ‘·fÔ϶¥s×^gOÆ¢®Ps{ß«îh¾ÞÍ,ƒVߪl¯«k'¾æÔvÆ<„`¼pü(숤ð´^ïê˜-™C7l eou>~jT®/)åªÀÛ{$Š¥LX@˜$i€ÊZX@.r”˪bÑ$= k½zÈžHˆ‹  Ìm°€ÌÂ;P`ã˜Ã„ÁZü9ç~«> º5$Î, Ý(Ú×ø¼ÉŒÛ5‹|'“5M[7­Îz5‚/I˜Ê9ø €@÷  ùBÆð¦¥‰2’޵û‡ê‡¶Âz¼5gå Î(ˆßŒNDÊÉØSõ#Å3öBB[ÈâvÍRÿ,„Ái³Ä$³³ã0úGœ^⇡êôue¥u RSß,á°Ðôh9‡·Ïú¡;# þ\§Ô¯Û÷.[±µÃá] ñøBWЮ^à«[\uUc²¼7%¤ ÓK|ÇÎÖvfˆÚ!vötbH)47Ê…þ”ڪ薦d‹ØYS6N½3ëÐ0öºDúùжʦCjË14ÃS8& ²f¾ƒBïN¬œ–¶ÕlšºE÷Ñ” dÌÍÃ¥îaãà1Œ@ÞË0Dµ_kÊÔuÙÕ¨lHôÝâ §!`ÂσIåiËÍJÓýÉÜ8b}‚åi±adƒÌaÐf¾·4΄Ÿµ eg%í„7Ï›ÑgN'>ÃJ-À–ó¹nT…âfW*µâñ"º’ä€Ö¬½P/æ#ô˜ûç­XŒOW,ködS/•‹P¹Y›÷ønù±Bw>=Ÿr„“ªBµå½I@LRB?YEOGVUêŒ&óåÖ!ºÈqúð¢ðY«‰ ‰ˆä›IôÌ̈́őž³}Ò­&ì©Õä®Õ½ú'»ÉÔÀg.'õÐÿ¶“èyÛÉ™C ""M¾üjÚ¿åg¹ó_ÞM$/ý³þ0¬Ÿñ¿Š¿€ë€¦ endstream endobj 2382 0 obj << /Length 2682 /Filter /FlateDecode >> stream xÚ­kã¶ñûþ ýP9¸å‘¢žhQ ½öŠA‚æ¶Š»`![´-@–=nëßÎP¯Õîù`hD‡óž!eé<éýëîïwoß+{™Èâ öŽ^‹8Ó^’Á3QÞCá}ôß5S”»ß~DìÄK;Öˆ&‰HuÄ,bìîƒ$õßÒCÅ Ýýóáî÷;HÒSÓ¬Œ¼ÃåîãoÒ+`îGOŠ0K½'‹yñ"%E c€+ïÃÝ¿ïä’ëtƇ#)‘…ÄË?LwhËk_6µã|.§ôî)RöÃÙÏ2õC}˜­QÉ\7Èrâ„=X­T8÷} úø+I,‰óß^R¨6á UBšcGY8‘NWuð¹–¶ÜJz"Ãyäå A-µÿ=¦h|ƒ>C w婯„ÓÈ—¹ö5ÔÀ?@¶­Mõ:½3ò…2xŠ \Õ¶Ò•°÷ñ+juçêøAßÍMþxÍû3ÿ¿¼b|¶ß‡>ï‡î5_eVòê éõ‹ô¾¡+Ò©z½+ŠEÆßä ˆ±_xÖá–¶'²Pï¸X†—NWáeÅì¿X´êZìÐÕJ´…µ? ìo›ÝW,… ²¯(w±‰ž—» j÷aÙ/Z5G¯6%JÄZý ”J XŽÎ€×ö4‚Yؾ×ô~m¡V¶4¶TL>MMSCg›2¢i‚„F—j‚ÙÔ”‚\jJLbKO‰ˆ§ƒa* 9 5æéÿÑv«ýƒöwÁd&¢·±û}˜j¡¡_X€š“, ¯lR³êÙÑ@g{˜Z0‚/0¢S!Ó1¹aNØâ¬LÆx†±ÿCO”‹Æ6„¸iC¼ìoôÎ=/5Òðn»NÆí—ZæŠNЖyÏlÆoŽ+ü}¡õç]Û2þ2r±vKiá¹÷ºÐÂèí0|±ëÐ!dhØ îûSêè"wš`̘:c9Í­ª¦= õ@ª£·¡£Î?õ/¹íÎß6}Ó@ ý[O@aùx‰©(àþ.û#ì²[¸ʬcD Ê´ÿ~h±[½4$byT–Íåéhdi (Í6qáLQr/L‡ »|âR͸”{/,wÞ‹èsï…©kÞæÓ›–·¶*B€T{f3ßS?2JÊv¶î¥•ÅÃ'&÷Òš^ºò2T}^›fèªÛ.ŽÐ¥±–¾ÇP¶j,Šëür­,ëýûÂä¬óu@RË–Vëã‚¶I½d‚c¸\Öp¤ ª{tÐÒG»8*yMPS›Çü±Ö¦ tßc­£\Š9z,¯Ò\™`Æ%<=¬EØW ÚþÉQRcˆÜ´¯-GqBSÎ&›‡›k_2û¿´»PÚl ZÊ, ÀÝe¼".#&3Î&³Fq~**0.éA"ãdÑLcT…`¬Ë/fs¯Øº"¢ìa{6™WÕ‚bìΑvr‹Éx– -R·¥€'SU¨4(EÿÝA+ë7ƒ-³ÔÖòO„[ÝCT›ÕXµmËR¹Áf«ŸR‰±ÒlC(Ÿ:¹N08µHä¡=•V‹0kÒ rµ¸ŽÆŸÊþLÅ< jÚª·1ùáÌw>VûÌü¢'%¼¯Û¼ê±m|(ë8Cí”3j‡Ê2 3|öçá²ç!&yÃ)Q«$ŒÓ{3O1`Ù8‰í½N>Gw•d¾yòèÜ všW$ùý–3a2)!Rà `Æ ³)³ìò€d„Vy1ÌVõfõÞÈù*zRŽÅWv‹©:†‹ººZfSŽ ·ÅŽôBI×’\’ÚŒ*,Iü|~ „ï4‘λ6¿03–š 2°SÌÒc‡L§!3´f(c½ÒÖ‰y””Aw{¸ä-¯…#¦HÒxK•ÇIL ®îHóªI{Àˆ•rCú¥1µ^5?80Skðƒs‰›áZÓ>cj2"Ž‘cêy‹£cIú@¼q~N=å\®Hˆ9¥oº¬Ðž×/Ôf98®8 ðßÝ™u;-©bÝšêÕSÙiÈæyx–3³t}yÚAâqÃqè]| ØJ·ÐØFôù™ëˆ‘¢írueY°@sWÀ]=g“®pߍĿ¼E§¤+!é†éJ¥‹L-þúÒ>‹ÇÓBgx€] Ágëç‡Ø9í³›fO Ÿ=ŤcUt´˜F^íÔxžéÛÛ’WWºæŽ$œŒ×¾¸¦l5í†W¡Ê~<Ìàí ßà“Oôó»:°l|~xïÜ—g¼Tèl<“K¾Íyáø®§cñØ…£Êé†{jxò™&S¬¾¥8ÞxðÌx“Ôd7…)ªÏK{>Ç^)]t7;€6Óãlë¦?Ò"ˆÃotür°¼[Q8Rûù??ý´y2Ö"Sjº°nÉD$a¼<{õöCe’¿M‚”ôJù !ÛV"Ó£0tÿ e—œ&Æ.¬“^Î<¾ÐÌô7nS´¿ÑÓ~<±ÐxkFKyôdjÔå2³u×FH¢õGÇñ”³}ÑÁkaç͸ s~8¬¾£.{Ž“KΗÔ×üôzdV0ŠGÓô}·=yüúüj:JD”­%¸èÌ<Ñ>¢¯=ûްH»‰:ZgÝ7_Éè$ž\q‘î-/Å:ë¿ÌG 8,> stream xÚíXKã6 ¾çWèÅYŒµzY¶ÑbÛ°·îä6³GN 8vêÇlçß—z8±O’ižz’<¢(ò#ù‘ìí<ìý¾ø¼Z|ü`á%(Tx«Ì  ó¢Öˆx«­÷äÿ\Ô6_~[}ÑÒ‘ƒ´`ZšGŠeFP°e@£Øÿh"ˆ¾´øuµøsA@{äü…›¡—Oß°·…³/F<‰½ïFòà…#Êì ïqñÇ­ŽvôJC‚nmùªÚ®.­!/KŠ}Ytª÷aè1ö ×´¢ó½ÆI’h Éâ1ïÅsÊbÄEÜKTúùûM—¦ªiætò1r0 sJ Gœ‹©ÖlIÀ©¼èj… Ì=>Sp‚‚XŒ ÐêG ÑÑ5ï 1öSíµ<‹% ý×õQÖzÓ¨í:•E¾©e›ƒ·¡h2Z¦ŒÏ”F&ÕÚÍ…LVW»;¨CU¿öo½ÄCÿ_ËêØäÍÈÁ>£L¬þ!/Ó¢Ûªe Ÿ¬`ÚzËg’ÄÕJ^¶}˜G!d( O‰q ˜Ù€$Q¯á‡ØiÐýv»iè¿ä©z€?ˆÄïÊ&ß•jkµyfÓt›{EÓ½,KU\ªe¹S&Ã!ßB(Â` ]HÎ÷tÍ=½‘µÊ\Ø«²é3Àº6ÀdíN>\¤@A~¼’ØE汕m×\K[jeqÜË;þ¢š´Î·ŠÁi]í!ʨŸueêr¾ú¿6ù!/ ÒÌG[™ÌµœYï<»ùz™»sž¹a”X“ŒñÃ8µ€×¦–ÆTG… _éÚÿ+UÇÖ™¶Wvê—Īv¦Ìªú /½«•Ü:ïm-ÃÎÕ²»Ø´ZÄäå1€¼Íáh/Ó’Ì—vyƘ@|Ãü„-aËÀD·Ù(»ÂƒÎz•éä×ZÒ\™d„ã2}ޤ tCÌîBùNpí{ PêŸV½ÍÅSë©=ÜVÊ9ZVÎæR™šÒ** c‰é££ò3è:U–oì×÷¼Ýë³ækeb¢ë^…8€•{Ñb¦“XA§<¨VÕ LÙp ÅÑ½ë€ ‚=áeâªÚ´2/{³7¯Öy6Ôî>K&5ÈŒHÇ*0Š’h h–êjYQ |2;šã•ÀŠú×ÿÃËìðÒ3¯_صñ%Õ¨ êêŽ÷N.t”©V0¹<Z²Z©7¦–Z5UWx÷4§ÿ~`±—MvUùvnh¡h8œÉ&sa‡ËÚãËyåß5õ€pPLØ{{;»¯·¿«³³ag×}èÜ}̤†;0ì®7çœ0Ÿ²iª4—­§àÛò±9±Ë¡„±KòŒ±k&W§¼cb?+©›uó:×]HDgäÝEœ}—®Tm7Õo8Óº¦]î–Ðñr'(3Ýäúl-òrçl´ˆ&—7h†š"»üQƯ±¼ªv½U™ìŠv„ÝQBòÜý«lgµžÕ4!º]ÿëlpé â;M,:’Ψ“Gsÿ à%˜ÿ“ÿü ¾ŽcP endstream endobj 2407 0 obj << /Length 1935 /Filter /FlateDecode >> stream xÚÅYKÛ6¾ï¯Ћ]Ä ß’Ð¢@žEƒ´A³ÛSZ™^%W’³u}‡/Y²¹Y'=äDšކßÌ|3”qr—àä׫ç7WO_,“å’Êäf‰dÎ’4‡1%ÉÍ*ù0{ÑlÕJÏ?ݼ1Òi’´dFš§)ÊeVPòù‚¦Ù쩈$fÓÕ«›«¿¯á„_@a§HÊíÕ‡O8YÁ³7 F<Ï’{+¹MÁˆ2 ó*¹¾úó O­ÎFv¥‚ œ;[®u³ëtg-[ÃûI::5N”"JýÐuYíWj¾Ï~.íù+}‹6¿äÉnÀ!nw¹)Z@àÙ^šŒ¥AÔï!sº—wª_®ÔºØWý²,àUmÑë¦^îŠ~{%Ê8 Z>b½¦>¼Úp*fŸu©@„üT±[L \dÁʂϯû¢ßwv„UQí6EL/ö ØKÕ•­Þ™C] ôfŽ[МÏÖûº´›à—˜µªß·µT¸a×èºW­ûÑ7NÐ?ëúV×wn^6u_èzø]8I@}NðÌ ïåŽð»…ÓJ9ië·}·k›]«‹^yK›`ÃÆ û¼±‹GGxËvªÔF³Z< ‚Wøº=x” ¹,¤Üz"Ƨ¯”UA“”iäÐ|Á°œý®¶M{€·³ÌÛ g+L¤X:³ØÃZQUM ç[¹Ÿ·‡“=Á7Oà'k/Ømš}6ÙV=÷Úb8Öô øÁF«}NfCÄLR–C‰L„Cý1((C9!ã<1‰à Ù¨úhˆñ‚Ka³sâŒH(‹ ŒuãÆª©ï”O÷ލVèKÉàãû½cÇ’Ÿç°«öꂼxæ^46è~£Ë›ú÷n¢æ>za¶ïTq–]°y†nï7yN“$ãŸq×®h;5a­µ®Ô„wÏè+eˆ‰S¯˜@…T|W;³TÛB˜B`=‰ù_`”‘!ÆÿøëíÛ¨û%âxppž£憎‘bäŒ#‘fˆ#†ÄdcòaA0Æ—Ïáç ÝÔðí  Y‚oÌQ>ÛXÁ3CX»{T@×DÏœ¨¡÷‘ÒÔÍ@xˆ†˜¤K}˜÷–úZµÞ³9j"l;b¬GÙý;[é]Z÷±" LÉ ‹Ùs±G'Veáˆ$OãU–ä¶Êšá•¡BLgûºÓwµÓ<ž€•€–¡®U}ÖÀ0þ‰ª÷[¿ÃÙ1urg’o¥[U†: DÆ’dJhƒÈ“*.‘› ü¸ÕÏ´‹8 ¥›‰“°øÎMÄäØCÄhD ™=(Ÿ™"–²óòb^ ½FXêUg°+wæIo#áz™•“2½Œã½%)Â"=Zþ3 Âxí¼^Ýûš­8㩟WeaX8£®€g jG×Yv€5ÛeÁ¨ ’»7^P§¸[.+î<°ŒÚuB#VTë³à³fíÖzÇ1b’—B ¤ ’uupk¢°öÇ fzA¥ä."Z€é¼•_Õn¥Q|ÚoÙ²ºÔÝÒ˜²´um­Ëo¸ª;ƒ.n¼l™J9 ToÔ¶øÇô;_iV&l©ˆV¬ãgB‰í^\}‡tx¤k"æëÿ–¶)úºnhˆd:¹Ó|ë§ ÷þŒ±Oc ñl°Ç”±r06do·/KÕuÑÏ-hëÉ MSh2¹<Õê(GW{SÆ.ý-À!s1ÿ–þl{X endstream endobj 2417 0 obj << /Length 2061 /Filter /FlateDecode >> stream xÚµYmÛ¸þ¾¿B@?T[¬yß$¡E\’msè!mÖ@Q$C¶i[€,¹’¼Ûí¯ïCÊ’ÍuŒ;ô“hr8>óÌpHÓhÑè/w?Îï~xL¨Šr’+¦¢ù&’ЍœGiß4‰æëèkü¾ÙëuyÿËü'#FH+n¤Eš’Œ3Pf•¼Ÿ±4‹ÀO¢3éîãüîßw Ñ(9-À`¦ŒVû»¯¿Ðh c?E”ˆ<‹^¬ä>’ %Œ+hWÑÓÝ?šN­ÏFöxå2!¹@›$„e ñ3£¯³„R¯ìÆÛ{øë~Ñ5›~UT‹USß ?ë6Bã¾nóc¨h4cŒ0æPòÊzîë¶·ê$¿1–b „±ñ†ä¦q £ñå¬,Z=Õå²-z½vƒÇåZß3?—+í-Öò„d)úôZ7‡®ì&ø/LMÒ·7ù»²^UGXm¦¿?ážÁ²ûó[Cr…³ËºwRÉX*á„ÉÔ“è*ŽÔ¡X+aŠ0ª¼šoTÒcÝ•ÛÚ”Ê)LЗ%ñXBÄ«]Q׺ ŒÉ¸-ê­Ÿ¥ëã{±S÷ueS/Öe«W=´Œ­Ñ,á9àYÔ”mdt!P±sµÑèFþ€ŸCÑvz=x˜Ì<4øy_|Ó‰T¤’?Þ@›¾èÝ PT‡]ñ}}t·j˃‡è-¥ ¥ç;à—I¼9Ö«Ñœ Y¥$*ã׉ôü6TJxÊÇ2Ðà²e]ö€eù_Ý™H Þ  ÞFâÐß }ŒTßàwùê–†¬i‘fi–¤„ŽCàŠ™Pá‹vNoÙ#ÏäU.Ò)ÏVE ¾ç4^jüŠ®³Äæh™éÓ%lÉ®èru»°ñå2-ä $Úì é¾Yv¯] HOrËÐ4%2W—@3š[MHr";3aÓ6û0ó%;7‚œ”#Ý :áhâ#ïšðwgœg„«ìÌ)W ø*9lÎú/ç†t¶%ГÐsD?BµzÎâ×E_à0)F~çTt½*¿QÊ@Sˆ›”’ô6‹Žš±Ù"#"ɽèCHœx nHO‰’#UàuØDSK ÚLR D–*ÁÓp2ž©”@ò²“dðÖ /{íÜ ñ˜BQâןïÌ1’Æ/;íƒïÜæ1q[fHˆ¤ /eU¡vËøQµ°%@ÁX¦Äõ°¾=šaɦ -Ù}/tÛ„"6goù8±GÎ1‡¦w #2½H•Ãy²AÄ*¿ôõŒ —:lÛhî˜0q‡=ã¥ldz)NŠê¨ Uh¼6Gך0‚Ùˆ°#ûâK§¾YöE‰å‹°™É/Z•õöÆËsA²Ó~}2,€Pn ~–ÖàIÕ²)+ýk1+ø®v™@fJi¢JûbºÖ£ªØîØÔ¡¢S¦$ç[3^Ì&¸Qzb@ÛláÀ(¸4Íà4Ï!¹Â¥4î¤Ù©r±¿°"¤®^±RùæX9Yëzh,›¢];ý®èqÒA· ±÷ݺtÒ#|ÜœÒ-wF?»ð0»ÆŸFM³? ­¥4i’å*~çÔL®VË30X¬ý¡Sv;SĹK™{µdÕ{®UºïZtm·}ɳ„Xñ¥Ì…ó' ˆeD ”{úð¸xúü8_¼÷·O?~y7ÿø!œÀõ§Cù d#/¶ž B@5*§lø§Kô3¦òØúXeqÝôØø@£Õݱêq´ÙøAKhˆ¿ ŒpY¸~ÅŽxfú¤:tÌ)Nòü–óXP¹ e>ÐŽ–…€¬#ß Æèº7iZ©øÑ0¤qÓ´ùñŸb¨l:K¹732§=áìJrÀ62Ejdñ@+A™Uk©¸vãuQ5[*kà6v;êBgÿz0ÇŽ…Pz€šï«±Ï±8_eîYf'[‰˜s¿™Ð{°¡ÃÞˆtdD v ;¸Ø(7†uݪÐ=èbåBuÐr2,4¢èÓ$¾¸àgê×§¡Òøn¯Ý=: 'q*˜;°÷ñ¶íeH˜´lݼ¦]ãMà’9ŸÊz¥½”_lrÉv†Ö$üyZw:lõc׮ܺZë2?a¡ÍÀ™®8†Òû÷÷ øû±ìf ˆQ·oÓᨼê- r À%Œxøq²îïp²ãß0©7ZªXVάð™{5‚ÆÅUÞ­éj|îk|fžœx‹ÙÊÃ]‡ê–„@9E,ÓˆåôÝR¿å OÕ3<õ†+¯ð ½zØÆ¯†Þ…/ôùð…n{¶õá$oRˆRCí÷þóÏ?|ZÌ?/þþ×=}‚\Nò”ÈSY0~¡1»]Þ3Ý.œ«¾kÈL$p›H¬jbÎã—Ï?_7.7ôt½˜úêü…eæ¥Ç-_tlk,ûŸý¦Ä¼áçuAh9ÙpO !epTC‰ïæî¸Zé®{é)áɰÏYC!Ô¹V¬&ÊêØjrQjNá¡Üh#tð}8½ö> ‡aèYaëJÏ›†íÝ#¤áìM¸jŠõðR×k¼Q˜ü½¹^ÿÞ}Ùoz÷•‚™Ò.Š‹‹KG{³³ø)ˆÍÑ3~Z…*eò"ŠŠ`…~÷æ[( Á€óü7>‰x‡þŒäTüš¿Dþ]rÓ; endstream endobj 2423 0 obj << /Length 1960 /Filter /FlateDecode >> stream xÚµX[ë¶~ß_! /Ú`Í%)Q´(pÚ4A‚ E“-úpN°-Úf+KŽ(íþû9¤Lùp/éåI9Î|sM M¾½ùÃÃÍý7ŒIMê‚ÉÃ>)ê,)kx–,yh“釓lÕíÏßê2©€ºÈ u^–¤Ê80³„Eq»áe•ÞãƒÌºùÓÃÍ/7 ˆhÂ.p8)’ÝéæãÏ4iaïû„’¼®’'KyJ£„g¼wÉO7½¡k©«@ÏT0Rç(Ë×RïFužÔÐ{ÉC=i²áœpîT|8*}»É²<ÝÏý΂¯,=7£–n§Á¥]Ó©íØxš<ýD)ï$n~¢‚žÇ¡w²ÅÝí3îLGéä`¡œW„²Ì#¸³P?ú;dLô² YQûÃcË)8¿âª‡ýô:k°z•3 9ŒÍIƒRÌAз¨Í(§yì`€U²É˜4É.¯…p<ÕOr‡(h: ølðq¥,ú8áÎÓQ펎¨éñe+ñyn´6à† ¸ÎÉÆC‚/?~k<…•!Þ¹ 4¿¦9Ÿ»çGkë6Çòônw«ɨð¬Œå(#Zå=òP˜¸’ç '©€(ÖˆZ3‚»¡ÿ,Gî«bÒ’ˆºˆˆ)Jtö[–‚®šcÒôïGiEú<ÌHÕŒWŒ§÷J-ü°1kÕpËXÀ®ÅŒzg¶*ϰHõq˜;Ç»wb•eàžUy+ô˜ç$¯2WTý|~·I«šEƒÊ¹<÷£”nåè^F©‡yÜ™Á?‡‚kñûIMÇ«1*ádذ’ÔY]vz¯{›SÿÒ[¹oænZ]yn@°×ðà´&œq@.‰Ò|šg|Ù:g-÷s‡ïª÷j÷ÿX ¡QzÍ—ø&zHÚ%aP$6#à V®m2šóù–ƒºY¾–ô¬ðÂKŠ ÌŒÉÀ‰f|Ôg?Œ§`Á?õ¼7ÐwnuIÍ«ˆ7’•õÏûᇘ¬¼ 9]R±¿`Ë@=ÕÍ£$_˜n ”¨‡2%ÈêXòqÃ(¥é×ê ¦¦C ¿»ÿËšÈà–CÑ¢ŒœËµjxܪÉ$ Ùµüø…ƒVëO`ujM{ÿ4ªÉyÙ |Z;÷Õ.Z«›¾—޹]ÁòÓs?œµÒ+…`Wæ»ò¡ß¨~×Í-P€ö¿C-À]Èñ÷/) -SíÇ‹VïŒÐú*ˆßhUQ”a´º³æß¯ðÂr‘~V;y‡Åjîµ:ôèíUª ô·oQ{Rk”ÇS£ÿù:TÁ0©#„62 =Œ(×ÅoÛhùè,kRÑoß¶î¯m/eAz‹„°È/yÜ@{õ’y«‰,’M3“²ºÁýd² ¯CÇÎ_¶{6Ge.Õf¸3Œ¸bŒ1Ù:nÉ¡¥ÛÜjƒŸ—ÉL^;϶XC‡7Ì“ÿÈ]&3E Z<~Ua!«¯<Ìc³µ"` &ŸàêâK¦Ù¡ ;n›“t½ •ÏÚ3ÇN«‚Ær)CO‹¡ £@™-5Ü6¬æ‚ÉßôÙˆ` ^l“¿'ð ={L P:ãKâ6MÜŽØ;O[cÎÐ7ûËí.S¾¸Ð¶aQTX-êYÅ-®"ÁõY í¶±•§ÚÄ.4dÀæÍ0„öÙmâ=Âôî †–ýäš·Ì»WTi;á]”â/¦|‘ƒ‹/ÔÆÊPŽ¿¹e]î’íìáÍ ”›ö rs! •aï6zÁ–k§cãTÅž"KµtWayÏRvç¾=Š»aPÎCß:T0Ä´ªë«ÁFE3Œ¬ÔÆ)ó ¿Š)º•UP½èMQÙkfõáUßêdžVx¹|`ã»3œ1 ÍÒ{ìz?Ô>LC¾fxáQ_RK]¦p½ðÇ/«ÉNŽ£1ä ˜C¢Ã÷sט©!¯Aíì Ä×]4Œmãp¶³,¶žCßpFŒSCëÈ'Ã8eP½hFš³‡`*@ÕL'¸¿´/ο@|ß> stream xÚÍZMo7½ëWðØDqÈ~F$EÚ-P$9´5rPäu"Ô– I.’þú¾¡´ŠÉéªZºÈ³³oÉ!gæqHÚK4Îø²a1^’)õ± úœ eU0~¼è6>Õˆ ¹ Áé+N&Fx)&‘3äÄ™$€¹`²ƒBÐBæ e“kG¢8ª= +ª/…ѹ«’7ÄQ[€JˆPH0Z)J%VU„Pª R Q›ÅHR®:H¥~ñãœ~  ¨ðãJ—'®ª)'ý:ª.®­‚„yà”UÂOÄ„‡ÙˆYíÖ JÁ™ #KIU RönçXG‡¶K»>©0¯VU‰ñyÖ6 ò^;†>øDPUFQÇTÏ.bŠ0ZÌ¡¶›’-A¥ oIý¢v^¿€©Lujr0¬>Ä p(sÐ62T\-‚1,‚º7A‚.WK0ï\*®$DÐÐ(Þˆ/UÊFXg4”h$zíB…T»ÇË„Ç@ø2Eu3"K²ºˆð.‹¢ŠªJí Wt€¯‰.VÉ™è½W‰LÔ1@ò& "R@hêD0" >JHÙ$‡/!^zÑ«DTaIýΰ+ùTÁ[¤: ì¬8x3¥TÂÛ^˜S„;!xg2©ƒ}•40ñˆ‚:¯ ’Æ;c®³×l`X“µqè I®­!ykš=eý–‘¦É..£ïÍ%²RůÌè·ßÿÀ¤Z*æØªcg÷77oß}÷u°#‹ˆíFZAXts¶œ:‚‰ŠMp]'pþ°/糕¹¸0£—„ÐHëo c®·2xƵ8 ÛW‘¥}@¾'^¿Bã£_óÉëfe.Íè×ï_šÑ›æãÊlû}óé®Á‹ñûf0zšÙj©ä£äúj0zÕ,ç÷‹I³\S_ÕýÒ\MÇÏçÍ¥Z#Çhà~›Ë[ô7^ ÅÓÿl6›£ÑË5ãªY_ô^ƒÑëûw«úüótöç`ô|¾¸jµ÷vôãè§Ñ‹KªjÖ¥`"ᩬò"Î*Ç,( ¸guJ_›Ñó7s‡|s}?› Íõp2¿Å8ôÏíxvõ­NÕ®ÛxÇmCŠV7§lèaßɼïdIÎ⃎`N6ÅÔ ì1¼Xº‚fÄ|ÖÁ&t ØÊéÁ¶6«.Ë=FP¶–“à-R+- 8as§ [6«áíøãðÝýõu³.§7»x¢}R£ë嬦,Ãe,—Ò‡}5ÖÄí&H‘ðx‚ì¢7‘‰UÊj‰Ð ŒâÈFºS Km7°º‹['0•h‹ë8@ÔqVæsN½èöSOòJ½³QŽaÏ]tëï€$î&ð½Än`,ȇŽ-ŸmørY?Í…;^{àÐÿî´ïÂ('³gì•4=Ê´¢ÕfÌV´¸—buÛåS±R¨7VŠñVÚE·¬a¨ ÁÌÖEéùbè]ÁI°ª¤n`\ß L)íðÌX)…ýNt2+a‹z+í¢·¬$¬B‡À¿’|70öiX+:¶ì%ØÌü°°Œr¢C³ßwhvÇ94Ç=ŽJiS᥶ÔKe#d链°µ¶¾èÞe:³!êª;±×Ýx±l†“ñÍôÝb¼šÎgÃëéMeŸ/ˆ œZQúa«+G™8¾»»ù´6ôj×ÒkSòVç6F¶µó1FNnšñìþî‰ì[×ÎHF†•¤‹’&ãO(}XW3:Ó1kÔ.z{æ‘m:X9K6:éŽÞ¦\žŽYvȤŸê§È>³”p2³·á‘B­ÐrMñ­{¥˜è¬g•5…ž2ºu,rfäH9"Ÿ$3ë%×½•ÃîW¶©Ë¨—•³ ÀMö2öØdl sA‰vÍä¬ æ e#§ø™þ„m’tNsHA“$›¤Þex›ïÉÂÊ>…)ÆvÑÛó~„€#Vœè:‚?&>~ô˜øX‰]ÌÝÀçLÌnï©'²¯^‰TŠÕ‘à[!´B¿ûÓPl‚åZ 0,bëXOÑ‚ çÁn&+z«öÐ[./ºŸŒø+zÌÔÉÆÕ|x÷áÓr +{¬<3ª9â­ap–Õû×c »^ÌoŸÀ´þÒk1B’F$©`õb½b­s—;™¶ÏÞ7Ãér8ù0ž —wÍdz=<ãFÌbÑÛ2[ÀÄI÷šL¼¼¯Æ_5RYFo»—žл‡,Á˜ý\ø¬Œ0õÀ`›}(SKeÔR•^ËF„‰Á-qyÌ}ÁÚuq= ) Œ [»B‰ÖÉQ„úDœÐîAQ!Áès%›“/gUÉF¶1Æzf‡À© Sé± Óè^†=@ÿÛéAðc¦‡ÀeX>t3s¬e˜œõ±&ûýcM½y:•k¨­¨­¼´n5±\¯7ðKHµ`8Î9b’d¿œË©“‹–䳕mÆcåûf5\ίW0ªÙ_ÍbÕ,ú?xBéµ>Ù\Ú& V¤œ……p5¥²5q;‰G˜ø•Ó±Cɵó endstream endobj 2433 0 obj << /Length 1803 /Filter /FlateDecode >> stream xÚíYKoÜ6¾ï¯Ћ6ðÒ¤$’R[ôÐ$- u›lzIC^qw‰j¥qýï;|ée­q9†AŠg†3ß ¹ØÛyØûuñózqþ ÁÌKPÂæ­·eˆ%¡Çh9ñÖ™÷ÁYD&—ŸÖo5÷b f¡¢Ž8Gq3MÈørðØ?7 aD-Z¼^/>/aô°’z›ÃâÃ'ìe0÷ÆÃ(JbïFSÔ{« @˜[êõ^,W! üm[lkÚ&B ¨o•Ýh«\e²¼Ú”ÅVîæ¶!˜ F·æ#¦þ‰Ù –}Ä8ص•¨Õñev¨ÿEfmš[ª}Z"ï(ÌhjšLîdc(‰q~iFëö:†ÏÆêÕ”†æÚ~ ÙìEeú²8¶™.íPÙ60v¦TòVÌKAŸóRjTÉÄQ€´ÅΚb,¦ÛFRu¾¨ýÓ¼µŸåÖš¼EŸ[dÌCBgžLVbsêÄ¢E$v¤Hɉý¿–¤Ns™™m:µùN+1w’1E4ìx½¼üíõ«‹«‹ßÿx¿žÛ™G(:'Íp_åq2áxù~}Š%G'½2ÚÎP˜$`g˜™óãÞÎQhì ­±3tÀ=ªtÓˆJÖÜÔ–j;¡¢ìfIŒAôHï gj€ú‡6oä1ïÙZ¯S_¹Û7¦{m vUÙEf÷)wÂø“ú’Å©MoöÂÎ9ß_iÕñØ·ÚÊè˸Õ:ÚIÏ_š‘/0pÿÂ-‘µémÒZkÇu¼¨‘çÂÍæ¹]QÎiˆ3ößÄ»Úf«¢KuÒbI¨kÅ0–vZNÔÖf6ÝéäM·êì¶ ½qœ0ŠPÓ±»HE#+Û×ì“|¡p!Èn½î­hÚª00‘ŒM$?Œ£[³OÝn6¢®·m~6‹¤aÚ…=žc Ñκ•6œ+-–ÈÎ,¨(Ÿ»‘õ|ŒÇãZ¯Èìq{ ðK3S­‹&¡±MÌŠ"ø G+½+‚1z x3Äh®œß?–ÃåÕZõAÀMïs+ª[ÓÄŒ«ò(ªFŠºƒaÝ:§{ÐÞÝå±û˜hdò‰ßÉb“·4+ÖøÑè“Ëk´ÿé”úüØV²hÜ±ŽŽ,„C 3A¹{ÀºPÑÄ” #Ó.¶¦za3Èa -j¹+DæLÜ8¿~,©5öýD/& LÁÆs玔 ˜ñ±~M¹²û˪A夥OA`É5˜+y`?å¬ÚÄR£c¿U#}i”jñ4½r^5™nÙ¤ZšM ]`æúb ÆT±dª›£„DcðœTPcZ‘Zh¨±ÅlµóLçíÝP`À´7Âlî!ÍÝ$O-¨þUª£±Y™,ÌÎb,£(ŽÁKâ‘=ös5E çÞ€êÞ* DÀ¬CU—’˜) ”D¢1UpªÖš3òÜ—>¡ë+¶“5Xñ»5˜­®(\/\kÑíÄ^P%a8J w£ÐÐŒ‚ðÿ¬ù@Ödä=”4+‘fOË“zÅ$?öc]ñýkiqw[•½¾õùuù±Z’Ø?aQ—qþÍçF8³ÓY1¶p78šgåÄ%ñïI‹ÁœO7œ¨Í‡jÍ4Ž]o„Õq„Hܱšøèè² 0;/¸yYìôJm ß†;޳ÝÜ=ÀU¨‡M? fκ­]ξŸ·çÝOóðéµ™b¸.G“牵»ýdi“ξH4ûÔºW“)ÜHÝ”Uïý Ç\òaxlòmø@¾½•‚¢9”eˆ„Éä½c½w¢u•ÛH`ñ¹5%‘ÑU¸jÊï @…6©æ×ÉÃ\ˆ8Ž<€Ðn 5NAŒª£%qâUÂÛ^âÆÜæGïnF¦©ÛÀ0V©›>—¿yœðw¯ˆÙaÈ‹éúíùºJ»JÑ<_>t 'y ¢c`÷íe,5ŽØ±é£®9;¹@' QX?a݇ƫô,îÛ{¹Ø0˜èhÐþ1~šºî~;iO¿Ž@š0HÒ̇dVºKwQ6` <ÝSL:SuL¯ªZ«Fä37Pahé?òÐÀ?÷@BXnêÁ®¬þ¾ä·KF-Üâñó¤.]cêß–­ê0¦Þ›!ÍZ «07xbŒ×155xo„)ÌЖ…©’È×õJKr(µ!aDè×0u]ÜHxƒÍÛú±7¶ÄÚWî&vðÌ­yÜk# ¢4˜yúSâìÕ¥UI볯zÎTpE g²±W L¨MD=.Àç~l‰éOý­å_~¬ endstream endobj 2443 0 obj << /Length 1884 /Filter /FlateDecode >> stream xÚÝY]oÛ6}ϯ°gˆY’)qlYW´(¬Í°‡¶(d›±‰É’'ÉÍòïwÉKÊ”­¤n»‡a( Qyy?Ï=th²Nhòüâ§›‹'¿0*E”ä2¹¹M„$R¥I®à™³äf•¼]7[½2—ïo^ÚÕyRÀj™ÚÕYž“"å Ì-”ÅåœçÅì >˜dvÓų›‹¿.,¢ ;Àa§H–Û‹·ïi²‚o/J2U$wnå6ŒžJWÉ›‹ß.èXë"Ò#Œ¨ uy­û}[£"/9•Õ^b‹i2çœpÎŽö j÷ ·¯Ã÷²^á@·mÓ†ÉVã ßøAWný¨ìœÐövààõskË#%˜äDåypäÒyüêìË­.WNJ°ÿØ%ˆÌXØúŽ ÿ9Ù; ´+ˆdE2O)rÜ*HÿÄhcòvÎ(¥ƒF¦ùpךþOžlq.yÇyŽ£h²3õºòã…é½?|®ÌÚôe…/ËMY׺ ÇÇ6Ñ‘1oîëf×™ndM䎑ûƒæ÷~cêeµ_BLÿ ©Ì‚l~xÈn¨%p·©{¿ŠÅ«XJ(cÇ~ÌŸ¹ q`ý.ï o½´MÓf©¯pb_wf]kŸ«Vtò~qîRïåÇA l¢=ŠÅ¼(HVÄùYwËÖìzÓÔgdÏ­¦4Ëg·ûzÙ_²™Ýæ&œ¿:;–Xsvr(U/@Éi“9×ó<ilâ|¦ˆP”Ùä0N¼‘xÉ—CœŽ24>"c„R`¡«¦^Cæû“±âÎô›Ñšmù·Ùî·^>dÐ!ó‚oñÉÆ„áî’ÙCÿÄ·]Ûìt[Ý_J1s¤Èv€•zë_X)RÍî›=îL·Á‘“hg }ƒ5¾m÷Uov•;X/>:|+{|656Ü<?eü’mÓz9úÖ÷ŽR¾4ˆz‘ûNŸÉ$Sèc2“<²óÖèjÅe“ÌöAÁé¤WÌ+¶,«*|³m*~ª.ÿàG^´±3[Ý‘OӺϦõü?JëOñ$”EWŸKì%Px%Oˆý4­Ö¶Ö‰®BÁ£­Þ¹¡ð’ÑëÐŒ¤RD2 {ì²î¬›ó/ ¸üè’Pï· ÝŽË½*;F×™Gñû¿\ À˜K&fÓ øT§†+†Æ¬¦ä9'Tª¯ äl´­ 4u(f#÷ÃlTßöÍ¢piªÎ"_š#òÁü¾ÛfÜãKëʲ N‰Ïm7ƒWæl’´g„nb?®AJ$OÚ_õjJÜÔpÖ*·Ò;]¯A·ÖÃåýäýNíM©˜ýè§ Øº­]g€7ðR[¶÷( ¨5å¢ò²ºO.8É€WÀÓ¯`>ÇíšPu ÷»YnðÛ2¬_hœe[ƒmצÞæàó=>-Žû’Ÿ P“ÓôœNÍœ‘\Å;ë$Å#'¹Wl’й\¯W.:ÊGž[³5K?µñ+zSZ¨úh\üᓃõõ~([/ì÷êg¤ÆD¾¦P>’wâݨ+Œ.­‚R{âjD8aéìØÏ'w|€{ÎN…4ðß“`*’ õõ`aÁª¢(wl0A!€î²ü…#HùlW¶½Yî«r‰BŒ@;ÏG…×¾:.A [9"Ì…ÒÍíoŽâÂÈø k]ë¶Ä:µÓugl³´Ÿ0¾0yѧqôasÇÃQÅ Têʵb"Ad?\c–e§Ç?+L³¸ñ§kO/|¦ÜxôËêÐï&B Wº(·¾3ÕÐ"ÙQß”«7 ‰kN¸…¸N¾Àf%£ìÉ’´ô÷Š#⤼Ÿ…5xž¦EÀiIOÚ–÷8p +àj²Ât¨rgOü–4g\ 5sÕú.zSå™E ‚\†Èõ ÞN7{¸ÝfB0‹“h˜>α§þ~‘q§Üüùâp»a endstream endobj 2455 0 obj << /Length 2291 /Filter /FlateDecode >> stream xÚ­Z[oë6~ϯ°/Îâ˜åM”Ô.Ø“f‹i‹¶ÙíÃiQ(mkW–\I>Aþ}‡7‰´dûäÄO’)rÈùæãÌphm"}sóþñæ‹,¢ e‚ŠèqʼnŒEIÏ„DEôaq×ìdQÞþþøêD)ôLõæI‚RFA˜î(²Û%MÒÅæAQƒnîoþ¼!Ð Gdœ€ÂÈ8Zín>üŽ£¾}aij4zÖ=wQL0¢LÀ{ýróÓ ¶«ÆáêSo=NxLPÆÍšbÄQŒ¨^ˆ}XŒñb¥û£j6•¼%ñ⣬œ–>&8ZRŠ(µp£(ŒRCaä’Æxñ¥‰y[móz#Í»A°*ŸÌOº)ëù±o›½lûRvnn_#˜›”&fê_^êfß•] {ÂP’œ^ößÊzU X‘Õÿ±rKBÛžRŒ› 3º¬{Û‹ø½C˜gÿ ž·/æ1 ¢"qÃ1V38t`á#ùj›e IÒ¡¯e·jË}_6õ'˜òq X.YÊëC½Òƒô¯|­æ_ËUo?÷[©^âEsè÷‡Þ46kó,äÓ-Å‹ƒ5ªPæE¶mÓš¡;ÀdÑuùFv¦aÝ6;ÓkäÇ t»L]¼1ßÀl­Ì;+:vKá 'ûÐÐh ›RÅõ6%x@[|‚ë ÊR×óê-cœ „ÇÑ’À¾Šcó-/ŠR!–+æ‹ T0Xúºiw¹ÁUõy.«Ê|z’¦eß‚Ýe:³˜,î ZªƒFpV.‘T yŠ3"úÆ4jÄTC׃Լµ‚¥›ŒV5î#ûцòèúDÌÈb”ŠØˆ ˆ¶qI”1æøgD!×j¯ä‡êÄ&°>%¯ÍË“×IÛÿéÅ<ÝàXz'\ÖŠV˶©wÒí²JxÞ–ùÌ3£, j:(q÷ã÷÷_ûÇÃß<Üÿ÷þaNë4CŠoƒÖzš³Ú—©žjWª'°#Hð,ï[‹EÓ‚¬ÊÅ©©;Ù‘¦¥•]shW²{gƒçòKMðÖ[OQv ¯"Ä|¢ÚóVÖ³ŽßÉG¹/+E{¥>AŠÌëaMÊÙVǯ 'ÊísÝTU£º=w_Nc²  ÅP×x“™“y–AŒ&CL¾º [„“‡32 7Ì;ш0©@™DŠ8§08´Ø"û0˜B$HÌHÙu–@â ¥q®á½ÜæÚ^eÓÎeG±8ùŒù'–P"ˆHÏ‰È n1cCšÒO‘Á!6ˆ$>cMÈ¡¯†ÏY"~5’øŒù®1ç`>Ò£ ­ãÝcuÓoa»¢3V}õ²¦V„°·Yõ²ŒËVY_P…2ûü¢QA$d*_rƨW˜r°)Ìq>fŸžWùæ¬÷öí’í¦‡T$ðýà©[yäŽ]Ô®ÖK£Ê®—õJy¤—‰X#‰lÀr‘_å7­Jº\äP‰Ï2¤58ÍÂ×â8%!H ø$¼,ã2 9hÄ“ë¸Cæk4=ÃÂkÌ9ÐПô Ûœñ§¬;&ÝHóé$¯*m²ÏÛ|'{—-9Vîó®³¹È Æ¼Zç)e@áoŒF—e\¦ dZœ%Wñ[p>ÆØž$ÙÆ\aÊ0 |e2‹8 ù¡´9ÂpîÚa¼´±5­fÔx2‚¦Ò Ü@ÿ67G+Õl{šlŽÖ/mÞ¾˜Nƒ,oï½ìyêΦ³v¨ˆïŽÙ½Ê«Iö}tv>MâךaÊa@ÏK¸ÌáË2.sLj¥WʨpºYBñ3$¾Æœ‹ýIϹ=wÒéÃ3ÐÿõÿÏYúÕkšD”½é(ô2N—4YÂõéZCö³ìmmЬUÌÏ«ƒéj6Õ4ýIçcêýá×7nš`3æ`°gÄèZO",ú;$ÞÍzª}v÷íI¡> stream xÚ­X[oÛ6~ϯ°yˆYR¢D tÙ:tØ:¬É°‡vh™±Ø’§KÓì×EGNÓm†©ÃÛ¹ŸïF›ˆF?^|wsñâ5£yT’2Oòèæ.Êr’—i$Jø,ºYGïã«v¯ÖõâÏ›Ÿôj°:Oõj.)Ò3 ],QÄ/ðåLoºøáæâ¯ ‹hÄŽ$°3‹ªýÅû?i´†¹Ÿ"JxYD÷få>Ê%IšÃx]_üvA-×4侘ðãÏ)9ò”Nàgq;£÷KF)+#Øm?tªë ÛÎI9Õ – #YVà‰Á.رL2H£N c×àÖÔÍÇkÕW]½òߨÕ]½ÂÏÉYU»VŽ©tÀGJI™¤ÈÇõCÓúºDsÿ°—‰ó2|U7Õn„k–9èá›ÊñB¶ßžÓ@F2‘; 4ý`yÝJËõ×v# ܉àž*nÁ -°þ›Wy^’”—nãšÑº¼¢šq$örNIKÆàQ†ºúÞ(ÿ0Ômó ÿ±UÚ€iKýÇ[õnl*s~-e½ë/õ·ˆëéc?ÊÝî?Ð+z§£©iš’{˜ê½êŸø´S&øDáƒHÃV8ªí†jT'15¹ék]BõÚˆWøg-úrj} £ãØ_UÄÀR/7Êk¤§¡Øæ]reoãÖQ| ÷roGòtê ÿœ§å™U2=XÇ&%nÆ¢à‚%/ÿsPâE®0Â79 h‡Ö”¤™xc©›Ó€CV~Ö#,–†‹¹úÅÂòÍ\eA>¼ìÀ §åÔYÇýlpAÝbüè­`äâ¨;I­Ñ‰¹N:ù‰Oá^êÀç%&~Mh×õJãgšnóµ´FW½úkTÁt(ûEŠœO¥œˆ¼ÃülæÈ¿4KSñÌœtæä ¦ ôœ‚Š­º£Ï\\úä®fsKNÒRLÀÓ#ü 7Ú2ÛëláÊ6àºWµ"¥ =Ò±éTÕnšúocªÅûÚãûÚ™hÚX{½Ý™0鉧@“‘ŽP‰´s4Á•0Ã/½‰p#Ô'3éAUžk+’cÔ϶K?|‚:Ø{œà§5zN¡²§“{ªã’Ýþù–^|ÒcyÒ1$ÖùêêÉÖ)ù­Sù´Nº™é“XJ(c')õŒ– Ÿ°dDvùàú0Ûn:}X¿Átï5¾ T÷™¥íØUê|ç°þ 5=ÈaìŸ2¶U«Ü¶ò¦{f'Wºz¦k¤äc~Ii©ÈÒ%5@ìó¢Œß ¸D'h¨—æÀ‚;`z‹Òã“ÜvÊN·4ÇãÆª1²õ‡Žl=·2û6u3Ynï¼ñ‰.¨L©È+=œCKœI±é±ÔFDàYèªÂÊÒ#/÷â`~ƒîQk-¬Rx äÇ<î·í¸3)‹!%m6&cÁf* †Aˆs-Ny™ Þ‹¥Ú¾¯±oÑ'˜ûzœBø ÔuW»9óL³Ä†U6ƒ?Ï@!X<-#yì¨mcúp Œ½²}|à2ËùruiQôp¿…ƒ0:t­æå#‚¿Dï?ÚÎÎÿÀ ³5 ÚWÁ7o¯ßÞ^ýúöõ›o_½ûeΦ%0Dù194Ú„›( wºÑHN_· &<´‹ÆÁ±Y[¢tÿµK[ÛG%%Ò“¶Ý¤dŽ8 þ¼¯Uø ¸­iÔÎp'â×ZFQ\ã´Ö Z½+àU§#·ŸqžŸžŠhí³i)ô{P¾("ÊI>ƒrn+ý88åów/B>SÜÍ=ÁóĤ•ñÿ«&D¢ endstream endobj 2470 0 obj << /Length 1330 /Filter /FlateDecode >> stream xÚíXKoãF ¾ûWèE.Ö³óÒ - lw»mŠ&¾% c"Ml²äJ£¤ù÷å¼lÉV6AÝKO£áò#‡¤ƒM€ƒ‹Ù¯«ÙûÏÇA†²˜ÆÁê>ˆbg,H2X¬Šà&üØìdQο®¾hî$H;fš›' Je†1!óMÒð½]HL´Ðì·Õìï&ã$£ ßÍn¾â €³/F›®•P}÷Žƒ(ˆj¿Sz±ShÙ>É.o˽*›úJW[H‰‹âð¾¯s#dvGvéö2/o1¦ÚkMða‚M6÷cæ!°Ò†¦áRÙ³xšÇQH²”†÷MkÉrN¢ð±ÛWÒ1mÂHiÞôµ’Ž]5öâ;ãᦜ“°°•õÆ]»ÚJ¼Kƒ÷/5‹©d#7…×Âs.<¦Èåô^´b'54Jàtš†[¡Ü‘Õl¨Ý¶é«Â~+°¸-7«ö[ÏtÄX¼¨öW¯w§MYƒ{ŒQãž9Ø7]WÞUrx«3F´ŽZ´¥Q¬UÀ½‡‹Bîe]ˆZ}Ìåƒf>䀢³fè¾É–…M]=é¯4ì;)Ìí–l×Qt–Qdôé¾m´!e!íQ×ï÷MëNmbÀ‡:pT¢(ÇP ¥vyy}¹þøçåçåÅúÃÕ“Å KާÖÛô­pYw•u§ÚÞ¸ xDI^C}ñ֜ѨhÄã™'¶šU+Mð9Û šœ†¢³QÛýà&ÇÚ8õšÃ&P·Må>G68ÅuaÏ  5­<‘½ZMp¯VG'ág ´Užo­øØÕw¦eØ~ÕnûquÞ48ã(ŠtVÑG-ç¬Áf(IâaI×õÓ¹ä`æGËÆ9ÞîD¥óÏÔgø<ÖãNIQ —kå•T}[Ûîü ßƒ¨úÉl;©šx*¿RÄãÔ;bÂjZLZ ÏK†¼ SJ GœÇ§ZeÛBÔ ü¡3lG '‰ô ]ŽG1b#¹àZtv²¢Ü”JTkõiNp¸™Ã1Ü ¸Ó”J¾¢µLhÛx%¶Náð–ÒÄõì!Yxšµ'ÿrPß4éÐÿzÒy–©çÊ¿ÇØã­+‹oL5Þ=Œ®£|Ÿ¡†Ž†̇C ìÆîL8:&™¦ù$3/&ìr #iØšÓ†e)•SÓXÝ¥rwò^¿ÑWÊH&±ËŽíØ){ÉLZúbSOQ> stream xÚÍXMÛ6½ï¯Ћ\Ä I‰’…Ò¤YlP¤hâ[²LÛdÉÑÇ.ößwÈZ’-gœzEÎ ‡3CroçqïþîÏåÝë÷‚G^Â’HFÞr멈EIàÅ |cá-7ÞÿmuЛ|ömùÁHÇÞ¤£ÀH‡qÌcV0–³¹ŒþküˆH¥»¿–wßïqOôHÐT^v¸ûò{ûàq& ïÉJ<%8“AíÂû|÷ï{½øáŒ*Á’}ùü\VÇ&o¬NÕ}A_ăUso.%“’üK^fE·Ñ³yĹÿ{f×_äk¶ÿÃE!:Ó†8$ µó²%)1”!SÂE M®6ù.oÓbÕÖùn§ë•.Óu¡Wz³ÓÍÔLBÅ,–±³ò•+N–ÚÙ<_5áƒëRùy¦_AG°ð»²Éw¥Þà°ñЊ7ÝúVQçb¾¹*{sC ƒ ¡£ë´Ñ«¼˜ eLcL€.lCЉŠmdSð=ø]@@Œ?b‹4kQ0Ñrz¢˜³ ‰œî%Î&wçŒóÓ„i¹™²,b¦ÔÉòöÓ¦ 'ÓÇ´Nàš–“Öë¼5¶:—ºØÐx»O[l!Z°mè@ìãN Æ;ÑÂFD«Æ)FV‘[Eû‹Ñ1íØ.Úv¶v4­4á×}Sü4º¥þ-š4³uGìk«~Ú@â£fÒÉ6V«ÐiÓÎ ä&Y:>L$|²N‘Š€ZëZ7ǪÄ`™9è»×ƒ lŒÎà×uf­;¢Y?ã÷ z#ŸT.‰=ÉM‚7br‘\$|rŸ8î)o÷Ø‚í×èïv4kk°Õ/ÎæÁúVM+¹0"+KÁzfIÿuY¦›&ï·2†:ƒ4bCrêô-J>P†¬ÓHÖº"mÏŒl¶¦g €1Ì„þÓ>Ïö¤[•}jÐFO(Æ"rˆ’º&ŸO(CdÅDÐ8TµvpÎCm <£'cáÒgl¤Ec‚K;­íÁÏÔbM¿XT£ Œ±iÂRL‚R½ó°ñé²J‘<¶I¼©†(ô£.ÆÕÏ9$¥PL@Ù4¨&p7¯ò-y·×èû)¶—N ®Ž5Åã³½t:/dÄmœTb\^çeŠø1ý†ÌÉÄJ–”-GLc4+@Ÿì$þ»Ž´ì&ˆ8y ÉŒ€Õüdøy‹˜dÐ\“…R›Í‘ÖσÌ q7æ ª$ˆ‹šÊŽF¤Ò‘ô’9SýÉ6Hâ€2`Ϻ§2Û¨ "9Ø:-„”f­·vÃØrLgUiøp×Õ=ß8= ïKŽKê!GÔóæ%˜KkGæG8˜Mwæyž£eBd]9~M[7=¡¡&Ö`çíŠÎª¾¦xŠA,N] hP)„-§lÚÑšµ ÂY&íH¥¬Ú›f|厅‹4õ¡ê‰O™ÂÅÇ•vžÒ„Žb~¬©ø«ºæjxÞ0XX1ÚV‡MÚóëTþÊ`x¢Àö†PEÏØÓ5šJøqb£ •T¨*‚Ñc]™Éóvâ„";¡= Ñëcž…˯N[êáãç«·ÿ||ÿp¿z÷pÿ°|ó÷jùéá~²® á&º\ó\^ÒÁ Ë9mÿîÀâœ7Ûº¢–øS@,®¶7ïÄ1ô&¶{ùZóI·]]â•þÑ€4-ºÉ¸]pøT€ ..<ö°^ÚBäÕ”ÑМy§†¹˜Ž: Ãèܪ®kH´R>» Ðábçp5`g¸dÅB15Òó¾•q>uìšÒ¶0sÚó×tØ3Ø¢Îák÷AyÛq>Ø€”ίRÆ'  ?"È®ÊÿÇ×”þáéÅØ »tî_I…yW ã«ï*¾«È³w•PŒA÷X"/ßU®‹ŽßU&åNï*œ'ggÆï*û|·Cè¦çªÆ'5_|c?ûÈrÂÕÔ»!PfÂßy6üF!šÛ endstream endobj 2487 0 obj << /Length 1923 /Filter /FlateDecode >> stream xÚÕYÝã6Ÿ¿ÂÀ½8ÅF•d[¶Ñ¢À¶{;˜ân‹îÌÛv8Ž’pìÔ;7ÿý‘匳3[ ÀÝËX$E‘Ôd†{{·7??Ü|ÿ^på¥,URy{/RL¥§ð…÷°ó>ù¿Ô'½+VŸ~EêØK€ZHÆ1K  a¬Ö2NüïíG(L7ÿ|¸ùóF÷Äx€ÎÈËO7Ÿ>so{¿zœ…iâ=Ê“ Îd `\z÷7¿ßð¹ÖÉD'4, ­.ït›7Ź+êÊi>½'÷ÖR° Ž-õñhWë Ný}_å† f‰¯«l[jÚ*õJFþ—•ˆ|]Úýîô@Ìuc×3;߇¢Ëˆ¶kŠÃA7vÇqdv¯í·;+½È5[­Uªü»=ñµ¥¹¥ó¹nº–¤Llì±Ë:´oÐ&h‹"k<Èš \jŒ¢©DÄx8“„M±[2k3.”£mu ÖådÃñb¡`ìÅsT‘:Þcq8nJýE—›¢:÷ eá¸4dˆKVíõ™ ¢²~|QlÌÁp‹sÖd'ðsCÉmÛ¢³ƒ?8—ºÜÑ~wÌhÝF£‰¸€?‚¬Ñ¬ƒ¢0 çŽØ-1ÆÜ0rb„)ÚF*5×5Ken¤ÉYį…¬Œ™‰sà6kµõöbÈ*&“ô™³W!÷ߨC‹îhGð[ýg¯ÍÝ"s·ÖŽÆËÕt«—™œýŒÿ“€…©kRž$V‡û>ÏuÛ£#ÁÖ"öó¬,ñ¥ edãRgq V&¸ëÇl%ù„YA´þÔ—Yw!\ùz+{¸u„þã±ÈÄ[RˆµVÆ)¨ A )TÛÕ-él¢ 0¢pÁB$ NuCGÃ!å0Äpej¢ ‚€³|¡Êžì +ÛÚŽ¶´•ÙÏòeÃÉeq‘‡ ‡³qˆWÁìeWsðìàã-fO"H‚~¼a ¡Ü¤Ë iãÓ‚ÁFïÚ€ÎÏ.Rò”ÉÕð9ÚGˆJ{RîHW™ø"RŒ ­Pr§éüጠC*n JQãmQeŠ ¾¨,Q°‰ž%AÜ£S!ð‚Ô×—yjxá|Ñ!(u}R¾ Ø0>FÎ-I¨4¾¬yšœ€W¿½Ò]a°ˆGKî"ÃÁ,î&žtðü5'BÄ¢T=wârÍf23¨ËÁ†î:0)áËVïÍ{Áq£óºBl<ô͈6NÀfÕÕÏ€Ç)h‘'µj¾}I„u‡5G8.L¢Iª!輌–’míÐ5ëÜñ a¦ð»â¤[b¨›kŒƒ ZÀpZFŒJ!L=eÌÐÍ®ÐN¤-àÍ´'–ªî^uâ—ž¹iÁ #€ÚdS:C UX! ÿÜPX÷Ä5z`¬ðfƲ%£Ùò°ÍFxä*„e0M(0³«!å“]é[mÕÉ#›•¨Äbë!Ü=75þ¥ØiGNQd4™cRŸÃ,ô$b,Ëî>ÜØüòÛ‡÷w·›ww·woÿµyøxw»”ãE B"Æ'ïü’MnX­éù‡Ðšˆø7»¦ŸF-á!'ƒ˜¸Ú¿ú%ÎCïk„¹ëLÛðYÀ™RÒêöQw}SÙžë †kVö‹tMùš/Ö¾,TCådòÑ×T$o–„†1ÔàC ¸Ëöga¨.¥ê¦—G‘ÏžAéô¶ëú@3»sÄB>1zŸÕ8ÒÄéÍߜިö‡”ñø Ýj6t“>ì+þ ¨ž{ªês[̳þä¶‹>"ÝþQTyÙã{Qp³­ªe±eÇŸ®Ý,„˜¬TT®ä3wÐ¥‰g ðš¹TÄNS±~çbÖÙ„ÞH_a; w.ût æÃ¤øÃ’ ×qbz»¹%»¬ëÛW¸4+ÏP¿üt^ù+Áy2GžRŒÐVf?—}˜Dþ]g÷0‹ªÛ‹÷@ŒFøOv:—š¶Ú¤¾úl·Ip^÷Ug~Fp[xáNÁÙÏ@æÔ&ô†ý½Íò‚ÎíòO6óÅs,Ç…IE@U>®`¹¡±—±üþíÇ/¢ˆàLDÉUÇóŠj@jSŒ ÿ¾> Γ“ѯÑîF¶—ÂQf¾‰é™.„imS…„èHbù¼{7ˆ!-bH1v³¹]Ρã©t‰rá¿GCƒIÌu«‰k¦/>*©œ–°=ºù¨n€õéùtÐ’ 5³(Œ5¯$_þ¼òŠ [(臂E|ÙL4º^<ˈE2](žÑ*Ǻ/w”ªã%Áů'[J¿ØŒàÓv:s){HÔEë’¸¾èÙÑaû§‹„>¸íeÌÿæœÿçä`š“ã—sò&_ îÏBóÕùy oÍÓSþo&mñW“ö&¿nKÁhfÅß“½¿NJZ )~0ßÒ? èN¡Èø ÿø/[†‚ endstream endobj 2496 0 obj << /Length 1641 /Filter /FlateDecode >> stream xÚíX[oÛ6~÷¯°¹ˆY’I li¤íR,ÉžÚÂP,ÆjSª(5Ë~ý/’%Eñ‚> à ÞΡx¾sáGã`ààlñëõâå‚y¢”S\ߌ#žFH¡$¸Îƒái¹—y±ü|ýÖH‹ iéX”D6³‚"^®¨H—®!œ¥ÅëëÅ×!Ã(h²`³_|üŒƒÖÞÅiÜ[É}ÀF4âÐßW‹ßx|êdpŽnSFP»³\5YÓêîÐCq°¢19ÁlWÝeÜpS‹0ìçå^I½©‹ª)JõŒ]¯ï ½\E$ o[µ±Jv”:«÷~)3 u%7Å'Œ©ÌÝüæ.SJîÜ ¼G¡nor¹¤,üVl$Z®±ð¼qkûìaÉYx#š†·eí¦å’°ðÏl_í¤]JBÝ”Õh×MÙªFÖƒA¡¶v÷´7…NLé ,ÕîÁ b àÆ­–ÙÍNB,$<4J4aããk·ÖÜeëUuiÎú­È½šn«ª¬§k r Ò»€ˆ (ŽQšvÁx~qu±>ýpñæülýêüê—ËßæÜF Èbp±WÚ”Ê8bÛÖ™3Ô|®Pº©[k¹„ˆð 2¢;àÔ6µƒ "€Cqi, 4Æaf[fÊ_rMéZ6NØXo'ïïÊá÷V¹“/¶ª¬ýd¯;Š9#åc Œ0ß7X¸aI·›»™Ïè›Ý.±ëmà:—g‹©_bÊP’ÒƦœ¬½If‹.³§Îê"pïÐO˜aø‡,Ãâ˜xd¹±¸2‚ÁûlaiGèZ3™CXf9zFÂ_ʦ­•+eß–ݵ³q7I}<g ŠyÒYb½Ë œ€Ñáø4 å:™ Þb—Ow•u žc,DÀZ»P^aŸ‘Í­ˆ£d¤|\Œqç·í†¡lփɮ´Í—µ.ÛÚô6òÕ±ÛÊì;8m¸pþO” ׃u×ÙgÚV'ëM£àº® @'ëðfÁ?{øêA••.ôÈÜ^ǼüC¡6»ÖÔ)Øüä,Ú7èîç§`ˆSáU5ÓG'y2iI’' †› ʆÙâw0 Š(|ášB'f" [¥¡DØåbIBå5FxÎKw¢¾|ò'°Öœ¸Äê%mR Þál\.:¸÷…k*Ye¾VÚƒŸãæ "ÜŸfôµC¤_r…:}¨ Ö‡ºQµ¡Ì5\“øÛĬٴÎÍÃ3+4åP ’dyzšžÇj5‰Š“xZ¬Í}’PÀ@z“Úº–ª±¥Nx¸o»ˆRcAÇ!Ѓ'=(qÞ»›¼‘®½¯‹¦‘Ê àòœ)¬„F(áæHÄž,¾ð‚@e­ÓcK*Q*’` å¾<ãp*Iû̳WhêM†SV¥Ö…#B±½I˜½I´ûk:5Pt&–’®J• XÝ©Ô~ç¼.l˜ËZÚê»Êe%Už©f|ŠÄgÓJéÒ „#6e'FƒÆ=ÐÐ-”kU¦J-Ái¹vÆÍ62¡ÿ—¬ [·^­ñ­—nÕUšß+{‘ÛIïDèÝøœƒy'R~‰¾Ç‰}õ˜sd ×4IFŽ$á¹·ÆÃ‘-XËKémT¥7ú@]é0ÎG] SŽM&µ®ÑOÜx~¾»ä³¾Z·÷/3y“ÁvâúphÕ÷æ"ðÒ;$¾ßfŒHÜs±*«³½ìOè}h¾í/qG:Ï‚rq¨ž)Ø* Îx[Í«…™¶ÑA€Jg·ÒÍXÖ m•i=ç}¼GôÜèâ÷ïg³’#Ì'. óÂÑnçÌó PXŠp|@åɼOQÄú’y0‡/¼/X¿ÕÑèc. ñb qHûw˜9ýàºYû³½ÃË‹ø—L>z© ÝË‹Œ_^Þe©MQxbzȾžxŽq‚›{½¾^Ÿ¾ÿpún}uy:KeÌ;þÈ›Œáñ›læÆ£"3ÿ3zËèÓg1úmÖÈï&òÛ%Ük^ÿ•÷bÿUO¡2Íø²Gø;ÿÃ+yÌß¡Jú ,cÂß±m#eÙ²‘{Ä'¢¬åCòþ´PçßBå¸£„!Áéq?•žÆ÷ž›ûÃ0¦(Åñ÷ü_ø7J/k— endstream endobj 2509 0 obj << /Length 1695 /Filter /FlateDecode >> stream xÚÝXKÛ6¾ûWè¡r3$õ¢Ð¢@»Ýl7@wÛ¬sJC–h[¨,9”´ ÷×wø’%[önôÒƒÁ×p8óÍSÆÎÚÁÎÍä—ùäÍ[‚C'FqHCg¾r‚…±çD1Œqæ™óѽª¶<˧Ÿçï$uä0 =IíGbfŠ0 ¦31÷HHä¥Éõ|òeB€;äð…›“n'?c'ƒ³wF~Ìœ'E¹u‚õB˜ÎÃäÏ JÍzrX¦A±¯eyh’¦­­Ð}±3£@jº¤ØmKÖç d"M÷+¯S‘ïš¼*Ÿg:ßä5`@™»jËTÝQ«/-97G͆ëÉz¸Ic«JèI¢‡º]f|J÷1OùkØó¨›5oôd¹W@kŒÅÚÑ“÷7(õĤ#Ƙ5Xª,»>‹5H°¨«V¤\ñ²h+J”œÀpø„ ?‚¦3{ ¸Q#m…àeSìå2‚‡ÊOÓu+x6¢ôá]= È‹gFÏ ÐÏ<åE!I}wÉõø$ò¦á ×Àm*c“²aŒlÌŠ|㯠ø¬²´¯¼ÅQäô¨Ž°8‰‘‘¨ÃPiN¬æ»«ê:_FÌGiº¤hµÑ}7)3=ëçBßH+ÀªÞUe–—k}jб—„á–‰\¹Â”.SŠÝYÆw¼Ì’²QrP÷vÕñד6¯5ØÄóAyjÀ6Þ[VÒ­ Ww»J˜ÅÁ„ZJØÊ›ZOzâÂJy;Œ‰vFÒt“”%/ôæ2©óúµžƒ¨e73 §ó9ËhÄ4>F$°t»D$[Þp¡™’s#ÿº¬À!‘Æ‚Æ ±XúKtÈ}:’=êõ"Y®ô®ºJ—;mÍev¹°dðÍ•f“4út'*iÉÇ<ã–Ü®”™@N¨ cr4QùQIz{÷p·¸º¿{{{³¸¹ž/n~ž_/Þ_ÁD|H˜ŒÒ€5mÒÓ°œi\|Ÿš8êùH݈VÁ^;ßó¦¥. Òd@Œ©4Ì¢xLt†ü°‹=ëiu›¼àO#<ýy¤+Q32Žòýð˜+L.:Ɉ}egÔ)à3P9@>óàÁMçãŒ`ŒmÚ…("ðJ³Ø$*B2é Oì‹¥\¶«ÕTž‹Eÿ­IŸ¯<–µæš=I=ŽÒWš£‰OžMsöÝaµ²øöÜø{ ‰ õþ&¶½À9öeµƒd0@ª‡õù./Ó¢•Áª?jÝ‹|‰6?C*D1£úv^6Ö_†aBŽ*¤ÅÓXhJ˜{°’ÅóL ‘7Y- Gƒõ«aq‡¶¬!/©2)STÙŒ˜àõ™r¦·l·6i«Çòj‘å‚§¶{é{¤$ëe)ÿaÌh3"«¥ßÞÅýT*WBeuDMÙ‚]Pa©27Ì•¸Üë{ºãò<ÒÄpÞTE¦g¹ÙÉ›Î{åùÐ{å CïU±?ó=fÊ»|˜‹­žAäxÏq_ %8,­ðª]‘ðôS*H Þµ×EâííÛ{Y=ŸB†HAŠ?›Mq—“$ýÒªËíá²’Žª¦P y±Òó§MžnÌ-a®CÍ2”™)ëª 5‚'[³ô¥m¡m© ¶"š6BÍTÇ ‹† È”§9¡ÓÝôwÛ~J?– ­5 ˜hG†9xë_:-ª^Bžm«¬- 4´7UݘS¾­Ä~®„3’@Tµ¡Ö™NQ%{Í|i6t«~çeýµ=gˆý‘ì±&Šgúëð´¿Vµ8ÀòÉ»ùxÓD¢Ì³|áÒÐDq<Ö61S`lö;~!í°.í0"õŸ|6óe½©Z¤Ì´e0êÏùäh[OýEq§ÙÕýï׿Þ.nïþø0S.òQ@»ú,kiÞ½yecÞÍË]ÛhŽ> stream xÚÍZß5~Ï_áGxˆã3öXª€ª€RÕö¨úËí]£¦I•ìAá¯ç'9îš8Í"Nj/³ö¬=;þ¾™±w…dœ œñ© db(øLÌŒßhjg”l(i'vE’a&½Å.B &û2B‹ÙvAѹ¤}d¼gÁýl|p¸¢ ‘Ε Ò1#þÄ:륎Ñ«Aò2a­\j/lË\gÈÆ—í\b‚K^%Ü|„Dx¸XÛ·±÷˜6C༛'¹  ‰²N‘RQ5Œ–#W·„,ê$‚„%k›>o)UÂM¾örÐYt\XÕQöFJ:fŽì¡ÇŠjFƒ3’«cDHj %]ˆTGƒ÷ŠSGp1äêCcͰ<ú€X8 Ó`ð´Ag@§Ú#Qݱ Z§ÂˆP› ¤P›¤j-üDÙ×ñ1“Ä*aýKÒÞŒõö."ÚÙsm ŠÎ” cÙµ)B’:®V«ÐV Óö ˆ‹Ž qNªk¸T=ñ&¹¢3ˆI¾d$_‡Ëh QWLp¡¶Ab§xÈÙ¤”ko1ik:–7•ŠP ”±–FÎÃIX² ±**½rÜÞɤ¶AbW% <ÕÞM΢ÎÇ£çBº´¸µHí\ô#—¸\›Šêhóðw`µ U F*`ë)Œ ƒ>’dªml¤(DázSœ>Œ+ÏðäÉhòê™|½\®úÑäåÍE_¯œ/ß&߬֗ÝúµÑÝ›É÷“&ß¾öõb4yÑÍzóšÙ&<àn]VjfÀì¼MŽ öµyòÄL^šÉw«W+3yj¾¸ºYÎÆëîj<[½ï.çãÙ¢›.o>ŒgÓÅüb=íç«å—櫯Føw¾}9Úìœ6MAÈ °€åE{h²ïºëÇ—ÝÕôfÑßµqüaÚ¿½kèSóø ˜þ…™üü˯fì½ @¥d±˳¼Y,Þ<¨Í žT[MÊœ‹ Út9[ÄØ6eà×ú•C´ùS3ž­–}uí3ÞäíM³‘[Yâ÷ˆˆMû‹Z÷Wšh{…Á'Ï׫ÙËkk&ÏŸ>3“WÝÇÞ¼¹—çÓën4ù6tË~£á<êýŠŠÍêf=ë6Û¤PÛ~Â*O¿Y}4H  ·R€çÓ5A´Õ¯XÜ`þš®Ô¬š®Tx3 já ›È,è„0 <ÎM°½œ¯ .¯æ×ñ)f² n(ÎÏê° k˜j6êbÞ_Í»Åe8 O¼Gžd£¢åAòÄcäÉð—´)#‡<¹M1Ê¡Q¶gDë&e ™9†Ve¢ø3©ö»îÑð³©FG¨F§Q¶Ý£Zt;ªÅ¼öä‹e'’…Á ’!·'[0G¬D³¥Ü†÷i?ÅõôrH²ð1J-XWK«šÒPIY ‡qX„IÎiÅl@­A.YŽÔî±ß×ó¾Î.OdþÂ5a”ÈÖUàý»]ºõzµÐW }A-¶· u¥MØ[œbÓ¦_XU#T…ÐaœÉ*Ò¦œUH¦6eû5s›.Ò^ mºØZw´b9¦Œ_)cëTÇ!cî½bgˆò@:ˆ¹Ï޹ìw•à52Ö5ê¹Õ-|tÀ>2±ÏÎ §&ìøËÕ€tÔ\=$î±ivYžÅçÏc#ö÷'”5wµ÷lD¨/.6*#عÄmÊØuÛF#¢GÞ‰ô¨iŽ”éüÒƒ÷…ï äþ >°°õ®ÜòAL±ü|ðHÝõœN7Îz(•`‘î›…þ—ŒEã08 ¯D$*Èêz‚ê"pÛ¦hº~?ž½.—Ý…餤™Â 4=¦ü M(SÆ!5ŽŒ` ÔøFå¨7¡MÙ£¾+9·)W‚ùG.²;.äìp‘òÁ°Ù¦z`nSøEM^fË!µ¢þí唤tWû“©Ò°M™A ¡6e“EYܨ ¦f)grgù|œeÚe£Ì;A†-ÓJj¯GöÈYóõÎ šbãNózÞOã~=¿¾îÖãn9½XtãE÷[·Ø —j.p`‡C©ï™êšÀ0èòY¦^Î7jëpFîÎÊIÄ ìÁ`=¿§RàÞ8”•(¹œ’Ëò!­bÒ5—Få(–w¨—|HAáó)˜öÜJɾD–‹`1 ˽ð·à*GKŽÎ!bwyÝý;ú”t} }Ù¢O »XSâ §xËú$΢¥¦¾à©N%œ€½÷~žký¨™F?'…ucÁYÎmœÝtýx¶XÍÞ·kp@ˆÂ§ä̻ڷocÉÆ£{©cÊpnbߦ\±ÞQ›²ìåQÔèg@Ÿ‚]>—ú!D%„~±h/ð é›Fý XßËzg~+"H'àñzÚwGàxî9 `HÈZ­QAžÓóBµðÕ®nyó~oÜ| ¯1Ü cP2õ‹%ëu[Á¨ƒQh&l2¸ùKŒ‹›«+dÜÍüÏ!_ÁER¿ä‰Øyê´`“_ÖCš³<¦,ÕOuÚsí=íÛh¡g]w8ý qº endstream endobj 2519 0 obj << /Length 1188 /Filter /FlateDecode >> stream xÚåWKoÛ8¾ûWØ‹\D,I‰”„]ìa»IRlì=%…!KŒ-@‘T=äßw(’²äÈMÚ¢À{0ÄÇÌpæ›á74A;DÐåâ¯õâý%E8L õ=â‹ÈCA߀¢uŠnåƒL³åçõG% ¤…§¤ý À¡ÇÀX/ˆ¥Ë‚Ðy¯?TP¥´8_/¾,(D0Ðä(yXÜ~&(…½ˆ`? ÑS/ù€8%˜yÆ9Z-þY©×áÈk”SùÚ—¿e“ÔYÕfea=ÇIËfÌ„¸Þgrš8÷]‘ôJýìK'ëLš­v/Õ€:uÙµY±3 e­±ÑͪkÏÔ„;±Ñmd«u·Ï=&Žz‡ôàæRÅDƒ‘‡Œ…XP mÒç`f6öteÆbr¤ óHXí; ü(^ºø°Ö'éêZmþl¦eqGÛuµLõÊ$Ò§,Ïõh+ÕéÈõ<ìRžs}ØSµ­T`pÀ¬4èObó ˆ+5ø&_ïŒTSŸW¿Ï+Ž‚¤F±‡ì…Î0«@)1‚UÙ4Ù67³Ç%ƒÌä]ŸX®2—o÷2«õ0)š¦*‹TÇÏ0¬Rm¬¥u¦ì=.)wd½dÄqSYÉ"‹kœBŽ)ñ ÞGž7)9ŒKfz5tÊ¢O ¬tŒµï0±bM·Men–H£ÒîãVïVu©ÜyÌRiÅ«ª¬Í®.Y¨ŠžI },xhÁ¼º^]o>|º¾¸ºÜ\ž¯77Ÿþ]_]_Î%z$+:T­-¨x`Ñ´u—¸ŸùØR™”ÆÖþø¢Ãµõ(-v#Û®.4Ù<*àUNç:ºídÎõûb¹4åÛt  ÛœÍq€=:pŸKgñ€à|qlUÖ5d€s¿¸Äã`ÝìèïCn0eMtëRBˆe (\ ›×Yo"Þ{v 2Å~XŒ-£Š{=9«ç¢¬¨æ±££P¿• ß²"É;U»¢úCû™g[¼ÿóTXЈ"S=Yaƒ§ÓÚÄ„j½¤¡s .Îq0¦P£c`yg®ÿ€É™^èŠ&ÛÒPŠræ%|ŠŒŸÃÐ!ÀËIÎWmÜvÍçÕ>~=5?Öù¤7úºBÌN¬?“‡¾sÕê=kÄð8ðZ¿ö:–Ñ,{… ŠŠMÙëÀvµl§Íõ=ßYAé½±ÂZ[Ë>X5ÔÀÃ(¶ß—Fh©¾l¸µJÖœQÉ$S.'zžìã¢yï‹ç\(4{Ô@¹Ý—ͬgPØû3‚µýJ˜Rˆ9u.)Ãð}šU³~Û Š ¨øàøÂ+§6#N¿¡h„9gÇo(s›÷e—›+¾5$ÎóõoZ›IyoŸ™y<”…ÞGÚžJÓýóð ™À6Û ]¯ 5žPÅÿª%N:¢÷jGÜ$KxN*ñ­Ýq(˜ïì’3Åÿßj™â'Zæ&9eäñ_Ô<¿-jœ:ÝaÁQÁÒùïî°C^æþÝú NðäÏíW}0ÿ% endstream endobj 2527 0 obj << /Length 1756 /Filter /FlateDecode >> stream xÚåXKsÛ6¾ëWp¦‡Røæ´ÓCG6ÉÔÖ-Éh(–8¡H…¸Î¯ï.àC¦l7·NB»‹ÅâÛÅ>̭ŭ׋ß֋篬˜ÅXëËX»VÃ7Ö:³>ØÕAfùòÓú J‡VÒ‹Ò^²Èu@™ ÃåÊ #û9}D pÓâåzñe!@ˆ[b8À¾•>q+Þ‹3/ެ[%y°|Á™ã°.¬ëÅ_ >µ:Ùa”ú‚ÅÙòB6iÛ¼*åã{rkå8Ìqô×û¼£}nßteª6Á/aײ‘­æ$DjŽ2Í?rîÈŒèé>)KY·º¡oB¼¦Ûfréøö×<•l¹r…c_¶Ä£aKYÜ¥kd²-¤!ϨÐ[Ú}¢•ëj)—émMw^ó‚Ș><`#Üî…wÈàÁ™+1§TxÌó‚S­²®ÁS¾o³{hNîBŠ=tgRá3Lx“Ö‡•àœ?—6)ÂQTêóyÓT]«T>![µ€Ú­âLÿè8¡†Fê4pHÀm:ðÔ†Ivà³ÉjÎÅ|rÑ뻲:64㋎zÈ¿?äeZt˜³@åºP‘oÙþ×s÷‡J´;/[ãî‰+»þÉ“˜‚´Ñˆá D<~Z‚Ùé'ü¸ö€Ð3$xvW6!Ô )4M-&`Έºƒ¨NésÉogETN"f¾ïM“ÒQÖy•mÊßùÏOðj›´]ó„ LŠã>y\ßwÕá Òux©ë YÈ´Õ\ŒØ H&°L=ˆÝ«Â '™0€þEï¡=˜Ä"¥tÆnÒoŸ5ŽIdo YºÄ§~ë‚Ì †Ž)5e``fu®ÌÅŠ!U^Xeò(Ë,)[mÿå 9ª}•Ö„NtĽºæ8vV©Š ̲j”éàÇP¶órG[òVïè/€rx†”êzàsÔ6· ä ¼°¢}%ílçÝàãq°Q4ãáÎyμ͋‚ÎÙj@¨˜Sƒ‡ûZ<}1g"C„,޼þ ó¬fû Îb!ælÂ,Ûw ºÜ’³|èXu4‡1¥W礬 NÊÕWˆ¾Ÿ<$ºbòF“ Qœö$Û;:¬kT+¶›´«_1TT‰V?©™åö7YWú°“ÈlÆ ‚Ü|Ò(jècwèŸbOß5vû× Ëþ–({3ÈÁ wDM èý2ýãsY¡·$xK0Ðï«ö&ª›}Õz½Õ¢”(ÆvMñšjÚ Ùð4¢¥f–Ô8õ †ßC€xŸ ÅAÎë³àiÃØg˜­æ}ép“Ynóv?øÄ1Æã,æÝqíNÛ‡&á†Ìót¤1Ó¼Î÷0†ÀDà뛺ãžÃÂÑìïFTŒ‘Jó9RúùœÈô=UQæsäNæsdõµVˆ1Š‹3ó¹Ë]ñèt>Ç!FðÍÅŸï/þØ\_]Ì6´¾Ëœ8:7SýóC†»&/t4C³Çû»ÿÕ„'&#žÿèˆWu%¼¶Í¡ÊþíX7Þy2Öa3´ÓÔojubò‚Rð_ìü‡;—q!æ»G0FCŸ~2Ô2?Ñg:©Qãd&,•lÛ  uç…Ðî~.ë!žû©³-÷¾çߥÿv¿M endstream endobj 2532 0 obj << /Length 1363 /Filter /FlateDecode >> stream xÚÝXKoã6¾ûWè¡rQsII¤$´è¡»É"‹6‹nÜS²0‰±È”Wdóï;IYŠegÑ^Úž8&‡ÔÌ7¯/ÁÞÖÃÞûůëÅ›K‚™—¢”Ì[?x”!–†^œÂo{·þÛj'r¹ü¼þ µc/mjí(ŽQðX¯'ËU'þ³Fô¥ÅÅzñeA@ {äðnR/Û-n?c/‡³FQšxO½æÎ££ d —ÞÍâžZŒìpR‚ÒÈØrÓò¶kœÑc±· Ö;^î îôÆ‚^HPµw¢Éj¹oe¥¾áÑu!!Œý‡Neý%øÅü¬RwÛ®öœ›%«:ÕŠÚh5Ý}.–õe&Ðrb/ £¹\Iµ5šÕƒÙláÔXÑè]ˆ´U Q¥.>»*sÆ!¸™8­=¯ùNXcbß8Âü¼–½IKB}8 °¿ÊÅ^¨\¨ÖÚx5²æØs–WÎsUµÚ.‰¹Ø[eÆŠ¦Û﫺UŠG°ÏaK¶z§z©Vn–½µ2+¸R¢4›÷¼‘ÍF3Õ ÍÂQÈÀ÷Ð ‚Fä€óAxýI–îëÖR¹UU-räü§(L´ÿ1JÁ€þ+ízdᇵRå³–˜ß5‚ß—Âm›u‚´½Ò¼5Wöu¥Ãö(sáÔºð㡪݉'é‘¢3çÝÕõÍõæíÇëË«÷››‹5ˆ^¯/>m~ÿøîbÂR(u2 8Ä’ÛºÐ^ª¦­»¾PÐ\-®"œ"Æ“’ü$Ú®V¦×<êPó²›uÀ§…ÏY™ ˆ ‘v™Ôt  ù2óh£ ­oEf]P±—¯ŠºÄ)õ{W‡¾väs ýÞ»LQ„"lrÑ»]Œu•è>½iD»Ñ—:_oUs·z3ï &- ¢Y;)®©ªÉ Ãé´î_í­7ϪÚC]N¼Á2LkþwRee§óš?oJyŠ_N93+µ]FªÖÅv·a2ÊØoÂ5PÙKw˜b{Ñ"÷ƒYÀØ6Ô©úÈmkPí †çUmc:¯äLÃÈO³5mHÏßIdþ S”¦ã)Ê\>Ú#n–qB¦6!v§G5LüKÝ+{A7 ® Ð,p×r¹•-/ʾk­/æœîø³¦½V?"ôïm)Û¬0ã‹¢ax’ma¤Gý,¯Ÿµ¦žØŽEjs±ka惊µ,ñjñ¥*“¢Ñn±Ð8‚Ѩí>ÌÜHmeÖ}-£½ÏØ,ä’øÛbå¾ ŸÍ‘ªd#Ü÷«‘2Þ5Ö½rðiI}à4î[5‡¼Ô1l̆ fbÉÜ9€ »=Ø š@À¦YÇY¡«€»i.ܼ5oƒPð:7Õvç©Y1Tä‹5¸)][+ÅêøÄªRVâ®e–åÁ‘ш_ϳ­’ ƒåAžê7!EHï<ç•ÈÄמ0Ž‘™¤ò÷z*5SšSpåZŒU9ɹfˆ=Õ¡ÐXcjaÏÇÓíZæc¾m™Ïˆí1ŸÞ;‡ý‹jÄS^9Ì­S̘éÿ‰ÏåÕoÀyfg>üÙ‚sà˜îôMùº¦1ð‘HwÈÿ…îįÑ-oŦ©º>é2qn´G3}»„†kïgâ÷±šö`¤þßã?ô<ÿ e3ôç€3INàLp€HÂNÐ L{Ë”ÛpL[àØÐŽh‰æU£1 :¥D] 7R™¶ÿuøürE ÷ßÜêÛŒŽ!£'#x`TÓÄxÕ¹¹ÿ{DJqôwþíñ­ž\ endstream endobj 2540 0 obj << /Length 1924 /Filter /FlateDecode >> stream xÚåXÝoÜ6÷_!à^䃗!Eê =àä’œÔmã}i’Â%zW¨,môa×ÿ}‡œáJZkm_>ÝÂÔp4šß g–{{OÞ®OÞ|<òR–FAä­o½0bQ*½8…5Þºð¾úïš;]”§¿­?îØK€;’†[Å1KdÂ,cœž®‚8ñßà""a^:y¿>ù~"€‰{bü@o†^~wòõ7îpöÉãL¥‰÷`9ï¼PpÈö•wuòË ŸkLôpBCÁR…º\õY?tN驉Ü[ ².«vÛÌñM…Ÿ,‰‘í?ºËÛr×—Mý ¡ëmÙ'Hÿv¨sû<)¿Ó•Î{:ÊpÙœ†~Ökbh†6×ôjÓNál¸)ôiú÷e®ÙéJ&>¤IƒÕ]u‚ b2.0]Ö…þcI÷0f\„Žw—µÙî5}{¢±ò¶e¾}¢µôK:¿Ñe½ARÞÔß86C«‹3CJýnÛ Ua4g%’É8òVBFøéŒYÉàÀR$AŒîߟŠÐ'ÊÝPõ客'Ò§¿„Rø=’ûì÷SÁ}Ýác†Ë½‘U½{Û6w¸ãôVcVé_®q˜PL,(øPö[Ü]âR”·†ãV·ºî•<<0æa2 áb!z+ÇŽ® ŸDp0FQF‹¢¥—›:«pÿØ ¸y(»-rZ?eè4n2‘YtfИúY] ¹$¾¬êHDÑ–Ö_6€­‰åªÐ; ˜¬{pG¤”q‹¬{á‡^EcC ‡uÓ;®Ý®i{‹+>÷ÂBÄeÈýÒb6.ødÖ —©˜o³ºÖo²®ìÎp:ÖûÝb‚BE.ˆNÐBÆt)ý@úCY¹¯k2`S7SŒò‚¤!˜³TJ”ñë©Ì›pAêße°‘Üÿ>èöiÖņ6¦1P÷ÅögÃBRo7n>4eXÄKD˜0¸9ö6Û{ãz£ûë ïkù¡/TÜ®’ð‡~Ur¥Ô”>®\à“¥JÒŠ¬øf7fÙàx®Ž¼™r&¹œƒ¨ßf=¡¢m |ïË‚bá g°\Ï1÷Ôä‹Ë«Ëëw?]~¸øx}õ~}ýñ|ýþúêó»%ˆ‚>rt¬ƒuFf\Ô]ßä …ë ˜b&…šÝjŸu?´5^×÷ñ¶(.(p¿ñ%-¦¢}ÕrjuCî…´YªŒBûîa%–MgjL#'U·-x; }öN3›ch!@ÎÔä)1‘Ì^ô¾®çÜA¶È6ÆÖbÖøe¹öxeñ휰ò-br‰-Æ´Ÿp¸b<S2ûí¾|Y¹fÙ¼h¹l‰+¯šü÷çÚÒýê±nvPßfn™øõ94ü£¬ój0Iÿ…n¨Ê¶ý÷1¯AߘR~•uïÀ1/Œ•`90"9hS™ÁhêI ¿ÿ•úc º>Ô& ºp9Õ#߬X<ÏJ•þy& £âþQ6[DwCÎëBÆ”Å^n[_nƒƒ¿¿ ³ A˪ª1Þ| SÌ:ïܺ1{—#pŒ9bÆTáaÍí ‹°”E"uY4~mÌ"x0ÀqM/°ÀEÒ½ò.TЇá|á*ÄàÇ,¶¯º$¡l&8¼#éž SJ}4±ØíÔœ0ý_Ì\±P‰{¬ø×Ýí1SI¸¤·¹Ñet¬–’%ÑþšÀØ-`/HY²ØE¥“!Ü2qÔdiåÁF!éAãšµÃ$C -IúLcirX…ØüÐÇZÌá…–Wòä˜Å"ŠY<¿ãÍ¿T,bÉj56á;>5™0aoMKŽ>fµ-¿Ù`–M%̼F†˜Þ}þ™YÖawŦÄÁ ‚ ½©z¶¡ÒU=×Â? Ÿ»Oÿ®¦^B=Žaûº¦>ü‹=½Œ8KM£6íéÏmW ˜m_‚Udw0íe:—Ä3)¶Àé¨Ñw6Æp²oD€æ äŸ?\ ­(7eo«-<”õnè‘ì&¹4ÖÛ½58ÆoeRhâþù›·o¾Ð›¶˜Ã:ÈíP×&Ø ‰dj@1ÔèÎT`”˜ÑzyôWWº--€zÓdmAŒ2°ïCV@#=´Ÿu7…¦îr¥@µc²D’ÅIúba’€¡–ÀòI’‚Fº¤‹)åä0ØœŸááÛ3|nˆá ’щfçœjP*ŽÎ$K'œçëK|Æ%eÅÚdMCI¸ÓyyûHhwå–°`3Ëv;,“ìÓÌD˜fßB¾»ïŽÏ)aߞ͛Ý/Oi§ån ÷úcWæÐ{<îKK ¾µwùgže622‰'¹%“ÄwTœ5 e?k"׃YÓ2âXiNgc¥9Ú@ûAû×lŽŒ•0¯²„'ÇÆÊŸÖÿ}ÿùè\ w[&ÇæJlS`l4oÍóÒ°y0\üÿŽ™éKc¦½’š¡§‚÷ú ³¥—ž.éÞ›qîK7<¡ɿ©šKØ«ê†ú+ÿ×ÿ Õ´_œ endstream endobj 2549 0 obj << /Length 1281 /Filter /FlateDecode >> stream xÚÅWQs£6~÷¯`¦ų" $`ÚéCï.7¹‡\›øž’ld›)"¹üû®d áO¦Ó¾$í.»ß®¾]coçaïÓìåììœ`î%(á”{Ë­Ç8âIàE <#â-SïÆ_dšÍ¿-?kéÈ‹AšZ:Œ"Œu‚1ž/hûgæA8ÑJ³ËÙÝŒ€öHÿ šÌÛf7ß°—ÂÙg£0‰½‡Nòà1‚ 8¼çÞõì¯{üpFAIh|¹~,ʪɚΧꞠO¢AÔØ[PŠ(µÿ”›¼Må|Á1öÛtñçÙíw(ð'Ú€CÂŒvV(+E†R$@˜•±¹j¤ZÕsûe«²b7e=Ps§w‹¶º PfØÿÅ<À[Êüûl#ß™¶h²]!S³ÒNu/M»>Ut³E!ó—…jã9øE~uîS³€J ’È[Å®¢®•Pmó#,™yµSf±5hÄ>ÈfSg•ÊÊâ£Ë=”Å"‰¿m‹M§+ˆ·,n1¦»¶–ö\˜ÇB¬r9'Ìÿ®4ZB¯Zed,Xfñ°Ï6{»/ŠçÂÖî½Îƒ¨3©­ÌÖ¤ÙVme- «¢Áycät4­û„°Þ^^üÓllø«ªÊڒ϶¬Í‹:–ë™$@ =†vqy}¹zÿåòüâÓêúãruõåëòâòÓTù’Þ#ÖCê˜A˜  6ªn-´_š"áÒX§.ÔØky×ÚŽªÇ ¼uô¾níZ®múábìsÀŽÈk>Ÿêj×}ÇdÜ}ºn<1Q`9:CkÑÈ•›ÿ&¾Ë#„Ã#OÃÈo{V9 PŒ¡MÒ>ƒÖtlj¯ð1G8xÎLj¾ÄŸ0ªà|µZëÕn·s½¬Wåv«Ý?™Ow½ ;Ï‚‰îíˆBO¯ÐM¥8tsRwOGzN¤»ŠFÒ××½Kä+dû¶«|„iêŸlH¡É‡où#ûâ¬$ endstream endobj 2556 0 obj << /Length 1544 /Filter /FlateDecode >> stream xÚÕXI¯Û6¾ûWèEb†”H-hÑC· ¹5y=%ÁƒžDÛDmÉ¥8¿¾C)K¶ì89µC\†³s¾¡i° hðzñËÃâÕŒ&ANò$J‚‡u ’äqæðMYðPïÃ_›½¬ÔòãÃCP'±¡æiJ²8f–0cËU”fá+ü°„™C‹ßŸ ˆhÀN"8)‚r¿xÿ‘ì½ (áy|¶”û@0J¢8ñ.x·økA§Zg#=s¨µå”56PNàØ:5âݱnZé‰#?Lââ•ðìª.w}ÑMÀäŸP÷z"ÛŸ¯™*àÖ$xZÕ>@l ˆpÏäîU¦ ‰E<ލ;)Ér¾Àè‰ðY•ò%ø‹Fa_kµ©e…ÛF;ÐýÓiÕôO;‰ûëV~êe].™ËD„·Ù9é]«6φkÑ.9 gø:¢ìúb÷8‘bbùã\0WYFÒ$9 iWt½¾#ÙNÉrG¢ÜYÝ"_ÝÀ*ˆã©¸Í\s¨¡yÄ¿%Ô9ä.ë‘‘T‚ðì³ñ˜l;«Ý È$lÈpÄÚËmâÑŒ0áy{òãœ"&Q:”§®A ~ê~ÿdî¨ë^u…°ÕÅjYWf +ƒ–U«l꡸¦jÏßV@¨¶$?cL&Î3Yf0 u×öI­4õ9K<ÜÀÎn`ÖÊ}•ÜLDWÝ*Ë“r•ö>«n‹›N¹#Κ]…nYk'©Y㢹Iù LÞ2 ˜¬œæÅþ°Sõ϶ž6—M†k¾q]ÄŸZ²‹"ÌðŠíz©qn6kGh P¡Ú¢µW×8‡¦Þ9œé¤ÑM†Û¯#à3.VM-qYMe°ðŸ¥©ûm-wÆlÎÄÜìÈQ|ŽÏPn1tÌΗ}³v<ȹËÄá²Ò8õIYu£ey£j¦$…ûîÈ_bn «\L=­êJA•À ÂNÑhâx˜­ÄVΣ[<s›Yª”F6øÔðëÔoêJ߆f:‡Éü&ëçGU«î~0öΠXï0vÇ•+ìÇÁEª>ôþ_ÂoL(cg5ù†Ë’˜$b{áˆóØ ç®g•bÅ”bŠº°pBTô©#¿èë¤å¶¨á^ÇOè’„ý‡ð3ágLóÛøÉI&¢ûc•A¬²ä=sFAcþÅ\`³Ðy |žãl’ê1ÍüS I=èàôÐ@ LL,¿¿O³à oBó¡zA²Ìõ$îaØky¦ñ¨žÎˆJ‰’áMSÉÝDZÈßU ÝSž6ÍǶàp’°×Z,dYúkjñ úã‘Z Á£‹ˆ½*‘ÏüYP¢ÓŸN=ÂÝ?t)v½Ê²7íˆG3Ï7kÿõ)@O)@£¡»(6^4fehú,s`h;U,y¦'’Ú†€ú˜Š¹6}FÑïœß{ZžëÉY§’û ’Ù‚è1)]o%Ä®ÆXžç¿á/:ù‹ƒBÏiøÍ¾ü³„P1”(:[Å?]_ÏR÷e)µ~9ÛÁ# )³bWJ ç✫l[舅éoÿ=y½í\+"¾ÒŠŒ’ó+OªË3ßÕ ºÌýGÆ#’Sþ=‘ý çå%5 endstream endobj 2562 0 obj << /Length 1026 /Filter /FlateDecode >> stream xÚÕWKÛ6¾ûWèE*"†ñ!´è¡O4‡E|Û Y¦wÈ’#Rì¿ïPmÉ«µ7{Iz¢$Î ‡ßÌ÷‘ÂÑ]„£¿V¿®Woÿ$XD9ÊÑzqDÎ"™Ã(I´ÞF7ñoí^o«äÓú³–‘kÁœu&%RŒB°ÁPÑ$¥RÅoý@qN«?Ö«Ï+F8"§(xò¨Ü¯n>áh sï"Œ²\E_Ë}Ä F” x®£«Wxžµšä‚r‚òÌçòá±i¦2CÁ5ŒàOäd×8J)AJJïûCÕ”u¿ÕI*0Ž.‡ý×ÕÝÿPgހʽwÕØÑŠL­C˜•ykn÷º0}—ë¥àŠ#œ¯˜ã“§˜9ŽôƒyHßø—mÛoj=›ß¶òSXe `š+sQÊbRÚÂöæ¹;¼„7ÜêC§ËÂêíRl<ú»6eWlÕ6—B¥Xß»]0ïú¦œøÌÊÇÊ}ÚEX &H5Öã×ê6îIÄ6,oê6¡<þR?ú‰÷VtUsç F’xcÛõ¥u+¶‡Z°ælë?nÇ´€>V™K‹2 u!-¨éRî ©ŒPÆa³CôâzÖ u⤈Ãù¸hu×5JRÎTü÷.I…H}Yjc…¨¡ÉX6‚èˆ;múÚúg‡dÕøçÃ}ÂãGS•Eí?ôMeÇÙ½;‡Ñضsø¸…‚ï1xÝBg¹ÂûËÁ¦õã2–LPÄñ±-\ÿ/¡ ÝÆFÃ΢f{–EÓï7ºó)¶»1íb¨µ9îÅ#ª2„)CÚiè†FoTFpüOã)©»®í’ ò ] ÚÊd2KÉb+d(ËD°qxº¸§å¦â÷”óÀ3ÊGvŽ|ã(C‰™ct“ Bx"V4õ èûÄeÈï#¥r­cƒ¦sFÁ\Õzk.)ŠüVRÿ:¥5©Ï_¨ò4$ ŸÕóº†Ë¯Ñpùz ‡ä¯h¸êk@Ë9]PpXÉ{™ÐHVwÓ ÷v(ºb¯áË8ëØìF²œ‰&¼?iÌ£Ô;ã‰Ô»àG©w[?>#O,C\‘+ROP¦Žü¾Âç aJ.Z^"´­`¸%eÒt_4/§uptNçĶ.ös.6P¨S³ %ûRœÂíAœu뎥~…ëìI&$wÀÏpB€ˆ®ßªR»»\ ûÆÈCS‘¡™½é7/5u5º¾lÔÍÝ•8E§woü1G0Üß©œsÓ[ç®ÓŸ{Ý@SÁ`r3„æ!4<Àùz;ž§¯¼ÂâïOøÞ·6ì¥ì÷Ú)ÜÂKFE9Üø_ñcôGýŽû endstream endobj 2572 0 obj << /Length 2724 /Filter /FlateDecode >> stream xÚí]“ã¶í}…æ:íÈ™5O¤D}$mg®—ä&i›IrÛéÃ%s£•h[s²äJT¶þ÷ R–dyÏ>Ç÷Ô‰_Až³v<çÍÝßî^~K½ÐIH²ÐyX9<$aâ;Qÿˆ:¹óÎ}]oE^,~}ø^ŽœF‡¾D‰}ÈôÀØ_,Y»/ñGCª€î¾y¸ûÏ…AžC0€äN¶½{÷«çäÐ÷½ã‘ ‰'=rëpêæ‡P.·w?Ýy†joL}< Ç"ç”$ÒÄI@€HMˆ…tÞ-©çyn¦ö^6ÅzA=w½€fW4v¥C¾xÎ’Ò8A¬È5,÷Ü_‹°´ͪn¶Xie#ÒmQ­±ZT»N¾¬; ?çq/»Fd©9Ô¨%`¸4 À§„û1ðv_Õ»¶hGë²€¥ÑiâÿPTYÙåb± Ƶ”Å#ÙüõÔÒ#âÅ ¡‹JšQt8ŠúÄ£Ôj„?3XC‹®¯x`a+_à¨dÜý­ÈÄ=6 e6¨レcÞô4 ¢ e*»ö a„s†`¾mÖ;YÔÕ¨6 ߣ²ÌH|Xu>ccŸ„ñˆ±Z¥ô,EÚØe²ÅªÙØPf®¬±­×]U‘HSÓnÓ*ÇÖv'²âÏcÂ4<î'Ãû}¡‡ë)»Æ¬tWƒYHœ•) ¸0&šµõcâÃb–xÆ9.I‹~fáŒÏ·ë&€6³æ¯RF–S*•–°*¶UÞb¥6c¤Ü¥,²®L›ƒžõ[þQöuÛv"7Ó~·ê±4Âöã?5ˆ¦©›Eà¹÷s"÷ýˆ0ÞÖ%[0 Hô’¶àJ)CÓ€Z 5â‰^ú‘O"CÁíµÆ’ÏʤպK6 ücQåÀ€“{( Ô÷‡>Œ @†! ÿ¯ñÝMÚì±ò¸`ž«m$T”Ú[²­±ôTÈk Ñ5Ð_,ü¸—›ºR†#òÜESš¢Öd5àç/äZ[x ÚbéUúXÚ»6] ,Ö«Ý_+¾Zpîþ„ seêXYjíV,Ñz"KVM½íÕ¤5j²)Ö«]%"[PîŠÒ4iA¬E;'Ýc›õb%tV°È¡ó¥iœjô xÏ€1ZßÕþêd½Maë¤e¹Ç¾µ¨D£Í(šæ·ÿþî Á¦·µÁR*]{RŸtßbßUb‡# 3;8VƒNnR‰}(hRf»ÐœÕÊ®¥ÚÈax‚g“Ž-ý]ñÇ’†ƒó:ë¶¢ZŽi Rj-÷¿ÚYÙÝ®ô×ú#hPÂý¸)Í󧔢>X¢çÈ„!‡Ú”C6RHzâÁüKB·J·¦¤U<áÆBöλҔõþ€¿’jïG–K™ì ác5§R>'qÈö:"÷UYâýì¯ñgýc{¯FdœŠ­á†VtÁ™VÒ‰Ú‹é÷!6+Ó‚^ (ÕF7Í­]¤¡F«#4ìëÎ.[‹Yq0 þÄ/5b¥wnÂFÓ¡ke‰o×ÄpMl,lBÕ…±Ûº•Ø„ò`hmŽ…~äþPKa»S©¹á›u0Ô+Àõú~‚¡g&VE!ÑæÀXí=Ô­&$·]–‰¶]u%ÖÑv¥œ3kzEGttº˜Õ¹"<û¯ª,pGc—ÜÀÊÁ*ÙƒP„²gQäVµÁ¬,ã3±³kQ³6¡56™cK=$È WÇ£‘÷Ĉe¶ÙtïQ,²#÷s†@™ uØ"¸s¿UˆkcÌq–t»+íIÖnðŽÆ\±Ñ‡ŽꨲCôÔrbƒÏ_">X†B©~o&!¼ÀñYB lS!›jç4$ŒÓ§ÙF8«aŒ6Â6ßz<!&ô툘ªÑ×âǰp‚߯—çÌ0Ä’„%¿±a³v°ð³ hi48[ÊálK™ Ç‹í®nä$ð›âµûw<öã‚ö `Ž‚ÛÉaŒÿJ9\Mì%r€ÝNCfÃB½Ý&›Qqý/¦ñ|¡hx È}ÚPL ”{ñò4(9yù±‰¼)Ä ›”8CyÀM’„ò›)ÏÿuÊs=±—(¤z&*Vçmà%;9ö(tbÜu5U[÷\'Àb®]ýÍÄ;Æ¥x¯&öñF1øA“%„&@‚3œR>Ÿi˜›ïû9S´p¦M’èv¢ã¿R´W{‰hÕ?6‡¼]c2 SѾ8-¥oôxF‰èÏXï‘RLÛ>ÕÙo ÒÏyxV“îo£µ*5>ÙO¡P1æ]âùÉít}ŒÿJ]¿šØKt=ŒˆÏBÒê¬éeÇGRâñk„ù‹ž™k*x„'~ŸËÐÁµQ e:Oõ•ŽŽž°MnLºŠbþYµ=Z@¥aÞÉâªW*œKb“+“‚Ò ÷¥&›¤¼þ´ra@6@jZ ( <“ãk$†›”Ž"t¨šL'ôGкK›t+¤hÚÙ¬”Î’nt %Šó„ž»… ¾Øétö‰qi‡:¥èLÀxcS=î¢ÊÂe…YUê¶… U ðÑqH‡Ññl:<kÇ“K<•éûF¤ù\z)á$ èñ5ˆ¦ÙHù¶ b„°ÏFiŒÔæë›ݵNÔ ¢ôéU`ºþö¡lÕRÞc~$ˆI@vÂCsíó…îàÄ`#šÕ‚fo6`ÿ÷KyÚÙÆ„ôEYÚüb%Óbzw¡ñ™K47Ô¯¤Í/÷ã*Ò_ ´æ*ãm=μ6U9¾ÖèZa&äuôE{öÙÒ{Ço˜`  Ir»ÃÿuVÿzb/ˆMh‡×˜kïŠQÚ¡7þêL‰S8 {þí2 üW äjb/Hƒ6™†&ûäPbl$Ï?dÍ&7>vl»ÇO‚Ë6iU‰òB¨&­Ö—Îxu ¢»þô 3fT¼kp–š3âŸçHDáôÅcóáU;竨O8è쌯šâ 8á,™Þ0Ÿâ³åc!ç&ñ¾·«Úb])÷ “•<ñ„óÞÁßÏå©ïŸõZ¿§#¢œ’¨¹#‚skœÜ.ü˜à¿Òî]Mì%v/£vïcÛ{f£Þ2ëòÛú1ÛzAHNýˆ$ôóØH‘À¾y1Ñ\ä¨6ZƒëÀ6Zƒ‘×$!µX|òIè»=s¸ÓôÍuudnf¡óðÖóÚ"¨jiHOŒ½ÛÚÒê¨æW!ŽÑv:ZˆÌµ0t¦Mƒ*ÔÊš¹ÐÑ\®«€A¸«ž{é«Y>X”³2m[=L¼¬ZaCàM*÷Í}6´ê'.!sÿ „׊Z³žþÔé«ÏàäÕg`Ai× Ú"ï©Âß!þš¶iÖÔ­¡åÁ>½ L;ŽéWsüT`†_c?å éãÇa$¯C6ÉÃPš¢U¦ž_è :Ê œX­)M–¶â˹ؘù "Èp“¬y¿K³ç?œ}†‹ a¡îÍÃ'HG¸ñ \fà–j¯ÀQgì¹Ü„å°Ky–Voë¼XíGçó6ñÞ>à“‹ï¼~æÖÛ¨ÒÜe8Å$^ð)/”ÿ·Á¯! endstream endobj 2594 0 obj << /Length 3301 /Filter /FlateDecode >> stream xÚ½\m“›8þ>¿ÂU÷a=wc­’€½Ê‡\v“Ên]ö.™«­­\j <æbƒ——Ìο¿Ö ¶Á`#Ë̇)¹énÔšÖƒžÁ“~ûy‚ üÉ“”ÜLÁÈq9œ¯'Ÿnþ}ƒµ×LœŠÃ»CÍ.ò0xŒ € Å¢™ŽB' ü`’Ç“e¯¦¡ú)üâ“Ú€RL„´­~Ý3Mýu/ ±p¨‹£À ®à¬T˜?NÔÉÇ4DÀ‚†Räð@aa±‰dðkE“Ï3Žñô•nlkÕ?/vP;¸pŠz/Ò<€µ‡¢Ì«EÙ¾ö¿˜aøSHlÞc—:º.FØqÆ‹nS¿et­5‰®ë"Wg„KÃô—2TqçÉâ¡L ¹+býš¢ø[²ˆÛ×܆UQÍ/ºîÄç®H«0- /ÚBgdÑÃñu&À%•GnS¿%p­5®ã —‘¾´t ¶E™mŠ|ñ™ìþãûwo~ýχûÆE"}D0/òMý–‘·vÖ$ò„ 7p.Ž|˜?^ù´X´SÀù òÀC„òÑ‚ØÒoDkgO„ Cèº*d93Äò8,›)½W6L£‚Ñ@Ár5дx"¤ñz˜ð:)JSèøß:Mý–бvÖ`üs?@Ô£züuíX%)Ä»ÃÖ™º¦»p0(¸ÇãøãÁ ©ßÖΚÀÀó#LÁ`™åÃFbbZ+š ó$&—‡éc|- ý0I\ÍãFCRS¿%’¬‚$@C0æ!Ƽþ„2ýܘ#@}¹'ÿäÛpñÕ 5]è=ùNxÞ]ù~^üéíûPÿh“™œ¾Ž†é†zKHÛºj’áÈÿ’¹ç97Ó—”9 #×!6Ä^ëØOr Õ'¿¦ñíÌalZ¥ðè(«T”œÐ@ÈiÿQÅéBK$…ú¡\…¥j5¢<Éæÿ‹eý{¦óx›ÇEœjá0ÏÃg-æúÂP7¬³[‡MŸfëX¿Ý6…Ñz ¦oêKk5LŽùÅèNü˧¡’ØfIZƹyJʕ֓jQ””I–ŠÁ%Ã5ƒ™TÀ¸ê’{¸+°ÿ âÜŸ®Â[kD‹7M3õ‹Ê²i±Š_“ôQý Šñ†dî„%<™Á t;s¹;}Ÿ*‘Úq ž#{ô”íRkœÇš¯ÐïÃëÇW/B…Â6 „ÔR;Q*^æÙF›’Á…¦=—«L»«­Ú•/‚oeô}~Êv¢«g®ƒª×E‹žé@x°“(!á™dºAÁ W¸^ë–U\ËB§aÝœ'Чwªå9«ÔÉÓ-ÁÓ¬ZGúß<)w*ÔQÝìÐR‚ 1Çg>EŒWõ¶ôÛ%v{g 2;ó=ä×°¤/HÇ s×áã™ç"ŽÇ«E[ú-ãkí¬I|=ŽüÀëïIvKòᢛHFî ÎÆ‹bC½em]5‰!g(pý‹bøRCúý‡OÞ¸ü´iÔ¡€àÁxEwK¿eÜ­5 <£(ð‚‹ßuyœV)Fž;ÞkΖ~ËÈX;kJÖ¯ ¢° _bˆ­‹p³]?ÈÊÝlÚn “ 4ƒ9‘ç÷‚±¥ß2ÖΚ@Æuæ¤3ÓÏxÕ“VÓ K|ä“ñÞýµô[ÅÚY“ 8"õ@6&Žû®ÐŸª•ú:ƪÆ-üMý–á·vÖ$ü0}&T¿G|™øzîe]paUK™áà¡ÈçÞ‹jÔwQ@õdô·U,ÙGóœLÓ8ŽT“"MÁ® ‚Bq;y©kò…H* òPüþ¤þùôT¨òlÏÂB}Å6Ïþ|>”§õëÜ.ÆfZ5„„5ÖÁy*•NæÌ-õ*:ˆðF‡íKŠæ±j¨Š8Bšâ>r±×¤‡^¯ q“ôc&ùšÀ©IHh›?«c/»VëR‰<©8ÀOÊ%8©{'8ðš%³)U¬ã2Ž Ë\¼ëoh_æq\ÔvµªM¼Érm:,Šl‘„¥ r ƒ,ô Œºtzëã©n,ÊDX 7׺ÂùZŸ©+e—ì]?ä(u—hëœQ\j„Y×, ™ûLB0FØ£»Ð—«¤ÈžÒ®°SÁrµ¤¢òŽÕ!‡î¨Ç·áºˆ;¹G1«ß©ÒQ'¾ƒ÷w;¯¬Ãi*‡Ê^Ìù) ²P+:sö‡Z“¹ ‹ïWáÿ3L«e¸(+9{T¼G³'0a¯ã‚ãRPÒòáG9cØ•7 ënÇ®db—–õá&îÚÉ ƒž^b÷8þ ‚Qï” O0ßè}³¡JhСCô!€ÐJGCC2qŒÃ€»pX€§¨ŠBQ†iæÑ ü]Ãô‡¶e¾éGÞ5ìîwÞîyÆv‘çŠM׎]ö2×qfJê`Ç#.#|:Þ²±–~»¢u ÔPžyw¹L"–Ô²ñ)¶ô[¢ÖÖÙ¨¥r©^'êÏÓ¯fŸ‘àLÐÚ߯¨³"žKŒ›Pn¼ðjkõT:Sït£õjÕN–®Ÿ/›˜l²È¸Œk~ƒñV^¶ô[bÚÚY“2ÇåÈõ5—®Øù2Ž®›IV'%44%‰ÕÁîxŸÛié· ßhÎêÎ Šå­3šú-;ÃÚY,Š(×+ˆ~ϪÓÇ•\ç3H6NåÚÆ¥Éf›¬ ¹dnXi¢^â ¤ËarÏCûk»ÓëÖìU_•é™gõ{ƒ'VŒÆh£ª©ßrTY;k2ª°‹Ö/då:åAAX ¦ïÒËÊ€Å*ÙšV'o‡~NhS­ËdY¥S‰:Óê~ðgÉ6á`êÙ 9<‰µÛfÅW´ÈX㤩Þn˜X»j0Jõ&VoUMJckÒè¢íݽ­*³ <Ä'úV÷œÿ|¥˜ÊöíÊå–®´sS¤ K}Óô3Øÿý¬¶[ endstream endobj 2514 0 obj << /Type /ObjStm /N 100 /First 963 /Length 1894 /Filter /FlateDecode >> stream xÚÍZßo7 ~÷_¡ÇîÁ:Q¢Dit-º Ø€¢í€mARç’MíÁqÖî¿ßGÙN½úÒɱ‡æ¡OÇ)þøHÞÕG"ãLÈÉp4>’7¹à¯C!èBÆ.K/(šÈ„w&•ˆU1¤ d$§‘²åP°›$}FLñu%r•™@Q½é²¼ÊðÙg–ÅPô¢b ”`©8C‰Ò\¸™RÝ-§{@e_©`¨}KEtÀÆ;芑t‰ ŽpXÜÄQ A)Ü‹@B€)XoÄ [fýa„dÓR•r›J—š WóÉ»ñÊ ;áÓvF¤Š wgÄ6÷&# šž6^¤\߯ŒîÉrndFCf ÖâS ü;;îØc'!‚»WBl[#Ð>˜¶Í½)IFÌ.t¡­ 0Û˜ÑIÓÒa.ü Åîpè½]ÈnÀ…ù`L qianèœ×+r\”cËë2– ]`±moÒ+7#ÊåÙ²”ÃtC®[¡B !øÝP0€H6PnnKþåbDŒê,û!ˆÈ¡Z A“C _W5ïë:°¬uSŸÖ!oOå¾X&BÙ§Llsopƒ§ÔÈ .ä6fòÞb`lc.¤Ï«ÕCØY‚÷œ%¢ßÁæ ´w–pÅf¨ˆ¢³=˰z&ôSíMÊñ‡‰-é›tKÚs´IßÇx¶YR“bçÓùøÍty1í¯ÎýNNð^Ãïvñ,ÎáFfÆp”|#³'xƒÚ˜©8H£”¢et£ÓnE><ƒ6Å9nŠóZí×ÇŠX7áü^,é+=ŒÁ9êÛÄTi¯Îon..úVÏÎÇó‹‹£Î$Ð3Zå¶H×fÝS[±ùkü¾?»¾Y¿>SÆh„$Y×gXÑrJhUÓ Æ}Šß6÷:it¨,ìÛ˜“”:‰61spVbhdF'%¼wƒ¯#˜µÓpÒÀð•ܽ0aÛi¯á+ ÍSð‰—Fæ€ipø`„¾¹•Ùcø*E´ eÀ…â†õ´u‘5‘n‰¼!¾ôCèä ÐçÓhƒ¶S?±S}nA“¦Rô½æï*ÜuONª€îñd9Ϻ—ݯ/~ÒÞ.—~Ûu>|°×¦—v¾¸ìžÎ'Þºn:;ï?Ú·Ë÷WßÜ©ÿ­æDC.V¿ÿdt'õ³Š³9”£¥÷Úi¦[5=Ê$•ƒÔ\•Uôþjiéjõ-]@¼x ý¤ã˜—ðÕô äУb£mÐÑG&èGè‹=Ñ^Z„ö)•² D’îz¿4ÄÌl]Šm̑؆V58'K952CÁ·šC¼¨«¥9´ñ¾•7ØÁC¼™ÉS#3Ê5k,ô­î«ïØ_1#Š|nôµ¾‘Fcx$ˆoT‚ 4ΆÓÏY©5†àKœt.¼[€‹?¸·®²…ª²žµËÎè‰3þ3‰V].˜£¾£>%"d~¬0¨ßùêÿ˜ˆÐ2KاÝæ¾ ÿ‚í endstream endobj 2635 0 obj << /Length 2579 /Filter /FlateDecode >> stream xÚÅ\msÛ6þî_Á釫—Õÿ È‹4[eò¿¢Y|6DÏ›G³‘—ï/ Z‘š ¼yui60‰«ÔÐÍcÜtGvœ¡K0MƒËI'þhÐÅw¤³²64 òb¡c[šWYbìWËxe:aYg þX`JõçVÙC^7Yeê†t»ìi#Cô³k3ÈUY5uöïÇ]^$‹uš“3dŸñã Á pµùaHß‘!ÎÊÚ0$„b¬²\/š|µ8ÑŸ“Ç|µç%`ø„åE·†^”Å}þ°®²ÓH9É’w_¬×‰áš›³Ã’{' ¢€sæ$]|G’8+kCئÁ-IÊU“—…Ù¼-d€7t™Çr½0L;î²IË\Éò~böyZ« Í×Y=1󳨔ù'ÛrœÇ!ÝØ»øŽÅËý•uÄGçTþ ¨ð6§=|·9õ§¬6†À@D‘?ctñᬬÉBÅ8 ´Õœ$¸rùdÓËùUeN‡Rº#Á6Íž,B³’ÓÆÍ;8|ý'I¥=fO,Ç Ëñ‰eÐe|Ópñæ’xGô¥ª¶S5·7StñmᬬE)ÿ˜EŠWe“ÚìY”¦™\¿se\äÝ•æ…zjXÛ]]ßšw§î 6.ÝÑñ2l¯—8I¨ªÈ½ñ§‹ïÈgemø#-êf^‘eé¤UP­â*n<´ âzREŸ«xµÚ÷ÃÉ2Õæ±¬'Liy"Ã}4:X¨Êyo ëâ;2ÌYY† Bª)ö—熴IÓ*«kÓFZ1må¾\›Þ-Ê‹‰»'åºY­OkÝèO¿žÑE½JòC×̇¯Ù«¾¦õ-Vµº7Jvñ)éMYm Ä"þ±=|GcxSVª’Ö›1ºøŽÆð¦¬2(ÀØ_¨‡ïf Ên¥v;m0"ZŽáÒxøUo–;Û_¶¢„B­Hý‰ÚÝ0qrŽálÁ1¦wjÌ|®^/^¿»¼ú·zµ~}Nàì¢ýïGýuûþÕ»ùΕS/I¹\ÅM~wŽ$°j[÷÷óÀ`Ž Uê]¬e&W}{>å%oËú£\Ø%…³wkYòlÞ½ÿT$ÙïêïÂßêxóÉÓwM¶Èy‘¬–_l6ø´B$á£Pß yßÄͺÖBš¬n¶7|;Až! 8(„€sÔßîl"Q/&ÆÀr!U=ç! 9ZŽ¥TCèŒi×ÚLLC)L:!ÔÖøO\¬ïã¤YWçHÌtŽÞ±„äü˜FÀIO‡×Ù9¢³§<Éö¥‡’‘N$@$éד~/³CÁ ä¹{óßB„Ç!Œ?BšÿÖú\òÄD0ZbꆱõC.¿gØzà!?P.Ã:2é(3ì}S~ñ¾ŽäNvÀ)xqÀ]âd1 ûÅ ­eï;¡„Àª&spB3ãN耱uBF|'”¯0Ò¡àòÕÍœBê‹Aì'Ä^_^ñ¾)„¿xß®ðbbi^q?káûî×ö‘¡pZGOÀIÇ‘JGÈ%"€BѾ[òëOYm ,ƒ÷×Ãêá;Û²Ú0Úøš7ctñáMYe IáÍÚàË=|7cøSVCp€#­”¾£1¼)»5†,!ÿS æD€Š9<\1§‹_WIÎÚõƒóÍ«Ë9Èýl[ýõç¬<Çtö¬ÊÜ|ùà»U ~‹+Y¶‚å玖¸ë¢-rõ­§C5.ŽjO^›Ý0TZ‡ŒàIj\,ä´aa[ãN¢Â6Çëè`RãN"}›äu¤¯qíåîÏ¿„ ı¼09Z^¸`lýC@Å4åæ2gåĬÆDð‹÷íJî„¡ç›Bø‹óí ß ”Ã>h-~ß%D(ÜjŒ0FV0é’\¡¿Ë"† ™dß-_ð§¬6†¬a8ö—IöðᬬÅ}rJž#¼=3«Ž¦Äæç®7gövkx·ËzŠ3Ymßqbœ•µØ‹e©Ž•EYØn Á²8ÐßÝÆ¾£e½)«Œdq&ˆ¿»=|7c¸+kÈ’ªêóÕ6Ùœ2ßi|Žeèlξì¢>°÷ãgËm[ö|ŸÞV 6Ýo¼3Ý/– . g zøŽÜtVÖ‚›(Bq}"ÍÚ*Ñø`q\w‡5U7ÆU§Ý':{›îÞB\γ¿^tÞÑ}©ª-Á(ˆ¸¿Ã=|G[8+kCKÉ"^~xóg­C¾V óuj|•( ÓgR\n³Mã¢Èõ¡í›pd7uyè">rÈÁôX~RJ½óˆh}xQU˜yã_ß‘ÎÊÚð  ;ÚS¸‘8ÅÐÈá"›ø1~ÊNZWõ§_ x%wS.û4þj„Æ›ÝØõÉk(Q•«7Ïíâ;z®7eµ1ÂÀÈ_穇ïh gemh2 lYy&ëªÊŠfúcU\›u«…7uñ 䬬 0ë•°Þ(Ãà<<Å‹uf™RÍ> Ø;Ún¹dþ—ÿþº§Ëûä”ÃIÅO*ÁÇéˆTO»øŽttVÖ†Žˆ²Ý´1A­5w/CWx*MüMëÞVëp¯Ó†ñæ`þ¡Òžé6à÷ÿ½Ù3¹½·C¦(oõbZÛ’ JoGoStñÉ嬬 ¹`(Ô·)LO¾æ…]öçrþô¤f¹ªen=q¨Èâ&7­8uì¨MŸ4úÙ4 ,Í#’õ©x¡ús¾XÔ…w#‘³ªŠ0 DßM8cGWœCùû`ôžBù(7ÎGŸÍÓÑUU¦ë$s¡éøóÚÖ˜·Çåí€;>+ÏMM §P¡·;Ú³ûj¯q¦ž€NŠõÖ¡~‡êƒCO¤'Òzêü¾íéÿX ÑL endstream endobj 2677 0 obj << /Length 2015 /Filter /FlateDecode >> stream xÚí\[sã4~ï¯0/ÌP­î†aXX`–åÖ·²Ã¸±ÓxÖ‰‹í´,¿9’ÛØ‰S¹²`‡Ù'ÙüãOŸŽŽŽ5…Ñu£ïξº8{ö-‚]ž£fE‰“ü›E&0f‰9?7í‹2»MKs½œc8+ìM½JÍÅó¯^¾þÁ\ÿüõËó ‚M»˜#8[ù9¡t–UE×ib~J²ë¬Žss“¦½*â²1•´+ãþ: £sLá̼Òóm½*ÊÏ4¶¶ñ"n»Ípgߦå&Þ$éßæöód¹ˆ«:ÍãâËëuœå`Q¬¿hl4 HEˆý­ŽëmeAÓ9b³¿nÒ2[§›Æ×ƒ•—ëaB7PûÕ_xÉÞÂK•’Ëû…wZ  žÉLIÐ0vC÷Ö}³F¼Ø Æm¶H­Å4âDÖ©¶ŠIÏúëxË»`ô)v†Ÿ)-ÂÓHÏg)þÐÓ„ª# ‡˜ùa´:”\¿*= ðˆ™TzÉvÆ›x3¬¾) ·êëX¾nÃÚ›Âv«½Žíý=,ÁÑæ%(&o~r{Æ#+'ãº%Ôgå|ÄÃA“¶¾_žÎYKEA“¶¾'ÞÎîËëÈ\üÚfSÈîÇé^6Å(Ó1ž¶»÷Í2»Þ–q›NVu©ó,áì§›¦oÕKÁfŸ™?tÜëNp;0ê‰%à Lßs`|=2 \Ú¬::#j3ÀKøf¾#÷ÜÒ:À½ŽÞnƒtµ­Ü:K·~IzŸ±ìåÝÍ/¿C½ž;µØŒsO.ú)䪤ã¬RáÓÅ÷TŒ¯³'ƒ @Ò®¥—hbÅTyQÿ$5{á []xOÁøºêú[é¼I§˜FA/—O %úÑgÃç.£Ì1Bm\«›t‘-³4é»ûéé)ÒTœ ,³²rõe{sS”uÏ—Ç…K›M‹DÁ”ÛÃ÷“®¿³c´Ûì(Ú"sT;ƒ†‡·Øn·®wYž;ÎGãÛêP·À1ÚQ)Äá>jôð=EÌYK†ÐûGN‘ÑÅ÷$#˜³– nrý`dtñ=Éæ¬%ƒ™Œ;]|O2‚9Û’bâ_­ãÓÆˆ’u|vºŽÏ&¨ã·ešï ëïÌm±­o¶µ¹þøXsÿó¡Ïò_ÆS³~uUÔµ­ßÇ»›ìËu:Çlv;çlؾíññ‘"þ]ó ¢(ßVƒÕ{¢[AýÊ÷~¦nJ¨TáIê÷D  9¶~?‰ mµãƒKý~ëm µcýtý~¼ÝÃñ×ø4Äãõ{G“õ{ŒV‡DçŽDLR¿'TLLÜê÷“¾Wß¾åW{aMÇ“æ65÷ÃbœÂ™{1î;³©‡59Úü¡&5> ñx\ñÈJÎWp¸z>:àáÒú¾_¾ÎYCV`.­ïáû‘áïìˆz>V» ¸›®¥ŒÄ¤RN}ãªÚ®SÇjM½Šëc%?2®L©ß¥‰jèôSë"Ùæ®žÅ¥s™§>(Ü ¾náJ‹£ñ"à§Žµ,1À4ÜŽ¯‡ï9O¼3O$ŒØS«×Ùm¶¹>*T|Zs‹U¼Ù¤ùÄŸWšíÉ;GÈÝÖÅUô›äýyÉûcSn!ÊîÇÆP±ÐyŠ ·Éïá{êßÛÙ1ú0a7–»ým5Pp<6"ë!¹èwïâ~œWSGÐE\9|ˉm¿ ß§§[ìZwÞ¥ûO0°ˆË¤;“¸ÎŽq¸ã$=|Ï™äíì˜™Ä àÈž ˆózUl¯WÎJr óI1ñç±›Õ»*[ÄyþnÔ'¬'¿yB¢7â ¦ î0PßSÊÁœµd ( w§‡ïI†·³cæ5EºµµÜ×®óªÙ.ôsÉ÷iž Op·òdÓ7óÉðÇýzÚÐoCÑ*.×#?ê_m§Ž\é_u]C±”†;ºÔÃ÷œkÞÎŽ™k> >’úçJ¡¶TwE€)sW”oû¨¹®nhW ¦±¼§ÄB¹j™€f‹ŒŠ.¾'ÞÎŽ™nP‰Ôuè)³÷ 50=|¿ñvvøRHþáÌïã‚‘f‹L0]|OÁø:{B0R›€èÙ_É 8 Wùëá{JÆÛÙG'‘`@QüáØï{{ìq³ó ¦Ý.¾§v½£]N5>ùpì÷ˆh˜ÙBMßS4Áœµd„WÕêá{’ÌYK6Ù~02ºøždsÖ’v9w0.:ðžT„rµe‚)P€3¿‡g¡5¨9Ê=ö8ýÜ0r' endstream endobj 2632 0 obj << /Type /ObjStm /N 100 /First 967 /Length 1208 /Filter /FlateDecode >> stream xÚµ—Íj\G…÷zŠ~ôtýõ/£]À8^$1^g#Içísª„…÷MÊàl¤¾5ßtuשÛ}†mÒ ÛšEÍÿ¯²ðÜ[+$ê*4–¸0GDð'"Z„"bE,"½hÓ FQæ]Á¬bâjŦGˆJçˆpé#"RMhÝÓ•Ù"ÒË4ÁÌ4Ê\™e© _/kÎ2†jâÁd"öyÛ¡î1Æ~˜"ÆYÄðUi>;6ˆmGÌ0ZÁõB*ÝG˜Y'ùh2ŽrØð˜ ‡¯#ä輜È1PÄ0ódCLEK¼È‚ùÖˆo eã˜iÝ¿¡@ˆœS|@1¡EL\Žˆ¡t¢ù£ˆçPL*3b£°rpÈ¡!œ+c¡œ¹ö!Ñ£¢åíŒ]èÀl„z†Ç1]b_Ï ý ÉfhH¶Pu…Ú¼z„f‘Ö[ù÷{o…ˆ(Zȫܣ1)‚m &%Q‘P²wŒBÉ>Šh(‰GÑPÛk¾•æeèÝ1äè¡$š“r`Ý2BIôŽŒá5ƒ$2C$—Šß€;ÊŠóÚà¥P|2F®xŸè@ö÷Ê¡îžÝ®¨†hEÅuí„L—eú«í€Ý«Žˆ!™±Ç «Z´v =ÚM¥QþŽþ„¢ëâòòâô¼¼F¿ Þæ—åôó/¿ëÕaVýzóþÝ»7Ïžý;¬ZýåÎÁ"­žc™«X&ª‚]æàÖªB»ŒÊV…ä9xÌj8rpÕÐÿ)§.ªaYxÖIÉ5Ûu¦g½Î•]s·º$ÙGfZ×Hö‘¡éZRmCϵžì#CÓQvf¼°µeÄkÖÈÂèP³dåê·p6®~Ïæ`V¨mÿŒû´ŽìûêpKÏÜ  NìL‹*¤(4[eJŠB}U|„mÖäqDŠs@“ÝŒ:T™É*ÃÙTåì2H+n”$ܤZKJ²¸šþC‘«Û›‡ryYNW„iÆãw0†±û8Æ›Eòô$Œ{éé þ·àG°ãxŒL~zqwûö§óCy]N/ž_•Ó«ó‡‡ò”÷Õ_žñÁõïç‹ÓXÃùæáÞ¯}óï_œ^žïoßß½=ß?Zˆýxþíëïo?”מÑnRØ‚©„wã ò]ßawPü'Åp¿÷TŒïÊùþp¡4Ù´ÑgôÇ{­3²da£º4Éj«îir°àTdN´p8Kn‡srÍ&iO³Wš# {´…û=Ú¶·G[VìÑ–{´…ùÀmáv`v° ¬™“°j¯mô,lUFRꪔÔG"Nºd•pzµdµÁh²Î‚>J+È6jÏv(ãÿJ®?aÒ’Å`±Ú(»d¸ÿ©—ƒ Á>2;øÐlá#C°… ÁÞ‚-zd¶ð‘!ØÂG†` ‚-|dvð71ßÚŒñ¥öU`~aÀ}b¨2ŒÌ±ø”þO °ƒ,ÀŽ=´;øÐìàC °ûÄ’) ~`γé%þ§—l83÷®eãj"µ$Œ«iïZv0®¦½kÙÁ¸šö®eëj{ײcÇúܵü "Üô endstream endobj 2718 0 obj << /Length 1775 /Filter /FlateDecode >> stream xÚí\Û’ÚF}ç+ôUa<÷‹+•²c'.;¶sñ¾m\) bW ‹6l~ZI+ £q\ O#Äèto÷™žž#jqpààÅèû«Ñ£ –AFR\-!‘4,PFE‚«Ep=~ß…‹hòþêU:[fK–ÎæJ!Í(€eµšL©ÒãGv ’¤~¸ý="0 äÁ…'E0¿]¿ÇÁ¾{`Ä>e3ïA0¢LÂõ*x7úu„s¯qÝ{]ñ§n}îenÏ×S’º7[¬þ¸ŸGŠiýNíø<‰>†‰½^N(Çù‡ímh/ž>ýòíOöú—g/§Å8Ÿ<¾E“)ã|¼ˆn¢íle¿‰b;~ˆgI ¾([M¦”#&…ý#žî¶·qòÐõU¼Ç/’(L6ŧoÿ\ÛÀ/6ì.ªXj<:›ƒBуã-u|Ç`8;›&7½ø­h—HÞ¾ñJ»$†â&Šfo½ŒnvÉlAgQí›ö!¡“’¾OçnMÖø±½Qs¯¾ÀóÄ ËøKLß11®ÎHƒTˆ§û1(ݯ³4\ã÷“,¸Ó<¬-±‡êÝ-Iv›nãe·y‹°ìX*uúÍïXàV¯ÇqÆè†t§HWÆ`%ÙajðŽ|qtõ]°FDäé5˜.›U¼ýÏðE† !ÞÓÀwcŒ»³]JN"a"ÆX½\žWJàÑGíùëΤ¨c…ZwÜ܇óh…‹¦»ß_%é9¿“e”lºú²»¿“m×Ü…C‹ÔwëøŽÜuv¶wáKyyˆ9» µg7Þ­ݦ~ŠV«Ž‹§£ñÝfŸ¶¨k½ƒ“1ÌgêøŽœñæl 8¿aÆý£Žï oÎæÁ¶Õ÷Œ:¾c0¼9›ƒÙ†Û[0êøŽÁðæl ‰Õ.bDËØ®Ó‹T’æA¨WG…zΨ³P_bH~@¨6ñj–îÑÙWçËöò€lÿ&šß†+«Õ¿žÍogÑ:Ì•û»(SíÃ'ÅÅ*ÿÍgu ŸÐð3õøó}˜Dwáz›7ʇÄ|Î9’Â8©`nVD… ŽÅ b>ÚbCûŠùƒ¸PÈ©5ºˆùƒX/Õšõãb~»ûùj5ËóÅüŽ GÅ|Œ‚‡æ‹A´|Ë3ÕMËÂnɽªá²Âµ3oÓ%ñª¦«5º}­ïÓˆp{yƉ½­·€C ùL+¯m[ß­Sñçl %½¶m |Ç`8;ÛCÈgÊ@}çÿ–Ϥ€…åO—mà;&ÆÕÙva‚Á¦À¹¸ù§#x&?zcLß‘1®ÎaŒ€QË‹–ß2œ¥ªŸ7ÆÔà ãêj1”q‰U!ÿ«òYz`Ñþ^B5ð©ëìlî2ç"}Qò†Ĩ¿·? |GÒxs6`1éïµFß1ÞœµÁ Æöú¾‚ÑÀw †?gó`hÛq{ Fß1Þœ-‚! ¬Ê/ªäS‘0êAÉ×Ç”|M õý|%ÿ#ž~Τóýô&ÎŽ½Ù5œ„·™f¯z?ˆ†Ï\4|’þ:Äþ0ðlÌ Ãj§D¤¬äå¬á“”°½%üA<(dÔª ]üAŒBjÕøq¿¿Ùýä„8.žð;‚ð]0 Jƒ¤2ƒ(øD±Ê¢?¡àb¸ä^ÕrYÚÚ©7„í’zUÛÕêÜNÁÞæ÷)ܱ„õ†8±i®ê½ßÐ>aÒk¿ÖÀwkQü9›ƒ ¯ýZß1ÎÎöðIZa‹áËKø„ðLˆô–˜:¾cb\m—$à&RŠ_$üÓŒÁ,½1¦ŽïÈWg0CÓDÄEÂ?MC3¹Ïcêðn„qvµ‡ ýò¢àµ >X$ö÷²²ïÆ[gW{ðVs¤úª÷ùCÿÞ‚CÈ1?ç¿[üê~Ð endstream endobj 2751 0 obj << /Length 1960 /Filter /FlateDecode >> stream xÚÍ\[oÛ6~÷¯Ð£Ì,ï—bÚ¦i—®MºÔÃdE Ør"À—L¶“íß2i×”c‰2͢胇úÎÉ÷R:…É]“÷7ý΋wòDÅ1Oú£„qÀI„ÒW’þ0¹îžÎ&Ù0?ùÚÿPŽ‰Ô£9)GS!€$Xƒ­JyÒÃBv_˜ ⨼©sÖïüÓAzLÐ7XßÉ’Á¤sý&Cý» TÉäi5r’0&\'_:¿w õÅÊååý62ÒDP 8Ã%rù=Jª•£URdÉh/R#¾õÜÅ_{éca‹…UDg-Dh§i<2\ü@2¢9kÉÀsqÈpñɈæ¬%1 G†‹HF4g×d` ¤øæ,QkÇÏÀž«M±r+iZ‚¸Î K“9Ðè*Y®oL®{¨L¢ép|ó0ÈBÈdÕ^Ï\_¿ýx~ñ›ùüùô¼WŽøõj¥·s:Lz˜™±õz¹¸Ÿ/OzÁîÙd’N—ÙXã0Øý|‚X7¤Ë¡ùùçÌþ<¬¾}µœæ'˜u{³|‘gÅŒŠ_J›¥¤ÿ BŒ‘/‹t±œ[#Y ûïCVä“lºHÇ»«G@ ‘pŒAªº*­U*$—›UáÈ@g*9«ÃУõXÆ,„ÑmÓÎ%ÀLë\ƳKé'Íæ(,–Å ’ݬØec tØÇL(´âÃÛ•ù ÛµNÓˆG²N!Òs¾bý"dÏU0zˆÝ]ý¡ÔâÖB V¤|Nÿ’}¡oö¡êŒ’CÌÂ0l2%D­U€Ï…!„:íp›LîØ|ǰ»‰½mÃn¢z>öŽa|zÛÆ·SéÞlm}'™®% Êaí!8&èjÑ Xà p}%ñ Í ~X9ÏYKÃQk« ~ ÑœµdPÓHÄ#ÃÅ$#ÔY» ÚM2]%`(+ýdi>V©¨gk½ò_q—˜W«ªO§¬nšßäÓùÔ)÷.²tèŽtå‹{¿‘‹{OÈÑl<ž=åÓ;¿áóÙ²dójн4_4G“Ô{ ï(º‚MÑœµd®·ö$.~ ¡Î>3µ„Þˆ#¬¡ ëÓ†©5_¤Åâf^ šÃ•@=¾uþþæâò϶Y›Ò4š4.~ 4¡ÎÖHÃ¥Þdc?iéôæ6»Ë§~ú`ºÖçÝåÇU‰öYYÝÐ?ÿtvÕ<áõ gõÛF3…p´pñ# ÔÙš`zý[Ÿa7DÀ`6}Ì|§'ÅßSMjJâhjºøj†:[£&å€ ê?Ÿ³é°íl>½ü㢵>ÄTÈÑôqñõ u¶FÂCÌs)œ=x®„¼F›ú©vqyqÖVKl*åhZºøZFsÖ’¡±HÄÝ“HE¨«;‘T爦쎸ï»W)3Ò4óÜU îËÁã¹çl9_ø¼õtV/†ól°\äž7¤SÏ¿lU{îîŠÙ¤ú½ü‚úÜ¢%ùïPâQ¦Þ5)*øa³"ÜÙ6ÓbÀ‰=dHÇc? îSßó>˜¯ŸI7A¥Ó»cxZd£ê ð:,Ö?5õŸ.¹o†õœ?dƒ|”g;yªOþOÿòÂwß›>¦ù8½{"ïd£æàñŽ]øÀuµM„#ª¿²os ³Í[Ê‹}7¾GËùn$zïË )¸£ÉëâêÍYC– o“ZÁ##ž³– aÊÞhd¸ødDsÖ’ÁMå ?Œhήɠ@2ö]›0V@­ß/›lèBÂ]H¸m’é:šRÛ…ô&+ôo—¶éÖüôjœ¦¦ÛhõõÕ·„Ä<Ã<øÿ0 Ó/‚42‡JÁ}K¨ G¤Úö-Å…uïˆãƒOßÒQ¬¯›Gëõ}KííîêÏõl6M ‡÷-y‚Ôö-…`¬ã*}•Gi\Be§~KG1¼‰¾mËÛÉmOìÃö&ö¶mogßý!ØÚünR½Ü‹°öË0ÖETvBo—wÇî]BˆE-É*øaUHŒ‰PW÷¿/Mæù\öúÜÿœBõ_é!ÿqÊÿ%þjc endstream endobj 2715 0 obj << /Type /ObjStm /N 100 /First 968 /Length 1207 /Filter /FlateDecode >> stream xÚÍXMk6½ï¯Ð¨Vó¥‘Àäß !Í¡­ÉÁ¤K)»Ø¤ÿ¾o&‰qÛMè!½ØÚç·šïynm£)QSk<·µ=â÷l$ x£•Èj̉ìøÑØÇhBjb‰pÓ¡¤©&¢Mwr¬™$2›­D¼MNdµé‡Ýœ Æi4Ÿ@­5á¶Lp3I[¡ÊthªÉ†#…ÑnD‰ C=v8…e΄ÓNŒa›$ž¬Ä´‘²Al$õÄà£äA„ÍÄV£9B}¨N3Å d„Î O#Â<­[i¦@ØòðŽ€·)1Û3y³AãÄ'K vŽ~¦Ð‚V¸D Á¥*²'Ä…ÃMᙉá[ ÷ážšÇ Âl$†¦‰l;0Â_gèã6>_ê†+y†›×¡ãÝpó^É›MÜ¥OÈ‘&”_]8ÍÄvÁ«Âq»Odïĸ‰(C’@d%¦MT’g8ybaœdØ •a³L¤ N1-0DS"Iq‚Œ´Þ¡šø&È@êÉJs2ÖJdlN 2v¦DêÈt€¯ud:ø†¥#°E”þÂJ;1”뀌…0ñJ y"’<ÃÉ#mp±f:¬‰S&>lVËÌG¬Õ,1³È}GëÌäGê\~¸¸8_¶+”ÅD9¿nÇú¹ÙìsK:¬i7Þ¿{xöìßÉBµHÚ=Ì/’WW˜T#ïÑAJdÞ³—¹Ëº¡¿8¾>Ýß~¸{wºÿÔûûþôËo×Ïo?¶«oÛ:j[HĵßBÞõ. ¾&ÿ‰ý1íÿŽf—°ÈWr&uþÂþì-L¤ƒÔÈ3 iS•Œ›wõf;D‹dTÝp+’£mÒ,’Qud«F6Tí¢Ÿ eÇEû UÇ«èfCÕ s‘lÒecbÈ'¦"Y÷A»J¦ºÎ²G]g<30÷Š~Æ› s¯˜Gb’«˜G¢³{‘,˜’³˜tŠÁW䆤UÉ#j»žPY‹7ã]ßEW•< s‘+»®2ñê±ÔÈä=^¨5ò˜ÕEÑÜ—ÍÿÙpBŽüc8éþÏÃÉÆÓá„§.VН§§ìÇáÄR%ǼÑ"Wž*T$Ǹ9ۭΑ}y‘lpÆ<÷"> stream xÚí]]sÛº}÷¯à[í™k~Üiï4½N\ß&v›¨ÓvÒŒ‡’(™SŠTIÊnúë Š #RµðIgÚ—H#C«Ý³ÀîbÁPgéPçúìw“³Woõœ„÷œÉ‘ñB×ñCõê3g2w>ÿœ¯âyrñyòK=Úw5ÚsëÑÂ÷Iàr¶„—ÜÎ_5/Ìcõ—ÎÞLÎþyÆÔ ê°¯põMéÌVgŸ>Sg®þö‹C‰çi;råHF w=õ>u>žýéŒj©) eý¶~¹ÞEv‰O…ã‹€x’×Èõ眄Aè°ztè±³8Št_KÞÅo¥„̰‹å‘‡xa2mQÅó‰JNÉH(Ã\ní@·“K§yóáúÌùtéQzå÷IVfzžîØà"Žæ‘ ÿÕQüó§"©â.rç‡tÉ¡MèúJÕž »øHb…0¡PC²á<ÁØ`î¿qX;6éâ#m‚vÀ&.%”s˜MþÛüŠIâûž=vñ‘6´&¬V$P¶¦Œ.>Rha÷84@qFõÖñ6OÓü)É–0ÏòÕ*Êæ°Á«|ÃFFp`–W°U\V±é"¨ìJXãLÇ´°Çâ…>aƒɽZg«Ñ9ñ”T@[?!fd/óM1‹ËþªýcóÁi6*C{lêâ#ÙdMX­ ®ZÓE© ¤¨üÊg\!KÂyò«²ŠŠê¾,f§¹êR5~òáæúþöî/¦Kž×Ä Ö ÓÅGZ+ì€iÒ>Xaìã2↸ækàFè ØfØÕnïnߘڒ5Q²5[vñ‘¶´&¬Võ ì¥Û=|¤2ÐÂBÒí–ê4$Â×éöšªÔ‹R“ªÙC=8-)ئ&ÑÓZÈÊx¶©’Gh¾-!l£``rWä«^ª¶ýœ’áåE™äËKwrañÛr‹>Î-𸅠"™lÜ"JS˜ "(ÅÀE2ZGQ¶›àQ/ú,0È ÉY¬‘«‹$—5aµ2ümønMx¤*°¢BÜìYn(WkOz³E²ÜQ•äÀc‹|]}q LzMnÍ,]|¤]¬ «•!› ×š2ºøHe`…Xú¥ ž¦ä'úùbK´IÀ¾Æ,`”mVÓ¸81üJzüd®ñˆ(í»„úƒz… D¸ö²ô>’Xaˆ ”>¸ÎÒ?±‘™P¦ÐâïIÞdÖ¨ÐÅGRÁš°Z¬‰ ­)£‹TZX“h™3P·ñ”›ÅË–ÂᎸ»$åȇµå:ž%‹$Þkøax)€ü%4ç£$¦)yo5:íñÔ'RÚ«”ôð‘$G kBr])™ÇÉ |T Í¡M¹OFhZ&Â&ä¶eà>ÎÀö„ÕÊ$ñ\{9j© kÂjeøÛÀך.:ðHUØUkÂk"?kªèâ#uaMØV”øîNÞæ©åPèy€«ìáWÝìôt· â’¾(ë cýø—ÕMÞÑ<½_Ï’± éú¾¼l^__½»¹ýCó^m‚—õˆ«ëºü~ïƒmŸùnW:u.¹ ®§«¯7ÕC^üxqé2zþ>™=¨û’Kz~•Oã²yûëyýþ·U\fqEfÿþ©Æ­˜OBWÿ®UTmJ ôt¡þÉ‹”ûMëž ®|ßq}•ò6vÞmZwwšÖE’@ùEÛ´>2'Ô÷WÖç¢þ†­ÆJ©!ôžº«SOí©Òu\…éK­÷Q¶YD³jS\°à\g<Mp®‚Zo$¸+ˆ/z2\ÅLž?ïíÙÝP*Ä‘f”)ŸïÍ~Û{{—‘â%óîÛ_[ã@0µ¬Á!û×Ú÷•ADx£Ö!—8Œ–‡Â'”qc3ÐC<”T­;ºè£×ŽãìcâgöíÎüu¥`ß³?³owv½Î—4ž|Ÿ‚Bñ‹¹H Â@†)ˆÀh)¨ŒJ ºñÚôâ$ǘø™‚»3Ý(8ÆìÏÜ]Sðaˆ‚Æ“ïS°þá» Â@†)ˆÀh)ÈU FÝq(ÈU¶„@ Ž1ñ3wgîFcG(8ÆìÏܽ¥`1@AãÉ÷)¨ üaˆÓÁœ9ƉPߥT)ÂÄúÃð $·W]êáã+{Âjeøj峘p÷ð‘ʰ&¬V†ç«W{•˜>Rha Îȹ¯¾úm‡´¼=/’ÇÞ©Ññ ÷f½Î‹ ˆüúưþúÎð W7#÷±\ÝA1m*»åKË«\YÍ·ØRÐÃGò-¬ =J¨ÛæX7†±Adðµ00Ïàn“¬Š‹EÔûa_]ã4Ñ„$¾Åv>’hhaMˆ&Bëp.¯à«àAç?E6`§R–~ùf/V*ü,vzôð‘B kÂ!••2Þ^B.^º1BÑ8wUHo¯Ï¢‡4VصsŸ0vñÚgÐ_åkäŸ Ž_ŸSýÍñ/¾5ÐôòªH–Kè–dëÍÈ}“ë›[óæ£u’ú’ðêî#ðú¤’èÐbÇMéXaÜ¢NÄÛþšïãÇ.þoú„úI“×ãy…0ò ÊÔíÝìêá#½+ì€WPI¸ßu³8x þD'Û¡ ƒÿßZ¾ñÖ¦ªbˉzø8'B {܉X($̉¾WfÏTVVF0…ªò±ïkXȉ²¾³K77›¤¾V™&euŸBÝ}º1½ È‚¦fcÍKºøH/A kð˜*¸Äåú!D#±cè±D›4·ÁTsÜÏý2táõ4÷¼¦Œc{]|$÷°Â¬Ð>'®çæqµ)€ŒÒ p•ÌáQVý´í&úSy²÷øó¾ä›¾¿ü긿@÷‹idv96¸öTÓ\n YÖœ¨ô!¤¨‹µÇˆ úèa8¸LÀ¬Ì h]çe™€/w¬’)/þh°)¼5<†»yûÖ Ù†‘Ðòì4YçiTŒ|ä³ÉÁžöKÑT:­9fé™haM"+I‰úøfûPƒòÐ Fpá6µ3kŠîâ#mMX­ Þ”L¬)£‹TZXƒV·µµX›<ÄÅØÏ†-sèƒ<¢bþÆM“URE¨Ç 0ÖÔ¬±¢‹dZXV0ŸÈöJtü"õ1ãü­\U8~<±)m„Ð(ÿàÎ8\­·hè}`k@‡ód±P®ŸÍ’ýkóC%Ý$[¦¦ÏCg´© Xóº.>ÒëЂnÚòí ?£ê0]سy<qÐhÐ 6i¶-stáqÖ@‹j°†’xRׇ§æ+àÕû×гˆ(+•óþ˜8 åJãl }üw”&Kð£ò …ëê)?>lÆå±C—[oÚK‡µÉ¡=jA“vÛr©.<ΥТ¬oPâëÒq™ƒ¹ ÝŸ¡Ç/ðˆt]äÓ4^qKÆ¥j¨"òùܰâa§ »*’½€¦y=ôŸX‰úŠxÉÿaõ9‘^¸ endstream endobj 2846 0 obj << /Length 3090 /Filter /FlateDecode >> stream xÚÝ]moÛ8þž_¡Ãw °á’”(QE{¸´Iú²Ûf· °rE¡X²£]Erõ’4Àýø£$:kÉ–<4Åöî>Ùq¨‡ãá3Ùዱµ°°õúàåÕÁç»–|—ºÖÕÜb.r}Ûò|ñêë*´®_ewQ}ºzW·ö,.Z»vÝÚñ<Äm*Àš†>>:¦?ü±}!.©:8»:ør@D#l‘?; âIfÍî®?a+ÿ{gaäøÜzhZÞYŒ`DmW¼O¬Ëƒ_°”#ŸÕoë—×ëÈ6ò°cyG.£5rý9E>÷-R·ö­<²æƒH;ñ¥ä]ü•”Ö±\äSaÀ|aµo>®•Èarêaòj] ÉA¾ÓÕÍã2(Šfx†¡¬ëcãÃò6¶|ˆË[XË ãtk›¥¬aÜ-`Û2ƒ~y `”†À¯3Ÿºçû(jh¤À‚~0 y¯q‡«]û—Vj{šsVÚÅ×´RmaU¬Ôsézãj"ÀvU¹¬€˜7Іpÿ Ø×T|Å¿Ë69„ ´“ªˆ€œŽ&:» û_çøÃß§¶¾Ï7Ñ"N?ù¬ÿä‹á¯>¾}ýùüâçŸ/~Sµ3ê"¯gÍØY_Óδ…U±3#Likg`oe:œkó$΃ ~;ùéìóÙÅeŸ=? ²g5™]D˜Çb>N'bŸÝN;áÆiåyµ,Ä~µ»,ŒTí‡0äy®9ûéâkÚ¶°*öC|„ë4 ¶xà§8¼Á¼„’Q% Ú Å—@í»9Ä…JŒq¢‹¯É ma!œx’œ#‚eб1Áý 32î¥ÞΡ^Ø@wÙ§ïOÀ!<Ð5=f8„hì˜<îë?ÁÛ(Wuµ‚@ˆ3n̬zøzf¥/¬‚«u}Ç•fõcNGér!¿ï›Ñ.¾æˆV*Ãkª/ÆtÑ×T…®¨ S†ë1D)_UÓy¼¨ò ŒÁí²n[ô)ú JQ·Í¶ K_s\t…Ý2 ®‡VËé êúí0\ãOGrǧë_^½…–ŠikcatÏú\ódàa§Ö²%H†C“ÝŒamÞhŒ1]|MÆè ;¡[–©®ÉÄ„)’¬üÿaŒÝfJÆÓÅ×dŒ¶°çOH½ÖC-סÈf’EÐè¿ïMÄ£?Ž@`*Ak;)°XF³xG¡±bÍ<Î h&}ÄIp]Ù0ÕÝ4§mògŒæ]|Mšk «Ds› Û—µÆÍÕ’áå´$1\W‰æI›…ß.¾æøê ;2ñQ1¨¶,|]Ó§™¯yÁ/ÆM»(ƒ4ì@þ?zúöü|Ãïwü¡Ë3`Yá6HÓ(®ã Çé»i„]D¸¹êY_“FÚÂBÜ„ï#Ï^ûÈñdõ,…§êmõókåý8e¸’S%e¼L¢¯Ðâªñ4š•Û¦²æÿäùH)aã»<A™ t;ÌoDS|éáëñE[Øa·Ã|ŽaÒíØ`·sTeVD‰½‰«›;g¯× Ùâ2ÚË1Þ&»Æ(ÕÅפ”®°Ã‡q1æµ”"# ã9‚ù³Çróš¤ÓØÀuà5ÇMSÔ‘aó\$¼A;lö76ðZùÛWЉ|)"N‹TÁ©ÌƒY4uÌýå¨Ò×mÓ]cüíâkXWØ‘¹ÌeȵWÕFV<Ú¾hû·aúßf ©E¼Ø,ñ@d‚çràu»E”Ö³Z´·äÃÅè„­K^* É`:›©ï(d¬Í±ÙV_Ó¶t…™˜ƒ\99Œ……àõáËË7êuÓeœn{Èa»w¨pZ³[Yt›tõ)ÝBÕ¡Æ·¢åCGßͬ’lÏTÍÊi«ÆÌª‹¯iVºÂŽ˜•#ôAe¥ÿe Ã:9}õæƒ7™iQû´æyv·÷NÄÝ!dZÝÝô‹»INÛÊ‹1’wñ5I®-,¬tÍ÷ïmŠØCŽí‚ès³9yuöñ{]‡Q-—Y>ùvKø.7‘ßê§E‰o#ÂÍm–èáëñÑœ°R¼É颯© ]QiÂb„«Ýc¾ó1ÌŒ\Ló8q¾:pÛîËn§>šFó JÊý.&Þí<‚¨g®¸ÖÃ×´cÂJe¸mŽhL]|Meè ;¼[‡¸6’sõ_w„HÍÏ©|nïPÙmì«!šÂ.œ¶' ­6=-Kl¤Ïƒ=|µ1Þ°wü†zÄió+cäéâk’ǘ°Rv›.SF_SÚÂBfוm9¹\Ö¡ÚYfk–òlÇíÒ ¦Ü–v>7„aÅÀå[Úqý> stream xÚ¥WÍj7Ýû)ôÕÕüéLmð®Ò,Ú†,Br)…—Øôí{fBC$:¥ ÛóŸ«£of4:—ÇâÒ ¥…šy`…Œ<è…ðƒ`ÖàÌÂ38«ˆ™­æå@¸h·RŒÑb+½ÒKWõ`”>—³ d•1ÁG';BTf„Ë"ÅÊ$eY ¾ç$lº©o°ë¶Ä£Qˆ$°‰h¶ 1;†Íǘ (ê4éæBÚ‚&ˆ,hÓÈ{†40ˆÙ b]Ã*}±ÁŽ!W4úðbxh4¦…¼!‚ÆÒÀ ±V`(A“Àð«ÍÀ°xÎùó›ËóëÃýÇo®Ÿ»"°¯oýýý§ò²°e•ñêh¤:׫¬õ‹€çü'OBèiyÉŸÇÇórùù—_ËwÔ« šÚè÷ß½{ud[¯›¡’%UÔ2ÇÕV²“#K« Ç>G¦Uº3Gn³b6åÈ}J¨wŽ<{%ôJŽ®r¶CaN«d;ž²JOÖ„:Uw²9²a†j²&$˜¡Y.c„fï"ŒÐ‘¬ 5ü¥dMàkº}S’;8¤r{[.wXªŒÏŸA ówì_$äË’IíË¿:®‡xÀr—gîßüt},/a¿žÞ•Ë‹ë§ÇòEiïË&nûo}™ÁÿéËÜæå˨2¼èÑ—ýƒýo¾lK>ø²-÷ä˶ä“/Û’O¾lK>ù²ùè˶ä“/Û’O¾lK>ù²-ùà˶ܓ/Û’O¾lK>ù²-ùäËvä£/Û’O¾lK>ù²-ùä˶äƒ/ÛrO¾lK>ù²-ùä˶ä“/Û‘¾lK>ù²-ùä˶ä>jkÉš(þ¶ì–Õj[Éšhé¡È˜í³ý²ßP9òTŒ®dâxFW2qŒ‚“]ĸ x$Ǹ!„’Í̼0º²Û ‰Ñ•,6£~*Éþ¤Õ1º’5¡i]ÉšÐÀ÷KÖ„ºÔìŽkׯJò&ÂÐÕ endstream endobj 2901 0 obj << /Length 2618 /Filter /FlateDecode >> stream xÚÍ\ßsã¶~÷_ÁG{zBðàM&çœ^îfÒ´=÷éz“¡%JfkS®Dùrýë  Ž¤( ðiž([з«o?,wA@8Y%8y{ñÃíÅ7&X&)J%•Éí2É”%*5WE’ÛEòñòÍú1_WŸnß×£U¢ÍhÉêÑ\)¤5`û)¹šQ¥/¿±"Iý¡‹o/þsAÌ œ¯¨ù¤Hæ?ádaÞ{Ÿ`ÄS|Þ|LÁˆ2i^?$.þv×¥¢~Y_Þ¶‘R˜'Šk$­‘ëÿS”ê4!õè4ÙäÉò$ÒY|çy¿ñÒÇBK¢”¦pgm‰ ¯ƒBHÍ#M” (å62x¼·¾Y%öÅßß^˜·~c¼y×B&gSŒ/™ýwÇn7–Žq¦ 3<ã]| ãPgÇçf¬&”Ë”s_Ê©DÊNŸ8”wñ”C£œa„)õ \Ÿ \øRNRJÆ£¼‹¤êìå$E¸Îÿg)¿>A¹ô¥s¤Ñ(ïâ)æ¬%Ã8Œ´ÐÑÈèáÃÈ€;{¤¨EJ…¸¨=Wˆpi¹~ªŠuÙ×4ª£¯Ojuÿþ®,žÖÙ¦÷YSÍœ”øÝÀ'Nâ_ß¼ñ¸ÍòùÀ·¸|}µÛËì»ñïs7üu^ÙO?ARÎÏ\©My—¦ñÄÚÅŠ5š³Ž µ/Ä¢qÑRuÕgÚ¦©)¨±%¥ÚNÛaÍÊRp£Ëù¾'ùu¾.—ÅÊoZ d†Á±ª¾E½ÿÇ¡’—¶ø‹æ.>0Î`g}M°@„˜HKލLm¤‡ÓÒ,u™\çê³ùéŸXŒ”Ël^­7_üâ¿È—Ùî¡êçCcxÖ#RØb3Zˆ»øÀƒ ±¡ˆ¹ÎçÄt–b{ß±!&3êK;³g4Ú»ø@Ú£9ëÈ ñnÒÅ’v6¤ d±”ž+Ù™2p[”«‡¼Ÿ%f§“P^.òE@Ѹ(–Ë|“—U‘=xVŽï~×ÂñðšñôoŠªÊK¿„yç™Xÿe&û£çØêÞ›¡¶áÛÓiÞ~hõ}q×OÞèô‡æež _­ŸF¯ú~盾8FœÅëµ{ø@FsÖ‘Am™Œ.> °³!“–Q¤¤ëµ‹r[Õ®Z{ÎÛìa››uháKly-]|`0ÀΆƒ¤±{ kº›bëÕ¬Ô±(³¹ë»±ÈýÆå¥I‡Eæ78«ŒÇó,T ØVtÑÔÐŪìlˆ °æü°ûœo¶Å"[ü?1ß} î<•ÈttÑÜÇîl@€yš"­]Ÿ›mVu'S†Î®’,^¯ØÃÒÍYG†Ú— Ñ¸èÀ©º:"+¥Ì¿\!NÉÈRÉ2?*tgcíYbri®4^_ØÃò uv€pÍL² Z!ŒÝSÑ?/©Ïï³r•{æðíîéi½©|‡/òçbžo=±«MQ®†¤ñ¥0S”lw[_—LG5dâã§q–²rqʳz-`) [ßFÓh¨ÑhÎ:2¸­/£‘ÑÅ’uv$Crpêr6’!×ój(C*_õ1[ÂE#¼‹$êìH†dF½2䲨l+ÏìÒ_’?bK®héâÍYG6¢ñžÑöðdDsÖ’ÁÒºjŠ×‡öðadÄsÖ‘¡mEŒ.>ŒhÎ6dp„[wx‰(áÎŒgO8|u§¶tëVÃO‘îeZ&“<6à׳²Å—Ï¿>Í ¢¶§µf3{½¶o^ѺžªòùÁ—÷ö­¿¾y7«?ðªûçOo»ÿ Ý?Ù+O`Úf¤9rÖ> †“åˆI·ÝûzWݯ7¯¯fÌ ý\˜:ùÁ`|y³¾35íþå·‹úõ÷U¾-ó Íÿ»_ ¯ˆ™ÍíåC•U»­ú\û¶Þü{{|~MšòB©„¦¦³êiŸ_c­ókû>Ý4TÍùµ‰1(ÂJ&T×ϭĆmÆš1ÂÝnÛœJ¨`K"Ì|~ÎÊ]ýüz·¹"úÒ=é0A©Ff2Mã5·zÅ{>Üä{ŘîäØ:KM1&&²Î11™¤gý/Ùc>t~‘ Á_b÷8þ‚ŒC“¬´Š;’„§5‡TÀ0*3>8xH…Š™ÙLï…ÉÂæ‹û ­Ø6ßd¸ùÁ-Ä×¶ü55‹:Ùk¶øš³O 3УcY‚ P–~ ã²`4²FT\L#LÃOÚìqöæöÒl;ðõæ;"Î)¬äÙ¶îTx¿Ña°ñc%l7X”è2®DF£Dnʱt!š2O«À 9ùƒÛö›šoD…˜>ˆ°mÚŠ¼$G†ºt,M.PšB“¤ȸ44÷Ë,%I¦nÎcûjs ûq¶h:qNaû Î¶m+Böuût,Ofj Íœ~ ãò`4ò¤æªÉ4ò¤Â|5&Ï)ìäÙvÀÉSŽÈs Ûy¶m[Ê—È3اcyÖ;V44{úŒË€ÑÈ“Ôçìä4ò$ )˜=§°gÛfUfDžSØ>ȳm{¯Bú¢þ'اcybSePhöô—'ÃÉ“Ôk¾j¢ìi"%EXöœÄþAžmÚ«„ÃòœÄöAžmÛ{²—”žá>ɳ†PŠ‚Ö_€qf½›(iîôõî3øR4ÄEy¸ÐÇ=\ˆç¬#C…“xûzø@2¢9ëÈàÜL—xË{ø@2¢9ëÈ07Nã=ªîáÉ;ë³oòà¹DL»úâö¾ðÜñ´ØÔ[hƒv^m_t¬{ÎztÃõ/¸ñ<8Þß8uð_"•}=µrvË1]añvôð:;¢cÓÆqê¶û{ÿ4@Bž?.&ÖYQnKß‘U¾YfóüÄÔ8/4BQñvpôðB;"4—n£ùºº÷Ï‚wa{J­Ø<â—_~7 y'+l‚Jâí ïá5ÍYK†NM³oPFØÕ€Ù”RÓÿ©¦úðÌæÇ=ÚHzè/ái6þÒ=n<‹|Ÿ=ç/Ûë}:M4û1‚¿Ö™­ï~cßÝ_Ûõ 8ÿ»¨ÅÛÝþ"*ÌÍ€¹¥ Ú] ©×çYY®=o<‹b[åjWlï=ϹæÕçÜ÷0»Ác ¾2ÏÛëçõîaáë²ç)ÁõæÑ÷ŒàríŒþyQ{úñxnÔdU,ô·ãÿq³š| endstream endobj 2949 0 obj << /Length 2357 /Filter /FlateDecode >> stream xÚí\[£Æ~Ÿ_Á£­³îéû%Š¢d“h"ålNvr^&«Û؃bcdžYm~ýi ™lpã¦W:Ñ>aðU¹ê«îª‚¬üxóíÃÍíò@Å1Vã€+¥ËàqòÝn-ãéû‡Ÿò«E õÕœäWS!€$Xƒ*÷SU2øP\¹ ‚®?o‚w7ÿ¹FkË?æ‡ëÈHA%à çÈùß1PR(¿Z‡(Xu"]Ä7š7ñ+-m$Ô±8PX lxXå‡_+§"ã&Zw*C@ÑÒU¿|w_ø¦'xœq'ËCü×êÛAù‡†JM7g¡ESÎhâ;:۲ƘQrÞ1šøŽÆpVv3 ãj¹IVñ:;„i¼KìHºÛç×Û,ýÊ–¥ˆ!¸?Ç4ñãªì7p(ËõTæ+{î†Gø~ZwfÌÚa{ë•dž-½¹²\š¢çxµœ^œù2Ø©µaK¸iÓEß…l)Ú„ÞÓÄwdŒ«²=Œ hö”G42cŽ›]ú¡Œv+Lz£L ß2îÊÚ¬þåÖÒ@”—,º_]·œè[o»hO¥Ør•Jlûh¯âhÙV÷U˜¤O‘€U|8Zê>‡ñ&œo,‘O"õ2Ë¥Îë•òÇò&¾#Ë•ÄrÉ’¢dù™…¨Ó âÍÆ2&,³ã)mSz]}ÞÑ¿¾T5–àúŒDþLÑÄw´…7e1X™Â{3FßÑÞ”5Æ e"íÍM|GcxS¶2PÔÊR0¢FŽå2{þhúW²Ö‘ª ‘b2 ôÂKÛIÊ[TárŠØäùý"F“²o5›•Ç»òäë}3I£ÅÁÉSyJoŒ³âÓ«·Ð`0Ãn¤ßeéÓîðÕtFôíwÉz=eo­œ|}8n×Iöz½Õ3Xì¶ß¼*O܇Iùán>ߥ©¹:,¾Ä¯·Ñçªq6Ñ7ìÏorMrÑHEL%ý. ÓìhDÈÕßþ<žöä8Rˆ€QmLߦS”rËåÈë@úagwá6Þlâp»·»º¨-×¶t7òoj¼=MÅyÿ3†«R|á®í]G9N?´ZnsyùFúHüuÂZøŽAêªlO" feâ AúkŽ¥q§q¸?öBÛís¸É¢‘ ¦€îþñ¶ÒðpÒ ë©ö³½­Wé W.Ç$,ûÞb²‰ï“ÎÊÚäí"ŸÏ5çV/ÎÚ’ð™àŠÿ¶®ä4q·×fÄX•¥µ/÷µðÝÜç¬l÷’Šù¿(œE.,©÷ºÈ¶Qb° íÍù™W’†¸I5 7/5àäKUc ®€‚þºd-|G[xSÖƒi"S/ŸµðáMYc Z–.ÞŒÑÄw4†7e+cP ÔçSÁZDês*ìdN…`^ŸSùcï¦3]ts*ùÉŽ9•ü’ò]ouBH5¶BHñUU_ió,ûmJ`^ÒÔøo¿L6忝 6pjà0\h„f ñ/¬Ë¯VÕŽ ú…uÑf€¦Øºi8Tú) 5ÂŽ$´Âèçàõ¡˜3Æ…ŠdcØ×(ò_HXW ÚË{H8†ìÖeÛ±p°øSjˆ¼àÆC;~":`&æHh*©3žaKáÂ+Ö¥W d7G\1°.ØŠ€CeŸÐ/ÿ Èq˜Õ£—|†{’\šd´&ŸÔ?xà(ëÒ+öÕŪW:é7†èŠuÑVü,ü„€RŸÌqù³Ãè%à`ˆª|=ó¶=P^ó_?ÿU˜p endstream endobj 2989 0 obj << /Length 2290 /Filter /FlateDecode >> stream xÚÝœ]Û¸†ïçWèrŒÖŒøM.Š¢Ùd[Ì»“fgQ i0Ðú#£ÂcMý1iúë{(Q eÒ¤zÑ‹…½6ý¾'‡Ž¨CiòìS–g¹úþîêÕŸq.2´ "»[g\ ¡i&5¼JœÝ-³×oªÇÕ²œ}¼ûÑŒ–™‚Ñ‚šÑLJ¤(±z ¦³9‘êúUó‚6?ºúáîê_Wåþj@à—<[<^}ø˜gKøîÇ,GL«ìs=ò1ã8G„ x¿É~¹úëUn£þª%0RRf^eÎNµ¨£Å´FJ¨N+±A¹™d1¦Ç4`4ŒåÜJ4€Ý  ùáaøÇ×yý©Ø×ÅâpÜͰº^í†Y%D!.…@(C’Äðv5Ãüú¹\¬†îTsPLäÎr Ó~âþsñ¸z‰%Œ8»Äw8ÿ Aø˜)õÒô›äKÁ=5 Ρ„É áQ-„T" Xèä/AÈ0bR7Sðzù<#üºØV‹‡Søwº¼{s3Ç’Š_ߘ½#Ðu/–Ï÷O‹ò~YV# ÛA ®Y$‰~"ã(Fh´,Ž$UiX$pŒÃ¡Äb ÿŽE7Ë¢þuſЮ¹ŠÁöCA‚S‰¢ŸÈ8Š-Š˜"¡•E,•a$¦°ïHtüy>Âa ëŽCÇÚÃ`÷!† ÁTlEôÇ0B£Åò(ˆNƒaÎÅ1…Ç¡€€˜Â»Ñõö#1Ø~H"H0[ýDÆIŒÐ°$ ¥—, ‰pA‡ˆ1‰} ¢ëo9$ç9LbÝrèZ{aî>ÀÐHPy±â)2ŠaŒF‹¡„U&NS…‚9Éà bÿŽC7 "1…w¢ëíGb°ýD $D/q/—h11‘¨ OËIì; ÿÂßµo~Á1EŽN~4»i "b뢟È8-Öšy¢ºÈ%Êuàù9…G¤€%‘€˜Â»Ñõö#1Ø~H"H ¢—Æ8‡—K´2Œ(OTL/Ãa¦ðï0t°Š SxwºÞ~Û1 Ìc ¢ŸÈ8ˆ-‰Öši8¤iXãÝ; ]û†B1Ò¾IàÜ1è:û1h>$bë Ä8}+´ìa‰ãiè#9Ò4° ¦ðïøs°ü]-§ðît½ý ¶29HÅl_ ÿRnv¬Í‹»i çd³ÑÌ5CšÔýyó9ÇNÕ,3G¨Îv«líìx÷¥^þth (Ò²Õot±+ßlà÷åÛ½zWJ@ôt¡ÚLHŠrŒ§KE_?2ÑÁÖ‚»OYóæ}{›¶7n0ç6.:`¸>ïÊ}} žWÊ>ÌEž_/wå³½ á›c÷ǧ§jwðTÞVŸýVÛÍ¿‘åv¿õyXíÖ…½Ãá›Ãוg ÞÞôÆAª_Ù†?¸~{2øf05ôÐèWV{P˜s'Ó}ýȃb²`m28†‹D:]2úú‘Ɉ6¤Bp†¨ênÛ®ËOÇ]q(+Ïcªz2c÷§”~çK)˦lº‰éëGNLl°/Lƒˆq'EŒf>ägurçg+Cý5,îü&é·£gy®Öž'ˆUw£Ø×I¯¿ùGn÷ª_¬g -Åæøö%Æ,ö›=‰iˆéëGì1p±ÇÌ]š51811ûMuøÿAÃ¥Ó!Ó×D&:XŸê±¹— p)ª)ºY_VNÆ×0þ(•Þ‹HOÁýÓjQ®ËÕò4Üß&‡ß%b¹Û{ÆR<妸mã©<8R¿MyWÒ| ¾~$åÑÁQ¯œÙݪ ÑÙYø\n6žÇ„§âq?¤ÑwIÏts57Õ ŸèÇÍðtÁÚd(ŽhsÏà4ÉèëG&c²`m2d³ŠŸ,}ýÈdL¬M†hÖÒ“%£¯™ŒÉ‚m“%Ò˜6ä™WÛVÎãBm‚Ìí¼Ò.*8‹Óu6Ïeuÿar¯šŠæóæõõb±Ú7oo^Ý6oÞífV›Ëãâ`¿z÷fŽsfqs‹ÉÜʼ†åbõéä÷ßWE­°lŸsrû×y6'¥hïê8ªÝw³9Åp&6ÏÅÀ‰»ž_ÿ´úgY4oÿðd>Fæ“?-¦Ç¿­6hQ=þјU,‘¦v‘þË¡8÷Vµ~ÚæßO«]ù¸Úìò¶Wômgš “_ÕÝŽÓhöH(L®ÄIž}¢ÂüP†>û”"‚v“¤‚Ï£O)ÌÛ]’žùø“OÁ¶Ã¹Ž#÷è°ÙF 3œM· q¢IÆdÁÚd˜•š®¿~¢™ŒÉ‚µÉ`pÅK¦kÞèG&#:XŸZÞVXhêö™[ïû;ö_¶‹‡]µ­¼71᪺Öýó`· ºÕåò®Yù 1ÝúïD?’É‚µÉ æuºî‰~d2& Ö&×ëœÉrÑ“LÅT¡ÚLäÍZc²Tôõ#s1Y°M2°VHåÿÛî-iævoåÙîmY6]Ù{,b;¸77ïÍ×·­ÒûÕ¦0|i{ºK;n_m Sƒ›ÿÛ> ^ñBƒ÷ïÅâ¡Ø}iz/›©æŒÐtxÿß¡Ï3\6Öã%1=^œKDiܸŠÓhúk¦½¤’´xµéÿu«þmsÍ À§¿›Àºm¨¹ÖãÝÝPÓÁ¤k†”ŠìíúiŒ¶v#$,yŠ¢œ¤yC™Žy`_7…}KžëÔÕMDË „WO7Ø|À¢"H‘¸Žn¸Äðov{HÿÜŸÏŸü/Ý{ñÚ endstream endobj 2898 0 obj << /Type /ObjStm /N 100 /First 973 /Length 1232 /Filter /FlateDecode >> stream xÚÍXËŽTG ÝÏWÔ¤ºü(—K±H»Hˆ°H‚XŒH+Š„˜‰ü}ŽM@C¸±HL»Ýç–]>vÕ¹°oi£±om:ãs¶ß­‘¤c5òð¨6füÛc4‘7 ÌÒÔ) m“í Æls%ÆšQbV3K·5Ò³Ûšá¡ÑÖQsM7÷ôHÛ‹´í¥X‹Ñ .¤8,2"äH#}k¦oÃÚáãш#ûÍËÓÇØž¤O`-K) b0b¨¥1&’€…s¦1l¤1LÇÉvø1–¤1–sXˆáXbøbÄ@á(‡…ÛPK$Êc¤ ÆÌG±ÒØéCÞÈV”«„…¢sÖ'~à%Sd!<"ö,–>üQJœÁšI,ÖÓ,PìÀ’’ c%nbå5-,¬ì#Øm8"F,µ³ ìùìj28}+û`î&”€&ÊN0jHtbãah¤‚2gMÐeâŠa¤o6QŽÚšÁZéC°IéC°iQ C0ËB"6*¾…–…\ˆ±²XÔ/ÄXˆá’>Äð•8ĈF…–7ÅXÖ‡=£¶áà (iú@'è ³Ã1bœc‚ÖVAk)6©’õÑÕÏÆ1£6Q-눕ÔV<º±ð¢*é²ôaavu}}uzØž%G£=i§ú¹Mëј¤Ô Y½zûòåó«þ,£/ F L»/pTïÊKེ£.Ÿ`ݾºk××íô³ßÖûg`¯æì8 äã77hè?YC#Æ,wzüúöÅç»ö¬?|ÔNOÏïîÚÇHOÿøýŒn~=_¾CÔó«»7qjQ<uzr~sûöõ‹ó›÷£”¾ïÏ¿üvóíí»ö,"Î=;£‰¥÷ýñn^c‘˜0Mü½íÇ¡úqûßu‰-ïcÿY±>AÿU¬eÜ#‘xRßZÄêèÑÙ50:g0ÁèœaR£shsÆ ÷ÄØ­ÇqZ/Š#¨6ílENlJ—b™M¹ãÔ+‚…:²"˜GW)rbcw]ENæö>iÁ¾úœEN沎Ջ`›ÝªC5§âÔ,bUph9™Â84‹œLÆ2ŠœL=´Z Œû¿‡ÐªÝ{¢x­¾«¥ÃÝÖÇ(r¢øÕ”uö±‹œ¨h')r‚;½CçÁÄÚ­Ôy7(8a¨Z èø¾é ÀP™E°mä\$¦÷báHW-òG‚kÓ‹üÏ®\Mƒ´«U 7¤ÏQ“Í}þï$ŽîÏ$NèÓ/‘8Ûí3‰£~_â É1k—%Î}ô¿Jœ#ð%‰s„½(qŽÀ%Îø¢Ä9_”8àËç|Qâ/Jœ#ðE‰s¾$qްÁTÜÞ J¤ F\\Y1 bÅ©S×Q,œ.--N'„V«ÐYRìO¼}ö¹Š•SÆ'ûS :ëð;ƒ@ÛENdChI‘\}­"'²pŒQ±ÎbZÕ”u÷xs¬:K‹ Cgy‘!è,.r":ËŠd\qCÕÀÑ¢ENxAhy‘Æ Q= àïÃúŸ_½~põú×_½î_ò¿ î‡/oûpô/€ùðì>ãMßôŽÀxÓãûozû{ endstream endobj 3019 0 obj << /Length 2578 /Filter /FlateDecode >> stream xÚí[o¹Çßý)æ­VQ1¼_EѬã.¼@¯íɦA!Ër2ˆlyuI€~ú’šK梡I!¶(š‡Œlqþçèð7‡<jŒ³OÎ~:ùñæäÅß–™AFR™ÝÜgB"iX¦Œ=*’ÝÜeNÏV‹»|òñæg×ZeÚ¶–̵æJ!ͨÛ74|2¥JŸ¾(DwÒÉùÍÉo'Ä6Âùn€Ú3E68ùðgwö½Ÿ3Œ¸ÑÙ·}ˇLŒ(“öõ2»>ùå—^cd„{é?5•R˜gJd¸v¿D"JxF‘Ñ&[/²ûA¥P}nßѤ2Pת_F¦­_E!ÄBSK"CMBgË`0Œ0¥é‚ÑÖ#™³e0ˆAØ^É‚ÑÖìì^pý)+^\Ué„” ‚7Ó ¥ˆ‰:<ÞçŸvëÙ6_=îİdöa*1>}óäÚnZ­ÒÅ/ZMÙ1X#‚yºŽië;êìn qá"ˆZtÃüq²î´ ë@ì/ºQ1ØþôMXw>­ÖÛ°–·³Í"¬åìîn½Ø´yž i"\&#££##³e0´DD«tÁh냑ÌÙ2J Juº`´õÁHæl É•&]0ÚúÀ`$s¶ AÍŽ‹Ÿ`Ëé¸nL°«øP‰8-ÇOù¬<%nÆ={xZÎÿu—¯(ÆÅ|:-Ž/í;ùÜŽ·ûŸê·¯ë|±)^¿Ê?åÛÙ²øáâÅ›jÂß,p6¥1) W^î¶ŸWë&SFì@1sꟾ¼½]m·Åë?Ïö?ä}XL¨8ý:‘âÍWh÷å/Nß … c…àõv¶ÝmJÁoûßjýeÓ¯"lh¥2¡ì±èêfÁU7Æ6Ñu1²EXÉLƒ$> ÛÚ¶¢”(éfl¥FÔÒB2ÄpÙן=îîgóín=!út±îGÂ^öÈ’?Ž ”q¤xLJW‹ ±=—Ï}ëÌ«8’uŽí…Å:Ö_χªH‚?Æn¿ÿ­'Ò'AlfÑúPÿ»è+{5Šps@ÃÅ ˜FÅ!W†è^À‡0´e4µ.®ó*{ ã7‚åš¾¦éË3J蹇¼ ×à5 ?Í­az±†ûäY& ¼0?yŠ<&Àbô˜A¤*SÐÃtÍ^Ó¶cûØÃr _Ó²ƒûà‹¶Ü§ÏJ0 Í{a"~ú}”Ùwø¨-²˜ †oË5{MÓŽ=ácoÃ5zMÃ=áC/ÖpŸ<«@4ï…‰øÉhTäí—TFr‰íZž÷Æ0]³×´}yvað°7†å¾¦å§yî,ïK‡Õº8¶Šša,£}êsi%ˆfÄ0?—’KW²0NÆá3„ipJÅtÍeÓ¶årásÓ5˜MÓÌÅ‘dÆ;Õ#ÓINadŠxÉ„hTdj…¨'crƒ‘QÁsÓ™-Ûn´ÖžÑz˘-Ën¸Öžá:ÞrŸ>+‹¥V}a"~ú}n¥”“¹ÒÈð¼8†éš¾¦í}^d҃ߦküš¦÷yÑš>&/F;Õ'ÓJ`Í‹a"~2™’!¢FÊ‹îCKLæ¦k2›¶m^T¾Õ›Q,×`6-Û¼¨|Ë7ñ–ûôÙž3 šÃDüô4*ú„rR:}‚#u0}c˜®ékÚvuŒ¢úư\Ó×´ìêkù˜¬íSŸKaçšÃDü\4*.™Û¦¢Æá’S¤DxVÃtÍeÓö~¼6¾ñz Ó5˜MÓûñÚ7^G;Õ'“i›¡è~ÝÏÜÐåDÛBO¦Û2ȱª"—äöyGvû<³E0˜‘ÈÝäNŒŽ>,éœ-ƒ¡…­§Óm¬èèƒv6bË ÓñjMúˆ-ƒ«ƒ[C6¼5î86v½ýéù“ø1'‰cNÒGœ¤úŸ)tÿ$S“nËsGH)ÔÙáý“LÙ£Òÿß?ù [EQ–nÿwGHÔYÖ„ ¦$ƒ’qõË¡ôôO,ð0"E^›-#Àí.˜ùêáaöx· ký­“Ž­#ö}*ºþØ2ß~^…~²|ÛuÕFš„¦@AUéööwô 's¶ 'ˆ‘tûé;úÀ`€™µpŽ$&¿Ë¬¥¾g3-ø~C-ò¬r¹9ê¬j1&Ò”‘GO\˜- …Hj[*ÔYÏðÄ’œÅM\lì'»ÀÑbuÖînQï6elŒÉóÄTÛÒÓÖuÖC ¥Hj7¡ &f³\mÿwÁE¥š ™¶>°³!£a!HÑò»÷ÇeÅNR˜¤C7O‹y~Ÿ/î"Ç´íçÀ’ì>_o}™}åËÙí2P9øB=pYy&ãËedùHMQP§ºt:ú°KîlÌ¥ƒ1R²ÜŠ~Ø»MF˜Å¨.*Ød]ÑÖvE2gË`(QîíO‹–<0PW#ªª4Ò¼º¹:ÛlòÇOù)¬Ù¿ëU`n\­-GU^ã%Á™~S}Ééùhz¹˜} î> stream xÚí]ÛRI}ç+zŸG,åºW×_€A"bg¼!¤#$F3³_¿ÕªÆëj¤î*¥RÞX¿@àê£tž“Õ™§«1Ín3š½Û{ÝÝ{ù–QYb5×Y÷&Sšh+2cÝWòî û¼8¹/×Ý÷åj“ånµåji Éw`Ë…V½8à&ßé¿0ÍÊ‹öŽº{¿í1·ˆfì?ÀÝ•*ëßï}¾¤ÙÀýÝûŒióìq¹ò>SŒ.´û~”uö~Ú£UÔ”XU~[~y÷-² †ÊÌÈœhÅKäòçœØÜf¬\m³i‘ݬEjů"ñŸ¢Œù„o±4±Üƒõ²ŠY’bÊ̺8#Vzbø’ºüðémæ¿9·—}>`”Sºvv\-ñ°îšƒµ×ìÿ¬] «©C=ìž§ ²vX%ìÅÉEçèM¸8HN(¸JÂ8ú$ž,B| , Á6ÈBº¥yUÙ¢M«R½–—Dº9*Ý\ã÷ºC| ÝÐ`è”PÎ=ݲî4a(ÂØl»„˜"Æh< …ø@ Aƒm³„–÷ûRBjËâ8\ï¶]BT’ÜåMB!>PBÐ`$DsÂhÕŒè6 u?·(s·öø¤{t~~qÖ\¿»•E—i’«Å>ŒEp°ëYÔÖ&µgѬgÑÒ4b×ë/hg'wÑY‹ÇNˆd-Ø*fÙô£å"€¦ê3)­P.sóSÌ}˜"œç^ºg‡Üð£ú¾ÿrý¾vxì®h²(…ïÜêTkß–£1⩃ÛÄ”–„kë™:øöÏ ·Q¸ü†?[f¹=»ÊwÁhÙ ñÙSÚ©ÊÈÕ4ØY\Š/Ã~1«ÕÆ.7hùâ /{¦<6éÂ÷hIñI‡ÛpÛ”œUå˜n׉ùG¤“ˆš:*iîû;4ªC| ÕÐ`¨Œ[MÛìû˜n‰T§Ž4šù&êH54ت9%RõªN®jª Ëñ¦×>jh° TSK¤‘­–iêܳH9L-We}ã‹Åa Æ!8Øõ*›ÅT»j9¾³¨rß㢑âIÛ@JnˆR¦ÝY´ß«SfÙ £qÀ)†ÚÀˆÑÄ•J»Qgù†fšÒ¾FËsˆL44؆LkEÜÐÑj¦±œÌ1¥|CŠ–í˜m´`«dHß²¡%#Ä&lŒ ð5r—!^¨G½þ]Tú¬wY»p8‹[×{f<”~W ÷†rEÿnø÷ÓÉ—á`8¾]õA\6Ì›ãÓ¸OéßõÆãbT·QöIC™/÷Ó»"î`‘DlÜw¼h•â+lJ¥NŒ®&üÞ4’¯þd|3¼]L{×£È+z‘3?,æ‘k'ÓÈu‹y<èp·îf²ˆüøÛédñð¬vþé:*æ}4醸@é¢[%ƒú-!>0à`|ï2Ô\V3ýÙd:Óæ«ú}Ã?’h»=­¼økióµóÉÊ«Ld5Hëûy,Ôða€› i-És•*€×[@ž*€ò§LÅ ÷cšB| ÀÁ¦ w?â:U‡Wñ±¡–Tê`c`$ш@¤j ûƸåÉìÿ¸eö9Ý„}.bÙ×~°C£?Äòl• å{w´d„øÀd€ƒM˜j¤ûJ«{áéxôG\1ÜOÅ*u¶Hzr?¿+6·fÛ5&f‹‡·Iƒ5#}{!JFrŠç=ÕðÚC ¶J†ðÍ7Z2B|`2ÀÁ¦¢„ žjÄÕ qr'FœxQuF Ïw®‡óXïe1žS\çî9Uí;óZ„øÀ"›R\fª£#Û•÷“WÛÏL®ÁÐÉuÑÅÞ‡óÈÚ=>éœ\žž¼=~Ìl>]ôçÃÉî0·Ë”ú1 M¦!>P¦à`SdÊ8ᬲfEx3ìG¶6Då•‘nöæÚÃ|¬Ý™[?>`1]Ç1l•Œ<'Âà€©á“6awæ–­õš¶üãéᇫÎùáÿ{ò'àѤÿkä­d²˜ö7<èÝ^Ýf9L¡é9€ÊjÂ&ÎsêÒc‚§1;êšýÓêRµþà‹ûp†ùˆ~í²»ÞtðXw„š_L{–õ¼»q.¬m§8™ÌS¥¯ý€†¦ý(~p°)ê×–Yg\më­wÈ#Õv覨dæíÆm££·ôzâÔÿì!ù_›Ÿ8AH÷„MÜöÒPŠ(Šx[ñ¥ ¶¡TNLn[ÙÎú³µ¦ù¢Ø³üS”_câÒÎh|†ø@>Ñ‚­’!ü€†–Œ˜ h°+Ä]¾ª`œ¸…&¹©ŒtÚ¶ó~ü'Õqâù?Ö¸ŠÁ°ß‹¾F§mùêeäf0Üoù.Øùú[G8çDs<Ÿ²†¬"p°1Ý“u]“puűìéÀáÄɰ?¯µ-ËNÇ×Us£ß ={™¬©™JrZ¤eû>ûsﮤSO&pæÍ´b ñÅ6¥X˜tWnéCìè;dl¾ÿ5œOYQÏðñ{œò2}]Ó)äØVzgMŠ!>PŠÐ`º*ˆµÕ1ÅVwá¸ÜwêGüž^žl >ýø¯Mç¿„W‚Xîgv,^kø0^ÁÁ®ç•YA¨¨|hâõ¿‚Vã'P4ZC| ­Ð`hÍ9¡¦2d¬\[êõ×Ý«Ëÿì ×H+0ÔV #ŒUF£ÄÜ„wDªò#5«!>Vh° ¼jJ˜ª|3…¸ ïˆVé':4ZC| ­Ð`h•–T~‘n#õô¢»¡_tÀ¶5/®è–·ðj։މˆy8+"³1žÌ‹ JìºMžÈµWð#Zõ„øÀêÛP="'\VBMë;À¿Çþ‘U;Ûwr\jïkÃ7o¶½>¸ŸDÑê#ÄÖ8ØsˆqCx^9©»òr¢Þ{Žõu¢­è·aïzÑï™_G!ïF±vÚ´€lí¥ÀüðŽV !>°ÀÁ¦”ÓDpüƒÙw2KWíóÑÍõs<Ã!>a´`}2¬Ÿ~±rÂÃR5á(©•DÒ'IßAN’ž/߯ý“&]L§Å8õü[îgt,õ…ð0õCM8ü– "ee4"ÒE~7;úÜp•ñ‚u<­}*YùÏå—ÍE7NE½ƒ÷_ÃÊxú•AÄúÿÒëó%Íî¯Þ;EI›gË…÷_åL³QÖùF~ÿmY® endstream endobj 3016 0 obj << /Type /ObjStm /N 100 /First 970 /Length 1238 /Filter /FlateDecode >> stream xÚ¥XÑŽ\5 }߯ȉÛq¤U Ú7¤ªô¨úP•Bªº¨»•Êßsì-K w—ß3gâØÇIœË{k÷¶&ß«í|öF3ÝÈG›cf ƒ¯D¸MJd¶i£‰I“¡W`hR´ÉNŠ5•DVSOÄ›ÍDv³%0h´E; jËáæ#‘Ù\#“4߉hÛ7†oߘ¨¯Fcæ¿0wJg<±„7&X›ÂbD6-¬ Ë“F†ñ!IFÇÖH3<ÆÈj‰ad‰!-¦3h–!"ZévÂÙÊ 'œyF9áÌW$s¤Í‰ÁÙ¶äYãˆÖ‚¥‰9¬Œu">’ Ã3y`8Ƶ›'Gš@æi‰AD¡äÁ‡hbð¡!ÚøP|À‚Ý!*¶˜Â‡ybð±81øXk‡‡Sbðá–<øØ#’«ð±5’«þP_°>M|ŽÌ¦fx¤-X+"¡04|Dræ‚tÂOÖ Î•s<Œ¬A¡Q` ¦‰áok$†‘—$†”¬>Â¥gA,|xD ¿³Ú|ì,¤XFÖƒ| šP„3¬¬y$L(+ÂQŸ,>P ÂYaD"P°2³ðÝ›HV>¤ÉÒÇ*Ä U+ª‰Á‡fE@(Ћ5àûêúúêô´½Ä:p,èçíôý?6µn ªiŸ(¢wÞ¾}uõäÉ?“Uz¬ŠYf¬¨yrh[#3uÅ>R#ÓèŠJ/‘eﮡFvï†  F^«вFÌ™ŠäÉÖ±²«d­Ïy’Ô猭¨¯Q,$ÞÜWQ¬öŽÕX$¯Ñ}‹›Z÷UÌ‹÷MÕ9ÏÕ·ëˆ!`®52Yí¿DÆIÓÝÿB¾¹}wß®¯Û醰¯‡?Á^Íÿ° 'ò~|Xq>ÒpÌ|Àp§gïoß|w¾o/ÛéÙÓ›vzqþxß=½øí×3~xýóùêô ¼žßÝßÅfžC_žŸïn?¼s¾{ØàûöüÓ/¯¿¾ýØ^†ÝÚ;¯ u߯àïõ{ 'º%ÿÏøóhŒÿ+¢Žã®90v·/ÙŸ²µŒú³HVL½HélÕiÌÙ'¹Ì}j•Œ¤àä*’Çè2‹ÉÀ!Óå`!“¡‰,¤c2”ÇI]#ã´éÑ É™ŠsÆAŽ<§1qˆÌmE2õE2YÅ¢›fÈs±è\×ê”QÍ6Šiž¨f“bMh^Ôd¢œW5A9/+È(gEM8öX)j¶°!5a|ïbæÐ½÷½ŠšðÔ÷§™¥G?_#Óìc5áÁfQÚÔi5Á­´35Á­£(’Õ{QÜû”¢$È:ë¢$„&N¸: 4qRÝAqKFg]”=œÊú÷ÍÅ…~⋾ã?7¸ ý­¹0þßÍ®&Ÿ5Ð*"ºØ\|Î~l.¸ÇÛ‰YщH‘‹»Âv*’ç胹H¦Ý‡Í"yx§Qœ³íÕI¬Hvëä«H^—Ú²#²]jËŽÈz¡-;âÊ¥¶ìˆŠšÄë—¢&ñ:½¨I¼ŽØ\\Tñ:bWS'èZÆ(j"øŸMùw{Ù endstream endobj 3131 0 obj << /Length 2875 /Filter /FlateDecode >> stream xÚí]ÛrÛ8}÷WpŸ6©Y#¸ƒØ[ÕŒ×qÙ[ãdmejf³©”,Ñ6keÉ£K\û÷K p& $P³KM^¤HPëèàt£»Ò4»ÉhvrðÃààÅKFuf‰Õ\gƒëLi¢­ÈŒ­ Ëãìí³£Ù]1.Ÿ¿œÕ£M–W£µ¨GKcH.xel=Ðêç‡ÜäÏ^¸¦Yý¡ƒãÁÁ¯¬D3öÛðê“*ݼ}G³qõÞYF‰´yö°y—)F ºz>É.þu@=jJ¬ªŸÖ'ŸZÄP™™­xm¹~›ÛŒÕ£m6/²ë–:í{ä¡ýG”1ßð©-M,·=€]œßdîÉÅã¤2?M²ž&“Îxf#Vº©ZÎÖS³ÛLööPSúly[Ä ¼/æål7¶œÆ›.‚qlâ^¨ååE L5YO¡} ÐÀz2¸&Æù¡} `°1¡ ‘ªžFJ(çÎ%NÏ/Ïß½:yzòþòxðþäûÁñûË‹£Ü&ZÆ+Õ^ËEÏÎ5š­¦Ëb9øv8“&ì?î„ý,îÍp‰w1[ÍG‘c‡oïöm¦ˆ1OΡ} œÁ`S<³„Ö+s-çÅ}1*¯Ë¢ç˜<.‡Mi½åßüUt·Ì–·e¤ÒbÇ ã†Ýçã‡á¼hâ>lq ÇÞ(î > '« ë¬+VœÏ–©ê§’äÕ䣩?´T?lŠúiNõùÍbu?›/cÕ?‹Tÿë#ÎäqêŠðr6ïyA˜U##m^Í*õo$RÚ Ù º㬠±®½á®ë—idXI™ä*Gs“†}˜›ÀÁ&¸‰¶†0©·–ždÓ.Žaä^Ï&“ÙÆôþ;…yU"Z‹7…¡}à¢õd˜uí†ÆE`HêéæÕSSI×(Âyî¤K»¢îOGGÛÄÝž£”už=N¶}ò;µûs?EfOñKÇ³ÑÆØ:£èÜe ëXZ¤¿/æwÃi1]Nþ÷b:¼šã}Ë}­«7s†ç¡} @Á¶8ˆ–„kë¤3ù<9ÿG¿B÷$ÿ— ˜ƒ(×è@sÐ>ÐA `[¤âCø¶6ïôï‘}ÊÄìú+ëûŒ‹q9F×RÑ´•ÓûÕ22•œÏîz.¡.ÿÉKo-\{͉Bû@'ƒ©)¬%FTn%9ÊûÕhVÉp´lÔ¼ë`åüª}9OˆÐ?$FèëØB<¡¾^÷~ßv¨\zšê,ÜucМ%´t0ØgŒë7îcû®±ªýãßn nógxï6ö‡¯–Íe¢âíu®›ü0×ñ@“bh(E(Ø–ä‡S"…ßÑøÅîèðê; Ð!ï+–ÓEBwS,»Ç^?QN¡-feQDr75 ’n_¡š°o{¡aè+P°-AšZ"ßLàíZ¾*&³‡–ÝŸNÒ•u}-,Òöa¤ƒÁîPÊæD1åH—]åÙE±(æö¯‰Uîš%h¬‡ö¬CÁ¶°ž¢”q¬+tÖͺG#=0äµ…r£I%vG¹F§\»ê óÐ>t(ØÖµ"UYìX7è¬+—棱Ú²ŽÖ“!]ê‰FFhHlÂ4%+†8Û<‚v8‚vQ,Wóé·y m´šÏ‹érßà Ý~Ë]æ‡&ÕÐ>Pª`° '”àÄh߸H9â<[q™KÑf.´œ94°ž ê²:42Bû@2À`cdüq)É¥/íŽ&³ÑcV½ŸˆZo¦úþZÛá««ú½ÕHë2O,Y4ìÃdÖ“‘»„ŒÐ> (ØÝ9ˆ¬d®# $¸LÊ"h6²Ž=ÿ¾!Œ.cü…6óbTŒËé BCrïM†î¸c$шa'0t4(Ԅ쿾€ÎjßX ï02ñÅêj\|(£“µëýÜpýâß]ÿšvtÿû?Ñ÷ßZÁ¬ßêh#º‘vÕ"š…öŽ›âIÕ#¥¾¹“#áîuvnÿÿºøm×Å}ÿæÝ7¶â’ÊU„hr íåˆÖ“!É)^«aHl‹'JE¨>d¹¨Ð¿ƒ´…ýÄYå°Ó½{Å£ŸmÅ®ZGóªÐ>ЫÀ`SVP}{J2Kò¯?Ú°t%0ØWâ‚0ãOFõ~Òî÷lt¿€ðW¢³QêÚXhúíõÖ‘!lÝYÀëÿ7ìÃȃmqmÊWêã¡Çöltp‹ºŠîyís×Ñܾïñy[…y3¤uŸ{_ô}Û¡Ûòæ¶X¤ÞDAä®Y€æ¡} s€Á&¬„ÂVP­~¼’/Ut‹bÑw5™=4åpfGM(^‚šª ªgB»"ŠÐ> 0Ø„íc¡s"ŒoÙ7× ¯Â–S.ƒÓ/âOÅìU…õ{÷œëy‘rçœùj:Ý\\ÂÈ[>wUFVUËòšÇåjl47íÝ ¬'Cº* ŒÐ> 0Ø”˜ 5‘šíNÏÇo^pãBµä.‹é8vÉLÕ®Š^£Í¸¼)—ÃIïWw…‚ø’ ;hN8ÃkY6ìý 6ÅO„"Šú–eúLÇžÅöB.+_隯îce¹.W‘¿k^Ü”‹f>¾‚wvaVwW±Kk³·ÙíÜâh^ÚzlŠWpI”ôÝGß Ž”ÄÝp9ºí½ˆ‚è /¿Ør¯¸>¥¾åF~»—¤Y,ÃÓäÛ9 æêm4¯í½ 6Å+˜ *÷Çto‡Š~/+ÿ qú/Ù\J?~±×¾}SÑÝ7xõæâèørGÞÚ©~n-¯IݰS?lŠú)'šû¶õÖ ŒcKXž»~Ç¡} Çh`=ƉW·æT@¡&¨ç´¢Ç<^„ªÔ®bF›‰Ð>p*ÐÀz2”+‹ÐÈíɃ&«ïdhYõm91¹?ÖY'm<"iS2!Ãé Ú¸¯s˹²×G§Õ'RE/]¢6Ï¡}àPCP°-¢‚X«:o•µ^=Ž)¡å–0øÕ›AÄ ëT"UF¿`†"–[b$^}Þ°“ìn1+þä‘èWFüë“Qj4bÆJh2 íeÛ"£œj|+Cö*£#D#öä0º•¤ëâ OHy Ž€P[ddaÌŸòRýʈ2âÈ2R®ÀDÓQh($4°ž éŠ@42Bû@2À`S:|LZÂû{§ÅFWmk¡šûž]ß ¬L ªaáÊ#´i í§ ¶¥aÇDN¸|‚†㮘@c<´d 6¡aǸ!<ñ ;ذcÌ%àhÔ‡öÔCÁ¶,ýLÁå×а[·ÕÒ–ýŸûObý²š{ŒºMÈ¡} ¡`[„LZ} ͽ}„Ì¿:!§ÖôÖÕ X:ÍÃd …º[ÅVIugwÑ>m[¯'#48×(VÓÕ¢yUh§ÜrZåzx¤Ð> stream xÚå][sÛ6~÷¯à[¥™5BHînwÖë¦g&‰7Q§—l'CS´ÌD’²§ýõ °#èB:Dì¶y¡,C޾søÞÌó½'ÿ™œ<ûûÜ‹QÌ ÷&×ãˆÇÔ cñ ±7™zïGçÅ"›æã_'/›Ñ¡‰Ñœ6£ƒ0D%¬‡ãSF£gò9n>tò|ròù‹A¾‡¿L@Ä'™—.NÞÿê{Sñ»—ž‚8òîÚ‘ aÊÅë¹÷îä¿'¾’ÚG1k^6›È…~à…A„8# ró>Aq{¸{eæ]DêÅW’ëø÷RšÌ°‰ÅQLb¸°r ±Z” Y”°Ñ¬“ara‚vüvòræÉo_œxïO£À÷Gç“·j„D9=ø‘Ñ/Øbð›&úð½R¿¨Úšêv¢ØLCÁºÀ›u| ›¡Âv°9C#娰t&O‚H)úéL8 ¥ÛwCgHggÂ*e`†Â»S†ŽTXØ í±v,â!fXÌ#¿É1s¿<'!y¾MÌg‡‰yy~!>Ño Ô"g$æ¶Dö Ñ­Ž\;¨°]+å‹§¯òŒÓÍãSL„~õ÷Z-÷jWhE,r¦Ý-|˜vášXQÀÉC„.Õý®X—iVmY†Œ||ÿ4Ty$m»S¹ŽT9TØÃ‰8ÂQ(ìN4âÖw\^XÄËŸ,Æžûýî+ ö"`€ ý Û’Ã…4x ƒ€¢v(dˆH?è µ%—Y¾3éø@ A…íàá±ä”C??¾úÙ­b>ò‰»þÏ>CPa;8$ôAUÁLBô PÈÚ QY}8£Ž¤TØ Q†{{ˆGpè—ÝåO®ulj¬Œœ±HDz*l‹(F4&½­;×,¢nXä¸cƱ,øœ±HDzș°J¾,Μ)CÇ*,¬I_àAò¡jÃüx“-ûÉÞp=1—/ë¬,׫ÚlxÕ6& ¡+³qÙ2¹šgSSyÍÆÕ7Ù£+@þa–nŲÊte [ø0K€ ka ,ŽÃLZB™ÍòJ¬Ü¶þÛá0Ôš…ÙÊ•y•/g†«<ò¡š»6d¬òÙ2™›'uz“UK›e™U«b9ÝÑm¿UD²nvf:>Ð*ÀÂÚXE"ÆT[ó*7tcu±Ý[nÞÅÝÆóè¾·Nêµ!+ùdØ5ga[d;㛤›+Q•&¸¬©BÇê,¬éq†D‘n›š=Yó88ú6™¯ eN 0 Äw7ÅV¥~ñ?ŸÞÃ%i½Næóß,³ƒëª>r û “Ų33Òñf¶ÃhX€¸ÚDáÝË1ÏÓõh²›ü:O“¥áD¤ÜÞ^m8Õg…iVt] ³‘¿geqTÐ>8n¹•hv·.væï·cvU$¥aaw—Ïç¶&ø( îº¹[ø@“ k™¡!¢ú»³l™•I}ÆÁ— kßçÚc#߆QgžÝfs "×e>›e¥i'áFPó.)mcqe.Ï/l™MdÓdzu| ³ÁÂÚ0›rÕsN·½‹râC¹/Ël×…N¿‰i5•TUVÖ¦¬^/ë|þôòÐ~ÆcÙÜqÆxÈx°°6Œ'E>íh{;°©È´Œý¦i²/¯,6ì4Ýž^h0à¼/[7Î8¯ã9¶ƒá& ÔGw(½xwfHéãBÃÒÜ×ëR¸ÏFx)Òt]þ¹CsÄbwû![ø0# k‚8FQÄþaRX:#²ä1TT‡¡xKueÿèG,,MΠӤzz1M4«l•˜7ïŽvð\ö Ù…Ž4 °°6–ÁCäûjÏ"»8äß›Ät:`²×ålUt|àª8V)#mgÊÐñÊ kCÑ€!?VÍþ‰©S¾<'8xnl·½–EmÚb¹Íþ0'ÁQæp_§„~ßAeOÅ™¹èø@s kc.4@˜’û\竟@úGÏ!«ý;LßtôÄ^Ož¿}ûÃåd{¦oºgªÖWÓì675‚›v4',­OÇXö<œÑZÇÒ,¬ ­ E8TÛéM²\fsSßbzöÚ´ù•WÙýAý¸Å7UÍ Nóïò=ݯöö›Ä1¢Ô]s Fl¸°6Äö âD³5ÝX%é'óÿÓÆÔÓ&‰ð‡úX“é#Å2øôì*3>XóyUÆ;;ûŠïþ¿/wÖÕ!‘ìÎ933hf`a-ÌŒÄq®úãE9µÈ^ wï’ÕÊøüÖà‡ a] ‹í(¶ý2gÓàür%ªÒ—ÍgªÐñºp&¬R“5µ3eèø@e8V)#…”3eèø@e8ö^1¶Ñ'âm§GÎcèæ÷?Õ5dÑÆÅb÷ ò›§Ê©âÇÛEnnk™ôÃ*Ú“W5·O4Ï3ñ‹<-–ò§ËsÊÏÆ±(Æ‘/‚»zó¢ù˜ºÝló.4ß;•4åjþ³u}S”ŸŠzit‘4˜Ì]]u-_ÿ3iÈÿ½ÈÆ„nÇœPZ õ§5ø QLUiþ®M×àÝ7çü>U»W¦qŒ¢0ô0#ËÞ¼2n\™Ö~׋GW¦ ŒA zÒæ¼RÜ…!F‹±Œ)Í7uË#Dõ„,ˆ…JÁ¯’åúºù?yÊ1ŽF*°kš $B‚ïÈ@h€Â`K†ï²1+w¿Ñ£ÍNc&š=ð±0ö­Ù_'‹lß•yÂò‚cæÝ]Á;°p'Q´oùå‡ÂÌ0‚xD£Á¦ €¸'!in ¬×ÀßGB*ô«ÚÈã0÷†˜ù{SKï„1M:¸7ÄìÜÛ˜}•RžÔ䳞x—|‚ïÞùhÉ>3nú0îù×^‡Ã?‹œŽpˆ©¸9÷—Px€|CÌü@¾Í™Wi.c7k»·ÏÍ ~˜–Ö"íÒR@È뛎«Ö=ÉVL…n($×êÆˆHœÝí)êð°¼,ªzîžHX~pÌ ´ÿ Ãê† endstream endobj 3128 0 obj << /Type /ObjStm /N 100 /First 973 /Length 1165 /Filter /FlateDecode >> stream xÚÅXÍŠœG ¼ïSô D£VKý‹‰Ù[À8>$1>gã öœ·OIë˜üt‘K.³ššú¤þT­îb/+\¯^Ôüï(+¾ÏR[«Ô ¤2ó >i¥õ@´(ë +ªËä]êÁ(Ö™Åf «tq¤réÑZ˨H=V&¢ešgFÁ¹éeip°äÖÌ- ,š‡cÂÙ“Ѝ&ßkˆlx¤x_À;Ö¦uDË_RF©Ú€qdz:+°†ÌÖ#Ö{÷ùFõ'°Œ:"3ºˆù¦vÔ@ª:W`Xójñ,Ö¼"³¢Ó,Ž)ZÍ#0)⯌¨!Šºx{v ´q´#Z†xiØD4ƒ·Šhs dÑᘡ†I`¨a=0ÔèÑwCnÞ+C7ÔêbàeDï 5fôÞPcFï±%dEï±\YÑ{ô¯1TE„ÆcˆôóªQ\óW] 5:šˆå;†ñ©"ò؆cÞ&­Þñê…ªÿ`j˜†¶C®®ùÀ×>CÒÑ‚‡Ãˆí?Å1—göÀðu…Ò¾ JOßý1h6æ 0ì^^éÕ…G4Íà­¢"Žaèôqª°-ôq¬°õôq®VÃ8…Ò˜%ÕP£££³;ôæööæò´¼Ä&m˜éçåòý?ëÔãq#Fêwß¾}uóäÉ¿“›’ïêYy£sä*䣗#s%Á¶K‘ÛbÂK’Ç"l›$¹OjØ9² Òdç°II{R“ÖŒŒ³™EÉ4© Žò9Gf¡.IMdUòƒ1GžLƒ“šà$¢¡IMÄ&ù)•#ë Ù’¢Hë4GRœÐ´jR -KŠ"Üh­¤(8Lˆ[RSÄ#) Ž`òK8GîL~WäȺ(Ùeܨ$šÔ;ù’#×N¬$™ZOJ²””ÿ¦ÈÝý»‡r{[.wî¡Æã3wn£æ1.;÷þ ]ž½¿óÝõ¡¼,—gOïÊåÅõÓCù’ïÅo¿^ñÃ럯7—oûúîáƒ~õço.ϯî?¾sýðx³öíõ§_^}ÿ©¼d¶ŒWæÔJs½B½×ï‘CŽ;ÎùzI7G_^ò«Šc·Éo£ø_ØŸ[2ºû¼Ù*-Mr•ÉmVŽÜ˜X$I®‹\Ý™'¹]N‘ûäÎ.GžÜläÈ¢ÊL’»Þ$Ùµd›a¨Y–Ü*¹+Ï‘…I[R8^Ò‘ÔÄÖ$«–$ÏAfIMltBö$¹õìP™)õlbm4$©‰5!Ll’,8@8©‰U¦©IMt-š3©‰ÎIK’C¥cÐʶNû æ¤&Š¿œ]òÉÄoÉ'¿%ŸLü–|2ñ[òÉÄïÈG¿%ŸLü–|2ñ[òÁÄo¹'¿%ŸLü–|2ñ[òÉÄoÉ'¿#Mü–|2ñ[òÉÄoÉ'¿%ŸLü–|2ñ[òÉÄoÉ'¿%ŸLüŽ|4ñ[òÉÄoÉ'¿%ŸLü–¼7ñ[êÉÄoÉ'¿%ŸLü–|2ñ;òÿhâ×ø§‰ÿëþ'ÿ;,ãÍ9 endstream endobj 3251 0 obj << /Length 2394 /Filter /FlateDecode >> stream xÚí\[oÛF~÷¯à£Ä“¹Ylõf³Yè¶Mô°@´DÛÜH¤–{ýï;ÔŒ\‘¥C g~‰yøÍñ™ï\5Ç8¸pðáâo³‹·ÿ XŠ$•Áì.Ɉ*Ò¯Š³Eðyò._%‹túeöc³Z¡^-Y³š+…BF5ØfaN/© 'oÍ ‘¤yèâýìâ¿D/ÂùcªŸÁ|uñù úg?ñ( ž6+W Q&õûeðéâ× l¥Æ(ÍÛæåÃ.2C ó@ñIAäæsŠ¢0 H³: Š$¸ëE:‰o%oão¥„ì°‹%QD£„Ý÷yóq{¨Äß=TAPÄ·gšÝ¥÷uWižmN©1ø|)1žäëfmÙZlti?ìyò—wL^Í:N¾3´~­6Uì2¥Åçþ´ïx ®Â8>© ñôÒÐÚägüe QýuWëo{×O~†ñ`låm\&°•ñbQ$e›[fP‰”q"~˜ÑÆwd†«°G˜Á0”Zf 3>þzÈ”Ã÷SÄø€xÙe•~Š@Í™¤”ôwhm|ÇCó&¬Uæ(ÔGêMm|Ge8 ;$Xáüm¢ÕµÖѹÑJËŽBz;Ѿۉ: Ûï“d¤árX´ÒªF–ºÒà¶n‘<¦óä›8DêT8Šü1¦ïÈWa0&”ˆ„jX3¦\æÕŸ‡2j“É{cL Þ‘0®¢BbÆ–AJ JCàë»ó\ÉñN£è¡2(`¹Næé]š,ºâ¾9n"Õ0 ¿K‹(Kü§Ëøv D[é›ê]û”.—À#NRšRË›µñ-ÌYØ!&&9¢22&V—ûdDP&LÍâMÅm|G{Ö*ƒEKæOm|Ge8 ;  œ"&lÓcöö7{ §þ:øÓЋäq±ºÇlvŒÝZc„ä.èCüíЃTšÝ/&E!âx Š×ë$.4ÀPoMM©èÍzÚøŽÖã,ìëa±È6†b`BRÖ·ý©-ûwbê?o‡ÒÆw<oÂZe`SÚxSFßQÎÂa(ŽW¶ÍóéóÈqç±.’*É@ŽWùy™££w\¤÷i³Ö4[וC)zª.¸…¢§Ð¢`ù?@ŸV]dCþ"2ž/;êà»Ù‘³°ýV#¢ "ŒÕàãÇüôdÐ3‰ûÒù¾Gþ™?%I1y)°4Îk äu6ªÎóÕ œÃ=¥Õ0²Îãìæ6¹O³›²˜w•ö}×aöñúÃÍûÏzô|ÚnBSµy³›6¾£Ý8 ; þˆP!!lÓÈŽ"-÷’Ô¾µÉâB _lÀ¿~}Œqÿn?f'’õytõм3* ù_•4ŠVEz?ØC==¤s QÏ¡rîB ÅóׄjÃ;Ú¬«¨CLVI¤`O Ê9å{Š¿-¶^wŽË¯å€ÀJ¨~höm C×-Sè/îÏ77ÃnÖq÷J~sÕ=ÑO[™4&ofÖÆw´3ga‡šH2Ûëͳå3Ô€žÇµÈõÃs™Îã%T€EZ¿šs=ÍtØ)êu5n8¯|ô4Ó‘Ëà"Yåƒ K˜æ“7Ãjã;–³°C Kp$mŸ÷¾VïÂÿÔ«õ~Âs*Þ@¿.Ír/æeì<ϲd^ó%h6BûóD*ÜÐàqæï‹Ÿ¾£8 ;ÄF¸Öµ_üÔ™ËW‚š£7%·ñ•ìMX« bZGÞ”ÑÆwT†7a­2°©þ½)£ï¨ oÂeðÈÔU¾”ÑÁwS†?a·Ê`H⎖D”p»ÐÙ~µC7áÎÍVA"DÊ6uuæ(î† ÒŒÕÄ«õr~³žSÉÌœÍå¥y½Ò?Hu€4ÿûå^ðfûþºYm'xvç}ppI9bÒn{UWyñÝô’Ä ”À“«ÛÛ¼ªÌû¿Ä›ÿ¤?¬’)“Ç©4ÏQýõ¯ ~HŠt˜0_éTqU—ðiªÿÉ [ ·\µ$(T*à˜#bŽuw,ˆíŒñ(B¡Îž¶cA#cP„• XÔÜZãÇ0ôj½V a#Ù®neˆ¨`«)£Œ:~гú.žWu1%áÄfi-EPª]žIÊ8R¼-Âß“)Ñç¶MpZ›7ë°isމ6ðöæÿŠWÉ¡™0‚?gÛ½Ão Ôq¢]H:üF÷J›„G0šß– 7Œ- •fi >|ˆ„!Cbë\^E?ûÆØú…}»{oÜÒæ±ñ óv76³Ÿ{ƒ7Þ瞆‘#õ@Ç™w>Ä–x²ëäãOiýR0ïÆØù…w;[ÿ{x7ÆÆ/¼ÛÙx=OM Mè3¯»¼Ÿƒ%Ú'¤†ûC¶ƒ¢é'R+&0Ú`žYÀgšÿÔ_C·ƒï–ÇúÖ*C–”þšp|Ge8 ; ÁÀiþóe[»?c¼ŒéäZa £¾ãyº ÛQ½4z†Þa–Û„Ó3ÚøŽÌð&¬QÕa]…þº\|7e¸ ;ÀíQ¬±bßh®ö|ÇGCŽBêï>qßñD]…íw|4 !üu®ö4cÓi©¿ænß‘1®ÂaŒRˆñ:W  Œ.€#ì¯ÞÁw¤Œ³°æþ¨Þ”Dòu´öu´ÖíR#›²Ë›…µà ÌUÔ!ö%„–T¹ÏÕRn #o nã;jØ›°VÍFbþº|Ge8 ;¤ `Í…]{·ï} ½ì> stream xÚí]msÛÈ þî_Áv/Þì;ÉÎäÃ5M3¹ë9ל›vÆõxh‰²Ù‘HŸ^즿¾K-ek)‘ Z_Î͇ 3ÒêYx€@ˆ¢ÑMD£÷G:?zýFu”’Ts"¥‰NE§æ³è|]¿­&ù°8¹<ÿ¡^G‰Y­E½ZÆ1I7`Ë…izrÊãäøµ½0Íê½;?úõˆ™E4bOpóI &G—4š÷~ˆ(‘i=,WN"Å(áB›ÿ£_ŽþvD©Ÿ°4#IG±¹ÆT¶±Ä–LS’èäëÀœÐXG±L‰”i†YmÖ*Õ@X°uè„peô£aæ_êõ§¬\Œ²Á|1=aÉq>ÝÔ*ç Qú@"p!I,[2ü9?aêø¾ä›»‹TÄí.)3foí~–Mòm\bDÉ}öÝ´¿àªiM’d›ùkåÇZ1Œœ›µ¹BA¬H(b³^yÛ€n#¡d„&Mø~r7.UÙC¾ClýH¾õ½~ûsÙC¼CìüH¼õ3óW®îE½ÿ)Wô¸šÚkóZ7)½eÚ$¥`)–•0~Z"0V¼äŠyZò”P®Á´<Àά\ߺf¥ècå6~$åúÆý¤}¤ôi““I†;lý1(1ô3ç}YOÌ!QÛ1F=¢F¬_WLÎdÄIš¤Ñ4Fkùƒ µýÕ ´ÉW¨V« ,0«Wcñm>ÔÂ_å>Ö±4IyPØF #5Mƒ)ÃÅG*#˜°2bjȇS†‹TVØ&akйŒÊ1‘ª–SibË2B.C]î>½‰ì>½?Š.N5¥ÇYuU”³²YÔì×µxšgCg¥Á݉ü0-湋ìü%n\ll¨RÂÌ)̆.>Ò†Xa{lhkk¨ ‡ÕÕ`2„YqR sØÊ‡b~ [9¿BŽªñ¸z(ÊØòYµ˜òY›t´/ìf“4y OñÉÅG²)˜°2LêÈFG© ¤¨[ü*6ÊeÜ(™¥_ÍæÙt~5›vsUI³þüÓ‡÷WÎÎw/—Éjù»žûFH®‰`,œ]|¤!±ÂöXÒäá*Ma–dåÕu~S”0sòGsžøéݧÝaPf*ÅÃÔÅG+lAYB4,k1Uæ}õMÉW¶9ûø_ÛPiŠ!Î6.>Ò6Xa{lCc¢Wˆ³ååf'Ïyûñïg¾¾£R›ê†²O g´°ÝöQ©&1çÀc­ºƒÙƬî¶gì?Ï>ž½ó5}b3ä`¦wñ‘¦&l£Œ˜ÅÂ%w-|¤2ÐÂn©Ç3bIÚ+çÐ2ep›•e>†-³9°ôZ@WšnžÀº<‚Žó ºU†Ð¼ ,+hKâ.ÏæùÐ7xh[óé/ha}üE ’Heý¥1îFýMºO¶Ì¶ ~Vç °•&¡€z΢<¸;æ¿.²ñ[!åbrÝÜAÞíŽ#/oœÁV·ãËn·‘¶æ æ6.>ÒmÐÂú¸â$Iš~ÝüyŽ™'GÜm8±¬­‚ÙÍGš-”¨&¸­d‚©ÂÅGê-¬……ù°N3¥)ÄÅ šRŒ¿8ùÈÿ3ϧ%82O‹›hĵgèÚßLЃa{/Óú4‚0[aóé7ha}ü†SB›Öˆo£qiB(#}êöãI¤Úb¤ÚÖºÞç ¢ŠÄ:\/­…dP0a­2djËÒPÊháã”âN’'„¦|5ðZŽŠ›Å4›°P¨îêµí’eùÖŽÆØÚlÛ÷eb §`uñ‘Å Û}çZ&1aBXû]ÐË êaÖ½^Ì{0óÇIÚ[þEín°4k¥æuó)ˆ2¶EC0ʸøHÊ`…í¡L¬ ‹›Ý;0efãjþ‚8£™1G¸ÎU É´°ƒƒ±úë Üì¦LBÖ´®>Œö (ý#Mp.A«¢ 8»ËŨȇ<~4§˜BÛaÙ}VŒ³ë1ìª[ àÊÖ­Á<ÂÅGzZX/P’pÕt¥Š1°P¾ÎÁ¥Ãpßj@ÊeÕÌh<ÒfHQ{>)Oãæàã°ƒï—|œÂ8ê4+or`àʃj:OòÍ=’/&wÐÍ_d¾w&¾‡úÀöNúnZ×ßPyíâ#‰ŒÒ”ÄÂÄ"Á‰M{1ƒ6gùü°ü‡³ÕÝ`^³wÙÈl¹Œ0.>’0Xa{èÁÍ\&}ÓýàîªY±Ñ8hÞc§ü²×_ö¬¦_ éË([ŒçÛÒûWv3¹c4§ÍÚ¾Ñ;Ñc¤> 6CünâQ[§#ž‹$ZX¯´©¾ò¦¥[”>÷î«ñ<»Ž|”OórË€ûŽœþ¦¸o¼Í;;v]ÜUã è>Y9Üc‹E¹mt©í„¢c GG¼°>t&DJÝtD·¤h§Hl‰LË.>RËXa·éÔ3\& QtÕ¥µýtæ÷KèIÛ7¥]|$¥±ÂöQ:މ’«.*Ý—¥tOæÑ½¹D_ùrÚdÚÖ×Á¸áâ#¹¶;¹f •4Qö Ù5?uY¶à7Á±_v…O®LS¶º Æ4É4¬°}ÉŠRD¯ÀÂg£lŸl4H%/䲂 ÆI¤¨§3Ð’h½jiö®Ÿëof ~ë×ÏO‚akÁ`fuñ‘v &l£ f+‘`Êpñ‘Ê@ ë1µ"8'±ú†VÄÞC+‚Ú2(˜A]|¤A±Âv߈Œ‘8e߆VvSƤ¨Ë2#eZø8Ê …í¡ ¥Ë'.~Zp&±õG0θøHΠ…õiîñ$%I,¾ ­ü ­ðØ–IÁ<ÂÅGzZX/ˆÍkL~C+\Ûâ&˜Õ\|¤Õ°ÂvŸ}Ü\S¥ÂÍ­øÝtƒ~ƒâÙ›M¡†gvuy ׌há#‰ŠÖc …›¿ M›þTàa£ó[èšFÆ7 ‹Q3LÕ!—¦¨•ášš-|$‹°ÂöpFjBEü‚‡Sz÷gÜÚ{¾_ãã}cakö`ìtñ‘ìÄ ÛÃN¡“g¾¹ãÏ­ß îÃn‹ö`œqñ‘œÁ Û“ÀqIk†1/Äá¸mO6hÞ¢ý»lÞƒùºGùÞ§+µ•0.ºøH.b…í‰_L¦Ÿïp5áë+:\·Ýr\òÔ/›ZËh,•Ñ)#jõt†?taªú¶ÞÚÂmøÕwXÄDë ÷È{–Úú>ï[ø8Þ£…íktPNÌ?«ÑšŒðÃÜR¸ÍQ÷§êÒÿ õi³Ä6‚ÙÞÅGÚ+lwÌc)#\ŠçËÙLE± êaåÖøâ·7b[¹㎋äVØž¸Á#Y"Ÿâ†zñaCÛ<˜é]|¤é±Âv§íL§DðUßU>kÚÎ^VÚ.:ÒöNÍŒ<º}ÜàÑ#¦laŒõ.>’õXa{X¯"tS!\¨ge=Y¬—¿ÖKÛšÆzÉz¬°=¬—æJWƒ”úYY/^ëÕï€õbÙ FzÉùP¢6šà¶*¦ © ´°3¦Œ+"“¦ós6›Ý*ƒ-ûo>­ ?ãžÚ÷©;¥à«þÙ ü¤õ{°u `À^”ãTà0Ãlß!˜s¹øHç &l£ jëè`Êpñ‘Ê&¬UFb+ËPºpáqªÀŠÚs¥œh¶êÊÕ Šþcù0™î‡ÿ8¾my°ew,¼?›å¹¥²ó™>帠‰ëÞϓكc[͆ò4çihQ!ÙM"ˆJy”0¢•\{ÈÁaOä :Ç7kßÇCOÞ×?°zµåÇP±ãŒô¹ÑÓ<›€³‘A5™dÐÛ€çÚ ·ÖZ{mý>vóœ+’ÒŸÇ–k¿K½böãïR7hÿîPfˆ endstream endobj 3248 0 obj << /Type /ObjStm /N 100 /First 970 /Length 1200 /Filter /FlateDecode >> stream xÚÍXMk]7Ý¿_¡?Ðyš$0Y´Á»BH³hk²0飂]lÒߣqÒ K‡®²òÜóÎÕHsFÒ¹Vž£Ô¢¼ÿöôâŞݜY» ­-–#7&Ì/ǵJåÌ‘µRÅ sdžTÑe9rÄ59gŸÛ#GN ÉräÞh69²­­#7%M–ÙMH[–¬Lë@Ì‘¥’iR¯“¬'5isPñ“#N­%5iÝ £'ÉÞȳ›ª5#ÏlJ]’š4ÂŽM’…ij92W–ÔÄæ¤1’šàt¦)ÉM…f¶t¸ ©Ö¤&†¿5;ekTgRœàÄšÔÄD‰{Rc¡e“räÊ´îòYg%™IM´ORMn*õAÚ“â–&KVNÍÉ<© µšYŒ° “dVZŽ6G®B.IMà È=© , -Ÿ™#û¤nIMàø¨ä¦‚ ÏŸŠ¸\-;‹éÔ¿¾¨®ïïžÊÕU9_3¾Aúó;ˆáx>żŒýç'|—àCäÓOŽ«$0ÜùÕÃý»Ÿ.O妜_½¼.ç7—Oås¦7ýyÁ·¿_Nçõr÷ô¸¼0¯÷Oç×—Çûï.ÏÞ,°/¿ýqûýýÇr³2¶‰ë6fîê-òÝ>`åàZð¿Xþ2ê_x8ìb&‡î_ìÿòp[ò‡Ûr<Ü–|äá¶ä#·%y¸ùÐÃmÉGnK>òp[ò‘‡Û’<Ü–{äá¶ä#·%y¸-ùÈÃíȇnK>òp[ò‘‡Û’<Ü–|àá¶Ü#·%y¸-ùÈÃmÉGnG¶®ø›$ãû›P½,YixR@|þÒ¬É:+Úyfgnž3©‰¢rU“šÜoíIMî—9Yfûå–\ 8ή™<èà I4©‰ήžÔDt]ÉM%‚ÃË“¢îB«YQ*/KŠÂ‡×HŠÂ¸Š›$EáuŒñ—ø·ïWÆåÙtýãò7»`Ú* endstream endobj 3361 0 obj << /Length 2945 /Filter /FlateDecode >> stream xÚÝ]Q“›8~Ÿ_Aåeíšµ‚„°u{•¹$›š­Êîm2µwU¹T cC,òœ âÇ;7+çÝìy¹IWÙüýÍ¢uà„¼5óDkÒ€ƒíb×/HΞÊfX\uñòæâ· Ì[¹þÜ¿Ôódsñî½ë¬øw?:.¢Qè|ÚµÜ8>vñÿœ;o/~¹p•Ø.Š|ñQ^#{(p©Ð1Ÿdqž (Œ,ZGN•:ë³H£øJò6þ^JޱŠH4°;ÀêÖ‘ÞìG«q¢bœBùq£ˆÊ±jîÒÝØœÇqÞ-˜ëÎÊms¿môÚ>”yߦµ&òZ¯]œçz “»¸(Ò¼Ý=ÿ­ßªg.ËŠ$ß®²âV¯—殬5uW”šŠ«ïÓ$[géªÝ¼5âm+R\÷ÎIjëm| ×Ášpò‹CåÁ–ÿÕZÍÍŠº©¶I“•…&×+M —›M\¬º FòÄ8CôªvøÐÆòÁš°JØGAÀì)£TTØS`¢¾3B®˜°…)ÿ¸>ö‡?è’UÛ\â"ÎËÛéç›3Ö2àï11‘{Uµ®ObMW°‰5½ÑRSʦÊnoÓÊ|òp) 9a¬ÙGh`aM&7DØU‘Ò:Îë4׳¸™Øtê&®š‰ã©ä·mVg'“×çyæ¬åÜÜeºÁ]’l+ͶŸîÒbbµ½¸zþX»µÎmú¡5»éàÃì.¬Ý°(@˜2µÂnIsÊm•è_š´ª?eMr×u‹g}}Un:æ°;ÿÍY“àá}‘v-è›á¹µ) ûh²MG‡»Nv—ñ©Ü=¥`ö‡ez›ê*éëö{ͨ’…|­Eö߯,¬ áC†pHÂß¼¹~õáæúõË7Ýñ¹ÊÊéïMZñ°Ê5¾–w÷[_þûÆü—~‰rœÑÁ.bÐ-x Ÿ¡¢šÐ9ð!¡¤34œX ¬&¦À>Õè’š¯‚²D³iúæ}¦i˾ƆɔŠ5«iãÍ,¬‰Ý0Š‹TÜÃgìiv}W¸‹xìõºíÒJs½”gµ×VkݼÄù‰xL'©q£ð]ä{» | Q€…51 ®!…F=áÂXf^Ó—­Òû´Xé®L‹éæ²øÞ0pÀÚŠtâ9š¯Ý¹°ÆVãÉ”¤5«iã­,¬‰ÕP‚<nÒ=óáú§__¾¹Ñô¤y¬™½‹kÝd¥n§NóJSUº‰³B{+O¬ƒt#¼Êr6–™s´fm| I€…51 #w&‘”U•&M'f0Ø"cX樬é¹Ô³5a•2\™¿°¦Œ6>PÖ„•Êð#¹úµ¥Œ>Lö„UÊå’Æš2Úø@eXv¯ ŒŽŽ!‚©êFÓÝõUVxTSµ×eˆøˆ÷HºÉ,j¬âÍ}ž|¸O2â©â«ÅB¯ø7Y£ÝÝÿ|~Í[|ûù¦š¿ÞæM¶Þ²˜awêúéÏòòŒ«9áñu½¯þ:®s¡Èc¾òjÛÜ•ÕwüÊП]ås<ËcÈçÄÍ)æó<)Ÿ/pÍþçüËOòÔ³òbÚÎQRnP¼ý»ÒfoyPMüÙÃû³T^öBÞÞÅÕ}žÖ «>nˆjõå³¢l ÜÅ4AÛ{Ük!•¸ðj¹äMö-â7Š…1<õ£D‹ìÙFuÀüR`Ú(òÔÖú[¾ØÖ\æqñ‹¬îÇú´ŽaC®JL»pÞQ"²ðP71AnÀÊÄØoÌ›r•H5SS…ˆø‡ÏÔûýŸ×q±]ÇI³­æ8œ©%BKÜ!n“H@<ŠÚáE*8ñ©t_«s;Pן¦sêrÿàu:ÿ)Þ¤}åqÛ6ïötìEyÃC˜ûÇ0ì{¡ú€[®&z0„‰ÃØsÐç.ÎõGÁí#¡!)Ïyp‚çÉ7E×ö÷-]îó¦èù@½ãžÓ¿ÛYÚ[ÅyZËtÊKA]ä¥È0/{^R¾™ˆ–4ØE8º´œ ç+»–¬¼ å=XyܳäÞå£hi*Ó)+9‚È«ÀX©2ÌJÆž•|AL£‰héù|QE´i9E×^÷­bÒ󴜢ç/{äcó–Æ2ò’Cê-õ@†y ÀØóGˆÒihI<Ä×7Ú´œ ç+»–¬ò–ô|`åqÏ’•ó–¦2²’#ŠaksŒ‘e¸'ÊË…¬ÃG:å<Ì^ù|–ô°'¬R†(qí%J;ø@e€…ÕIH$¹¤û»ãŠuv»­bƒ›AîEÛ“Û”¾ÓÌ`{¢Ú€ÚKÚvðöü} ?úžJÔ¼sßËÊ·Åð–2wèšZÛ‰oc[¥‡DD§¢g¸XO²å´ÒO”ÚénzxüHB{ÙÜ>2Pa(Ãåõµy‡'¦L—Í_ˆ3b'ÚÞ}Ȩ¨:Îcq{2áùˆa¥]¯çMø¥Oêsµ‰¤[‘¼u¼TÇÆ=UñCœåñ2×DÖ¶Ó«Ò0± Ø«~ìà ,¬‘Eð•óUÙ°ØÔ™öþ¶m>ú†Xp±½ò¼>pÔ¬ «”áF»YК2Úø@e€…5‰èùr8 ¸Ñk—Å}ô“óîýdDì'ÃnVߺ6q·x ØO³·ÞÞß—U£{KUW«‰Ë u+BOõ4ê*H$Wu¶¬£ƒ³¸°&Öábì³¥É]©ýü í `™êƧ´Mî³ä£Áã=zãí'—#–¹)WÝGœg±fÔx_ÖuÖ4ê%Ïz°q#åšÚš´ñFÖÀH䢨RSÿùzíXº+0øÙ&=˜\ —ÃJøªæø“ÒX{öìV^Ûn “Öl·´]°°&¶ˆ}Úg»†l}´ç*vT›•.OÂ,x÷$ãÅdªÇšEµñÖÄ¢?åªÜû_ÝóNo_‹'陎mº’qƒóe&ÉšÁµñÖÄàüEûÒÒøK\_ï¬wùçšö@º7êq¢ØÛâëàMÇš°JžÌçYSF¨ kÂ*e™¾±¦Œ6>P`aµv.(Wy êÇ|äîÜÐï.ÅFëåðcm=kð«Ç­Ë,ƒµ±jãÇ *ìÐÈ`аJÈ/ös©êÏÿë)GrùgK©|˜RáÂꀪ‡ ®‡°¯2»o·K¹3Úݪ^P1É{óE@>?f\ë¡\"XÓz¨u¨°=:æx„(A8R‰Cw0pgW:[ج§áøp2€´6m|àp@…=Oy,îåôT. ÇϦZ?Àâ Õ| –¡Âh9à‚*?@F´üâÚXÍ\®Å[µ;ø@5[V)ƒÊ Æš2Úø@e€…5X4c"ÏßßE Yt˜[Ÿ‹½]èbm8ZðÀѰ%ªÒ‘á…5U´ñº kxaÂõÔÂCûñ6º®{)¬ýŸýƒÙp¶¢ÎŠÛÓ½éÅÀ3K‹•véHß«< Ÿž‹¿ÊÖë´J‹&‹MKE0–!5^·ñ¼ kÂkì#î+Eú_Ç¢›Ñ®ŒÔ¬i¹Ô²5a¥2"OÙÒE¦ °¨|‹<äï_m¡íFMŠ´÷¶Lö9Ež·ÖõͽõH˜ 8Ú¥îF[•Öe¾}Ü›R‹›'Z™E„> stream xÚXͪœ7 Ýß§ð TcÉ’lÁ%‹6dWimC!J!ä–ü@úö=Rš–)hqïxΜ±ôéÈöñ,‰s¬5çPÏWÁù*ƒWkð)D‡H!6d‚w\ÈË 9C§ßaC-Ƽa9àaš‘X†BÖðUˆß…ØØRˆí…ìq¸3Žfæ9¯b¨æ)ŸBó\!é¹ ÓÁ,…F^˜.lcd…<ï\ ‘`HŽW¬ñ`]…!†žÂä0İ]b8†î…!ÆÎ -LÀÛ1bìH %ᣒ#Ä8§0ĈUbÄ. ÕŸRÊ?½0‚‡ËÑÆÈR $.2140*MmbTªBY%« F¥«­!ZÂbh)kˆa%-&óTÀá= Ì5È®ìóͬðÐrªjŽù¢ª-%Nñ0é”âáßÜ…Â\XdG%¶RæFŒLH¬0ÉàÉ«bWÜ2žÌ4;HWf¿ñVwa ›††àš;„`nÙ­Øž‰eEv-³ÝU´TûTÑ‚*Z6pTÑ2vTÑ Î*ÚÉePm…¾TžŠ…Àš&UŽÌ;d¨¬ÂF§0š=ˆ‘aTχ‚+¾’#ÄP/ 1lfq#ך­»ûû»Ëãñ¢J4dzqùù—_Çwì”ëóìC¡Þ~|óæåÝ£G·ÙæäHíJs¶Éˆ€‚¶ÈFÙ{=òQÊÊôÈ{‘b%öÈ.”Ò#“¡={ddvšd ²hÖû y÷ù  Ÿ¦&N[šš`ë¦íMMl+ÙÌÙ|ÑÁæÖ#›Ð9MM™BššØšÞÔÄdÒì–yMk’5°\£©‰žM¼šš í‰wSu#,M²)á¬h’uQâ=òZÝÍK…i5ÅÆÞLà÷ÈØhI½© βÙÔç™65ÁJi zd3rij“AîMM`bhÏfaÍhwSf¦~2.ϯŸ>Œ¯“?ÿëÏ+>xõûõîò]ß~xŸ·Îïß]ž]ß?||÷úšØçw—¯¿ýñêû‡OãÅ`°•?wpÒŸx‰x¯Þa’¼.Xñ¿yâ¼´|cÑ~Ø?þ×ÿ‹ýÅñÂ=žè’áC›\˜Ç¸eÛn’aTæ-Ûv“Ì0·lÛMò<ij™³̇z“|`>În’7D½eÛn’æÃ›š¸-\Yš\…÷°.yÁ{DS‡yÔÕÔÄáu751¸G»eÛn’9{“Œ .Z#ºd< 7««2©5«ë> stream xÚå]moÛÈþî_Aܧ|Þì ¹\©cNS»uÜ\4h‰’‰J¤Ž¢b¸_RKÅ^Z$g5\7EýE²D>Í<3;3Ü]RoîQïíÑŸoŽ^ž3*½ˆD’Kïfæ’ÈHxaT½†Ì»™zŸ^œæËdšþüùæ]}tè©êh)ê£ý凨ö@FÙÏ'ýýˆ6bSõÛúåícdABê{¡¯ˆ x\ÎI¤"ÕGG^‘x³N¤AüFr'%ä ±$‰xäPØF"¬„öÝ)ÃÄG*-ì°˜{úÍõŽâ¬!­_“V†Äj3V'«†âçy±ej7÷éDRúbšÎfI‘de/`g,óibY]î—æƒŽS6ë†f«M¹n¡o¿áWxq ÃŽ³) ¸úà˜õÿÎTë“»8Ë Â/÷‰ý/ÐnÉŸˆt;‡»ß˜sÍÐØø,—$Ô¡ÑÏšøHŸE k㳂ʹöÙnò3¿ß$ÔfCº6_…Yc¯º˜Á®SÞãÄ$.¦Àˆ²†·ºû¶N'ñbñ M`‡ýíô‚ jë/, a(Ýù‹‰ô´°6þÂ"BëT­ö({kH f`$V $ʤÜÀiU×õ!l>ü©;̯ÖÉfš·cýI÷ ™AõÝOýåIŠÐyäý]u‰ƒÃ°QŸ¨ŠFÎüÈÄGúZX?¢Š°JC]ãN7ë ÖZÇËÕ"™ŽLgÉ=0EM'E¾N&y6…þ®U\”‰ÐvX»W{F:›´ÔmâÛú “TD&*PΜ¤…s¼°N"£0_j'—0e±I\•^[§J³¹-Q_gy=-+ÂI2n†UÞÅÀ!3¹¤âDE‘;²›øH²£…µ!»’„©P“ý:½î:‘.w8À•Kš}MвíÃý ‘ƒLq@{ãè2â°gÂ#}+ª …á\iÚ&¶1Ð;À…xì0ßÀùÇñÿ6:>äãŽp±íø&uØ™kšøHßD kãœÒ'\FÚ9m† W#\‘¬ñZ!Ý~{–h-;UÐæÌ}ZÞ9ò›@÷aù‰ô´°6~SiH°·ÙùëðH¥ìw£ÐŽ\UzSWÙŸýï³iÎdI;œ _膪3â›øH⣅µ!¾Ï‰æ—Àqý6q3X¬ïãÕ :VäÙØw[ò,K&e+ò?ô†YÆu»ÑËL|$Ëœ Û(ƒé¶’3e˜øHe …µq9N‰/š»;àæê,_,ò{CgódôÆøfµÊ‹òéó+Ô™¨îÔ8ã‰ä3aµ2‚H×Ü®”ÑÂÇ)-ì× áŒWЊ,ЮCuÿêOúµªMé/úí1£ŸûS™– D t]åÌ&>ÒXa{  BMÿ”µ ìôŒ­þp›ž;Ó¾T>RÔ݇’T uÏÛºçä»ö«·cë_ê,Ñ™L|¤°Âö˜@¤Jϵ Ä“øCøwÔïÇ6BÀˆˆÜUï-|¤°Âö!ð‰lÜÀoÙ`7Œ?ø:is¦|©|¬°=Ê÷+}ð¦^ :´?:óyDüÐ]aÕÂG*+lò'¡læQÊå;ˆþLg]ÎÔoâ#ÕïLØFTg@Δaâ#•R×~7#%Êof[½¾€Õ‰§ùr·ç/Y”‰~¤“"WæháãÌáNØFJ§'Δaâ#•¶»Ãâ«ê#ÞLi:~µû{x÷äßãŽ/ Ó˪€_ç$ÎoÀ#õ޵GíaX}Ôdftß[[—qQ~Y“¶Ó÷3‰³/·É<Í,OœäÛ[í‡\.ɦv§éÎW™¯öœ¶ýî(¤Î²œñÉÄG +l£ªWJ£çtä@§XÎ4oâ#5¶Gó•¼4tå›ë‹·_.¯~ë!{—ŸlO=¿zÿþéÙÛI&CW½¹øëÙõ¡×=½úÇåÝÉ»ßzy†òlŸEÝÕ‘-|$¿°ÂöðËŒ`]¶:Q>ÀfgÿlŸ¾ü!ê;úFaÛ>ÂÀ.tfìÌè&>ÒèXa{Œ.|Âßý$ð-¬¸‡Léó Ö¤°ðD¥ÜUµ-|¤Q°Âö… ÂBÑ2ʉñ÷øßƒõMuRîLß&>RßXa{ôÍ8áÌo;Áð˜µoÀÛ2¦ÙÁÃåaöQí»k„´ðqöD ÛcOZ÷ú{{v K|;Ñl—H””ΟÙÈÄGÚ+l·DT I{ítÃ0á6½vfi¤¨=V #"Ds3ùøûslŽ=Çïÿ­î„ÔY§3½›øHÅ;¶QF ³1gÊ0ñ‘Ê@ k1CKÕk“¦^æe²w׉_ûÃt3h£|¢å‡mÓ}õ+W‡N{2¹»©–.7‹2Î’|³nÍ&ž·œgí ¨ÃÂ×I±3ß0ñ‘¾âŒÕÛ|ñêj’ø²©Üó hêe œ|…N1ìk ë{£¯M«¡S~…Ðɼ3ž˜øHž8¶Q×™°3e˜øHe …µP¸O_ô(|`D9·Yº]÷eµýžµT¡w$m—JË »0Óµ3ÖšøHÖ¢…µ õL@5­Š7Wèm´˜„¬½[¥Ù¾“ýhx Öý]:¹ƒ.³[,]pÔ¹Ödä4“<›¥óMÞaÆ–ü<Ò%˜+ò·ðqäÇ kE~ʉäM_'†.|›§¥Õš7Û=NΑë×ÇZâWEä:2·ñ_v{uuÆéÕåÇÓ÷9xË0•""t7£…¤3VØòòˆ)›†×AÑ–…ÃÑö൦=F_—I‡UAjº'ÿ¾ èƒ &ùr—émºHËo{²SË™¬+Vwt2à‘lŠjE¦Æ”™žcÜù¡¹èŠÒ™L|$›œ Û(Ã×Õ„3e˜øHe …µh’1?"MÛá5t†A’•Eš€ë¦±7¾´yLß"]ï£,7Ð#áO¹ƒ?—'N€ŠùZÛɾ‡†XtÚ™ð«/ÝõçZøH¿A kã7Bî7ÍåÑ¥7†™Ÿïäëë³ó/o.ÎÏíGð5ú|6ÜöKâö<«aês]/;£¾‰¤>ZXêópÕ´æVq ¼A’ÏÄ÷l³¼MŠuñèaèÜíMuÐÙb Ež”Oöè à þ±†§aïaº©àÌ{L|¤÷ …µñ&‰àŸòg±ï±³9Ž6`¶™J56i“ß7ð1î^Ðɰq;›öª[&Î|ÆÄGú ZXŸ¡²é]ߦ«|ö¹Æâ6ç e¾7ÎmðcY •×&ÿÇû‡üx yÂô ª¤ô—H7…\¹‹ ó´¨ÎùħM;ßUœäÙ\Y·¿]’5Žë,sèòÍtZWðc=7·;í­m‡ÝßÒòîàm÷Џ»é`ÂãxÕ‚÷Jßon8<2žå„ª&­ÿ[i”6ñz’dSpë:/¦Ð¼ðze9ø©jIütÞ„~5ÞlŽS1E?ìåÓgêM«¯Þyõ´åÝo\~§%õÞ‡G4ú,§aÄ endstream endobj 3478 0 obj << /Length 2844 /Filter /FlateDecode >> stream xÚå]mÔÈþ¾¿ÂA{Ûô«_ˆŽìÝe¹À†D"yw¼ƒ%¯=ØcÒýøØÓ=íõxª]n.QøâaÆ~\®zª»ª\ÝKƒu@ƒ'Ï®NýÈh$$ y\Ý*$a"‚(éŽ ®VÁÛçÕ]¶Ê¾»ú©?; âîìPôgˈ“XFØîDFùÃ3Åé YÕÉó«“'¬;‹ìëºK… nîNÞ¾£Áªûí§€™ÄÁçÝ™wb”pvŸ‹àõÉßN¨›’DõûËo‘‰¨ "“Pñ¹ÿž“$NÖŸuÜD:Šo$·ñ÷RBîð-VHž, ì°^úë½U™±“ìíFDªNrÅH"µ­n>¤e™ÍÎ@{°î{b¾¢oϧôÁUm]2zfؘý;½ÛÙÿ‡ÃøýUÛ þ¶*Šês^®a§7ÙÇ6+o²vzZÅø”ùjøŒî~£úÀôëƒÐ'[¶´ýðXDÛ¤?ÛøHc…à¬ìNÍHô/ªèAþâétpœ–®³{ÇB«ØÃø8†ã…u]Ã$"L†šó½5BWk|H?ÂN»n×P–¥[¨ó}ló’@Þ„ÕÊP‰"œûËçø8e …ñ(&œñ:&Š)í;¦ø÷äOúø–î«ñôÝô´óÆ1)T±½i߯Gj+ì„öãˆ(eR@6ÐþÛëÿtyD‚ Š T¿/Q&BôyS…ÔZX‡\M…Štñ·[®v^Ýݥ媙;I)ňHü¥j|¤9¼ k”!u`ãM6>RXaxJvúà&1;}²ÿ÷õÓ½ÿžøáJCžùË<øHÍc…мà$ Í«ûß&:F¶i½}ßÔ7C¿Ÿºæ&-ß_gë¼t¼ð¦*?eón—•+·Ëtè½­6#—í~û Ê(¦-oŒ²ñ‘ŒÂ ;Á(ÎHLÅ÷ôeªƒ,oš·ñ‘šÇ ;¡ù&–ò¨/_½ºxñþâòj‚í‡ewéÕÅ_Ÿ¿yçLYÿâ‚pùòÛï^JC®=ùwWÑ÷7½|Žqp™„¤Ë¦¼Ñl€£ZØÃ4“IBâXíivÖÅ0Ë=ÿçÕkxÏš‡{œ…Ú&gØtŒ pƒÆ:þõfPiP¬°»¯xènБ1DÐQ+ö×8xZ$IèÑÑ,x¤Y¢NX%Šº¯b3žíÿ}ýtï¿§~€Î£2ÔQ¸7½ÛøHÅ{Ö(CéÀØ›2l|¤2ÐÂ:Tãe÷Ô ÿ—Õ6}Áôxzø¸v‰=½¶7誰"=Zq»;ô}@Û€[ó»¶Ø¦eVµÍ Ùðø:’ª,\[~¤Ô!¾7ß°ñ‘¾âŒõ+²xw7Ehb*ྫ»ô ô¥1´“n2ùÖuè'sc}èë])tBâ'6>’'Þ„5Ê`:lö¦ © ´°. „EbzFáGf”…ø>ÌQwßAû¡Khû÷øûßÃ,Ýh}“Ö«yÏ~|  :ÃðÆ}É}´°NㄳýRÓª¼Í×m å@ºl»ò2­öÿµSÛ¥‹t;ìÁ>Êp‘ôÙš¿äÇp¼°N §Œpe†?x1ɽ1°Žûé²NfÿGç©AÄ¡Ô_n€t´°.Ž#’NÖÄÔåÊ Ø›¶nÓ:-·”5Ðåf°…niÐ ¡eZE¨óõ:«‡­zÇs×M‘¥Mö¦&_¹ìÑ®Úáž<’XQÈ%DÓÙ´ýÜX¥æõ«˪²uÞíãb ®ê4 Oj]ÎÒç.C‰MûNwÕùËË7ç¿üìê¡.qxs éhaœ"Œ‰ˆLÍ>/‡ýÄFóÓë†gM»›¼Mšhç‚ñáwbUAQ,ë˜ÐÈìuÞ€'[­3WP’0áïåÀéha\@EDš~¢¶,²féÑîüÕû‹Ë7Ï_ë4·Eº^6?m²-t¦s©6­×s‹­Bê*š7NÚøHNzÖ(C誊7eØøHe …u(¶ ¡ˆ¢Üq-Û²³|éá|lõòÑ Ì€¯^Úf»ìd}ú´¹ÉÊ|}R½‚î poÙ`ôàºHãÍal|¤Ã …uq.‰’bŸ…»låâœD<…VýF yöíŽ-4ñ?V“Þ9‚L—h¼¹t´°.nÃQ±y¯á¼¶rnÄ]•ðe>Îþ„5ʈu6êM6>RhaV>ñ„‘04•Õ?_|¯m*x´Ë¼ÙÂGšÃ—¨FÝmd识4ÀGê-¬Ã¸ÉÄD2vŒÏÁvܤ"ŸõJÉ|w1Ú±Ý,ò 웺ú”¯î¿!Ðe.9}°vænõ<ßNÇÇ ¥ó5ožbã#=-¬‹§¨˜Dq2±I7¾sÿ 6½†n—œ‚ƒò."‚¾¯]¶°X8+¸­Zàí×uÕnf/ æRçYÞˆnã#‰îMX£ ¡£goʰñ‘Ê@ ñz³£B'&‰#S¿úü*ñéèz³³›-í¯¥G¶ç¯F¯Š ÞÀ9 ¹¿zÌI´°.àŠ$L¸àÙâˆ] °[¡ `:EñFI´°.`²»Xºàü—1{Ì$ÀΔá,$PPÚ=–2l|$к€ ’$Ê™Y˜œÎ!‡î¹Îb ú"ÀGÂeD:Ø÷¦ © ´°i‹9¡‘iÄz V£ë,ŽpznG®‡’€cËY¶š[Tf¦c‰‰ dž/Q&”¾½©ÂÆGê-¬‹†”0eŠÏò­Gׂ÷Ož»wŸ¹–ÊÆ£ÝŽN}âË)ES-½\Ü'_úhvî»}k€Lê”Ç›ÛÙøH·C ëâv2!¦`šÈªoÐúWíe­z³lkäHÛ(~ÉÖ^Ô#]ùPý\µPrör†ãÎ%t:é͹l|¤s¡…uq.Ñå[Ò¬e¿ÎþàEKåâž½­î4É—Rà¾fÓÖ›ª™Ý7Á¸N©½9toÂe0A¨ðWzà#•áMX£ ªÓKoʰñ‘Êð&¬VFÂcþ*26> stream xÚ¥XÁn7 ¼û+ôå)Q¢#‡6ð­@æÐ6ÈÁHŠ]Øþ}‡Lk8©6%’Ë3ß¼YqÅ!wGn½ÖRKë•KWÿ+eÅ÷V¸Ð [ ZDEf ³4îXiºJó\yÑ:sÑ ¤s+#8øïb-³ú:<ÊìÁ™e®àX±È*fŽH-K.kv¬,R¸r@¸Å:‚…{äH‡dÖæÑ@´Ì£YXz`†È[Ø^s¬UDӱƅ±(r4äè#0äPr¨Nc NˆcôÀc¬Àc¶Àcšc9LëÈaS£#ÇâÀc ö¨©(/"»j`¨v]Í"Ü3DØ‚(Í1­ˆ¦c¸Lš0r¨ ^k”D:{ù9º†ZC ù±AÑhEŽQeD @?™Ñ¸]™³"Ç@ãÀÃBbˆ"+4FrYr¬6]{`(qµÀ 7Ǽ³x:6±-l9&Šˆ›q ÍÛ­ÏîýÈ-”Ž v¯øD•ˆ°òˆÚû†/Ð +Oö+\ž9\ÃVƒ‡•MýZ¿5[¡°+V6|]˜y³æmï);J×9ò. ×möu=VC¤õ‚ÎsÝPôV`Ñ l–îÍ…9âvûBES7— :Ucxííˆ ×‹ËË‹Óóòºµácý²œ~þå×¢ƒR³1 Úøæý»wo.ž=û2yVT6GÖE ãœ#w£†>Ë‘Û$×6G–A>u92+õ쵓⠔"¯FŠ^ý„{u{óP./Ëé O¬2?^ƒxû7Æ£€Ûã7´8×ÇŸFÁ ú,wzqwûö§óCy]N/ž_•Ó«ó‡‡ò˜éÕ_žñÃõïç‹ÓÈz¾y¸÷É¿þâôò|ûþîíùþã´öãù·?®¿¿ýP^; KÉŸ#Ö™l½A¾ë;,‚D§:ÿÉöý1ÿ¸ýïxPóM£ºSáö?ÅÂì!K–¬L«'¹½Ò2N’[¥Š©Í‘yQý\àCr5B÷äÈcMÂ{'I¶Ax•$É¢Š%É£“Œ¤&CF?Éí‚ÉÏ’cò“š ©äïê¹.ò×GЬËHY“d›¤šÔDç ]IMt(ìP©vÙ…{£)IM´ ab“dÁ¤&5Q®d=© Þ…d–Ô¯iZ’*øZÙÒÁÈP­IM౨fo¹+Õ•Ôæ¸%5½%¸Ó$™…`8“ä s¡É ¶s±’š´ sÑ’CÕÌÅL B=Y9X4r×›#7%·d9²À\ô¤&0ɤ–Ô¤U¡!IMd1‘ÔD¬Ò¬IMð.¡Ù“šˆMK•ôI–}ûà$D8z%É¢´8) †„–&E‘ÚÈÏA)2ÃLÖ–GLòSHŽ<™˜“¢à¸KðøIr_”¬2 /áXš$Ë$±¤$ìfT’’pUòcrм:ù@¾ÁÞµ‰Ÿö_§þ­&~Χ&Þψòÿ”ý¿&~G>2ñ;ߑMüŽ|hâwäC¿!›øùÐÄïȇ&~G>4ñ;ò‘‰ßqMüŽ|hâwäC¿#šø ùØÄïȇ&~G>4ñ;ò¡‰ß‘LüŽ{hâwäC¿#nâÿ?FÕ= endstream endobj 3544 0 obj << /Length 1995 /Filter /FlateDecode >> stream xÚ½[]s£8}ϯàÑ®Z«õý1oéd·«§j¶g'©Ú‡TWm“„ YÀéž?`CD„æ%øC\®î‘d<8øtññöâÿ–AFRÜÞB"iX  \ n7ÁÝâ*ÝE›xùõöײµ 4´–¬lÍEš+;4$˜-WTéŇêB$)ïºøçíÅÿ/´Âyíne"Xï.î¾â`ßý`Ä~ZîA0¢LÂëmpsñŸ \ÓÆ]úºE¨^‘HÊGscp·"%¿µü¹‰â´b»ZU×ߢõ’àÅcXdKŠi¯«/nþÌ‹h—Wo>'k´\1ÎWòç·ëÏŸ>©¾¸¾ù½z± ÷E”UïÖámÓ„±t¬(GLŠŠñå¾xL³_h\‡ ¼ø¸M×OåÝes¢a¬j~S„Å>¯›ï“§$]R±ø‘œ†^¤• ¤QˆiÝ=k…žƒ´ÔÇÐÏŒAV2Z Âø´†¶BÔÕˆ“vì¤FT0¸h¤ißÂd®‹}¶$zpJ5r&”q¤x—Âu´$bñ¯£ÓΙ8SçPw·ó‡»èÜsGàïéötð5ù‰1"%ÒúÜà—±W uKnÎ`”!¤Â £¡bp5“GŸ¡’‡­Ra´.SH>à~Mðæ>†u9©£.Û¬ÚÉ hTÉ ^´’¼ƒdµîìŽÂm³;&äaõNîûT½å¤å˜ý&C`dD9û”—Oíÿ‹!…y †(°±ü\˜³(2ÚYÜ·§¿ÔùOO;`Àó¦ƒ ˜”­]ñ«·‡ßLÝ6=´±$2Ôx$[3Í…¿`tñƒáLö˜=Õ‹?šÂ‰Ô•oN’Q˜êÂâö1Î;uÓ)TRCöÈâ—zž}³íx»µk™¤…%dš=Ùv^<Úµ ûcù!E¼þxà®§(K¢mïÖE•黣ÓÍnµ.¡¬ÓZúÓeßQ—ÞÈÖÁÀe?Ê_0ºøŽÁðF¶ †€©×Hí-=|·`ø#[*XŒ¿`tñƒál (v(q©®ÃöZp…ˆ¤-ÍÏûëïß6aNä·uÞµØWéîy´ÆÓÚ×­~¿Z]]þq]Ûé%Ç‹Ë"?9æåï¼É;~™žñËŸöó9Êâ]”ávÐ4sƒ‘Ô©ltèü Wà5ŒžÅ4sM@&|ªkž…BãN:lló,½7î£Óû¸ožÞïéø6ÆÍ7[‚ŒúfŒF‡²|ìÙ,¾™Køˆ©¡L Õó; Â9ú?аEà5û”þ¸—}$9—£$[\Ú tX˜“{?&@`Î…i2.LŒF˜‚#¢çYÐáj\%&*sGe¶ Jsu¹bñeD¡sp:*´ÍÉN¢“»?•(Ô;fâíùw:ÆÕg%2õ·nÃ)|C˜·Z·‡ïVëú#[ƒ…¿E¬¾c0¼‘­‚ªEÆø[,èá»ÃÙ: æo± ‡ï odë`(3¡¿Å‚¾c0¼‘m‚ÁÖæoõÇŒˆHË‹!{ü¼Ž7ếÿæû,*ýhÛ-ÇÉCc?× ã‡,,â4©Þæ`b£ÚBµÔ÷›¿lãrûø¥4bÍvЧpŸGon=ÿ(wÍÓì)ôÐTs$•ÛÖ‹FU"RE§ól!@"ÜfÖéoÔ^!¡ê×þÜ1%0tÌßNPß­ÒõG¶.+]±èÀ;†ÂÕ*Ä0D^÷ÄfEß-þÈÖÁÐô°Yç-]|Ç`8“pØ…hx]+ü7‹‹"JìΆ©]»|ÿüœf–‡XŠÇÈ®aéÿzLVƒ§R×—¯õ×é‘”¡>n³ø%·Û?í(E?!v›hó7„ïÍC4DÁ Œý­˜öðõîLvŠÞ‡°öj^åÖ?n¿øÇ¸ÜbËgä1´<ö¿}^œ;ÀUïâ Ÿú²”æú1L’hkÉ&Nò" -ŸŽôþqm{†Œ€ ÜßyßQþÞÈÖÁàQêzøŽÁp&;%Š„:î¹'÷ñþ^L´Ré—ç²mÞαU)Ëãñp_ßq`\Éž†ò0 ¡0æIRŸ?¹Ã_—‡à®Æ“T?#6ü¾·LPÉ~÷½~÷í1¤ 1g{øŽcèJvd F²Ysº#3a¾µ=ý¾AOÎ=ž¥ìá;¢7²u0ðÁx‹EÞ1®T§ÌX#Åt³ÁðmÓgÛZÿ>Kw–%U½P–K>±z¬îÜml‹Ã0±$Ÿ? žå4N¶eu=Äyaû£‰—p»lÿ½,š˜Lå |é¾ ï¦{gªtoRÊÔv)|²]°—|áG,»ðù]Vc°]{GÚê†×ëwþF3$˜¿5«.¼›"©Ö×3G³Áü=?ÿ aÇMµ endstream endobj 3575 0 obj << /Length 2703 /Filter /FlateDecode >> stream xÚÝ\]oÛ8}ϯУÄ,¿DJƒA3MÚÍ`Ú™MEn(¶ìhÇ‘2’œNûã÷ʤIvÊw±û1yxxytyIQÄÞÊÃÞ»“g'¯Þ,¼…‚ o¶ô|DÈ<ÂUo¶ð>OÞd÷ñ"9ý2û©Ê-½r Våæ’¢€KÛf$˜ŸN© &¯Ô…R•:¹œü~B öÈS P”ùÞüþäóì-àÞOF< ¼¯Ûœ÷žO0¢L@zí}<ùÛ Ö´1 ý*Y]Þ5‘’˜{’Hø´B®~§( BT¹C/½å³H/âkæmüš¥I M,BŽ@v ˜¯<•¸®{•è~âÍ^õ ¹ê«›‡‡,/‹m=æ}ž Œ'W¿´2À™þá™翘!'©a>Sªy\Äii–y™å÷݆!õCËÚmk1 VåîtÖÆ·Ô™3²ÚT ©g7Æhã[ÃYm â#)…;c´ñ-ጬ6æ(oäÌm|Kc8#[ƒ €Od¢„ëz ýýá«˃Æè¬ $ª¶‰P¹}A¢ãò¦¤­ç·7ódjðžNÕõ}›<¾Ÿ ÀæLÒ•ºó뛫éÅ)_ÿQýPÄyëâ_“òN¥Ê»X%Îß¿y£Rý±ˆJ̳´ÌO)ždëuœ×ÑF36ÁÞ”rÄ„¯šr¾)ï²ü;(àÉÕã)õ'Qz:%!ž¼r ÿ©þûKrŸ¿Îâ¼(ãZ”´øí‡3(†éäm¥¿é2Yž¨Ô_ã¢Ð%—÷wðÏë ´¬@E¶Éç1 §$˜¬b”ÆeócžÌcUæbs›¥.›Gp㵺l T «ZB$豸ŒÊM-aІÙ]œWóƒIT'î¡aÄŸ|Sÿå±¹á9É–êGeeH, óX;n3ÝÆªÓà64e¡Rº‡*ø-áƒh… T9™Gù¢@@”ñÉE\<$e¬n¤™®=.£d]W±ÎVêvRÔ IRÈÆ‹³! &ñu—&[ªIUâ6V×"J*UÞEeÒ7÷[Œu…xòûFS„üq¡ÛA(:Q”Ñí:Fûaª€UJÏÄñ^˜Êa*Cˆ`¦ŽŒAïì‘^È YÁ’ AGÍçGˆú   .&•ÅßGéfÍËÍVÔê¹k‚Ò{…eIÞ¡pW÷X=@{•³ÐÄq*çà{)ëTþ!ºÍQòùÕî÷}àƒ¼Iÿ‡ú¾2½wgÂÕ©o‡QkPr„C1¸ð!J‰d@µŸ†õT> 4ÏËq 2;=6Ù4†5"0}ED.Ç`±f“ÅÓhü¼:W¾/OÉPÐa O3~yZ`Ôò¬®œŒ#OA1•òƒÌNžM6ûòügÞ#Ð1xìÚäa"ÐÁ•ï ´ºrj)P3~Z`Ôå`Ò`$ÿ  !müçdvm²Ù(í‘ç,vòl²0‘çàÊ÷å 2–ò4é—§F-OVMIFòŸœ Alüçdvòl²iÊ“bÜ£Í1(ì´Ù¤`¢ÍÁ•ïk $³uf ýÚ´À¨µI}hÓH®“† 1f¡Í1Èì´ÙdÓÑfïÀ>‰:›$LÔ9¸ò}u„¶žÓ ¤_µ: ¯t$ÏI$òq`¡Î1ÈìÔÙdÓT'îõœcPØi³IÁD›ƒ+ß×&@jë9Í@úµiQkÌ(…G›ØGÜ·ñœcÙi³É¦­MÒ£Í1(ì´Ù¤`¢ÍÁ•ïk |aë7Í@úµi¡µÉZ E›ÿä³@"JõnœÏøËéÖ¸Óþ­¾Õ.³fc8deK³|‹x·m¤±›­ºóìãgYkµDë®\ 1UŒ»ËÀbÚø–б%Û£Ym(ÔñËg2²bŠuVþÿH¦Zö îæF|KÉX“p0á#†õÛ±«åqÞоz¾ÿÌ•”:©Ô°xˆçÉ2é„Ê/Ba/“¼0å²ÛÏ9,Xfþv–âLº-xKåÚR"\Ÿ#ÆŸÖùŽöA=_¨lRÃ9Ö×d½w¦·Ý,|dàϸšD8“LßR3ÎÈjcÐînù£ƒoi k²CF×qÿÛ,7žùßGé¢påP‹y”¦¦Kó»*óÚt5fcêªo—AÒ"žÃ4ýqè #jÒåL•m|KUÚ’íÑ %ˆ×_»ö‡É3îðPÞx?ï¶ÃøÔŸŠ©l&†T0ÄwË`|˧͚ì§MˆíVÔƒO›¶|õIE꯰]M¶Ïv”¯Æ]LKÒ2ÎòØø…rT˜®Ÿ¬×Ù×£_ Q;=u¦Õ¼¥Tm©š(5`0@S¨ËG’èu¯Ã’xr÷Û+>«~èWâÊ|SA #œwëø16õ$«;‹%ÊÕÌÒ™~Úø–²&;DAœ#é‡f ê̛뛫¿¼žíÿsrWe£6¦¦€ÎÔÖÆ·T›5Ù!jc ãhíòâÝe·¨ ”v˜ïŠ«¡+#”„È÷Um|Ëη&;¤óiuJq×ýÕ­ë¤ ”ó6Z¯J«i·3é´ñ-¥cMvHDN ê#Œç¿ÆÁt9óñw|×_ª¥“ÿÖëÅE–šÊpXîÖÇ’°Zq·úÜÁ·{PܑկDýá¤c´ñ-ጬ6†T"gÆhã[ÃYm ¡b{gÆhã[ÃÙÚ5Uü8ñ@hÍ(oœø'ûOüüˆ3ÿÿã3õ«ÀŸ>é¤:Y Slt,à¯?R‰¸u( 4<Œ)HçP@Fp}º_õ :ݯJ©ÓýªÔ˧ûíΨȧa÷°>¨áë)üÉòßÚó¡óŽ9Äü˜ãŽÿ ¹Ýì' endstream endobj 3541 0 obj << /Type /ObjStm /N 100 /First 969 /Length 1240 /Filter /FlateDecode >> stream xÚ­XÑŠ\7 }߯ðTcɲdÃ’‡6ä­Ò<´ yéP ![v7þ}4é²mnŠy™ÑÕœ+Ù:’%Ϙ}´ÞÆìÚtÆ÷l;Ÿ­ñH…7^©YM$5»‰m 5kŒÔHÓ®WFSM ìîÄÌ6Gj¬Í•o&©YÍ|„°›ãaLéÍ-4ÂmõÔH[sÀ²Œ¶vj´mM –¼Rƒ5÷‘*,º{êVc–ÔmHºÑ ‡n0¤™:Á~{8€š:…´7ëH|èJ|„KHð1=b€ ²qè>Ì SÇÞS˾ >j^››â-Þ°`{IHÞ¤Kêòž†Ká4<;¤0<'ƒ4<%¨ s!ìð0G“¡ SH+a³‰Žàr$2'œE¸!ÁÙ´ #xÕ8UÁô ˜Á«÷ÐÁµ¸N¸08óLP%+³ÅàleºÀ’l ž Îv&ŒaS=3&xè™2ñ÷Ðy¦Sèb˼#°¡!™6RÞ+qØÕ%»Ü/1‡,­X‹rI°XÅksÁ²#Í4žÜÂEÄ|õ„Áúš ÃÇÚû“¥­©ƒ³n—#ËGꤋGؼä"¢—< ‚‘gð±Q—k§—ç÷íÁÞË¿þ<ã‡7¿Ÿ¯N?Àöùýý] ï_^œïn>ܾ=ß]æˆÔýxþí7ßß|l¯:èÁ$'–2­ýþÞÜÂÎdSàí2Γ‡]~±ˆuûB2°ø/ô§˜¸1í>j`›z\á_uÂC¬"ÿ·ÁCÐ «Kä¿kŒéD¸¸fÌ@è„VÖÜ‹`E[YÓë`®F ’ÎE0Zh‘E :,Ú#ð@ :,ÚC0Ò¨L n´«Ë°¬bè„1pH‘Ü”pÐë„7&Ž^,W^“´˜ ˆé.²Í†cÙÆe“¦ÃÌ8ÇŒ‹ââK6«äï"'Ü1pŒ"'ÛÉ}u£è¸}÷‡®a8"¾e ñùy ññU-Ę?k!®[¦{dÁ—[ÈcôC Šj <Ño´ˆÕŽjæ"™ÓEŠ`dN·QÛâãñ¬Ž+Á.ƒ‘³"ºîG‡`Tè>º‚% ÔÁÔ«KÌ“½H Î@b-8ö"^Å0…‰òè~tv#±â1MæÈU£“ -r20Uäd`"Òj00Å}50¢ø'µ Dñg_ ¼ÍêA îd¯Gÿ× endstream endobj 3615 0 obj << /Length 3045 /Filter /FlateDecode >> stream xÚÝ]oÛ8†ïó+|™ CR$E ƒ™íÇL ´³Ûä®[Š­$F;ëv;¿~,‰¡,‡=Ì¡v€½’ãÐïyM=<ü0MóÉÍ„O~;úûÅÑÙÁͤ`…‘frq=ц™"›ä\s1¹˜M>¿\ÞW³ùÉç‹wué|b¡´ÉêÒ*—̪Äv×'§2·ÇgÍEQ¿êèõÅÑ¿”âñ^šéÉôþèÓg>™ÁÿÞM8S…|Û•¼ŸhÁ™Ì <¾›œýóˆ·¶µŒ`6Ï'9\s®öµ2OK³Æ:­Ä’ñÜLrU0¥Š”†²Z·Íþ0–I õ£3&àÍï*ö}¹Ø^—ÓÍvu"ìqµÖª”–i“È‚ÌËÕž‡WÕ‰ÐÇ_çÓj=+4(&Š®¸€Û¾ýCy_bI0­žwxÿABê‚0†Y{èöוŸÔŸC‰º¥&Itf9”×Ñ÷€‚P Æm›ÞWåz»ªî«Åš·æu^xØnæ‹›Ž)Ì8}7ÿxùöôÕ‰âÇ¿žÅå™0,S¸pXú.¦W—Óù¬\ 3:üNOœH˜O‚F¨Ô,Siø”ãÒøLàÅáé›à)x&0áèôMàèŒ>„„D8q"a8 œ"cÒ&ʞ°"§dÏfž¾›žgïE8}¦°áõmà?$$¸5DBq"aB ¡»ŠL(W¬”ô™À‹ãÓ7³Ççº÷.ž¾ ž±Ñ‡t‚Ϩù'¦“ ÑÒilÁDž&šzŠhäóñLb¦ã³çfÏ,Èg =(@ãÃ5æü91"E‚„R4:BsÁÊ4€ZÎ,Ï €&ðâøôÍ gGgï>MàÃêûÀ}Ègƒ IÌ H‘0ŸŽO÷Ę4€Â5×” šÂŒ#Ôws`F4…ǨïÇhtø!¤FAæ¦&QœHR‚F©†q¬i Ý­S²h 3RßÍahÒN¤¾¤Ñá‡j^„“1RœHR‚F©â¬Ð‰2©RÌ(J&MaÆAê»90 CšÂ‰ƒÔw‚ƒ4:üRÈuN„'†” ÑA v ž(“f’iKɤ)Ì8H}7Ãî^MaÃêÛÀ~Hh §¦QœH˜P‚FG¨£*Q•œi¸)Ï'4…G¨ïfØ×‡MaÃêÛÀ~H(HEÍ¡8‘0¡ŽP÷³H”C¹e*·BS˜q„ún†}ˆÐ6¡¾ ¡Ñᇄ‚„.¨9'&” Ñ /gy–'!TKrh3¡=7>¡\dOÓ™ÄBGgÏŠÎøð:k ó'R$H'E££Órflš5QmË !&1ãèôÝôé äÎ$¾Ñá‡t‚„²‘NœH˜N‚FG'ed¢Ü™K– JîLaÆÑé»éÑ)C¹3…G§oGgtø! ¡¤%Ò‰ ÓIÐèèÔ†A%¦¡Óp¸Rrg 3ŽNßMŸN 3…G§oGgtø! ‘åÔ܉ ÓIÐèèT0t‰r§‚+W:S˜qtúnztf<@g ŽNߎÎèðC:A"Ô܉ ÓIÐèèÌ$S&QîÌ ìùt¦0ãèôÝôé:SXptúptF‡Ò ÒPs'N$L'A££SÂЕÛ4tJÅxAÉ)Ì8:}7}:Û”“XptúptF‡Ò ’Ss'N$L'A££“[–é4û@u].£äÎf¾›>¡YQ ŽNߎÎèðC:ABhE¤'¦“ ÑÒ© Ãd‘&wÖ_»+,!w&1ÓÑÙsÓ§3°¢”ÄBGgÏŠÎøð:k ^4:‘"A:)V1©ÒäNesVHBîLbÆÑé»éÓ˜³'±àèô-àèŒ?¤$¸"æN¤H˜N‚FGg.™°‰rg®¡~4Îf¾›>íóI,8:} 8:£ÃéÌ$ljîĉ„é$httÎD–(wšŒYžº$^œž™›*°ž”ÄcÓs€C3:úM >2jâĉ„Ñ$hth* ×" šZìÞÚóÙLaƱé»éÁ©ö$œ¾Ñá‡tª®Ôĉ ÓIÐèèÌ`Ü*Ó|ï]e£|±8‰§g¦ÇfJœ)86=84££ÑÌ` A=0)F“ Ñ¡)3¨ÓD‰SæÌhJâLaƱé»éÃX‡ObÁÁé[ÀÑ~H'HäÄÍI80›Ï—èÐ0b‰²¦ÐŒðe÷$V˜^<,—Q÷Âq7éj»FÞÍk\¹YåNä{¼é»ÿü‹kþ¤ë––ònx•À£4ŒäxÄôõ‰ÄP͈Qty-0"10ë»åæÿ‡üXžGL_ŸHÌhfÛÊ€±±m>)§2úúÄÊ ›é aÆ$²v!ôâ¶ZWÈäº,W3d~½/¿#E‘ÁËíf9-ïæWÐgW3Ük¾Í7·¸’›[¤éî¬ÞKç÷*˜ùÜÍ7ß÷›6ökôÛæT³qPîëQÍl[0»*šýñãTF_ŸXd³1íšëݼªi×KdXÝUÓMâVrµ˜"Wó››ö¼åž/¶ØÎzñ¼wÔ>]¯œ úìùb½©ÊYÚº–góås+®W¼@& Y4s§±ÚÜž>­ÍÑÍF´9Y¨ÝJܮͭªéüÙñ•¸b‹åâÏj…¼ÑÓÛr±¨î°T¤î!z]Ots‡^&$¼î-²a|_n±ýþÛï#+v‹#•ÈJ­þ³©Vû£}DC´Íìy´†Ø×'6D²Ù˜†h3&»ÓœîKÈËÈ^ez·œ~ùŸõ*/ÂóV4âèñõ ;@–»úŽWlÜrº³ž–‹Ë«êf¾¸\¯¦±ÇìFk;=ybÓ¡Zi9õWT³va›/>¾ýíò‹ß_ÜÏö? ¼\̰)6é¾ýpþáòåÞ€÷‹·ï_¼ØY_ôr1 ±|jËx1Þñž>‘P²ÙD`Y^Ä!ÚÝ´*ù°ûë|½\ýEŒktdìû9<Áw— R5+O£Þ×'>šÙ¶2ê/æã­Öîé+ƒl6¦¹gS¦Ýpt¾¼¯bVÞ‘ ”%6/,°ÌgÕb3¿žcW'¯ªi‰nöèÖŒþäãÀçOwœ¯þ²Zý^mb»QÙ,ƒÖ®úúÄvE6Ó®ê6¼]øÿ²X~[DLÕÍ3õÛò+vä¿Þ&]XÙ}š9x}¸«JtG=¿«ÒÞ"‡Ã«êa¹B6¯2ºu‰fÁk´ÖÕ×'¶®Ñ̶•ÁëE‡ñ>˜ÙÓ'VÆhf›ÊE3«2öôi•1žÙ¶2l3c­2úúÄÊÍl[¹eþî¹øíO\ÛÍ—ÖûÉÔ®~TÆtÖ!5ƒˆvINÔ?¡ÚnÌ<0 *›_U==m®ÞÖÇÝ«»ÿìv”6[J›'ÖÕjÞ <÷÷‚òÉ©¬Ï§k?!øu»¹]®~:9Í àÛ¯'R׋»²ïËD¨þlþúÛ¼þ_[à~õKy·)O$?†©ç¦dÓåýÏ/š‚oVåâK«°\Í›G¿Wëu«s} üÍÕš­—ÛÕ´ª§ÂßTlQm~®]×6EΊîÜóM¹Ù®[›çÛ‡º?i¹=¦Í•÷Xz¡ŒôÊtëµWXöîÇ¡Ÿ°U@Èðc1¿`û_}[V endstream endobj 3639 0 obj << /Length 2359 /Filter /FlateDecode >> stream xÚí\[Û¸~Ÿ_¡·Ú@‡áÔ¢X4Ùé% ¤ÙîÎK1 [žÖ—©d'Íþú¥$JÑÅÖPsÈEQä%rÆôw>~<ä9:2Ž"ýíêÍíÕ«¿,£Å’Êèv ‰dÌ"›«"Ñí:º[|wØ¥ëlùáöûr´Š´-Y9š+Š4W¬h –×TéÅ«úB$)?uõ—Û«ÿ\3 Gä‹óQ&¢ÕîêîŽÖæ½ï#Œx¬£OÕÈ]$F”IózýtõÏ+liÁ’i¥"e® ó!ë`ñ8FZêË3EXÉHñqOa˜Ñf¬¢žÒ©Æ?‚!b¾|åØwÉþ´IVÇS¾$z‘æc¯Rª‘ž(PÆ‘â7é’ˆÅÇl•Ž­³XDOÖ9&fÚÖÿ‘ìÒsZ"Hð—ØÏ¿ b H‰´>7ý¥ó•ކç¢ô  ˆF„L™ñböàs"äamÃÀ»4)NyºK÷G³¼.ãÂÓé˜í&äèƒL+Ç.›¾{{}s³äxñëW„NˆÒ‡V”]«ûŸŸVÙzL(s¶ñ±2 ‰¡Òt™Ö&£'ˆq?Ú¤1ÂT´éK+Í.™®4ù´4=Ph•Ù¥à¢Ì¹¶ÇÂ4„ 0Ý@¦… Àh„I¢ÚSÔ$Å 5}i¥ÙeÓ•&–¦­6»\´9ÛøXœk §È´88+7úÑ&æ(&¨éK+Í.™Á†.'¤éB«Ì.eε=¦AÀ 5Ý@¦… À°Â”:FDù‰š²L%}¹2½i¤Ùc3ØÐ'¤é…C£ÍmÎ7>§Ô&¹WÀ¨é2)NF#NeŽ«Ô65F+€6=pi¥Ù%3ØÐ§¤éB«Ì.eε=¦2'J@%ž``dò‡¨ºt O‚UÅ")¸ñCuˆ.ÿ.Ì1‡Që8ÊÓhÓ©Zõ¡Îÿul€3¤¹h ÔÀ¤ ů«pü¦âæb¡‹Uú5HÖ:ƒ™xXŸ¤Â8£tF0²Ö”;*œ3úø@g€ÉV€ùCT¿ø±©][æÚµ4Ù %¢©]ï7ÙÃ)OŽÙa_¨ËÑݵÄxqx*ǽÁé›ú=zý`g'¦ü^271}|àÄ@Éž™©/÷LÂÍÞiOÖwøÃ²rîµuëß›íÌm’îO…ãlnÜÆ­Ó¶´ýeÒ«wþ¾ÈÚª%Ùåb>E\ƒ1Â$œ`zð@½©NÈ›”?¶GŠ;âY.Åöpü¿Ñ‹0ç|3:˜`ø0ÅÀɺ„~+"a2&Æt-¢·›—…óÑW—çÏ]I™c„Ú»Oé*ÛdézH÷Ó«äø˜ºØdyáÈ%ù˜dÛä~ëˆCä§òo–׌àÅ¿–Äü{(³ÏIݸñ.9§_“_ªÎ…ò³D¡˜1›ô“ã©°Ÿ­ž}øïSšgeÛ‡­Þ÷"¹í1`²ìöS >FÝüÂFš1/¢°Ri$žû(Š MÓKƒË£(^¬7ý.=ëӢ̷;ž!§!žoÂr™l‚`4:d†ŽÒ^º°§f¯å/ïÂòB¦Ud—MÕ†õö=å‚ôa¼d×ø—h{Y•³Ui „Šªt™V%£Q%•Hyê¨ḟq P¥2­*»lZUþ}B–>¬·²ìZw‘ålãcY–U#ʲt™–%£‘%)STOÁ’hd¶-€,}ieÙeceÉõ”,}XoeÙµî"ËÙÆÇ²4\ưsà|Œgróª^¬_•jVYBeh|X†ެu†¢æ®n<À:LvFݘ*âØ&i·®7?×yöѵë|ëÈý†Ðî°·ß\¾–vŽî_ÒíŒBãÊo#ÛùBç5FÊèÁµ€IË_OàáŠÌ| Ôƒ‘µÎ0iSÀ‚{è (Õ9‹Þ$ÑXé÷e¿‡õeSf¶J®Æ>ÀÎ ”ìåÛ¬”3DšZÆ×¾ì)Ř“°VánD ðŠ’P £¨yDökgö¤bÊ2 w·f€T ˜ìŒ¦UJM*†É×ÎìÿùÎìËjF«ñóKUŠp÷öøÀ¥&;gé”T¹mý=Z³I\gg¡¦b€›Špd­3´@˜…«h ðΓqž'Z#F›š^RÎÍΉ۰_Óܵñô»özÏyÔïnâì‹æãó_ÇÑô6M>º·¢;n4§ýÅmÏ9Ò¨:% ¶¸úøÀÅŒ¬u†¬³`Îè㌬u†¨rŽ`¾èÁ]Šªõ¯OÎÁ\ÑÇú"Yë ¦%ôwmz"XT?{Ø6=1<Ñô´['E¿ë©ó­mƒ*ãq¿³é]ö`ëaÕ‹4ÏÒbÔu¡ë‰!Ùü K¯ëéÇlõ˜äëú¶ß›Ïå&DÅâÓÒ¼•ô™8÷+½Üxvü£¸.?Òûwwr¯ endstream endobj 3677 0 obj << /Length 3118 /Filter /FlateDecode >> stream xÚí][sÛ¸~÷¯à[åi… ’;vx³“IÝ&Þm;i&CKÌ5Ejy±ê_P½"EQÑìÃÎdFŽ ~:8Ε4vÖv¾¿x}{ñê-ÁÜ QÈ)wnW㈇®ã‡òÕ'ÎíÒù4{“mÄ2¾ü|ûC½Úw¹š»õjϧ(ð|)l¿PþòrNý`öªy!œÔŸºøîöâ— "Wa‡üzùQ—9‹ÍÅ§ÏØYÊßýà`ä…³Û¯Ü8Œ`D].Nœÿ¸Àça3‚B¯ó±ŒÊªøærî<—„Íþ»y¼i%ǰ8Aï;¾ë#NÃ>,÷–†(àÁ3¬‰eP„}îø”!×gc2äj¹–1%¢Ñ 9Ô eR+4D˜«Í|¥Õ*Z”U~I‚™È5Ai€Ÿu=ä{= ×ûíxŒâøênȤĉ®îa"-¨wõ¿E1d–1ï%×=Þ)‚È=A8GA0´ÿµö}ΠB¼p@F­CÊÌd´vH\äRí]ÀCfH|„å/Ú3e[•"Eù²1 ®ÿlƒ‡þþæÝûùõ¥‡gW Çôá#Æ8Šg[´a,Qñ´wÆr.m˜„ ÿ™Çe)Ò=O s>Í9Ƴ2ƒ­+ªí6ËK Ð{[XûÔÎJ ®Þ8þÈìº9æúŸh½“—‰Ò%˜jÞëll÷\T&íq館=“îÊ74ik`•2\}מ2ºò •a V‡ßn€¤ëmãŽt¯«<*ã Èò›m½¶èê7P+¥"̳·1]ù†c v`¤§„JÑ>ò<ÚlÃ'üùr¯Üùøá#ÏØ&ÝUlaZmîT>üM÷°Ž¤Cfo»ò ÷ÐìÈÊÃÙ \µ‡dâ=,’¬´¹‰˜îµjm»ò 7ÑØF,”)…XSFO¾™2ÌÁj¸ z2ódmíìQ$ÙVC Užm`+›´¯ÍúÎ.aŃH€'æl݇xq/stØâ×O2|ÝEO=g¹ÿÝ0çÃÁM¶‰(¿-ªÅ‘«E§?–åëþjy !YÐÄþÖhЕoHc°:4\ÄÛÂÙMš ]:0¶µ«¿K–?'çµp‰¸ò<{åìž|C®™‚ñG®üö.Ü3éc\?æ¥9^aõ¯·ß}øÝx„3~±Z‰xb¥Œµ=mJNÖXÔ•oÈ"c°:‹räûªýîÌE4ùþ¢:™›Š¯tcœéÝCÓÝ·]WbU%à‡›Aô-õ³„4U)kìÊ7ä 1X†¢nÛ¶;uú%•°yW[ ?@À>ñ÷3Ä^d~ž¶¸©‡Y£mW¾!mÁêÐ{(`¬má>?€d²OÕ ô*¿…ÙöSÆxh°Jã"Ku=ê6ü_‘mtYbı½^UW¼‡Œ¡jP(tQòç»[Ë<îU´Ýêz1à³hwÇ’êÃøë¹¦УÈ`<ÿzDq:u{zhnåü®ÁCŠ£äå,)ý}‰Û';ÒÍ(i Tƒ‘ïªîW* Ïq{4É1µù/öô‹t~Ñ—]—b Þ†ëš›ñ³¢¡_³N^æ‡ÍãKß Î÷wQZž"nóÆÐQõ¤-aï%CõÉÄ endstream endobj 3612 0 obj << /Type /ObjStm /N 100 /First 971 /Length 1245 /Filter /FlateDecode >> stream xÚÍXÍnV7Ýç)üõçùóØRÄ¢Eì*!Ê¢-b觪"‰¾}ÏLH”–4”M7Éܹçz|æÏãOæà6šÌ!M-þkÛùl$³‘¯¼1K«ñLÍnB¡!|a«©[Ó!bŽÕ4 ¤ÍLC˜mÚÁ›X˜Vs S´›ïÐðhKCÃÔÖJ ·-©‘¶]/ h£A±c‡cÆÚŒ-ÒHCJ{¼ íÔíF¬¡ÃJÄ+tB`'©cHÉO¤‘2v?ñ‚4ÂdIQ`Ã’#„ðöf²ó4‹íÓJž ;‰*Lìdªøboƒ ì‡Gr…×y$Y)Ù*\C‚¯™S·!ÍÐa)–¤k)íCJº& lÃUxÁšt 6,él˜§6›"ž3u°á™:^ºµ c 9 Æv ÆÖf˜˜0¶%u0¶Wâ°ÇÁ©›F¤¢…c‹ÆÅååÅéq{âSTô³vúù—_›Í–ß>Ô·Þ¼yyñèÑ—ÁfÝQ5°jwäM ,Ò«ë2÷ÔÀD}!5ð}#J`Z»oäv ì»”| ¬ðÅ¿W~rõöº]^¶Ó´¶æ7Aö¶ne¤ÉÝz1šïí«Ù‰xÀr§§ï®^ÿt¾n/Úééã'íôüüñºÝYzþןg¼xõûùâô¬žß^¿žfñýÅéÙùýÕ‡w¯Ïïoú\ê~<ÿöÇ«ï¯>¶aѶuFR"H}í—°÷ê <%þÿ8îøG³K0òÕ‡dÎ?П¼%[º-©‚‘;¨¡xÒÁ‹`GîÌUÏt¨T䎱Ïm*‚Ù; Áˆ yÕÍ@ZóÖŽÆR/鼋1AËíðH<©‹cÂ6º=‡Ó·ë,Æ„yuÕ•É»i1&8PQ'Ř`*é1FÕÀ¶z x_ݯîšÒš×îW²?ïWâßܯn÷xÓ¯¨3 èá~uýÉ[ªº¯¯Ç€QkÔ³Áõ¬E0G=[LQϳÕóØöCõ|F÷.c=Ê™Š`‹z.ÆÄ4깓¨çbLŒ£ž‹11Šz.ÆÄ†ö˜ËK`Åñë£èg]Ü]‹¹¯NÝ«XÁ–‹ŽÃe¤GeÁÞq(‚×ìÛªÛpë¸ñÁÓÐaŠ!aÓ>¼ư‰ëp,Ü©˜EÌhŽ£êfµXS¸(w^ŘÐZ]¸rï¸ëÁ¸9ŵ­ÆÍ)~÷¨i£uÑÿì@uÿü@uû港¸ÜGß!h*[´æÃB:£ña!1Ó U÷Œ™^f‹™^ 錙^ é wëa!1ÓÝl˜éí°ŽÀ˜éç(zÃ0Óǯ`50fú¹Š11Ìô^t†a¦w/ÆÄ0Ó/*ÆÄ0Ó/+nC¶<Š`™E欂±Yôœàÿ.:CÇžUÁ8Ö÷.z]Mãž3þAcü endstream endobj 3726 0 obj << /Length 2636 /Filter /FlateDecode >> stream xÚÅ\ÝÛ6ß¿B÷/îÌ%Qú°—6EŠ»K›,ä‚‚kɶYrõ‘mþûR"½µd[.Åô!‘V;úqv>È™áPØÛxØûáæŸ÷7/_z1ŠCz÷k/Qû^ËkD¼ûÄû°xUîÒ$»ýxÿcGy\R‡~GÍ"Š8‹$XOH0¿]Òˆ/^ª I÷ÖÍ÷÷7¿ÝI…=òçòU?ðV»›±—ÈßýèaÄbî=ö”;/ Q?”÷¹÷þæç¬ÙÆ(ºÛîòÃ1²"̼ˆq´CîžSóØ#uìU©·¾ˆt_s>Ä?p á+D1g`¶¬6žºywÐ*Ñzbž"Ž(¡^3¥«f›½r.y–!Æ‹¬®ÛFZ@ÂUoR¿$¢¿T©HoIîþ,ÿýüâp°ÑDñÈÖVEšCÿX”4Œðî-Œ®n’ôs¶ÁÌcèrÚ1üH0sçC|KǰfÖÄ1˜|™ëé®)~QdM&štf+¨³]›7¢H˶†½ñ¿×ß¿;R®Û Q¤¦a761Ä·´ gÌjaEQèNC|KaX3 q'Îc„»5_ÅÅ:Û´•h2èøvßÑÖc+ýj¥˜!.ùr¦˜!¾¥bl™=£†0B,èøäˆ`½‚À§—ÇŸ^½iç¡k¦Ü-ÂGX”½JE~fé&@µJÑ#pgjáÛ©ÕšÙËj ãjµ’¹ÔZçeó×è•ËØ>ŽÝéuˆo©W[f'ôÊCDx¤õJ¯èUH¡—`ìÙ6û¶ÑV¢Øc_ÛÝ>­€Ö•6MVl cP™T"‡!èÞÒ0,Y=c\ÞFT"ˆR®ìßöâüö[uýûË¥º ¦­å¿¦‚UˆëLòC|KÑÛ2;!û!ƺ`qAöÏ,ü#LÝ•$Fø–ÂwƬ†¯bIgÂâ[ óZTEt΄1Ä·†3fµ0ˆŠƒœ cˆo) gÌ„Á Žr’QÂô8ÀïüU—}ùQ!W (ˆbDc½0(D>¤+ìêòÝCY$ªÒ»\ªëº$UöYÆý}Sªë‹Žú…ºï"Ð$ Ábs»$x‘öÑeÿ»Ý-Å‹6o²}žª'}½«£íj^µz¶®:²rw铚RÔlœ ý«®j¹”èPâ>.ˆcoIòCߵͶ¬¾¹]ú+éÓ¦ŽDÚBìSEò¾M[k’Ç[ù_Y}ª¡s@#„}+­O›U‡ˆ#w9×ßÎÇÜ1«…Dˆ»De„o) kf >æˆaºÜo3`)R;>¬*Ÿçå#÷KÙˬ幌÷Ååt·ŸÃF©î‹[@ž,ç¯QZ5H’/1¸;LSû$†ÛµatÊb¹Ò¸[u‡ðv>`Ëêeƒg±ÌÙ™^ú¦5/•r’ø^Rʺ’kˆr_Öuöwª’l½N«´X é¡URC·ËN<âåD½¨2™js‘+·Z´Ïoqœ{PùÞë1g×ûˆbw9òßÒ¬™5Xã:kN»ñ &ÿcZÙzæ©~;Ú6¾lÏ.#}Ìší¹u†N‹àà´ÀÂÝwoÞZÍü×u2öt€‹DQæ.yá[ºˆ5³&.(Ð;d¢(Of,ccº2-š[‡¡q€qU¶y2KØ5½lÓÝ3%:iÙ^÷– ÊÝUwFø–Þbͬ‰·„ ‡³º„jK4àn ` •—å' eöiî6¨‡ F gk†iXOwâS $}¬²gl&±#Ÿºk^á[º—5³&î%%]û}ž­ÄiÆÄÎq¶Ù6Ð\$uNúçNø“Q Êä:²h ¡åçôYõ†Ë^VPœâ¡„níîD!6Ïð?î+šÎüfˆoé7ÖÌšø £( tƒa¸~©þr¹pæÎÁ#??-—3Å{¿¶uó5¬þºSU¤tfÇC|K;¶fÖÄŽ}"¯²ã¬HÒßÁ+pð’gE* Ó~U  !”k½Ú™A²±¨ŸÛLˈª!:³Ç!¾¥=:cV «’‘3a ñ-…aͬ‰sâE‘Þ[y×EZ0#.ÊG¨ CC7ÛÓ„ÃCÛÝÛý¾¬š4™7~ ^B7 eh°o›Z‡¿”-²H³Íö¡<=ÖýXöŠ© ;Ý%õCx;¶fÕÀ‚eLÉpüÿQ²Ai‘D~oko'ckVõõL+?Š1{Î׿ÿªèÓ endstream endobj 3773 0 obj << /Length 2615 /Filter /FlateDecode >> stream xÚÍ]moÛFþî_ÁogÕf_ùRà>ôŠ6—¢@ÓÄ-Ñ/åò%®ÿý-µ«ÆKKä¬F›6"Y^==ÏÌîÌì’¦Ñ:¢Ñë«Ý^½ú‘Ñ8ÊHó8º½TLâLDI¦Ý®¢×ßï¶Åª¼ùíö§at¥zt,†Ñ2á$•‰Ûd4»Yð$½~eX̆w]ýp{õûÓ£hľ|‚~«PÑr{õá7­ôï~Š(‘Y=îGn#Å(á"ÖÏ«èýÕ¯WÔšMI¦†§ÃÃëçÈ‚$TF‰LI¬ø€<¼ÎI–fFgQSD÷'‘fñ­å.þÁJÈ'<ÇŠIƳ »lÖ‘yòî *³:Éçª*F2i´úå¡+wõ^žÓPчELéuU¶3R¿ÿ[ó‚c“«³UC$ú³e85\|¤XcpsB“ÁkôÐÔFµì"ü͘íW'Ç_ÿÓða×t°‘wy[ÀFÞïØÀnD|È›¼ªŠêÌï¤é P¿ä1IÌüÆ/]|¤_bðKA åÜNàs~ùîWW™yš™"I‡£ÙÅGÒÌXK•$Õ"#ÃÅG’6Öge¢)aÔ.Mo½&·à‰íç².Ús×1m%IUL»>N»pÆZ2R¼eY82\|$hc=9NcÂÒÄ8òC H°Õ®Ùöw«âóü`Æõàå&àr©‡æŸrÏ [gý$`ºæÂ#…Eš:¡b¢ç©Qq±XÜ•û7FótÏòð 8‹Ä& F¯‹äkìÁ±$<ÎlÖq³£Ü>ÒÓIÈþ÷m×ìî _¿V&Ï Æ¼‹dkìóšaË/„È_å]>Z?÷ +…z¿ÈE8 \|¤Xc'4œeE#Ø™"0¨ܤZÁDpñ‘"`A0"2[øÈ‘üL8T–&ÕE#|¤Xc'Dà”H!Œj$‚8Sš\-˜.>R¬±"ÐŒÈÄ_ñHy¦(‚ÊLªJ„>N´±§EPYJSF„d$‚:S!5éX0\|¤Xc'DH¢”­ÞÒ‘ñ™"ÄP’}fL)ÒÔ ’˜èP0 d#’3H  Ä&/ &‹Ôk성":ý=lêéê×$˜°e9_~ªwU±ZûÖhJ™”,ÿ.>’¬±ü+IbŒèŸ[ïúöÉ—wi²°`¼»øHÞ±ÆNð.5ÜÖeŒˆŸ« v}÷Ðw¾Ôs“{£ÞÅGR5v‚zÁI¶¡Äˆú¹šø¡)ë®nF¶EU,»bå«3 Z0¥\|¤RXc'”⌤ԖlLZ¥8P©¼ïvÀÝš}¢&y &‹kì„@&•¶œcjJs=¾¢iÆ»ú³ÌËÌ$m¡˜áã˜G{šy™e$Mm ÇâQhÌ­e]ú®25‰Z0â]|$ñXc'ˆOõKö=ñɈø¹„Õ,À#'ÇVšy’}BL&©ÒÔ ‘’D¿tHkÓŸèj°Ts½nv}í»LËØäpÁ¸vñ‘d3Ö’¡LVŒ IF0c-Ò$.ÁÈpñ‘d õ8´ ¥"4³uÏûýQ„rùâ¨Ìó­¾SÓcÙ¦ÑU¹.»xÂçüÓú…o¦ nßvbKí«~Ù²‘ó_"÷Ÿ%…Ƀł‹Œ´±>± $a¢“ÞÁÿï8Òcøræõä¡ÿÔUù xw×m …ô—ëßòè”rpìye&³æ¯.>Ò_ÑÆúø+„%à¯3S÷ª¸Ïûªz-´ŠŸtØyÙ©ÉëƒÉîâ#ef¬!CdCþ®¿1ÂÇ‘7Ö'(#\ÙºûmYÍ\˜ð[Do“3ok èÂþ¹h^´OÆM½âÞ=]~¶~‘P|=3_\*2;Iˆ4!”†k‚Œð‘q6Ö#.D¦MÍl[d“7«Ç±·Îç–ݦ. Ë\;CU•õúÂ÷÷ãþŒÇ"’˜Ðp™ƒ tŽP¦Z&bSæ£ÂÅGr6Ö'P┈$ýs X æÀMª—gœ/«ùšèyTuá[˜ÜêZãÅ›þqººÚ\“ÓÇü ºvUÛÝw/æXÀ¥LÍ,0]|d`¢õ L•i‹qhÉ1\³. kPÙú6[€;U‘·4r.’ ´±>1/Q”ºÑ½OïÕ]Q¯.ÜѸ+.¬Èæ°wc{nz»ƒ~@ —Wz™m}WDn*ú`Ñáâ#£m¬OtpI”´ý>íà}SŸ³Qó¸)€‹NSä+ß¼îß»Çâó¨<ïzå=Ì¢§]4½¿ìºÜm·àÖÈcÙm|½ž™z=˜×»øH¯GëãõL•Ú3Mí2¯?Þë²þØ6˱“ýótùpûîÍë?ü÷Ö×/3]ßÀµæáD‰9´ùekÌâ®hjèÚÓ5åz]4/Ú;³^ͳŒ®o=ÂÇy5ÞX¯¦œÄ\¿YÀ¼_>nÊåÜ›»lv£}}uÙ¼ê1‡6úà'çí§öÜb…§¦%Ìk]|¤×3Ö’‘ìËð`\8ðH*B™j™Ð#ãp=Ô>’‹`ÆZ2”©Ô‚‘áâ#Éfì N{Ö}ˆ÷%³ùàÒqüÑÞ¦1}vãÅA,!;\>Mb"ä8¯`×û½¿ÍÍ‚ëiñcWn‹ÆÜ¢qýø½Mm÷?Û=®¯òng‡õí°îïŸêz Z æÇ?'Ùñ$i´Ð¥ Wö2²ïún³k¾½Yè¼ñzÕ~£ß­èõývS´û·ãõ·I§xßwy×·vüãþo×fóÙɛŊd Ãh1-6ÓÎDY8ÏáãÒãÑÆúx<DQ[ Óù*ôTø#+õ“Ï> stream xÚ¥WÁŽ]5 ÝÏWäð‹;q¤QPÍ©*]UUyBHUu¦Rù{Ž=´šÂ}``1or}Ï‹Ÿ“ø¼±º´ÞÆê£©Åm;Ÿ­ñÈÀlìYM$#ÞdîàƒÆ{‹sÓ®WHSÍæÝ‰Ñf##ÖÌ32Û”Œ¬6׈·øÃ`·5#"½yˆps˜Y¤ùFd.k[%^a©]´³å÷£“#‹F¾Ñ1òÀ ÆæFà†`´26«D†¡ÍŒafãÄ¡ fCŽÙ3†3ób_à C{6 y.Ìl3q¡Žž8|L‹X(x¦œª>Øñ؆ƒNÏíÆ‚<·ë˜~gÞ¨õN=8ˆí©ÈH{êõRN=àÜ(§6ŽïŒáȈ}àQÅ3¦M‡$Î0Š ®=q^R`[5•«¥ °pµ„wä°„ƒ;š1䘾®®¯¯NOÛKœŒ‰#ý¼¾ÿáÇf“f¬„uTì݇·o_]=yò÷à.Ä8%°l&††j`ïÄØW <7 ´R›“T'ÖEPW<& ðQ‹‘B 50+)”X÷AêEy ™9ag²Y,¯Nq¶j`Û4«KVÇÿ"'¸²)®îX&­UäíƒâB«»’[qƒ{ï?©›Ûw÷íúºnmv=|ãÕüÓÇ·ê§ôžñùú"o<`ºÓ³÷·o¾;ß·—íôìéM;½8¼oŸ3½øí×3^¼þù|uúYÏïîïâšÍu^žŸïn?¼s¾{¸z3öíù§_^}û±½Œ$¶¢Ã¸2öñ ù^¿Ç$¸UÑXÿhûÑ‘?oÿ+fœb4íåÔNóè?Š…ƒ,U°1m-bµÓv.‚G§.Ró¦>GÜ žxîE0$E°O‚É(‚H=º5ÁS)|_ lƒF±Ìèb4¬ LèË5°m,Y«`°½eÔÁC¬†4‰ÕÀ†ö" i¨ THC½H ìY±ð!d«H B“‹œ(¤®†4æ.r¢Ò)\} Ü7…Á,Çv´"'0›¶¹^“ªÐi¸‹” S\ŠEJ†*.Å¢2ð# —b‘¿!°½HÉ@[a­RÒa;½H‰8l§ë,&ðÕE0M»z¿ÕŠ` ÷[,lî®bé@î®bév¸ßýï=Î[ó…ýùÏÖï/gñÿö8K{)vtÑã> stream xÚí\[Û¸~Ÿ_¡§v ¬¹$Å‹´(ŠÝnšl‚no;@Qdƒ…F¢ÇBt™è2núë{dÑŽ%ß(Sl÷¡/‘Ʀ>üHžsxì=yØ{s÷‡‡»¯_,¼…‚ ïaåqDè{2„«$ÞC⽿ÿ¾ÌU’.><¼ëZK/€ÖÂïZ3IQÀ$€m‚K*ƒû¯û ¤{êîwŸî´ÂùÒ<ês/ÎïÞÀ^ß½ó0baàm¶-sŒ¨/à>ó~ºûÛÖfcòî¶»¼9Dö‘ÄÌ“,@‚Ó¹ûœ¢0=Òµ½Jy«³HWñµåCü•&=b Òpc·€Õ“×ßü}7ªD;UNPÈú±Z§OkUm‡ç<”÷~)0¾oÖQaÖr“6k³–‘Y³D½¤±26³1k¹ŽjC+ w9lü.õÇÜ?–Q•þ¤4 <ÿÕYhm³!xý+ÍÛ|Øx ²áÄÕÓË— &ænz ñ-§—µ±S¦ƒ‡½hÖQþœ ·ŠÖ©¡nó66œ‡Y¹9Vê?¸®*ìq7Zâ[jÁ™±š ‘”ÂC|K2¬21Hˆpç1ôÞD±JŸZÐ|Zš®®Ï]Ûz¬ÒoLUŠ À.g3Ä·[cO ƒˆñÎά÷ÿ÷øÃbKîòòn’§Eiè&mþhêR”«ù÷ÿÏekê¥Ô†«cSšµSy›/âq™ç°I.å«1ýWõšDœé}„o§wkcÏë]„&´Þ‰™ÞëöqŠæ¦hþÿúÔú ô Cwúâ[êÓ™±š ¹Éœq1€·¤Â•©š Ñ»ÏΨâ[ráÌXMÇSwIŒ¾%ÎŒÕd0‰°ï1V J˜îÇÐ[=}Õ°à §µ#ˆPD$ï7ŽòùÈÿ\’.Ço“c¿4ªnú¤×rÙ_ŸK o¡ºè®î?[EU·‰„ß¿¨Õ‚‚3Tåõ.½v˜ŒÃÞ’2ä ½…}×6ë²úf±ôø]Åë44Žïÿ±€Ú¦ù¸èºì?ûn†_~›ÆªS•«¢F‰úýW}ë×UT|ìo,«´¿ûAÕµ[åkøãÛ¶VUê²­bÕ-ü~§B…jv8ý®ÑYN$ }íóÿÔDM[kË7eõ±6tß9F³ýËòâ FŸ»‹bGøvsͱš Æ-tÅŽð-ɰ6vBËA4ÐáÓÃÚ4“Té‹©‡hœÞ‰Ò"û|£vÖ—„%,-žÌ?·ÕsY«zbnò±5ÌÐÆ¦™×(« }àGC÷Ö¸ä6ïûúRF»Ì]&b„o9¹¬2¹|Œ|ª·Û'½kšÂ”Lë&zéö­¼¾)­Þ„Ïu£LAÍ)’ãc…ßž?V0>ûx1$+‰ÃSš(þÔ¦uzœÑ»>#`7ÇÒ]®b„o9#¬2#HøÅõ[GU²‰*uk¢žcŽqrð-ivflO "î<œ!¼Ö¦N %b,ø_eéYà#ŠÝ…ÿ#|Ëq±5ö|Ö’1@›”¥ÿ¶À´iÓcDÃ!ÍÓ¸*_ʬ©gö5·°ÅŽ­¿üs|~CLÔ*j³æÔƒä2ÝOëú"¦R–Q滓òßRʶÆ^²äˆûÓòïUUZ&d\«¸¼=©ýk2FW¤ ?ÛFÉ¢y)yˆo©dgÆj2x£8#cˆoI†µ±S\`HÚÏô7ûœçœ…`u´iÊÒ´ºlcä˜z7ñ:* •œƒW’õ§vìºÿ: '×*É’dÓEÙĨŽù}ìâl¦ ñ-gе±Sf £HpDœ˜ˆË6KæÍuÁßšì:«ËƸ®TKó†1n«JiL2lY©¦­ gÖ*‹š,-ÔÔÉAİ»$àßrrX;erø®: øoU*î8@ÑNŽiv„‘>òu6"C|Ëqf¬&÷ñ§32†ø–d83¶'÷Œ+.†ðvT83U30Ä¥»ôÌß’ gÆîÈ ˆÿÝ‚Ÿ $);(Hg ŠFÅ¿üŒ1U$|¿ý¦¿ýõö¡¿­!âÞ(äeÒfjr1™w÷H×ü©IÐÄj€Áê á\ ¥GßòÞbaˆìßšƒ",…GeW‡ /a@kh˹†Ð;Ý!‹"@f) `Ú•âþí*ŠÁñèê)´ó4`‚Â. ÚžÇê3$ÙȆWj[²«{ôÞ­,˜ÏÔ;äû£ÞÿåêÔ›b0ËØ-ý?@H\‚ °vÁ©ñïØ—‚›‚°ðFÇ!åv; Bõ'>¥CÙQîsþÎVßïÕwØó›^PݽîUwØë`¥<¯¾Éý« Äeõ™\VŸÆN}œ£ó¨‡Ð3TßïÕwØóEõÍÑë^}‡½¾†ý÷¼è&w{,:€8´ÈeÑY`ìDÇÀïâ3-y â'ßtÉ›£ã½è{¾(º9zÝ‹î°×Ë¢›Üí±è‚sfç«MǸâ®SJ€鮂”BlÁV±Œðí‚#wÆödî°Öd„oG†;c5A·¸ãboI…­©2}$„¹nQkò»Z"ÁrXk2·[cÏГƒ0±ÖäÕöõ¸·¯æ}ѳÏs÷®ÍßR ÖÆšLÓ>ø:kóÖp §Éôâ½( Ë[ëg§«ttªu½2ý¤Ù»ÞËnÒ,s\‚>¡Ô“tîvà.g=·T³3c5Œm“¦ÎÈâ[’áÌXM†ïoƒ:gd ñ-Épf¬&ƒRˆ°zfC|K2œ«É O‘ÀÁyƉÓibvËûõ? ö endstream endobj 3875 0 obj << /Length 2176 /Filter /FlateDecode >> stream xÚí\]Û6}Ÿ_¡G¨9üU,MÒMvÒí&mèÃ44–<#ÔcM$9Fö×/)RŽh[5‹¢ÈK¤‘¥s///¯n £»F¯.ž__\¾DG H8æÑõ*bð„Dq"1Š®³èfö¢|ȳbþþúµº;Ž„¼›u714–`í¡ùÇbv©ˆ#õÔÅ¿®/>^ yŒÐ òQ¢åÃÅÍ{eò³×4Ñ®½ó!bL¸<_Gï.~¹€†6´é‹¡œ!PMŠHÜòèŒnHñ[–›&_~x\²¢Ôœ }|Ñ~¦Ïß^½‘_…ÿGÿ•wE“®õW—oôÉm™Vs gYç§¾Wa´ÀÎ4¥gÛæ¾¬¾Ÿ/‚³wM¾šËcºQ œýZÌ1›}R`eQékÿ¨Ae]þᮩAÑüSYSð( !þ]“6ÛÚÀïvYýQG@ÄqÄ“!G‚ôF‚& \ìGbb `Ì#.@„žÃwË{3Z¨ïi.fDX»ãçt³]¥Ëf[Í‘˜åÕ±#0€ñ‰`BALm ?æs$Ç®XæÇÆIÂ$àDÆ)DrÊØÆÿ›>䧦!Œ>Åìñà *ÅÇÎA Χ_ù>–Ä&'0” 1óÃèDyLF<%˜·_ÍÑ6ž ko Ã{íõ-ï£×°ô¦°½—^ßöA„VáhÇ*Tk‘g AÂÔ¢¢¯úß‹€Òˆ3(}A¢ºÎуD$Q•G«þªfA¾zl€H>v40Rwûâë…ô¿[‘],ô±8Hp¬q†œJ‚²pΰñ=áM¶¬î"}òk—!“ Ñ^>Ä –Ažì#Ѫ¸ÛViS”+/:†”™‡pöæQÝ[$Q³ïõ‹ž=½ÍÀÈìDn`l|Ïñ%{bx ¨Z0(6yé |?o»0nðýÛWnƒt»­Ýn,Wn÷eù>céeÎê“ß!ƒƒ¬ge«™!ÈE>…\Õ`Äácã{*Æ—ìÅ(bÈ,¦7hbÅÔë²ùÛH†Éd&á"˜dðý$ãOÖ%ú1™´`™æµ"ºZ=-šÈG/‡ÇÏ]I…cÚ¸Öù²XyvH÷»ó³¤¹ÏÝ ¬Šªvå²}|,«æ€‹ƒvå& Â$œvm|Oíz“£]¹‘ÅIlv2®íDÞr»ÉÜnÝëµãìq4¾­u \^Lå~(œf,xOÉ„¢j<Áåî1Áá\aã{ú"Yã ¦sý`ΰñ=Œ¬qÕw0gØøžÎFÖ8ƒ€ó©F ‡+ñ @0ï•âÅÉR|–~ÜWÐ1„Ð.Æ_½™S8»žs8Ë—ª }¯¯ÿ¨.?Sÿüò¼{ú²}|dþÙ&Ë«Z×ÚŸ¯Ë‡,_¯Må=m?·æêª¤U•k°nîAOQ€§T€8¦^¥+? ]û¤„†'©¿S*'äc ðS0èj —üÆ»"¨eü|~´Ùã±—#¿ú»#ÈÙú»F§A9E)g“Ôß©üjˆ™—˜]‰U¹?#Á)ì5Øg`‚c:X} Trœ‚È^}"&Öf§íïu9Úþ±0%æÜ/°ÇøÊ2H¡Ì9h®(O¹Ž‡ÛÌÙð~)G0ªÆB‘Cá\aã{ú›숊<0éy½@nMDš¬ç^ÜØn–ºôV4Ÿ§æàZëɪâ“I ¾¾O]Aó&¯ŠM_UåƒÛUžfÅænd‡ðà8Ü&õßs.x“3b ºò¤³për[¹–x–eæ\ ª&ž`¿›¬Ü=}"Œ(&Aávþøž FÖ8ƒÆ€°p;ÿ|Ogx“3Ýœšæ kW¿|ûê™ãú°™x µÉªkhþ¸-ªÜqº›¢)äÊ÷¿¯ÂbÉ×ß4ìî ×õ}™nÆ.+jÏ•„+à{êÜ›ì“paJ2®ùu™f®ÃígWɨþÙ˶ïÂõ½ÀQ‚á:Ìåáwijb¬Ä0rkNb6¾§Ä¼ÉŽ‘˜*ž`ÓСßa,Þ§FÉ ¸{ž$Xy¿–M?¥Å:½]çS'Õ÷MóxÔ_tyæ•ón·s÷µ™ƒ#(«Ñ >¢€ÆázVð=§‰7Ù1ÓÅ_ZB‹©Ó^72¼VyþaUT»´r|¸I«Ût½~rÊ õ6>Ø˜ÛøžcŒ¬vNÚ}\(_Øð~®ð¦:Bý8aí’yjóeé×|‰†«Áà{Ž‹/ÙáN,hû ä[óåWë b0ÅØøžŠñ%{F11 ùÖ{é ¦·ZÁcã{*Æ›ìˆþ5Ì%~÷)¿õ^þ{/1Õ{¸`Úµñ=µëMvŒváo½—'DCôŽ&˜hl|OÑ#kœ90`âoã{:#Yã ¤³ý`ΰñ=Œ¬qÔ9w0gØøžÎF¶sÉŸÚ|‰d ‡õš/“æË »ãR7+½[t×—åãܳުfÆu~ð“õ¹vK~¢Ýò·¹€³´ªòn²|ÊL¢R&¿Ó²Úœ¼¬ÒÍúôßy][Ý–øIÝ–a@EâՔ䇡;ÝTbe“´["(w*m·œ„B×ëfqpé·œÄz×àfY?ßp9ÞîñøKèû‹Ž g;.}0Œ…j Ÿ¤ß2‘Îé¦ûOêÇJò¢¹_·Jø¬§ðÏyS¥·Ÿ›|X“ÐéÙçcâÃzœÀr§Æ¾å¢N:À*r¬å#= …Ÿ ÎjñéF‰1OÓúËà‹¾ü|Ñã¶É«¶é¶VÞæ;éõí;Ho Óöú¦´7Út—<%cTæ2>åþ˘» endstream endobj 3830 0 obj << /Type /ObjStm /N 100 /First 968 /Length 1227 /Filter /FlateDecode >> stream xÚ­XËj\GÝë+úÒÓõêêáEb´ Å‹$Æ á !`¤ Ëàü}NÕ$BNF¡Œ³ñ”Μ©wݪkYCÚh²†6Õø´¶v|ÎF’€7òDVcNd7ž~H5±D¸éÐ u+èÝ‚5“Df³•ˆ·É‰¬6=‘ÝœáÑ|BÅâvP[ÆPÌ@¶"m+‡ m/ Á ‰`ÎO Þ'¶ ÍÄv#ßÝ ’E®Â&µP,Ч;¬ ô™†‡}¶Â>b¡)Ƀ¾éé@®80…fŸ‰Asä’@²°LÓÈò@[“c{'m6’˜CZ‰!÷ĉ!ù°ÉêAAš‰qcaÂR†øX2efžA‚ ]3$Ø0I 6Ì‹s`6æ l†£Îº ÎmÂ,òIƒ±ð¾];1Û’Œí•¼œÒ:<1ô QÔÅ£fÔ*¾àaQ,1”I,~>ê Wð+Ydß2Z_ÑŠ‰AñÌh~?3ÚðÂ3ÚH«{„‘½˜Ñ.=y š7%†?wšEÕuŒ0;£ÉÃãµ å¸à=ÍËr`ÅÄÀꪧ‘Á(¨PXÜ ±è®m˜•‘4ŸÆèinЀzœ 99{ÀFŽÎ0;——‡—í BbŒóu;üøÓÏÍfŸaŸëÛïß¿½xñ⿹j}ÀñY´F Ffé„)¯‘‰;ãÑQ#êlÅ‘²ÎÈsì» F±Fž« Ú¯F6ïZÌš½G¿×ÈbÝFU3kçZLÒmk‚1ï“‹5áM=ž25òÝG±&ºîZ¬ w/ºLPÏÎ2™ñP­‘ mT¤ªwÑbcÌŽç\‘̆ö¬ºAŠþ¬&n ‹F±Ö›ÑžÿHòÕÝíC»¼l‡+‚?ý²·õ·Œ¥Hòøî,ûø¯îïÞýp|hoÚáÕË«vx}üôЕ¿þã÷#¾¸ùõxqø†Ž·bÃÇt}q¸>~¸ûxÿï¿üvóíݧö&ŒØ¶ÎXP8úÚoaïæJbexO#Ž£ã1âo1X`}È™^ùŒýW~|rµP#õ­E®Ž+»F–Ñs‘L»)EòXFÑç¹½“Î"yÍNË‹dGQyÉS{ìú™á3É6¥ûþ2bq:uÖbQ ­Í«XCoȹ=p–ŒÞY¬ ¡7t+¨è Õbqàu]Å<+zÊ™S´†y±&8úú¤âT©bÝZ±&8@ñY¬‰2Ö­k¢ëÖ‹5‘½z¼úÕÈ3N„"™s{q•¬Ý¹˜:Æ ä³˜:Æ ´ªJ¸VµC 7Ъvh\»Ø¡q|ìj‡’bUU;”Äñ"ÿÛ.¯&Öí×-vœ{ÿZì._½Øñ®úd±ãž]ìOÙ‹»zHŒÁ?ä>G>÷2x–«‚—A.’q=“T]fÂË É„W6*úl;níY$¯…—A/’×¶ÓlU÷bµÍììËàY.Áå¢Ç:päˆVÉpBЉ““ß‹¹Àó s!Ž›¿êE,…³7Î9²>«YÙ}®b3 ¯g6È92ù3ä\£˜ Æji±5pÀõøï«Ùå³ ò'fÂÚ# endstream endobj 3910 0 obj << /Length 2382 /Filter /FlateDecode >> stream xÚÝœ[sÛ6Çßý)ø¶ÒL nìL\÷–LsÙÆ3ûf2ŒDÇj-QKIÍöÛï! Ò¼H`Ù™} þãïƒq9Ž>G8úùêû»«ëŸQ‚AEtwqDG2«$ÑÝ*z?»Í7Ùj=ÿp÷²l-#­E\¶f’"Å$ˆU ¡ó•jv]_ˆ åo]ýxwõï+­pDžz€_y´Ü\½ÿ€£üìe„KTô¥j¹‰8ÁˆÆ^?Fï®þy…µí'-A’2’p•˜ µâŽK¤„jµ¥@„@Jþ2øRpC ð9–(#H¹“ÄÿÏ¢ï¦XB{n >u71‚°zÊg»ã!+¾ÏÓbµŸ¸—|h葉ƒæ ÏnÞaµxûó«‰ÛɇövêX¥{è|÷y3qOYw>F$HâÊ¢™È4Œ ”£˜ù‘&Sa £‡þ[»º,þ2Á¢‡þ[»ý7(>L hÛ÷˜DP Œ8’h&2M¢ƒFC"‰Užò"(‘¶yч–Å®ƒ.‹¿N°èÃ@ c×@ããŒÖi ¬„#f"Ó4:h44Vaô#f(!¶yÑCÿ-‹]O,ÞÌ9Ÿ½™Ê<´8v=Ô8¦ùTn´í{L#(àØ57š‰LÓè ¡i*ADúÉ¢\¡ j‡£ =C'ò£ = ùѾó‘B)HÉŽùÑPd’H†H SOêH…‘ÂÒHý· ´Tv TTNhÝñ˜D\:’h&2M¢ƒFC"ØI°§DSÄ•m¢ôa %±ëàí-Á̈EZ»vËÒÂ%"­»YB…]s£™È4‘ ‘Œ2O¹‘bÄaPìˆôa %²ë ûè¾&b‚HZ"»ô3ûdï-Ö½ Á¤Óú34ÊÔ^ë——îÉ>Ì>ÊÓxž0ˆD)X¾ÍAŸQ”¨$*²è¾SÐW:ýîX_ňKÒtP “²µ«~]å0Ðo*Lzèj•ë¾$ Y I‘¨§Ia‚Ñ×w †³ÙJ°øÕ/~kÊaˆ.par.9JêÛñîa]g¢ó:Ñû…ÀxfÚ.5kVd_Šõ!3kœß›µ;< >=/ÿ=Û•…æ…aãbýWVôC Ãê7z#ÜO‘šmHQâ)“øg»¯ïÈv0³:ƒi.}}Ç`8›µ¹Ñ!B‰Òë’7»Ã:ß‘«hüs¬ßó:»Ï ¡~ñîÆ¬á²uØä[SþãɺÜ.Ì÷õ‡ÜÕì‰NJIq#LõÔê=þ0¯Â»8;–Õ?¥{Ã4¹Î säjUdûÁâò –su)à b_ßqƒ™ÕÁ )¢Â£¯ï g³6IŒD0ÿZIl·\3ÓùûéÄDÂ6“aXëð$ܸ÷õÇÝÕìD&„e&;ŽH ô" yÅPúxjØ G%å :Ô˜õÔÝFÌÑèùñ*W¾D)=^D×wÓãµÌö·®ñR %,ÜÂx ï8fÁÌê`ÈzV,}}Ç`8›µxÔ0)•ÍÊØÿZ²^õ¶Í³ývˆü?Îß%3Ùýq·Ë ÃÆéþïíò¡È·ùÑpõ¿Ì7X1&÷ß\H ëí2³œ>2QÏ}ƒaÜ×wÄØÙ¬ ÆÐiLt ¨ñžÈò!KwÞ‘€¥Þ—´Èþ§ÐYúøøw€‚»9³‡sêWªÉÉ(±\&S„E¸ ޾#éÎfmHçÅM­Ê²ú`ßÇâðñ°Þd…ÿ”¼L·f ?â~Üg†›‹Õx¶9>¦¦Ûª'“õÙÖÆ+¨ÃhOù2á¬^ã#¼¯ïH¸³YÂCqÒžaµØ4fq½Ä ä¾¾cƒ™ÕÁ õú%X0úúŽÁfV+DiÀm_ß1ÁÌÖÁˆ“j*}y·P³ÚD‚!ªˆËyõ™«®Pß7áá bT?Ñ9ˆáñTõôãr_4±¨¯ºÀa³Óêÿoo_ݾ¸©_ÊÓªT°~Þ ‹p´ i…Þg¼9òâÛù"&xö¯¹‚µPQd[Pâxö2Ýï CWßÔo¬öúÅOEºý³~ù‹Þ/•‰DISñîŽ{­üeÿäÅŸ'ªAtBŒ\êœ$êšš”ÇÓÂËWÐV'˜Ú~€ MULσÉWxé½)ˆéõ>ýUöýކ¿”`ıZÐPd²6ËE£áPa€ÁOµ Uݘeµ -…]ªLj½hAìØ-7—*í;Ó± N ížt”Œ‡«Ì‚(ã4ÜÜ{ ï6­gV#†üpŠ5Ðw †³Y‹ÕH÷}}ÇÛ'˜Y VOƒ£¯ïŒ`fu0bY}è=X0úúŽÁfVƒÖSµ`Áèë;#˜Ù&peI€šñˆŽ¿PØä Žÿ 3J‘‡ endstream endobj 3946 0 obj << /Length 2844 /Filter /FlateDecode >> stream xÚ½]sÛ¸†ïý+xWyf  ’N§N²ÉÆw·Žfz‘îdh‰²ØH¢KRv_¿ HB€(Á€öŠŠ ¾çððàƒ$ƒÇŸ.ÞM/®?"È‚$ ³`º(, ƒ(áÇÓyðuò¾Xgóüò÷émS: b^š…Mia“ˆ‹í "^^á(ž\·ÄPsÖÅÏÓ‹ÿ^ ^ hŸÒ`¶¾øú; æüo·$‰ƒ—]Éu@8düó*ørñÏ ØÙ†ªýX2Ô‹SÒš¢€ÒúèO ¾^¡Æß<­k­^]µÇ—Nn¾ô_ÏŠõSZç—NVYûÝC‘–—NæU_%rÂà 2ÚF¿ÙÖË¢üóåUȾ¤k.Aáä®(Êì§öó¿.c8IË2Û´ÿ¾M«§¬lltæU÷áý²Ì«öã»tû¸TJ},ÓÍ÷öã/YÕŸr_¬ÓN÷cžÕ?²ÆrãE ÃÖã—:­·Uçñ¥ù©Eù½¶C Ž¢€%ãø°åB©åH’€˜Å¢åˆÁÄrAOÁ DüSƒÿ#]gÇ.[(9'ì°ñcÂá£: ĈãcßÔ}į.C’ÑhªS7Â(äÇĺà1#¶ûi»Vøû%¦“,¯—« ¯]âÈê2}x­3 ”> (eK]n¼âÉñ4•>¢ *åè *eK{*?i°ô^`)‡o±|ÔpizÈ%ƒ<;»&L3=™=š¤­yJ˜Æ[×MŽš²¥=š5hú/Д÷h.4hZ‡¢É%øÁL# =˜çKô\† $ˆúá’@À sÊôáHp)[\bˆ4`úˆ/À”ãïÀ<[i{H&—ˆkÒ4ѳé ÑÃɧ”1óÃfCqΙ 4eGšXƒ¦‡ð‚L9|G&Öiz&WàƒG0ÍDô`:hô`òŸCOY5±œ³¦GMÙ’@“h³¦ø‚M9þŽM¢ÍšÖ±‡pò?3Èá4ÑÃé Ñà !ˆ<± ¡sÖô`H );’ÐÔeMá™røŽL]Ö´ =“+Pêš5ÍDô`:ht`Ò8,ñC&M0û¥»³Éôâ¨GS±´Ÿ鲦—ø=›Jüv¤Ëšö±p6$qÌš†"Z8]4z8#˜Ÿ¥#óqäʦCMÙ‘„¦&kú/È”Ãwdj²¦uè!˜\Ǭi(¢ÓA£“@=Í‚hsŒ°¸¿ù´­³ò]‘–óJ¢‚DÙÁoï$WâÞãõí½†G.²‹§YãbwSô?¥†JkC,¹D»æK3=–=–"?XR0Š,±ôa@`);8ÀòöþZwëÇ‹¦ìCóZwÈÞÃM.†Ø‘M3=›=›yJ™„ÄlS¦‚MÅÁç_ÍÉôáB)»˜å…—Ö†\r ìºÔn(¢çÒA£ç’Û!ØSÎ 1hžJ²ãÒ‡Á¥â@æRß‘û𠨔=*¯µý¸uü!“\c×\i&¢gÒA£g12O¹C^.´dÒ‡Á¤â@b’stÓ.•²‹žÊS—Ö†\r Ä\s¥™ˆžKžKȇ¨ÈS®„Hø‰v\ú0 ¸T(\b=—>\.e{.±žKkC.¹B®ùÒLDÏ¥ƒFÇ%I0—мpI¸­„XæK/z.U‡\jÆ–^\ô\*..5cK{. H󥡈–KžË˜O!öÃeî~´—> .òØò~Ü‹ Á¥ìBŒ.ßèÇí ¹ä†Ž\š‰è¹tÐè¹äL!â)_F¼~BÛ|éÀàRq p©ïǽ¸\Ê.ö\êûq{C.?Ç'… Eô\:hô\R`â)_ÒD‘m¾ôa@p©88äR×ûp!¸”](\êúqkC.)qâš/ÍDô\:hô\`è)_’D˜XréÀàRq ¬…!Ô`éÄÀR6±_$:j@Pim`H%ᣇÐí…±34 HhóÂ_sø$ÿ²D#^»é\ó}3SLj$q”Y°ß8T¤Ž; € ¿žp FMiWýö%ÇýþmI“² NF4ÛVFØ4N;€¥2ôÝ*ÃÝìN°| Ú÷ý»ª¨{y–Hïªò´ß=ãw£¼§:” ¾^1'eöRæÝ3o.fåꥡ`ûÚ¬QÑt3·Ð„аp™?geuðNï´_(-¢æ´ŽÅæeGBÆcQÕwdq4³]eDÐñ*CÕw¬ g³f#€¢nrñ[ZUùæÑz³b?²²0+¹(JÓëÍ0'<ÕyaX6¯<çªÁøíŸcz•¥ÏÆ­“×få¶›ê)›å‹<›Ÿivܲñ..UßñâÍlW|N°x¼ÊPõ+c4³]e>¾‡Éx•¡ê;VÆhf»Êà“$8b¤È;VÅXVûš@2§IɉãéÍRpÂvë´ûÝRðéÝRÖHÝ/EÊÞ!Û-Q¤mKîŠ2ßo`Ò~úËb½äÿøÛ¶âã=PÛr–5!Š'Ødõ_=lh‚ Œ:MO$ÚõŒ~ó² Ÿìh¿Ÿ‰ ýЇâÁdC/Ñû¥%º~Gû¸Ãæç(q¼f(¢]wsÑè9äWRHü=e]y]Ii–fV†k Íö}‡úÝ®º/]—7xÏr¸^pZzòa·ÙàAùëÓåïй‹ˆOi!ï~ľ#öÎfm°§1è¦7†`.ÒÒïÖg³bß7ÅË!?½ niºÞfZpc¸pY4Á-®Kã¥ÆÔpo™>ü¤·¯“æŽ'ïöÀ¾ãuâlÖæ:!íHtw¥Œ°Ü[fyU›³J_‹m}"; a~ÖÏÏÙÆózöÿ;á_‹ó WìßF¾™-'ã­Àè;"ïlÖùí÷¨òÇM¾Ègé¦^½òÅ‚§ßM}v¯1à&ÆkUß±iF3ÛUjnÉEãU†ªïXÎfm8E~…Õp,ñb:6ùöÀ«×o†ƒˆÓ¡x]˜ö élé9i/¶«Õ±YÒ§Ö»_~˜éÏÒ§ô!_åõ«m.†:4Þm²}GÆÍÚ0C@a·çùS-¦³Øc÷ÆÖ[ï,M變•Ÿ£ÎM‡aù†ÁÊíSmInÜ.Œ®*ïÆ­«ÕÓ&PÒ­ïþRxºAª¬öœÓ¦÷Ÿ?}»Ÿ&ÀUjúÀ„မÇ ‡î³Ýÿ(ñm¶ž{~Œl[ÙÎö¢fê?²²¸°Ž6-²lŒí_õ)ëU¾ÙþÏp®oØø÷ӛχy‹_)è­™Ûtyö Ÿ¦—ÞZù“&…Žù ‡5óujÙÝT…çŒñPÔõ*Ûd³ïg> Öý/„c É9ÿ¿ËM&‡ endstream endobj 3971 0 obj << /Length 3025 /Filter /FlateDecode >> stream xÚÕ]“Û¶†ï÷WðªÑÎta|“Ìt:uã&N2n{{µõ-qw5‘Ä5IÙq/úÛ Š ’t¨ºÓKÖB/^>8øÑà! ÁW½½zñ=£:ˆI¬¹n雷ŽEÆæ1dÁí*¸[|—mÓÕúúýíOUé0ˆLi-ªÒ2ä$’¡;dL^ßð0Z¼¨˜fÕ»®þv{õñŠ™R4`Ï5˜· ,·Wwïi°2û) DÆQðùPr(F Ú<ßï®~½¢mJbU=­~°• © B­x¥\½ÎIÅ«JÇAž÷'•Îê7Îûú­KH ¶–&1=˜=æAýäm{UYs¤}U#±¬¯ÕÓ~³Yï×ç´Vpw£)]”)¬à*)XÉd™gEá¹úß½„ü°ïWmBš޼ƒñJèum‹çµÞ•ižïŸÊ~ñý6Ö´šë.çk }}dK@›Ò¤ysÔä·Çd·Ú¤ùˆ?žâðx™×%‡,û VrûVn™mŸöåè“þöR÷Ü®«&š.³Ý ÚN3X¹*÷ó¤¯_>O6×$¬{yÈîë#ÉF›B¶ „r^“]$Û§M ¼z÷y¶õœ¸>dI¾ššhß)JÊc 17Ôoÿ S?„ÜAæI™žÈçYfŠ„¡žå¾>’e´Ù),³˜Ðj¤Y±œþþ”.©ôK¶Ïa%¿ûÇ?ýæ¶À¦Q<¥»˜¯d³ÍŠZv+˜ÝC;°bêÀƒJ™+:Ò}}$Òh³S¦a´ƒWcEèðë )O?1D"Àg>9‰T4}ó™m‚™™oÏŒ¾>2h³‡Ž4aQX7ŽÛÇuqé(ÃÁ1P³È Ms¿Ûû˜ró´(óõ²\g;è¨,Ë/ÌÒ'g¦1ïÒá|ñâäÀiñ@óÏf]”“'Ö÷æ¶ói'<¬wÌÖÐzòÈv†µ:¥™…ŠpÕÍltÅÀm§y™»ÜP|·YžNâ·ðÛs®Ë‰óƒ#´SþœAçëfH8!7l÷Ðk•&庸_§£I۷О^× +³µ¹¾>²ÑaÍ:Ú˜–„ë¸ncÿ¢Š2ó»>ùÆ Vúi–;9g«ÕíÎVòô”&ùEsö¯ƒµi`Ë´ø ºÇ¹ö|{RõrÎlí©¯lOX³Žödâ!Øssâàæ„¸:ø¶ñ˜|Öžì.l'KîöÛiîw) Ý™ákZ\<õ‚Îl4÷õ‘4Ïf¶ ¯—f F_ŒÙÌ6Á`!ar¾EÐ>2h³SFëœ)šEÐuþØÙCó td˜m×e9žû’lS>fû‡GÏér»š°ÌuŸ,ºŸ×еÓ]ì>gùoÐÊ«X•—NWÀ9˜Ö‹,³µ´¾>²¥Íf¶†Šë©ð\Áèã‚1ŸÙ&Q=g™-}}d0f3Û#< 8g‹EO鬶‘ DpË«&œÉ¦`wwü±¹ÿ,²î(kÃ#‘ºù[mzÀáÚ«î0[%‹(­o7»¹©¾fj‘šlºI«g_êWߤež|¸ætñ¥Lë—^]KºxùîY¡šYü¡~ZÝ;‘”ë×ÌÌ Òâ0ÝhÁ —DhU[}¹79<ÿöúF˜·}Ÿ'»ßŒš¢‹7Y¾®Ÿ½N‹¢~ö§ûí£ùÏ_öEš¤Èöù2­V{Y´xHÉ.-ÿ\UXÕ`†q;xW&å¾hjø\¹3L1¾ÍN3…a #s-Øð.;aÝe'ã˜D:êî²ó+Á u uu—›vi˜Ò¦¬RD3²Cm4¸‡{…lÐx“ìö¦{/÷‡°5³^LÂ$¦¡ø±À…$¡xxu ìÓºdôj&eSå©vI™ÉƒÚÿžlÓc7Y2¢ä%õŽ/¿‘*tI0“ˆ¢èØõ¯¢šÆ‘ñ*†\á4Z«ôBÙäË@q¨MÎn¿¬úùšSNÕê)çK™:°ôá¨ÃÒ¶Ô$7“<({wë@Ó‡ƒMÛI·ڛŒã€N®} ¨‘”#…‰¸Eh´€Jy‹@et¸&H@}8êµ- ùâ¦~ÉÁª3«¶™gVoV‰×ÉƸ !±ù&âÆ¡Ñâ*¸ù;÷ƒ«0S½0ÂâêÃQ‡«mÉÆõÅËk¥¿8@õa£Õ¶Ñ‚šdJ'×>¦ÔHð›Ta"nJ-¥‡´Ð¥f´Ï8:©úpÔQj[²(åÎ^߇ƒPÛA(wöú“kÊ«)36ÂDÜ€"4Z@iDDä)Vå4:úpÔj[ êõ}˜éXµÍ<³êîõ'ãZÝ÷ $®07®Wk"¸§|J)¡ ›O½8êpµ-Ù¸¾~{šQ/:Fm-£ùi@§×>´’`õâòå€Eœ€b4Z@«µáÐO>QHb…ͧ^µ€ö,õ=›K½i9í±8åtá̧ÓMŒq54DæS ˆW„F‹kh†¸ÌO>¡"q»¿àr\}8êpµ-Ù¸žEy±ÑÁjÛhauÍ¢¦×>¦ÔHP†Mª07¥–RM ÓÂ¥ZHÆXJ}8ê(µ-u”FîµS/:@m@#÷ÚéôÚÇ€ªÊ6ÂDÜ€"4Z@eu‹RäPÅH£Ó¨G ¶¥ Y”3«¶™gVݽþdc\¥pЉ+LÄ+B£ÅUhóQ=åS“P ó©G®¶%××ß9õá cÔvÐ2ú¸t:¹ö1 B‘HI$ 07 P.H{ʧ<$:BçSŽ:@mK6 gG¥>\tÚ.ZH£Òɵ!5aŒÍ¢07¤RVí›ó”E™"𣳍G¤¶% RçÚ¾ ¶ƒPçÚþôÚÇ€‰Pb³(LÄ (B£”W÷FEž²(D… ¨G ¶¥ Q©3«¶™gV£ÒéF¸V:BæS ˆWŒF‹k’HH/¸òØ„˜ciõa¨¥ÕvdÃêZÙ÷b %Ô6ÐêZØŸ^ù˜N#¡2™EÜt"4Z:Ãêô¡ØaL¤F'SŽ:Ï'RF:Lm#§çö§›ãj$rŦá†õr‰–Um·ÜS&Õ!‘ ‹ªCª–£©ŽÙ½¢–ŽPÇä~zåc4„â É&LÄ 'B£¥S1¢µ§Lª I}8êð´-Ù|ž›Ü{qÑ1j»h!uMî§×>†ÔH¸oê<»ácºÄ™D\p¨Àì :Sg„Éù¶RôqÛµæ3ÛÃh±h¾³QúÈ` ÍNØJÍ™0`‹ö|1è¦àäSµ/k =Ç!ÙdÀS³}ùÝð›]xIóò7§OI²áVâoÜ›º—I=z„x;u±zÊò#ѡ۟™I]œÏwÐÀ@×:ðf§´ʉbÍR4ôP¶/Ùx…Ót5ÓI\E =Š{{´mT»>O7z'Hþ°·sà½Ý8êáä—m²Þ\Œ}dÆjz¾î}$ö³™m‚†DÐù6ºô‘Á@›Ì•¨X·¿û±»_?ìó¤:’ØK=¯›pz\5k™ñT÷¾<ò² ­¹ÕŒVU.c¢E³‡ò޾rõã„ÓÒ~žÒoúYà2I=åjµÊ‡I€E5Šç;Œa kÖA†Šˆ›ïâ¿Nïôêvœl&öÄyúq¿Î¡=øhÛ ¿©•L/ÓÜ|À ð§4Ê|ýð‚?Ú2Û}JóâX.|œç^J"Å|‡ÿ ô‘ÜcÍ:¸—! ›oMî8 ûWo^Ò¯Í=tR48Äk"¢žÄÎE_ Ö¬ ¡I¨›à;¦‚ýŸPÿá¡Õ6¡Ðx=œ ´¾>´ÙÌ6Á`Œ(5ãд¯ Ælf›`Ðz–0[0úúÈ`Ìf¶FTÖçŠE_ŠÙ¬6‘0Že<Ã9a£ H~ØÊsÁoGþ‚ endstream endobj 3907 0 obj << /Type /ObjStm /N 100 /First 971 /Length 1239 /Filter /FlateDecode >> stream xÚÍWMkF ½ûWÌèìèk4&‡6øVimC&]J!ØÅv ý÷}’cc»(É¥{öíÛÑHz’fdn£ÉÒÔâ¿¶Ÿ­‘$0­Ñtyc°\{RvŸXákŠ7c?ÁBš9¢m’ÇÂÚœ‰Ìæ#6ìûÐj¾Ùmi <ÚZ0µ-‰pÛnØ™¥Ñà„«™,œ•â4›qX2•cµ[XÛX­À°'‰(Ž/Å¢FÊ ÂXÍŒ|Á ÆÌƒ±9ƒ±©‰ÁØÜ‰a?—Ä`ÌW`p‰G6–3l(lì ŒÂÆÎÈŒÕxŒÄ¬1¥]¨#@Šc3ÏðYÒ[&é-âÈ’Þ58+0aŒÕŠ£2fÛÌæ‰ÁÄäÄ&VpW‘wö´j°êé-þðJo ÆVz;Á[;LLÛé-àÞNü²ˆÓ]D–ˆÃš‰ÁQ‰a¶À"KœRé ØYò <1‹H9x¶#RòÔøm(q®äá —Ä°³§D#Å‹ƒ–eÅ1ö­dÃÆâÛ8H¸ c$êYP¢Ž, l¯·UjÐ( ¬¹,ŒiT†nÔƒP@ø•Ê0˜¦î7c•‡bTÓÝ c–ÒÇGµÔþ†±™â‡§:=1óT?’­>ãd#Šsì“ÓÓ“ÃËöª¨è×íðëo¿7›=„‰T÷T\|üðáÝÉ‹ÿM6î¥\#+õÕÈ2ú€¯52íÁ.‘iQD= Ÿ]^Ü´ÓÓv8C£h~û#¬½­»5êu|ù…Bå_> ¦å–‡í¯®.ßÿr¼ioÛáÕ˳vxsütÓî,½ùçï#¾8ÿóxrø V7×!®Üúäðúx}ùñêýñú¶ÊûùøÇ_ç?^~joƒdÛ:C© á\ûì_a“h·œü{þGã½óÿ¢ÎèXËWè9¢õ€ý9Z¶W7²*ÙûB ª‘×ì˪ÇpëUêÔí³F6éQÓ5²J,E² 4¦ÉLF5Ê4:¦N¬¥±Š)Á èÌÅ8«;tXäÎÙÑÖ‹d³.V̉ªvLÐ"Y¤«s‚VÝÕ‹9QÔ–Q1'â8ó,’£W5ǧbäØF7¯î,»Ïj`^}ZÕ?rü/ê·€w¦™Ð(Ý‹j¦¥½ÚpmëkÕL1OGugÃlÒbNHG»Çײçf׃÷̓ éÑ SýîA†ëÕ½A†n=;Èî³?GËQñt)‘•!1ëä1ŠÇPÒþd£Š;0o6ÕÈx³àÄE2î@äÅ`ˆÎ¤E²íÎVtPófÃŒùñÌØ{‚̃û©“IŠ;ã-†Ðy‘¼"t«Hžº¢ŽÈV/ºGê]´(#Ä¡Ë*ʈ |åê1 |Ee¤oÕ„òMýv¡ÇêQœû»û ¯¹ÐßgßõATÆ®’s¹9ލHŽçs‘ŒçݘR$…«tñ̸x<ÓSž"ãÁBË‹dE^ÞÍŠ91Üxu³Íh„c­*O–]Œ33¡ãÌ„'‹ãƒÌ¨çdfÅ8Ç ³] ] ²)Å¤Ä ›^Ô~Œ2/F.&™ß¿¥ÿ ðàüæ endstream endobj 4007 0 obj << /Length 2383 /Filter /FlateDecode >> stream xÚ½\Ë’Û6Ý÷W0›‰TÁx“L¥¦ìØIÆNyœ¤{çxÁ– ‰‰D*|t»ÿ~@dó!²A˜) :÷èâ¸Bgç@ç—›ïn^ýŒ w|àsÌ»­Ã8à>q\_^]äÜmœÏ‹·ñQlÂå—»Ei×ñdiNŠÒÔÅÀ£®;Dˆ-WØõ¯ÔqTüêæ§»›n,ôlAþ”0g}¼ùü:ùÝê{Îã¹äÑaL¸¼?8·7¿ßÀ’6lÓ÷„*p†€O)8 ôÌ£ú¡óy… ~› åbEvµR×_—ˆ-D˜í¢¸{RO?Š, î—.ž2¡½[R¸xsûŒð'dð_êvOAÞ/\D*¿A•ÿšÞ†Î S@8STßäÙ>N¾_®ˆüÙ§§4a$ñ\Ü>œYE›T”O~H^Ÿ–œ-@œ,‘·Øý»0V #ø„(ôÛ,Èò´D¿³$Î2‰Ö« Ž€çº÷]@<¯[A¤QAÔ÷ǽº‚fÆÀºÜáˆÐ1 YZ–e¬„Pº@MGs`FäÅVîøDù6XgùÙe"é;c0>L(pi›Â»³Âµè'>“€3§É–Ô6þßà(.µN½Æl¿ò=*ÅÇÆ çÀó.U~á{W¶ Mê_À(\ˆ™F%B—È«?¹à%ºüü×εðëw{Ù¸UoSô4✃Q-Ê&¥f¿6,Ë9Ìײlš¯:åaiN6Ý—f1nvm“! ðY1—_šÿ‹R‡3(@ Äâ9C`D |Ïwál›#` êòÓ¾"ù@ZPÀ¨(mНÝ~5zëXhbqàcß"ÙÒ²y”ÙsFßÐÆdÏ€ÉÎQ7T±*ƒ9Úˆ8Á²ç/c†»}˜¶B§>’ ¦8„‹M>”ƒè‹e÷&hšo·"½Ò*¦éDz  ´üÒîWJEÈXÉó¸=E´ñ alé XØqí9£oè kd•3˜ó|îYsFßÌöÈ–Î!„¾=g´ñ alå f`d2f\‡s[F]€8n$·l(¹õ 4Ëmk€ëS[~!µý9 ¢¿ËH7NBu÷‘¦ej»=îå‡×y*’¤qž¬Å¶ÌlˆDÖNoñ…ôö±`'§ß)Èu¯ÎÁ¯Wò(2ÃÞ¨O+uÇ <¨Û£P×p«®Oq®nöAá*•}«'M 0̨©cØ(ì4ÃPÉ ue"â{³dÔÔCRìtjJ= …*{iqÐÉ©g±^%/-ëãIõt»ýú—Ð÷Í’jMѤÚ£Ò¡üS2KRM¹|D sêYÕªl0*»ÓUÑŸ«rëµ*ÖeÇwÙr­ËÉ–ûº”RC]êŒëÒ£Ò%£yóLöP&u×t²gFµ0›”ž•‰F”9‡ùZ™MóJšhDš“M÷¥)ƒ5ß3í2õ@Æ¥i€QI“â«fƒ/J“²z2øzeÎA¨VfƒÑ³0Gf!g±^ ³a]érdrºå¾.© ˆi—©2®KŒJ—Î6?N yž þ(‚4OÄQD™Òä[™~äYíF49™Z“M6oßZ5R£a]ÎÁ Öe“AÈŒ ç“­÷µ‰ýf·5¤©…1®Ìë!*a"¦â™:LŒ@µ&~•.çàRë²A¦%˱q|µ,jUŽä“÷UYÌzbÃEMq]`T„Å<ÝL=&ôg&=ædje6Ù´¤96’ÏÁ –f“ÁóÔψ6'[ïkSB¸®¡4µ0Æ•y=D)LâË(ÍÓcßt™³©„ÙbÓf1+8¨ÍYHTÚl‘hOKÊs:ž< 1£¹Ç+0^˜?'®üƒ¾goÍ›p8±·ZÑÁ7[­°G¶t•Ý¢½e¬6¼¡+L©NXð& ŸWÌʽŽÑ6ÜåI…q¤·ìŸŠ²iwÝù{ÍugBdçÿ¼†4µ´ñ ëÅ”ì…jà. ÅX!3êb­î\ Ÿá—åÙ¹«Ò­¾ßõú«Áò‹OzÕyŠ“Ls¿A ½’Áf“Ë[­Â/+»2,Àö”ÑÆ7T†)Ùe$‡¶RHSüÞ]-ë˜Ã Q-98tEõݸ­Dü“‡Ú»TŠ•L­‚YxÔÅÔ…_3‘È?xxÒ¤„»þœu=ˆ$½ÔVËÄ:²—Q€Í}j|CÙ[#[:CÆó6÷©uð a¬rö©Õ-Z|3g˜“Õ‰aÊ.û@n¹Þ÷æpÐì"ÙÀ…æ^¼P3ÊöšƒâzD‘8LÁw.‰C˜jâÇ\·d®;Úk{ ­v ¼XRÿŸ‘înI11Á±º'°ƒoØúŒÉNi}ž+óÖj¾IŽ~bgáôvꎱyTÏ™¼¬ÙÓclfná—î`á(?ÞwökÅb²iG×Éd)»ØêŽÎ¾¡”ÉN‘²Ëf妽½ÔÎcÏ»Ã}î1Ì‚‹¹0˜þaŽ­n0íàÖ5²¥3Ø9õ±æ‹¼¡+L©NQ)£€rʦ7ðíp¯¢Û'GBû0C¹ùsÞÈ@¼OE¦?¤Y¾Ýj £µ&Ù÷šIj¤›vîÝz ¦vüèÛ›lëà¶(c²Sš%€¸åôÛ»7·ÝFUï (c9\èUÛc˜í5gK¯º«×f&þÁ؈؛jëàêÂÙÒH%“ÖœÑÆ7t†1Ù)#@9ªÎÆéøaÜkMÃCTc­º™—ëƒÃçïbÝD>Š3ËÝðpcÞNñ„8ž²'Ý­8ü¡}L°Kâ›aß","«:)Ž LÎ3 J ­µ¤6¾aK2&;¥%I`ËÝ–ú‘ÁDíƒÃvBñm®;s–%A”nE’^™¡/>¥ixs£™ö9ÞuwŸ0Š"_%¶äÞÁ7“»=²¥3<°ooº¬ƒoè kdKg¸*a³æŒ6¾¡3¬‘-ÁU¨mÍm|CgX#[9£ØAô=A‹0Œ Æ Z~ùíñHpµÐ¾ ƒcmÔ‡ÛâMÇT}h–.߆À¡ê;§¼÷é7‘$åù‹@] O‡ *ÏÉþp:(Þöô8©o^GA€]|>úøòËŸÎg<¾Jœ°ØŒ×Yï¾ô².*ëÒkÞÕõ?ätc endstream endobj 4038 0 obj << /Length 2167 /Filter /FlateDecode >> stream xÚÅ\]sã¶}÷¯à£=³Ââ⛙Ƀ[§;Ít“¶«§ª;Æ¢½šÚ’Cɛɿ/H‚Z‚´(PH²ÔXà¹Gyš=f4ûpõ§åÕû¿UYNrÅT¶|Ȥ"*ç™ÎíUC¶\g«ë?ïžËõææóòǺµÎŒm­xÝZhFŒÐ¬i nL›ë÷íÔw]ý°¼úõ l+šÁ·öV.³ûç«Õgš­íw?f”ˆÜd¿5-Ÿ3 ”0®ìç§ìÓÕ?®¨£MI.ëõåC™ME¦%\ÔÀõŸ%(Â@dŒä&Ϫ2{8‰Š/ì7º-0Ô­±øN¿S!$BK‘œå É:18%”±tbøøH1ÐdÀê1k?ü³Bà…è!Î w#hùe³oFÂi lµP”^¯«Íײ kŠù° <|)ÃÞmŠçÝvÖøÓïûCùÈõãG¯ÕnÁÙÂým|Ïõí2 ÷—]Q øz=ì§(çmÈ µ‰.™·}|¤·“‘ubPC€ŠtbøøH1Ðdç tÂsÖ͕ۇÍãkU6»m˜5~©Ûÿ®ýÃY—ª\*YÇ ðqƒ'Ò1J!kKÙõçmÇÜ7‹˜ÿÜ7ý3кé†÷§“̺ü:ì‰Öm$˜ïŸŸ9+I¬Ø—Åz] ɼ;MfSý:3ë)£ÎO>>ÒOÉÈ:1´$Œ™tbøøH1’‘ub(A˜ÊÓ‰áã#ÅHFÖ‰!›å]2-kÈّdž¬'pÍa Ó†D`t†´?Uä,Ž!í²4"?Æàr4¤G¦1ä{©AM™2Fü£)ûñÏšrvä±)í×,ÇfÉ0iS"0:S6OetSRA€!²d .GSzdjSÊ ;ƈ|´c?òY;ÎŽ<¶#­·£iÇ0i;"0œ…1„›89ÒŽrBÕå92 —ÎŽ>™ÆŽçrd”ø)½øçL9?òÈ”5Ž3e Ȥ)1)µ"œÅÉ‘ÂPBáò…ËÑ”™Ú”fÂŽ1"íØ|ÖŽ³#íh!€!sd È´ëg©:RŽTºyòx±cp9ÚÑ#cíSvŒùhÇ~ä³vœylG A56;†LÛÑÙQÚE(DÊŽR’œŠËíƒËÑŽ™:;ævŒùhÇ~ä³vœylG A›Ã@¦íˆÀèì((ÅãØQpb";Æàr´£GæÛ[~ŒúèÇ~è³~œyìG^sà¨+`œy³&@[TºRFAë1–î]ÿ÷3ÙVŒÚÈyÂwý|œx²3*œ¸µ-•²–ñ¾¬–*^»—j÷K¹¤ñðûK`ËÝÃ¥%‡V=XÕÅ yºéÃ#­˜ŠªSBÛ#¤«´à#µ@“3,µ&,7îp…‡\q;¥¦+ýà#;Köt™!·!8wk•ý|Óˆ{ºf¹ùú¯3 ëΗ]5£Ž00Û®×U¹ßÏ,!äõ¢:OW8=ÀG:KvÂvWÅ;°‚0g¼n_÷åÜRu.€OW=ÀG*Ž%;¡¸D0WK³baŠß΋waã¦*ʪÜÞ—oUÓï'J7͇Mñ4.ómn‡‰Û÷›íãS9:Bqú†r»žo6n÷[Z¦3›4–ì„Ù8'B¹GÊ+þÿ3[±},çö!´Kúd}èã#ûKö> Í[yΑݓ/Úvá÷íeµú세¢õ3œ„kv))–ì’j VQ¨˸Xð£'ËÛåm*=ø8=Ñd'Ò ¥D·û^‰°4s7#Íܾ9IMã_’s˜iÊÉ:ÔÇGv(–ìDÎa&'Šé9‡év…™LR))–ìéœÃìUuŃœ³ïd°žª]?&ÓÓÇGê‰%;¡§Í=šº=-èi'Ìwö¿`Me»LJ¦©ÔKvBSËW»i‘#¦EÑ.X’Ééã#åÄ’SH¢»c·b¨g¸;y»ZI&§”Köô*£~égº:ë•üƒV0w•á¾ø7•tbÜ¢9ÿÚáËns_ŽZxõkWgÉüãã#ý“Œ¬ƒ¶ ›dbøøH1’‘mÅ€¼]“¤c€#Y'†iÉÄðñ‘b$#Û‰!ˆþƒOÌ‚¨Kú'fÍɳ0ÿÄ,ÀÔyX•ê „F:«QF_\{ƒIgCJ“^ÿð·Ó6Œ»³a?v› /O§Í8;v—rÇåR¬)¼à‰÷?ìÀmj endstream endobj 4075 0 obj << /Length 2208 /Filter /FlateDecode >> stream xÚí\[sã¶~÷¯à£<³Ââ03}ØÆmšÌ4ÍEyr·3´DYj%Ò¡¨Ýöß$A[ ( Ô!²“Nvè•¡ï}ç àX8zŽpôÍÝwïÿL°ŒbK*£Å:ɘE*6OE¢Å*zœ}ïÓÕöþãâ»jµŠ´Y-Yµš+Š4W¬^HˆºŸS¥g¤z×ÝŸw¿Þ³ GäM‚y+Ñr÷øG+ó»ï"Œx¬£ÏõÊ}$F”Ióó.úùîÇ;lÕ~Ã’i¥"ež ó.;ÁâqŒ´Ô¯XcP„•Œçñ†YmÖ a! S H¨0ü†ˆùð5±M²ã:Y–ÇâžèYZœ³J©FBN¤e)ÞÑá!½'böi»LÏ¥³Xĉ¤sLŒÙ;Ò¿OöiŸ/$ø-rÏío ¨B R"­ûÌ_‘¯¤ðÄ0zžCT R‚øßù 6š˜2ëÅhgÂ}ÑÄ ÂÚæ³‡¤LL‚x¶¸gbV$Ùa—”Û<«)ty +G™Õ„Ìøæ/a5…ô×°:•¾*ké/Ï›à-ýÜ' †¸ž Çc`dÖ›šQ=NˆI,UªWÄЫt…X½.ˆD”ðˆ¢XÇQ‘F듚ãBõ¿z.sDHÜ h€IµŠok¨‹ßÖK §XÅ4¨lC†Q™<Š FXÕ¯xŽš~j;-b{'~ÒiIÓiq®ÛN+[oŸÅ[6º =Î%Ƴü¥Z{p¤¯šõÜè¶VÑQLÙÅÅÚªl¤B\Tz Ä Zm†Güñ¾&wni½Àý·]Öß_\?û›Ÿ9_ò¢ô[ù”R¿•ÉjU¤×E<ÐŽPe{ìHHuPA#)(’ÄæܘñÃfИFLìµ\|  ÊÈìu¤àötÊË@«íºŽŠr›ìÆÒNM|cŽvH;TÙÚ•ÙlÃ:ÃF_ѰN½X9¤ÇU>",.šÉþ |ùÝË|¿÷m°û³¤1"ˆo—Mš&?˜g¸ø@Ï€*;PùHŒT{¤÷Ⱦ\åK²çÑU7;„`6tñ6„*;”T±FJ©NÕ«sñN|ô ×u(>]xPU/çJ+¤‰îT(K&EâùçM¨núÊ`Œºø@J¡Êpª%Ò"îÔŸ†S<Â?UÓÝ£ÓÅÒ UörÒJ ö`„û¥ì‡)ûC_ùÆÃøçùÛ«ìÚK¤ëÛáM¾]¦@ɯNÏ«Ö3˜÷¸ø@ï*;à=’£˜“ߨÈïßDÓDóè?Á”µd°¦o F†‹$#˜²– Úô_ÁÈpñdSÖ’Ašþ).>Œ`ʶdp¤i ¹Ð¼ð´÷ÉúdöÇÄUŒb»¨ºÑïæURÕͼ šÏ›§½‡7?-î5>½‡o~½¨ßbÇŽN¯²q4§1i>ËM^|u?gÏVuÒ­–²cfç~.“òx°KÌîÿe—–=ó$öª™SfР躆ÑL@pBiÎhÀóDÜø†ŠÙØy¢ITh|æ‰&‘Þ>8Ò‡ç‰ÆË=·×XÃæp¬=§¬%Cð ½RHXÙC8LhTÅéÂaœÕVÁ ãâ UöòYã ®þ?„óæÌðÎ/NÑ^StÀ'˜DDkØüÑ”ÔÇTÁ¨vñdSÖ’QaépC| `eÇ ³‡ 6A-¼‡°–I±ò[¹I½Ç™òÊôX–ìògω°ìåXz*¾?îÊ­Ù+ÿ;õÔ?ÏÊÜ3ö~N:ü9Ÿ¶žyùÃÃ×ݲ€.CjÞ²Ø¤ÅØ;a†1Â4ÜQ(`eÇ fˆ{ìï'‰§Wn³í>ÙyÏ*Òõqçë¿O¹w°.wùò_7¸ÙԭźH=¦ÙÒ“u^øN™ŽªÍFU†»ôêàÃâ®ìˆx 1EÌláëx8wðüî!Ý¥ËÒ7M?yºÊ?û—´8ŒeÎV7:˜¤ Ìï}Ú®Ò·0{nðžRˆ®ÇjöŸÁâÆÅÆ XÙ1q£ bí¡í§­g…x)òç"Ùï}ãáö=¤GÆÿ%3·> stream xÚÅXMo4½ï¯ðÀkϧ-E=@ÕRUz¢¢²BHU‚ÚT*ÿž7“švi§pà’ÌÎ>{üæÓ^c¶Ñd j¢ñŸÛ·í69ÖHf«±X“MøšB±›°C˜Ø`…fΦdÔÔcÑäfÓBf–m>bn®©°æ;!ÞVZš«­•šÝ6‡†FÛÓl3þ@"H'$nsÆ $M¶I#u)©‘CÚ©[ —ì(h®ÐñhSHa§€?$ØPœl¨¦6l¤6L Û¡Ú¡P9' ÆVšÅǹ5LLì4@“Fr‚”d…Íd+Éc-6 ¢\‹0PÒoÄIW¤¤‹SÝ"ÁI’-¼LšlÆ4Ù*Œ¥ÆÌS‡µ>Scn©ƒ±5Rc+iÀ ´vØ„¶„¡¥½gHp&$†”4LϤ<“†YcJæ4ÜgH1Úá>¸ŸY6p4æ:$ Ü/ÈO/CRŠ¥–f:OºŽ}…G/ /c¯LÍi>#€ áSGw‰[úRl¿c¿à7“nl&Ý… ´»¤¤§å¤þg Wml/I7jG4¶G ˆìl¨ð{C[mllœ*3OtN©ÃG·ÔÁØš|¸¸8·KÞpØhÏÚñÇŸ~njÝ`e’ö… ¿~ûêՋãGŸOé g©÷=?¹¹¾míøÚündÔ÷_2juwÿ êqÜe °Ýñéë›—?œnÛe;>}ü¤ŸŸÞݶ{KÏÿøý„/®~=ŽßÁêéúöMD0mŽÏNonÞ¾~yzsWš©ûþôËoWßÞ¼k—aQ·v¤z4ž¾ö Ø»zM"G(ñóÏĸçÿÍ´ÎÁÈWÿØ[Ñï½å6û\›Jw”x †5¬p,¬™:zeL³O—"xŽN³xfÝ»ÚR l8ó(‚Ùµëâ*µ±ª;÷¡S+õmÅh³Pñ[ó,§ºVVUÔ(æ¦R£èfZ^O ”o=50B;íbL0”:fOŒªb/Æ„PURõŠJ¬LÔ®£¸3.#]¥“¹ê¤XÛÓ½Çõ¢–ÑÅõ«gÈ?L‡Óå_Ï»õgÛ×Ì\6>!ìÎÙ‘ Ÿ™!¢¿8CÎG£U‹t²ê1é>‹X¢ÎZÃ)|v:¤ak#ϤFLôl :6ïª^3Î|v: ŠUýàÉE‚¸ŒöéE‚ãwÏÌèTõ£S`6Á†KWµPð2꼊®Ã[ ¹˜uŒÜÇݼFòë(…‘ü*Õ  ùuƒ‚:r1(„ä7+¯Çî£ ê^M:¼Ú»W;1nfÕN@„WKµÐÄÍ¬Ú h ;k1&Ópæ;Áÿþxrýtðáâö_Üý§Ñ÷ƒa÷q¶ê΂WG·(‚‡£#{ lÛºœ}–/í²Š -ò3¼-â¶o ›ÕL¼&‹`Ì2ÛZ#€ÎŘØXݽÝÞ×,Æ-³/-ÆDñ:¬BQÍ[Š!QÅÛpQv*†Dñ´ˆŸÙJ`Ù8ó,îÌkt§YÇ/³5°EiW¡ëáëþO×÷î endstream endobj 4115 0 obj << /Length 2319 /Filter /FlateDecode >> stream xÚí\[oã¶~ϯÐ[´áòNª@ö´g‹h‹¶A_röA¶•D¨-ùÈr‚ý÷¥D:ÇT$™Ê„i9O2,êã`æ›á o8¹MpòýÙ¿®ÎÞ} X&)J%•ÉÕM"$’)KTjžŠ$W«äúüÛj“¯Š‹W?¶­U¢MkÉÚÖ\Q¤¹2`]CBôÅ%Uúü}IÚ¯Îþ}uöß3bZá„ü¯ó)Érsvý'+óîÇ#žêä¡k¹IÁˆ2i~¯“ßÏ~=ÃNlŒRÑþlß#3¤0O” (å-pû· QŠR&užÜŒ"…âsóF“C˜´­¡øN3>þA !=cI”Ò4¢°N #LiœyµñÚ5¹”Ÿ—UÖp·¯ó°–Yù©*ÛÞe»°†ù}^‡µlò]“¯ÛÞý/ª¬^õÕFÕI¨ù臛0ðOÕ>T]÷Š-Ê›ªÞdMQ•þ!ýˆê\‘¤›¸Í}| +‚…㊔"&œ/.«²©³úSŸ_s¢µËvg»@î·«¬ÉGHwÚŽX#‚y<;úø@;FÖ*C¦ .£)£‡S\Ø9¤Æ&[b좕7Åí¾ˆc$­¶mÛ]Ÿ¥_²Tj‰ˆVñ ãã vÀ R!.Z9SÄ·f¸Æ/:å^N“'ùÀ»ñ|à—0sn«:0!XDZð–ÙjUç»ÝÌK*(Õñ8äã9v‚CJ#A„ã äÐo¿öXÔýý,ð8™öå~—?I‡Ì7$Ôí%GT¦ñLæãMvÂdæ)„r&£a&û£Z7ÙmhQÛjÕ3BÅbà‹Qüåøqš¢«m¢‘Àƒr(êiç)¨–H¤Úr[|óÍ4F¬Ú½ã–ý£ß¾+SZ_Ç3>ê(ziýrFo³·¹v4nøø@r@…`‡‰å”rp$KÝÄX9/ÌKñO##ˆ¥ñf‹zø@r@…=GÒŽk6x|»¯ë¼ Ìñª››]Þ¼Â@@mÍ >>РPa§ÆjBɬ±`Uì²ÅúI:Û7ï'ý—Ñ©OA.Œm½Íâ>>ÐâPa§,N(R’Î ðy9mð/ù³-Nq,‹›§«NbY¼‡³8X؉  ÒØM¸\ó°¨ý¡¨7Yè ü¶®nël?n mË—h6õñ6… ;áÅ"ÅHs>+nYɽrq`ºßåtØdå>[®ˆ´‘e0s¼äsœ]Ùš&1|| 1 ÂNC¥Hk1+¼Oƒ~öĶž‰F H ¨°SÄæ¿v³DK &ûì‰!ºZ&/Œw`a'x‡"ê05£^“wôMòNÛ(ï|| ï ÂŽóÎŒ2ÝærË;ýš¼co’wÊVYÑxçãyv‚wš *†Ò×䓼“¶Š‹Æ;È;¨°¼SF°T6ªá×$žx“Ä]Ñw>wPa'ˆÇ5bê0yGèkO½Iâ1;x>>xÑ„uÊ ¶¨¦ ¨ŒhÂ:e[iES†TF4a2°Mÿ£)ÃÇ*#š°V,ÕˆJ 9ï=òtÇãõÑw§ &âØe$ItˆpÇ{º”>_5Te÷;µÚçwY“Ù_Wº 仵 ÍöõU÷‰;l|4'—”#&]Ù÷~ßÜUõ×—ŒàóUuÛ&ćSa¿7Y³ß¹&Ëj³]çîX¢|%AZ©„a‰”ÝMq|"ŸÈï¦ðLI{8‘ÿÂa%šr$ìüô†imÚRY7‚+KR˜œ¶äpÚø)+÷7Ù²Ù×DŸ»SÉž"(ÕÈÐöe$ fxPÜá»ü‚ˆóûb9`–šLpagŒD$UFCnöêê.4Q«‹þUnAëwE/ß8¢,š‡™_„ú×fšü¬ŸÜg3î³ÙàºJH›X- ½z/län¿Xå3OácÑ qo-°‡t#°°sÜHK¤¸;òñP4wƒÛ´Nì\î”ùzn??/,¯»­«ýV²„WDQ$p¼Õ¾>ZÑ„uʶ"¦ ¨ °°süLr¤ÿ¶{e[4»øø@»@…ß AŒ>´¢ÿ¿çî÷ÜfëšhòñŠ&¬SÕHÊx3D=| 2¢ ë”Al*M>>PÑ„uÊÀ6¡Š¦ ¨Œh”až"°­a`#J1ÎMü•ü’ endstream endobj 4167 0 obj << /Length 2505 /Filter /FlateDecode >> stream xÚí]sÛ¸†ïý+xWiÆBð pgz‘n²ivºÝîFÓ‹U}¡F²£Ö–]Iîv÷×÷ B”`Pœ¦3{‘P‘¡÷}}øððÃ0B‹»‚ï®þ0¿zõ £º(I©¹.æ·…ÒD—¢0%l +æ«b1ùúña½ÚLoæßV£Maa´Õhi8±Ò€X=±r:ãÆN^¹ Ó¬úÔÕÛùÕ¿®Œ¢ûìªøøpµ¸¡Å ¾ömA‰,mñs=ò¡PŒ.4¼¾/>\ýpE›Ø4Œo;¼¸b¤”.”"š(^çð,3Vå[¸åÿqYg3·}³<,Ý«ùÔÒÉn¹Ýß/›Çmóå9|„¹×ûõn³Þ»×£Šn¶§œNîŸW›í>eðÖìíO0€ùv N‹—DhåÒ¾~>|zÜ}5 F'«}õ‰j3¤ ùpXž÷ÍO÷ëú_g͈5¦Ð¥"B°ã:‹NeY«m[çÌœP£ mlMLFÃX¥ ·{Y·XÚ®l41º)ÇwËíóíòãáy7ev²Þõ+Á¹%JgŠÀ…$Fex³ž25ù÷æã‰ý  xTer—”Á!qäþçåÃúÔqƈ’—øö÷¿åõ6"Á´&ÖžÚÿUõ à("ËU ¹Âix #”óÁ»žâРЮq( C¨nã8dŽ,-AצÎØù…±ë\÷TÁq°sGC‰å‰cšHG„†ÇQU'/“GÐÔJ\ŽcŽ,-ŽA˜ÇÙ73¦?¼P™#@Ke7€£rvár°wŸKU¡e‘\¦‰Ä¹Dhx.¥&%ËÔ&%ªD´ÉYZ.ƒ0žKûæ}Ëþ-–]ÿ,{÷± ðí2M$Ž%BÃc {ѪLíR^R^ŽeŽ,-–A‡å»—ÚeŽ-—Ý \öîs Щ\¦‰Ä¹Dhx.9\˜ÒLí’ƒ—-/ç2G––Ë Œç2Þ.sø·Xvý,ï"Xöîc šbÛešHK„†Ç’QØ‹6–L)í2G–Ë L…¥ˆ™Ã¹²ë\)"8vîãJb»dšHG„Fƒ#\÷Ôç²àH9æò.™%K‹c¦ÂQÎþòîç‘ÌâÞ"Ùu¯‘”³§»Oç±îÞò’¥Äa™(ţᱴšÀåO,U ä—wÉ,Y<–aåŸ"Xæp÷Xî-–÷,»÷± )J$–i"q,K#‰²yº¥2°Õˆn™#K‹e¦ÂREÌáÜ"Ùu®‘T;÷q a±]2M$Ž#BÃã[Å3uIðâL]ŽcŽ,-ŽA˜ GÁ1‡s‹c×¹ÆÑDpìÜÇ$ÇvÇ4‘8Ž £¢D™G% Ó—Ó˜#JKc7K£À˜Ã¸…±c\³h#,6î³Ü`[cšHœE„†gQÀ5(+ó°(9aÑsdia ÂÌ9›½ý)‚cëÇ®5ðÈfë_#@¶î œa›cšHH„†’k"t¦æ((Áð˜#JËc7Ëœ‹8Ž9œ[;Î@£ˆÓ8عO#H0­4¦‰ÄiDhx\|ÒLí±š U"pÌ‘¥Å13‡ûÛ(9¬[»Ö¤Œ9غ$H0†ä1I#ŽãåžFÊA)So¤ªgx Œ9¢´0v³8_xؓýå±ãÞàøÂÞÁî}$©û2fjã”ÀqwWÔ›wÝïLCe! TÇ=ŪÞW¬ºÇ“'¥-‹Ýº¸íÎd ¤N¿Û7øJSz'̪ÑX}7yöHßÏÂMqèjiRÂÞxa›b(KÜÏûÆ©E ,6j­·»+Ü‹ýhÖÌÈ– Ðð~JÞ×ÛÛÍÝóîs7:/Y,fšÒÉãS5v4kzò•{#ˆÝÍ^‘†PÍÆÛ-¡>r¿`ÃžØ Ú©*| •Èæyã‚ÞLëâΚ²ž©ýû㪿:;~ò}Úî|zÜÒFþ}¹_§\®V»õ>D$ —“c°¡>’ lØ¢„“LKãdžV›+¤¯Ú¡>²Úذ‘j×ͯ³,xZ¹ß|÷úø·Fª·Yj¬®TÝ#÷qjê#k ©=Ü©HÃ›Ú Tíyjí© .PG«}¨¬=6l¤öTÅš9Ð ™Vû×ïÓNÿx~xZïÖ«´Ñ·»S{”þþüÉm¿ÙÞÝ'žÖÛÕQ¸vß/‹x¬6··ðMl›åýÀæ*J¸ƒq3ÆGìH:ìyȪûI¥š{¿…úƒì°[nî>¥^m¶ËÝ/g9ã¿‹¥9¸_è{"‡âhÝ%ÿh8†úH±a#8ZI”2¶Ð‰8~’›ø‡~c3™MãîƒFc3ÔG²‰ aÓ¢…iØ46ÙolfbSÕwb£¡È#ÉDF€Yý²œiž-ìy_̽fôæ<*= Ø¢þdóORêZùŠê«ê&ñÖBHw+9/¡>lØ1ŠÃüŒòË?ÍŽŒÏu*?ÂÝÆO¨äö?eIŒà€&%¦™n$¡¢œ¨kø“|rwg;ZC}d±a#‡!/‰¥þÉ@úÒHÿw_ÊÈÜýêhè„úHt°a#G ³ÄJ~ù!HÝÖhu õ‘u-¬+/Ý•ýXÅ8ÒÇc¼°M1¬»š­¡>²£…mŠaÜ…ÒhÅõ‘Å-lS ]ŸõG«E ,ÅXQ›J(CŒa˜i"g¶ç—Eãœ×‹I|^MœYMPJ®‹öù#ͺhù;ûy =îþ¹?»ÚÓäQ3‚PnŠSÕÏu–µÎÜó›’]ë,K?µ,ȲÖYw?µ,p¯u6Ü·¿û•"%E®u–(éˆÑðJ ß*Ë2Õ‘IèWþÑås³di ÂT­'²ÖYçÆ®sÓ'Ïã8ع£Ä*ŽÄ1M$Ž#BÃã()KGç/Ë/Ç1G–Ç Lc|êm÷É®û‹Hvî# ¦ÄvÈ4‘8’ $ƒzÊL’Ã]¿|™³,YZ$ƒ0’<‚cçÇ®ó‹8vîãFb;dšHG„†Ç‘šgy3Æ ÄæòÕ ³diq ÂT8FÖëÉâÜâØu~ÇÁÎ}AB[lwL‰ãˆÐhp%+ò,j·LŠ]Þs$ñ,Qjã'ëޞƮ÷K0öí± Z W2KÓˆ’ˆh@´‚“§-ZC¤¾¼+æHâA ¢T Êóæðõv}_‚p°oBPP¹~YšFÂÁþ¡Ø‰Iïp_./ù þ õæUï endstream endobj 4192 0 obj << /Length 2084 /Filter /FlateDecode >> stream xÚÝ\[sœ6~÷¯àq=S+º_:L“ÞÆ¶i›íS’lX›1 .°Iûï{XÄza/jgúàam‹ï|>ú$ÎEGwŽ~¸x½¼xñ=Á22ÈH*£å*IÃ"eàªH´L¢w‹oÊušd—–?¶£U¤a´díh®(Ò\Øv ¡øòŠ*½xÑ]ˆ$í]ß-/þ¼ 0 GäÉÜÊDt»¾x÷G üîÇ#ntôi;r ‚e>çÑÛ‹ß.°¥ý„% ÒJE ® ó1ÛÃâÆ -õkf а’‘âqnÎaÀh+„…èf€ìÏ€Ôˆ ð`ˆÀ¿uìÏq±Yŷͦº$z‘V‡^¥T#!g¢@GŠ8|›^±ø˜Ý¦‡Ö™€8“uŽ LûÈú/ñ:=¦%‚ŽÝÃù*Î!)‘ÖǦ¿u¾’ÂxB´¤Â ¢!SHÁ›:ø˜9A\+€¸‰a] ¼X^2±¨â¢Îã&+‹3jœƒËN2K†±8£Ä9,o9iÀ2>£ÅÉ–µÂpO1ºœW£F/G*bz9RXæ°:ž-Ç9¸ìä8 ÓÊ‘_ÑcÂØIrë;Iî[ÿ¬$'[>”$@fü±Ó102¢}ê·—ý?<Ú‡µÂ ¼@[Äöç‚HD (2ÚDU­ö¢†!ÔñŸ¥pÉz0iGûâwQпx\,ìcId¨ HÖ:Cƒœº)Œ3†øžÎð&»¬î¢îÃï}¸LlÌ÷Âe©aO0´—‹Uv·©ž6£ÓÑ»+‰ñâÍc;¶ ¤/» è ¸…a‹p3Ä÷œ_²G¦A*ÄEË“ANÁºix‡?\n{eÝzÂ÷¿~sí6I7›Úm`¹r—¤»húiÒ·¿y>ÉzQnÕçc¹À]ÄU1 ¡e8Å ñ=ãKöŒb JÑŠ[Å™Sçeóÿ‘ ×HRN2C|OÉx“uÙý{ ‚ ±±Øõêy» Üúâôü¹+)sܤ WÀú1½ÍVYšŒé~q~•4÷©›UVÕ®\6eÕŒ¸8hò)M8íñ=µëMvŠvy{³-²8olG¶¡ÓÓ[nŠÄmè§,ÏW£ñM}¨[äºáQ‰ §™¼§dBQµž ?Š€®â{ú›ì”ÀŸ„!³Þ.Ÿå}Z¥óîÒ·eâˆØ”“¶P·Á¯®]i®×q‘Ô7ׇšã¸uü÷ÌO¿Oeõðì wYa°e3Ä÷\6ÁÈvΦËÍB9c„ïç ²öa"ÔöÚ^½ñXq'GÇ®û’{Tx4›°8„î2¯`zâ{ê!Yë ÕeÁœ1Ä÷tF0²Ö² Iƒ9cˆïéŒ`d­3¸AƄ˺GøžÎF¶w†BŸrÿ‰«í´è½³ ½ƒE}n/D‚«/¤=ê4FÚ{¸ºê®¶CŸ–—ïw¨º_/ŸnùãíëîúL6yÚŸµØïüàèŠrĤÍÕ^mšû²úòòŠØß‹$­jt“—ë$Íó¯oË¢©ÊåÍ=ªÓ®KÖˆ^mÇuß¿¶ƒûPk€(dúúéÛ&n6µ5ÝMR±øØžHóòqÍaÛɶ{¸à-¯Ž‘D×äœ!Ú½Ïdp:WtꙌY(ômÇ—3³XïÛŽëçÏdL·{8ýµòëƒ;‚œíƒû`ô:d­É,}pZ0D?»> — dº=í´ç°¼ã¾e»Ÿ–ãdˇr̨ߎ6ã3EŽõ0¶›»Î ? ðýBpd­3´ ð=áMvBË PÕ¢/…¹V¸’*ûhžNŘ`5¦›MþàXjk÷ØUHÍ›Sgëǰ*Q]®Ó²pTAš×éD-^ÏÞ*]—pS:Á!@r-«ßÇŽÆÛÎià}\ÏüçÜÃòwÿËÛ,­O!xIÎÏîºö8BÀ$D*\v„ï¹”½ÉNYÊÙ3©&.åµk·#M{3®…Z&8"ášCxÏ) EÕz²@"ºbˆïé‹`d­3E‡ëçŒð=Œ¬u…ä’‡kfŒð=Œ¬uÑۢɿY¥¥šA-÷Ê´âh™ö=ÆLŒë´›â¡(ÛBÚ§â\áU)¼îT(²º©6Ýw_mKsýõCœ¯ãeñ% |=¼ül¹µcD{FGË«m1Gs¿úªFWØ¢0¿bžwÞ(]«Éï¼ÍÁ ¯f (¸”Wç0Þ´ÆÏWW'›=œ{@`†øWAÎW}0z b޳W)†kߎ?»wú›ÃúN€ûæ¿ÿIœ«¦Îbx'¾}Ãý>yZ“M  “~ØtŒÏ<½ˆVˆs®œJhY‡‹Fø~±B8²Öd îàÃßÓÞd'd„¶#Mlpðmv—5±ãÙØë çÊßüW‡Ê}HõÚ½7˜p†øžÂ FÖ:r=‰Ã5%FøžÎð&;eqˆ`Œxö‹y¥ß‹yòNÉÃÕ®GøžãKöô[„ Ètä´óìcî'ŸoâÚµQ’$UZ×»’p©Ã•BGøžÊFÖ:° ÷~ÁßÓÁÈv΀pU©pEÆ!¼Ÿ+‚Qí<¡»(”'†ð~žFÕzB My€ŠÚS8€þ$—ÿÊô¨Zò endstream endobj 4112 0 obj << /Type /ObjStm /N 100 /First 972 /Length 1244 /Filter /FlateDecode >> stream xÚ¥WÍŽ•7 ÝÏSäš›ØñO¤‹Í®¢,Ú¢.½ª*!¦‚A¢oßcŒ†òÑz`s¯¯ïINügÍ1ÚhkŽÙ–Ä7µ¿¹MNÅjÓvÒˆVÚHScgj¼±¤c]¬9±Ç Íľ˜íM8þ5nâ±+5©¦6ÛA5­ùš!xs×vÛm›bcš gŒeD4ÖΚŒç›SR' ‹R§Ò62HIIëÒ<Úéâòòâô¸=G‰-”ôÓvúù—_›hWloõðõëw¯^ývñèуY{˜P“tBÕÀsuªžbpg´˜6uäAì³3¾k`}¡æk`Ù}!ýjàå]fÑÄÖEŠ1!Ò.»¤h_ë_;_]¿¾i——ít©m·‹®¢ãûGe€>ðñ‡E½ƒ¡õüíNOÞ\¿üé|Óž·Ó“ÇWíôìüþ¦Ý1=ûû¯3þxñÇùâôXϯoÞF›Xqzz~{ýîÍËóÛÛÖ‘ºÏ¿ÿùâûë÷íyÈF¢Ðqutß¿ïÅlW %þžýqéÜÙÿÝœ=š§›÷ÁÞúýÁ[¦³ïÁE°Dmx¼PZ=Gq±µQϨ *‚GÔFÑyf«¶¨ )‚5jÊ`‰Ú(ÆD—t­¦†òêZݘ¸c‚»¬›c¢ePMPÙ£û*ÆDlw÷bLp÷Ñ«ë»ê:Œ*}ŒbLWÙ¨7ÙØÅ˜`*ì1ÖÀ¸ÊbR)®2 zE0®2’¢ WíbL®2æbQáþ襊`\e«è¹…›li1&¾zŒ´%0£Ã”»")¢-^sýÌ{ëgÆ ÙeóˆxôxiÕÀsw¥bÑð®ZÌ#Œ¬ÝF10Lw[E?cÎïæÅ¤Ã ¤{Ñsxu·bLð~ë{VwfLRŒ Þ¯}oyø`ö…Yì“™í«3µÏ3•oÌN÷3í}q0»þßÁ켜q;=L‡WÙØÐ½ÕŠ`œ™‡Á2:¯¢7£{W±ä˜âf<Ѽkã<0kÍ¢›é"‡µqö…)NŠ`ã®\Œ +uLŸE°Ìn³èg^c\K˜µF1&<S\1&(,LqŘ`Z@cB.˜âŠ1!4ï1ŠÞˆÇ¯‹>¸~¡÷}Ú#¿ºnú¼îñÍ螨÷Ñw¯2”èá{Æ;kX…&U0*Ô’G`T¨>$À¨P¿ÿü‰Êøâ endstream endobj 4231 0 obj << /Length 2286 /Filter /FlateDecode >> stream xÚí\[sã¶~÷¯à£4±¸ò²“éÄõ6»ÎÔ›uóâîìÐ$±‘H…oòï –¤DˆN§Ó—¥Dƒß9þðàz¡·ö ÷þê/Wo¾GÐ÷"ùØ÷Wó/ˆÄ5@ÞãÒ{šÝf;¾L柣/£}"GÓƒ¬ˆ0š_ã œ½Qä#ùÔÕ_¯~½BbôÐW âQ¼Åîêéô–âg?xÐ(ô¾Ô#wC`â‹Ï[ïãÕ?® vvÝ[5à ˆ*§ðók?š½§k$ý[‹Ï›½øÕjo¯¯Õõ=OyoÕ—eœ.ã|ŽálY¨[·Y¾Ïò¸L²TÝø¬7zôžó¥úø0'p œ-×Pï’uR6¸wiÉóU¼àêk>GlVЩ¯ÏÙÁ¤f½=GлÆŸ©_ð¦*7Yþv~Mœ}ŸÇé/„ÁÙ}–'êÓ^êÓ·«ÝF|ù®*x^€"«ò_eº ƒƒ”—–¥€ˆeAPV…¶¥ÛßXÎ<™c6{‘Þsus—-õ§/s9:ÿ¥øF}/…kÅ.)Õ·4ÓŠj/è,oGRñƒÀó#A}©–ThÐR™øžq ÎaˆÑb,cB)µ'ÏfD\|øšßû8­„ʪžž3q(D<‘ ˜PО︜ėD(òÈ:äA6‘u ‘ˆêžõ¿Ç;~j©@€ÑKìψëëäû OÍ¿d?áfB£’CÌì0@ŒGO<¥Ã@hA,¡õ,|]ùD\ê•o©WŽöª7,Ï)<;ȳíÚÃíÝõ‡‡wwŸ‘çÖòl[?lÃmûX¢!&–59/Q ŒF¢LîÉÁ4˜>#SIt Ïm»öpûºD§°~hÛºDGÛ>–(“* ívâñDL¦nòò¾ý›¢Ôó‰ÈúX½·Ëû ù#êa…‘—soÕÎ;P§ïÀ"‰Œpc@#9Ú_¥«=ü&ï5±ÐÆòA„#‡Îj2Ð>!îÈèâ[’aíl ˜¯=õ᧦ê@º ¢­ªÃG¡ØESºJÖUk9†õˆE®¼—c‹^©2{«ntÜ븞(®u71]|ˉ±uöÄ4ÈbT.‹0ÐÇjžà§yMu€{‘_˜MÒsUÎæÊlÜ’’îV}*ò/Èà ×Z-b+ìÉE<… Ãd Ž˜3Åôðícíì°bXäõFú„&VL±¥îÿŒdB±‹‹DÆ™dºø–’qæ¬&C&ÊQàŽŒ.¾%ÖÎŽØ ™¨žP¨¨7<çfÊŽMÙÎr¹LNÈ~pü!‰~u¤<êÚîñKœlãç­¡Ó«<Û™|ÿñÖ2ËÍ~Ù$‹MwèëËå ÝEBß2¬ >XÖm2ôY§Ù<,²j»4LJÌcB–™á¸MbË›¦÷m,~ }ï»bõ¥ä`±y½xèì ¶ì(–3@¬ í0Ô94EPMÒ²£ˆDØØ–Ý$.4ÎLZv“Xoœ;ÖÏ·ìÆÛ=ž™];Ä ãl7ÄB‹•’ˆNÒ ¡€¦+%× )Ù‚‡8‰ùƒÛö›E ëEé´'±`Ë~½„ÖËç  ÇÛ>’¡„@³ZÊ.Àxek#È#‚Ð]σQ#ä.ßîáÛ%îœÕd0±ð¹;ôêÂ[RáÊUÍ¥Cw•Gß’ kgGú„€ üæÈëâ¢xø`ærMwاñ6[›MÒ}UšÂ3dU9=èR¿i÷ßô[8ê „LÝ´=|˳vvLŒQOéŠäÎpÒ–7 šÔ´O#ÑpdRnLeXò<¯ö¥i{1ŸÚƒÒtÍZd•t¶Ð÷©ÇÏÝVyÎÓrû»ét¶Nª¾dº;(éá[™µ³c‚ 3Àšw¿7’w÷7¯w¢Â"ØÝ‹ =|Ë©pæ¬&ÂúÇ]|K2¬£KQúùcWÿM\œê“#ÿ|s¿HÒõ¶ßa?óFÀŒ§Æ•,?åQxÞ¡e²Zq¹z&¦yÍMÙU†kúy´ØÈsCÓÆçÑþÓÌ>Ãæs2v9Ça(tW¢õðíÂÆÞÙaƒ#,®úar^dÛêè•4ƒÍû§8]ó“±ôV½.Ƨóç¾±oÔ#ŽæOo®ÙEO]b Q??¶»¹¬nзé(tƒ9:įNJÝuî{ø–cíì˜À šÓîüXþà dœNÛ¶OÒeò’,«xkš;ïólÇ»éždœæñx±µMŒÕðÏÙ¶Œ×|Ú"h¡*±¡á«g¡ÑÅ· kgÇ„FAè—Zv<.ªœïŽ”³a|Ë¥©„Ÿ CãßÕnùk(˜Õ'Î$Ñ·T„+W5T•‰Î¨èâ[raíì˜è !Ydýòc“&œ¯ ~³Ï®§)!~¬=‹ÿ'–ƒ,/„¹;úíá[•3g5XüÎÈèâ[’aëì™õ TȽvrñ›áqݘI]W€é„òGªVu6ã]|Ëwæ¬&ªúÃ]|K2l=#ÈÄúÜ/üÏ«`_-ÿÖö4üÈÍȈA‘ÊÄ]‰¤‡o'wÎj2‚„ÈÝßãôð-ɰuv8bPH‚úäâ¢ôÑŸ"}<Ù'4´¯Ògg³ØÅ·œEgÎj2XRÑF·$‘£šªR gDtñ-©pæ¬&ƒ0é®Hèá[’áÌYMVÙ32ºø–d8s¶!H\üÁÃ/T€BzÉßö­/Xk endstream endobj 4271 0 obj << /Length 2339 /Filter /FlateDecode >> stream xÚÍ\[sã¶~÷¯à£4`Ü d:lœ6“ílsYO_ÜJ¢,v)Ráe=é¯/(^"iÐ’<É¢ÁŸ¿sppxh<0øþæÛû›Û È $Ç<¸ßŒ.IJõ¢à~<,îòC¼M–îß6£Ã@¨Ñœ4£iˆ ¡; D/W8‹[ý8jîºùûýͯ7H‚ú2ƒº•°`s¸yøƒ­úÝÛ*Eðty‚®~Nƒ÷7?ßÀ–64é‹3B8C@RMŠ˜8ñèn V¨á—$›ÃOÍwµÒŸ?dUœ¦Éãr…à"ΪîjYõA}/õ…Ÿî~Xa!ºÓß7QQ$q¡¿¬ó¨Xb¸Øvº« ƒ¦€p¦)¾©«}^|½\5ß»¨øT730¸øç³E|8îô׿~Z6„Ô÷oQUnPgɪ\/)\€mü·fª…@¢±ßWQU—-öSs^|*/ÍÂap"Dß,äÌ,TJ ¸x6Ë•10€!¸`:…¡F«±ŒµÚйÌ\̈ú@`-Ç»(«wѦª‹% e¬ !0€ñ+1À„‚𾋗ˆ->'›ørr"™¼Òä"µ~ÌÉÿâ¡5‰£¯™öÒø‚*çcSˆs ÄñíCµ*,A¨Àh$ÄÌ £s¨O9Û pÈ C~úÓNV茎-je‰-Q•äÙ„W^ƒÒ³Wžs:‹fãnyÙŸÝò|ö³P<î³g¿ôÎfÃrŒn³! ¬ÙyšïÏÿ.BHΠÒ4ˆÍu†8ÀˆH!ƒ"vç[Ÿ5|õr¢ø@ÚM Q3Ú_ï¶=ünÛ¶™á‹‰¥G²­j! Êü‰aâ;ŠáLöX<ú‡_º¤ µY=Kš8Á*øwiC}<æEUyÓ%šÊ¤8„‹jÛ TA¦—‰-tÐi¯ŽÜvwyÓè ‹ÈŽÊ]›­Y n²¹mŸÄWÓ¤£lk¾ÉëÔrè±È×Ñ:ýÍnt©h6üÄŒ³í Qé£Üß 1ñWˆ3Ù9+#€Â¶®°öù\´t³ÍlŸ´\ OIµ·ô™C”¦vCù6Ù%›SÆRö_H­øÅ»|[§q9Ë‘ãí\W†—„þ\ÙÄwteodµL%q’ obôðÝÄðG¶CU:Jb˜øŽb8“䘪± uË—‹{t•îòÂ- àã›ú»þ _ë /†RUø³³ïhfWª6Væ! ¬áB„¶ò.)ÊjDàÁ.”ßdQš?Znuu¬+Ë=peYœöìš_Áé„«ˆ²ÇØ6åÊvÉc]|©¶í7ÆU*±?—2ñ}Ê•ì€ !¬ˆ=QõøÉ‡à ûý:9æiT ™Á¥óÈà #-þ=t{sjÛ|þeÎÍ\È6„0]y3¸‰ïhpW²Sg Ðö ½`ï:³4øŸÏÜTgùÞÌmâ;šÛ•씹)”·ðë×7;_Þì•æfžŒM”úÈc~`â;Û™ìœ À`{TÆjÇÜÎIð“" ?GŠ€$ÀÌßJßÑ«¼‘mÅ€º ð&†‰ï(†3Ù9¥B@Õv¿©E(òPjQ©k _†îá»ÚìœX !8=ýú]ª­$³Ž¤Q’ù‡TèBÁ›c˜øŽŽáJv"£¢BÎîbÒ»¤mªBÃSöíMDÞQCGªS†B©!º"¤•ÚjÈuJëMDßQEW²S2ªÈRÙåöŒÖ:2zÓÑÄwÔѕ씎ŠpwBZ±½ŒUeù“ÑÄw”ÑÙV ¢³!ob˜øŽbx#ÛŠuÆàM ßQ od[1 Þ6½‰aâ;Šál'FÓš+\Ú…F>ÇûiIˆ€@ò¬¡V6Ôþ· M—ÙMûörÛ”!§/»¦'6?uÆnb}©Œ³2wíš}“mã¢íšý6ÍÛ8MÛ¦Ùèô+°n¯~£2ÙªÈSV{P^¥i–¨{±6ù«ÛÊÜ0t¿" @D®Ò4KT!Ì¥œÛ5{ ]¢ÁÁ¦mö*³wý‰ÆìÓ}³óç½´?¤j‰Q·¾YKɾYŒÖ±Tш‰«ôÍâæMÚöܨP2îzW™µs=cZ½ØéØåµÔÏQ‹w‡ zåUˆu^iëâí¨cΟúÂ1ˆI§àö ŒvAª”ã¼\½vÓ,fjþ*œ¾[Îál+Uñû«SzøŽb8“q²‡™Z<¨}&zoÛøÝûŸ,ŸŠdWnÀ½ldVÿZ'…m‹^’%U¥ÉÿÇÏ·ñ̦ڧ}²ÙÛ6SÎ=§Ä$¦Ñ&ÉlÂ+[ßz”x;þˆ$MÖ}¿½KŠÃSTÄ3nÙ<¿r9ÐSû²c•(B‡=|G?v&;Ç °{3Ô:\_%¶77ïíûÿm—^©üçiñ´Í4ÞkùÆoymù¬*Ÿû&Fìôz²·u`â;®g²sÖ’‘ö Åþåe+û7¶3^ hnù1³t®ÏqQZ¯ÃÄ2‰>GI­SK»"?ØÜWÕñâiïíDìzz²Wnz§º!/ç.£æD@ø{®ßÃw\FÎdç,#( Ûçúɵƒ¨6íÇ,ÏvEL#Æg‰ŠuÿMž)’HÕ¯ ïfqoT[%„‚ ý=2îá;jáLv†÷#Áf¢û'!£ý!£YÇqðÍ1Ûv#êÒÛ›aL|Gø’0CÈîΩàÝ/»šÞlû}aãgm¹fõaöÿ¾@%Ùùgâþ’n™æ•‡é/ªBý¢ËW¶k€ëºÜÛ0ñ×€3Y›à„$¨™ŒBÑ󻺖1i[$ŸmWÆQa{eݰyÙ8:´ÎêÒö|å"·ð-¦keo¾eâ;ú–+Ù‰øªô ÝÿÏy@Wޝnqåe#]èy3¢‰ïhDod[1°N×½‰aâ;Šál+FÓp€üŽôðÅðF¶êTÖ›&¾£ÞÈvbpþO ®Ö`4Ð…$¤¯ù€ÿöfÈ endstream endobj 4228 0 obj << /Type /ObjStm /N 100 /First 967 /Length 1241 /Filter /FlateDecode >> stream xÚWÍŽ•7 Ýß§È 47ŽÿiÄ¢Eì*!ʢ툢WU%ÄT0Hôí{l`ʨÈÃf®¿3'qlŸÄ‰Ì1Úh25Ñømç77â¤ÑJDÛœ†µi; oL‰¬Æº› 7r€KP#÷ ƒš²‡1›®D¸ÙLDšy"Úœ±æ–ˆ·/*Ò–&¦ÕÖŽeÑn[bYs´½™ÔhpB–'†(h&†0ÈÓF¹®9 –&æˆvŒ“‚'ÎL`*¥°0Ÿªaj#ƘØ$ÖʘØ2D¤‹ie”¼`ùD ¼íŒÐÎ@…*‘Ø„¥‰1¬˜4d ‰¤³Õछž˜7@áB,Kl7L<°40…¯ˆ ~fL Ît'gƉÁ‡­ÄàÃgbðá¥PøX”|, žÁÇ! |Î@|sïĸñàÄÖJL¡¡™˜ÁòÄ +>  2*´c,%eѰRè4‹ëpaY\ÌÄ–Å…Øv¸p¸pÉ¡á+\8\,N .–zçZGô¼SìQΑnW¨\Ã'4‘Äò2B;±e‡µ> › ÃxÆgì2öÀ"ëB‰Á‡Xbø£©‡Èœ¦B÷ºc7€k’œÙòÓÕÕéü¸]Ã1a7?kç_û½©uÃ<¦Ô7¶Ö›÷¯_¿8=zôm²Œ¾Qíyî¾± ™vØ5òX}¹HIdž.’—u‚"kd×alÒc£ÖÈÓûØE2¶oßujyÅs}żG•×Ⱦ;öm‘l«ÇYU#«w©*ƒÅz´¡™µW¹scÉÅÄëØ÷UòèÎE-²ì^Ô2!Ë‹ŠÊ dyi5@d9zrŒ,o.*ƒ¦ôíEeITÍóàGø=ò“›7·íꪟ®8þqlÜA>Ûhwõù#. wÿ‚(iä¦;?}{óê—Ëm»nç§Ÿ´óóˇÛvçéù?_ð—^NçŸàõòæö]ôŠ\èéüìòîæýÛW—wû^b?_þøëå7Úu8Ñ“ Ýl !÷/àïå[L‚- =ÿ‹øã"sÿd#"ÇËr¿Çþ”-7t£SåˆÄŽ*|Hft£¦pHž r(®Ùu…CòÀq|ԎȺÑBªÙÐ¥ŽÎØC²K§£3ölÜç,æˆ>ÎØC2DÅ£X声XÙÜiɼEá*˰bêpD)fƒu¡‰³Á‚ö´ª²u­Æ7µ«åŒGY7*Ê7ònÕeà†Šß¢œqyF3+Ö×z4³¢œñâ@3+!4³bMð`ëUê´¾¥X¼mû^Å’àý‡³«XÚè{V, -lÀQ, ùÄÙU, ¡GÄË´FV\&gqOzÄô·êÿúñ7úöw·j?hÕö°VgïÿZµßkÕ¸žã…ÿõVíiÕdSé~x´}…|¨œ#®àzµg‘ÌW—Š5sì“bM¿Õú‰h_\¬‰°ôåÅjã$훊5á…%[±Ú—Tûò<þ7fØX endstream endobj 4316 0 obj << /Length 2203 /Filter /FlateDecode >> stream xÚí\]Û¸}Ÿ_¡GØaøMjQݤiv‘¦íÎ[[žÖ¶fe9Aÿ}I“Òˆ²-S¦Ø‹}ÒX¦Î=¾÷èòã’“Ç&oo~¼¿yõWy’‚”cžÜ¯ÆOI"Ru(¹_&gwå&_óO÷?éÖ"‘ª5'º5H*Ø¡!Âd~‹…œ½2Ä‘~êæÍýÍo7Hµ‚ z± %,Yln>~‚ÉR}÷SMeòõÐr“0&\ý½N~¹ùç ´´¡K_v5à ”R ¨{ðÀ£y0ùx‹4¿_óÏ‹r¿­óÊð½½5××Uñ¥¹·šc8+퇟ç„ÍÊuûÀ›u¾¨«C‹m±0÷wÙáÛeã¼®«ar‹) œž?ìë§²ú~~Kœ½/OY¾V ÎþV¬×›l»Õ ú)$@Jˆyê—:«÷;ûTïê|yìrŽ€"á©DʾËIÇå4Mä²uùÄ@Á.@„a¨Öª-cÂDu½Ç%ÀŒ¨‹_¼Ï¶ûU¶¨÷ÕÉ™ Á‘#0–€ñ‰`B .…×ù±Ù—b‘')S€§©wÃ5þ÷l“Ÿzß`ô³ÇÁ—T) A Δ§‚¯}/”Ø=AhzC»³0ŒF„‚¨k:: ð”?ü´Cœ¡Þ^“#ùá¼§ Óê±Ëæwï —´¤?dÕr@ S°iÚeóë\e©—¤{^«£kUwM¹n4)Ó}Œ¾¼íþ.¤ gPù‚hD}Ÿ!0¢ ©L“*OVÝNÎ:}÷ØQ| m `¤[‡â›~µ‡ßtÐ>ºX¤8HÖ:C½\’²xÎpñ¬u†4HÉã9ÃÅtF0Ù`õ˜˜?þÕŒ‘¼ÒÎX‘c ÍPw»*÷UVåÖ3CªQ$‡pöáY·Ýõ˜³ïÍ ‡ž›ël` þÍ"^`\üÀÀ„’=.Õ}¨&†l?ñ~šœ{kÝzÆ÷ºwó ÒÃ~ç×°\ùµ[æí ¯3«Ðßü2x–õ¬<¨%[÷增BžŠaª›N¹Œ¦˜~˜b‚ÉžW S/Vã4±bvë²þýHFý!LãIÆÅ”L0YŸì߈HÍŸp*ŒˆÞ­®Ë&êÑWçã篤Â3Im}wÏù¢XvM C÷»á·¤~Êý ¬ŠjçËeÿü\Vu‹‡vUãüxÒuà•JuŒp…„È—YÞµ9è|lÕ,mé×ôk±^{¾:žÆ÷»cÑßlÇÕì1Åñ$ãâj&Yë †"$ž3\ü@g“1ðgŒj—ÎîŸ|sïÒ¬ OšÏ3Ï Zlž×ùô4ëÒ¯]•gžùÀ»ÿè®]lü%[ïsO—®ªr3¶£¡f"íMqñß”`²cÞJå¶ô³YÛôŠBoíób{ï~ìnŒnÚÕÎkúb¦¥ÑDáâŠ"Yë df\Ñœáâ:#Yë hfÑœáâ:#Yã ššÑh,gôðÜlã MC–ùÏ\ÏW¼)Ku¹ë¥âNV¼79…ºÕî÷y±~ÊÔ”Ö|zsûÒd—WEn¿x(m-{7¶˜ýøhªNz™ãí>)C½ÍžTn®Í§?=‚G{ã/Ë ,ÊÍŸ›…ŽÁÚ÷CUšêÒöÅØ¶4Û©§ù°*­õu™-‹mË âjóU#dUÞ.­œ*£S¨ËB(¨´†a*˜$…€›ÅØà2:Ñ’Edl} MÝÒáàSHŸÄzS§t¬WÒÇÛ=Š¿† X†UÒ=A+é!…ƒÀ“TÒ‰ÄêjW5ÚÄt^S˜nõçØViÛUÙÓâ›Ât+¾®i›£ÏËo´åcù)"H üü@†å€ÑÈO}ϘF~B+ õ–ߦ[ù9¶µü,ô7…íV]Ûõ7Úò±þA¡éÏdXþ˜žO”þ˜¨Æyèo Ó­þÛZr(ýMaº•_×ôEù¶|,?yhúó–_F#?Š…rùQ`êŸþ¦0ÝÊϱmä7”þ¦°Ýê¯kû¢þF[>ÖŸ‚À04ýù ë/£ÑQí™FJ ø§¿)L·úsl[ýí8…ñV€]ã8Úò±b4h {Æ…u‚˜ÅÛI Þoý²‡¶J¬q–zûe¼õË~˜3⑵Îzûe¼õË~ 3BÉž¨ô(HŒ°ò³.ÀÚ=U¶Rý°ÍÖå£_ æÝöy_¬Ça®wÆÛ´ÔÃŒI(Ù˜]ê“Çäþ¾"(Êyi¼Ý.|`H©D„ë:›ôŠÈëⱨ3ÏÝ1ïFl+û06r”T x¡sñcJv xT×S¯à,3_ö4QCDoÿQ?ÐÓÑÈZg`½'.Þ®Š~ 3‚ÉŽØU±„¢ouð#½ñ,ÞΆ~``¢‘µÎ€fÜÍ.~ 3BÉ$G¨÷Ä‘o} c»ß<ôÒîÿj«ÊF—ßx&A¼É­ƒ(ð@¢cä­—¥ìŽ9?òÿu(Q3ÚŽ\?0¼ÑÈZgˆŒ7Cíá:#˜ìˆI")à¢9âŸÂ6_³*÷=FñÛ¾¨rÏ£ÿñ>r±ó$ wr.wa—š‹í•I.¿çØÌ`¢IÛÅ”v0Ù1ÒÖ…cdׇÿéõy[nWUž§à:«2ßä>RWÜAÈLU¢…ÜÅ y4²Öã­dôð¬qFjFæ±|ᇹ"Uã iq±<á‡y"Uã ½{6òpÆñaé5ÿÙð¿Dcä endstream endobj 4357 0 obj << /Length 2357 /Filter /FlateDecode >> stream xÚÍ\Ûrã6}÷WðQ®ZÁ¸L¥¶’x¼É¤âÌìØµ/³SS4EY¬ÑmxÇùúIP)‰"µO”iðt«û ÙÝl Ï ~¾úéñêæ_ò !ÇNn7«d–^züµZ-©VsR­¦I…«"L¯§XÈÉMs@UW]Ý=^}½Bj Ð_Ô¥„ñêêã'ÌÔÿ~  ¡ ^ê•«€!0áêó2x¸ú÷Ôj÷úkÈ=ÅZ! 6Ê1 ÎáZŸöÂàãUz®’ϳèk£ótÚï“t¹ˆÊ¼ùëýíÛæÃ,*¢æS-Ó<-Òͺ9GÙ5†“YÞZjß®0˜b g2?–Åb“}w=%NîÓx%K…Âàä—t¹\Eëuó×÷ ýçùkoÖÏ٦܂YòÏJFŠ i@Ѝ(s š\#6ùc›dé*YÑòÐ)DÀCA}G=GÐ0’Ë#FÆÀ pIÔQ a¨Õj-c¢ñ;Ú73—3¢®Ír­Ëyevä$É-±Œ¤&ÚÓáMíŽoiœJ'Êx$B¤öLOúïÑ*9¶`ô¹‡þ—¸>@ ΔÇü_Y_¨aBÃ#• 1sÃhy(€[»ã¡P\P©áaQNóo Ñ;þudßM1‡0`ß²wìÛ—­£ëiþYK>䟀@bâÈ?3aþ9`´ücÕmLŒÃ?…É1æß¢wüëÈVüƒÃüCöŽû²ÏòÏZò!ÿXE!évµÇ€ dU*S~ÞÿfDí>p¢2Vß•«ó q€ 0edI0ßÏ©:PÇÏ À*© q+ FÕjWü&}ëá·ù ‰„},BzTV)ÞâÏ]|GcxSVª£ þŒÑÅw4†7ec°ªÔAÌ›1zønÆpW¶ÌžƒæÃ‡¶>Cºp¤U êþ„°Æ‚:Nÿ¸Ž–›çNvˆ¥J6•ÇLޕŶ,ºk;Út#½öƒT‘VÝj¼ù¡‹ïèoÊjcT™J(ü£‹ïh geMH¹Óœ$YÛûXÏÓç2‹ê:߈››mµ6ïu&ß5'γ”©|†HŽéâ;:Æ›²ÚT¹G„þŒÑÅw4†«²’a€UŽZsò#üt]3mª9v‚ˆUÓʈ±Oen¶p]®žte¯‡Výç¿Á“Úè-¡›P{{B]…L·‘ªJDþ˜ÐÅwd‚«²L ¶´þˆFfB¾ÜÿÿTÀ@î¯ìèá;RÁ›²Ú¨I¡¼£‹ïh gem’Kªê¹Ù(oç—EBuéÍi.›ï–Ô4ÀšæÛ$Nçi2ë«ûáHP,3ó4Ë u‰¾Eé2zZ"£ó2€¨¿j²‡ïÈqgem8% 7$Ÿ%» gð’.—†[±ÌÉ #: ›”Û—ƒ{ønö§¬6†$cejßÑÎÊZTfTrÀ~žûØ‹dš†ÕcŽá˜%_Ë4K #rd.W/QfºW¶ËMdº_i¼0ãõ¸›;ŠãÍj»LóEo“ìmÑ”.ÞèÜÅw¤³³²6t 0¦ ež® ›_Åq柮&©açâh>?^§EŸÆËëé ‹&ŠáZÃä.®çX>ÇuKçâ[oê/otîâ;ÒÙYY:s XÈGç‘çÅí¼_„úë4õðýꬬ_•…8ѽ§ù¦\Ï kžõeáìÜþ]«ý›%Ég;æQö™æ¼'*šó$"uÉéCxG ¹ªjà Šºg5Ï6+3/,Šb{ÐE¿¨Ç_^^N„õc«ãÝX£á›ìÙ–¸*Ïü5-{øŽŒð¦¬6€ ª¾£1¼)«›RÆ›1ºøŽÆð¦lcŒj¨J„}£‡ïf ʶÆÀõ0–ÃÔŽõœ4aBÉ{ƒÒäø ô6æíŒ÷nP:ë¹çÍMþª§¥ïßßNwëÞßÞ ¨??môŒ´íˆôC­Ó|US´/Íhô‡(þóuIõ¤tžµ'~ØlÁvy~DúåU5Ï—¶ð:6M 0t›ìrÃh¦±”@6]Eçéh\1Ìz8z ÚáÀ}Lf£GÞNî ¶{àü ‚CœM5MuÁhI(82e4K¨n°z¯W1¤‰§é7†ìý:Âu´:M¾1DïÈ·/ZÇÓÓü³–|È?ÁB§øeqæ‡U6ÀþS1%^³«¾[BáOYm ‚½fW=|GcxSV£ºIåÍ]|Gc8+kñ(«äKJbÙ¾«#·Í#óWÃç.**4–ÛXyºë§òËÙ¸O䟢þsÍÓ}è±^¿=ÞbJáÑÇ\t Íþ”šN¤Ï«È¦Ÿ,û ü³=¬[µ½í¸.¾ãŽsVÖfÇ!¢„¶åΛ[Ã.è"Ý^úð©ûtÕˆó勾›/ü)«¡büuk{øŽÆpVÖ‚˜HH°m<”OÍ`‰aÀÌËív“¦Aóéuä 9ËÒoƒ‰ÆÓ×HUqùãDÞ‘Žªø_"©îן-µykãíú„[Ž]€äi2wcURC÷¾£#]•ð¤€ÊÐÈ“oÒç´ˆ Ÿ½µÈùÞYxÝnòRv0$õ7@ÜÃwd‡«²ì`!@Ĉ¿Ý½É-ÜHåßâGÚ”,ÞüØÅwô£«²~¤ ö×ZÎ8òîîý‡w÷®$Ï–$M.ìÍ•]|GWzSVãÊÅþŒÑÅw4†³²“óº{|é»yïÜÞÍC¨IŒ½9¦‹ïèWe¸ @Y¥'¸ýa%Ó×Ñ.O›3†=³Y–ä¹mT‚M"ìÍß]|G»*;àoH!Üx³V…˜ùÞTûØvÞ*l²[_îé»yÇYU“(‰0Rá!Dˆ]”ttÃÑê «¥îL_kJsSлù<‰ UÛAÿ~øâéèo8(üSZØF QgÒ¾ˆØAwã¡£¢ÇHW½ð¤²P‰Eºi¯›¼‘†OGù/¿üÙïm×…&§¯)ÿÓ¿$¬!Ñ9}ì©ú¶^òƒƒÿraÍÎ endstream endobj 4313 0 obj << /Type /ObjStm /N 100 /First 972 /Length 1225 /Filter /FlateDecode >> stream xÚÅXÍj^G ÝO1/ÐùFI£“E¼+„4‹¶!‹~”Bˆ‹í@úö=’㦗TÐE7¶||îèïÌèÎÞ«&¼½‰ÄïÝ|7™c4š5Z‰pcNd6¶D¤MJDÛÔD¬ÉŒ…åÁº;9»é „FS„¨‰Ål%¢mùc5wmŠ%ö¤¼íeX˜v£Á1"¦a!D¢xŽ–&6ñHL`Ib k'fÈn&¶`¥OöF Š$3œð¡™"¢À‰Á‡!uUüÓ2É g–Y¢d´¦‡gËgXp朜ùšp mJ ζOFCÄ ÁÒÄPô±-,T$GŸ˜<1EK²>b°Vb«1*â°,±ÝX(xˆµLáC³@ š‚KÖ,‡e(¬ãåÉÃʾÇIc‘=s9¸Ø.l4h%0#X+1†R(± ˃zx$ù°&f°2][ ÅŒ4Ìaeºh ʼ’éby$|hêaÁ‡¥ *¬ž|¬LO >Ò€žé"Óé©ü˜›CZsù¢R2RVÊ!ZL#1ü ‰þE‘hGÿ"nžŽÁ©÷µÁÚÑÊŒ¢Kêa#I=løÐÔC,•ÎgˆL±eaÁ‡Ibða¾NWW§óóöZÕíe;ÿøÓÏM­ç5;~}øøþý›Ó³g_ç÷ºÖÈÊ}ÉB=t]#ÏÑò­‘iwBkäá ƒ™öêŒó¨FvëŒÝQ#/íqÞÖÈ&=Î…Yg‰ÖÈÂ-’'uÈ®HæÑu|Ñ”ë›÷íꪯqz·õðlœø6ÇñùœØgŸÿÈÓ:ÿÂrç·7ï~¸Ü·×íüâùu;¿º|ºož^ýñûÿxûëåtþ^/îïâ@³xþt~y¹»ùxûîr÷pÈ%öýå—ßÞ~{ó©½ÿºÑ èÄ![ßoàïí- >'ÿIþ1»óÿ†¬Çôå}̃ÿýWµ–QßcÖȦҗx<´È•‰]ÇEòdìºjÈLØuR$ÓÀ®+Ƭ{c×Y‘ìÞ㥧F^«Ç¬®‘ ]_Ån«*v]‘+‚MGEòœØtÅž(sÇêE2QW/öDbžÅ•õEuîáÀ9$P~1 ¼É@úÅüØCúEÍñ é5ÇÒ/jŽ%¤_Ô^DzQx™<7‡ä8î¼Ø¼Ø›#2íP~±%ä¡übKh…ò‹-Á +”_l éèq¯©‘çîV‚»¤ØŒÊ¾´ØLâ¾v±'ŠþåÆþ߇º®uÕÿ<ÔÕžuê¸Y}e¨?eÿëP? ›@9‡gÊÊÙ‡£éˆ éìUŒÙ 2Écõa\#ë¶NÕj`Ôt:œMGdŒ:œMGd›¹XgÜ»:nÑ#2DŸ¤XfZ£/ʈ4¾]¹Ÿ.Š=¡Ÿ.Š=!ŽOÕ0(>]<9þ™Ú' endstream endobj 4402 0 obj << /Length 1876 /Filter /FlateDecode >> stream xÚ½[ÛŽÛ6}÷Wè­6Zsy'UE“´M`si}Y…jkwØÖF²“¦_ß¡H;’lÉ’iæ%’åÑáÉœáp8ôâè>ÂÑóÑÓ›ÑÕïË(F±¤2º¹‹„D2f‘ŠáªHt3nÇϲU:_LÞß¼4Ö*Ò`-™±æŠ"Í€•†„ŠÉ”*=¾²"‰ykôÛÍè㈀ŽÈ×àU&¢ÙjtûGsøîe„uô¹´\E‚`D™„ûeônôv„mŒbanÍåy™!…y¤¸FRPƒlžSë8"Æ:Žò4ºkE:‰ï˜×ñw,ûŒPÅ’(¦±?Y«!qªp£ ÁB#%й“f2eã1AJ–šà’H~Ù›?ŸÀêÃÿ¹/-xt;åÞbH´¿´ý«ùNlF¢Ø>®±®G‚Ó‹)ð+§WßS/_²]zq°ÕnÒщu½Ö¸Ýõ‡r n\?\,‚X_¹¨DÊNÜ0rÕñ=åò%Û%ÃSjåbN.ÎÉÅu9'ù Á°L÷Œ¤” 'XßS0_²]‚‘a³pÁ¸ŒÒáó‹ Ÿ_t§ñi¹0Gø“«Žï)—/Ù.¹°F»õK8¹>¿”ÀÃçüWz NEZè`‚5ðýó&Û!˜Œ"\ZÁ¤LˆÁÓKti¼nÑ‹õž`RCåÇáôªã{êåK¶K/-ÑÊê¥\HƒgSbbå@½õReL®¼§ZžT»ÄRQª­XzW̓‡†©U.yâŒùÅûÏ/iËØ`‚Õñ=ó%Û%™äˆÊØJ;É$ÒçH†Ï’Lö•LØR6˜du|OÉ|É‘Ìô1˜áÉs°[ú~25ŠM[=_~ý)[n’û´&A«qž¬›¦§Åa¶l &NßS_²]ó‰SÄ„“»ù4%wÔãSüƒUöû!ïöŠÚ‚5˜Pu|O¡|Év Åb1­wž¦~¾PÞí!±…j0¡êøžB#ëœmÌu|Og#k!b[e…rFßÏáÈ:gh[¿sFßÓÁÈîœAPU8‰(án˜~ø-Ww£+Ç*;ÿp‰8uë@ð7“$1Ç,«Ç™¦ÏWöØe:µ×ë7ÏÌsûáÙ›k{³ÊæÛejïï'•Çé:Í3ûd¾¸_l’¥ýðâêµ½Y.Öi±;ªáh e&“Â’|²Ý> stream xÚ½œkÛ¸†¿Ï¯ÐGP3¼S*‹4Ûnv³H‘vhtQxlMÆ_RÙN“ß#‹dhk†ºð¨ŸìñHïûúèñiK¤Ù‡Œf¯o^Ýݼø‘Q¤Ð\gw™ÒD"3<–Ý­²÷³öÛrµ¾ýíîM½µÉrØZ‹zki8É¥±ó†ŒëÛ97ùìEóÀ4«÷ºùËÝÍnlE3öÍv*[noÞÿF³üïMF‰,òì¿ç-·™b”p¡áù&ûõæo7ÔÆþ¦¥ÉÉ <*¯µD %‹‚ä:÷ZÈœP£3# "eÓ€­a[¥¬DsXxtN¸‚ú(A¼ùsaß.v§‡ÅòxªnY>+«vU9ωÒH¸ÄÈ« .o™š}^/˶»(("¹KÊà°_¹ÿu±-Ÿb‰%Çø¶?HpS`Z“<êð×Å7ZõÔ€œm‰º‚\%I8…íÕàc@Ÿ‚P2BsæÁq½ß-6ðÙVtöóîp¬NÛrwî«?ÞΣ³7û]3†y]­Ëêàþúî÷Õ˪Ü}¼…Möd¹'§ßÿ¡ù×Õ^??}»¯ÖͳŸÊÃÁîù°}„?^ž GûSµ,öç¹ã‡’ìÊã÷uÄ:3¤€Å9Ó¯ð®N›éXŽë݇ö°ÂžÏU}Œ O¤i4ƒKsÅr”)·ªynN¹Q"¸QåE†>Snw7°¼pO¹‡û¶?HV¤MrzŠD'9)ŽC’K-Pf9J8c£g9(YÉ éWúi7¤OÖ£^˜§¹áxšb\ê'c²°¶º“ÓãR?±“…µÅ`ŠH5ÝZ/Wú‰ÅH{¬>dÍ“¿»˜]ÛO+*pçbigW¯‡ru± B[*{?×”Îö»~ÛË~ˆéj)‡Ù·%—žÝkU­?Û›÷;î¿öÛ®Yá! Bš.Š}y³˜ÁÄÀ~é? f—ú‰˜%‡‚5Ääv€z×—‰õîXVÕéӱ߿‡ÓýªôË)k‚ÔÿüUôY–â» Ø—Å9\úEüTíï÷›ž$ÞWûeÏZ½H¯ ›MO÷ý¢ºú,tX!ˆÓ­t¥ŸöH;à#ÀêË‘¸½ö½ü²,ûb½]|½/Çu[ûr}Å`߯rN”™n½§+ýÄ8YX[ ÈfÓ­÷t¥ŸXŒÉÂÚbÔ?ÏOwr»”O,ÅTQm%dÓͺ®ôk1YXWŒú& þ]ŒÕ¿ H¬–?»˜¦×ó;,÷§zòâ¸Þ³ç*`œè«5ÀxNgoÈ»[ÆŒ$笠³·åfçëóóï~ÿ´=ÿù²ÚÊùãi³]ìH¹:W£|öSYÕ¯¼ªN_wëÝòã——ÛrùH>ž6åés½‚T¹#‹%¹/íöÿ¸•0 Ù’·ey:ÊÝó›»UÂ{búe³XÈëÅê¼6Õ×]3ÃZªÌ·§V—@R{áî> ‰ÿî˲ endstream endobj 4458 0 obj << /Length 2146 /Filter /FlateDecode >> stream xÚí\]oÛ6}ϯÐÛl`fùMq†¥]Ûµ@·®ÍÀ¬(”Di½&R&Ëm÷ïweQš>l™2É=í¥vêÜÓÃcŠ<¾1Ž>D8z~öøâìÑ3‚e¤‘–TF·‘Hj) ŠD7ÑåâI~ŸÞ¬—ï.^V£UÃhɪÑ\Qs`»„ªåŠªxñ¨~ ’TW=½8ûëŒÀ(‘+À¥LD×÷g—ïpt¿{aÄu}Ù¼Áˆ2 Ïg¿áã´Aš×dÞ–I¹Ý|·\1‚é’ˆÅׇ´Xß§Y™ÜiI‚b¥"Å’Ti±-®5ŠeÜÒòŒAV2RT ¦ÄŒ†±BˆZÒUEƈ P…j„¥™ÌWI¶½M®Ëm±$ñ"-ÆJP#!=Q Œ#Å~ÚMÇçõu:®Î´DOÕ9&à Aõ_’ûtŸ- ü”ºãùs8A¤Dq¼oþ+õ•¶ \ïÁ¨4¤Â £ñ!aˆÑÙ³€÷Ù(„áfÊužÁqE^¼È6e±­Þš› ?z ÒÚ±Ëåõ“+)1™0£‡Ò­»¥³õ{¨üuÂŽs+Ý„G7ÚL»Ñ£qc¥¡~ìˆ9Ò‚œnG\Z?vÉ?Ò ?ú¨Ý²[û¸!g—; °t]í@¦é€a)c¦=mmHY툴:Ù>¨4~ìqyýû1?ú(ÝØ±Wú¨gW¹±BÀÄq}´™t£ FãF¥~ÖGcØÛÓÓíèƒKëÇ.ãÇxÂ>j·†ìÖ>nÈ٥ǎTdÇõÑdÚ‘#%lA±§Uì°@úàÒ:²K¦¾cS>áHµ[GvkwäìÒcGJØ"`×5ÒdÚ‘#C˜K?Ž)æ°FúàÒ:²K¦^#'é£vëÈní㎜]zìHQ'O.9Í ÖÃ*…ªžwÿg Á6:’ #U'?Õë‚HØœðˆ"ë¨H£ÛNŠÕ‡Úÿê¸ÑH)Ò¨I5Ú¿ÐøMgS¡‹· P!Y#ŽQLh81úøŽb#[‹!´B1,I¡Ä້áNvX|ˆê'ošP˜˜tšwBa k1¡ðÓì:¿I‹zI> ]®$Æ‹/yñ©7yaÏ%„Â5¯·w›ôyš¥Åîv0¸|ûø Êâ*/?ÚÑÛ¬³w©ÝØ‡Š–ÝÐ$»ñŽYÉz¨E¥C¹õç¸Ë0îŽaw¡y8w÷ñÝíLv†»…ÆˆÄæÎ[v3ñÕÔ<ÞÞÞ¦Ej9ç×ùý=äÔ7ÐÁ‘·ya7p=lK»¡W¶³Ür`¾-‡Õÿø¸‰•@ºþÈ+Œ‰ûøŽ&FÖˆQíäëÏ&ˆÑÇw#Y#†àNŒ>¾£ÁÈ18œDNŒ>¾£ÁÈ1ƒ´'FßQŒ`dT#BˆËñêÀ£9ÚÆÞ#׎úæþ*PõâpOGª^‡êЫàлk|X­êÇN$?u#Ý » L[E÷T£åˆIó!áù¶ü˜¦“áqR”uÂð2/Ö›úé÷WV?ü˜Ü|^R±Hîê‡ ºJ¨ TˆDÁzN÷ôFl³OY^ÿ’l‹à ŽrN‡m„:¸áT!Îý´Dpg‚F û–/š¼¦ÇÁ¦%ÂKõ&±éUŸn‰˜_w<ûA¹c¤m 2 º`4>$Æû‰´9Ñ€yz¤í…KkÈ.™]¤­0›°£Ú­»µ›µô°#g—; ˆvŒ´-A¦é€Ñ83ĘŸH›c…0==ÒöÂ¥ud—ŒqäD¤í¥vëÈní㎜]zìH€ Ìñ.;ãÈž‹Åvû#m¦ð®7/Ôw€ï¶Ã GÖˆ!`‡‹ÃEÚ|G1‚‘5bð.Òà;ŠáLvFèÇAP«éΞ‘È%Eê9Ûlò¢ˆ3b1Æ"q¸lw€ï8ÍÁÈ1(¬¯4\F8Àw#Y#l¨ —ðÅFÖˆ9b8\F8Àw#ÙF ‚‰ÿÓ$ˆV»pàß&A J‚’ò}B‰À³Ò ó¥Æ‹‹%¡x±:ß]= ‰=Ñг"É>Õ[õWy±®Ÿýœn6½ˆí‰€¾,áŸö³£}%iì¶9uè:Èú“cçˆV{v>7ò 9àt)ØD@^Š7'œnñéh~ÙÑäW\p·ó¶%ÈäyÛ£1a¬Ð±—ó6ýÅÉçm/\;öÈœ/ !° ijÖ£'¾ôÁ¢ñeE³”^O¸svñ±;‚iíèN;iw:`4îTdá~Ü©4LÉéæôA¥5g‡K×›•;ÞNXÓ‡Öš37Μ]{ìL€`ÓGo¼'`Ùâv[ã|§B„sP%Ü¡p€ï¶Û GÖˆÁÂ:Ü¡p€ï(†3ÙAa±¦ûéÅ­]bñw¾µl_J2ˤÌ-ã—kÛ6«íƒmk_ùÑràUž£”æ›Ãˆ›Y£®³o§»Î¶¶ƒçož>{ÿëÅÏOßœš/JaáR„¾ã»'Y#œÁˆ —" ðÅp&;g)!ñæ\ý$Ïn×¶{zx÷>TcGïƒïl]ŠA)®ëi€ï81®d÷LƒTp,«x2$š?¿Äï–;qWÓ«É‹¡ê¯j¿Z67ç…m›ibÝY}sS˜8æ€>ûœQý…«×Ö‡wó…+ÕöÐ6Ò¦=à’XºâÍoóÛïë·±ù†ûûY‘þµ][wQ[w;—ë{ûÎììsZlö­A3íUŒÂ}àÖw3šÍÃ6‹áÜgüÚfÔÎf?½:ÿßf}›™×ö}ï‡éÂü”¯}ú£¸—š endstream endobj 4488 0 obj << /Length 2430 /Filter /FlateDecode >> stream xÚÅœ[ÛÆ†ï÷Wð.Pç<ÃÜmj7uÇH²(l ƒ–¸»¬%R%©lÓ_ßâ!<ˆÔPÃi¯´¦‡ï¼úæá7G {Ïö¾¿ûîáîÍß–ž|I¥÷ðä ‰¤Ï<åç"ÞÃÎ{\ý59„»hýéᇢ´ò4”–¬(ÍEš+;$T¯7TéÕ›òƒHRÜu÷îáî_wJaüYÜÊ„·=Ü=~ÂÞþï#îkïõ\òà ‚eþÞ{¿Üýt‡+Ûù¢ø³øø¾­ÌÂÜS\#)h¡\\§È×¾GŠÒ¾—†ÞÓ¨ÒUýÊyW¿viRC[K"ŸúÍVÁ` LswÁèê[ÙÙ*T"U2ç&]}Ë`83[ƒ¤”tŒ®¾e0œ™­ƒA‘ÒêO³Q«zÌ*ù¬r¬neÍ*@R)ønºLAk—Ù²¾Ó{Ü"‹ÆÑç ÿ$eNÝlÊσÒR7Ya Š0Ü+ A„Ò) ( e…¨$Êv$íÀI¨€v$i\µã‡ >=Ûü”®‰^…é0”jX/c2Žïyx®‰XýmÃaíÌ ¸Píx¦{µÿÂK½>A‚ßRï°ý‹çž²) iCëKí_D_ê†"Ü¿ QÄ ;ŠC b©f7¾Ä!†&XÝ Mz€ç²F\ÄKdÛÌýšÙȧE2¢HFãh.â£A³í#È7Ar©êšÎùUè¾>§+: E&é´Ñ¨éÔ aB¡Søz=};Kx©é옹@gÙQŽà¹„‘ÏŽ‘ÏKu7|ή{ȧø³êoи2þ’C¤ÍøëJÅ'SÎF»=}»Ñ®;³U08$E¥Ý£«o gf«`0€šøî‚ÑÕ· †µÙ³`úì•ü\OPHµ¬Ã[Á*Ö{ªE ø)z>¥çÌÝ™§ %aæ"1LŽEÙ¬7©Y}[^èØëf»ªa(†â®]:ò–ÍbiõBH…xÑmÂÔŒðªƒxÄŸÖçÈnª˜Žþ}?äoF˯>šµå1Is³’_‚,4+ìvi˜uù0ÀC7Љ;.ºú–`Øš ƒ0D@­$ƒ’ñóOý5†âòoXàqDNñ) w}¦àbø$sŠúÜÝŠlO߮ɬÍN4LFh5y¤f-ööÃýÿ£Å` ékwËÆ=}˳5;Þb܇qz½òÈÌš,€™MòlØGžòãÉ0³¦Aüöõ/Ó^²Ð4mÿaVÃ1L3Ãog8Rx ÒÝk†c¤ãé/ù”¤—R£÷åÉ¥Û&îZýÃ0˜Ñ1Ùé°­Ê nú6×\ÁL·暟û‡joî7ÌëÕ_NZÅ€sEëBÓô `J¯ìMôöŸ½éÿ¦Œnc)Ã\µJN¾ÊœÑ¶_¬Pih/˜AÃÜþÜÎÈ<Å—ÑœÓ7@ä°t70ïé[ö ÎÌVÁåÉY0ºú–Ápf¶ /'+΂ÑÕ· †3³U0X9>wŒ®¾e0œ™­ƒîþ§»«År-㤵»JÇwWÑí»«Þܼ+/ga…™ƒ=Öz_5ÝXe#U6àÍ˺vå–+–ë‡ÇznÚXe ¦K”ÌÝX]ÄB½SÐñ`²±ºHíõö@§öéÕùõÛ$“v[W†"“[W65‡c¸^dçŠQŒˆT7ï\-a¥Á±í¥½qUd!"ßmÈ™ øhÀlûhRè8œs«²YôšX²i&2ͦ…FÍ&æˆS± œX#RÏns / m3—è¤t.a¤Á³mÄÏÙuù Jms§™È4ŸŸf¤L‘Eø¤>Ì¿ÄíÉs/5Ÿ3³çľÿ"Nj@;N®:¿î …Q– ÔPdPÐóR‰\PÍÆ·'ÐE¼4€¶Í }{…Ð%¬4„¶­:»î!¡ Q¬ŒÙj&2M¨…FMhA—\(…*‚|n‘B—ðÒÚ6Ó'Tòw6ÁçF>ÛF øœ]÷OÀ’Zòi&2ͧ…Fͧ€Q,^(ƒ iß"ƒ.á¥á³mf˜A}·St + ¡m+„ή{H(H`l›AÍD¦ µÐ¨ -–gÅB”+¤ÙígOñÒÚ6s‘ÐÉ>~ + ¡m+„ή{H(gȶ9ÔLdšP šPŸþB9” ¤ôíg÷ñÒÚ6Ó9ýÞÐ%œ4€¶:»î! ÅK_Y­£ß qeû„b(Ž•»ãѤxYÀáÎ]Oßn³ÊÙ*Ңûž¾e0œ™­‚¡ æ.yËPØZq6šÀ‘’ªë|x1<ñºK£ßÃÔôLTvé ErúøÐ×0ýYQã£YÙìt¾~þ,ˆw3Ï÷)¯Üïíé["gmvsÒ‡ÁBuâ÷5Ú6rpÊ“ )¶Á~oxÈï˜&_ ‘îŸV·1 ³ÞéÕñ“vIžÌÊåý§ù:²BÔ¯e¹A¶«o‰¬µÙ9È ªá›ƒ—Ì_5ˆ ¬îçÜô ]v ·ÑSdJêk”¿˜•ÜžoåóöüÆM?jÈð”ÉîNp÷ô-™´6;‡I˜õ6'ƒþž¼†ý.ùz¯vbÃLš<ÍÍ%ŒÁÆÝo”ôô-ÛÍÚìœvc1]} —âD†r|:|1>ß?Ö>‘Q¾ÆÉk<òÀ_º‹Ðâ•Ãníä”.ß§!Nò¹Ï¥ˆ0w§Œ{ú–ϵÙ9ψׯ¥á6yŽ£ÿ ßö¹’ÂŽûи÷ÌÂxwãØi‰÷^z9´ºúÍøðaä—î˜pÀ€w;c|r!©ÀÕoL»æâ7P”»3ã=}K´mÍN€L8âõ‘ØéÚ y™±r ;æ84¸õÞů:Ù͘7ÍéÀú m&@6íëÀíiëï:â¸\q†xWßq[³ˆc†–%âNó5¾á¿£,-h´oH\ͪu¹Úá ¡®¼AÖVgtÿ>E¢>÷àdÀj¼¢ãdD¹ ßýbþ+KgúÜb½wÆ^k'Î~ž±%nùÛŒv6«ÏáûM …ù-¿û_v G endstream endobj 4399 0 obj << /Type /ObjStm /N 100 /First 968 /Length 1252 /Filter /FlateDecode >> stream xÚ­XËn\7 Ýû+ôÕˆ¤DR€‘EdW H³hd¤ƒ¢@`‰¤ßCº1œz¦ “n®é3G¢øÉ{§lk£MÙÞæÂßµšï6ç F{… MÆa6™Âj²)!X›žo‹×„Ý–B£)‡¨©&ÂÍF"Òl%2›¥.]B;isŸ!XÛœˆ·m;Ón4ðXK hx4¢,Æ©i%ÆvbàñLlBJëx5IL!YbÖd¨`‡¤”-œsaOZ+ 2…S A™ÎÄ LwbPf’V˜ÇRèrn$·Ð кS+¸<ÒTÎ$á9 Y8dRcæÄ’&&…›°ýZÚxfCؘíĬñÊ8á°¼2PÊ”C-"Àªq”eF‰A™­Ä ÌGbPæ31èð=/ÖÂÆ;ã…Ýy§Àd¤Z¬—ÛBØ…gdŒ$$Rn"’L,±È0NlE®…ªMVZ«Ø9œ9#4¢i.Î-:Ã¥ZdXZkPfi­A™sbP晘6#‹C…E>§µqŠ‘Ö2zÌÈ2àc'„RZ£´6vg$$›¡B‰!#D*’<[·þÅ#LÞñpü #×bgK^Øb+R*®šÅõœŸÁ‹\s,[q£¶ðÅååÅái{…@(®ó‹vøù—_ñk¬¤1» ã®>¾{÷úâÉ“ÿ$oéã¿à>»¾ºi——íð ®ÙíÈÖüNÆ•ŸÿÁí…Û>ÿƒk%·©û~ }oÞc“ˆÈí÷Ìwgþw¤]Â"ó>åÎú‚ý³LZªäE‰TãÎÑ7RªF–Ñê]L»\¹yxGöÔȺ­£lÉ®µ°H6´FÖÙY‹1Ñ…t/ºY'w”¢"Y¨Ë.ÆDyôè5òØ=ŠW‰¼¶÷…®Z#+άE2ª`'ã*YëgFYªŸ=½Gû«‘I:Šy$Œ#¯"ƒ R£L†ç´Ô£ã•È´áºYô3\çÅÒœ=†ƒÇö½{Ýí|üê¾'ö°ïa´ùÖ¾'z¿ïQg̯çûžè‰¾`}Œ2•¨FVØ!‹‹dÇ`³¥H6é1”×Èhì1 ÖÈŒ3óª‘Y*“¹/ó"ó…R1(x]èZ´iÈ丢Å2ò(Þ‘JdÚÚ½êfòÕ½j Ùìûd :EF÷,Æ„à:ù÷hV)+÷'è/«Êÿ0N/XVn_¾©¬,{Ì8}Ÿ}74Ín';ÿò +’YúX^$£]=3úÍw¡}‘s‘ŒöÅ,E²:†Þê1–!6E7/Œnrrª?EÆlŠkZ# ®è¨C¢Ôb´ñþ3£ô.^Œ6æ4‘"%vZ1Ú‚BšjdÔØø"U"³ãÈ£¸3a‚ÜÛêäê¾x[IE² åª×„Ð|gõšaÊÓbÊÑÀÛÂ(&óF£žömuþÜ,ùÕuÞOÔy\_´Ôy·ÇŒnølrŠ|î³É)îÙÏ&§Èg?›œ +ì÷/óßÔ#9 endstream endobj 4523 0 obj << /Length 2609 /Filter /FlateDecode >> stream xÚÍ\ÛrÛ8}÷Wðm¥ª€¸³©­8ödÊS•d’x÷%;å¢$ZfE"5¼Øã¿_’º1ÙS–Àƒ£Æén4z+z¿^¼½½xõAæ… d˜y·÷e€…¾ÇCqåÈ»]z_'WÙ&^&Ó?n«[s/­™_·&ƒ€pÖ4D8œÎ0&¯ä1TßuñËíÅŸH´‚úÞƒ¸Õ§Þbsñõè-Åg¿y0ðžš–"°ÏÄëµ÷åâÓT´!iý²¾üÚEö‡Äã$Œâ¹~ƒ0=T·½<öî"ÄWÌûø-KºX „8l˜¯<ùâs;ªHéŽ*E $r¬>–qþ”q3B-šøà'õÆÖû:cNž³ªwÇÁ†‹(ÕkX 8l(ë5LŠh›nË,[z7l£Å·h¥K#Ó4@–Þ'«*ÀöF±ïJ¿>£EÜé·o©_k²&ú%âæ@E%!Ä\o æY”/‡2‡eް¸éß…‘ØÎ“Îi-`¸Œ’n´ÐÇ·Ô‚5Y-ø@Œ¥¸šu ¹ªæÕAÕL>jŠ1ÒV”.5Y~þ¤×ð>ËG6Ð^×:‘A´¿—`‘êÆï¢0õ,DçÌgõñ-=Ëš¬‰g¡Àz~W{–¶Šh£Ùò1ZW±fbŽŒ‡ˆoålXûø–ÃjMÖdXaT³¿m”‹ñ*ã\s’TwÎS— w2›¦ÜKm¥m×ç'ç£DšL¢L}ºF^¬«e¼4”¼\ÐÀ™äøv’·'k yr€“’ו°vċ˅þô ¹c™äñ¢Ìòg½2M%Êú|Ìèü´‚Q‹‡¡;õñ-䌬2oŠdg¶èÁ[šÂ–ª‰/q 0º+BCÅ lº9_sÙ Êçqkö¨*³E$¾X•úÅDa2[.LÓâíƒé c²Nv¦á>¾¥ˆ­Éš¨˜€Y(U¼g8O:âx3®ÔæYV꺶|5¿L©­î§‡xôª:Z¯u—¥'&™fî¾¾¼2-•ëÎ|¥oé+ÖdM|EXÈW‹m‘®"MMg©î,ë¯2uKKÝ“j¢¹’GéÊt¼|¨Š‘}fßGÕº´ô›ÓÞàËÚß™7ôñ-½Áš¬‰7 |ªÜA·¢vžÌ×±iÊ¿2 |ºngttc™géj­9‹ÓEVåÑ*^ž]«`¹ŒáL¡}|K…:#«ŒdëÌ}|KcX“5qW ñÕ"æmö£žDŠì§;K:‡×VI­س ÝhSd²M u"Çi4_Ÿ;´§#dî–œø–NhKöˆËÁ®˜Lé‰Å°Ødº+•q‘‰D˜,ÜäÁmVɼ~B•è>÷2°…Å' ‡'²tv¦ñ>¾¥Æ­Éšhœ aÓ%ñTwÉmÿœÈ$TcY9¹>¾åÈ9#«Œ@‘»­³|Kc8#«ŒeàÌ}|Kc8#+AB9iteŒ¾1Ü‘má;U-ÕfÝU§‹‚Îy¡Ö@4œÊ0JA½i|8§Eõñ¡4¹‹ÊM’!¶”ç‰f3yýÐ<%lóßMZ”yµiª¹æËi( µ©¨×&³÷7gˆ]·‡—ºG 7ÃøL¹¬Ê‡,ÿy:óœ\=äIFáä3×·QµzˆsùÏë¹üïè5ΣE Ùæ_u/5,â lמ¿”QY ¶J¿¥ÙÓÉSº{0Š!pîH’Þ=åwF‘0˜lµ£FÆÀræùa½¹ˆÃ­E[J„Jœ]³`ê ,1ÌÊ ï£´º«ò) &j°gŒE0d#1À>œô)\ÇSD'‰Z¢ëu^·ƒt¤Î DÂõûh7JNÅ!@É9Ýî ~ ÁC \‚`ßà×¶çÂ%4AH¸£þ¶˜Úa´"äB¥Ah< pŸÐ6ìtBˆpçn9,Ç1¸¼È±KærŠ+ÄmÀ:¢Ë1X¼è²ËBÅÚ#Ú4îzW›‚…–ÒÔÂ8®Ìó!Za2ŸŒ#L.ì‹Ï×åT^tÙá²+Ëë#ºƒÅ‹.;,^¦‡uiÜõ®.Û=l”tÏÀ817ó UA`37;ÑuJÝ=2àÛ̈́ݑUÆÀb&ìÎ]tKC8"ªÌ <…wë½|KS8#«Œ! Ü­÷ð-ጬ4ƒ†ôßY*bæ7±ý{­HÕŠËèÏ;¡Q©øûÕû«›KùúzJê3hâϧ«(ŸŠêq9{Á»¾ù(_déº.žM+Êwy¼T…džeßTqù:-¢b+þÓ¾h ÉŸä§õYauS–Ê«úžË$ÃD5z–×ë(Mb5oøO“¹ãE"ªÍ櫨(Û_/ëoÐ|ú¦Þââtéú4²ü[q°pÅ0XÊïìj‡!§f(äâ`”ÂC8"¦•ë(Ú)YƒNé:JïíT¬×ûñÚÕ¼ßñG¡˜ýcËAäh…`ƒÑê0 äþ(% Dèeg—£PiõØåò?ë$ã'¥“O3@eð<,Ò1(µ"íRêd‚ÃJ5î|W©‚sbíÎÀ8‘¢£â‹!w¢bø» ÑßnB䎬2!B"îž· ð-aMÖàI)"øD=)ÕÞ3%üv±ç÷D^ÉáãÛmý[&>£q϶IºÒݰü£7Õ|¿LHNoåMÊà È÷ Ý=Éà[º™-Ù#Nå3àjYL-ÔžÚø÷npTðÖE–ç±(vÒåÈ»ãÊÍ?Žì ÔÜÇS•Ûª4Õ8Æ@Œ¯;÷ñ-5nMÖ$•` V%i½?Æpëæ<)÷jôŸZþ³ïÖàÿ]ÞIº#ÀÃûÔF3¨î.%„@ÜÝ^”¾¥Ô‘UÆå5Fîö¢ ð-aMÖÄï¡(TEÝuóË9ÚÇaÛS@»'hÖÏg%N©ñ?~óžØß8”Œ3tâLÔ®ãªê­íƧŽT홇tÇ Øá# >¼þ¬©È/Ä€ud&ÞTã–;Q÷`Ë˳ç§¹>‹·çæ1I\é5û`Pâ\ÛÖg:tó€»MÒ]pË´£©®»›$çü|÷ÿ(yi# endstream endobj 4565 0 obj << /Length 2635 /Filter /FlateDecode >> stream xÚÅ\]“¹}Ÿ_ÑO S²¤þv¥’uÆñ.›õÆ^OåÅÙr L¯¡›í™š5LwC7W¨•}14G‡«s¯î½`gí`çû›Üß¼~OpàÄ(hàܯ?@Aì:a,CâÜ//“»lË—Éí¯÷?Ö£C'£·í…E^(Àö‰‹o§4Œ&¯å HýW7ÿ¼¿ùý†ˆQØ!/3ˆ?u}g±½ùò+v–⽌¼8ržö#·ŽO0¢n žoœÏ7Ÿn°¢Qì×Oë‡ï›È. ±ç„^„ŸÖÈõëÅQìztìäÜYõ"]ÄWÌÛø–šXŠi<Ù=`¾vä“_«JÔ:yÍUõ Š=¹V³_>íצÇù2 0ž$l+Šdò%lô¼*aÓ 8°*:s‹‰ä -õŨ$ã†Â@ž=É´ñ %c¬2 P(=ÓŽ1Úø†Æ°FVƒø( {ÆhãÃYe ì¡HkÆhãÃÙƒ1ŠhôB6@”xj`è>ÿ¨¶å¨±Ñ*õg bÁ}$¤ïwBÞ”Ôoš|]²ß¿.“Œzr+žNåãϬL²”mäÿfiQæÕ–§e!_øx÷ánöV>wëáÉÛúŸOÓ;–ßRÜÓÑŸ÷tù†¸ÜÓ‚ ötL0: )rC2JOÇ E ôë{:£p9 ²IFF41PäÓÙœ~‚{f?êR{öS] 2 Ð% dX—]b< ÆÑeà!ŒéõºƒËQ—M2 ]¾ (s Ge6 ¼(“%ÚÔžÿT›‚ Ÿƒ´ Ö¦ÆA›žÐU0RÌÜ_­0ˆ™cp9j³IFjóÕ€*ǘú¨ÊæÔB•ÓÝâÕ€ µ§>¤€À5$ dXAî+#KWd®±A°ƒËQM2ïf—vð1æ>*²9÷±Žê—¤öܧ’›7_q¡¼u‰+ì`ïÌÅÅË%Öz |³^‚=²Ò4a0´w±ƒof s²ÍcZ‡KÕS¸çE ½0ø””°‘ÂÁ»mãiÿ!†ŠÍÁupê?öØ¿=yŸå×­ôÌ6Kè)ÉOZŸðã]wð«¿ô:­;—l³6ôwÐ Ÿ9K×¼Ð<¬¡A˜Ø;ðíàú›1Y‹<äbu“›A™H²5pÁøŠç<]ðêÉPÕ¿UÛÏ‹q-% ÜÐæY})KÓüáØÞù|ßÐLÉ^n¤Nãëcžþ˜Tp>öÊeOi'kóüy€ vËÒŠmº¸õQôå8qíÝèàÊÃYe 7D$´wèÝÁ74†1YíÂÃÈ;\WÿÏS¾ÑH­7ü‘s™ÙgàݗݦZkPè¦tª Þ™*ªÝ.Ë9ûjôjh”"*hÝ ±w ¢ƒoèÆdu¼ƒÆÈǪZßoÒ4¥)®üzßåÕ"û‚µÅjÁ®•)U¥"ò÷gtÜ9çÀdŽ-—à¬39œ¹Az¹ܲ$…^]Vüúhõ($Óv,kk¾ÒÆ7tc²:Þ‚CäGêËC3 H:uÏp¢ \Õo)´œ„{ ?ÞØ¹Ü—ºtZmçÝúðå:no—t¶úÃJå,Õ½ðMbÙ9°å-|3o1'«á-¤¾'§*Ìl–kÁ5ªÿ¢'¼_^¶HÖ¿Ö–­o¸lÆdu–-ò_~Äc·á º «ÚeÐ_{÷’áEŽ{(Ë݉ºÞ¼èÝ º¡®¾P«~øY¾îé$_V{HGí5~;ø†j7&«£öÐCááîhÌÓ€[ÿ‚³ä5/GÞÍS¾àEÁògèA›¨Å·ûë@_ϳíu›´Æ×qH »,ÖTÛÆ7T­5²Êž,ª­£oh c²:.ìÓ—ïHߟÿNâK_§·sÅóz©×Ó€çžg4úcË&™ç»d‹bä¶Ü"Ës¾(“t­›3»²ë`MËm|C-“ÕѲGö¿o¦ÎÝáÇé§W%†š³ªß­ÈV«‚—Ðô‚žœ®Y’j—†÷Ð P~ÕØ´æe-âbü®u¡]MRÙa°æm|CÏ0&«ã.FQ¨šÊ"úÁãËš)Ê |F »àŒí4ör$Êù®›ªAÜ,ƒ^lì;riacÙ¦Ò¾ôEȾ-aÍÃZð†fJUÇ¿HŒb¢Nàé=x]ÏÑ|Ù{,˜èü3Ù¨} xcä´[o\[Îáöñä§5ûŸu}Ë•5'nãz±1Y7Æâ%?RÛä¾Å$ ÍC°ªàcGõ=“¯‡ªžÄ­s¶½¶ËÖŽ-‘´áÍ4bª´D$|{{^ÞÌÆT5œ% öŽ?W-/Ij”ÔÙ®[œë7L‡ |­çü!Ç›Ö ç~'Û†ÃÞ5?“ý?Ï%?p endstream endobj 4520 0 obj << /Type /ObjStm /N 100 /First 968 /Length 1225 /Filter /FlateDecode >> stream xÚ¥WËn\7 ÝÏW誒(ÀÈ¢ ¼+¤Y´5²0ÒA ° Û’¿Ï!í6roC¤›Þ3gHŠ‘WuiiEuõ¢Ý¿GYñ< IVÈY…ÙY­žÍ*Bp‘¾\¢MÔÿá~‡‰>¨t `”nêÂ,ƒ±2f «Lr„Z™Ã¢b-.Ö]1I1øAËRv¡—eŒBM‚ómáWIšóX isFÚG«z]çÈݪ·rެ³ª$ìÔ*[R3#rsqžÜ²>3ÂLYŸiQ¥™, Œ®Ê”, BR¸'Kƒ<)I*R"šl@Ä¡Š%£LÜ«f ”H«ŽdJ0I«Ïêyqõ)óŒ{~}uWÎÎÊñœ æá?çÞÓö(c¬¶oiý·ß>y11Y}¶~¯ÆŽ¯n®ßýqº+åøêåy9¾9}¾+~¼ùòï ?\¾?Ž¿Á§ÓÕÝ­ñÿޝO·×ŸnÞnïÇN`¿ŸþùpùëõçráÞõÕ+c ˜Rµõö.o Ä—‹ð÷ip|·x Î/„Lúy§Õ&eõŒýÊ9V²äNui’« ;%ÉÒp±s’L »$ÉÍp±'}kâbI² \ì3IžH*[’<´òHædtÁHr•1²d!LdN°Èa $s2Úª:“9é˪ïÜ9²Íê›`Ž'³-<ªY2)xC¨‹“ÙfÜ·s&5ûÌ_}äÉ› Â&y{Aؤî-›ä½a“¼· l’÷„MòÞ‚°EþÉáù°³.üô €“~· ùß+ÀЧ+áýÿcxÊþá °EÞ[¶¸»+ÀywØ"ï®d¼‹ÖEI2ÞìÑÌ3On3¹Žþ$NFÕ[i$£ÑѡܲD‡²&3ØÑ¡›ïk›dt(nÙY¶§™$ ᢟ=O¦Íëx‹Ü:Jf½-“.³)–ñd¶óT4™mF»Š%³ÍhWåd¶ýº}o‘yíÜÇ[d²ï/ä]rÃgÉœÐÂ÷“`|ÑšáW endstream endobj 4605 0 obj << /Length 2414 /Filter /FlateDecode >> stream xÚí\Ûr¹}×WÌSBU"÷l¥Rqäµã­õf½«7Åå‘9e’CÏEŠóõÁ ÌÞ‘­$~) <8Ó8 t âdšàäÍÅ_o.^¼&X& )IersŸ‰¤bIªÌkJ’›Ir;º.zR\~¸ù¡k&™i-Yך§e<5`놄‘Ë+šf£ö…HÒ}êâû›‹ÏÄ´Â ùÚƒù(Éxqqû'󿌸ʒÇuËE"F”Ió~žüzñþ;Ú)ѽí^Þl#3”bž¤™Tº®û{æéKÎ ƒ¥fy,‘rÕå2ŸUõÇã}Uús[TzÃ}YÁ6ÅŠ …ÔÿltepþH¡*¦S ~´q¹|ÐUmlXMh o'W€î©D©jã辨ûP²GtÏ0”:ÝS˜î_½{ «Y¾\êùùœÄg„‰@i*ãp?p„£‘uÆÀefü££hŒ`²;’ÚãOÌ3D0ßDuËûbÚVy§>ସVj½Oâ'¼èçë·À Ì«ÉÎd÷ÐÌC¢Ldц~€6ôÁdÏtR¥ˆpéûݵõo2yÉÌdJÅ´>~à …’=2h™D$Ký²z^6¿Í¨¥ëì"Ú õàÇ,Ug iÃéh¦èãÚ"˜¬Çzc~CT*«è›0¹û1¿êò°ŒVãaã?÷˜Y^Ãxt9ȧ/ðào^ÔÀD×å7 ½l|sX)l Ml}ü@±“õ›±sIíãLCšzl¢öb9…µ^´ó¦X͵WF°Í Ã%Ô|îÝsz?®¯â˜BX²xŠëã*.˜¬â8EL8ÉÕÆ§õr¬¡B‚Îu“C÷Ïr`»Y1ihÿûÓÚS;8 Ø'zlgB`óòÜ”¾B§6;Š&ô>~ ÐƒÉúÄ”Û89²ÏOÍlà ë³¼ÊÚõx'=ÒtùÜi7\ßóâð‰æq*è^ésÖbóØh.ÙÇtÉ`²>.I1âŒY—lWÀòª\D*þ¥«Ò7ƹvs Þ¯Mkp ò9ðËeH8vZèØæþÑ„ÞÇz0Y¡c…xêö,ó z@8¯Kà䨧ÞçSùr–Wùkú¥lŸ×~ -¢‘uÆ 1¹µw%%Üõ\˜ö¿ºB©l«ôic Ê‘À.H¢4fF¤+…ZM¾×¶6êêʾþ”»­øõoo—uSµvcpý‡ó»«Ÿ¯íûnOÿwöí¸\¬Ìï.I·‚Õ›}ûa5N® ?&…å÷²mfeõÝå3{]åËOMàÑ»²*컿uU5ëwº_ÌÌ/ik³4 ºl«±î*-H6šj´ÔÍŸ»»LØ«6‘è¯MÞ´µëá±cWVŸêÝ"0IP–¦ —†«UÄvÛ*ãJ¡LfOE`gÆ §2á¢+¶Ia˜Ö¦­Â,ÛÆ–¢‚>&YΜ=ÞåËö>7íÚpºÚµ„Y4qóP Œ£”8¼Ò—DŒ ôzgfÙÂâL½sLÌì0èý§|¡÷$øsúÝÑU  fʲ}ãßY?5îájFgC*Â06:äf áÔ{ð>r3Rµ…§YÆøöö,sXçàò$Èm2¯.9½¼bôþ:¯&ë„ðˆ4ÏÁãIšÛ<&ùçñáþŸ$êÝÿ®D ç,lšóÇ8±\r³4˜µ)d¹<ÑaˆÈxü?,8‰GÖSDq¼~€hŒhd­1˜2î¯ ±fŠ`ª{L™`’e›órŸòiyÞ½ƒ×•žTÅ'ày}±œ>€7ÒÀÕº‹v<>•öØïݬLÜ«´‰’¡û(…ïö6ËŒ2U¼ìm€èÁd}ó5.«JwמӎÍMªHâ• ðµLÖGË ¹RƒÜd¬åºø®ÚÆãöZÙ6Ã9M¼¯5ô¨`Lóbé]® XUåJCOæuÓ‰øÜîÑÌôðBßiÏ`qïÄ€èÁd}<ƒ©õVŠ-ÂÉçðù |jZ7%øjtÚ×ÝìÎýæ9دõjXõq³Z§”OÎ^Ô -¬­I»Zí[B̨@\Å«5àºX0Yëvƒ3Wk/–í-†/#k§]@WSh•b& ­cÕÝÁísfĶ†Î§w_|ݘØÍ¢hnÜÇtã`²>nLR”Qwæ9^y…É|˜)‚©zø U)œùZ0øÒ.ÍìöE´aéãŽK0YÈÀ¸¡4ãHq· ºÜ)A=mÙÔ&ÓÑ,ÛÇ´l4²ÎÂæOÑŒÑÇ4F0Yÿ— aF<¯i>Wü¿û&å6Iˆ¦£>~ Ž‚ÉúèHtU,ôÛÌs_ƒ¡Ì´Ñ$×Ç”\0YÉq‚aß®`þo\Á¤T¢LÆÛýà =˜¬ÐFDðð+˜ß.^õGlîMq}ü@Å“õQQˆ(ñíâÕÿÝÅ+ŠmÚÍ'úø>¬5Q Eürª>|˜)¢Qu–ÈlšÍ}ü@[D#댑Ú\'š1úøÆˆFÖC*„3ö½xEGYº}ñ*;tñjQ”¾×®Ü󣻢pIMÔkÿñ½}ùZ,µÿÊVÙž+W¶dÊÝ™’Rž¼3µy˜}_ Íyí€ø~ö¿ÊGÌ endstream endobj 4651 0 obj << /Length 2920 /Filter /FlateDecode >> stream xÚ½[oÛ8Çßó)ô˜c–7Qä,ö!“dg3@§6XèÅVa|ÉÈr³ ì‡_ʺT²l†Ô!ç¥J\éŽ<")GOŽ~>ûéîìÝ?‘BJPÝ=F±@B±(Qú˜èn}=¿Ú¬²E~ñûÝ/ÕÙI$õÙ‚Ugó„"É-¶?‘0z1£‰<Wˆ ÕUg7wgž}ŽÈw úRGóÕÙ×ßq´Ðÿ÷K„W2zÝŸ¹Šb‚eBÿ¼Œ>Ÿýv†·¿k ‚d’D‰>&˜j±žW I!;-ÏáDD WˆseÒÐgës㸑¨[€ô[@HDcŸ˜!¢¿ü>°ïÓõî1—»â‚Èó¬G•R‰báÉÊ8Jø×ىϿåóll©X+z²Î1ÑÍ~`ý×t•c‰ ˜O±;n-Ac“Iy¬ù«à'"¶ÔÐ~Ž%ªÒ$ÑBÈ}~ìÜø„œ ,IÛe¾Y§KÝ·c|~»Þ–Ån•­Ë­F¾t4ö¹¾àøüò"ŽÏ»J‹ÅìòvFÄ—›YŒ tú𦣳ïÍ:¿_å›ûùÖ€¨³ñ1¢Z‚((£v"fH-¥4FŒû”*„©˜©W:Fû¾eôfÆ „zp¥´ïŠ  ®¶Ç|j O;3Ÿ–O•ž²(H%€,ê׎о3‡„ ,èOŽt|ö±áÓÙøP-¥j'b Ñº£>1GЍW:<û¾Œñ¤Ü„§?::û~ØÐéj{ §VÀ š=íDÌp48…Tˆ$~²§¨&Š‚N¦Ó‹/-žgÆx2aÀÓ‹#-ŸG,øt7>TH=ñOh–=A#=ÒÔÿêПûëÙa5_UŸˆ÷S¿êóXßU(áEJª¨È¢Ç^á`(uüÓ±8F|-Kªs¡êud Þ0`g÷‚ÅSTÿð©-’¦È{…C¡§†4©ÓÒç¬.ٜ։¾ê¤‰ÏËgË×›2ÛÚš¯}ÛÎïÓR§ÙÁÙú[¢æƒñeç;åE‘kjzcÝA‹ S{Ã"ÕcÉzè†Å¡>Å`Î6Á¨na‚‡ ÆPŒ`Î6ÁÐc…jô,C}`0‚9[#Vž Æ>,áœm‚!Db 486CVÙ[$jSD•ªo 1(Q)oFªE#g_æùB'ÚýÒlV{#ý[ä¿ÿàãÕíìúö£ÿüüÃà%z¿‹˜±Á¯˜µËZýA6Žf”#¦çS{g/wåó¦øñbƈNÖûûOu IÒ#ñúVW¦ånÛœòz¡ÿÙŽ7Ã`®=H@Ci˜F=Oã2Öó8æeÁŠïgÊuÁÊ‹ íôlàƒÍ‚•ëíœl`ݼ`ånwÜþZ‚*«XŠë–Ä!Τ—zOtn£|r½À‹/}gšŒ4«’”Iö;$ûö¿gÖÓ\:s©%(S@.íDÌ\4Z.õwbÒO•• ݾBMçÒ‡/—}g>~©ïŒ&}Øî˜ìÛ¶aÒÙø˜I}$š+íDÌL4Z&¹BŒzÊ•z<ˆ Wúð¥c²ïL›+•0PéÃzGeߺ •ÎÆÇTj B¡™ÒNÄL%@£¥r_÷ñ”)¹žlL_ŽòâJeÏ—ïLþd€Ò‡õÊžu&m™Ô8fJ;3“–Iª¥ˆòäþj ÇÓ¡ôáKeß™úî¥I¶;$û¶m˜t6>fRK`Í“v"f&-“„!"ül|â¤ZúšŽ¤W:${¾ôK+'ˆôaº#²gÚHgÛc õ+܈g)b Ñ¹¯»zJ’XàDúð¥#²ïL‹¤éÆíÃxÇd߸ ”ÎÆÇPb=Vn±Ó0#9]¢!’I¥¿§ŸÉÕ0LÒ‹+-}_Z¿œæÑ‹í–Ǿm ÝmpdRê¬ Ì‘–"F !-‘‰@JùÉ‘Lb$äôÙ_:$ûÎ4IÃmÛ‹íɾm&™ÔH¤„™ÇÉ -¢ÚÜâ)?ê£`Ó·&{ñ¥£±ïL»\g Ñ‡íŽÆ¾miÕ׆fH;3‘–ɘ"é)AÆÅ Azp¥#²ïKC¤áñ ¦; û¦m€tµ=æQ+Z“v—xc£cXG…ÛÝɈB‚„Û0t ÛÎÙ&X'Áz¨&C}`0ÀÎ:lkd„ètßlö¸³Ý2x}ûápW_» qòšôå%K ËMŽ©åy›ÝáþÂýçR§³;ÛÝÃ"«öPlí÷=ÎÕWNÞý9òíÍ-T%º•Âíí:Їq wÖ…Ûj6.›‰ß‘}¦>vÚ>n,5Y™æËíÔ®T ”0®•‡úÀVælŒ$FI}`0ÀÎ: O…°ۖóæÉ›´XXfèé|³¶üV]ö>ìs?˜³þk^>ËÉŒš¯›?§ëuèâz&𱊡J} ï`g]€Dx³E,ßKEøï§)ºÄã|·¿ˆ˜."'.¢¦‹è‰‹BõÒpõO'ý†«®N]E¹áªk¬£¸Œ+7ëôñv7á6ð®0Ôv°³.Ý„ Dš^²Ý½¼lŠÒ2‹oóÕËÒ¶yó§¼L—¡“½þàoæÑÅÚòy:·Ûçô|ýä÷Þ×Ä8[Lß°ºŒ å¡>å`Î6Á õÜ4X0†úÀ`€ué×”#š´oxiGçj³-mÇd¯ÝãIþ¦÷ÖOÒ~¼e‰™áÆudföö æaWN½!Ÿ(ÎWÙÂVòÅÖÏÕf‘MN;TLÃÕuô=-˜³u0ˆªë¡‚q  ÜY—´ƒ)b1w¬œ8÷æÑÙ†ªÂù¸ãÇ\éÖ ÃÛò przòŠì?eV¬m‡Xe‘?=|_À©«>ge9½™9ˆ¬+Á:ËPØYÀÎ:t¢Èþ}Žõà{ž®ï²§|}Ÿ–ƒÎrstZknEÛ{ñÕ§û›ëŸoœ€².>z,³ta=TÏOÙ_C~R— ‚‘?Ô’vÖ…|‰oßËë|Ä·¿þëæÓm îX‡ú7ޱ¡–r¤Ÿ4þÏLÕqç´¤6HÌ—þEýímÄž|Œð<p¨«.| …xҼè,Ò|é#;½Ýq¬®| l`Î6Áàõ 8X0†úÀ`€u¡“'(îV7m+W.%Úùf·´œ¿>ØpÓmn;ÍÖÝü1·AÛÞKšÒÝÉ—w3š÷.+ÇézᚤCŒ„+è{ØY—žÀô7[v]›¬Û†åž§i=KÖ C}`ƒs¶ !í[íÃc¨ ØY: GB2Å”nÏñÉ«ŠìÏ]^d~Ëy±zM KÇw/ËMj»'æ±´½½l^Ç•CÏÞ½ø½mTurÇÊó„q8®'TÁ:ÑP؉Àκt"¬#Ô¾¾È ÈEZ¦ïɧ«õÕãóê‰ßk'Uç±_®´ÆŒvq†|Õ_xº¯+—ŽôÊz¶ Þ¡<Œ]°«èV\¶/´m0k¸uC•i¾¶_f UBH$ŠI¸òðPÖø`W_$q3IkúÖZ÷­"ËîݲX™éÒra ý–æKûU‡Çb³²ÜPQ–/‡wÁßb^__^“<ïþ¾œí{•G•ÆúxìïÌí÷ãð)fîÿ,‚Zp endstream endobj 4687 0 obj << /Length 2904 /Filter /FlateDecode >> stream xÚµKsÇ…÷ü³$«Ìv¿ÙÅŽìÈUr”X W)®$A1K"˜€dlýûÜát·n©ugî冃sz>žyhÈéß“œ¾?ûæÅÙ×ß)é§$’×~zñvr^ød¦`ÔôâÍôòüÛ›ëý›«‹_^ü0¯¦k{3¯mƒÑ{XQsq©C<ÿzY(¯æg=yqöß3kÉI}t€§7½¾>{ù‹œÞÀc?LRاßÖ¼žœ’B·ßO?ýýLæØR$7ߜ߷ÊFi§`£ðNÏÊóýZ¤˜&5¯¦ã~zûY¥/êçä§ú%%Æ¡Õò"éôˆaó`˜¡íã Æ©>q0-l íEX˜{œÁ8Õ'Æ£…̓¡œÁ?Þ`œêãÑ–ÁÐ"Äð1¬ZÙìƒ3øÌ2wllZ3^[\ªÓ /¢|hËòÌé奚[ôpõ¯ÿ¼¾º¾ºYJõòrYþ¸»»º9ìÞ/¿==ÜÞï¯÷‡»ÛåŽçß>½|öôo—O–_o÷Ç«}~hwx³ÜxÖ?öOéäî}}u³;^hyþæîVeÐî.ät©­0Þ-¯âÏ÷w¿ÞÿtqiÔü¬¯@ÆÉón~=,·þ ÒûC¾û»ãîðn¹ùìæx•רߖ§ýãæýÛüðýžw¼°òü«²ÚñÕþx·üò|Ü_ﷃߖÛßï?®¯ßýž|qäùþxüß»Wæ—6¿[Ęåµüt·»»¿Í¯å· øqs|wÛïϼ1„Ék#ÌBh»?3Íþ̦$¢uƬ¡…„çz¥„Òz¤kúÎe‰…PÕnV…v@¨²e&ôÙîpÿv÷úîþx¡" a?ZG°<´±"Ø?døËþB¹óÿ]½Þ÷î&9Pdr·RA[ýÁýÇÝõþSÇ3J8»Å·ßþs£i3’PPˆ1~jûÏ£à)bÓ'4æ1ÔŽ¦‘9tªôaõfŸâPB;;S¶Bí=øn{ï³@²d©@¶aJË*ÿó“K'?O%K„Jeáãîá³h®7ïÐt)>ô M¤ÈMŠFA3!•fAÓ% ;ó¸MŽ,Í“0'hªš š'0h®6ïÑŒÀ"¶&RdŒ&A£ ,Vò´¦ pjiív49²T4Û0Ï~z饑OPr˜W([s ”«Í{(A"8j_âDÆP4 ”°L’©/ÁËÁ9Õf(9²T(Û0ûêr&G€ fæjóL’Ú–8‘1˜¦“"ÚȦ³ÂB[rd©`¶aZ0íLŽÌ6ÌÕæ=˜ á-µ1q"c0 Lq’áÓja¡19²T0Û03˜^ª“Þ•ÉÖÃäjóžIpËi“8‘1“ÂäÃõd¦²4RXM(KŽ,•É6̤Zr˜W([s ”«Í{(A™D„'2†’ Q TVøÈT”* ã EÉ‘¥BÙ†YÎwÆPr˜W([s ”«Í{(AÂFjSâDÆP4 ”R ¯™šRza”Û%G– efiÊñI8‡y…²5Ç@¹Ú¼‡$¬¦6%Nd %A#Ci“.ð4¥MVÌwld’%Ja²Í’‘T$Y¼ ’­7‚ÈõÞ‘³„ ÄšDŠ ‰¤h"à ‘Q -·×$K–Šd&3©GLr˜W&[s ”«Í{(AÂ(bM"EÆP4 ”óãÞò@¤ ìºY¢T&›,I3B’û"Ùxcˆ\íÝ Ú;"‘8‘1‘B¤ƒRÉT“. ™Hrd©H¶a&Ãp×Ía^™lÍ1P®6ï¡ ­ˆL¢4ÆHn—(DZ-ŒcêHë…Ü~!ˆ%J²É²ð¨‡Éá]yl¼18®öîq 娉IÐ(D)tbêHcDŠ„³Ž,É6LfÒŽ˜ä0¯L¶æ(W›÷P‚µ"1c 7+ dŽZ‰dÔv9²TÛ0G7Â‘Ã¼âØšcp\mÞãÒR;'2F’ Q ”^pmËÃC¨H†(É6Ër¡|Œ$ƒw%²õƹֻR:‘¨gÚ(1ŽÛ%2&Y¡ OEšDÔÛ+’%Káñ$L>Óí±YÌ 'æ ×›wDš ÆÓDŠ ™¤h(#,yþoc¢ƒW¶½"9¢T$Û,ÉQErxW"[o ‘k½{ #,#ñ )2’ Q€ RÀÈ`DP„–äÈR‘lÃ,HºÑ%róÊdkŽarµy¥‡#MmIœÈJ‚FÒ‘xÞbn`x¼ Û™dˆR‘l³< ©FŸzà°®@¶Ö ×z÷<‚BԒĉŒy$h-Œ*ϤMN ¶É‘¥Ù†ÉDÞYÎâ]‘l½1H®6 ¨‰3IÐ(L#¢W> stream xÚÍXMo]E Ý¿_1€yc{lÏHQPe‡T•.€ª‹ª> stream xÚÕ[Û6ÇßçSøqlXÞ)=¦—-¦@š¶ ºE ±5¡¶5+ËIçÛ/e]"YcΡ‰Ý}ràÐÿs†úCò´éêaEW?^}{{õÍ?Õ«”¤šëÕíýJi¢S±2©}5lu»Yýqý]¹Ë7Å«?ojZ›Ub[kÑ´–†“D+vjÈ„|õš›äú›ö…iÖ|êê‡Û«_1ÛŠ®ØW ö£B­Ö»«?þ¤«ý¿ŸV”È4Y}9µÜ­£„ mÿ½]½¿úõŠvnÕÒŒ$ƬŒ}5Tžk‰‘–LS’èdÐ ¬Á 5zedJ¤L]¶µm«T'Ñ>6~:!\ÙþQ‚0ûÇŸ:öm¶?ÞgëúX½bÉu^Í{•ó„(È.$1ò̇ïóWL].ÖùܺH•U d]Rfû™õŸ³]þKŒ(¹Äîüù[ ®\ Lk’$Ï=þ¦óV@ ëç\¢éA®P=„ÂcÌ÷Ðç ”ŒH“ö .Ê}¶µ±­èõÍþPWÇ]¾¯Cø2Ð8væ—ßo^kžP‹!l,Žmï‹ëbW” ½Ï´*•H"a"n$=“\#’0Lrë6D3—ɱ3¿|wb’9˜ a{`rl¤·ñ9“VB‰É$LÄÍ$B£g’ ¢“@y’"Ìr$C¸2 9ò¥Ë’."C˜ˆ™†ém{¤• 6IÂDÜ@"4z m/jž†’*""I†ðe rìL—$¥É¶$Ƕ!LzŸ3i%$Ç&I˜ˆ›I„FǤNR¢Œ ¤]õ®#Ä•ɱ/]’tÄtOäØ4HÛ3  ak ˆHŒF¤±“Q&IêÄ>ºgÒJŽD¤á&r¹D¤VDê@R§1hqeàqäK—!]8†0=à82 ¡ÑÛöœF+Á56CÂDÜ<"4z •‰Ò@RBSĘ—ȱ3§ i˜ceÄö€äØ6„Ioãs&­gH$An"—Kô@JF„ ”!¥}¸’-2„/cgN9Ò dÛcÛ ½Ï´La“$LÄ$B£g’Û™h"'i‚H‘xOÇ®t R8xÄ[h[†Ðèiz΢ÀæFˆ„›ÃÅ =…Ì.U9%©@dƾ $Žé2£‹Ä¶Ƕ!,zŸÓh%¨•Âñq‰Ðè™¤Š„Z_ÓÄv"5pe rìˉHjØ$؈ۆék{$•$M± &â¡Ñ©Òæ@˜$©RûGóåI2ˆ/=’gNÃ55Ôdã=“ã&ýÏ T©$d–Š8¡ÄhôP&ŒÐ0ûÙ*±8è囇!\ûÒeI'’lDŽmCˆôµ=2¡–6d–ЏDhô@ê”P(KN ãˉ áË€äØ™IÅ]H†0>096aÒÛøJûŽÍ’07”J¥IjX(5%Z!Òd_(ÇδC·Ð.(C ‡@ém|¥•0›)a"n(=”ÒNI™¥Lˆ¦ˆL—ʱ3mùG8Ê‘AlLŽmC˜ô6>gÒJfLÂDÜL"4z&'‰”(…¶]ŒH”!|˜;Ó1é(±=09¶ aÒÛøœI+¡5r[(âf¡Ñ3Éí¤”Ê“\Z[ˆ<—ɱ3mqÒÉdÛ“cÛ&½Ï™´v‡d&âf¡Ñ3I­;*Pž´í¤H–3—ɱ3§<ɤ‹É¶&Ƕ!LzŸ3i%”ÂæI˜ˆ›I„FǤl®Ê¥ò$µLÄb&ƒø209væ”'L±=09¶ `ÒßøŒÉFB¦u‰p%©jî56/ã«Jœ®#J#I{g£y[1M8“«f·5]Uùê~t-rªôü»s}-ˆlÏw4ï·Â¬iÕo¯yžé÷W:!ÆZvËÓˆÎv¡l&lgMq:cªì ´³'ÁêaÕþã·þ>0ënøÊÑ}`©”Íùm8Þ~Êí]ÌËJ«?^kJ¯ïʬÚ`m³ (šmw塆µ-66ak›DAÍëØîÐ×7·“v¶÷^woÌ?pýöæLõX³C^ùáÜ\tàô¡üïuþXC»!;k9mš©»“6aS/ĦúÈC;ëbM!ívä,`O°gp„Æ"˜Y;ýF÷Ú…»äÙÖ¸¼‡µ»yÿæ íÓÛÿ¢Š^±â<Èå¶ù¬í ¡3vë »lá5ãöSïóÐp_Ö9ðÉÜ—•o jg\*^Oõ‘ŒvÖ'€… ‰àCVñ1«û¹- Là µ©ŠÏyµƒ‹ƒïfStË`è[éÝi%4pWÁÃf"òµ_fž¥D%:óS}$óÑœí:Ã.™57ñ:cªì ´³> €1’ÚÕÙ)¼9Ö¥ww•ü0mŽeUçÐ!h~—íŸÂÒà4¸É›o–ñ¬Åþa¡'/F½H Ñ:‰ú™>t¼³> ÓæÃÝÆõéÛ¡>ö¬çþ“2èØÓY:”÷õsøñmç±^{~}ÕÌù^ ¶.¶Eý´t4‰¶¯i<.§úH.ÑÎzp)’”¤i·ã÷ÖãI¾Ÿ?É 5 pª–ÙùTùQ=B'HÙ~Þ¾žð›jM•oŸ|Sµ9•§¢EÄDXW}âÁ¤„ö;;ð4éõËy1ι 9}ì:Ò?«Ž uYUùº>ø¤ÛêK4„¦úH†ÐÎú@¤Bû¯>Ïç"e4ð8^ÞßòÚs:ùAƒd–Y_LµÕh€Mõ‘€¡õL2œ±-÷ÛbŸgÕåùÑÅBÚm 6ÛÑ.ôF—¤ ë7 õøÉÁ,*|檒“ÄÄ+÷Ÿé#©G;ëC½Ô„é®Ü¾Ü®•ìØ ¨®Og <Zø€|Zµ=äõiåfôërÿ9¯ê³âd»v¢/¯Ÿü‹ÖB´•™hNõ‘¢õÁP(Âûƒ»»šÀ.•u}Ro‹ÑžÉTùL¢9ÛumW®Ñ:cªì ´³>€2AxÒU¿}‚Vï³ãÖwú/Vzì¬ÐÂÂ÷oß>¥PeûÃ=ÔÑH3öMVgËþ¬3OÛåm¬ 9ÓÇ ÞYŸ ¡œˆþ«w¹ÍëÞ³éŸò}`n¡»ù>»ÛžÍ_ŽÞ} øn¡§ªâá!¯À[ ÷yV«|ébáeÞ“v%÷©>’w´³¼ó”¡» ‰ç7Dz3ÐÎúD£j¾z¤ Æ›‹xvöÇÝ]^…-Ô¬?eû}¾õ½vWÔÞßpP¯g¶àÐÙåYõqç ¿Çsç»­Ìd[ň0S}dÀ õ iߢ¬¿?ÑÚõ=IñË6ÏÀs”Oùú¯ÐõWðI_;BïŠ:h¡çî=R/è‚¿(Úð±*ï¶ùÎ÷Îmµ ZàLõ‘ƒvÖ'p„!©ì¶À™ó©> stream xÚí\Y“œ6~ß_Á[f«<Š$ •rÙŽ‰]‰½UypR)زL8Öö¿Ok³À+V(©JübŽi¾nZ_·¤îÅØ¹v°óâìÙÅÙ×?,œ‚ çâÊቀ9^G8±óañ]‘%qzþûÅk)í9>H &¥]"ßõl+H?_RÏ_|݈ ò©³ï/Îþ:# …r§e܉²³¿c'†ß^;¹ï|ÜJf'Q&à|í¼?ûå +³1 ¸<•‡}d†<ì:žë#Á©D–÷) üÀ!R:pÊĹ:Št/¾²|ˆßY©£¡%P@‹Æ*g0Œví9cˆoè kÆvÎpáÈWéÑSpä¨"ÉïņrÑGùmLtO:–DÆJžþQ§E7Ëe{|­<\·W¯òª.›,É몽q}¾$x‘äIÙ‰lšrSTI{M^'å9ዪ Þ~¨cgI]Ä„²íiS¯ŠòxÖÇ‹×èçsBÈŠ/Þ$ëuQ¶çßþ¹É¶—OJPµ\5ë,ÌQ7Á³˜.^&¥¼ó¬l>çiÝ|z’%Ñ Ý4뤹•Ö$9 #t™(ù_Ï]¼H3ô&IšªJòãâðÒjB`Pxkõë0¬Ð‹0N¤èç<9¥ŒãÅe˜ß´§oŠ2mÏ^&UÕž}{•­àâIS%e…ª¢)£ä Þœ€·”'õã kx_‡uSëŒÇÇsø§(oªv˜4&–”‚+˜ 'O“^À ËTn+ŒðÍ2€=c•3‰½¹a„oè kÆ*g`Š<Îì9cˆoè cc·€åµÓž¼ë’6Q ·Ÿ´±@ØUËŸ‹UZ Rö>$qñ"+bÈ;z²º˜yQë BÊŠõ$ã´L¢zýYOúRS.ÉãÑĶXªûO,¶ v,ŽÊà *Þ…õ &´ÑSŽ?µuôÈ÷&däY\2ðÍÂÂÜØ aÁްOÛ°Ð%°>/u™Vì±à8ÕËôvŸhÛŸ~Ãç§œôõhÿ)Ì6ºA‹;AÂ9tïHØ×Ý’ðò '«Þg¡,u1ÓL¨rš… ©‡„çÍÃBF`ÕÔeÂvÁuœ~s(ÞÑo ¹·¼{ùâ ç°`G¾a´–ÊW×'h8Yù> Âõ|CꜦ¡FGCû:S2$bØ×¤áŠw4hîÑðù)ÎaÁކ}  ãS4œ¬|Ÿ†á¶–÷ð½ÅtŒ{ö·öQæþ£(ŸZ­dáÍJ Ʀªãž‘.`a÷!ÿùÆß¶j7 endstream endobj 4772 0 obj << /Length 1940 /Filter /FlateDecode >> stream xÚå\[oÛ6~ϯÐÓ`5Ãûe†e½!]/Ûš·®®­$Æ+ó¥ÅöëwhQª$Û ’Å€=I‘¨ï;>úxxHg7Î^žý|uvþ‚`™d$•ÙÕu&$’†eÊÀQ‘ìjž}=-îòùbüñê•m­2 ­%³­¹¢Hs`û†„Éñ„*=:/DûÔÙ󫳿δÂùÊ2‘ÍîÎ>|ÄÙî½Ê0âFg_ö-ï2A0¢LÂù2{öÛvfcd„=µ‡—Md†æ™âIA-²½N‘Ñ&#¶µÉÖyv}éA|gy¿²Ò‡¡‰%‘¡&¡±ÎLÑ<3ÚøÎ6v¸¾ÉÊ“ß+‰'ZÞ”8‡‡µ“øûÅj–ïµz*û0‘¶·ùƳé§bºžoüÚÎ ¿v«bë×ðvúÙÓÌgo.ük¿v/._¼kÿlpñwáöjù·úâΆ£éÖó×ÝsÏ–‹Î«jI¬Ã\碩2†¥é\müÀÎlìÎÅ0”–k³»¿/ÖÛ|Þ•*/<ìg"R2ŸÛø~Nf¬sæHƒÏ“9£èŒdƖ΃‘:™3:øaÎHg¬s††”ʘtÎhã:#™±Î ’ZòÕV‰(áŽÆ3Ü?º¤Y7ÒàÊ?\ ,\F!„Ô¸ñ&ĦÅ÷³1Å£¥¢¼L“'“òx11úloNWÛ|6&0Š—·~}úzíŸ4ÿ¢Í¿qÏ^_¾ýÅ9Ù›¤nÛ¸Tƒ=¿ œpýìò]•å7ç8›PŽ˜å/»Ømo‹õ÷ã ûÞ,f·Ó% È#ŠOù¦<ýanÏÚæ›U¾E³~´¸ˆ(dsI×vºÝmÐ~ñ¦#Zƒ€$H+• cg¦;a` ÜFZêzƒ" q]((}ÐÚ á Ü0Ùt© Á2¡ ¸Ã)æÍtµ»žÎ¶»õ˜èQ¾>ô¥Aÿ‰ce)Þ±áY¾—àÂ%Ã-vf¬¼#±sL xtØßNïòcF‚ ïáûÌeø¤õ±÷o½¯ x‚psÃúŠ0ŒJ‡pŸ˜Áo“¡4{÷”Ý{H”è¶Gƒèk 6ù]¨ëÑ_æZ~MæûÙò(q-À¡Ä‡ú“™rT ПH¿þ0*ý Žq(ÒÕtÁW€1øk6 pÃkcP×lRï%H{$8˜ùPƒ ý@ú5€QiÃQ“8„ìMÉA0­Á¦URwZƒ1¨k 6©­éÑà`æC r8êÐ8èÒ¯ÁŒJƒû¥Gƒ &/¤Šƒe*Z|1ˆkñµ˜‡Æà¯ØäŸ‚IoL}(A #?Uôé—`F%A;«R‘ %H å)Áĵ[̉jcð×lò—ìKSJ ”¢ôé—`F%A %‰±AûFÁĵ›ÌvaÄÐÆºÈ Æ0 Ö`Ó€û|Ëõ|Qôˆp0÷¡B¶¬2ãÕ;®’!‹wÀ+Š$'ÉVJ;øa+¥éŒu΀·(uºýò~ 3’ëœ!0R”¥sF?ÐÁÆØÒã0õÄÄ­Ô]Ý.6ÛT=¹ÿ½^|Î=÷—¯}7¢ç‹›Åvºôk|ÙÝž¥[QØ«µê{éÖpÞÃ÷¤,ž}üf‰'HïfIF¥C¡Ã4Êf •ö3=¨l! -¦U,:­ÀÔµ›ÔûÒÑ£ÁÁ̇‚YXŽñÀpf_„Ñ wK(Œ˜¦Ë£:øaÉC:c3D=™î‹ƒ~ 3’ëœ)ˆ9Ýl£ƒèŒdÆ–Î fëéVøÚða®Hfªó„Öì~Û/p³jç|Ÿ`Ëþ[L°]ûãÉu’Äú" ä4"h, A(3m%¡6M‡æÓ1 ¨2™¦>Ùt î*•ir÷çÒƒY^; PXùæ‡Ñ›H@8õ)Ž8Sö¦ bÑaYt öJzMú*ÜœÔ] âJwMâ}-O+o0o{ìV!ƒùcþ÷ÿˆŠÊ÷ endstream endobj 4693 0 obj << /Type /ObjStm /N 100 /First 972 /Length 1230 /Filter /FlateDecode >> stream xÚ­WËn]EÜ߯˜ ïôk’•DÞ!E! Ê W)²‘ãHáï©n‹kÑÈ,l÷)×™žÓÕ35ccyëÍÆö¶%þÎÆøA°š˜F°›¬ÕlöÞT5n:Á"qF`ÍY¼¹'2ÚèÉ™mX"«ÈnSáÞæ „¹-H[“#ж9k{0FfoÜ{B‘' ³î;±Õ˜-±h&½±hˆMH«$¦ˆFbÖðjGAóÄÃ{òÃ-1äðr 5DžÇÜ!G …9æH 9'†Ë÷uE´£pQÞ9{E­¹Çì­#Êrác„Q/Ÿ€Dƒf‚hÅ ¨Ä¤ÌÍÄʱã3l ò|c6ñû¡«[bHæ;0ÇÈ#GF5e¬Äc¦Ž3ÅpäX¨ºãIÖˆJ¡H²{Lyd{LºËÞ‰­¦ÝÛˆV`mÄUè#žQ•!Mñ‘)¢‘˜¡Ý:*5!Žª'6íäͦ†oö‰Wm%„džb æêÙ¡ø(Ù¢3šV›H±²‘‘[׌è Ý)ÚÄ{$Õïœ<> stream xÚí\]sÛ¸}÷¯àSGšV¾Ad¦3õ&m'Ùt³»ñì‹ãE¦cµ²äR’·í¯ßK‚¤IJB@_"“îø‰”ž{uïp Éç„&?ûîâìÅßÕ‰%Vs\Ü$JmEb,\ K.®“ËÉ«Í]v½œ^]¼-J›$…ÒZ¥¥á$•ÀÊ‚L˜éŒ›tòÂ]˜fÅSg½8û÷ƒR4aàQ¡’ÅÝÙåM®á·· %ҦɯeÉ»D1J¸Ðp¿J>œýtF+·±4#©1‰«¡²%ZXÒZ’ê´Áƒjtb¤%RZ”†²JU.¬® >J¾ ì?æëýÍ|±ÛçS–N²ü0ªœ§Dé‘\àB#{>¼Î¦LM–‹ìк° G².)ƒ´÷¬ÿ0¿ËŽq‰%Ÿb÷0ÿÁ•iMÒôXú‹à­1ÀÏCˆ"‚\¡ ~?¤ªMÂ@y5˜LôXm’ŒÐ´jÏί¦\Mæë]¶¸õT¥1ì7U©íÀ¯ÞÍ 7žz4†é¦µMß/VG-75i°åC³X†ø)ˆÀ¨9Èr rK(×Ã(8‚ù†mûŽ©‡#Xnض\0õp¨áCþ“ É¿0?ÿ5ÿ˜ <© dšØZÓ¿~÷æ‡ï=ÌÃpC½Žå©¤ Ÿf\{ø7†ý†€mûóÅê¸é†ƒMR hª‘ ñSQS° â8 ¤’X¦8‚݆€Ãô5€#˜oø×6ïøçk‡Z>¤ PÁpã¡á”@g C´âÒ¥Ž/FVÚÀÀ‘•M{ñ½‚JÉá#'6µIž%7­!^êø·‡´_TmÀ³¢4ß Y{øõð4ÄB Ú"n#:[œ¶VÇ F ´³%`þ9q7?×s¬š­­¹ ­ÁÕTºÚøXžïïwÛ²BžÆK.gšÒÉ<Ï ®7»°‚Ûýýý&ße×âàq_tþo·Á¨2-5ÔT/Ó]|d¦£9[C@ómÒxÁèâ#ƒv6„öÐìrÆÁXJ„®:¡÷÷»åfÈù›MVF}Ã(C¿ %2—„1/w]|dî°ÎÉT*ˆ²)nˆ¤Æeê’^MËàΪОˆý›÷a9ún¾íµ`_Î ˆH±'éÀ#³‚tÕ“+R¦URø!äÒ„¥æu¿R¼8YÄiP7ûÝý>°ƒÉçëÏÙÈ5}q;_¯³Uï•?±Yx…§œpÊâ1«‹¤ÖÙ#Übålhnªˆ¸’\ô¥c©Ó<ù¥Ï©?¹‡Xó0£ÃŸæÕÓ|ñÛâñéÆÃè¢, Œ¤ˆF—>Ž.hgÑh +WVN—l‘UÐåŒ{b~w~"g꥿íÚ¯ÿµÞüº>VÑ?R屘ý„õz¾ l£²›,ÏÖ‹¬ï&a¡ôH®F.>’Ñœ­‚¡-<ÞX¸‡ ÚÙ:XN4\¿º6¡Ý¢RN©GË]™;¬³§%W1!¦•üft°’N—GËK™¬³ž¼( þªŽfâY ÓÂŒ×záÑØÕÅG² ë¬G +a‰©×}ü?ŠáÀ|s§ù£å»‹Ì7ÖYŸš-Þw™jºC2+Xg=YI%±’5ª³ê¥/Ÿ…ç1á9¬I©¾ÖªÒ¸@4Nvñ‘œÄ:ëѪÒ€ãÏ·~º(§è£Ñ¥‹¤ ÖYÔ•ZÊG›¹­3ªR†Q]©Æ£åª‹ÌU4g«`@5OY¼1y ´³IJ”Œ‹Ý"Šår6øí¢äNÏGK^™<¬³á$(aòÛYN Y!¯£e¥ŽÌ ÎQOF˜%,­×°ÀŒüüÓ©·pôϧ;€ëåvþi•êùëΤºêêjª«­Õ ­oX}ÃëU¾£ x%¸Øçy¶Þ­þF­åçõ&?\7à ¤nÈk]|$Û°ÎzøF¡ÑæöyíʈkW„uÊ?·zø8n¡õ „5„›çŸ-©þÑØÒÅG²ë¬g$RMcˆP@° 'TÇ›1ëá#ƒÍÙ*Ú õhÁèâ#ƒÍÙ*ÊIáhÁèâ#ƒÍÙ*©ÐhÁèâ#ƒÍÙ:š0k1›“N\«}aiëØŒ:@”[]˦Pÿ™¾&aÅ)÷‹)§“•Ôª1›¹ëùuy Cñc¹xÊèäÖýTnï­Ë¢üîv±¹»Ÿï–ŸŠ¢«l[Kéþ¾5šÌ¸$BWK<Î÷»ÛMmµ€ÇÞn¶E¡÷¹¢“wûåÖÝ}ø($[/n³ÿ¹Ï…Ñnçå7Ùe«lµ\gäÑfa„bE5öa7ßí·•‘=üŸm½%¦ÓÄW»Ó¸ÔÄ8:vâ…JzàÇ(Ôû$Û.„œ÷1Šñz—dÛ¸ÿ¸áf“B )ñîÐÅ`Ô$äœHcGÙ¢Ë9´ƒMÅ;¥`û ÛÔíØiŽaº!`ÛtqNÁ1Ë [>ä @ðIÁ ?ŸQ:bÉÇ9&z]RÞ¼úÑú1Œ6¬k[ýðþ ¤ÃrCº–ååvãçÜ`Çœ+Töx @?ëí˜-–ÔîQ^æö˼Åjû¶ÙKw$•SPõ1†ù¸8Š7 ÛÞÌ¡d>67}ÀÆ‚”Šñ…‘3\ñŽ)€.†Poz¢‡wÅs¶ †‚æOÄ[IÒÃGíì€c ˜2ÐØ‹ßÍ1L ¨¨ñ&¢zøÈL£’iˆJ]M\ÜfO=Þ4ا_~ÌóÀÕ¤·ó‡@OæG·¦\I¿/»å]–x¿´ØóùW!öÉâŸß^în—uõ:_>Æ!¸Z Pï,Þ”fY­¢9[ƒƒ‰¸ä£‡ F4g«`V¼7Ntd "9êÂêOD\Ð…Ç"š«U$4ŠG˜â>²4ŠØÃ³”CÎvþ =µ~ç endstream endobj 4844 0 obj << /Length 3084 /Filter /FlateDecode >> stream xÚíÛvÛ¸†ïý¼y5‚q&1=¬:qëdšƒgìÕ7ŒD[Z‘EW‡x2O_R”`0œdÒ\x‘¦Àÿß>l hãè6ÂÑùÑÓ«£“,#…”¤2ºº‰„DR±(Vz“èj]žåwÙt~üöê§¢t%º´dEiS”ðX‹• KŽÇ4NF'fC$)Î:úÇÕш.…#òÉAŸÊD4¹;º~‹£©þì§#®’è¡,y ‚eRï/¢Ë£Ÿ° ·ÃOUâ‚ ÅMPI”$eÕ‰Ñõ˜pÌF÷“cŠG‹„Ðãqñûxl¶§Óc"FŠÓå&›<š™.ž½ëò'çOšØÉSûûéÙ˯ÿe÷9•Ÿzv~òüüÓiXqˆñO‡(‘öЋg¦øYñÙé¥=w\|›ˆ1”(‰þ®B˜/«Ï½8®m^?ã׿¼'¦9Nµ4µ7±î!YÆYüVFPìÔ”G/ß_ºB¢ и ‹rĤ ët»™å«ÇL×ä«ùd–.´À£³ü]¶6»™ûßdëe¶A“ßþV~I¬¿_ŒcFèr“n¶k+ôP´K¾zoþƒ~avgù}†¬ÛGsè]ž®¦UALW™ÙßÞÛírš­Ìî=c–.§VZ?I—ËŽI2Ú˜ßuÐv/]Øov“éHWÙé°öôIPÇ‘Lb±Üí¬Ñ ¸R(‘IÝ kP„õ¹º¯#B‰KC—Öe5hFÂt>Òlz™ *˜Öâ(ѽ²l°Wér{“NtUÕ¥«¸S”&HÈ@!PÆQÌwb8ËÊî<Ÿd]w¦„V äÎ1Ñ kÇýuz—íË‚ þ9¾Ýö1R”º$ˆ,rà¾ö/j?ÖÝÔS„«=ERÓ¨8 a÷n¼C­ ›8N§: “ÎgCø×6°!¬k›Ö÷“Å^çšÁÞÎ]E¢L dÐOÄÍ @£bdžAõ IÒÁþ5ƒÍ,ƒç C˜×6Í …÷·{{w9ä2€ú‰¸9hTê&T"P.d ’¼g. á_sØ ÀÞ3;( a]SØ´.)d{;w,¾²H€ ú‰¸hT RŠ” ©D"é™ Cø× 6° >u@»†°ém |ç °·u—B-ch&ôqSШ($¸œfB!áH0;7`ë‡ñ a\ã×rnM 8 A a3‚´€Ð©ë‚ÜÛ¼‹¡–š ýDÜ4,†BépT dˆ)â±òÃ0ˆqa˹ás†A"¨1lF`1œ90ìoÞÁ° ˜ =EœB4* ‰b–ÁP(Œ8õ̆AŒ+ ÛÎÙP„!ü+[þÂÞ5ƒ½½» j Á€©ÐSÄÍ @£b0æH&, ƒq‚˜ôM…!Œk[Îéwƒ!ük›þE"Ük]#ØÛº‹ –à "è'âF Q!¨·’JƒÚ‹› ŠG‡ù áZóײýôLåz!¬kôšÖóuî÷wî’§%8U@òüDÜä4*òF"”ü×[åC^ך¼¦mñįxlè@/„w^Ó;ÕÖ÷·3{½­»ìi C³žŸˆ›=€FÅÓ4@YSD±ða/„kÍ^ÓÖ²÷ÒÁ^ïš½¦·aoá`¯·u—=-Á4ïù‰¸ÙhTìQý¹äaØc/ôB˜Öè5\+òªEC„PØ¡p²XNSƒ½Í» j *¡ùÏOÄÍ @£bèG¬Â0H„•„!\k›¶Õš}!¼kúšÞ?ê¾öö¶î²§%(†æ??7{Š=Lò–{ 8B˜Öè5\-y®+oëš¼†µÏuáííÜOK!€àù‰¸ÁhXð¸Âˆª0I+†Tâ“ô‚¸Väµl«U‡‡Ñ â]¡×òÖì1gÒëoÝa¯ 0ò¼$œÜ}¾BE]¬‰áaÒOR̺¦5t WËœ#ݱ®™kXä鮿s9-90ÝyЏ±hTàéÏI(ÝI¥ëGúµ&¯ikWT;È a]“×´ÖèI×’«þÎ]ò¤@îtùè æþé›ØÛ¨Üœ7¿C±¾ËàœiárÒ¨8.ˆwQ}PÑ*‹nšo´¤öí0­Exe`„IQªo^`ØÑ¯Þ„ðqhjI¤¨0X[Ô¼0Xe´õ•¶\ÝFfç—ê=b_Œá÷P8ÕI±Zzv5›¯[¯¡t•¢ë±Äx4]Í?Ø¥ò–]oïïóÕÆSy¾\/ýJ¯ãénù'îNzº×¡x¹ÍyÚ‹Ë7û+^š²Yáñîƒ1Â,®û´õÝlŸîƒbÔ|ÏÒMêÙwVér}ã{ʽ/Ug¯N=sh¿žMC'ñ‡Yæy™ü˜o=ûm–®·¾IÆ?Ò|™õ¼Ú°DéQ–¬»ìèú <ØÝ…)Š˜´#§É,].³EÏ,¸ñ¾Çó-·Éó!.c‹ùÝ|“næ¹'çù÷uwýù7kŸîÇ8NyWhŠ[ò@ˆ‡ ÕÖ„Œ‘d¸ªhëëlŸcĹ}éâÍ}A»g¯»É=¯iûo¬è¾ëH)ã¶>°í Áîi)Eœª˜,ê¿=.ëvüÈ­ã¿&zš®{_#¹·Ö,m}`³@ƒu4 O`öÏ€\ÏvùåçÎ_Û v„‚ÿzxÄ1¯Ów‹¬{Å-U©Ý2»åv+ìVÚmüg³%Ø ¤Ú©$Hu.õgð`‚™±è`L´õL@ƒu0Áb$bj™ ~LìÞú‡a¢jYÖ§© ÖŒm}`3Bƒu4#Õñ;5yÍêf,7®&٬混޳“ùv5ÉÂÞ—óˆËt±o$¡‚¹I|˜ofûΤ‡¿ñ«ç¿yN….òÉû¾—bƒñØÖò vJ¡˜Q--vª|Íüe¿îáÏ£¡1A7Mµ£lhh°ŽÄƒ¹Ž×NJ]sÿij{9f/Ï|SÉýÖsŠv•.o?${ôO'c☡ýwOœ¨2c›¡pÚчáöpÞ Jדç?>>" =±o%ÃMîèéë '¡(ŽcCý¦é¡($?Ò ã§­ä¬ƒŸ˜ „Ø&öm_¼ 0£ÈÁjë‚ëHb”T/Ãño ŒdP‚¸ÀFP[H4XA\!ËøÆùÑÃÏ13â  ¶> h°‡d”éC¼šÐþ²³Hy>ùÏ·ÍÔ^°ÿýosvñð9{瑜Ýd«l9Ù»ø¦Oh£“•”š±ò`ˆ¶õˆBƒuä8k5öø ï÷FÒDïµL+$’}BëÅ$1îÁ˜l뙄ë`’ÄW@ˆ~y&Þ.ß/wVzÁ¸ž³/Œ½ÐÂf4>Zm} Zƒk*ƒ(3´ª2vôa•¶Ç²¢*Þ}ùý—u8Øž‡Y/ÛËÂw• IÌ s0”Úú@” Á¾Ó% G„Ç_Í2"‹¡Û`­ÒT¶ ,PG‹Ä ‘êÏâþŸ/0!ÂŒÃã¡­$¬ƒ I¥êºÀD'˜r¬2X3¶õÍ ÖÑŒ‚ __ò…×—f†)ƒáØÖâ öðpðbþ|»ëK•ËáæŠvô Ö‘w¨B¬ú×7_x}É,ýà Ç]ú+ø©yúÇi"fŒ5Mm} MÐ`iƒ$ˆ)þE–—„ §Ç’£ ø`3Ò Ÿ¶>h°Žd„õ–‰ïÏV¾¾g+ÊŒ<‡"´-êáô¦$â±üþ\å+x®’˜QïP<¶åa> stream xÚí]ËrÛ6Ýû+¸”g*ïG_S%Jœd’&­=ݸY02m«‘%W¤Ó¯/H@ª@‘é+ÄN› <8¾ç¼¤œ\%899z|vôèÁ21ÈH*“³ËDH$ K”±GE’³‹ä¼÷dv“]Œß½Ì[«DÛÖ’å­¹¢HseÁІ„™ã>Uº÷Ȉ$ùUGOÏŽþ<"¶NÈ¿=ØK™HF7Gçïpra¿{™`ÄN>-oA0¢LÚÏ“äôè—#ìicdDþ1?œl#3¤0O×H š#çç)2Ú$$om’y–\Ö"íÅ÷ÌCü5Ë6=lcId¨‰HÖƒ)KšÇ Fˆ ˜l8¿J܇_×'Þ´|ÛâÜ^¬½ÅßÜ.dzé¢pk=XrÞ—÷.góv O^ mG}Mõ'w¯ê OÊ<ªoü|§ñ7µŸ]6´ÌÛ“Wؼ=y~:ìéT©E‰¼Ã_!›x•ÛëN†gL?”©DÊ͘q†rˆÊP²W*ÄE>å`„)u÷¿;.dè7«ôâM»!û8]daËýº”’ñt ñº@É6èB Ây^PèBZêòë/¥ñÐ'Ôžÿ Œ¨FãEú~’íñ•ú#óGîÂ¥?ªïÜ‘`‚õ‡5Y_K„åDÚŽUÌ‘¶AŠæ‰è (ÙO`ˆ‡ómç‰áëAO¬•ed´¡FZèh2–ða2‚ÉÖË(B„K/#ÛÈXš$YÎÇWWYËti1[ÍGY»¶ã–¹ÚxºÌæÓtR6Tþ¦‚5;ñÓxy]ueCÒôúùßí˜&³Ñ‡Ž·©mÑdLP(Ù]´BB¨/êÉG‡”PE¥Må(2jƒÆJ";þvžd|]Œê¶%¤+j¢¹)ÄÚ J¶>‘R [;þÏ£„påD47„ø@7@É6Ì.‚#©»?_‹Ve}]‹òåqo-ª„4(”lÃtÅm<è}®E}]ŠZ[’ºB0š%C| %£‘õÁ ®$ŠŒ 0Ù낤1{Øëõ5RïçáàÎëØÕcÑLâM%ÛUXÍùƒY/àÆÕP±t)áÃt“­×…Û›ªÖ⿺^Àµ+m¢Éâe†’mYÛST~]2.Øü!/Ž¢Ù)€º Hµ>çJÙSú¾^À¥+C¢y!Äš!Y A‘’ñOJøÀ`€ÉvÈ}¹=b3õ}[ùÓ.Ö6CåÜ%çѤ ñÒAÉ6Ü"¹@؇“¡2—1GÓ%Äê¬qij´`„øÀ`€Év™_(CD±{˜`êïåïZ-sìÒÔh2‡ø@™¡dæ"B%§Zf&Ïøâ­b”ðaº€É6è‚ ¢b·ZÞWFß¿ßÎ&é¼í…vß/Û/“VãxÕn (”l}ÂŒ%fäÞÅ¿_Uä€Ñd àªÄ¢ê#!]’-!>0`²îãLjÄ”¾‡= Øž]^œ¾ÔLpDX¼Ò°„”J¶þÞÁ„=>œ­wyc4YB| ,P² ²p‰¸$µ·tÿ£ü¶ÏOïóîÏ\ÒMѨ(”lÃÝŸ $0ÝÜý¥àçH¨Ë/£Iâ%„’mr$8Ûü´Ã=ú"!q©g4C| ‚P² †„ö,;œ‚ŸaRû'0¯Ø-áÃ$ŒGÖC»´4Z0B|`0¢‘õÁPE -<0±¨úHH—5E EˆŒE4²ë`0ÄÕ–p²Hm\?- Åê£ßSoís¹ÕH‡H"mv_ÉPºw;:¦¸7ÑDº}0û}w\Ñû˜™N—Ùè˜àÞµûêí“WýMû‘jm›‹Å7Û_òõœÛûuâ¤ooÛ¶hv¤«åõlþíqßÞez/WéÔÜ;™¯²yêþñýöüOWîÍnP:ÿ1ÇÎÁˆB†ù¿ðt™.W ö)';›Xìîè) ÒJ%Dq„âÛ;z²­=‹_¤Þìèy` а²~ͱ°j°­m[›F9GÝŽ«Ô6ÍbK n|<^§ÓÕe:Z®æÇD÷ü®2A$rƒØp ”q¤x‰Ã0+,4ö3#,âz/V]Y©÷ŸÓ›¬jGWbÇ»ô»«¿=J¬› ˆX´®Ò?¾²#¡%7y óü‚±ö!·Y™ÛÚµ“ ¸Ê‡vÖãÌ/T .ì"ÜrÝ`ÂCô¿1á6õdUïÀCt½qàv×·£IeÏvîy׃Bô`;f0Ö,vÔU‡ñ 'ˆiÖ̓‡èãÁmþžø¸Á„‡è{cÂí¾ ò÷ .ìÜõ® -7v7펱'ë"DØ0HÖµ§Ìm /Ý/áÃrÜxd]0Œø"îƒÂÃB¦Úá©‘vŠ'›i rkG"›ùÓéEõu¼íµÐ×éÇÊí£tú´Ë››;ïNÖ>€>YÔm‰º‡Ñpp÷K_´|Y´Z‡½ðoîú2±¦HDÜÇ'„‡)0ÕcJ ¤ÖÛú Ç—þwm‡~ã7]¶ýaÝb6Yåcë~Â·Ï +·®jØzß/UïlyUü2'«þ; nåqZuýß,þ9ú\‡ endstream endobj 4797 0 obj << /Type /ObjStm /N 100 /First 973 /Length 1260 /Filter /FlateDecode >> stream xÚ¥WÍnœ7 ¼ïSèªÅ? 0rhß imƒŒtQìÂv€ôí;T×®•€N x—;;+ê#)r$>¹´">¥ˆÆ»–¹>[!Ö¢®…FÞJï‹1 3 /lat¼Äã¢Ý0¿\ˆ#ÊÙB¼x[È(® ™Åg ÔÊ@ˆÊ ée._Äeºae’B­/;kþ {Å_XK6 õ¶° Kë Ö ³„Õaù ‹ Iøèð!¶0øPZ<øP]|X[|˜, >,B8>œGXðáƒÃ‚ Âá|PÇr“gÓMKomaKæ°æÂFé$ ›°F`9áÀ„`ùˆô€Çñ wé±=d¶+GN°œF:Ò-ò9˜ùÂðS§…Á…[` ‘EXpauXSá{ìS&°ÆâiáÆ 3XQQ/L[ш:³Á‚#¹°Ž*“ÈbÃ<&…eeÍàCVÖP¬=ŠÆàC-ªÆàÃhaða}ªÃ‡ËÂàÃg‡‡ˆ5,ø«˜Qù<{Ô ’ÅÓ£n?i´0ĺÙ° bD ?£¡/úªÃ(l>6.«ò#L²J€"sñð…J¬™Õ±0¬l«üãHšåë«þ'ðUÿ“×™9œŽÏËkœU™~YŽ¿þö{Q«BçQ;óòý»woÏž}ܽ2 !G&«|’Ü´"–92ö,ÿ[ùüêò¶œ•ãyÝ?þ¶—ñÙŽ.ÀwŸp¢ÐX>eu°ÜñÅõÕÛ_N·åu9¾x~^ޝNn˧Wÿü}žǟàõty{íj-v8¾<Ý\½¿~{ºùxèöóé¿.~¼úP^I§"憦FuÌ7ðwqEÀÇQþýçŸó¿çÿ!BOä£6÷ÇѺÏþ-^ž@Žö˜#;!œ$[«µž#ˬ8úI2J˜Í’d”pœ¶ñt¿%Œ3—#딪ÉÈéàªžÌ Æk—#UÓdNTÞ“9QžÕ9™í£º's¢ä5¦xŽÜ¬Æ@I‘Ç2KR§$S‚c]çH¦½¶ž¬ ‹Ú,™A·‰Ö˜#s«$É”ÍÂ#GnhÞ=gŒtÊ$w 9R2'ì˜7šÌ ›`8%sÂÊ5ÄHŽŒ“nŠÐÛèúÉ0“£ƒf+4*g+”4[¡ÐËU,û€¬U[²œ¡Ý«J²œ‰ÐB‡?]1ÜÉ‚¯È‡oV "ChÅïT ¡ïï)ŒhÜ3¾¨°?EË1fãYýXGžLFI2ãp´ž$wÝk‘-™dì¶äÆ{-²#ãf°×"[ò ½Ù’½íµÈ–¬³J2Û,R$™f¯qƒÏ‘;Þ)™Ü+öZdKn²×";rŸ¼×"[2ðV‹lÉÀ[-²%CoµÈ– œ¥BþNI¦$nps$SÒ!µZO¦¤CjmµÈŽLèg[-²%ClmµÈ– ±µÕ"[²õ½Ù’•¶ZdË•¶×"[rǨÖdNˆ0ªg2'˜eÐ"ÉœLLjú¥ú ×è‡óò›GäèGähß="=áRý€}7"¿p©Þ’Q9Û”í¸¨œ9(I†Jo½'ÉPéÍ8I†J§–ܳA¥ÓNŠmÉé4> stream xÚÕ]Q“›8~Ÿ_AíËÍTí(’@l]®n6“dg7Ù¹M¦êry`l<¦bƒðL²¿þ„`À- ].O¸lùS»ûëV«Õ`ì<8Øy}öóÝÙ³W{N€zÎÝÂáò×ñyõ‰s7w>œ¿H×Ñ<¾øx÷k9Úw„í¹åhæS$˜/Áv ×ÔçϪ ñHù­³—wgž9 ;äë ò«.wfë³±3—Ÿýê`Äá<íF®N0¢®'_¯œ÷gœa%6F/_–—×Mdù˜9>Èã´D.ß§(CÊÑ“EÎbé(¾’¼_K ™¡‰å¡€…UÊp})4³§Œ6¾¡2Œ…ÝfNõâ]Mq¢HËšgòËBQüní˜: ä|¸ô0>Ÿgñc”ÁÆæÛÍ&Í Øà«ظYº^‡É6xÎÛ¿KþÔÕ_I‹%ü÷ÝÏ£Çxå°ñI ÔÅSE”t%GÕ-Ë·C‹â<õ_…;œoãrÞš°J„#ß÷ì)£o¨ cau .×±2\%á*}€Ñ3Ý›-Ê`WÇq®`ƒãdz´~UMìò*VFó“3$¤™­ñ¼oÈskÂVÊ#Á…5etðÍ”a.¬†Ó{óêÄ6YÄÛ,,â4ñôvSŽÍ»,ý ÈROȬ7ì¦ohSa{ÌàùˆñRNáWfø€?^ì”{9žšÜÜÂlôs˜wÂÓq»øYÌ’Ûð†V1uÄ(>G” e4Ê»?:ΰ{û?˜cü|ð«r¹ËÃûUOrºû6UWW]™ºruõÔÕ—Ó¨ëyU¾oÍÆm|C#› ;be!êÊÊfåë·WÓ[™ÔVÖ±"ÇS{›û¾¡M…±¢Ô‡«6¯ܽw\ë?'xØ8où ¸å\¥³O°¡‹4ë㉠œA ìVY¹5·ñ l*l %ˆrêxŒ"—+“çʤß9©@[\YÛø†æ´&¬R©’OkÊhã*Ú°J¸J­)£o¨ kÂVÊàA•zÙRFßLö„­•A¥tMŒ‡(ajàŽ°ÿªk‹píÈÏ¢ÃÉ]ék˜O49Ã2µpÛ“ÿ®£¾C:‚8;eÚã—®ÏÇ ˆ ,Bô¿Ô½/]‚ŒR…”›aÔ$ô%H mÜGB!£®½{.c¯bÇr„‚SÌ¿§`S¥ÞŒ0pй÷ lν™•u5ÂBí©Y(!\jHBÆ8O‡¨)X~î±i(ècD48Åô{6æWüe„€SL½'`cêŠËþiÏ|È? A=Ó(g FMAÎÃEA.<=N1ÿžƒMj^°pŠÉ÷,lN®h8á¡ö܇<””Ò„1ÎÂÓ!jîÊ#|2aFôH8Åü{6¨Iøz„„SL¾'asrE‡jÏ}HB A¸i0„ŒÓУæ¡+ÇOÃBו;\ÍPh>ûžƒÍéëMë0Í'Þó¯9qÅ¿öiÎ{È= `ÿ ã¼;¡f‘œaE?JPàjF¿)æß3¯)@£"2À¼)¦Þs¯9µäž?Ê=í™Ù'!pUT=¹šrÆ‘‚›x¨¬ŠÜŽL 8"Ì^ÛC߬¼iOX¥ Ÿ!Ø;ˆîà*Ú°Jž+¥³wžÛÁ7T†±°J®œ´,zTayì œ…ÙØŽ» £¾Ó=â÷¼Ù=Ï&Žtܼz삾~‘ë6,'À^ÄØÖ\<¥°×W}‚tx}sZ÷&ÐD×·§¶Qºœ"êÛ;~ïàú£±°:þȹL}TÅ>^,¢,JÀ­ïà†Ù4Y}B;k×áçx m,ÎÃõf5ßD‡íºGœ5 “ ü*Χnq~uóêV³1Ðe¹Ä^ÿBßÐŒ…ÕñƇUêÜw«‹NÔ)wuÜÞ|C- «£e¹9ö˜û½Ý¥ÔsãQ»5­ný³}3R£Qq¸uêêV3Œu–oÀføÚó¨e˜ã®D¹´×cÔÁ7t%cau\‰Rä V¹|¤2:Ò½f‘­µçφ©z°„¿ùýnâEµôW\é¿É´‘E+\Mgåã~‡b®½v¶¾¡ß «ãw„ Ÿ~=æíÒw_hîe°:‹›. Ô—àõé̬÷kÃ蟞ÒìÔôõk†5\l%Å2έ%Ý4ðóíuCvðÍ|É\X_ÂùžÚ…Þo'7Ö¬‡oA"n“"Ê îë¤Â«{ìp¡oÈca5¸@E€V÷Ð]﬛ɫeá} åkOJô­â\W”a}m¢ê>Ò|Úò X¿Oá—“oK¥þ®¶eÍÇZð†.f(êˆ?ù ¦zÀÉñý˜ÛZ&û~[ ó‰S£pQ@\u‡®‹xeaWý!JJ÷í pÜq¼ªfÍsÚø†®c,,du* å–’ûHu|߆B© v¾Lf!4Ú?ÅŸˆD³*k嬚+Ú¿Á¢À³»58»;¨oýmx³†&‚·m›è:"¯ê¤Ö±oèˆÆÂê8¢ü* ¯Sh™§X†½;Y1RFý­:=Ê5êSÒr¸k‚ÈyX„ÐJyº‘°9tÕƒûÍ;Ðu]ð–‡U…Jk\nãrÙTØ‘„ŒqÔ!¤ß$!§9=1Þ|‘;ƒÃσμ-Ò8‰‹©— ð/*À'X`>¨\÷/·*HZó¯6¾¡ «³V¸aB+[dézâdLÇKÖé#t? Ë`ö- Ç £zŸŽ|¡Ïiˆ¹˶èâ·×»»'—ãhU€´æ;m|Cß1VÇw(C˜³ú¤~úœ\qÍ¡~/&ö›=e{SÇñÕúóÂÇ0^Á· h!3\­ÒÙá“àt|WYk¾ÑÆ7ô cau|ƒ¸êz0Þ}väñ. x]hgùÔàÿ'›²ôÉÄa2qZê6¿ *áÚòÀ¾™š «ã˜"⪃ÃÅÚN~Øãi¾U*[Ô‡z´©/|š ¾ê¼šüìK£+ÿ°yœõ¢*µZc}ßõ¦Âsœ_ˆz–‰4hÀ(œ-õ[á•9hÔÞd©L’ÖÓî ÂÙ,Ý&Ðî+àBóþ Ú¾Ž‹°÷¼¥SCó4âï*¢ÖÜ¥oè-¦¢j,DHI‰:ÿ¼KÁ)Ê·;¥ø’n[h¶wpSÔØ1lbБ%¡rø§(K¢ÕÔÇPýݘÇ=À«*«Ö\ oè¦ÂŽPÞ åêò‡áèü2Y†É 𠽋 ·ÛÜÅk Û^ÀÚù¾ÿ^ŒÀá‘WE@kähã’ÃXXÉrëÇÆ}¹Ÿ:J7Pð ¥’€|ÚzøW‡ÏI±™¸1-—ÉÂ*ÌN-æV•ó¬yAßÐ Œ…Õñæ#·~^Ì͉”o)xŒ¾í9/|>½:tô¤ ¿¤¥ÑÕGܪêfÂm|C  ¢°).•“yÈêœ+Ô/ô=×~x{sýòD.·0­ª:Ö,ÜÆ7´°±°:¦1ªëûn¾“!`­¤FŸ'?QŸÉ=n eXܬ-îO^ IUZ±F´6¾!Ѭ «”«²5e´ñ •a,¬Nj€]ıª2÷ýU’ù1öí[oN]>Eµ7´eå6¼™‘MEŽ£EœýÿüOSùø\{ñÖ7ü7#1‡­!ââ;ýƒ&…Ñ÷_ÀLê³Sþ ø¿“ŒË endstream endobj 4986 0 obj << /Length 2248 /Filter /FlateDecode >> stream xÚí]]SÛF}÷¯Ð£=‰7ûý‘i:%ÐdšÉG™¾ÐLÇž›ÚФýõ]y×à5ÒFâú&Àð$b¯ŽŽÏ9Zí½RlZ´Øí<ßëœMãfÄfãál89Væ¹Í¼×bݪ­/kœÃ‹jŠŒ*”lf:ÓVfM‹éì;g³Í„vY}Ÿl¶škÛ„Ó,*B´l&ðÀh©f&Q£ç6“÷ú\zÉx,kÇ^L>O¦_Úçqøuyl•.JU´x¥øÀ|¡‘b¨PÔ¡‰‘âÅ“½–«ªó¯lø•̱¡ñöì|4ÌoV£Ö|·ýÛzŒû–ÙÇùÖWÍ^õgØËõáO›ž("”ˆhÙHñÙ€’ÍÌÄ’¡–½-Ú¬Cùêm³<̇mË *04_R| /P²_#ÂņÔ>kèˇ÷›ïóeç8neܪ¸ÕqkÚ\¦X(¢Ð\Nñ.CÉf\æ~¡.Ľ? i(/Ð\Lñ.BÉf\¤ŽH#ïáýåÂ:Ëá5|˜Ã`²™ûÊY¢˜ºã÷”•„k¼ÆÈ>ÐN(ÙúVYC”2€û=<äž2‹ -© <0¨@ª™ž2šø©ç¡w‹xJ‡Š -š)>0›P²™IT+â Ó‡Þ¦{xJ…Ò-`)>0`hd£2THhb¤ø@1Àd[ôð”ô ñÑÄË´ãv®——nøíÞ´ã§x¨ÒÐ’”â“%›™·}Ic4¿5?ÅBi…æKŠôJ6ã gÄRqO;~І’ Íåè2”lÆec%ø‰àÜâéÅ«ok‹Â>ËÄâbýä­#TqˆexÚÆ®öŸ¦ç'7dS;r09l6°BñÇ “.]¨Ù°’¾†K:˜lUñj¡ÊC;bíUË žºuSê›j'U“âe‹ûpiÓf—6ZhJñ‚’­Ÿ:¥õ/q}Ûì~¥G4⌑ÀýRÍôØ¥1þ5{Ç{ìR‡² ÍÌè&”lælÕ†Pêzì··Ç.U¨Ñ¢šâ£ %›i³KO˜ª‡.û-ê²Kªa´l¦øÀlBÉVd³\ìMéÓŽ=tÙ7Ýe—"âhKñC#Å`¡VC#ÅŠ&Û¢Ë.¹ ̈ïÝe7Ì6íkKÊ"4ïR| wP²™'ã~+oM_[¸²œÁëx®áÃ|“ÍøBáJÝÓ¾¶°¡ÌAs9ź %[ï²pž˜ÓwôIVaš‰ <ÐC ÕŒ…Æ!Ì=ì¯ Ñhþ¦ø@ƒ¡d3-6¡-æ®·Ø„’Ä"<;S| P²™V"ùõ› ß¸‡ð¥“ㆷNFó*ÿ=éoòë „ ëv´Œ¤øÀŒ@ÉVdÄ9b|ì„ÔDjvuÆÄÞàׇVÞhZ§ø@­¡d3Z E'$_Ñš“MªÍÃzMí¨6”lFm.‰’±2+j³ jͪMë¨5”lFk&ˆ²±¶–+ZÓM&›»°ÅR{ ¦6˜lFmʉæ±bÎÜ!뫲|16l4F“aÃ'`>ΦãÁ¬­…6,0Ñ,LñBÉÖ[È#ZÇrXûFò–wrhmË?4©x Ò@ª¡-õbÄ¢Õ\ ½ÉiI‡%šÐ)>Pi(ÙŒÔÚoe,í•Ô|ƒR«°‚B“:ÅJ %›‘ZYbl|x­L”Z†åšÔ)>Pj(Ù*©%ÊK- ±ËïBÉÝô ]m/&7»Üа.C31Åš%[ß ñ¤ˆ5ü6~)ßüái£˜UVµhYMñY…’Í> stream xÚÍWÍŠœ7¼ÏSèÒ£þQ«‹‰ñ-`’g³ì58oŸRo²Äa&ôàK.;=µõ©$URŲ֛ÅÍlz‹µ?gcM ÏDV²zoâkÜ”‘¦#mÖ퀰ÅF0îÒ]xšÈl#‰æ’Èj>7½MÞs›žˆ´è‰h‹!‚{r(F[&»ð¶"̹kB˜tŸ‰­Æ,“ŽÊ7&ÜX81A5|WŠõv†Öˆ•'6P-Þ•76M ‰AcàŽñ˜ AÌyÓbîSˆÍžÄæè‹è{O÷Î)$ö†¢šMúãnª‘ÏbËûÚÏöœmóŒQÅæañ"š˜¢š‰Yh,¨<1obœò0qÍÆÙ»nÙ8{xóÍÛ7²!Æ#1,z¬Ä0²gCì¯ãpss8>ooÐ]Œ7úU;þøÓÏm89ò¡„F¼ûôþýÛógÿÍ5!U²2)æW#K'S-’û"ƒ3%òXA-Z#Ǥ“käé„Ñ‹däxikäaäÕMiJÑ´> stream xÚÝ\ßs›F~÷_Á[å™è|¿ïÈLœ¤Í$Ó4mã™<¸y ¶h$PÅ“ÿ¾‹B‡kfú„Oß~únoÙÝ;Œ½{{o.^Þ\\ýB°ô|äK*½›;OH$}æ)®Šx7Kïvö*Ù„ËèòóÍ»b´ò4Œ–¬ÍEš+Û$œ^Ωҳ«òB$)>uñóÍÅ?FaW:øõƒÉÄBK"ŸúÉVb({œ¹£o)†3²•#¢¹;1Úø–bX“ݦ÷^ùßu®Dª¤7r%HáäoehºYEÙ>0Fònçã™é¸e}«òŒ³cïÃËè>ʃµÙà·­að%¯ªÇãgÌ ¿$Aº4ž4]Ož“ŸzˆòUçcûû\îõÛ]k¨¼Ñr”ös§Z"ÜG” wK¤o¹D¬ÉŽY"‚"Aª§÷ÛÜlÞã0ì¸Hõ É:í‚ÉÄk%Ù†iGIlè¯A¼4Ž×ß cŦ(ƒ<4¾I–á´A(Ûm·IZW~OY ’X)Ý­6¾åÚ°&;fmpHZE]k‡†—¯ fÉ.]„/‰EßE÷»rY>qÂ<ˆÖÙ“ýj1†µ;ÿiã[ú3²•÷3(;‰ÑÆ·Úì˜Åe¢ªU»mû}Dê² ²ž7ðU°øÆú»4Ù˜l·Çë¤Æ¢{~)a¨Ž:O ÞÒw\Q-•>GœgRtðí´pG¶C—eŒ31Úø–b8#[‰¡Ê„Õ™m|K1œ‘­Ä>”ÛtN\«†Ÿnì„Ô1ޤe ¨ø¢ÝR€;#-™b¸Ü&™ÏË+TŒû›ÕFK³Ÿˆ½9åˆÕÈ×»|•¤ÕÞÆËuÅ!@<ûµLÄŠñD!Ÿ±ž½]ü5NŠ.ìC|rC„kŒaV}D;Œ²Í¥BZø“lˆpU´YÅØ ‘I(Ô½è“ ‘I¬×Ýè–õá ‘ñvç ¤´Û1Ãܱ€¨êvù$»!\ø`‹ŒÚ ™ÄþÁ›ÊÝ2äœð¿)lü¯i»§]p´écHÆìÂØxŒ3&Î ÐÚÝv§ðd¥îrå¾]àŽl%wRî´hÁ[JaKuDÉÉ ‡¯ë’stc$Ù÷é¹ac„cŒ$qWÃtð-çÅ–lÏ4ÀS‰ÏÌöýrnñç˽¸óáf¿ƒ¢Mj¸dáÈÒiIá®FëàÛM¶;²•JïI;£o)†3²•° s·÷ÔÁ·ÃÙJ ­”»Í†¾¥ÎÈÖbÀU«ÿ´zgnQݨÞÙ©ê=X¶k÷OQœ}Ïòp“jùùõÕkBŸµ—c«ûr/ñLAæx#•€®ìŽ7Úa”…:ÍñFº¯Foœ„B]Kµ8˜Tó“X¯«©–õáj~¼Ýãù/ŽÖRËㆠƒõ¼ Fí‡#,§9ÞH9Ä)Q-ËO—Ï#Ái/œ‚ÀÁ › qgÀ §0~p¦ñ}\ì3}ðÃѦý•AÆÎÍ@†ýУöC ƒ Æg˜é‡S8øa“Aëyw§0~ðæñÒ倎6}ì‡T!mÙ!Æ™¬‰bŽ•»Öñ5ÒÜ݆¾]ŽêŽl%††ùÓîúl|K1¬ÉŽè.Ÿ >òpé˜C£!èCåyhÚÖ26KÂÜô`T?åXëÀY§ÝzwE?nåæj†“jÔ7ég[JDÕ™»•ׂ·\x¶TǬ; LëWž"C_^‡Yfì¥qßÑV:ܯ\%»43?E¶¹Ÿ?˜®X㣇Ý5 \Ÿ ¿/;ã³ÁÆáí>1ÄÜQÏñÖRÃa ;òD ä+wù¾åšrF¶jë*At#FßR k²c"ŒÐˆý¨]#Â9ääîÞæéà[N‹-ÙÓ»F„+Ä8ùïÆöÝí tð-'Û–ìÀd3‰˜®^Ôº%f“½‹wY÷ïyÅ)E`Íâm|KÅmÉ(Nâ´Šr·ÔLñë8X'÷†ï¯Ä[Ó”! ïÂ4Œ£W)+0gsÙÆ·œK[²=sIHñß$(\9âõÖ .§òÅðTfQ|¿6ÌÃx9~á2Kw67m|˹±%;47˜!«÷ˆÑÜ,£»ý‚È£î{ ge×>¢Â]·¦ o'º-ÕӱͧHðª1sË~hhƒ¨–,a©õU”…K_z²Ùe†66A¾X™ ý{·Ù†Çu*0!†é©*RcWîÕ·s.;šËY$´ió4ˆîW¦Idi÷ÝÓòÚ÷/†8|¹ãó£&ÿaè_*h° endstream endobj 5084 0 obj << /Length 2549 /Filter /FlateDecode >> stream xÚÝ\iã¶þ>¿BÈ—Ú@Íå¥+h‹NvÓÅÙ£¶Àvh,zF‰%9:vºýõ¥LzÖ’|¼4Åí‡|ПyùÞ¢ˆ½{¯¯¾»»zñ7‚/Fq@ïnåù bæ…±¼†Ä»K½³—e.Òlþéî‡ntèErtÀºÑ<¤(â¡Û$œÍ4Œf/Ô…¤ûÕÕ÷wW¿^9 {äë ò§Ì÷–ùÕÇOØKåw?xñ8òž¶#sÏ'QÈ×kïöêïWXÓÆ(ö»—Ýåõ>2C!æ^È#ø´Cî>§(Žbt£c¯Þê(ÒY|ͼ¿c ™a+@1íɪ5$zUx·*„tr¤^ès½4óE€ñìÏÛõÀ[Õƒ§^üãõ•÷qûuóTê \þðG1«{c‚.Ë|³¹(šþøÞ¿ÓW½,”çî²o¹ÎÈjaÐ…Ê^Ü£o) gdµ0ˆÂ0p'Œ>¾¥0œ‘ÕÂÀEÒ8FßRÎÈî„APD£¯dD ×óÀ&8rÕÁ2Ú Z@A÷¿±r´>’oøÀ‹.H7ËÛ ù<ŽQDÏ!b а4D”‘+xCŽ–c}_Cè »/à BÔ—k™Ì€ôÚ¿‘¢\%˦ÝÊL.çH”FHšÂ4(ã(ä¯Äœø³ÏÙRŒgg±/'šKK£l0ûÛ$‡R>‚|~ɼ£õ÷ãŽ?A¤9FÑ¡õï¤J“‚ÈjŒÑÉúvZý(BC1]|@ý˜ p—ì}˜s<ûê.Žjá$vZØcÐwN‡µp’ÙwZØ›}çh*¢ùÔcEŒ¤#ı•3»ãLøó™kÄÔ&ü™À—ñ›1gÉÆß.ÙpGV ƒK׺+Pø–°&;*ðÔžÏÌCéé©N>`u¢N@cW%p`—>Vb4’Àú l|ÝTIöðØH&OI•ËæÅñ²¹) oªò¡Jr'éu  _ Ǿ8>öz„+½£úìlï3©kÄ]å:À·´k²&V¤{Æ:™¾{Ì€ •ûr¨pÇmªuaÐÒi€Êßn6eÕ€û?yR¤õÆO÷¢äO&6ñ²€÷S8°åã@aeMmØ%ó)‘_ºë… ð-ÍËš¬‰yQ™ªs&E².€ŠÒ6›¸`UR<õjßP¥ú¹Í7bê88v.Rx踩*t]CýÆòñˆ8¯çšÄîÚ\|K=·&k¢ç„#éNÏr{³æ§4i’Ÿžª¬Cyÿ ûXþ‘ÓÞ7{(ÊJÔS'Ypcùœ¬[àÐz#–Ù*ÇÔö¼jaŒ0‹Ü©VßRµœ‘UÂàQŒp;ÆßNöd ìŒÇ± Ü¥kbòl­­Å0KÚ~N‚ÓÆº,‹Z,Û®|Mtcú¿ƒA&i*ýE uu“TMVrÒLìˆ`œŸõ;<Œ¡Ä©õñ-MÍš¬‰©Eq)S»Oja¤„¦éË÷É -1šà„YVrð¦Ö>Ö‰XͼýŒXÀF¾B–+ HM&P­%gFÓÇ·4k²&FbÄwwb6]¶ëX ,“¢k`û­*óC /BhÎÅ}Õûp¶Œ}|ËetFV ƒ«JÕ™0úø–°&k¢ÓÓä·e# þlò”Á ƒúE $ys{mÐØ}ÿö=Ðæ“Mr¿†ÆVx?®5íaq¦*XgúßÇ·Ôk²&úÏB䇺E\‘Öÿ‹™ð‰Öp׬õË*–2®%¹h}/ƒbŸS†u×/à[êš3²ZD•´Î„ÑÇ·†5YÃ#> |ß]àÙ$u /€¡¥ø¨ÊÉ;lÉÔ^§ÒæS¨“€{‡rÓd%°’yÊÖkÓ8…UYêÌ\úø–æbMÖÄ\0—×@™‹(Fi…–ù7'v“gy»n’B”-PÛþ½GoNwÊò2“ï0¸ü¾íù» T™3hãÆ·wL39«Ô•… ðí,Äž¬…°XJˆéîñØ÷X×Mò PµÅj%–@Ô¶h²õ¤1ªnïkñk;zäøÆœ$¸ãT|™ÖRõNmÇñŽóæÆÈ¥uõà-Ë–ª‰mE…¡nCÝq]NÒ•…€ÞøÖ¦€Þ<ÚóNµ£,çž÷_ Àb]&)<§…º@¨Vâ!«eehlTA×crwf€oiVÖdMì*$("ñ.f5•4)2Ó‚V {)"xŸ¦hà÷eý’O|«ÆIT†/ÅÈ%·_uœœYCßҬɚXC€Q¤KxV¢·?^Ú®b\NNÜÝà[.‡3²ZL5eœ £o) k²&ºÉäGœîØï:&m•À›!ï¶“Ñóo¡ZJUùïlaúø– cKöÀ2!â~Ç3”hzËéGüI=u¿8]ãÿ®-x»ÍÍ ªìu¦}|KͰ%{B3Hˆ0Õý䦯€YÆ­qïìŸãÞÙöónwè‰êJ*êe•›±jÿ)z¬Ê:gºÓÇ·Ôgd•0h¬rqWÂàÛ ÃY-Œh›Š9“EÞR®¨jI1б»âu€o) gdwÂóö›žþ@Y÷œ0ß;ýÁ?vúCž•þÐ=Oýææz“wC¤¿ÏVm±ÜºØíÇÝí…î›ôÔy“ó èEçAPo˜Z=Bm‡¡žÃ'A·¡)œä<"¯1ã¦çALBa÷$~ä<ˆIfß=‰ß›ýôyæóŽ×_B`Ù9y„ ÆN¥#1›ä<"½SÆfçALBàY ÷ìü×qœbêgÜŸZûÝãJh<óX }aNCœwdæg‚!a áØww¡æ. àÛ¥îÈja‚d0r'Œ>¾¥0¬É´¦áˆ?DõÿxD!ž\аs˜gaó^28õnæÑfÿó…;ÁR;‰»Â}€oi ÖdMŒ3™¯ê,üC?&[mø ·­'Pe‚ùé†W×L·Ë=û~Þë\4IV˜öO£Xæsîº>}x;C²¦j`G1•É›ÞLµ*Û ¼÷(]-tñŽ0Bînîƒ[³iG²º¯É,:Ò;ožÅ{ðÙ°]ÇöH³ÚRU_´óëù±éÁõ>ÚíõÍ`œº:ÓšKQc~É‘Öÿñp Œ endstream endobj 5044 0 obj << /Type /ObjStm /N 100 /First 969 /Length 1230 /Filter /FlateDecode >> stream xÚµXÍj7Ýû)ô«ù“F`²hƒw…fÑ6daÒK)„¸Ä¤oߣqí¦äs™Pº‰çŸh¤9ówmkÖ›­5›ùþmåçÕX­yï½ñ\Ûà&’ˆ4‰hSNÄšz"8¢ÛŒÑÌÁ¹+9Ñ\c€CapoC6ÂÜÆLDÚäD´Í‘ˆµè‰x WœÌ£ÅJd¶e² \9æ6pç®\ºÏ 7fIL`Ä´±pbËs¼· ÈØ/›°o+›&Søp٘‡ÏÄàcpbð1Fbð1{bð1áG!¨‰ÁGXòà#"1øXº1ƒ57ŠìÇÀBøûHL›ð< ;B¾Â Rß.𑌼E][ ("™½{‡¡aá`×Äp°§ÔŽƒGjí8o¤ØîMfª G2}Á"'уHÁ‘éwÀÇÂ[”’•’# ÚSó!°Rô±³(UH#NÙ‡7•p‡*î·± km­F4U„að6Rz\Q-¥ŸVJEÔSú gžÒÃ£Ž”~ÂÙð ÎfO ÎfÆèÌøLøˆŒB£Ã?ºdcÈ]sc»zzÆ/5–äqø€®&™"¸®i¦H¬‘¼…jéû¼]{qoh%ĨLÛ´%°"1¸š˜Áš~qyyqzÞ^#õü²~üéçæƒ¨ø= ¢þþã»wo.ž=ûwò0Úå]#»µÆ5!õ*Y™â"Y: ®Fî‹ â—Ⱦ‚­§FŽIŽ’¨‘ç œ^$§¡EMÜFõ`SšRÔÄUhŽ¢&.LÑ‹š8w +j‚ÙDEM,‚št<'­jèPu´gYŒŸ½zesÚE_#«kQ%žEMÐÂH¸ªIg/>PW'YEMÐ…IµXT:‚tTŸdÅÈa EMT°(Éb„*,’YÉ£¨ - )j"‹iŒ¢&˜ù4{QÌšVÔDùF×CóÔÆó?ÙûÇÂܰQ%R«žNå[LÃÊÄEòP¬LR$»`eÒ"!÷ƒÚ9&kÇÊäE2/¬LÕ0÷ qP;‡d‡€“‹qöØ™Š\Õ{ñ`SL¯©U2nQ½†¡ùƒah~áQ$£ùÅ*>Û?­bfh0­(f³¢÷í?ÔȪ‡cã,Ïs}¹W³_ý±ædÌr®f3c– dÌrñ¢€ŒY^ÌOÆ$W+ê‡8F1ÊŒdÆÚ[$#™m%a$³÷¢$Èe·ùõCq Ûüo‹äqý¯òz˜Ðj¿èÉ ù9û¯`á;æmâˆì|Ü&Ž¸ÖŸhGdL›ã6qDÆ´ÙÈ*‘ÇîV\$û^Ÿ‹ù òþ3UŒúd)FÙKüùwÿ? xÙ¼ endstream endobj 5128 0 obj << /Length 3183 /Filter /FlateDecode >> stream xÚå]msÛ6þî_Á~ª|sFˆW’›»s“4ãÞ4nw27i&CS´ÄF"U¾Äãûõ’+’¢´ˆs;÷‰²>X-öYì.@ÐuŽë¼9ûööìÅwØN€A„s{ïpD@/W;·sçÃìe¶ŽçÉùÇÛïëÖžãËÖ‚Ö­™GÏ< Ö4ÄŒ_ÏŸ½h/Xàú®³×·g¿aÙÊuðï=È[)w¢õÙ‡®3—ß}︈¾óд\;»ˆP!?¯œwg?¹Jl¼þX_Þì"Sä¹Ìñ˜'5rý‚?ppÝ:pòعE:Н$ïâo¥„ô°‹%P@‚ „mó…Ó~¸ÙŽ*VãÄêqb\JÎ1 X;VEu7¿$QÜŒÐÍùp!\w†Ï›ËE{ñU“~Gªq´ Ó4^ ÑÖÙýÞÅÅh'³»¤„a_^wÛuÖ5Be*Ô“CÊì™JßÐTŒ…Õ1&oö1ÀVÈÖVÉ}’åÞÛ™EëmW.÷þ3õieyuu½O–_\îŽsâ!)—0øx¾èÿÖƒ5+ód±ˆóxCOÒ2ÎójÓ[iTÔß1*æùÈwƒí<ñ‹Ë\50¼ÓLšžG¶”ŒÇ9Lòډ㻸†6ÂaßCÔó¥Ãp‘KȖÛM–÷)X[†*säyž¢»ø†Š6VÇYâ¹uDtÔYR³\…ÿo¾ò$˜f&>j´ù>¦ŒÏkYÕb—»0ý|Ø›ú aß’7uò¥[#yßäÆÂêxS×GØUÑ3”;{©çv¥ÖÏ}k#ÒÃ7{Â*eø2k {Êèâ*ÃXX9HøB:¯5Ïw2c‡hš•ñÀ:¿š¦×ä“Ö£o8¶DUšmºdM]|C] «c—‚!"e—i´Ì³4«€sa‡s`Ó0¦,yÒ·ùqÐ<>-HºÒÕ#8bH@9“õf¯cèÌ'Ž[.¯&Vÿe?Ò›ýênx›ÏX#YßdÆÂêLjˆªbMü%N¡–U‹åÄö½ óù˜6IYÄ+h,ט¥t/kI2 …G¿UI‘”I–ŽXðh ¦Œúw ñ;0©Y’>fi¬YδÍC­¤‹oHcau¢\1ä!LÙ] ´¤pt~a¡;^õ-çÅxB|m×÷îüòª`;à‰Ã²ÊÎá×·@µNÖ‹*Ôlf!èÔFÚäÒs»ø†Ìµ&¬Röfö =|Ce «ãƈ‹U…ÆË?•/ýRà:*´öòW‚9ÂRÅñmâñ—±Êõ†½"]=’ž€AÕMå ï‚DåÇ#†eö 㸼×WG¼Úí2~<1±9î¢Ü¶À`•]|CV «ÃJ7@ÌS•Á»°H¢pMòþG«sÅÄlSàô>YTy8›'_—ÐX{>ní<àˆ{U×¾™µ ;nÛ<ðǼµícëOÃUœC¶¼JÒaé0q¿-+YŸ.¾áøXV)ÃkÒkºèÀªÂTT ¿Ì=¤ýªhiUdð’8Ô…åÔ«6+¡2TR†bOÐ&§h³mkÙÅ7´HkÂ*epŒh`¯jÙÃ7T†±°:üä ‰-=¡Ùþ°ÈŸåà…ƒ»¬*­Dkó¸Œ#xàsuóÓé¤혈²õ:L¡ŠÊ½gگ׷¡«ˆœµI­5‚tñ bMX¥ ÒæÖ”ÑÅ7T†©°|Å2‰§Ú)÷-p’¯ŠøOOù?tQF³à± ‹bb™º=î‰p›ìX#_ß|ÆÂB¦jÏGÉtŒ|—êm~Ô]æóiWdÀ}GÍÃ-ŸÚ:ø–u¹°¤wkA`ÿ ýeòkøkµÞ QÇ)æzˆs{Uľ!ÅŒ…Õ¡˜öÙ¶ŠHóPZz®W‹ƒVËeß Pd÷å`Ýÿ¸ß‡&åà‚#˜÷y¶Þû(Òæ‡e†réú_§&Ð,h+¶XÒÃ7c‰=a•2|޵Wêëá*ÃTØñ˜Õ‘¹§¿ªâgš[qçI””ÏTùžž\lvøñJÓw=fpRã‰Ã›(Ch•¸‘¢ØÄQ®4çs™þÕ5kÜìÀRÓTTÉœyžü—ªm=…˜Ã°ñ@H™|þËgNÿ(k—{ÊUàyYÈ+±WØîáÚ»5a•28Až°WØîá*ÃTØó2gˆm•Ö˜—.tSTâ-üáÛ›«7ŸÞ^¿×ÍgÿUÐÄ#\­îÂè3Tòð©Á»Þ?ÔíÄa´ÔY[±F„.¾!Œ…Õ™Gn ¨Q&Ї’ ½qÊÖ–o¡¶’¥Ç«M vŸ@ûWeë­{–h¬í}bñH< nÀú˜‡e¨KFÚ–Q¬‘±‹oHFcauÈHÂTð%\Uqñ\¹|€>¢Ö[(? vV­a¹G¬öa™DÐ×2«Vó‰ç¦,d*—†åÔ9¢ ˆ×ºäÁò}{ =|Cò «CBö¶ éþÃȇUi‘,R,I:6NbÚ ìú×añyÚª‘Þéð½]ËPw„¹Ò¾ˆ½zø†43V‡f˜È«Z©Ã;+qÛ ô¨Ä—kY4+´iûÖʶDè’d-Ãl²öÉB“4¨+fö{øfœ0V‡.F„«-ØIúl~6Êò<.6Y:qœ2b1¦•Q=êy ^Œáè’À÷ëÚ[êêá’ÀXX Ð@ŠuÄ–^š¬³\¯Ðv€`*ãQÏ;í¹³þ¾  $çAðƒgbLk.Jæ&ÉÕWÀÊ9õrí%]xC»¶%ªÒ„hkbÖTÑÅ7Ô…©°ûÊæ¹^-§h΄r™Ãá‰ï7G¡[ó]|Co`,¬Æáð$ÀHUžÖØî^Š9æPãyâ5I¾µ±ëÀ-Q•&D›·YSEßPÖ„UÊàq×¢]tñ •aMX¥ ÖÆáÖ”ÑÅ7T†5a·ÊÀˆóÜR4ÙaÛЃ÷ú;oÜ*È­¯*ÎâHþPÑ„pýfÁM´>'î¬J²öMƒ22j®—íež'õé‰Íçûºa¦þ¨‹í͇_þpñóÕ5óÕuId÷‹@¨/ꇱk„y¡àš¿²uû×û$-‹2^hû~ÄÝ·)ºÎ…Ìì¨P?è²*—YþÍù…Ìaf/ÃU’J.?V«$L«ö¿Eõÿ ýrNøLvÎù Iù±?[ü½î¤FÅ ¶ç€¾+åÔP(Ô‡s\ÿÚÏÅðÅ‹7Ë“˜„[³Ù}ñ"Ýyñ"“´/ü§/NŒQ¯ÿˆv¹ÔaÈÖ²­LÂ[5ýî*X;D†çRÄ=¥å¤*ïÃHN—µÎT‰º£ B|$Y4„2䱞 ¯âsÌgOç`tz§—ˆõÞl¡½Þ߆ëxß‹7%ŸÙ)ýÇ_Bˆƒ¸^Ýó÷ ­|O2†ÑD²}ˆZƒumÆbk„ÄC>eÚcàî3B*õ«VQÞŸ³:R¾á€NÑÿ“î°ã߯ pŠÎŸ p§sé¥gV/ÛoƒÚ]mPBˆá d5rØ 0¶fؼ­.˜Æ q F¡i‡Sðd‡»ì̧ã†8EïO†¸Û{k‰*ˆØo‰Ú}-QB´ï¼:}BÕ†8¼T*šÄn‡ñ}"q{ë]x³8ÙXTun³–X.;å Öÿ»»ãz endstream endobj 5178 0 obj << /Length 3430 /Filter /FlateDecode >> stream xÚÝ]msÛ6þî_ÁûtöÍ !@ûÍ礩ÛiœÆît:n&CK´ÅV"U’ŠÇ÷ë Ÿ¡7.´DÒ»/•¢BW‹}°/XÀað„ÁÛ“Ýœ¼ú–†"HI*˜nîƒX‘FA’ª×„7“àöô¢šç“âìãÍ÷Ýè$j´ˆºÑg$•i@»ÑiPçÁý^¤^|#¹¿–ò„—X‚¤,@Ø`ýè7Ö³JÍ<ñ—³S’r=Wç«™ÙÜŽDžNêâs^ÃÆÞWÀí4‡ ¬óYÖ*fO°ñM[gÅôU’’Bha]\MIØÅÕ©n¦p­«y„„"e›×yÓåô PŽg-Ð/dãéWcƬ€z¸F'Åçb²Ìf›‘l?_BN¤2o|±ñ‘|A ë—PštÆ„äóìn–œ­\¾{ÿóͰ‘ÇÕÏ7›˜ Å·.¡«Â*gÿ4)ªO㪼/€Lg@*ßµ<ÙŠÚz-^Í-‘±ôfñø8‹Ç ë`ñ"MåB[|œ© 6l±†ÎyÆÓ¬,óÐV²¦hÄ {³“óY³•–ÿópÀwp¿Ù,‹ªnÌË'¹Ká¡.”»uMå…dD¦©?–ØøH– …ua‰„ÊD³dËÔËtö†¯aÝuÓîZê?lÊž"çÁÕ=Ôå,ë&wäkS”ãüH÷s$YÕ;½QÄ‚G2)ê:$1aLj:L§õ])õþ¸è~`R­ŠQ°¡Ó¬9²t(Ïoí¼hÀ&y› ‹j–Õ[µ†~ú]õÆI ´°..FpÂDª9ÕÑæ!o EL`›lí[¬>}®XýÅ]˵ËêN¶¡ZÓäe[lçäû÷[Ü3¶r»êx`~_¾ß_£ìçk¬«²Þøjã#ùŠÖ…¯JC‘Ùܹ¼>?ÖÇô/óˆu>™ÔÊTÜÜ+臟€ÉO>S~ìé³úèÂÀ~æ×Õò˜Õý¾œ«LöÈŸŸa‘.Ñzc˜dZX†qF¢ØP ƜƯՆ^æùä(/º?Ê D„—º‹Råœó N1¨°péÒ䎦ݳ5¦ë¹ÞÈeã#É…Ö…\%Qj¶[·ë xoÐäã :ÖT–]ªÊբݱûÚãJ•Ó[tžg«û°D¼«Ú|hžaÐT—k½´4h¬°Ì—…„Gfc“˯RX6ùÎÍn*[áÝS Ní€EhÓÂ<ŸWõÓÀL?¦Íbç¬ô[¨Ë°Þ¬ßÆGZ?ZX—å’Þ„5Êà:ñ÷¦ © ´°.«Wb¦\~S }ªÆ­M·€“PÔÂÓO}—{–xàÎ]ÕNáÍ"×®ù Óo¼±ñ‘¼Á {€%#‰3:ºoï9Ü>l•èÊ$è¸ôGü¾ÜÝRØ¿u@ TÚTís‰ÏB®ã©¢˜êÊ7ÆØøHÆ …uñ4Œ>Ÿ*Ê]·aÀN<ðyi>ÏJè‰ÒǺàÞ|¸|ûéÝÕ/GGp¡Nν™’4%´°.¦¤€%7uë_«e -ÏfwÙøèDÏfÃA鞭ôÅp¥h\ÍfÕ#ø¶u_Ûßð««¡Úv¿\b—H'WÞ˜iã#™éMX£ F ‹=Fr6>Rha]–)ÆIÌMAìø°dSÕß©Cïõ÷´Õ™e£®Ý{P຃ºã0Ëe…Õ)”7#µñ‘FŠÖÅHiDbÉûŒ”ýß);p­æä‹)KSEþÊAø8#õ'¬Q†Ô¹Ÿ7eØøHe …u`,K)B¬ÿZfw1Ú²v¸Ñïj±Ý9ãü°$!Ü_ŠfÃ#§)êŽ9 1î¬'TÊ0wj܆õõ£/~]+ü¨ýøâ¤l×°ýf!tNæÍ.l|¤a`…=`"% 75«[ ´ŒCÎG”t(W9y°ö ‡u5ŽIz\´l|¤qb…=`œ±$‰4-_·ì8ãÄïôº\zÜ)âÅx¾,ªçcÖ½Y¶.ýü:ŠéL½Ù³m“0=[„ôÐeè?ª®,5ø¢ý#•µFò…µrÁT„“®ÿÐ÷o!ÍßçôÅ0eÓ [A—®“roK\ ÐÂBâJ™¬‚WÆ"×÷Ö;øŒ¢þs«ÅÓemŽtêmBl|ä„xÖ(ƒ)ËgþŠiøHexÖ(ƒêDÇ›2l|¤2¼ k”êŒÃ›2l|¤2¼ «•AÓ„$ôEò.V%nýà¸ûU/¡ñFÑ‹´›*§$c;ÅDýÐdÓSS–H•’ÏFÝ›ÑH¿¾Í˼.̇æòûÕûû3¶ ŸWÿX}JÃÓ'ýϦèN0›ïäg4>}¾C°“O©’¯;Az¯>bœDÂ]8_¶Óªþæl)4}áE7„&$]ߊ}Ýfí²1C–åeuÆâSÓõd­Ñ‚™$jê$‰ô|Þ~ ƒ‰ú ”D© W#çú˜¸êý,¸Vꃑ0Q?ºkĈA¨Ájhãí^ªKHÂFÚ¥iZ?fåò>·ËúŒÊSÓµj©1I”mò|qõdK€×ϼýè(Þ0æ!U¤¶ýn³Ù®YÍYÌxèÖ¬+éeÌ!PµfH¹kÒ;­'ʬa<ÝÑi¯ÛïA@Ó“Iõ• Núw˜žŠ·ÄúB…:æuÍÒ³• tìÃÓó¶Îº›´÷›âò¬Mñ¥@¯Ï¸Jººÿ\ŒB¶ß‡xþÚ_>’w=vm‘ÎݲH…è?z¼EÂ0Z¤3ÄÚÏl7)+·nÙ6´væ›Pÿ}=æó endstream endobj 5125 0 obj << /Type /ObjStm /N 100 /First 971 /Length 1213 /Filter /FlateDecode >> stream xÚµXMk]G ÝûW̨ÞÌèkLmð®Ò,Úš,Lú(…`Ûôß÷H®M“ÚEÒEòtuÏ•îèhFçZûÖÖ›ömM4~½í¼^mp:v žÑ{›SÃmzzfã‘n¬; iÒå †6‘ô î–0¼)§g5]éÙÍfxFoæá£ùHÏln·Œ!m)#2®k[ƒW^éÁ;wfDí0<]xû1¾aÖhø7Ú°4}Œåö‰øS` |}á.ïw½ Ù‰C<ëñ,#žIä`ij9O8o1|%ñÖLŸÂòÈÁÖÆéCäm‰[möž¾ K#¯ äÁ ,Ô<þƒ5a­ô1áô ,OŸ¶És ‡,KŸ·)#qÈ!Œ›©=HTäР~ åÔ>ä0NrXÒ¯ÈáÉ?L÷ŽŠ+;Eœ+[@‘c÷`—sgrìì{¶Í=ûDóÈF0•`Ú°ŒXÏìÇœÍ` –¦oÃÊv@G²d?8rH6„#‡rú¢CÑòÙ²!õYHáHæ d®Q4G²µÃçH±“|ÔÝÏ®+S€c Þa1,OvÁœéÃ6˜æÈÆ„3ÇrXÙt ’Í´6¬hºúcã„'Êñ.¸]A ºLl¦9ÌÓ‡>ììüüìðº]¢o;úm;üøÓÏM²5Ùhb—^úøñýÙ«WÿžJ-U!0_w&Y£ Äà¼^ƒÀHìâtªuS+‹ÍP³“z‘tÙ(r"CÉ´È :¿ENx3ÅW¯IîEN°ibÙ:­ê+˦‘Uó¢-Ey:íUäçõYä„»Q·âçVŠéZ/¡5°í]c”Q/cÐE0Ž#™Å}@bÅ2C,öb™q©|Uå‹›ëûv~Þ¡süᙋ c=Ú˜ò1Úï„Byº…s|çÂÞÜÞ|øáxß.ÛáÍë‹vxwü|ßž2½ûã÷#n\ýz<;|‡¬Çëû»˜WùìðöxwóéöÃñîa†¥ïûã/¿]}{ó¹]FFE—„DX‚}¶ß#ßÕ-‚à”}Xëß—zçiùߌAmù¢˜Üÿ(Ö迊å6‘¥ ÖMWÄrÇ6šEp_’´¶í¢©^F1Èk`Géç*‚ óÔŠ•3Å<E¬`œj̃xË ¹MÂ\wŒS/r¢óth¼0OµÈ‰º‘î"'j˜§ÕÖWÅ<­ŒÓYä‚°¯Šà‰mÞ‹œàSŒ–9‘½i­"'á´gqS‰cžVKñK½9üöê+‹RßEN„1N¹È † /r"cÒUN:Îh-.w§¹‹œ°ob.n*¶EìEñ DR¬Cˆˆ9Á—!¦z5òŒõ"'< V‘“¹™Ë> stream xÚÕ\ÛŽ7}Ÿ¯èG XÑ$›× X¬=Þ$6âÄ—ò0km©å¢‘ƺØÈß§(²5}‘Zì!¹‹ wKCª><,V•8ƒ³/Î~¾zqsõì'‚E¦‘Td7óŒ $tžI WI²›Yv;º^ß—³ÅøãÍk3Zf F‹ÜŒf’"Å$€&Æ*Õ虽A̧®þ}sõõŠÀ(œ‘G ðÑœgÓû«Û8›ÁÏ^g1­²ï‡‘÷'Ñ\Àý2ûpõî ;·±AJÊLÂUbÖÆÊkXLk¤„:bEÆ K‘I¦cºFÃX΄RŸ¡åÀχ?û¦XíçÅt·ßŒ‰•›.«”*ÄE$hÎd-^–cÂGßÓ²k=×#Yg˜À´·¬ÿVÜ—§´DgO±Û€ ¼”:5ý†|)¸'øÙ…0 RQ‰0—HÂ:ø”ALj;Ïg߯”ŠÕ®œÞõ(0†ý£ë¼½þu"ó¼G~1LåW7ý0]ž´|à`Ë]×,P~ ý À¨4H9’¹Š£A k–Ä Æ°Ô`Ý«AÖ£Á¦¬›>hõhp°å®‚ç:l#Ž‘æfo7—úö€Ù’%ÎjÍûœD Ë(ÒJg›2›×rƒ&Ôéw;ä"Lä• LÌèP|›ë´ð«¼ÆÇBK MuBg äd¡4d4ñÉvö¸ù’Ù›÷URL\šËjI±P4µ«ñæn±=¬ÅóHÙíD`<šmß\Êvq¬/æb5+áßÌoôní7n»xXov~ƒá™þò„]Ü?,K¿±¯>|šnmy2±×wì/Ç ž›ÿÞ½µï¼½~sýê¹½Ÿ»ÂÞM‹‡Ý~SV/6c Éà¶êf׫nœM(C¹¨z ûÝÝzóÃx’ƒÑ›rµ ·ÅtZ, ûâÇÏöտ曲ܮç;´>ôh¿üÓX0D" ¥üòîØí·ò»y˜õæÏm·¤w¥4‡j=·‚xr9†aÛ9cDžÐÓ8Õ׿PÌ+ʆöµ£¸Put>øôµ£X¯š: ëý}íáv;óo&W÷·c.·=AzÛŠ!N‡L)„UœÖ6Ó͵wmpéi(F±\ɯaÚ…1Î!ŒM(VçEŇJ„ LÀ=/Âáv»"TØÛöéaF%B)¦qzÛLjH¹¯cX>аnº!¼W„1|8аîöۡäwÚÛOÀ¸”1s% ›ÛŒQH±Ó5·[øa)p:g9„=®¹ÝÂ$#™³Ž Š«#iÈhâ’‘ÌYG†e+Óõ4[ød$s¶"ÃnÆÿÍJ1—½©®UŠúd¥¸Â v3Nq³B|_K{w³¸wõÞcr¿­jÄW >ùìåizª@q¢ |Y¬lÙw}·Ylw‹bu±Êûc¬l•‡ìëßWË¿,Æ®ÜîÊ™½_;\ëÖD¹Á¿­]ÍùáÍ[{³-æ%:[0æ„#F¶¸0 ›#åPâÁ£Œ¹Ñ"'C Æ(.TÉRß‚1Šõ*MjXï/‡ÛíÎ?¦fi†åêž ½¹z†Ó!…*‡(©:Õ¦9'í$¸Pëñfœó‘ 7fù–ætÊã'•éJ˜ ¯lðøåý„œf ã•.Æ76"ŸUæ`ÃaR {L?Äeaz‚ô 3£&T>f:¢(SAÎÌh eÆðê(ͺ[Giö”–Q¬µY·~Q›ƒ-wÅ)ÄèÀ¨é Ò/ÎŒJœB"Œ#…M‰‘PQÂf ¯Žâ¬»årÂeÆ0}TfÝôEe¶ÜU¦‘ ›~ ýÊ À¨”ÉÒ,RØä ‰{.ýÎóTø|±ÙzúR|+Ëâ³ïyóÎB½¬r)“~kÒÂTy°³ƒT®"ÔuÁO¢³³ð}±\z® OÄý¶«FäÇL¡’ð« ~à ‡:{~ç#P©á*Ý’È;Ÿ¼úØú8Gš¤;xß”L2g C®Ò‘ÑÄ$#™³ŽŒÜfñÉÈhâ’‘ÌYG5¹t:.ðT¤rµb#Ìi‚oØOÃ@ºû‡-|þÐÆßÂbõ endstream endobj 5264 0 obj << /Length 2059 /Filter /FlateDecode >> stream xÚÕ\ËnÛFÝû+tQ ˆ&ó~mQ'iƒhƒ8Þ¹Y(­‘(—’jôï;Ô2‡"Ǥ®i6¥# Ïs9<|ÜâdžàäÍÅËë‹ç¿,ƒŒ¤2¹¾K„DÒ°D»U$¹ž%7£WëU:[Œ?]¿+F«DÛÑ’£¹¢HseÁö Wã UzôÜmˆ$Å^¿]_ü}Aì(œÇì®L$·«‹›O8™ÙïÞ%q£“‡ýÈU"F”Iû÷2ùxñá—´±O_×Uà‚ Ã)$"ï‰T{&7RÌ-O<Ú.´ý~Ïx2qÛËlº\ÏÝ߯Ó1£·éÆ}p5¶;]¿Ø½žk"*aê2âdB9bR8—»í—uþbÈîó]>Ý.Ö™—³!mò–Ö÷ÅØM#”^¸>Pm(Ù€ÚZ!ŠËdrCûÉ}9à8|Ýï˜ÉÓ»4O³Ût¨6ñ!âùèã}„’mñ‘âÖµØ6Mñò ;Û8[ÜíEß.¦Ë¡²ÛhŒŒ'»”J6$»´W^º¼FzÉ~¿Iw³u§øå¨¿°ÀÝGÕízµj$û©Ý‡ôÌ!BØ‹ ¦âèã „’ (8b´¼ãJ{¸YdóeÚ¿{Í¥Ù, =Â¸Ë©Ñ òñAÉNPœ!&«<À¾Ý jšÍŸœ¨ ¹Ñ<ôñBɆ2FǪqrÚon&?#ö çºEöé0𢩆êžR¤‰þŽ£vÙ0š>>ÐH(Ù“„ -Ìÿ,Z1ã_,{ø0{Àdë!¶CËÕPVC24Xõº“¿©^–|ú±rÏ#ºk1ðt€i—G£,(ÙîâaÚ Ã«§£:fù´žL¿ã R.)G« XAÑÈ–bH—q£‰áãňF¶C¸€M (F4²¥Ü¥Àhbøø@1¢‘-Å`ij ï‡vl»ûmæÈ¨z¿ y¢ß†žÔoCC½6²¥×æ2›¥ùƽ/ýr¹^ÍÒåÒýë§éþ+ô¹üô×Ûu¶Í×K´Ü~A›ô¯G‡¶ôè<ŒíÖù×Mg‡ŽqëÐa¸·Ñ)+¡§C‡ò"¦íÐ9 ƒê-ô:…>:g™¼z½>y¸Cgø´Çæ3[|aˆ§"z‚;" UÒbY8O‡¥)sj‡ÎY˜бNå±C‡ÊñÓʱ>}îÖîŠ<óqER ­hƒ!ž8áQl·†Åkˆ ûVÕx)¼‹ñÈ–bèÂÆx)¼Lv@O)Z2%=¹'â=¬'‚(ûeÄ—zø@c d[lPöä@¨…æˆb>¬'b1à­‰õ©O[(ì /â=!là-„’ X(¢\ ë^Øe»Íà÷C ·“›xWŽ | âP²ÅETËa ³émó°ùí•^q—«ûÞ}¼'0MÔgîg—ögO× ÷˜Å{NÚÀÖ ”l nìå£jØ{ŧÖÍçÅýz9ÍOpy—µìÚÃeªޏ8xð@T3›Î¥öb›ÅåC=„PßDc“<¡ñž6ð@É q\>~ vy4š|>>P>(Ù€|X£Ç0¡N/`5´€M‘Dã=ÿóáaúG£ê”Ð.ÐÅR‡‡)¦Zn_ŰX˜Ÿò?¼ú8Å|k endstream endobj 5230 0 obj << /Type /ObjStm /N 100 /First 968 /Length 1258 /Filter /FlateDecode >> stream xÚ¥XÍn^E Ýç)æð7{ì)êªìªÒPuQ•O©jP“Jåí9öצA½ ‹äúžœ;ÿŒÇÎäm­·ÉÛ›Îx®¶ó}7£÷ƾCà6††0Ú°D¤ '¢Mf"³i×+ÖTÁº;9«MI¿–@àÞl¬¸™'2šs"ÒÜѶz"³­)X™­­ˆ·­ÉÁ–—‡€=w6Ý=°Áy$6 YbÒ8tͰ‡ÇLlÂÞ> `$MÌ!íä­Æ*‰A‡®c‘ ÆdÇÓƒÝì¹]Á‹cwp"¯tŽ€·Ó;X‰·& ï¼ÝàÐÀ´CJ)\Îé"…Ï9}“ÇH'©B‚— V Iµ!†›Ô ¥Ÿ` >Š @#~"͘0Å`6ìhB«qÐ&´š%­ÞƒVŸ‰A™ï ß.M ÊÖJ”mI Êv&Œ‡g³)SG©“¹$âi6lÈg¨0HŠˆCrHÆ!-$[O Ϙ÷HÀÀ ›&6 ­HaøM\B,÷Ä lŸ,K :6':öLl#£{`«Gn¶Rš‹DPNs/½œ8X/Ê›„Ž…ãp9*HT½œ•µpDzbÐq9-8z"•6tÌÌ8¼ê\‰A‡!åâG-3GKýêúúêô´½D2:Žóóvúñ§ŸÛ4²È­å4˜wÞ¾}uõäÉ?“Ýh"ojd›dH­y*YuarÝY¹"y0-®™;E†—Ⱥ7-„¼F^‹6ò¼Fv§]uƒz/ÆDñìÕ-뤾‹1QQb)ÆD‡P·™ŵP#w¦¨S%²ìNcc"¾ EªH¶EâÅÊtÒ¢çP)ªb,“f¯®<”p ‹dš«Ü÷N‰Œ:HfŘ D“÷bLP˜Éµ\¢´¤èg\ô´¼èg4´¹ègä=íYô3°¯+ÝÍí»ûv}ÝN7Œ+ôÓG½­Ï2G×óð ]}~ޤÏ/ß¡}éâþÝùe§gïoßüp¾o/ÛéÙÓ›vzqþxßöñâßÏøÃë_ÏW§ï°§ó»û»h $¾¿:=?ßÝ~xÿæ|wiûþüËo¯¿½ýØ^†Æ¹'ÅÕ½õ|¿‚¾×ï±Htþ#ïD_öào%ÀòEýèîú û“/‘U¤G™uL6r®q fø¬’—’ïQ$» e¥H¶”Õ"y2RvÉÚ‘²V$M{ÝŒf•¢a.‘çBš¬"YQ­º U"ju×b¨Ñ#R_ÅP+j5b¨ÑëÒö"9J™UCÉyQô:däE1 ˜‘ųŠ)ªîgÞ£îgLtu?c$¶â‘â¹iô¢Ÿ1RÌw5²8ÅÐñ¯o‡bþÕ•ð¥èÿç:¿|Uçmüï:oò¸ÎIXô·uþ1ûsé6”¶£éàˆl:òY$c壿ò,Œ={‘<:õ£æòÜ71½9)\äbÈŒÕÈ2ÇQ{HÆãuŒ!­k‘Œ)S¬j ¦ÌãàˆŒ)Sµ“˜2ucSæ,:#†ÌéŘÄi\Œ‰žåm̉g1&ªèqdÉ"ä^  ô8\Œ‰¢KŒÿÚÕÈ=N* ŽC‚‘‘ö*†$fÌ>Š!‰³[1$‚Fks‘<Ð)ûãjô'~¼à¶ endstream endobj 5309 0 obj << /Length 1970 /Filter /FlateDecode >> stream xÚÕ\moÓHþÞ_aé$”HtÙ÷8Žƒ*-Ð"tê¡Ê$nk]k—Äiáßß:»IcçÍÛÉ¢»O.Îæ™‡™gÖ³3nqr™àäÍÞ§{Ïþ$X&Ierz‘‰¤a‰2öªHr:LÎz¯Ê›l˜÷¿œ¾­W«DÛÕ’Õ«¹¢HseÁ¦ ×ý}ªtï™»Iêoíœî}Û#vNȃûU&’ÁÍÞÙœ ígoŒ¸ÑÉýtåM"F”Iûóur²÷a{ÚQÿX_Þ,"3¤0O×H Z#×÷)2Ú$¤^m’Q–\¬EÚŠï™7ñg,»XXÄ’ÈP‘¬wS–4çŒ&>ÐÑÈΜÁíU<•ˆîít3°æê3I/ä†w4Ʀˆt "DÓiR̾šœí“:YÆ‚J—6ûûîz’ãr”ö)îýpwæK†£ü.ÍRr1q²O9bÒ[|9©®ÊÑóþ>#¸÷1\å™E¸wp×'¢—²ªr7>÷5î¥Å¥ûׯYŸŠÞÃtß'Ó_ü Ê¾¡Ayó[M¤¶L2Œ:Ë'UZMÆÞrV¯ÿ~›ò›¬¨ÒëåmA¤•J$gSµ¶¶°-ðÚ£RÏ·…cP„•L$³‘×t†]m× á!œÈb,¤FTX XÙIiœ[Þ¥Åä"T“QŸèž‹aÓ”jd3b7h-yÞâðzŽ»|-[gFXÄYç˜ØH´¬¥7ÙªÇA‚?Æîrü-„Òl±;ŽÖ«â_{_IÑ„›µ©€aÌtHìŽBUpð*RФÝï\zºÍåÇýíÂô\‹¶ëml½ðvav.¼E³ã•vç ¶»,< ¡¨†m^á[žz¢®å<õ¶Ð"jÁÕ‡ÕñÈzg(>%ÍM| 3Àd§€£ËÄýðqV Jà •P¶:ÐþLqP Ê¡ú­³µ‘ĸw_Žþ7—6Ø4óÙÇAÚ+‹Wø¶ðq“ ‰ƒTS_¥½,Òëò²[òâvREŒ˜ H)/bM|`ÄÀdC"f¯¸>U„F¬œTqCÆíC‹¨x!kâC&2.ìIÏï?¿ûÄˤZèxñjâã&/[§.æ ¯›´Ž»"eÝeÇÐŽ'··¥=\»-ÿ‘U­ŽB¹ÛAl)iLÐÑÈzgWEsFèŒhd½38CDÇ;è´ðΈFvæ ŒˆÑ?uŒÆ±@Œ™Å1[=F“ÛÇhò§Ñž\W/ÖMÒžü"ù‹Ó´'—Õ‹Ý Ô¯ûÉÔ“†a¸Acq%v2Pcµ% ¨í„Âl ÑàÐe ¶ë³¹FÃúæZ¸Ýåø[ª$l Ödã@ ‚1Ó¡MkNÉNjÌþ×êb:Ôvbz®¿EÛrÓ@m'fçÂ[4;–›jáv—…g!èfˆí›W8Æ–çôYÆíz F ‰ZzµðaÕF<²ÞÚnu:ÞX …tF4²ÞÒL{1ÑœÑÄ:L6àüOE‚ˆGw©JX—Š ûHñ©-|`` dW„A*ÄE- »ù _5Ÿá/ý©s÷×v,¦¿uØ-H_'{òåE·uÃl^´µš2c±¡ÏâÔâËî¹Øo‘®ŠáªnXEL¨ Õ r ãˉ3²c¹Œ¯»N\þz±µ/ÓÄ*L¶ËÖ?3H2? 8¼xÜV²¹ÏÛ]Iùx×ÃÀÛl_ä­a`ÝÞœ%ÕUDZäE>Ó۵K…-¸ã-Zø@í‚Ɇhמ§¤—nç}mÅ.´>ºå¤è8G¾Ï¯¯;&OGã“ñ²l»Ž¦í‘ qo2ÑÂj&Yï ÌWñ&-| 3ÀdCê~,‘šuÂNŽÎ_ýyø¦ë+mãj4€JbÜÉ#VlZø°ØÀÉlnĤ±o-½iíŽ ÑâÑÄÆL¶K<ê_Óc5sŽ4÷/¥e‘>ƉrÕz4Ï6ñžFÖ;C¸ª3š3šø@g€É†¤½´øT†§ýŠ×CòžOK©hñhÀÃ¥’ô‚Ø[êñIÏR4Þ¹³…tl4²ÞÔUÑœÑÄ:L6$éF˜ûý0¿Ì«´ãabp•Evýè´'®Èˆ’&>0$`²!™O †´fu[ãq•ŽW5¸ØævÃ0/»ö¾ºóëx]>Ýb+-†«¾Ëºië¾™¥ƒ«®‡áêj•"7[ȺJeP‚„¾ìO°«ö¢%F˜`²!‰5"³×j_¶üôÑ’aHëxÇË&<,Š`ªA4 Å–Îýç¯Ï?|:øøW`ºhW´Ærsæf0Õ7k÷rƒ«¿;x}x~xôþÓiKúîºê½pËϽ,úw^þ†ÓŒÌ endstream endobj 5351 0 obj << /Length 1959 /Filter /FlateDecode >> stream xÚ½[ÛrÛ6}÷Wð©#ÍD0âBô6M'MÚÚ©­ö%íxhŽ5‘H—¢ìöï `*R” FžDKàÁúìÁbw Âèc£7'?NON_#È"Ã,šÞE”&∠õÉQ4Í¢£³b)³ùø¯é;=šG‰Íb=šp ÂX=1ž`žŒNÍbHßur>=ùû©Q0BÿÏ ni4[ž|ø F™úí]IôT\FA€c¦®ÑõÉo'К  úR¼ÙDއ$â$Œb¬¿Ç@$"Bz´ˆJÝíD:ˆo-oã7VºÌ°‰Å€À⌭ˑ¹¸j¼Š¬Ÿˆö“vS¬,§bzùëù«·7—¿Oßÿ>­½Ô?OÛw–á˜+&H8†Ûøž 3Ö’àFÈaÈhã{’ám¬‹Ü„j7B16z“ù¬ÈdÙRšúúkóÅaÉ! 8gáXnã{²ìmìE€:k–Ïeùo{5oAE& ÂÑì>Ís¹p¼\¯*·‘·Òqú"¿›\—2sŽ+JGìR¦Ù<ÿØÕpÕ$ QTÓZßSkÁŒ5d(ƒAB“`dtðýÈð7vÀÂc‚D˜]xÿ¤Ë‡…³ö39pËe‰šTˆpnhã{º!˜±– ^ç1Á¸hÁ{RákêAr 0NŒ çù*ß{dÙ;ü»ÝÃß^\_Üœ]^¼~û¦{×7ã J”ÈOOwßÞÿ´š¹ÛšQVåz¶}Ãá¥ÃÔ '—6¾§^¼"Ffâ(Ál«)Ï vÀóùzyÛÉwº¼¸s÷ {”düR¸Ûœ£óû-RðÈ1­`Ô¤ÃÁtØÆ÷Ô¡·±Ct¨ŠÑQ2ÌÒ*ÝRâWûâܼš§‹Çt±–=‘ë|íín’ÙždçÐE‘f®™ð<¯ ·‘}5—ƒNcSPÓißS§¾Æö¨C´* 1µ²Ü'Šl]v«ƒeOzÌF†€`À¼§ïéoc‡Xà£"Èj}›ÉÇ­Bu48zØ.×›‰æ³Á©?2uF0··ñ=Ýîmì·cHåvÝþX=ÈÙ€¤÷ìêæý˳Ÿ»wìÏ0¬DnúÚ-êçðÅî{_^¿¾¹œþt~Õ3'rØ®öMî <ÈJÂõA:øžÂó5¶Gf1åúZa @89¼¸nÌŸ›_=B…©ðBy¤ƒïç‘pÆZ2S½#£ïI†·±â"M8 ”½Îê§w7YqÓ!÷¯ÙÝV¼újXÁ5Pý#gëê‹dQ”×ÅF0Õ´à=EÊTË3 n0*Úøž\3Ö’AM ŒŒ6¾'ÁŒµd“X#£ïIF0c-1„l”E `Dì<ޱ»ÿÓž¿H6NT4A hbŸ-PÀt)Õí?!}Äb%ËyºÀbsäb21Ÿ¯Êù£*Lêë»1†£Âþan0×*ŒærVÉÌüyŸ–zd6Ftô”šä¤{>FL@̬i/×Õ}Q~=žÄŽ^æ*×\), G?.Še&uÊ©oReh2õë*­Ö+{Ó<77drŒéèQÏ-ÅÃRæ•c_PbL}ü³_$õj5tðýVC8c-ª®'0\QÐÁ÷$#˜±– ¤CC¸|¼ƒïIF0c-ª#I¸|¼ƒïIF0c2b@¿è–³0‚6· Ú¿e|’‹öfq­¾‘U‘›¿2³u08za¾HíRgûœ{{cÉ6vœ§r^©k5|µo¡=›H¶:¸e<‘žöÓÊqƒˆýñæºçÞ bH ød§ƒï§üpÆ2° €||ÐÁ÷##œ±–ŒD…€-û¾'ÞÆºô(>[ÎoZöÓûùÊ­ò·QÆíA™#fê8u1[ë´Ôõ9r$ÈõÄ}ñä6ðÿCÛ®¤º²5¸k‰¹*fH¸²|ÏEàmìEÀiݰ«Þ4+™{j3T—ŒÁXnã{²ÌXK†ª W¥tð=Éð6vˆäCÑæÍŽÁç°.ôØÕ±ç¸±*O W1uð=ãmì€Óò˜(|jû*y‘޲ªÖå0\ùÕÁ÷d6˜±– U<ð€;N Þ“ŠP¦Z& É³‚QÑÆ÷ä"˜±† $Ì~ŠŒ¾áŒmÈÐ/ï}Ù¾6ÒOÔºÙ¤`ýMŠÕãM–?túט‹óå­ÊÂu· é]_ÿ»ªäre›ßo9½ÕäýÙÐîÃUq+ËÊt¤¯g÷Oò¶î•¨¿¾-ëŸ~XÙoA&¿?Ø©XçŸòB÷µŸòí!U ”p®<7/6_„Œ7^„$B€DíC͋όäŠ û Ô`5”R‹`·²MjYT~©¢:ièý5Í×wé¬Z—c”ŒléÖâAïJóÏbŽ à¤mÁ«ºoõùàUkîX­1HŸgn‘Zíí¹/Ò¥ì{Ve¿äˆY·/ôiñ}H“$és{½+; ˆèAÐäaêƒ`¥Ç@˜ föHO¿yb{ &Z¨¥[G )ô²¶‘b§ŸÃšF‡æl¥ÚD¶[ÏaD#È #THôOÜhrðÄ[šä*êcêφC4ûGÏó$ 9æ5óÿ¥0 endstream endobj 5392 0 obj << /Length 2301 /Filter /FlateDecode >> stream xÚÍ\mã¶þ¾¿Bm æ’ßT´ErÙ\°izi{¾¢ÀæpÐÚ²Wˆ-mdiw¸ß‘Iù,Ù²©¥ä“d›zf<Ïp8áƒe€ƒ¯ÞL¯®ß,‚E‚Š`º¸@" ÁU’`:îFßçëdžŽ?NªGË@ÁhÖ£™¤H1 `Û„ãñ„J5ºÖ"HýÔÕӫ߯ŒÂù* y0[_Ý}ÄÁ>û)ÀˆE*xÞŽ\œ`DC÷«àýÕ¿¯°Q£ˆ×·õåÇ}äIÌÉ ŠX \¿Í‰@”°€¢HEA‘‹^$[|Ÿ(ÒÐÀ¤íŠo,ÓÆo¬`#aK ˆF•5Æ1”ú3FßÑÞ”5Æ Â03¼£ïh oÊc`…fþŒÑÆw4†7ecpDˆp J=WÃÕ^T6,Â¥Í ø‚rŽ›Gƒ» ©Ãt•¥ù8Ä£—®ãöd¢¯7Eú”ú~1¦x”›oëñ¦|NVúïnyy™˜çÅÇY¼Ê—úuœÍõÍ<]¦elžI¯sHô‹û<.jÐù5 Íþ²„ƒ e(B›ïªò!/þ2ž„þQT³‡4K3@âxtgiºÒ÷[E6Ë1ÅÅ܃·ÿº{ïÛ¤LŠM¾(QQý½\K"E!Õ’Þ—qYmŒ¤*û-ËÇ”ž³ÃuM¤¤„ ÆÖµpo]cQ„”P»uíÂa)CÄ89…£a,çB{Ù7»PàAàIX"OúgœU‹xVVب¸Ç%(U&ÖeT !C’ut¸IÆ„žÒYr(=Œ8 ^H:âJGú»xËkâì5rùz‚@àRêÿµõ¥à¶ ,:‚QÛr7 ã‡<"0^ ¦ñC^S«ÌÌ|[»€‰A½.xé ¶Äï"^¯^Dvã€-ÙuÀ®ƒu¯}àƒ5‰¤›Z‚œôAŒÆe„BF.ãƒ*„RñÁKHßùà¾x ¼„ìîË>Eú @FÖÒW`œÉå8—`î¯ÀëAf.¼eÎ|·ÌÙŸ²Æ!¯WÆhã;ÃYÙ-`± ôÍšüž˜]¶DuT«5WàÆ\OÇéCºi%÷‡Hî ŒG3H{íFnªÇǼ(-q›ÜÞjp]XÜ–Vco;ÕÍèÚ¼q8~ôKw,꫱K;ž‹´,“Ìnð"/ì.1il9O;üšiåaÊß´iã;Nge‡L* M!¹©îçI]GX:yž­>÷xÎyJHˆ|1o”´ñ)qVv%°„2i‹ÙCœeÉÊ’"ΖI—(×ëϰ¾ ¤¯4<=ÅçinAjxžLô·àÙwUuù˜#N”&¿».‹w˜$ä4“Cu>¯VÉ«½í<í ê*ýµ :ønÄ»+;€y1ÄXoéTEšYr—e\oùYß/U,ýÁ6åÙ<®âÏž–Γ¬LiR 3LAuCüud:øŽþæªì ï‚jÕ¬òõ6p*¸Ilé^'[]”‰en7ÛvW?Íòl‘.»+ÙvÏúd¬KísÍu\®”v¹ PÌs‹WßÑ©\•=áT’"ÁL_ü‹^îú]KOùOYµ¾ï¸|øñ4±æÙôè‚øÅ–7®kDo¼µñyó¦¬1Ó™¿7c´ñáMYcŒPçÜÞŒÑÆw4†7e1¨ÎA½£ïh oÊ6Æ ˆÓèíU‡J"ÑjU«ã­êÍý¼z±ìRxÿfróá“ý2_èëí»ïo§?èûéXàQ2ë÷N×i™ÌOµ¢ù‘Vô›¤Ø¶º9ý+/ Óm.“Ù÷«4«^& ÿdÿŽf9ª~k7œÃ# gxq¿Jz{ÍaEºö„Wï»aèþJH1 `é5‡´. †¶š/¢AÓcÙWÁ¦Ó|áM“e_øéFóp±‡ä„Ü­Ég r²Éç‚Ñ8!VHáè"M>(I@–aávúó Ç»„Ôãí‹ý½úïÂwŽ·/ÜÄÙ~ß,ùÐ÷B·Ø5âÌÒG•€¥5ò×Ú£ÖnhÞ-Í𦪱„`H`Ûb|G[xSÖ®‚ù+¯;øŽÆpVÖfp§9 ›gb»×±ZåÏÖûƒC›@qa©Gü§«]g¿…GEBù;:ÛÁwtWeí¶@íËk=9Šš_!LNo—|7`Ï?Í«r('!A’úÛIéà;r⬬Í•,  !´ÓPííÉÙm\QH¥Ç30|Gs;+;ÄÜP `δ¹ì,ö÷®íͯ *[1¤^îtðtVvƒ$D¸É´×ñ‹e÷!.c»‘Oñªê› [H"Èñ=!éà»è®ì1E¤9B²í o^ÛX!JByíïPHßÑÈÎÊÚYÁ­¤À(A¤9¯V®ÁË’¹Í7½ÑÑ‚wdÃUU2 ~–!¡@ÓæÆ±37[ãÿ­uîÆDœ» ¬W‘8½ý·Ë×7¯yè£-ÉBç•ÞXnã;Òì¬ìžE„hs$ãϤÃ3E˜©¡<¿æ!kž¹ÎL½ñÜÆwäÙYÙ!<×­V;–i›eü§šÈLçÂÞnã;ì¬ì‚™ÜþúŠâБb¯s8Ôɲ7ŠÛøŽ;+; … …ÍOÂfùz}xxÒ>í¡:£õfå6¾£••’†RŽ5±rSÆEߪ>ÏÏòçî_úO ¥ÙÐ)Btžìº6¾#uÎÊ¡Ž0Äš>ýfgŸî“eç¼ÜyþÊt}pvkûÁéS…³<+ã4³ÜR.m·¶7ñúqe½³ Þ”Oåœÿ±ËÚöPaº9f˜2ýv©Ž>r}Z¡ºªë?y~Š`]½x›"m|Ç)â¬ì)‚CıhÖì)qŽoçéPºÆðÅFÞ gUpQę܋VIïzÞ–¸¼~Ⱥðö'-{àŽÿÐâ¦æA\©fÁÏχ,°à¡Ì\ýkƒ¯ŽÙkþ4ëÿSS¸( endstream endobj 5306 0 obj << /Type /ObjStm /N 100 /First 971 /Length 1233 /Filter /FlateDecode >> stream xÚÍXÁŽ\E ¼ïWôÐÓvÛʢܢå…Bв(ÙHáï){aµ7à —¿Úzín»ÚöŒ²kMÙ­‰ÄçjÛãs7š x£dŽÑ˜% jl‰p›”ÈlS‘&C®`(–Ûxݸ‰sü OXT'¶ð jKâ-â¶\šñn{&e¶½ã%¬î¼ÂÐæ‹±0Y£?°,£°°W˜aa³¤ñ€å15bIŒaíÄ&N7X+1m$<àƒáCLƒņ±°jBpfˆ,`&M83 kÒš‰ÁÙÚ‰ÁÙæÄàl¯p 9%gnÉ[Ljx"<24Óay`‚ðÓ gaÚ‰1R‰MX+1iŒ8À¶ÆÓ³Æ2’¢‰Á‡x& ˜JdDáÃÒ¯bå•<ÅÊ;Ï‹GÞy^‚÷Š•}&«x Ewƒ4sX)ù C6ƒ|8ÏkЧ_lq½ þˆÜ†3X;±ÕpæPˆÁ‡¬ÄàC)°j-ø°‘|Ž`H¨!%¼5—„º¯¹ö‚‹g{&g{%Î’1ätº%´!oJšÃÒÀb¡Ø&X’DO©zl[x† $ [O wc¦ª¡E‰-ÂZ¸/”|ˆ%Šä6&ªI@y ‡³»k„hÉûêúúêô¸½À•›¸ÑÏÚéû~ljÝ@à±:âñöÛ7/¯=úG.ÔØ —¦FÞÚ »­‘—ôHxl³CªE²r›]# õˆ¾x p*üð;Plùµ endstream endobj 5435 0 obj << /Length 2658 /Filter /FlateDecode >> stream xÚÍ]]oÛ8}ϯÐc‚]³¤ÄÏÁt±mÓv2ÛI»;³@·d[I„±¥T–šØ¿”)·¦bÙd®‰Ì“\‡:¼>çêò^’bqtáèõÑóñÑ“WóH!Åc¯"ÆWI$”¾ gÑÇãå"›å'ŸÆ¿¶­E$ukž´­©ˆ‘¤Bƒ­FNF±ÇOÌ…pÒÞuôr|ôùˆèV8"?zз&,š.Ž>~ÂÑLÿí×#ªdt·j¹ˆÁ(N¸þ<.Žþ}„;³1R¬ýØ^^o"'H` *gq‹Ü~#%UDÚÖ*ª²èji/~g¹¿¶Ò¥‡M,ŽT¬àÆ I§ mUáQ¦íd)j”­tÀ«Î«ëÈ|xÿú(ú8â?+ÒyyÝd]«®¿¡ÖeSß6µÕVwñ“ùÂ2Ò¾“'šFN(ØØ{$nLH“Xû‚¾Yvݲ™Ì²/ù4»ÏóJâJwÌ‘0ÏYºm| Ý`c}èN0Âqlè.šÅ$«ýÿÊ­Ýô&-Šl¾Pº*H‚‡SÐÆ*6ÖGA¢nG¢VÁEúÕM–YZ§n-¿¤ófèù£X1W1ERÛL@( ØX±DwcT•×Ùò¡ÃŠ&I&ƒ‘ÜÇ‘ 7Ö…d©?ŠXw&¡ÜœÎçÐà娇ÔùRáô°ñz€uÑC)=¸i=$GDŠ §ïq¼âÿ© 3Ø\º óqDV|w2÷{_²¿?ä¦O®:‹U–Lf ¨2ÔT‘Cq,ÝD&¶Èø/¥/7Ii0m| Â`c=/ý/se$ž–‹EZÌ-™ÉEƒ±lãYë3zi†’uMT§ÕPÝ9äøEy׿ãƒwç…ï \brÐ`ÊÙø@åÀÆú(Gc”°µtÓ´¸œd×yá©_/zuY÷‡ÿb6(õóXÔi^,Ý’úÆqêc™.nçyqíÖZ{SVé"¢ÿ“Ñè‘4Œ¿ÜF feq/CšFש›l=˜«Ûø@Wëãê A‰Š×CAñ%Ç)9ˆÉëƒÉaãåë#GŒM’È“ ̓õOÙøØdöÁ±ñŠ€õQ+D]ãå­÷ÓQdÃøCÄcÊdì¡ÄëáÃÄ;¼lÀ”DŒ0§uƒÓü:¯SÇ…³¾€O†|ë+ž4¹x0ñl| x`c=ª&bL¸-*ÄŽ™«¤<Û\ Žôãóh+ ÒU>n2ó`úÙø@¡Æîuœ!]9…ºíÒ×s?ÓÌ$†Á˜¶ñLƒõyVE\º…¥ÄÕ¯©Éû‚±mãÙëÃ6Õ Åä/¿ÖÉb“'SÐÆ*6ÖGÁ$F‚DzÖÉK\;1éc0m| ‚`c}Œ ’¸«Jß¹Îñ¤Ëe~],²¢vœË*‹Ïyö½b´sڭȦuY=t"œa“®sè>Pc‡ æÖ0I»‚?ÝQ*½xó/|oE¨[Wz:|Û‡wåØéÛ?·:‰wtòþåÅËñÐtϯ"÷±Cþª¡Nø¾_E<3AªLmʱ{ø0Ç;œsS¥”nÓ ïþøÍ—ei2ú`,Ûø@–ÁÆzŒ>´ ,1wK¸]Ó5ý´I|0¶-x ÙPS}¸Bõèóƒ½l]O£æÞ¿í¾÷¶œ§U^{ðNáÁ¶W¥#I¿xä#“*Ÿõ¶^8x57ÅR0·¶ñ~ 5v‹kÖD´ØaÜÍì^o]fŽÙäÙùÅùå‹·ç¯Î^_êø~©‡ÒË_.Ÿ¿?;}ýÒ áî&«¼%e¦z &©”l¬K¬ŠuíƒeÛG¸k‚«¼Z:>דouö ålxår¿¦.³z „îï÷=jê¾`¾gã}l¬—ïQ†°ZoÉtõ8;° l¯L4sÝö@SŠÓÏÆê6Ö'ÏI("ÉãÌI1âºXE‰©8‚égãõ flG6e@02l| `c]œù»Œ±vjº~屸ʯ›*­s×ù´ò¶m»ôÕ– áæ»zø0=àÆºè±ž(ÀŬKLÆ®ñ~KY;ضÊ>7y•-SžÅ]Ze®Ij>½9lÚÓ,›t>ÿæë`ÒäðÁÌÆ:ØXK”6Uu3"Íí¼Lg™cú‘6u¹Ð±az_á4ØQeíÁs˜7e};o÷£¦õ³«EÙ.Løz¤XÁÒ‚ú#ÔTw %‰ð,ÄfUþÅuviQΚùk±-OÍ Îû]›ü?˜/Øø@gëã \¢DtSˆgŽ)È4]fe\]§(ÃQV¤“¹khþV6ŽÝg®uéHêj ñ†ÌÔPÁø€õy˜¾ÆþS>YZ^;&iÓÕ(—ÓU]°mú|Ç$tîšßMfÍ×Ë­¿`çK#Ç“ûoÕ8G`š "ÂMNõðî6ÖÇý(G”ÏúÃÏÿ@©ÿð[GËZ·vnM1Ûþ‚ÕŽñ`žOKÁŒíÈ ¦ðF†$#˜±†ŒX™²3=|áŒíȦê F†$#˜±k2ÚÜêÄWœéÆqHÛ~펔 ®ùa±õÛþ qD°ê§&¤=YÐäÊWé²6' ŽFæzj¦CVŸ¯NâÕ^—Õ?>\<~øÏèÕ‰ÄÇÏ.ÆæÛòÊ\ÏÎ_œ_šÏã®KÎé ÑãPQÎËëoæû7ù"¯ÍX×?4G£˜¢„ws‰Ïšú¦¬~:ég÷øyV3Àðñ»²ªÌ§ŸëlzóÏÕ84Ò?e¤Ç 4-Qóç?Zø¤Ö+kuZ7ËOçv“nÇ ôœ )DDCJ¨þ±ŠÉÆ±Š«x\~?VñÀ1ÂB»´l·¥°]ºµn«ã¼èÒM^¹Ôã@¢±tÚC:¯ø--š«tZ7Õ ‘Ç]æj1Çégä0&Ä E‚öl8ÍN;þ¾Ð`õžhò0;Pï«5¤×ûyºÈ¶«I£é÷¾þ‚í† :I¹Mÿ–}Á™+U[0ZÛ‚±öCAY±òRosC¡ã!ëžñ³ñ›žw€N¿;Þf¯?¢˜ «(6ì~0á»÷mšÐEÞ6<¦Ý í~èkÀ}7ÔTÀ"™7Äž1‘P€°2(îé уº —¨÷ðaH8c;2bö’p‰zHØXÍ $Á:Ê'ÇoRç÷\ÏÎÙºé¾8õ:¼8/¶œ]ìZFëÑYÇ“pÅRèPc‡' Qzw;[z߻ؕ{Ì#áj³>{°±Ûðt)…äz ï#¼n@¸£„Š"ÆÂmE±áa‚MõÐO‰Õ!útб«x:7o‚Äšé!›4%Ðþ³‹»/¶ý/T›h)óýOþÔü7Ö endstream endobj 5489 0 obj << /Length 2627 /Filter /FlateDecode >> stream xÚí]]oÛÈ}÷¯à£ D“ùþÚ¢Éf›z±Y´·(-Q2±éP¤íýñj(¯H‹òŒ®f³(šÊÎðÌÕ=gf¡q²HpòîìÍÕÙË¿,ƒŒ¤2¹š'B"iX¢Œ½*’\Í’çß•«l–_|ºú¡m­m[KÖ¶æŠ"Í•Û4$‚^L¨Òç/Ý…HÒÞuöýÕÙ—3b[á„üÚƒ½•‰dº:ûø '3û?$q£“ûMËU"F”Iûy™|8ûûîÌÆÈˆöc{y·‹ÌŠô,~gyk¥O»XjN`ì°Z$îÃ?¶¬’Ž'Þò¤íGE%2Üq•.—nÆq’‰ñùô&-Šl¹^÷š[„Wî=«úLw|0eýÆãñÑÇò6Ö‡cb–noÖÝ(«Òb‘ |¼!à› v—Wîòq‚‘]óæþ9dìÅ÷|òe™JûD<–ûø@–ÁƆ°Ì0”ú±Lž°|ÉÑ8&)%ãqÜÇr 6Ö‡c¥%–cbn×Ä–ãi¹Z¥Åìèùs¤m'ѼÜÇzllÈú…5"¸[À®n² lHÇdtœ/óuí‡mWÑò~½o<“ô;<ŸjÄÝ)ß¶]‡_yêËji¡£ék€ÓÜØ}I£áÒék]§U=2†Ç¨)Êûáÿ—YöP´Î‹zŸZþ>ØEV©g¨WWùb‘U~ïòÔ¯ám^x&ÏA÷×·cù­ç$QÚ15­ËjmýK|–¶)1ñV8°ÀƆ ,-ѪXÓ´ø|-²x~tÍËv¶ 2u¾Ê*À€ô \m2ªhŒ÷à„CM á[ D©Þ†CÅ]<•B¹óš­iuškÏéÑ7âX§«Ûe^,üZÛ‰=«îÒåÈz>vÛ{ßiu/¾‡´¥KN£i»7ØXu#‘P¶3ލ4NÝóÒs½\[A,!ëø²9ýÒäë¼ÎK_Aì XÙx´zÞ¬CÅ#\ÎM<}| xÀƆˆÇzˆu%Ÿap`åóÙªYÖùí2{Èf0ñlE±·*ƒ%æ2æh éã66dñä1Av‚¥l´˜0Î6Ep,C]v‘>>°±!Œ0‚˜¡Û¼°¼ N ‹, ”9Š<âR×häõñäE3¶svéF4gôñÎë£äGË âŠoŸëó|ÑT©èPÞ¶m~$ŒË b3À‡7Ö‡©­å "K›³ì.Ÿz¶­2»ÒW™g®3Ï«Õ}ZybßßäÓ›£‚ÏÑvͺI—˯ӠÐ.4&°>>P``cC¦¢+Á4·Ë2yLjM]®ì$1}JÈØ-מí«àádòr|e¼)ëÛe³8m9Ñ;­_•«,xajïGd¨G¨©!rT62]…È›Y•ßùÖ§Wå¬ñÍ·}'¥ëÌ»ª³g€<£ÒåÑdÓÇêllˆp¤@6s¹ô [¦é:ûö’¯ÊŠÒsæÊŠôzé;‹-Ïî3_Ⱥôtêf¹ 8…Kº¢ >>p€ ‚#:uty}ãûà¬ÝøyºÉ%ö•<›Ë}CÁëYó0O×õç½ßâ`­üüzX'^y#Î╦ø@å Q·¢$0K “(A²®mk߉­)fO>mþãå¡M#× Ç~Ÿ>ÐÑŒuÎàÆ%§±œ1À‡9#ž±3´K¸¢9£tF4c·Î Hî i‰(á]7žKÚþkwGï®Ùú‡+¤LsÙo‡ÁÃЄ´§m\˜¼Î«Ô¿™LÜõ­«šl>Ï/(n—ÇÍ?x3yûó¿&.ß½í~UÎÝõò§ï.¯¾wŸ¯.¤Í5§Ä®BE¹,_ÝïÌWyíVºá1"œL(GLví×M}SV¯.&Ìb¼Éªbf>ÿ[YUîÓêlzóçÍ*4±_dbW 4-QóËŸZø(dX·ÃúCÖͺó?\w…žÞ4/ ÒJ%Ì0+(3þ[ï+;À‡ÅñŒíœaWTiâmñà66`W£66Сç‚Üvrï:ëæÚ=n÷¬Oy¼Ò»4_>†0þµ Fì•ÅKÙø@=@¯ü0bÚEš“Ã;±^©_}k†·MèÓ^†)R*^æ8Àr66à„$Ãa¹=[µKO7ugýJ8ÔØ¥ÄËMø0wà p7µOû®†»‹fuíûØÜ&€A¯ap{ˆñy mD«ã-j}x PSCø³ù áÝC¾UúàY~NkÏCywé²ÉF¹SJQ".OÐØþ0oÿ=9„îî¥üÐs¹²œJ™ãx;$ø@å€ ‘Žbˆh³ó¾£÷kRaÑy¼gð| “ÁÆl §6›¦ìÈW©ŒŒ»‚ ~ßÃ17ù¾ñrYG@(°±!£LD·(à(sl4/÷ñ^2Ì8FŒÐßêD~¼½“RÖF£®¤lluÔ &ðÌ÷¾cÀÿã{WùÞ£xTÄ:ŠgC½M®MÃ}| †ÁƆh˜hÄŒ€œcN@t`úG££¤llX!Îäo~2’QÇbd€cnl#í¡f®Ôïùd$Ñ›H=w=x u@SÇk¤D $ˆ>y´lêð")Q.tŽFIÈ ØØ€¤‚(Ž„0~ERßåHCGswèn°±!î– ÉoV"å¾üqHGã¯äll‚"ÉÉ7)’R!|ùc.ˆŒÆ_ÈØØþ8ARÓST* u¡a4'÷ñN¢1ŒÔÉK•8´JI£½•–ƒF£¾¤llÈø")ÉOR£$ØEѼÜÇzllÈÃi,~¿5Jã‚ÊXÌõáaÄM àͨÍß.ø}ò4õI2þmWê¤ncôXÚ݇)hf€nµÛh|ÊšdwÝ÷w:¸ý2î=[¡¦ã¿zá endstream endobj 5432 0 obj << /Type /ObjStm /N 100 /First 970 /Length 1235 /Filter /FlateDecode >> stream xÚXÍjœG¼ïSÌ ¤wúo~@øßÆñ!‰ñÁ8K)H28oŸêr¼›´}Romí×ßtuÏÔÈu[ëÍu{3¿£íü<k«ñÜm¨6 `7»¹õÞ”5nê+iÖõ€@›Y"Öl''ž•Èh¾™mH"«Éì6_÷6G ÌmáC­-g<˜¥­mÛ’bm¯D¼qׄ¢™VÁÒ#Â2xxD»±p`ø‚ÅÆj{GD–˜"ÚɳƦ‰!‡­ÄÃ%Ö!Èá#‚ÕðÈŠrŒ,‰"ÇìáÕxÚ:x<%•Àð䵓7šôÞDdQ`ÔK:ôA„šs–Ï:¢¬V/’4A4ƒHÊÈafˆFbÞ$jŒ9ÌC˼PIð¾!‡¯‰È‘ch`Žc&†SCŽ9&r8r,N 9–'9vO 9¶… („ìÊønÚ5°æé+0­,‰ ¢ì¼¸ ä†({â©öä D*Œ‰h‡2@£8ˆÃV`9\›Ñ¡31äÙ(˜ŽáÈ1‘cfG€¢Ó£âh;TÀòuYbȱVbȱ!Þ@W`TBW ÿƒ†U¡ËÃ<0R@14hb˜èFNRhô/Z&…OSèµ0B™í‚R5D cè”&^Ó…ÅÛáêêp|ÞÞ »ýªþå׿ƒ&Úh®ë>¼=<{ößdwоª‘Í(vƒY•05®©Écá•{‘ì(FÛñÆR$ÛÆ+«ŒÍ¢skd™;D̃¢ikäîä\Û¶‘{Ql´<ßCIÊ’`¿ ±Š’`+£)EI°ËÒÄ~S#w¼3ÉØÉ{•¼6­^ÔOæ¢eEý°•Sì_52þîbåpªÐžEEóW–ƒºW+ÇJ½:S¹:S¼™¸:S¼:Iu¦xl’êL±cÓ(Rm’Vg u ­Î,Yu¦púQœÜ5rWŒIQ’-„søsî‹›ëûvuÕŽ/™¿A<ÛzŒáÑú?ÂlîÇáxxxÜñåíÍûŸN÷íM;¾|þ¢_Ÿ>Ý·ÇL¯ÿúó„/Þý~:@ÖÓõý]ß¿?_în>Þ¾?Ý=é‰ýxúíwßß|jo"?Žq‚j˘Ö~‹|ïnñlõ#×útùa—ÿ¶waò»žiœÏØ@¥Jv¸+r­Ó^\$k§.R$ó¦>´HßyìIl£H^ƒxÍ"y^°NgÉã‚u:KöóÖé,×.X§³deø¢&0Îý\#÷Ma­Kdß >Ä‹ä5áCŠšø„§ÉÃiT‡ÊÝàDŠ\S‘¢&®#RÔÄH/jâÜ)î2%²m‘UÔ÷ÚR*ØSÚÕÒá’G½5Áý~¡È…k黨 0Ø…¢&8aŠš ìBU“Îÿ²(‘¶SvQÜvIµ8T:`DfQ@ܼaŠ\Ãåe5Q8IïÕ'ÃIâ‹"NÒWQ«€5ì0ño†™c××U%_¸E%Û…[ÔY²^¸E%ó…[ÔY2ÎíUWÛëß_wÙÿ}³ã[ûKÇ·æW9>·/ßZOf[ÏeÇ÷”ý¿Žïù’ã;Çý·ãû&ÌÛF endstream endobj 5561 0 obj << /Length 3212 /Filter /FlateDecode >> stream xÚÅ]sÛ6òÝ¿‚o'ÏUÁoæ¥Ó6mêÞ¤½&žÉCÚñP$dqL ?âxæ~ü-° DR” †æô‰ °X,ö{J¦qo˜ÆÛ«o¯^ýBMÏIèYžq»5\x¡mø!<}jÜ&ƧÕOþ™\žMìG塯l]¥öeÞ½·{èg2{.©Sxí»Ä²‚,(<ãÕOœ¥ìUäß—çîy•iý¤¹Ÿ¦Þ7µì–k2é×á®Ï{‘Õ¦L“{6Õ‰xX¼,¦Ö}ü3õz.±#j : Œ¸by!êñå £bšqýæ÷¿ßýôÇï¿Ü¼½ÿ~÷áçÛ»_ï~|óæíÏzw¬œ,R‹œÅDÚÇ?S¤³‰ÕñU ˆˆÕlb«J];;;M(ÏgXOµ&Ò´záòK”5š ÑàÀHñçuÏÆŠl1Ýë㟩{³‰¤{ŽEl·=&bÌ'/¬£ñ ½™væna‰·˜üúøgÊo6±Sò›;TGGyôUO$ITGßj¿ÇÇ¥º‡ÅŠc1ùõñÏ”ßbÄ*f˜X,ÆŒ>þ™Ì˜M¬Ž2(‰ã;íÍP±Mï›2ªSÝ“ ¾°Õ™ƒîgµÔ ±fXJ0üó3ŸXÁ¨7 ˆK]Ì­®ã©oÏ–ìs“–¬ÒÎ}òǨdºÙjï^6ÿiª&ʲ§‰iˆ`2¿˜‚õñÏT°ÙÄNQ°À'®«ŽFš}Æ£„iæ!QSóœD|*óù°¦”Aƒ'Ü ìx½Ïš{M²ëN³rž³É7p®/+Ų‡~¦>Î%uŠ:úŸ7±"KÊô‹î1SΓ&{á¢lÄjÄ ¹nôó°XLúøg*Ãlb§hƒç(ÊPn4s‘8ªØ?ïetU§àšîˆÑ&ÓuÍO¼Ñ\žé¢¬¹&Se ™ê ],¦3>þ™&0›Ø)&à:Ä ¦ŸPMÉÒÒz§{á(¾»‹e0vŽ~á4:ÕÍï6IóõntGŸ:zÜßì“8ör§Tü3Õo6±SÔÏYtbý1Mÿf¥þço¬« u½[S$lôfèB<ÈÒÍ„è1ΓçUÓÂÊ|1ÕìãŸ©š³‰¢š¶E|OÀéÞŸÅ‘f±ÑM=ùc1¥hÚò2׃ÜÕõé—ƒ¯.hØãããw™¥EóuÂm"8æ ÐIôy-1ŸÜ<|³›§x˜²˜-õñÏ´¥ÅˆUÌ0±ð_Œ}ü3™±±È 'IJs)f ðÏcÆrÄ*fXu-ÆŒ>þ™ÌXŒØ–ñ:&í‹:jÍ6þT?Ó Ȩ8â=œÆ;…UTÒï ³*~„ñ±Lë´¸Ç_d´7JHúƒÑ¶þ#ÀÀñ·]Dbäxr2ü͈i¬­€øþáìÒ´µmQqU)/ä »¦îêë>‹ ßÂQ¤ÈFΫ[i¾çeòÕ¯Gf^H˜¨Ú^õ·G\¶&@Æ·&Fvm¹+yŽïe*;Ŭ¬ÈõÚµìÕ¢±.SV!}PéÊ®ûü`oiQ³’U5F}Á+JAìŠWÝ•-׬Œ} À¶ 9‰|r  ¾¤É£ÙâS Q¦[1¼*[EP³¯°©Îô5‰w–T+â£è®ñ Õ®‹qVnÖ'¾íwò‚£bX–y^)€ZYfG­|JLÓn[¤N?†ºG]ê¯`:*†ë@Zkô VGi¦(’lÀgôH€ž1±-¾­¯)0­djݺbÙöõE”axå.ª/$·Å¦ŠâS°þ6+ž¡DÆëãþ„DÖòóF»¯„^¢ƒÂÕæÔº©ñ%-’Œ­¨ÄyRÛµ-£ª.›¸nÊ(ÃÎzó«ïà%&4ñ»£ê5Ø@¬ê43’ãá*Šè^Ê¡$çá‰7@²9°?…­T$D ;ÇaµjÎr^>!@g…“C®ÙþÈ*Љ̅2¢5I¼# #Úï‘Y#I‡çûkÏ\Ý^Ó`õLJµðNé_¦iÅ8(ÀVjEÌZ<²³lö5Âì`ÙŒ)ºŽä+à{V0ä5ŒÂ´vr£À”êb t´'0‰íläÕ¾äñ˜%­[À·zÔ‹… ¡ŽÁ%Ú Ë\u¡·ñþkFÀ C« –.-Ÿ¨Ç°ç2ª*®¸[Wª”Uø1% ¡g^x´òÌM¯éªTð]Ñfs¸F•É¿„«ÆtçÍ5ðù1ü'z¾mSHOedY5êönZŸ]&­oýl=ˆÕû®6aññ’hÜeÔ—ñ¼w†|‡âèÉh* Þñó‡Õ#J¬Cüat˳ §!ß¡ës#ä!ûuŸB‘*¸Ä¦êû¿,ËnÁß®v©ñá°¢€¦m±G;…°ˆyž7EŸ~ 6¬~dL ¤©€`å`²Q|Ø© …(˜²`YwXzw^>|²-ß /oëã.|†\¢«7OØ…±ÑY}Êàž&èÅmq*Ÿ—·ÒQ¤ñi±O·s1È9g#Ò‘téÊŽáÈÞîNé“ ás¸)§ ^öŠEêâÿì¶zf ïm."l- Ž7pY}œ $·nhˆ¯§•­4Õ3:ùæÝÕ:8ÿê⦩•Ûæ=ËMp™UkAr"h÷“FL$ºó;þPå‹‚­÷i%<ø÷=¸$p¬^¦ç¹"_àeÞf]¢C HþÁSj<·¼‘´É9 d§Æ*¾Ž!þÑUưÂî’‚½; >Ã.¦M”¸ƒïr§]Übƒ"šÁ? ߘÖ;.óAˆŒÀXbž kóé¥a¬çeÅû0ÐuögµdO$,oµã{–˜!&V¢]‚b©x›àåLf[8Pï¢Ë`ÎY²/?UWÖ $0•`ú‡åþ–‘kl8„J(Ü"'—£ýúG’\ˆ—'Eu³eŽ ÝûÍ€x}É܆ƒPÆø%¤©â5¤Ÿ‡ˆtP[aŒ­þ¦e[* £-ÚØZ¥÷ÅÀ ñUFœE%é1J•Ý&ñÝ“$¥ì¶MÜ@);dÔ£…70>—Iä! É:ú$ê@è§­‡«µB½ãM7dØt€´Ö¡Æw1*° ßä%žla‘ ƒOWðm%Ì  & R‰k ù 2‚ôÛ•ßÚ7Õ;,éU¡wçöªí€žXŽè‹yÉN§w5Âëþ7…$Dˆ²%ýlÕæ'ÍÑõŽ¥È”àe¥¦º­²Þ2‰c9-ømÎâ7•jß²¾¢vH¨ã« PùƒÐOžd,—†££QF`—X¢(ù¶RŽ·îŸA@eê@ã“…0dçE•§µT 1"˜xÓ Tº-Av%oîwØ©¾2JRÌFKÓ!¾GÊã:•HH‚àPÙw†îI,Q=A\ÈqUñÙ®üJkÇvˆçѾËex% £U“€¸Ã¥–bG­„üù+8v_^‹=u²&ì:Dç 5:zFbY ýãH‘ Oš†„Úž½N*8R·úí¢‡ÎT“¾KLÏúfɈ„4dÉj¯»ƒš‡/ÆÆþ5ÆíâgûSÿ4æÿ*ýØ endstream endobj 5610 0 obj << /Length 3611 /Filter /FlateDecode >> stream xÚ½ÉrÜ6ö®¯èËTØU€{rÊ$cO’™©J¢ª98)E²Õ³É+ý÷ó.–eËöÁnëÃÛˆo6|óúêï·W7¯6)K#mnw›0bQêoâ~c±¹-6o¼ïÛCYTÛ?nÂÙñ&Ù‘³ƒX²$ˆa35Q„ÁöZƉwC?"¸êê·W^ ˜Å7b:–úá&?\½ùƒo ûiÃY&›G5ó° gÒ ]o~»ú势ìP°4 `ª€H„7ìKj¼Ý î•]SÖ×ý1Ëuo]ÝwYwÚF¡Ç¶×÷½Û}Ù•_ãhª‹Ð;ÑܬӋTç_ø_™CYPïýÉžXuO™·c3”Ý1ë†ÞZõ4h~‹¶ÑÓç7!"ˆxv÷À—,”‰!B®¨u·k=Ë Ñæ¸º6 ®`+ iÙïœËôãPèÇ¡;4¨vߎ]^ößl¯Ãè"LÂ÷™Ï×0MÝæoËâ®jó¡vÁ&d ¥fÝï<äðOÐÉ»±É‡ªÕÀ»Àè·@~nWöc=ôôÑî¦Q¤Ñ‚…/B&S–$‰°þÔåÚyV×_ã€gàÆ0–K­©XÉôì{dùq‡ówewC •ëÖ 7UsM¨/³Eµn<7hwï³ü-J4_qtim‰c Š}×6íØÓÐÛ€{ßmÃÐû…¦(ß ž¶âÑq©Ö{(1hLá>EWM×êðȯÉîÖ  J;3‚)0/ëªìV¯® w©¯¢o×ë 5…Uás-†¬Aïuß5qÓµ€ßà“qà]7<“C[×»¶ÜÐààfõõPJêïÍ xý$vÊ÷4’õ´°›=”`êW.$üþøÛ¯4A:~ÝÂÇí6õ½ï~¤rÛìпÔ5^ue©3u2\¬”‡¬5ÉÎ(›lhJyA»/‰>Oa^|*ÌCpô\Ù ›¡eßêÆÕ…º‘¾M4öbňJÀé!ÑåAh kïéº%„2²vþÐc]’‡K [Ê¥¾}~R:Ô|˜š Kj­}P¹žÒ°ð‚€&õG;¯ä_­ÎÛBûl >ô‘°g‡VŸšŠ•5”Î@Œl*—œ W~ ¸e¦9]ñÂD¤¼ê€Ÿ[Š¿AD¥sH,r&"ëabáÞàÈ\3á„•frø%cà9$¸Òûq’)Ô[˜Âºþ˧%Ñä$¢!14 ÐmAY¯ÁÁ/°Â4=;ë*Ï”]Æ;ZéË@*gÕ*9—A‚(fŠ%ßkDb“ Öƒ“²†~×1¢êÂ_‚jawá[3NÕ»õÕ¡ª³N·fZù$7Ã.n?ä[¬RŽX6ËUòàÞ8 øÒãÃ,$ÅmY ²ù®øÖd.çÎÅ’1ú/÷!ý_ ì‡Ð?,ŽÂ/CUDx6ù}¾Z¹\ò~¢1 Eúùˆ¾Üÿ…D1°Bô³„Ç_Hè»ê]Ù}œÐ«¥­ôƒ€…/ò,W¿—_gI©:»-ªÒË*ß25ԸǴ›Ïm†Ú"Sð¹ü…KLc†RGMxžªöø¦~ L–5¾3@ÈTÔfºk| a ¤ œ¦ÕOå÷ý‹>µÙ,3«JG¡Ð…LŒÐi¯yÁR'-b_Ç–Ðè‡ Øüs¬3L?›îF=¬ƒhÚ±£ÖYÞaÄGW}»ÇÞU…Þ¹Õ+!’Ä÷,qê}×SÏÎ Q´Es(´¯gUÙúÉ SìÎ0½Áâ„ÃÊ ‹y Ýê´}áW—ï«<Ó7®³†Åޤ$¥B1h3áZ‹>6—#C]#7ÜÆÐ ï\×aÕºu {žíœF˜ëÍZEÆ µi»Ä†åAêJA¯9XÕØaé^'ùzÆ”ûK½&;˜™ )êX|àx9Sβ6ÐWNõ¯Ze.T„™†ÕÍÕÌL:‡6£i6'שº-Ž fØpºÆ’ï*…ùG“–Ye–Ùn, uí}/ÿä39@˜l)³¦jfõR}1ÌJ4T±;ï“ÍrË:¤Ü$Ÿ×áâ€Å}Z³2ú±W<Ò¯3™í'Œs›‚ÖÌHY»çœ†ŒÇ¶.wéň™£IéRI% XÇKöþ'‰ZéxÑÀý÷dSßXEóêmQSI¥)À¿w}~(ΗûöÍš\ŠQj4.Îéí™ælx,ˆ>ÎdBƒ£×R‹<¢ž¬Uzÿ~ߎuA«Æ7k£šé¹M«×ŒÝ±«zeAxÌN••Ô·úbv%ÿìJ¶¤¨î§ÌHŠÅÐä‡Ì¸°ƒ.1hd›¤:·UÜ¢ÓS³º×ëß6“ ÁÁ¬Ñ3ÊTki U×ù;(!І\Ÿuæ`ÓYÆÔˆÙ ‹$%~¯ÑP:Ξ™x§­œÊä<õ­º¹°6’¯ |?âãVjlXšJh4¢¹å@€ýjË~J\CÇC9ÐÒJ¯ÚÑlK¹Uà£Jyê‚ç E æîõª‚¹Ð ÜZaµsÛ]@’r&Á‹§"àœ…„ù–±ÔPO=goIÔ(Í’ÓiíÌÇ@OÃáÓ>T_s*¡+L‹ kjíû±†+/†¢j\Ø«Hƒ,Ýë쥪A¾oÇÁV‚]Ö(XCXçžÀ€+îÁ†„=Ìs½…Ž!*µÏÐà•´lkgÎL¥ÚTzú•°xdØÛ'C®?ˆ ¤z]ðó=™ endstream endobj 5542 0 obj << /Type /ObjStm /N 100 /First 970 /Length 1781 /Filter /FlateDecode >> stream xÚÍYKo7 ¾ûW蘪©¥Âà$p Š8Ú>lÖSLj³ì®ëôß÷£vÇytÆUb§Î¡)‡þFäð%’C Æ™J4!êÿ“)õY ùÊȆråà Ntΰ8%Èxª6>%¼ .ì&„ÊÁ¹"™è+GLÌ•“MâÊ)&‰rÈ!åI^ 68Þäèq2“KåDS‚7ÉCã\Éóõ-(ï¤ò =qåPIyì 1) T¬<Æç:=`ò¡ò¨RqÑPð•!³R¡ÿ€‚Œ(•‰”ç!#%åyÈWy!‘!J’”ʃŒ*2rVk⃨x5°‡Œ"•— ;®<¸Á%åøH]“TT &ð89È€iXÍ*Þês®_’á²=EàĪ3>Úsµ<çƒ: ¾g#)g‹Ów3þ !#ÂïE*Žßž5'ub„ëCugL®¨Ò FHE߀{ƒÔ/OxC²¾ …Bö*-á, 2’ €¸ò2¨Tßšޔ§qè¢òä*‡R¨<¨K¥ò`ÖxŽjNÖ€Žª¸çᾆ´M¨1-’ò*Ø)/ÓÖ$ TñRy‘j`kP§ÙêF©¡!CD3B?0ÃÉ+‘* Š¿†V©þÓÜ+¥Ú |ôHEÐÖbR¨>EЦXAr%q´·¿¿×=5ÇðbFB?7Ýo¿ÿ—mB‹wÖ!Ä—'{Ý ¦b¼ÓvÙ’½ œŠXuL8'K0ZX¢eäa8«ÚŽÞ""Û°­­`OÖ—FŸ$v6øFŸ `,R« K¶ZJÛÀY¬aX’Åéà­fQ8›ZÞ 7úåÀJjô n›]£OPšl>ÁUkõ*h'èìÁ>:ø¤ÑÌ>[\£é¼Ï¶„FÓy[r£5< ŠW뺄âÕXb¸D¯ÆpæP¼£ŽÅ£x5Ú™áAnŒ#\é–¥Ñ'jW£O˜ ŠW«”Q¼}ÂNP¼}B%¡x5ú„r´Úâµ%X½UÛÀÉÛV#[ÜÊà@(].AGŠÚÕèµ-©1§×vvþíÃ'9\.6fßt‡„>Q¶ïj2åÖ&Ü_?¡‰G«:ü ]Q©8®ûeµœõslº_žšîEÿnc®%½øûm?ÌÎú½î ¤ö‹ÍZ[@Ò÷÷ºçýzy¹š÷ëmËTy?÷§ç³ÇËwæX%¢³BÊ$“aú\N o¶Â!z‹ìÎ8X,–8ôØÔ®YÕªM󎈑B"DÙÑ íˆ|ý'ˆADDÄADÜŠøäÛ«z{Ýãåê´_ÕOr'Ýݳî 0]œ¨æ°ÌmÑ_û`u¤ ½¬á€€ÛR’utùrƒ»ŸÎ¯»ƒýýz~w0ßœ/ÝQ÷ëógú߃W›ÍÛï»îêêÊΗo`K»\=„J_¦•×ü@óЖ°Žèë´½GKC%ÜŸZŽ»ÞK©mŠ÷b1Xa ÁéøþôÂåŸôƒ^hû`/¹w½(B/$®§`2#ªÕG¸÷ãWRkw¦©‡ŽkIõáZK4e:ñqÎ(Ro"V£zý˜ƒZµŽL÷ÃòÅÒ æ=¸\÷«×ýjÑ_¼Z^=4w¥ «Ù˜¨m9DëáGíªxT•­A¶Êœõ‹~u>ŸTè¿=Æhí] ×xLÉ}¨Á7á²HÉ~o(LüÛç õr9[®ßöóó?o0Ñg«‚Á$#ÔÉdäŸjm‚üŸZ‘•œ £"!Ûih\ª”wÊ£ªœ®ÎÿêWóÙÅÅËÙüõú6QƒIEw}h_¡…Æ­æ»vqÝÀ=ÖÍ'8es"±º!‡~ø«Ý"Ÿï:¨¥«Ê’èe¨÷JþÛqç‹õfuYµ\ßeñaÌy§GRÈ7êc¼™-N×ЦŸ½9_œ}¨Œv†ºZ¼î ¿CÎzmö%fllÿ=ìŠ0çäÒ Æ SB#sNÉÔžÚ…‚§va£à©]Øxr6 žÚ…‚§va£à©]Ø(xb6ŠÚ…‚§va£à©]Ø(xj6žÜ…‚§va£à©]Ø(xj6 žØ…b§va£à©]Ø(xj6 žÚ…'wa£à¤E£õdŽV\iòDéhûd%ßéÄÌÙ—o52§íiÌÉå[Ìq‡ã0—a°-Ã`[†Ù¹ àr Þ Èɹ àð"D¹Õì15ûÌF0Ïdý=h×…Šð%}3Í2Jl(¸ß‹þf‰¦Ì£ ö6süò£¡/DÁYŠÒ†’Ø3ªqÖd¾ûü]2³ endstream endobj 5627 0 obj << /Length 2794 /Filter /FlateDecode >> stream xÚí]ÝsÛ¸÷_ÁG¹#øþhçÒ4—ö®ÓöR¿´IFCK´Í EúD*ŽÛéÿ^€ m’R+äÚiŸDKà‹ýí‹%¸ÆÉM‚“·g¿½<{ù=Á21ÈH*“ËëDH$ K”±ŸŠ$—ËäýìuµÊ–ùùÇË\k•hÛZ2ך+Š4W¬mH„8¿ JÏ^ú"‰»ëìÍåÙÏgĶ yêÁÞÊD²X½ÿˆ“¥ýí‡#ntrß¶\%‚`D™´×Eò׳ŸÎp'6Å×[õà‚ Ã½PQD¤¿3yAœ€‹vdób–7çϲ~”Û:ÁÉ¥ˆÒN—·™žÀ³ÅmZ–YáÿÈËëj½J›¼*»/jÿYç«»"{ÑÿQ.º»ó¦C©Ê&ÍË®uUþªé»©ó›2ízq‚f;þÚáÆç>Þtδ!>ÞÆXˆd,š°2°-£)#Ä*,ìóµÀ‚‡ «´~(¡ÝIc7jzÜR4œp÷À7cn\‹·ÆZ,A;5hFSDˆTXØ ̵F’šCó/Äp‹jñéh»U>:ŒFXˆ$ ,ì”B}†ü´|]mꇣù’ qq¦ ñ|…—íT‘nó¹)ÝÝl9.L÷0Ê=öØ” ]*.‹—:àÙ‹&l§ n}ÇÛ¸ ðÊ ;Å”9GÊLIkYã´f\ͯòæxãd>ÄŠÆGˆä#š°2ˆA"âƒã>P`a§'¥H«n#YÔéꮘœ>Wé—eÚ¤{ÒIœ>¥“GÜLH'ÙAn5ͯA²|÷~q0óÓÞ¸©³£“?nÃOôþä2Çd8öae4; ñv vŠ‚ QÏØ©É‘uc’õÌdGå£5klÕ¨Guñ˜íebŽ_êãS×wÙ"¿Î;âmïT{-XM3`fÚ0;–ý†ð0ó&j§ íØhªñº ;Á•™¶»-c¢†ö ¸ž)aסx»è>:°°S¨Sa~ æ@[nÇîþ¹z$ÁÒGäÑñG¶S†ýÔ,Þ.v€TXØ)Ö."”YêbÏYIëŒiÊþr“^G?sa܇ðÑ ñ‚…B —ˆHvãŸyoQ8ÍJ̇¸Ñx ñ1¢ÖâNwt„aWGs™è2Ñ„õÊ ¦Tcé"„‡©,ê”ÉSĨޟ‹X?àI^Öå|¥{Íÿyïê–iêy|¶b»÷_E“M!>P`a§Ì+Ü%'XüyeYÍ«ï‰FLüg,Γ\“1Du¼t| 5‚…bLÚ,ÿVÖØd»IÍÿ¥m׎CJŽ„8yPG}&*𹇸@s ;ÅÜ©@’ˆøæ~WÅi ÛeÃœÈ ¿éÜK|b'š1†ø@c ;Å GRÈøÆ¸HËEVü?pÖˆÛäH4c à¶KT¯ ¢ýþ6–*ø0]À…à—ÄP¤˜‰ý çjsÝÖ ¸‰—ˆþ–OrŒ88꺓*|Fˆiß‹ª¼ײÌîçuþ½J;‹¥7ñ’Ï| ï€…â;š ¥½ 8ðFUÇ*ßœÜmˆU ÈmöÖ–q´}+þˆOpV]ås†0;JÛû^ÿøÚ»qΗ›ÕüêÁî"÷Šcm’é-›$îEG%û‚À0Ç]3»®>5³–«hßèbì }'Úâ§°°c¦­ìtoíFa¤iÜ×Kë&]7íê9ÏËeöåÀ43~B> ÍÈf4a;ep¿IަŒ¨ °°SV7n¿Â,¶i_#Æ==•"^¢s€¤*ìáÚ„)d8ŸXï•0‚äö;Pàz¯‡kÚw"“Ëí¢¬ŒÎ®7å¢9'3_·Ý~qWYÃÉÖu¿¼Ñp¾Uäqu Î…ítJÖ¬oŠÎ/ˆÀO{° ·ƒ~\ŸC`K¡Ðr ˜aî ŠQ1»Î\%WFÚxïqí¨šª=«ÙþÚôco‹½¦ë¥Í½O‘ÞEÈ–‹¸[6µ…¦xvñ9¯swº¿½ÿÕ_þ°S¶Åo˽Ú¾Ú­«•›­|çÃ"¸NŒÛjS´ØPIkĤ ‰å¹K>ŽÎw#rKŒ™mc£ÝaÛ­F¾ÍmZû‹¦òŸ0¦EáoÈËî·Û¬ÎüekÖ.º»îóæö±M¾ö·]UVíûˆmá´%ÿWYÙ´åùkK5¬eåû3-Ú"½m7U‡u›/nŸ+üëZï+ü‹CuÝ­+_žx™uevo²2[ç‹®ÞïÓ°ÜŸ÷yQtU}¯º²ÁËÌ¥Ì]«}aß®r¯%Ë)ö¾«"|×ÿ3‚Aãa¡ã!íw.Èõ m9ØÍ:«Q¤øqtûþy·„”:õGü©0 endstream endobj 5682 0 obj << /Length 2882 /Filter /FlateDecode >> stream xÚå\ßsã¶~÷_Á·Ê3? ðòÔÞ]2ÍLsMãéËåFCK”Í9ŠÔQ”§Óÿ½ ‚”EJº\¡“L<”)ðãÇý‹ˆ î|wõ×Û«×ß2‰B·«@…$ŒD #8jÜ.ƒ³·Å:Y¦×Ÿn¿·­u` u(lk©91RXÝ©ðú†k3{í,döª«÷·W_®´¢{¹\*T°X_}üDƒ%|÷}@‰ŒLðT·\ŠQÂEŸ³à§«¯èoÓVŒDÒ‘¹}HÊ‚;ÊÒ¶d†p%[Æw»Õ|ñç÷mÛ>ª YÛ6Η'5aÒ´Ö»3X<"á Öj—/ª´È­ôlS¤y•”[gµbuÍÕl•”î˶iœ¥Õ³;U=Ä•û”6×äEsâ1ݦwYÒ´+Úö‰k¶Û¶¨öa|ÑœyzH®YÓ^Ï–‰¥ò˜.ÚÿË´>qÍÔ à1ƒÆ ¹„`{¥Üó=•iUßÊ„`’­%gÔlSöÊÇt™¸¯bw¸+âry³Ý$‹ôgJùµN×›,Y'yÛÇÓ•éC£‚ñC T3"Z‡mÛŸ©¢ðǃڎpÏEœeÉÒ{zHòšð¥ƒv4_9SÁ—˸jŸæšÓÙî@D8W&_vi™lÝ€sãŒF%zAÇxË,Íï¿9ù¼Šh)†øš1æÄ“*:«Ê8ß‚èë­û™¶LÁÒîÔ]ZÝ”Éè¶ÆoÚ‚gÖÇw×’Îþr­ÔìGwâÑBÄÙ.Ù¾r'œWÁ‡Ä þKl¥l¾)‹uÙÓ΂ èl{Ò»|›ÞçÉòÔã C4جi N~Ά¹ïnüO–qó‹¢u¬Sà!'’Ôñ« <¶­97RS¢ n#º {|8òÞÁ2Û‹îz;f Á?D IÄ#4Ñ®¼܇¶C%ÓãÕžuH¤i\ÌyQÇc±À‡CJ_\ØzÄüÄ•€÷ï¡ÊKÝÔ£4]|¤8h²Cä a@P–¹" nZË“æC´±âÀ?_»üH‘o†*‘ŒáO‘.>R4Ù1ŠI”v‚´} L]ôbj­ˆ`tÍùþÜ´8 ššà á)¼ÒqJ$bÞ¤ëâ#¥C“#$dÍlæ±H——“l’ÅU2Y3*šuñ‘š¡ÉŽÑŒqHí…³ògmæb 4×i^LîD*2uþçK>N<Ù1‚P˜çµ9.L….÷êùß<דû‘2@Rj²uñ‘²¡ÉŽME´ž-5ãV¾˜æ]6L:…7Õô~©]ºêMà.>R`4Ù1k·®12SŒ«*^<$ËÉ‚„.Aõ&H)šìABC Óc)'çìJÕ™©7%:ðH!°TÇè 41ªánÒ<+Ÿ‡d\‚í“E‘.çô¦J) šì]dHL4zj›æs»Ššl«ùºXî²é¹‚p™¥7eºøHe¼‘mŒÁ]VçÍ]|¤1ÐdǸ)—€ÏF¸iDÁMóùvwçǶ“=”¹œÍ›(]|¤(h²cDa’PÎ;«0{{wÍ1¸bbºŠ—PF.+ó%a'!žì © 4#ú•±ãq±q/¢zz|<'éÇÙÛÿîoóÞ½ÿ×Û?|ûá·?õ¯þ4XNãr:orvñ‘rz#ÛC»ÄÊ›1ºøHc`Éž÷dia²™y½®_èÖdPȱQ(®þîÖw]åðÇhGÑêõP']âåM·.>R74Ù1ɾÇefÔ”Íf¤Å]¼œ†J¥ˆÇÄ« ÔKuŒ*"œ›±R”_&ë ]žçMˆ.>R odc—_y3Fi 4Ù1~)4ÌwâY&ñ²ÁìÏÜåWÞ$ìâ#%D“#!Œ§B5>Åi5ÿ²KvÉüÁ}` ©²×N–‡q¨¿¹])7²1¨Ë ¼£‹4šì_¥’H!|Ç›zŸ&2àˆÈ%O¾DìáãDÄ“!¢ˆ‘Z¢ŽSq„v•7}ºøH}¼‘mŒÂCs >Òh²cœUC\h78Ù¸Š·ÏùâäN@ãG¤õ´Øä`ë3ÙõU´y»ÔÚÕÆÒå>ÞLÑÅGÚMvŒßˈ„":·9Ìù¸ÝC_¯½N¸Ž¦9t±Iò¾'Ûù-øéeÌÎ~Û^÷¢š¨hb÷:1â[2ƒ»–ÀÈßL±‡t(4Ù1% i÷î{õ§EV/?á ¯±Å]ÆëÍ¡ºøH‡Â’=¿1_ØŠ ÞÌRÿ3Üz0 SCqæØTÛÖ½4L¹ ‰fáaÕ‹üZÕK= /xá³U‘e…-(yJó{{Ší+_x·ò…Û­mUœºJ%>‹³Ìµ/“¶$ÅV(¹ '~XóæúF01‹—Ë2Ùn“öúº<ÎÞ%ýµ=窟X¯¾ËU<ñÃ>ø¯®¼³ÇöQb g/ÏðªwŸ¦Çšâ°ì¨t'O’e] ÖYYs³¶o²ÃM,uñÕ¾§­íz€;Úò²~OZ«Ã%‡à&ýÕêp[JÅý­ôðqaOvDŇAŒ2>¹bç|š>¼`‡sJtèoÁ¦‡TMvĨÏaD Jžö¥ T¸q^Wu[a@4+ó;ˆ9Gó ·Yͽ|ŒBb„tûö1ìÞ¤}s>ƒ¨ùÄUoóèYÿâ«~Y‹Ë4ÌÙþÓ}·ÉiD õ·ÕÃG:&šìÇdàz‘:.«ðVmÈë7ơ塓n=á¦ÌìÝ”i˜µ€í¿&;;Éé,;x÷¹¼:ëÖÍ#ôé窿9ˆ1³V}Áö,2ÄH+w=|œSãÉŽqj ù¢§8uVô³TaÃn5ßÄ÷ɘR ¡L„ÑøËv¾/wöaQ"Ù%KJwë0Þtéâ#uA“¹"’ÿÞ2zûòoÏpêjöÇÌ?ì#N‰†öº‹¥M(¼`GcnQÇ[Gëâ#;š7²1¨[ ðfŒ.>Òh²c¢ŽýUz[&éfW'Ïçp¡ìIÙÿâMÏ:.?m‹Ê«˜€ž]ò%‰WþÖ±»ð8WFSáÉ'JjïŽ\ˆ§ýø`vðwäSCâåYÛ_n|Žsb$Íæx¢,ŽDTNù9ûÿZÇU] endstream endobj 5619 0 obj << /Type /ObjStm /N 100 /First 986 /Length 1747 /Filter /FlateDecode >> stream xÚÍY[oSG~÷¯ØÇò=»³3{©"$.¢Ej%D¨Ôå!8†F€l§À¿ï7c%  Q ’9ãÏ;³sŸ‘!!‘QCR¢…’Œè¥(1BM¤¦šˆ9tà@Pȉ‡R%d_š ×( ™‡ñpz-E©rkÊË9äj v²•M*§@‰ E zUªÊÅx ª©„,ˆŒWAUõ@%¯ƒå%PlÚpbß œ\«^‡prÏzÂÉ£&¥zÀ!yV¡EÉbŽPHMSKÅʃ>…†ñ(”RŒW@uãq(L ÷Á‡ÜŒ%¡ˆÉ*T%Üß*jPZÅpVÍÆ°Ei¬£r°³ÏÁÙr³ü† uŠãB*(`èÏ7QgþúôÛiÃÜQÑ3J¨µ6RE J(ñþtÛéqº>ûw±þ†šð€äFŠE‡‰í7§Œ¾ÃŸÑãdó~9¿ªÆ}Tºš¦?ÿú; ¥·Î^ž¿zuüI4j¶µ÷š"U¶ ß`Þr1„"œ'T!ó|àÄ1cs‚%êáñzO&¤¾Nc>p£Ø0×úÀu—Ë×ÀVË­…ƃŒM¦í¾º…~AcÖÏåò ‹HN—aê˜ÜulÖ'>=Z¯æG „f˜Ý¦'‹wÛp|=Ú¼X̦{Ða±Ünt*5 4¨7«óõ|±Ù ®Æû]Ãõîê]°<БŽPŠ:Jf×L{t‚æµÅÆy‡·TÚ@¾mJª–-J6âøKg t 6Æ ÛÝð"a*¨qßmvºy?éÃrþŒºÃ° ^iϘ“GûîãÀÅÌ_í§ÝÌ„PÃÌô »®…<êÍ•¢…ΠAüÉ¢uý!Ad¤â3£E‹L9JwƒÑü™``rŸŒv÷–å=`ìp1££øÀ³\pòèN0B·¹ON#ê¦ìc¹”jHoHpg ICô9¡˜ 0õ9Á²K'˜w#¸ŒA“½Ñ,ÍÉF’rÝéƶ"Ýéî˜éÉén-zƒ™kEÈ9}¢%µ‰Ó'Œ¢Ñ†Ó'Œ¹H_øÀXdô-šŒ‘nxsŠSŠCœ>ц3†Ó'¥ :'¶¢w§OŠ4Ô9§O WÔ9§OJÁÔáÖ™[€Ó'EW†îLª¢û9}B#G}åé÷½åˆêˆ,^°èÈáô aÊ—âô‰nÒœ>!lhúÒÝÎÜÅéJý†3©ô5MóÎ%¹¥ØÉiç,#žÓΙûÇc%¸¾\Û@Q’zñ¨ï~’\‚Y´ñWî>Þzúê¡Ïl7O!)ê}Â^Îúמ´{‡½¸ðþ…|÷J`~òêÕ³“ùËÍGKyÏ7Yʯ¢/gE”}q‚+ºk©Ù ÖêLâ·È{'‚}`üæ½Á>0Kò^°èR'V׺ì5†î„Rœ`ŒäúWX0’·â4³ »¶V`8°g§5íµ_þÅtõÒ endstream endobj 5735 0 obj << /Length 2776 /Filter /FlateDecode >> stream xÚÝ]Ks¬¸ÞûW°´SײÞd—TæVÍ.ïîL¹0­nS@Ûs+5ÿ=»Á´-PË™Ê L‹Ãy霣# “M“¯¿½¸ù Až( 8æÉí:apE¡ÌQ äv•|»üG¹Ó«üê·ÛŸíh‘H3š;š $¬ˆ˜¸ºÆB^ÞtÄ‘½ë⟷ß/ôús+aI¶»øöLVæ·Ÿ¨’És;r—0&Üœo“_.þuÙ(fOíáë12ÒDP 8ÃÙ^Ç@I• ;Z%•NÖ'‘>Äw”ñ{*}žpŒÅÂê Ķ€Õ&éNþÝK99Q+'.e†r†€¢¬Eo ½jt,ùvÍ!¼Ì‹Æo`v¨î²‡´Œ6û›Ñj~¿±?$ˆ2€O®`\uýÅÝòØpCö¾Ž<Ôz«ëÚ“ CL¡·~ƒwiõ¨+¿±ë²ò殪Ã~ÈÁ)àˆ<~ß›îÆø‡&埣 4žâñ?”ØwÔœš¡1¯c©·¶ކ‡Ý½¯R”k¿q÷?í©ÀÍCêi{é“ö|¼Ö…ßÈJg:òuÞ6aÜD¥}}Jý F#¶¡æ@tóQãâO0±sf Ä8ê´aE|·¯ÊM5vìíÜá)BÄ€0SE4ñEJì;Cff±ÚyüߣÖ{__U¥Ùãy=åóƒ®<½Ú³ç¸Ô0/ücŒm^{êzZŸÙ™îÅ&/6C³ÁŠ©è9à H4úͼ†øæLì %@0n`m…¬O„Ö~ò3<’Éhòá‡É/±ŽÒ¤ŸJÅcÆ?ÁÄÎPf.9@RDSf„ÍHýd¢¿‰‰þÉ×$‘P@•X:mM<âScì2kƒÜÕ(ë# H!Îè–¹h“úhŠ<€ÔãX¤:Nð.ï‹ÆŠ!~ /‚‰cÓœÜ+VÖ–óî²§UΙrX—:D“È?P"шuÌ ]XCü@f„ûŽ2R ëË37§<ºS¾t»½÷N*êæ°åë(î‚·hbâŠ%˜Ø9^ƒ @TÜÄ?»¿Û¥õãbƒ@4^Ê?Â^0±s„‡! ÄÆâpÌÿ2ØÆ˜·ñ¥W¤5ŽSŒׇ"KÐ`£Rü±4j½M7o"Ë/§Éx*óqŒ&`ħ2o_Ò[UaWGSÕ!~ ª;GU¡T¸ôù­8•3­6K½ S `/cᇉ,±Ž²‹!£1cˆÈŒ`bgè/“Æ_01ÛÕ Oe~Enª|3ßѺ€¥ŸòL\6Â%b 9n†—u4Ô‡ûI2‘¾dt+šš àµ$©Ž¸‹œ£±bˆÈ‹Pb߱̀ôVüéšÂõVïü{V|›ïË´Z½ñN·'«9ÀùÊ·é²JŒjuX2€È9{)B€Gl8áj{0±sæDBQ×rM´z¶¸›Â.Õ‰&½!~ ô‚‰#=HÌÍ(ÆÙ ÿ0ClDv™N,±ðÃÄLìi!eÐú~‰ð)¦\¯kÝœy2ðßw´®ÊçüVè3†§/ñž¯öe»Áγѳômõ|úÛ `qÎIˆ.ÑŒf_Cü@û &v†[$xªÉåxìaÍñv¼K´¢Icˆ(PbO/˜ì»6þðçBÉO]²#XEÔë’ž\°ûª ]åY·uÝ-Ûµçõa¿/í¹ñ ÝÛðÔäeQ÷›â·ÐÃäS@8ïxk\É5fðr•W:kÊꇻÉ0u°ïžï[t§À‰Í•ù븢IsCFû€´;lÓê ÉË{¬UõöĤ!Ý…öuÜÅ—7W×ÁË_Ì“‡Ã›žþ]Y»›òH‹¸Ð=•»É¯0»|ºBìRÝ¥{½-íÅç+Î.A믕Uë*…›8róΘC†§’!‡n\Ya]îkMñ !Ãým_ -œÉÏü‰í¬ÐLî³µoÀ‰{íöbµz¾BýË™ŸôÑ»5ÂV?žòì¡’nk‡Y^žòàî78æÞM^›iËáí/}®íˆž>[òøÒ± Qc@Œ™dìÁéVK¸ew/ãUÚ8-ÈÛm:×IéМl]®›£7ÀÜ_­?¬í¯=Pزð·§aŸVµ!ç…Ýš6еtÛý]éï]7õ_=}æ Lâ­Žcfô‘Ç dGøa®=œØ-f@†Oä­¾¶[q&j† ë…Ä.Øž¿kI,#äOж4Õx=§ÈŠK’0^\:Â4—hÄ:fû)œx Ø#ü@f;ÇwÞVùæéÎôîë»ýa™óHëã¾ô ß1÷žÙv;RÒÝ~{÷}„# #æ%#ü@ &vŽb`Ëp£ÿ¿0±-%ja;A˜’ZGì¨á*i4b;fØ/@©ˆõ#ü0f„;Çb!ø¥Á»I›<;sìÓf+w&u.Η*¸`Ÿ—¾%_rÅBÞbÆ;4l'=KÛ¨ä¿1üVS›v†ìܲ†µtd¿m’šãÚâÃÝáÁ•­ÓŸgDÂÈ™©£ÁÄP q÷ãÚ ¡€s>ªö,m;½1ÂC¨ß¹ûÙ;Êgo÷î¡})ãûBÛo£²¥ÝÂÕ&(Œ±[Ðx¼¢Þ?P=£ë˜a°ŒWÔá2#˜Ø9s¯Ý.§È²É·ðÎ0ßÎúBXÀ|s’;9çÎ1Z“›¯ô7„ÓÒh¤vœ°ÛÔd¼úÒ>ŒÁ¤Î0W…|áòݾˎfláû=Ô·{Ú·âKö'¸ì-ʤ<ÞœÇOôÌÕµ Îý×ÿ(D½ï endstream endobj 5794 0 obj << /Length 3953 /Filter /FlateDecode >> stream xÚµkoã6ò{~…ïÓ9‡XEêÕ ´Ýn‘z{mó­-ŠMÇÂÚ’W’“æ~ýÍ‹zYÎ:M÷C`j8‡Ãy‘ñg÷3öÃÅ··×ï”ÍR/‚hv»ž…‘¥z§ð«ÙíjöÛü»rgWùå·?"v](Àògª›†êp¶Ü]üö‡?[Aß3ß3i2{$ÌÝ,T¾èÚÛÙ¯?_øÂ¶ÿyöC奆™ºÝXà&ôç¿û~°µ² ÷Fií~èV±¤å^W·tkîO%^`ŒCÞWå¥ çùÊÖ+:6oÎÕw?…@*ørú>¤ÿJ}5³/ql¸-ËùÈ’~α­+k¿¸W;×Ù¾Ìý=£©Aœz1ˆæ/9¾Óºz¶ª‚J%ú5Þ‰_ ÔÔ¥8Lû‘:$^ð "Oã…iÄ·%X–ÀŸ¯õÞ.sŒã—œ`¬ŲÉË"ÛæÍÓTÀëÏ`Vã~.0ÿ+é3ŠÿWUþ`«zŠ*8X§¿>Ü­òÊ.›²z¶TÒ¢Éò¢æ¯¦›´ODùÚ Ã–Ê,r°À©ÔBð(î…ú„ú40LL,¦‰NVÖ»\ÐÒï³å† |^aZníuí{Û0fV0À[[^pW³ÉI6 àØ÷P‘…R¶1s­D¢pîM­ßÀÆC)‹y_M-X/NÚSjógc d8 H°ÐÐ5¸Tó'†–kF£Eàï’®•t2­¼n85ƒî#ñLRFjçk)³=1‡ˆñjÆûtÈÁ¬ó]¾Í„fS:1óÝ~kw cëH-ç$a8+~(ò‹Ù-ÒÂÑbÂ#]qZùówqI(Ëpú+†ì`J€ ]’`èË’¡ñŸŒÅÌ_7†ªÈ¸¤®o/?ÿgû™(é;ÔvD¬Î\ö{$ú6[¯Iuð+ˆ’")HÜ^‚"¢Ã`¾±Û=·ç!œØP€=V°)UíÌ3[À3×ú7ÚÄëJ}k„=ã„ß©!4~]¼)Û­mʾ ÷° aCù§ÓœÏ³ ½âÒ ™oªˆN<>aÅ®ëv;]ÏPAâù:í¢}”;‹}aÒÐó•íoíº¬€Yí'«dk~¡jã/I™›þ¤ÝŠ6¹B },=SÜ,Oå‡b‹i2´4!!j1ÛDGÏÛ~Â>sTÀ6 ¹¤Ø£Ÿ7ÅÍsÈøZ•¬JNŸÓÍžt2ôT¸¾ ÎüÝVTüȼ÷•ÜÕzN#kÚ‰ _åJx r’Y€Ó±Q”¸Œ§œr‡*³Ûº·“š£/6mHvh2û0ùª\’q ›Á}µ%;ýH1Iœ"Ÿ<‡€râ© ꎃ=êd¶Ý>1÷¶°UÆÆz³CSî²fÁ®B©n0ÜÃ|I£AÖ¨P`ˆ×U¹ƒ––Õa#/àìdvî!um&È}OÍ 7ŠQDqu+0Ï!4¿–4£šƒIÎÐb"2j1.ÑófÓ纹^À‡à¬ü}9Th×±Y’QF”ž1“AY}zKFš~ÊF"GÀšþÓªªaZXzI̪ˆöŒ¡h+ñ·qh}‰¨c»Ž8]Ä…_LJ ÇÕ¨+K¡™5™0Ñ“|fŽ¡•%c`kPVBÌV«ÊÖµ­¹Ûq Iš9 Iú¼1˜ª7S&¢%ÍA,MÄqÆ0ö¦)›§=£ÅR:> z©Ob èÌ»,HýŽWèƒ|`£J‰F `à†âäØ{öY`õE‰ú ´Sçh ˆ;ÙòŒ¦š†["è KÅaw焜0¬ËMVv[¿áÏÿ~wã¬i{>¥Ë6ËI}”À86kÖ°Á5wRÜ€þþJŸ*îv»#£7¹£N‚(h]xO°ß e  m™I§h†¿×OX#ÙÿÃ-™l¸‡zb=†2d¹˜8=äãgSûÃÖ£KˆX®[û’«Ag|¹«úÂè/VdÑ]‘åõ̾ Èž=ß=q0ø!kTù‰ÒÉK*[F§žñæúþ+…þjf_"ttÖ¥•úÊþ=R‡\0 ÿÆ"Íé[Tĵ/ çMáBJ ï0ÛaM’<'é\f,i<ßÙÔDÄ1%:oË¥‹Æq)}º…]‚ŸÍ*Š®eù wÕ+ºQtI[­Ÿ(l0%c‚KÝ[ˆ ­ðB®%¡$…H *Î1#ï ÀRO‹äTÙçœü ™0‘3†c~¶ÿ&ä  ü+Q(jÍ—ÏÈ€"" Ó qjÓ—ojîà  ‘I4}^_IgI—Ï‚JÞ…¿¼”ËañÃv~fëÄÓŠ+¤;Ë!tÖ‡ý¾¬®ÄŽ%w‡¡n(Siôn}©sßF¢œP°KF¾“ïÚ6J'¾sÁØé6e0™ße5†€1 ®(ÛZDR¢úY7-œ£}€ì8ÑýB º¥YÕ©,Ý(í¥º-iMØä£bcê¡yiÓs¶RòµùjXê…‘!Wõ¾êE§w áXBºÐ±Ë°¢ê8Ë…2CY~½¹~ÏÜTn¹(‰lQj~óËÏWÜõö§o®xœíRk€j"UCȳ$íÒp~Ó0&eP1&ùÖ$ÏÊ!'d8þ°t‡Îó Q¾~êV‚M<%CmlkkÔÚe±!σH¶ÅY–æðõ×'¨ˆFÁ+©¤”ò~UÄ$µÔî8¨9`\Ûä•'ÈkWŽ+ û—‚„+-”W{ºí_81¤¨õóJâ̹(›3øý§.í÷.ÅÞ 3ú35Ö×sXÉ‹ÓþüãB#ÅÉîÙM/9mÕ¾¬ë¼Í+ŽL½<ÍA‰wU9_´YR«SúðîæÝû«. Áü×YYÐdÕFpÚm5FM™’ÐKãÖô\9´‚\@*Çè,Kô¿â)nÖ­Ù¯Ä1=¶­®Vl(¿Póªtþ"£;é¾Ë€‘$’V5Á)r΃aS¶â e‰Ã±Ùw•³ÞÀ¸ïæ%ªSï€}¤Q¶ªH ¡))eèêg xAk:å°Ór##WÝxà˜ËúŽ;vëQrÊÌ+?ôb­ŽÌ|žiæiΞE‡/æ$”47* NÞlùŠ~.ÚCNØSˆäH'XÄø´!L‡î©5ç˜sFmé"šï²'n {£Sç,9„±‹ª QY)˜1M»“þš tA%»t,?Þ~¦üÃODWг,+™ ¯¢Ý-!¤Z]6Ž„™v×u‹¯Éª°E™’¾öŒ‰Ü\ÛY{J›>U©Õ' ™Ñ5Ü×pdðÌLÌft¿î/Ö©.ÇNcU:ó×úŽÂZçÞÊcoÒV³§ôÑ/¢WkäØcIè%i|ž ÅS®µ‹_t|\Q„Nªû`§`%âr®ºÑø’1À“Ãèµ™ÕOÅrS•EyRmľå§C^ç’#ÁÙ˜„&„´=úx‰+à †ôž…"¸¶•„ÆðQ•°æVÈ÷s~Î0ã ߨ V@ßµsåhrî2:ë=D1¨B¸ZÒE][lb»o|í1=Ì17ÃÅíq0çÊBhùqïz”v%ÇŸ|ÁKˆ›v,—³i¹ r¦Êv¬ÇeSšóiê5­ŽŒšÓ^¤šÈ`±ÏêésÂÂÓÖ­ÊUVÓÜ-²6¸¢åóp‚¡qj"zá0Ò§Œ{ˆ’6¯O%@múÖ¿ð„×Üyk©ÌkWÄLÅB¾rÉ×2£‹^ìÌe¿+@ˆÄÀ|—aúÙ˜6îÞÂôBJür¡ùB½JÌHsq ÇaeºÜ½Í£Å%a[80ýÂõˆ+ÂÑdÜ–—*BWª $bÔ‰øÎBØ,G…SéTÏ­<½ÀÄ÷n1,3´¬†=4)j3ؽËÝ» ‰†SÉs"µ¡µá{F»]qj¸Z„Ïqþ£«^,Éå”öc¹c„Þû²r¯ës“CUÓ›£9^¡;¯¬y¾œáŸ,gøã{wãâûÁ:;jün¡'îú71Q«QDk(gñ‰¿-“å•/ãð#Ûò1A.7Acø°ú&(w“®ËC!qÇV›÷5Eˤ$ìÑuœ²÷¡nÁ7Èãµ¼p«²Ï”Ò`ÌÌ”•0×ÝHw ¢ã?u}s"ð„l$jmh^,·‡•½'søóúÄ“*Õå&÷Ý åûpþƒáÝÍÛ¡½¼ÿïË)¶Vù}Þàsü *6Æ©Á$œÅvÏáà'é6ÖåVª^ä+ än{P×ý«NMÛÙ lm+~u…5š¬!ËûÀ“/,àŒ7ƒ=s»uñáKšS¾ Ë%c÷õ¾;'X±V¸bnHĨ奔æ˜$ˆð5Šê’1z/¯ A™”"¡E_Ê! Ž$‡¾4(D‡mƒ‡rO9<î¸p xy1˜²Õ „‘^ð„ý:#ØXÃÍÉwXêÌOl¤j¯G!4 qIS¥ cI_Påýÿ5ê A˜’­†„iϫܖ<.¯u5›·7ï§Ê ð{êߺLॾù+ÿÕõTdµB endstream endobj 5732 0 obj << /Type /ObjStm /N 100 /First 970 /Length 1564 /Filter /FlateDecode >> stream xÚÍY[oTG ~ß_1ðÐ9ã{.U„@´H­T*µxH“ »h³)ôß÷³7‰¸Œ* ÑÀÇç۱Ǘù<©£…¤ŽXôßúÒR TX ÔL“CΦ)!WÓp(d ELS'^AhÙ4XwðT:‚¹®¢P³ir¨Í4%42 ‡VM#¡'ÓÔÐ¥¬*3ükp4SœõM £7z TL5 5Õelƒ²ê€'ª¦Ë2™®@Ó1¶›2<Ï¢7]…4 ×q•`ƒ{R 6$«®Àö§lTÒ0BÕB‚ R'{‹õ l¬7*©®‡œ5H’(ޤ¡+3…Ll:Ÿºéý\LÇšé$ä’MW!Uµ-d6» ,š'd$óP¯`( «N`C,åÕr.ša$½ê„?h–u¬”;i’o»hvfGÒ„!šyXøð" âPRQ]Mºê°ûBÙtR3] %“éPY¹j:*J«$ÓUH¢ACK´ÚCaD©bß…»©`LŠÂ’"ŸcÕâ;¥VÓÁj&Œé^ ÁXO†ÃzMc}˜ƆÅ¡)Úyæd]Ñ ’ûc²¾(’ Ø@ p¶£ô™›ú×9pÍ4$–Õ Hh qÐaÏ©jp;þÊæ½¦©ØoÕ!1œ v´::Z-Ã)JÐÐÏÂò˯¿áM¬Ú}\cGÞ7ׯ_¿X=xðïà"q°›9è}`â˜Ð|>p*1¡ \`„,!¸S$Ô‹ÜR$¤Â–3N˜{ÔcÔ.-g˜9ר}â“D=ã|àÄ‘‹3'h•ÈÍYG¥ç(äÌ : Š8sRjŠ2œ9)œÚ¾øœ6øÓ9 Õÿ_æ´žnðǛ͋ž¾Á¨[ö æF[¡Þ íVè·Â¸ÆaÏ9o믖‡ÛÝÅzg>¥Ë÷ËÓå(Ð ÝÆ9@íðѤê'ޤa§f  I€;¹þ}5—.7¯–ã£#³°Ÿï/·›ådùùÙSýsïýþÍ·ËòöíÛx¾ýáˆÛÝËûpêóü*\£~Ôªõëf¯ûÜ¥¥R¾š[èDýH-eÄ® Æ= N1¨))§nÖ ¶èÜG²‡»Ð‘Ž ìS"Éá…~´[qìØúê$,ßmŸoÚòÞÅîò¯õîâlvµß]Ÿï¯wë«ûá³£D£FP08 7àVÌà !“~Ë_¯¨”ƒpÝÂÝ9ÒÁ½„"Ë WŒÆ_Ï-LXz2è9ß…lÆ@ýãšù¿Ô•`6×ÿÌà‚C­bF®89”q01L«êàëõn³~ýr½Yï.Ïß/*£ƒQÞ¿¥R̸˜rKý3õ/ endstream endobj 5813 0 obj << /Length 3015 /Filter /FlateDecode >> stream xÚ½ÙnÛHòÝ_Á·¡‹áÕ<²Ø2ŽhfÇޱ݇dP$%5"‘öØßª®j^¢'NöÁfŸÕUÕu·lccØÆû“ŸoO^½sìÀˆ­8pãvmˆÀ bÏcø†Žq›ÌórŸgòôÛ_puhD°:ðpµºVä‡L-tD|ºpÃÈ|E'pp×ÉÅíÉŸ'¬² §?¶zÂH÷'þ° æ~1lË#ã^­Ü±-×  ½3nN~?±mûËè ÇŠ}Bê£ë ……Þ{œp°'²ü Ò$È¢.>¥e±–Mð~ ¬PøzñG[Øðç¼>]xžgÊýa—ïó¢©yëè˜À±"7Ð[——7—ŸÎ¯.ß-ßÏžY^0À©©Ú´‘eQ[p”/Ìó¶ªà Ý0:pͶÎ3l9溬hhøhÛd±¡¹f›Ó\&«\£n¹¦ùLnd“ìhpùêŠ;Yäõ"i,œX _°WÂ.Ù5Û²Ýlqu`ÞËšù©+Ì»SG˜€h›ì×À\å4¯q4Ρ¹É‹¼’)ö$ÕQ ̬’=øª¦Éf›44-y¤l›Zf9 2ù¡Y§åÇ^¨çàÔ!cC3ˇ0% "!þlèÖ¯'Ƶ¯×‘NÎà߈Q²hòj}êØf’æ1”doáú–Æ´ì,³ažÁeÛ##6Šh™ªþ” ´æ¾’nïÛº¡•hÒBœQ×ñ,ÇñFºPåI6'¡Â³Â8žjOŠl|`Åž3‚®°[a(æÁ¯Û‚”h#ñ‰õ%ÂH,74˜n“¢Èw5õ@Žß=@?p¢ñÑ~a›iRe¯îrxIß`Tždd4gR”¤üÙ‚²Z~²8€`S[iÆprUöÔÄ{ É*)êµ ZºçV9Ù\—ëæ^‰¨>tuêÚf»F9ë(­n›¢¦5fß"p-P´ –}»e~Z^‚G¸8&?Kš„ZëªÜŽø†s6azŽÜøK±$m›é&‡CU*™è°Up« nÕ·;óF†_ .8×÷ǸDôj°AÔš˜GÄÌṡ²¥i"Pè)bà›&Mº¥¦2UU{hh«"ê•R37xd7˜s ÛÂþ¾Ú°¥¼>¾^7ˆÑ› =âòòööš\âP*FWzVÜ›†sDßh»;š­rв:gB:°mzàOwè(È8øp‚#Ø8ìæôµVê^7²núT?F3º%»Ý*I?µ‚æ:sFWŒ^#´¼˜ƒ¯¥¶ÜÚ F¬a ®w7ˆ´tA#YMJ¸6+ Û†ö3B‚”áÞ|Ôù\”(G÷»<Ûä|æªl›Éi[þÒDc&Õ¼Q1qË28­ÎëŽÜ &J„†-Æ^“†PÙà®}8AÝ5 ©È!Ùá%Ç>_²ZÉóÊ‹kóëÚir¢Àr"W‹“Ò¡ûâz–7òŒÙÅ% Ë ÚÉíýwЄÜ!'¹KV;^3rçѬÖ1d^R?:ðqI±:9áÖ "¶YR®C€-ÆÛ´€»Y’úÓ‚©éô<4ŒY ­U(Ë$p;ôºÏT#BûPÄ„1´eGlÓ˟ꊃ)Å9)òä³âŒ)Y»Sq·ê“¤A£7cst¡K÷ &÷u–JR´e« øäzkÉw *a¢y)‡³0š³RåÇ–u±NR?)b¹­N!z/ ¹]ŒÞ© 톸8Û¡Ï¥ŸH¯ÞGFäH¥Èó,go˜µ½èc›^¸&a4L +‚¼áéh´]ضyÛ¥)#º ðE§[à|NA²{úΚ0 áAä5š.ôÛs ŒF©C]þ²{+:bGém}îBªãG_w™Ê˲Úë¬[«5õ½¡Sóä`¡¡QÏhÝŠ œÇz#—¬Ôð´6Öe¹µÜ`’É•·¯  NªñE{ @”! £÷íT&&ÎF&J,«kZ+8û†Y¹³:!/ŽdêéP«NÉ$Øl²†åM:½(Â3îéV×F~;˜Iñ¢Óp¬)( 1 a$™…ì[Ôíá°“ºD‚6EÇh2¸pÂÒ¢ü }Tÿ”_Ð ô\Wê VwEHR®âLï4èñèâØ¤5÷™¿€¿oÀŽo‰1þ—8"úˆZ-¸Ã€=5ŒN20Þy¿U>%ð5+TòÂçB2°©’=uv €Ý*³hOÿŒ¼Æƒ¼FLJ}ÏJl|Ë ‚GáJŠ™¾',ßâFibã©lPÏ&¦óa±ZaÐE}3ñ ¸Úù<Üï Â÷²ÙN|Ãøp©ËG%…¦’›MÞ;—;¨ kZ<»ÕVª—W6‡À.úZª½‘BjSÚ€Går¦×[½aÎÝ>£zÜÁAM“¾ÀëÞšF–m³ÇÂìaèŸú*¸"G<*Ø?^¨ôžS¨<.®*þ³—„D”‹ÜÔoÓ­GôÊ®6•³ÿàx~ÞOž<+´}Ãs!.p]|Àqá–ëø†kÅT¹±ÖÿGÐæGp|+ <}vpõKáӓþ~»xÎ CX7¸ñD–™a{V ߯Œ1ü2ãÅÈjõ´µzÒË‘ÃOY¾2¾ø…˜‡–£k/õ4ŽXüƒG¦»ï+6äwú©hhð„ÿýû£»ÔüùÕoo—ŸÎþtqõfÀ³÷___] ¸Eˆ ‹M=¶Å`ñ&oêê.PaFÝÙñDW¢°ÇaëWÚHÎAoT _‘ÞbÝâ r÷wÀºGÍMÈ$Ö±ƒ÷…ßLjIWF¢¥Þ»äbh2nÃå“ç`b*1–¦Ã jPNŽ­#¶‘£Ú(,ÉŠŽ$•áña¡Bõgži>d÷%øÌÄäi3—æs‘lîÍé2é*WÐ[ª|M' =‘ªŠ}uvÿ„Uo»Ç#†è˜u²Ÿ/ a…N—)ÿöÈ›° ±ƒè^vþu¾$ðGåDn+Ã÷ÑÓÓ®$8§†*°€ Ä XNa|eÕ(jÂ5üÞ¤J¥T*H£'<¤_¾x6ÿtµúµ»Ÿá@,j.¯hpPþÂßù Ë5M=”-CéÔ;©úÂP¦SÒ’0©º~öí®‘ %¢|vŽ¥Aj7%Ø=°á€ZRç¬I>£Ô2®ŠYØÈIø)z3}§«ÏI5;åç‚´Ee.r¼ˆ&§ŸÈŒMßÜÍ|Wg_û;³ÿPÉëí endstream endobj 5835 0 obj << /Length 3142 /Filter /FlateDecode >> stream xÚåkoä¶ñ»Å-Ð5ê¥EQÔ#@[8¾;ÃIœ»ø|Š$0´’Ö«X+mô8Çýõáz­Ösœ¢È'Qäp8΋œ±f73kvvðõÕÁñ;n¹³€®íήV3é273/€¯ÇgWñìÇùi±Iâôðç«oÚ›ùí „v<›ùŽÈ w­Ã…íùócúp—㬃·W¿p€²f¼[¦ 9‹6?þlÍbûff1'ðgw r3“Üb¶p¡Í>üp`i²­ÇÉ—œõ“mKE…™6ûq!-kþïCέyÑ”‡ aÛóuXÆw‡Ð– õÄezhËùçC.牆ªÖE“ÅØó¥†[5yT§Efôn·e±-Ó°Öu¡¿kÝQ&¬%! ³¬ˆ:f‡ i»ós–°#r¬yºL“D¥•!$Ëî§iº['92ÎÎqýÙ‚¤$EEþ“eÙ7M™àÎ,w~—Ökj…9~åüüòÓ¡aÞ\œQ+­ ¦å ôUušeÔ4¤Ðߦˆ“öª…Iw‰ëý¥©êþò..DðE¹³@\hÔiN£r^‡ÕmÕ¡-šZmÞn\mÊ.ã4[¸'F=o <ì»W‚}cÖc_™„ŠçY&¿6)  åØÙ®B °4§7iǃçÇïÿEÝáýR£¨@íŠ<¡þ;µ]ì&!ÍëZo*=KÓ‹+ é%õµ­ž¶8®Ã<Ë5ê«ø®µ¼¯TÜŦêmyºp|ÎܱLu»“jwÔPƒuXQ#/è›æuR–ͶÖýá¡må@~˜fá2KØP…FŽJ$ò!E3à.`sÒrl¨íØH-‰@dYY£D•˜ÂL±}f{­éË‹IÎÙÌkw“KÅÀM[[«ˆ€Ÿ,i…Û°¬ bUjŒÅ‹"2\9?Â>u¶ªI`jÖ¡P¢ “°‹ZU]6Q}Èç ßzó;Ôul/ïõn3MZœ(n¥`ž€$~D§Ì…ͤ Oy¦¹’~Ïk…$„ž6W¶Ç•ÀÏßÒªNòH+ú¶ì€ö˜03Ý ÓÑ–ar…ëæk²QË Ol‹ªJ—i–Ö÷„¬ÔTi~3 l׸#üJ1¡”޲ãáÉù ™0'ÛBI±–a“ŸtPgÂñ ÄÉçÅ?ÁA|F1!5®Ç\ŸèÖ¬r‡\¨íºGùèQ‹»Bú¥óoJ=$§†cSÁá–…jJ§­Û€Áѹ Hž$±Y|y¯qÐЧÇãH„‚€Yc ŠŠÍ2ÍC\ó! —ÏÖpÑòÍVw[b ( C Úó#[*šò9 i¨^›Câ^ïlËaŽ4‡©éZáž:R3O´GŠªŽºE ‰Òeq5xµN5ð0Ü^&×îlÏ´Ù–Œ‹Öj+ÁG¶„›„PwŽY±¢ê¶« c%šÄEµ éuWÞ̨qyv0æÊB¸`',©OÙpgÛ²§=À>yà‚ >Ohù¤ºÆXüD‹ž ˆ ßeŒóBæ£6 ÇÂÃ1J=­½˜D ß ú3*­8Sv .xÌã#ÃvLšP+¡ŢI‹ãÌqÌÔ±A·¥Ç¸”OÛÒ[pD“f×cÒu÷PwÞ&«Î,ÜLD©uÃm4 ^oj)°žl h»óÛÉHÏ…h°sF®÷ùèh7W¢&K®?\¾?»<¹ø8…îÊ\¶ŒÍ žÒby’UE·‰¾ôgi®ì0ò?gë8Øjñ© + ð*Žý%Àqg6 ü`V&³Uÿî=À6Ý»»€/˜4è -GØ—bçò!vi§uý'áï¿IÀb“—jü£eü#=Qp¯ ¶T»Ìóý¡p]ß×ߺ<}ûq¬.(Å?tçx=l°Œ-8Û;m `Ÿ *¾Å$·_"*?⹜I_Ûý¾#1϶ëp™Ôi¤oàØ×yÁŽm¡Ë ®Ž_d…¾]6iO_}wíOOc©#ŠŠ2î|h1Ú{}¿Õ-uÅÙ±ð_=Uñá^âò߆˜L¸¯§úCü/Tþûõ`ÙZ¸‹å/c]ì×Ù¿Ža1LÞ~úþâí›óëÓ÷ß¿;?»þpz~}ñþͧïv,Ìœ"m4$ÿý M±z¢¿<¼Îjt[Ø > 6ÿ4À‰í=A›8ª÷;ÚÆÇ´ ® ^ྞúŠ®OÂ{5õá™ú¾œØg¨¯ –µÿú^œžŸü™5÷ÿŠJ,‹ùŽÿÇ)±ð<濪£~¼¦ñ¿P‰_Lìs”س˜m.¢ úøõŸWƒa󯩾®`üê+a$ð^Q}‹YÂ=õâ¡ú¾˜Øç¨¯#˜07¸ç©ïfêvý§q\Ë/W¦}°x»¬ž«wÂc–ü=ÕîÑÁÆÅ#ψ—M>•¼…û;Ú‹8;›º¸IrV­§®íR0«{ÖT/ܤ¹€ëùv‘%Ýõ;£qz øb7ª‹Req±Ê ðÛš Sü:Ǧ)è;z:•.¦A@œ¨T0t›ÇÊëpL·ê ´q›Q‘¯”Þt÷&¼Å˜FŽäb‚9Ë’˜’w™…AòμKTM%U¥ËO°§œf;„:Ýëǃ,w¤ª)h_’é±sU'¥ÎÔÅÕÑøÉ{ê•[ó´—bX"#›4«Í3RažY¨eðÐR&U=|hi‡&“-ªÌf˜ØÃ ápfóv‡-û'xa ƱïUÝ €Uà€žôª~Ž»p=Më÷‹I [(ôޤ&”ÔÚ᲋¹±(kTV!”‚¸gÊtO¦ —I«ºLé°t’P¢Ð#í)QŽËå]г7yÚ«ÞðTŒûmñÆ4¾ZhÍ>Óò1«dö9‚Á~},¥ÈðÁO)›6x¶Qª_ý±˜Ë¥6Ja7¹ì£-øä UvY þ1INW”¹æk*+`»ÂË·'o.Þîc,o•¼¥4NjØ`E?Ū#á†á&¦†“ ÃÔʈÐá&¿/¨ôNj¹E*é(oéoÓf.uu‚ ”[žó,«ªµ@UnòØØ0D›Ê$ 7[àp›hœ0#gßÒßíI|öÅݬVƒ÷a]DÆè‹R¹l*kNšsIYszj霹7™1?ËŠªêç±û8‡Ž–9Œh”'(jÛ-°6ÔŠ ô~(¹?/@V7ºf KiV¦ð`_¹ØEæÙƒzÉL©=ùp>ù6ïÁÅSô0q]øäØLBܹà²-)½RëºjÁ¸ˆš øß$îÌE•Ԡ܆Û/‚ÄaLYT4P5[,M!ÛéR5@„ô‹GžFMjã¾.ò#*[¢9 áë4ZܶT¬Üc‚±HÕ#B#T®Z.³ ¤n1UÒDµ@TP5U•·[b`ò0æxكⱰA@ gà¼H V«xuWÚw\¥A×Õ“ V¢©¨ÆÓŸoA›ÃÎДr¶¹4N¾¹ÌUhÿ›dƒœj¯Lñ((pn(i#Ð'nUVšhA£hê¶ÓnV&Ô¥köp „¯+%n™¨ÐB­VT«‹ËûÁÁéë6] ÖQ?úQf„÷«0kcŽLü‚E‡ºïž Ã|âpU\ê@¥Üœ®ºj£¢ÈL]vaUúŸd„¿•:± ¬á ì§šÒlÇ–LvIz]h„êGµ©zx Ô×K%\×HójµtëT>ÐeV—Øë¨¸Þ„¿=¶—„Ö›^¯_ª2E2é–5åÜ“U ` »‚T¬”n« I_A¦êõÁ –ó%åúÿ¬Ï‰Ð endstream endobj 5865 0 obj << /Length 2380 /Filter /FlateDecode >> stream xÚ­ËrÛHîî¯`å$UÅ ›o“Ì&åÙryvâ=e¦RÕ’ºÂ‡Â&×£ùúhФiÇÖîÁf?Ðh4Þ€ /v27‹ýعß9QìÆYà$|áÜo¯«M%·jýçý¯8)@ÇB‡‰ï¦aÈ  ˆÅúÚOÒÕ;úàN]ýãþêÇ•(Ïçàh9EuõõOÏÙÂÞ¯Žç†Yê<Èʉ„çúA ãÒùrõ¯+Éö&ä‹ ù™+ÒÐI"áf!µYûÞªßíd DEÞªY oõü'Û?•ìÍ–ÆÆNülÕÑÀì–4vب`´‘݃”õÇV?¤ŒÁåš’ÁÆ*Wµ½¹5Ü7 Õ×qVY/8SÝeËÎ/TVÝAJ‹­žxV››/ˆ!L ~ûxCÂ*òvKÎ)8ƒÑ0 -V8X+ŽØŠ}ЦîÚ¦,ÉìÄÊx©HX-@ûaØn¸Éúÿí}©*ÕI^$*X7Ù¼ÛµM5Ã]6ȃ©»%Ï)b|X¶ºý€_â5·u´:ipª%müþþ–v i¸bœ®45òGÄÚÎiIƒrØ%-ÑÕí+ŸÜц•¶ÁÏ{9muª’ÀüHÄ&¥fL†ÆGh‚i¢0ÍTÇ4”U³üî^K9šõ‡d Êa¼“ïä,µÕJ êï€},ÏL%©À‰súLT€´lè çÆ!$¬ud4ötDy”k±²È·Û‰™„„èóšZ+5‚³æ¶À +3?á¥5JèD³‘¸4­œg­¡TÕ—]^˦נ±1ÊPXþ„âÓ½îz>F‘9™ˆ¼¶{6ôã.ªzšXÏ‚+¬ôëÐ[!«²ˆYeèg &¬ð›éòˆãð8YjŽ p6j WqBR¯”®f¡+çt&o;UôR)‘R]ÿ²(6Šì>©V3…7&¥€Áhí®ïžiæið’БZ O7Ÿî–b‡¸™x:²ÐY4‰·!/ Fª¬iá£9QŠ+¾álœ½LòªékFAŠßúÚzE8esSØ ½Vº£Ä‡”FÒd#w¼ááZ­†k,ü¾,'k¤o³*B8MŸLìYÐ,Nåã|{^3+l|üíß´bÈP`0qx¤¡õmÃ0JÐ$˜õ^¿¥d‘ôŸî¨i_J1½,” ~ÙhA)¤ÏHÝW{‹|Ϭcð×KŸ{q:Ÿ—º± ^ÑÊ\Ÿ+6½*ÿ 0W\nÛ;›¨Bn]X).×9únº²1›k—Á»ÁøAAcëáŠ!ãz}ÍÔh—2ï%OWFÅTì‘vÍÓ©ªxá-¶ªlçînæÓÎ\UT|”Õiß[$ºßL-}ìu2®(14¬=ZÆsjcJOX¼ ³^bÝ 2z¬kÌÅoÌIbp»gNÿþù‰újÌÝÇgž‘&o½¹è…–×¶¦åÐDÉë£æ…1ÄQüP5ð¿/à_©`ÏêW Æ¡>ëX`PX±:iKE+|m ÈdIxjªn縰c|ÞT! àxÊ œóÂ"ÞSËҸŠb# ®Yy"'Zæÿîi½”Úâ¿@èc¡‘ÓSº{¹’³/¸YÂb©´!iæ¦í“q‹F¶XŒ³¯€4OA¸¼4Ó–‘Ë=;ñ¼ZtçeyG,æ5~âý²Þ> stream xÚÍZ[sSÉ~÷¯˜Gxðœé\›ò.E²UI…©\B>Ø*Ì‘K’ÍòïóõHG#Ð;‹û´úô|Ó÷™³!•hœ ©$ãƒþͦ8}2$x… å*P 38Ù9ÃÉ)AF¨¾ÃFB‡Ø–#pÈ$}ÈΛ½Ásõµhˆ<)…E8U*òNUà !©2g(Uy`𨠖 –*RÅ ¸d]‹¢aÇ•—@¥Êˆ ?€~Š €±vº&Ý“nW7W*‹ ‹wGx?JVžxþ¨:Ã1+b/sV*.I—僰" áµ\6âE”*°ÒZŸ3’$a Á9gBЍ¡°))I•H6ÞqåPQóÎx"U z •ÇÆ³«<å+σ*pE†W±~åEP¹ÊÁÙžuY(ñ©²°X *†ÅBT@ù蔇 ø”gú”u·‚í9QK LCÕФn#àÑçJᵨ±”S]-à±Ô­¸Õ¥úk2‘«û°«(±ê+ꛂ5à¹EÝÉÄTWƒH\-F“\µmLˆ<…–a¯DUs,&Áã ·‰£òvI¨òTXÐ’¯1š<(_å¨RyX#Ô}ÀÙ)äÊñf<–bM ˜.%Í‹ ‘”«ý7ÁŸXöOjbPМ«…24VÌ…T‚†k†¾R#¹„TSByT)¤•+õ×`)j5d02…NNŽº'æ’PÙÏM÷þ °0•nÊ à×——¯~úip°¡mÂ,¶ Çš„cNVS¡M8:ÞMÂ>ŠEahö–S#fÄ"Ð?“}:VæäÄtO U-­ßyªîÈ#MZH·O¶Oà³úsóˆŒÆã'-(vn«^/Û÷M~­@ºg‹ùôE¿2¯L÷ìÉSÓ½ì[™-Æ—¯zü09ïº_€·VK-‡u‡GÝó~9¿^LûÊ£5ïÏýÙlòóü7óJ×%ÀJÑ âØ\^c½ÉJ´VóZþtæPúÊÔ¯°jáßa$âH¤‘È#Q6ÄfÃwÀWýGÝÏóÅY¿¨˜ÜëîݯÝ/x C¯uS Â[sM¢­U)&[X38Yð ÷âúÍ :»?͆wÝéÉI]¡;®fó¡{Ñýíù¯úߣ‹Õêêw]÷áÃ;¿‡9ì|qþ váÚè4Uén˜TF˜ÂÁFÑrç¬VûbE‹šâÜCê´ÆÔ Óýaþrn‘fÃr8ž «ÕbvþØ<4_›jÎÉn(²-è!‘ŠEÙ݉äl1»éÓÉåå›ÉôÝòÁø‚ÅÑÊ`‡È¢ÚvÅÅ`–ÓÉðp<ÜÂèð’]- ¾d R‘¥,ÿGÇâ×¼upŒ ªi¥—àè[ŽY^_]Í«·×C é¯û§=™Fc2}ñC$çhuúä¤ðà=t-×8g‹9l§­Ö0&ËÃô¶´ôë »-ýÇÝZÍS¶Nv4ŠÏ¤7"À>(…• E³IX¸ØäR»0¹FÌBÙR#d ÿVc¸†Sb£°0.7 “ Lø6ad/¶×h8Òø¾ëì{vúO½ü¿nؾlØ"÷mØz¢Y·^6 ›Ç†ÍcÃæ±aóذå[ û»sóa:Ú‡<ÊF{à¾ÝQ+Ýñ¢{¼Îéã«~±˜/îQö˜5 궬Ç=K8ME‡²ò?ªyûAQqVZƒQÙ[¯N-zñ`¸Cq±íŸ0ØsÁX ¼ÎWp„à-.íeõ~àÀ¸$¡§"~$=…»dõ(ÊÚ`WÖ‰8BÀñIïP0q@ã­+‡³W^ýˆæ¡¢÷FÕl„ÅLôp°j/»ó#€`_ïü·¥Ç“*±YÚ„Á´zÒ$ìK´;§„Û²¾Ã9ÂLõ>5*±¥Q3²H¯ÚÚ4£`êÍ`›fœ@\«å>É¥³dÞÍ,gâ5cNà]—»43z1¥Ü(ìæ­v† •Ôh:‚Cïžm>Ÿf¾vñÅôcOÜ1öÄû=2ÞSoˆ0r–3ŽFaÂ8…q4 ãhÆÑ(Œ£Qt#1jŽ|¯Û IÑ"ŽLœ\¯pŽz‹èµ ®ylo]CJ¹uë‚“|:`ó˜Ü2ÌT`&L‘El½Î¯—|è–æQ—;cKó½£ðrª& PA?xø(“ìöªñïûÉpvüîÒÐò­¥ê7Á©5oë7 urÀ‰ƒ ùhÄ£ ÕÛš˜õS“X¦ðÃÄ£f¡ŽŠ‹Ö.¡Fø¤ßË’•°3žæWŠðr¶\=äç£wGüA-ðõ›^@Èù¯„õðvv¾óp@˜ V¤-_¬‡×¾d„†PA,8ÊRr¶ý@h B)Bÿ:XûÚ?Â'\µ”ƒãR<:PŒˆ òC"?ðá#úï¹vŒ_ŽvIgWß&‹Fƒ¶U¹4¢ú±nçMÛ.a§·Ü&ì‘ú´MX/?5 cŽÒÿµ¡IX"Ym…éÜê@Ö3xjt K²ú…»IXoÜÝaËæí9ÿÖd¿o˜¿ó‘¦¯ a©–®G¹é7³þÃã/¯ßleGió÷‹ÉÊÌ–fbþvvÖß̦½Yë#þÞìÑÃ=Ïæ—³éGs³´æ}?½˜ ³åû}ïÊæÝSsÞýbrižœþÕ|†Á\M¦ïpfÙ§ÊoT©‚åì|˜\.÷½ÆWÖë]Ì€`1½øˆ÷þ‘¡Ì endstream endobj 5899 0 obj << /Type /ObjStm /N 100 /First 964 /Length 1364 /Filter /FlateDecode >> stream xÚW[oÓH}ﯘGx õÜ<ö !u[(hÙÒ¥‘ÐJ¼¸ö$ɱ³ãq!ÿ~Ï7NÜJãÀ9¾œ3ç»Í¸:Ë3–0'œIM¿‚¥’~ÃüjÆyJÀ0®9ŒñŒ(Q  ˜ìÅç"" ¤‰ )ÁcCá?(g‚þiD±!tê*¥LP§¤T¡P 8P†u¡¦®H8è4¢Ø‡š¤HT mFeX½(Ld M"KȬÁ 15qFë¢EžÄ{pO¡BeL”[R@"zH¥k +%Ú‰îÑ,¨ˆ0 H9!Lƒ„ð@ Mþ”Ê#‚ŠŒq ÅRâbq©¢žÊ€Tròú5;»egWí¬eg—ìE×ßu¶ ®mNùiú’½ysò‚—ÿõ®st—ë—®iëv±f/Ÿ§› ýòü6ï›x»;DÊ6¤Û~µj}pÍbäµ O.º!‹ õ¢mænÑû"~v=qʇ´]éʆèÐ5óÖ/jq×ö¬,|õŒY¹‘øâ]”¸h—¶rlåÛ…/–Ò$GÛÿ¶½gsç»ðƒÂ!d=Ø!Ïw6|³¶A4Á.¬gU V4[ݯ;W5ëZ“»Öp»…ÂqÞÔ¶ïºuSÞû¶iûŽ;Mx€¯þ»Þ‡{Äa¿ËUm»_C=Ñèx¹×{XÅy7ЬCŽk;!Ž=©Qìv WnáJq¬ŒØ—)0MíbzRÕ(ð¡é‚ïwâZöup«ýȺ žgovoÑt£ìÐxÃeïí$©'Ü¡î¶ì§„&Z9}SPcíZ 't³àÝsE£v@Jù\¢7ý¼-–Ä>®özÌóÛ!!¤€Ð¢ô$¾Ø©Ó–wtô˜æ]™MN˜}°Mè&ɨ'dæu±˜ÆÞ¦ö¼ îN”¢›PíAx[·ßêõ«‡Â¯‡mÕ‡ƒ»³¿Bñ—ˆ½pðLûÁ¸‹x¹Ùâ─;×™eQÞ»Æv“ÄĘ…¸ Ì]†ÆœÒñûRr_êSÈ×—âÁÒ™ˆ#²±G¨©1YÁ6•­ØìÐÐìóõ¾›#ÙÛ:ÿéÂÜÙºb7E áe²»øÉ×$Y3ŽsO{Áo$yûUô©±¬Ã¹ZZ¶ªéPì¿;ô°_Cówµóöu14äf[ÆÊW³›Þ¯ÚÎnCèÎfèdß±¯/®n.f__Nkáä¹¥>Ïn?ŒûÁ]ß=óñ´³?Òg…·sëmSÚçGñq#|o‹Êzt½íþ ‚ÈéýæÄ§‹ÚÝáú€ØÎT Š€0†¾=<„z÷ÓóóW.ÍÍùÅ_“hâ'ý¾ûx~u;‰¿ØÏç×Wo‰úñíõÕì=JYÙ•·el5¡ $µVÛôËMêH°Œß”Þ¢«Êù2IR?-éÚã¥Ò§¥ðVe\ié"¬W»f›°K:òˆ0Tz<ü¦Tûñ‹ýѹÀ`ÿ=‹ÚG endstream endobj 6050 0 obj << /Type /ObjStm /N 100 /First 962 /Length 1076 /Filter /FlateDecode >> stream xÚ¥VËnãF¼ïWÌѾØìž7°X H|@rô…&G±)²ý}ªG²‘,-qœX"YÕÕ=5$]e¢ª”«,+“ZY'G«b>:ED‚"›ATä<€#ÅU¬ØÈ%gú`•¦ g¼Ò6ƒ ´A_)C2Ú ÐÊø Œ21§¬Î÷xe­”ðQÙ `’¥V`åP@+3°Ê³Üœò: Êû ¢ò¹H*h#€U°ÂŠF…XA•#IõèUĂТNU¥¨’ªT8¢J‰[ª FÄA Ë9AH\áE¬Q€*,¸(ŠA%OŠPš´Œ @2Â2dAÅÈl‘¦ˆ¡bYô¬cÔ`¨Ø þ0 r,z°FΊž†EOC%‹4øìs¡PI Ìž‚L>€ÎWá V5`ƒ¢Ï¢£‘…*Ÿ³@&Ÿs@²Ld‚bÊóCÚX.8ÉSWXæÜ‡E~8÷»ÌQ`جs5䈵—û\%eÉ 1Ò‘ƒ“WKRhs0Ž‹ rÈ6WspàØ ’ÈNr‹II²òìYô°ìè!roBî ÀÁ #ÀA¬¤Zå(±¥ÑˬPmˆEW:#lÙNó’\ %@(§4M¹_Ü¢Yv!¦ ”;Âp4{ÿåëWõø»zümücT¿¨»ùåY~©9vãð`ôß«o߾ܩfܧ¶{šÕ}O_xs½?ôå4s¡õŸä٥۪ͩ§»6¦ÔÔÇÔ>Ý)¹…ÒüzöñÄüB¬Ù·Ḛ`vÃ<Qã‚:ÕÃ6q©Z¿‚Mºî»¹li™¶ÃØŸ†qßÕ7Ãð®qÉϯ/C>3¯W5Ó?SR7ˆ‡zª·S}ØIo´,m?ÎiÇ?òÚúXçUJu»N×·èrÖ5ÌšF›úú” ÜØ5¥]7×eÜ5™?§îX0S¿àoá['‡ëdIîº@üQ`Óõi "T-™Cû¾c èš2ަ׮Iòçù”7ÏéP"¹Èçf÷y+îN%ÛBßâwMÝh,ºMÇÜÈXOç×û’^ìvê^Óô !wEh_ÿ%Q-PðW†üèØÕÃú’ñ†[:96%*ñ–Ê{v ”¸º¢T˜`¦+üxÓ×Û3\"V¶X_ÑBpf¼!ò²m‰Ò"Íx&¦i¸¼Òð²MSÌ"ÌýØ|/à-²{ mv2¿Å/éšnÓ5¢‹8‡Tð¬åE|sNþ—•E–çóBmûñù<ãqÌ{ý9íê×n,˜µ^¤ú8–?5]g—=õ"È/ÃÇ«½üœ¹PšOC³›Æa|™å{j_íªwþ૦šÔ¯Ž/5×™ú 3.­¿€ùáêëâe³9?æ›[n8b¦tp[ endstream endobj 6201 0 obj << /Type /ObjStm /N 100 /First 969 /Length 1080 /Filter /FlateDecode >> stream xÚ—ÍnÜ6…÷~ .“͘ÿ ›&²Ê¢]v#Kœ±`4 4NÒ§ï¹w&Z*Ž:–t?^J²×R )¼–F˜ŠŽVTšŽ^(Í‚PÞ‘ˆ‚îòZI¡­'¡…®, kªVNï ¼°’ÊU%¬‰$¢°LÖJ8ü‡ÐÂ9º¤­p‘Ê5Æá›u>ð™JE£)‚³ %B$Ž1¢2Ä1°ìÉñ"J¾9ˆhÉ*`‘µRÄHd«…’­¯AGb~¬à :êKô$|“Ül¤%2†„GCJ £$¹G_eXa7(Oó@gÚZP”%/èMC åUÂ](P g¼áDÍ…óäˈ ¹ËsC3§ÍÇâñwñøeücŸÄ»SëC®OÏ;·³;½sïÅÇïšñ˜ÚîOeÂ!Ítx:ï÷)“Ê©né8î÷Sšßoý&ñ{îæt2›lÆóP¬Ê=ã&qêþJÛ%W@ͱ½ü6¤Ü5$ç·Õÿ§Ì´c=½Àô ìXÿxÓtÍ ïׂNç§6½vM Ë®°þYË{`‹q¬ó˲é H~›Dç4À[á4ö}AÝ¢ã§7ög\½±´\ὡ´Za•4.ÑOjænxmÍßê¾{Ê5Þ²`v õéÔÿäÝvF¯bpç”Ú»‹mÖô©Χ»Ak{¬MûúÜÏÿá]ÏÏÛܵ÷Ðs[/Oâá5å9åmÚÚ;h÷óý´åž£E¸1Õ}×uÖ5ÄOÝ¡›ë^|}ü¶eÂ.;«íFÞpݼïRßêm„^A Š}wØ®7+õ¿Þ'…»‚)yœÚe£\«y—„|ÎyÌ"§Ó˜çnØ´í– rÆíºEêýxèÓkê·KŸ¹Þ.\D<Íy¥tÐuó|þ7Ò„“ÓÖxþÆc/·«ô*n¤çz¶óñ·’wåîp¸¼‰ÚnªŸú´Í³e¼4ŽU{Hñ¸{¹Ü`¿OEчۅw¥¿öÝôcóryÚžsSûÚ·ó¡¾¾µ 9«ßÎôù^çtÿŠ_ÿ|Îã¹äÁáo|3çTðg¿ñqÌ…ÿZ¤¿$yÅË endstream endobj 6352 0 obj << /Type /ObjStm /N 100 /First 966 /Length 1713 /Filter /FlateDecode >> stream xÚ­X]o›H}ﯸom¥Äa>©ªäÚ«ÖÚ¤I“vÕ‡¼`À6Z\ Ùôß﹃MãĤ»Rއ™sî½sæƒZeyd•ѤB~ò5?}B1HèÀz$Ÿ é^YEÒHšd`XRÒ¼ð‰„àebß#-¹/I[éÀ½2d$3û– È„,áã½ä> k}0 Y4Ðä+–²áΈÎƒ€Á„¡G#Dspg°†‚Ó 5…Ú½² Ì!Rö<&BÀÂSè¥=$í‡$PèBi„ed€P@ „P/)‹ÔàÓB±†`Q\h-4ïX4Ǥ³ÐN ?…ј- ‹õB¾p,.g®­”€J)BN_£r"4ŒP(Ùd¤$ï¦O8]e€ Ç¢,PèF$e3"$©¾Õ3¯4ç¡ÁÂaîµuoÁb¬aä“´WΑV3ŸA6`>LM"š6°„–32°çÁC+/tm0‘PÌ O)ru!©¤â`C%}惸R.#6"û( ¥=fa+j7[¾ %4`Feœ. Dzìÿ2þ(ßñ¡`Ê÷9#¸H9siXNs„’ûa¢´'¸’Xp… tÁ̲.ÜŽ¢q­B·x¼ŒÙá°¦æµdµf5˜Sk§ëiã4àN˜ýŒ'°”¤}õîÝÐÙÇâkAgcz³ŽÊh^FëÅÀ ôÀ„~Kïß¿z«4Éná»MZñ#^ñßîwQ—qúö8“yŠ©¨ó*-®Š¤“}‚i–-AÔƒÀ‚`Ué‹r ž *ªE“Qo¦ð ¦²¨«,Ÿw6õ”ÿ¥q•¹cÙf5N×e#“„fuî^oŽàľ~’ü˜fÕ,K—Éq¹Ï0o2˜Ö³YSŒb6CVÇ™ÔLU¶:>½þ kÙ;þ›åYmsxð*6u™o¯× fäøðŽ39焈Q~œ ãÈªÌæóCe{äžmÚçQ>¯£yJÓ,O`»Íqß™u®~V‹"?2²¶­ý™–yº¤¤ÌîÒrCÇõìN‰úô”æiž–YÜüÞÔëuQV½ˆ¶Ž¥(^úRš)“ Çç“ÏÒçz<üBÃÑùióæÖÓ–PÔuTeÓeÚ/PµãO–<ë8³‡üƒÊÕhrj¥°õ¢Ó:§+Ó]õhV”„çWv×w¼P¶)–n[H²yVEKÊ šQ™ôR7ÔÍQuô(Óeô“°­ëª©c«ŸsSÜ7{ œrG"àKšuùÿVÚ~W”/BÏ‹r\ þ{уŽz @ü¬ºë¡ix—^LE£"¯Êbùá°#âæºg]nútÝoÍz‡e—Pö£‡è‚.]0þxÒâO¿âžq·{DòCH·C$•¿Èâ²Þg˜Öáø‹§Û|„ åGm2Wû(O°q4õïmuñ°uÜmóÃ=Э¶ará¾/\*ÜzÒ¢]‚À¢Eê¤3F¶cp î>¾%ăÖ^Œ¦Ã¸½u"U«é™o-´ß®vØ´ƒL[ #[¤ÎþhqKeìÙžNlw¥æ¾„‡ 3Æ1Váäì’®Ê"©ãjöSŠáä~ h˜GËbîº|è½:…ÿX4ËJ÷öyÑÉäú}®ÝŽ<„1'»Ýiâ¶âDÐîL«õ2ÞΜô‡¢)ƒå‰ßàhF4ãíîÇQõâ÷ù×±TöýÕHÙáW7_üª×‰ï µj- «íçe)º¬™”zv‚¦m´º¯<Ä«¼ïvyàË™.êe•íîý®ÜnÓïwa‘»m'¶÷|^¹µxeaûÊqźù¹©ÒÌ•ÇÙ{Ži<ù8¹¤ñÍö¾z¾ÀXÿ}Nîö•xê<m„uß„Vá¾U3߇&¸x4¼Óxx#ì™è9åæ‘*˜Dq“—»Ò¯Ò¼Ú*áÚÊeĶŽµ«ß¦qïKJh»r›=¹Gj§Èf§óOV-šãüb4¢*åÚžK”¢W þškÃsQX}BÖûþýÄZÚ“^'²«óïz÷[q¸’èù¨ÆÃ]½ÂŽ@ãá“#½¦ñ¤].3N&ãÿ…˜EqÚïnïíK­ºý?úJ‰®^§xõ.¸|ž=í¹PÔn·yøvœ°o6»KOUÐkn|M·oð->OoßÒŠwœõ2ŧ×4Iï2>|fe±zx±k­ |È/@ƒBy:@XÿP~ G endstream endobj 6503 0 obj << /Type /ObjStm /N 100 /First 973 /Length 1696 /Filter /FlateDecode >> stream xÚµ˜]oÛ6†ïû+xÙsÍoRÀP µ»Ök½¤‹{3äF‘•D‹>\Iîš¿÷ÐVb7uJwÄÇ$õ¼‡‡ç”­á’qf 7L ú´,‘ôé™PŠŒ„IN=B0©©KH&}B†fJÑÃÂ0åC—cZªg0<ÓÞ Erf¤%C0c ‚C3«CþùÐ嘓ÁH˜³4xω£$óÚ‚ §¼ÓÔbX"B\va0|悾¦æqh"&÷ÄuÔôä| Ñ_¥}qYæÿââ ù.ŽæŸu;гÉ|2;9 (€¨° ÆOº'wi•+3;æx.â jâ7ñŸýM™ß±yÞ·éå]Ÿ?©÷â9åÕŽÃÝÅ‹8ý ciC?¨z^Ç<è<9ÿ6›¡ü–U¥d oZ¤Uƒ]ãü®ës”ñ¶gÙ_òöev(¼e/= :Mû”-Ú´î°a›.B×¶¬i›š.¸½ù+NÁï(ˆÃ "2{’]œ>ŒÓQ8Ãwqæ0ÎÄáÄ.Îƹ8œÜÁɯqò~u.žuV®—tzLX£Èô2÷EÙ«ížø¥ÐµUŠ¢Þ—`Ÿx!PC×§ó×Û#Ž<ÝUi6àu}[7ÿÔqOÅtÝ…³æfµ,ˆñ6åýqßáÜ¡;ÀÆÓwÅõ ;_å9®Ã`:œC8žÚ«4ËYÛÑõþˆMÕ %Xd+rW€>x3«›/)›MΨuþéÃbÇ ®(¶ç¨ä·ÙØçeYàÐÃîúv]Áìp¬ÌFt≠ËÒ«Ûq¦š¡ ÿnÕV´~ÿSÁe¸` (]^wÍ1T;ÔåmNÁfM v7â²÷MIoJ<Ø6u‘a¹6ã&Ñ:CÁV¹Þæý¼.ûG¨ÛPÉ:£ îèׯO@ÑÙõ袰4GåŠß—±ü êÜÖÂxóòpŒR²¯äžR¢Î¨ã{Ð4¼×¤R~}²„Q|ñ=~ó$ütd‘üqxù ¾*ždÏqÛ}sÌèÔca—?Òv‡×{xì4ôáøáèoß!ðªC›äˆ†Ng§¬©Ë»8Eó=E$ýf'úæ(ìÌɸ šÛ/í2½\eu>¤—#¼¡ÿô%Û¹Çb/aÿä~ù#;~ ¸]8v\î—>ÎèåyN÷,‘’ïξ$vcÒÏŒƒÅãvgÏ¿¯~ ¾WeôÂ1¸ßâÞµÝô"#ì÷wþ íëíýoµÆ­¯Ë‡­6.Æ^~«“UË㥲íOAÝzµýé_u@M endstream endobj 6654 0 obj << /Type /ObjStm /N 100 /First 977 /Length 1578 /Filter /FlateDecode >> stream xÚÕXÙnÛF}÷WÌcXg†³(R¢õ–Èn Ô}Q´MD$U’rì¿ï¹CRVl%fоpÌ3Ë=çÎ]†t´V’Lk¥YÈéiXÑ3b<¤0! Á„¶$“‚öjÅ$fÈØÏX*q1(ÌÎT¨ f¼• ™ñVF1–1Ì*Ò2–Ùˆ´lÀ"IZ–³ÈÐf+¸µ $QZ dü~Ã8~üæðŒ N«‘RDE6s ¨™K(ÉÈÙW.™€á@`Ñ´Ïð€\‹¡è˜íWÁb9­â·J‹µ´ÊáA$ùX"òÔpÍD@Ñ2pM’øxdÈB \†„ˆ’HŠ$ ¡(=d!À"½/Âé,aHs’y$X”"]  ¨eЀÀb,u ,÷,ÖÇ „Ö„ÐÁ ¿ "E,‘¥“‡“eÆ Ã2=@>~pC"­„PKÜ3ƒ@ú ¤GŠ€b…j”³h¤É5$…gÑ!“’“ÏT‘Ò³hä㇚”!'¯ <©!¡2´S§X¡.¥òÞ#ÄRE~X4Õ‹•Ô>—”ÆûŒJ ,×tJ Ô š¶$ >cåü3Tp›%U?<°8WÍ!@4*NnH«©QÏB¥¥’WjQ‚Z„þxó† çl8-. 6œ°WÕfA?I\§E~¤Žô‘•¯ÙÛ·¯Ø:^Qal´¼syÄ·ì||< I—/ž‹C6šÏNc#, {ÝG"Ü‘á ¶@´qÜ‘2œZD{ß_ B;™õÓW»újŸ¾bW¯®d&.²µ«ÓÅ*©®^÷c×»ìz»fO¹û1›f\?Ï™1ùïý¶ì™|ÆŽÉáùô°ÅrøîYö'ÓáÇ©ßÓÎÈ ®Ùl|Î&£9Ñø|úéßàt2:ô³¢mFò»‘&ÚŽb6?#ú+Ú=—Þw.„˕˪;ZØ‹7 vyí>^»Ëk0ìÅË·¼™ÜÓ'?Û‹JìR5{Ù?Þ™[’õ—4¯ª:É*ïÉh8á¾C¨û±>¶¶tm¥±e™Þ%%».JVß&O…&ÃÑ çí=vw–¥Å^v¢<Ám‘mVuz½É½5[ÈV?ÇÏ6?Ѹœ…vä¯ËvéQ£S±ë²ÈvÎyÔOy{1ÉN“<)ÓxWÏV¥Ùz•°er—Æ=¯—¨»þÞ8ªµ+.ÍÒý½¦g\‘اf-øéœ4žáÔ®v(óu½)“¦Üû‰u]YÖK%|e~NÜŠ]¤YÂ&­×ç㾃áäÄО>¼<¶Ä© šK2w«âfËúùb6ÀÊÐrÕ“’ïRŠRŠžt]WVªy=Ì“¼*J÷ÀhÜ&²Sן•~¤•©ëÉ ÕäVøÞôÇœ> stream xÚwT“ÛÒ6Ò„ RDiQC'¡‰ôÞ‹tš„¡$!‰”PéMé½Ié¤)U@ªÒ‘"EEéEà‹åÜ{Ïýÿµ¾oe­dï™gfÏìyžw½á¼yÏP@Á…«¢8° H¨¤££A AHÀÉi„À¹Àÿ¶8Mà,…”ü„ÁlʨƒB5¸Á"@°¸$øŽ$îþ Da$Êw„PG¨‰B±N%Ú ƒppÄÎù{ ä†ñÁwïÞáÿTp…c0¨Á9Â] ' .@C Çyý#·´#‡–òðð„¸bQY~ ç4€cáw¸ðgË@]ˆ+üOk‚N ‘#ûÛaˆ²Çy@0p Áà‚€Á‘XBȤ$œ4ÔÐê¡áÈß`íß~àŸË‚ÁÿJ÷'úg"òW0C¹¢!H/ÒhpõTµqž8~ i÷qÁ¢ñwÂ%~•ª*è!„ÿô‡…ahV‹pùÙ£ÐÏ4„kVAÚ)¡\]áHð³>e#Ü»—Пá:#QHï¿wö¤ýÏ6ì …Œ‘·p å?‚ ðo›IÜ‘ÂÝ€pO˜£ÐÏŒ¼Ðð_NðO3¡_o4 ´'´÷EØÃ ?o,ÄÄaÀ}½ÿÓñÏ Ú!`8 î€@þ`†ÛÿÞæAx-@ú ŸŸ­¬ ³C!]¼þ ÿ5b!mCã{Š|Zþ—SQå ô ‹€`¨ðaáûÏ<÷ ˆ?uüG¬Òü™ìg½„‹ú»f÷?$àþ£à?“é¢Ô…¹ÿÍtKFøÿŸùþ+äÿGóŸYþW¦ÿwEª\\~ù¹þ?ÄáâõA îA:(‚ÿ 5…ÿÖ®ÜñÀõ¿½8A H¥À¢‚ ÑßvVá ·»‡ÀÁÓæ·Ýø§à\Hø=ñóCˆþËGPÌ™ðÁ¸ùÛÁ$‡û5ÈŸ{8ATÿ¬C CÙýTŸ°˜8‚Á@¼„ávb@o0A¦vpÏ_ì "Q8Bг/Ð…ü´¨Pˆ…òpD¡œàüã Ø †PÄ/r ø{ÿKîp¸'ø0‰‚I9UµV*0{¬ I“m¥š å[SàºUFmã 33¦´JT?tU­ÚuݳæÞíx/×°×z‰î °«®9°Cc&Ï÷/ŒÇ{°Üš¤n$zjš¤È&Y„é&ºÇIÓA)gçÐmÈIíóWuçûx.úbÕ;šÁ-ºm•ÅÚ ,wM>4À5AûŒVÄvÿÊþèú$p)Ê2eÑ‹&3¹W~d¹o¦ÑyCÕ®ÊoÚu?ŸçI:¬ÖÝv\ÞÞ´ºÉÐqÇÑ6Á> üÄJ‹ž¡WLÁää­FØMg…²“4ôÊÆ`M:Sê¯æÊ>²:k†kyMwŽ,üx •¬a1ÜÄͯ'sVºüÙ·Ž³5ÚÝ>„¸ù¯Ê$Úe>† ž _ûÀÜ—Ì™}îàqSa ‰Ç#Ù™»AÍþf´""—Ý)åÆW„ê>õ^,0ß÷Æ‹žåî´µ)rM¹UD"£é¢ð 53>iùO·ÀB¯ka©UQJx×Å}Ÿ ÏE+í^WTo¾ÅUìËÂ;ÚÇQ(I {Ö³öˆ hFÁæð[eÓK]a{l¥Ä1vDź9ÏwÞô ZˆDîÅQÇ›øÓMâ4 .]‹'+¹wMÊd´ÝA¼7·›ŠXöÿùwÙæd=MQWÐà©Hýd/}Ÿw_.Có2Ý]ÚÅ`ă•a„e=yjG_«ÓÜ/?¢×ï \{Õ¢°°Û”É3VÅ<þåRK±L…àÝgŸ26wE˜oìdÈ\a·h³a?‡ž£l®}Sd1ÉŸ?îy4p±~Ûôû&âåúÌôW íuÔ}U¬^,OPB>ç–ðv“G”1uÙ=eß½oÓ™±Ýæ‰WZ¾ÔVî—:_!oCÛš24K >¶mŽÑEЇÉxNÒæ)ÛoÿN½æØ‚ÝÊHeÿ¥SšA_„Ÿß Õò2Ã0-…fÖEbo6‡®ÞÍNÏT¿ir0`W³Þ_ÊN47Ϩ€úƒ˜$ÿÒ±;ým˜ÖÞ™I)>üðµ‹fQtøËÎÀëùúcóݲ·¨ø 8Zã¸iH‹†+Xþvâ V&lþ©^ú›“ÖÇcÎ.ûsœ6»®V4©w—ºsV®;C´Þ˜9J1¾ö~põ=2'üñD–ê”7Ô¨u°Åž<äã—œ2ïpíÑM®°Ž@¿YæÝ¥þ…ワuó²rW§–krÞ÷¡¾x¤-JBÙÒáM[¡mÊðæ5V–—Œ ^'_¯øå„âV§Ìr›oÝñßvÃ-ØûvЭŽ$ðT†HŒ™%z]§“ÎÀÖ ;%êY·,6Ópv\zbœÙ¼à-;-”SZñLÉ5¿â,õ}Šž¾n÷ÉÛ‘AT6‚.⢵‡rá7y¸þ®Ý•.’ ÂÎ|ÄzA¾½NŽ} !"ÅR ØÝ¤À ?9aëÝÝ»D2r«L ¶¾jìÊþxýÃ5"“ÏËrµñõÀ±W¾ÿ‡Ûè«ä©ÆC,BÿjÿL1}áû"’Œ™ Ì}Òæj#ÞàÃs˜‰S%‰8· FçÖa8.ØÎß?p¶Dw3DØ †€,î‹îœËl±¾Á¤¾p÷š®p´æ}©®õ¡ÊÇr÷½y¸ÇÕº:›y"ü¼u]îb¾‚%w ¯Wf߇´ÔÒ^›¯§ùƈ?öÕ }µ1©dzuqzP¨H¼Ão ´í¬ÖsæòUÖ#nÎlCú£ºyte©§;]ëU_ÿeUŽô[éPú›Üuxge}(Nª¦÷ʺS~cW¦3Õ².Ó¾hÙ¹èQêî|Í̹“oº­Ãh¨~IU5%wá'©€JýËÆìAJhèÚy©ÃN%¢»ðu.U îH@îࣘ£B¹!Æh QÄ—”–f›Ýòà‹´£öz¦so‰—г‹fb£…âʹ*Äö.½->ª›xOP%0¯mnr¿úYÔ,Ëbô`ЉAVeܹڿú¦Yw‡vL[ýáÓÞXãäÊýô% N¨Ë±‘:KrôÌ+½ nÜÓsþ¬@:“ aò±bVX¥.¯2ã›fu˹o$¨MƒåëB…îKõŽh\ØVÅ'p¶ù¿Ò"&qyg/îé¶ÃJé¨öð­z¤®.TÃËy< Mtޝøa^å…ò|[ïTþ5Ù3¯Ú°5…ÄÒ«Žy]®9Ëdí‘f=Û9{³3$8Ç‚?3hŸRåO—üÎ^ƒwÖžI†X‡ŽAdŒ‡³åû³ršx·’òz=n²vKû7£˜Ø²65;ê<,ýý˜:V}±ý¼‡FŒPm_!Ù!1gºÏŒ2ú¹zgwÄ~„Ýf–L|ÇŸklà}O.¶®·ÿº®Rùª¡Îþbkâò”lâڞჰ•K+ßExß9Ý6íÌTÞX‹äØóÙκ٠1ß?Ñxvc}J;^Êæ!ÀN?ISƒ£¾9©Ó¼û=#ƒ«ÛÚÕƒ^·çùy©^l>c1ä'“?‘ ¤ Ú™Tïž÷rá~´¤}¡i÷"‡dË8†îëç5ʦç®ò£¼ '1Fôwc¦Ušˆ Lõ¦’&_FQWª¯£W¯@ÔÉÙnQXâóO_Ñޱ©8™yg‚ÃwÀƒFU‰&Ú§£b^¦Z>xÿÑ¥äo>Sõ¸‹ùNŠvëÁ&2åø"SF“š~-«Õmug"¶§î9gh$&Ðø’މiIú¾à§«æ¸µÔ”õʲja|æÄ÷Ø ¢P€´¡8\çÒ5kûš¶A”ÝL¤±É0ÂjÓy?ugÜN£rÅw¹À&öùÒ¢|ä#T·M¯§¶ò›v…”ˆú‡§Ýº…¬o (€Ú‘_2ì{ unyєՓä\°¸{òB‹­Ü5rV~Î&_á¯Õw÷›Ç:è(ø9 à”®ãÊ$eÑÑh¿oåß©ÈÍfâN%\ðö>eÚµéJÝZNõc$‰+nCÏ·ì'_kdRR+¼â¯û6»òq×¼PëâWqš…ùƒñ^[Ûå6'I!*âëD÷kžøŸŸrò‹3[¾ß©W\]ŒŸŠ•îßX¹Å&q*óïèY÷èÄó!Šçåùš%ãY ?Æ­ÆÝß°kæÍ™NÁ¾¹ËW8u¥‹[ýGl©BåÅà‹~Jo¼kéR*I©ôÓ æ¶áSŸW‚ÞɰÊP—CÐã¼0î"†©‡J)|_ß°4²|¸ßx†ær}§Q×r¨”Ä©ªG»ñÌ_ŸË!+Åͬ Ò]8@œžÎ7O•R%ý﮲xáëì§="ÿéKé«Ëj2]ÖÏßoð8W¤7!(% c±‡òXë뇞j炱!Ô›Œz!i÷#¿:U,©ÒÍ´¼½ÌÏÙ ¼a0]yŒµO¨ÍËoéês£ªøVR„®Î“ú¿TÙ…nEò+•»ítr…œš]ÝÔÈKïO!Å´ZN׿zôúüã‰eë·ØŒ±»Ž–û<<^^‘a?¡4t¼êÙd“)Ù>:d|Ç™<7p¨O!‡†ûƒ•Î2Ó;ZjJúý™뀲‘ ½Ä*—Ùá·^2,»ÅÖx1•¨&<Ç٣ؗ9Ѐ³aúI«Â7bÇ" –*¸5Ì–LóMü™sdKÓ šŠã8ךܵÀ``ÞÕ…rfÛÄÌ%ù»‘7SP–òÚñ£d+Õgj|{Å_7x_K…¨ŒÜX ŽG½0‚~œm[®hhÿÑ*œÐ&ûü³–§›HgÁÂk\kYúzÌ[ŸÓwœa ¼A™U•XùŠæÁ-aëLMd67«ºl)|mêÞàl͸TÅÁûÞwOƒ|]M3Ö¾×é,* á±¶X¨oLVÔ‡ÓNl£<½M<¶Eˆ89kI5¬=ˆZ/NåÕód—¯‘sŽ–j¶Ð û6‰ü´î¹í>kc‘«niµã{[K;Jd·žŸ»·G6î9ÑEË¥dÏ (°Ž5¬Š c%Û¬z™¥Ô…˃[«å\Úk«aôtËgD÷ voÂ)ò¦7pàÇï…nõÆB¥CãgNO„V¼çÉ×GPéC9Wƒž¼é!Yú\ ¡ÆIŽjy½ÙÓ ó]r,ñyúŠfè¿É,v³$.«”ñqJ>øfR½ß²2åØm ©KŸnמï`IY³­7*e”¾åÆÖÌÊ­m¾Ã_”ж±ŠoÁøþ÷©ÇW„ á~Pu+=»£æð¸)åè5³$õ‘¢Ì]޽‹ß{79ÒyÄc÷Žû1Ô{7)Ùá¥RkWüGM»‹íüÔÎ@*)‹C”Dùsòàåú‚hODe„I‰Û¥ØÁÆŠç e4“èOùº<¼¬æ'-3f°Ân®_Ïä²ßhÕïKyïí5‰>¢ éÈ~õ¤H7wkœf¼Íys¡ËnÁ󥆣ŠLo`QXUœh×á{¹ù«Æ£“/é³Lå·/„’¦žmt[PV&&â`N½šŒ œHbo$uýáÌÏß´‡ù´˜ÝÏ1iíæ^ÇÏl¸z»·>îÔÅñf~OƒÑ)§V Þˆ£²‘Â9Ï ¤gnˆ²rÕ“©m¥2]:œýR}㉂^6wyöµ}'÷Ì zHyZý–0YŠ:‚Jk˯2º´+rSæÊŽþzB2÷¦²´TSeWÃñü•#a,=knýü‰B­CˆZü]ÃÞXðøæw:ÁÙ¥;J­•s#×*éef11#¶IÛô.neÜÂV³í©ºpæL­µP ëg¹¢Q48éà;•utÊöúk´¶÷ü ÏÙe´fÏåTŽVµ˜ÓÓ¹jøvÂó0–”<'Ñ"mD›ÍŸ–º’ÕñÛæ`€Ï¨Êâ%zz»Q1¼hì%–£Ë*û.ÎEPy¤>ßΠ”Al2+.\Øk8¤‚!èC½/Û‹5­õ÷Z&F·ŸKÜXŒÊJD«H¶yôgf0¨Àè¨â³;K;e4öÖË4{m¿½N0ã1ðÜš‹[!éò¤œr,¾MѬ¬Î´‘ýÔG «ó{ÙÄ Ypi)¤q+ @Ò”¡§ÏÑKk¶öLUJÚü<ûmð¿NŸíç ó”ã´Ww„0í§…ì[ ]Ж޼ړe—RNü.( â‡ý¯|OIWT˲~v{UNåöwäèAâ­EçÛ³Ù»qò†9Ç>šT<ç»ê–¤Ìäô¾ü £îÆrÊÒ<þI[Vùé§ù__|‹+ý8·®ö¶—öe<QCšÇš†Îþ¢W$Qšƒ¨«OeCûíl[ñ=dÄd±¸ËW‡$œûÙ¹käÒÐ£ÄŒì¦ €¥lÆ0>6)™Ëé¤jÓâ%hîbÐ\!ÕáÎ{Ëoä—(ê S"!:þa¯’®Óßûœ¤ìB+>²¥R]Âi‡JŒT’ûÃ|†Ç6ÚôØxæÝޮШ&â(“ô²‰ód<« š»É"§.¿/´Yí–9§9åK®Õ»»¢à;ÈøÔ’jÑËšš_ÆÓ&êåsc²O:柊ëQ„:)N-IÈË}ZQ&{MËbñx×K9áCûEWÓB›ÛqÐHÈy’­†íuY'ñô`[53зDúä¹V½ä[¿0|{$DNLÜ‘„Ú‚¹AåI•¸³Ç7ÈÀ{§~K}ØæP_z—ìŽÕóo 4ºP3í•0mÒ ÝZ#RÚì¯x¿>ZZâŒsfíã!wÆ ÊÔøîw d+FUÍG´oÈ4Rðr Ýy.á÷04ævÊèBO»Kâ+ ökõìÕÝ­Žš' …/sXr¹¢Ï¡+¼ 2>¸(f~Øh<ˆ®äÒ°UYû+mÒìATÚ M8xÊÎËþD•)p;Y ¸sºæˆö!%ØW0󼯮”„FåaüI?W'ý£÷ä=Eù‡µ›å@µ³KS†¶J—ˆÝqƒ¥å3IC ¨Ðh\uÃÜh%ÎÈTÏ6„eô›¨ ž'‡gœç'ÚïÍ™rJ$´Ôèm¾‚jnL¢vñ…¦ß’½ä¦-|Û¤ÉZ5-í?&H=>=ú…•¶9>ÇLmlkÇsIššGtµ¤Æ—Jòë´íd£ÂC‰µ.¦_–?™°üj¨+)ñ4á/ÒõÂy c¹9žåq(çÈÉ*ªÁ?eM6BüòRW¯O ¥^àù³^3±7B·}œS‹¹áLBŒsšÏÛÔ¨âÙz÷^f±€töP·Ñ#Fëœ]Û+ r¸e x‡Ž)G‹?÷ ‹…9¶¬m5ûhŠ=xi«/ï`òí÷gÉúú½õëÜ?.ˆÆ‹1&ÖXÎ=¢×™¯@…±Rˆ©ñÚʽ1PÕ)¾¼Ðé61è°ôxÝa?5OŒ$9#jëSÛ•æ7Å~ÑêÚ¤³Ðx5ºQÖ*vÔstÊÿÅÖ/¾~Óts0s¬r­¾G£iKüÿDÃè%GhôÙWú‡Ð¯ñԓЈ¦Õs˜c–£ ×ôüSÕÎYɦW4zùë·û"(n*KEÒsò_¤‡0.¥ëxÆŸöõÞ²ÑN>–cyeGÇ{,: Ú¶ºãÉý¹YMU~O¢…—EÔ]Œ5 ;•Þ{\c¥­Úâ=¬×ú’øŽ¯A^.(0…*{²v¦ÄTÎDMšô´ÇߥŸf«gÄÒÉ€ï‡{'*I¹ uÊ!džâÌ+àh#g Âv铲.³Æ»5¸_ŽÏ)w< üphÀUØÍÚq¾:þÃM°<²ÿµ}ömAèõ®¡‚Í^—O‘=£Ì’KûœÚPü r¨!~¬V%3aØŠô ºŽðð¹'¨3qyMé¤,ë ¢îÝhu¨ûE]oïMÎ)‹¨¥,¾ì&:A”<ËTšöãŠ!?å0–1ôBvÒöÅõuÙ£òÄ¢c¨=æÒ®â úÅ\* `‘ôQõµnIOƒ±F‹“ù&—þ™á–³öi„®š½WW¦ 2Í;|û:ÌìEÇÆö­·d ­}Z4­oæ837·­;˜Ó‡ê³}l ˆ¯ë:@g-ùŽ:§‡U|z ú®Æ¦‘ž:[ñ²õ˜Vðšñ=6Çÿ™âL„ˆd3j%: 4!ŽÉ©fÑ㢷-˜K&íT‹¼×^ß^—yð Ë).^Z=ï3&¸¿{gÍ /zôN1š‡Š´ño þ’`G endstream endobj 6798 0 obj << /Length1 1384 /Length2 5979 /Length3 0 /Length 6930 /Filter /FlateDecode >> stream xÚx4\íÚ¶ Zô}½¢÷NôÞ¢Ž†1#ft¢×è-ºQ¢KÔ zˆ’-Zˆ ˆ|“¼yÏ9ïùÿµ¾oÍZ{ösß×ÝžçºöÌÚœl†&‚ÊÎH'ˆɪz&V" D‰89Mah8äo;§9Ä C"dþ¡êqDcljŽh P‰îxÃ1@DBFDRDA é¿H/@ÍÑæ è wŠˆSééïsqEcêü} ð€yiiIßဲÄ vDzŽhWˆ¦"ؘ Á0Úÿ)xä\ÑhOaa___!G”ÒËEWð…¡]c âåq~ è;z@þŒ&DÄ ˜ºÂP9LP´¯£Àà00„x#œ!^¦:`¢­ xBuÿ6ùWº?Ñ¿Á¿ƒÁ`¤‡§#†p 080ÐÐBû¡G„ó/ #…ÄÄ;ú8ÂàŽNÀïÖ e#À3áŸùP`/˜'%„‚ÁÍ(ü+ f›ÕΪH"úÕŸÌ Æì»¿ðŸÃuG }¯ 0„3ô×ÎÞžÂfØ=oˆ¶Ú ÆDôo›  ˆƒ¤%$ÄEÈ=âvþUÀÔßòÛùÛŒ™!8Ðé @1c@‚aPæ‹(åèÐ^ÞàÀÿtüsE$"8ÃÀhÀ âCý;;Æ þµÆœ¿Ì°aè'€~}þug‹a˜3÷ÿ7ü÷ k«˜šðÿù_N¤((* JK€ @RRþgCGØŸ>þ#VEÒµ‹Ù§¿[öùÞ?áþ™K‰a.àù7Ñï‚ÄA`ÌEäÿL÷ß!ÿ?–ÿÊò¿ý¿;Òð†Ãûyþü?~GÜÿÃ\o4FzHŒÿ µ€ü%]=ˆ3ÌÛ㿽ÚhGŒ”.F ŠÜÝþËCiÀü Ά04Øõ/Öüe7û¥78 1D¢`¿ž0˜(è¿|‘Ý1O†š¿]Œ†þYWF:ÿ›¨¸àèååèO„9kÌJÁ¨Òâ÷›Ì€°‰Æ„˜ƒ(Ò‹è×ÁЉ˜(¤/Eÿrý#=ØÛË £µß<ÀÔþ{ý[؈L´0‡ËFº=‹ì<¯WfôÜÃ[YíŽK±ˆGs½}誋Ÿ«9}OÅÁùÉÍч†óUÑSsAŒ|çã~w_æ‡-gi¡±ÔÖU‹‡¿¿t°8#\&$Æ­S|N5b&s°ÁµáN·˜»Œ’ìÛzú±ôªµe-½xå§älYŒèDåÂî=ìVl«è«»äI”^6ÙÞ¦ÚfWØ`Ig* ôßü×m’rFÞ¿•?8ðPì¨D§¯NâI4=uÀ¶ÂÑ´!zšÔü;ÏQX\*⧪U™)ìôeÑ\Ë8’ËßgJ;R‡Ä¼›]ôUÃnÜÝâ݈Ÿ“/ì]>b²ßÈ3ý&Lr³5-ÎU þ!‡ g3ÖéHöç:1xQ.- €×ؽôSoYQyf¥‹½Ø’€?BÌîãäÍs‡ÄÜTQÛLy¸ÔЇÇ*†pÏQ¨Åâ¥\&@ÅÀIe¨£Ïæ¶ê=zK@èëãX%k:âd»õUçHoÌ!’〙f:,Ų+w¯7õ¹¶øé s>u tƒÎ[d=oraòLˆqQ!®aG·¦¬µ’ôü${²¹Y±)Å[SÝ-¬l}B+™(åÐrR*÷ƒ*æ§‹µ¯ɇ·ÊgJ…‚î/M^S3ú”LÞ°~è÷Ûu»'¯CaQ;¢nkW‡ }î;èÛ)°–½”Ëm«é°Cɹå"•f!öT•÷ïA¿'}Ý:iþ\d©Ük Ëè™Y·üš¹Ëz0‰)ûÅä§¾.îÌ-?­æ‹SÜC*§M™!öÈ2xMK²x»êûAš83›AGÝΓV¯Þ×Ж“oÄ"6g²·7Â<í¶›õ?{~¯¾§¢P’qÏGI‹­?Ñ å’Ä%Ž5Q#ù*EIâ8Ù.:‡Âr…¶mÀuiKöl8´ÆS4^hzžö1½§jo`¾3>Ã) ×úîc(ö¥Ä+edOÃÁý½-[‹{Œjázmx±V·W*Ž£[)J¬’g_—Xªê^‰®Û‹¶ÝxÒV…ÔÊ $¡ó›¦§Þåîéô¦ê@’œŸ^Xè³2çªg•ïç´%Ï`Ÿ|çÊXφ³jü¤½¢Kmì*ò”E£ÐéKù“‰`þ8‰ê¹-P^¶ÔËCÉäEFðC'næëíí³6ŸÁ™À|˱ìOìBŒk?ÚV{Do¿UDêT O'±ißHx6óìûÖͯÆ?ìÑ3²9=¯¿dy+ñܪFó½® š¹aö(?0hýëW£`G±MJ8Nf÷±”n-#~é4:MËB¹²÷Éšl#Û¢ùòäÕöêsdãÃ%ŸöÂOiн¬²ù ò£ï"×+jºï²×|kÉÌ¥›2Þ¿îc¬š9_†›o¤æJDO:£d/P8D;šOÖåNI›è…o)kŸÚaW7æø.äR•;kk¸ó€ÏÄ"ü¾§°Ä‡}213Ôn„êŒW¡¢ˆƬê:‹÷…?ù¼Lž°)nû>ÏÒªËiP¬´—£N)·lÈtçñèRˆOê¬À G»«Y…žâIãžâjº'ß\¤¤é[:ù%CTðº&YºR©~š¸Ý¡Xfœéf£´=`ð7*‰h3àl"©IÎ|œæ$"ŒÔ$.½H3xLu| Ý Œ™´£Ps}w"·Q˜“³¦’9º;|ñbp¡% åV=ö_^«·z:óTÉÌ"•Þ€`¼ÇAÿñšNìåmwyºý5Jsf@Zå;¸À{C¤úƒeºîØorøH% îáØ,²á}:»x>>¿=sÙn÷–ã9WÂæñ‘-…<3yã9ª+2ò¥pÊÚšo.›éf¨#É1öjíÁÂdã*mX— {±lòv楷–I‘²øQŽ„Š<ÅR‰b)ÇtàINrÃD'{ÔÔY•­0Þ˜`Hp`ìÔà°RÑLÿ¦\鵫*°ã¸'bxi½iæÃl`5‰~U8ÖgWNÔ·êÃB«ííª~)møÆf­ùâÆøPDcU®íɶâ¬1öþ‘ºžžíJ.‘úÓ Ö§×¾Ïxçu£tŠ `‡c¸ÏfäyFø2…ñ¬ÍKâ¬ó¥lY£uÖvÏà†Ï<‹´;±?Em³Vš¿§,ƒÚðÛu Ý~_$RæÐ8Ò¶ö}žS€¦ª";gxä}™/ÛvCÖ˜Dâh™±á6ÇÇçm2?»Þðw%©ßšß.sæ®íÛìalk!~%Š%Ì8p~I ŽYèaL˜GGì1Ug}ÉÐ_¢K*5ñâd!‡s€˜ç„5Õô™+Âz()㎷¤‚zÊœºù›æ&†õ5›{ }|¸J¯âµ‹ê}êqêçùí¹×¤®wlšÆª.‡÷£ï·§dG_¯@2óí?”Nôš˜Õ~PŒt«3Û×9¥òs+n"À;çw©Ÿ{ö…¸O;®¦ûÙÈG,ì¬ÅP<é<êâ–›´êZÁƒ~>'M(’ KàS¿õÐ9æK)2)+ÐVµZãŽa€ Ûd,ßcd;ÖÌu·ø7‚úßÃöÇÊÆž ¤’t|\Þ'zæó‰ØQ‘† ÍÅÇŒ÷î5ëšÇÝ?yõóò܃„î8NbËIýIˆ½Ü!¥£Êþ©ÑsSÆç‹Ó$–||T¶¸¿eD2ÓôØSÞ/™JL‹÷±ÊOEtŠJÜkj^Ç»½©)!`D€èª5Ÿ2¯²Þ‹{ž¼çXea´Ã9sóγ¶yËR†’^1´¶?¨¿û±îÌ­¸›ô[¥Ìj·Ôß„§yzÖiðÕT~mXÎöùìe0ã<ŽDÜ(¥˜ÆJGðÕ1~²”ùÚ½¥0Ô™+Ã7¶¬Ë ÅK¤é“NãrLs“åg¤éÅòN.*§¹ôÕëðí†Yêôb/™·p,X¿Vf^ä%DœNÜhœ5íÌ èËIYÒ_!½³÷ùhÇN VyeS~(ƒ’+x×*ÚËö…zÙ,æ"(+ëÞ7qóÈ=è”Yüî=ðà³Ëé ùŸ ¹˜ÿ3½âA†}xÛ¨\é/,IÁ›é|DÌü.žÊ¡õ/åƒÜjDÅ)T‡Ã%ó¾Î§}Ϊk~8ÏD"´#¬QÉÈ8Ü6 *ÉB篶Çc ±3ùBˆ]è{H CA6æ<<îÄ ›”êÖ²Â~Úî*O‡ˆU¬Ñìô¨°˜ŸÜç8”V/i§Mq“'z`«Ôlú^¯³';+Ó8p™éi¼] ’³½‘÷I¹²†rµëÞ³‰ÃQ2Ö•ËS·›ñãYbJS&DžBo¾!¬=˜3(’8Yï¼ÎôÈ«´Â&õýK‡ÄÍ ßéNzBüÎ49~1F–íN·ßxñ¼’îÝD·ÆXN¸¾!75\þæ“—P6ºk¬|£]ÕBxÂ[¾xýqÆRím®ªµ}^ õÆn6õºœÿy¾¾7‰cþnYe×€Pùàgl´~SY,\ôy«»²¶m /Þ9YH‹IÉÇŸVY ˆf†ðD<¼œäY®J>»$æ¡TîK°ÙÚÍK®çÃAr+ã¥ϺY¦öë)î.Tóg€IŸ„¶Èß÷çöø„’Ë1Û “öd³ïÆ®0ê\üºÁ]®Ÿ§Ùôyõz¶)ö@åØ 7Û&Jı˜¥ÂâŵýPyýó¨k]NæÄÀ{tNV< ì R|Ûº‡ÇÜ+ýÅΑkñçXï€Ðã8­õ^’d5ßµ¶sÛÒPâ.Æš=çGêi4#e}|ÃèWs(„8hÌW·\Ðù§îîî¶·÷êhpÁÐÖâ‹:òU\‹,¥£Ñãïb§=YáFuÒ>æÄá:­VÒ{_k>~Ädš~¯[cJ ×þǬ2EZbÊè þϤ@®Y¹ÙžB¼0£u˜äë Ú¦½üÇ_¸ùh¯îY†š^C¡ågÜ„ «D=èy G' 'muû™«k%çþ·xÖë8«É+Ø:Xò…A\¨¿¶è–J í¬×ƒÏê+ŸmÐS‹.:L‰F9.8žÉS3|›¯¸ë¬$æ%·«fÈ"ÝešÅâäÓ ÖbêcÈÙ)+”Uu~¼š}}ØË³‹¾^„ÚíªHƒ‚¼'…bFgîkrŸ­©ÞÍj÷äÅ}Â{Š÷#ßž5—¢„·a–§í"¯¬ù†ž^;Qsc$ɽA®–º‘3Õ•M1}¬]kT£¯©¡w`*-ª³}¢þܰð¿`Á“ªb³4¾š²wèŒGGó×tN[uC$©A5<™§0gFÆ\Ý&Yw|é—”*OhÉ4=}´j¥Åì$’Þ¼Ö¡5Øê1dlg5•KO*@ôˆC£òM––Ú‘9ƒ¢ç¾ÿÔÃ6jÃeN ùŽðÞ¡A•¼Ó…ÓbMyCׯûúM6­¸Ú#ö»±¡ª‡¦´ËÓPÂ-B¹™¬Œ„˰k·1¿Êê"sw¸;¯Vßs8â‘…ã/†Ü­ ¥XÓu‡–8#½ïHŠ„ï6ù¬îöœ„è,YæëÍ,‹)¾MN¬Ò;²ý&cA/KMáÚEž}ÝrMöz¤ ka\…%U²áª¶¬b›ii, tã9ŠöΩ™íÆÓˆ4ù)Ëø7®ÒÄ›^ćz…ê¡üåë¢ùÖÜTqºïÛ‘t¡•½ŠáÜ-çå™—Ç×îžœÍ 3é†aïE¦sI¢Ñdاޚ²:.·§YdŸ{ó²ï4Ê^¼3ÉÌêõé=¼üªz¿Q±çND‡p𻄙P=Ha û„ÿŽÑL$ˆž}d¦fJ~/ì jgy?ÂyÇvõm5ÛkßK ƒ÷BÁ CÑ{£!â‡%æk£UüµeÏkŸ¼¸d–Œo4C…ç>«ôßÚéOÇ7-JP¿ÔôrY3Ãë'Í‘ó0+¨>¹¹'žà~æ{Íêy©Â‡»$Åuxz>›+ÔH*„¹[\¸—•TuaZÖqG<;`.§Í'£é•3«xöVIJéì¶„zK*F£@œs‹‘áKÖšÛ2Ó™Fš_]²áP Ç9A*pÀö(Á£­@8†þÆàòÂŽ·I4eÎ >ô¬°£ñ¬²N°ú"=©NvrØrÔû $5‘7'úÝ É¤×Žž°ç½tIW‰/HX0Õw¤g®A3ÿ9Î﮽)j!­Í ®zOž÷·œˆ¡cZj~¶»UG—÷±W4}<9H™#*¶¡™Ñw-ÂN²¢¤iäGŠKºÓ¬üH¿Å‚¯•vK Öo<èU‡òÛ/Ó*”ÓСX߈™¿>¶ïZq£ÍZbòf–‡Àò”«‰ …5e2)Îø›ÜÏëÏFä+7Þùêo4:«eâ8Î ÄW 7"}ûì'ãÔAñl:Ëbq“£ìv›Sß\îý5@Õyd=ÙåŒ@Áo…òÜ5Qû³ª£{aëñ„ß¾ì9PŽTx¦e¶®TjKЩfé\©âûÖxPã×¼1yÃñÔè;Ë”ªîIÉqj+­_¶/á‡îræ(Öå¼ë\$÷Ù#7ÔÓÆ¢ƒZdpɈ}¾sž³.Ö™Úìƒçðl?‡C°ãÙ5š1¸%®ÔàEúÇ¢}üfe¼Ri½­ýí©Ÿ™:³§W?vâßzim;¯óûÀ-á{´.aùL•¼GM‡ÅŸþe 4ÇEÉ×Znž3Úk³r/ADãÛ‹™²˜O-áКAžÏtS‹è5b¢€‹MÓÖå‹QÐÂ{j§[§y×lòü'Òf9p!"µKî³â•?9ð D)¦È_÷·Pè9ŒÝP¸H­ÛòWú8ð³Ílõ‚à÷+…>-Ù!p`Ö¡œ¿Š“dœË/¹ýðºRƯϙ‚ΟK]Þ»w±zǰ?²g‡œq{ŒѰ),‰}5%Òõu>¶›}šq“w6G0ð¹Ar[½ÁÜ…(¹qeo™ß«í=ÖX£‚_—ÉÔµÎ+“«ŽÂ<ö·Õð<§ÃÓÙ¶†lmÿÙ»êo¯¿Ýóôªt×#~®„§Ô ázñH,3Þ7‡69ûØÏɶϻ-ìiuq|äÖåú­ú.¾À:Ä\tšB^IÅK-vg•ÄÖ%ԤϷõÌ´½˜’Nù9Ö¢(oÊ2Íð}Ûc`©u¹öÈ«úÈÇù½¾ºƒÇU@m¹ º×¾²wÛ‡hÌÿ Õj¶ÿ΂…"×Y6´æ)S W!Ö«åí>wІó„¿¯_ýAÄ@§xObùŒà›)8N½Áì âsÊëôÖßvÒ‡àðç…_oB>ÖSœÎˆÉWoºK$- ÷ºYâ¨]í}¤‚~ iØ‘ùe¯'®ÛèÕªzôŸJÜ]ÉsWi9×Ö „§¾d¯£ð˜Ü÷ò±5[•aÑ]âHÿÍ@R:ûŽ;Q3ÍiÀñÕñ·Â+/wË^Yó¹ÂÞ‚„í¬Ýàyø®Šœ°—!aëRé‘Rù ¡î”çAD{KN žhBÙ+òwv7º>›¶˜†î4¼OÍ:6FEjÔþZ\¡d§àâ£ÂDUQ5>]ÒrvéÉ DÒ(Åòn”ÿ–4o«4àû Õ×v"ÎfCÖ|*?ĈtRŽÅ> stream xÚ­veTœÝ’5àÁ-x£ÁÝÝ Á‚7ÐXCÓ¸CðàîÁ-¸[p îîîôã}ïܹ³î7¿fæG¯õœª:»vÕ®S«i(TÔ™ÅMÁÆ@°-”™…M ²1vtPÛ*0K€­M¯FnIÐ ÛJAm )@ hàà°óóó£Ð$Áv®¹@§©¦MÏÈÈô/Ë_!c×z^o:€Ìm´¯N@k° Ðú ñ?¾¨ @€ÈTVù,§$  “UÒÈm#k€Š£±5È 2Ú:éf`Àú€ ØÖôWi,¯Xâ#€ƒÐôz èb´ûËŰBl@¯ßÀbd }í ÙšX;šþEàÕnþ›üaóê{S;@L ;(à5«Š”Ì?xB-Œ åv½º`³×HS°‰ã_%ýí{…yõB@¶(ÐúW.c Àä`gmäúšûÌú›†£ÈÖü_ ˜ ¹ÄÔèàð óŠýWwþU'à¿Todggíú÷mðßQÿÉuZ›± °s¼æ4¾æ6Ù¢°þ5(r¶f`;Û?즎vÿô9!7ˆî¯™¡%ad ¶µv˜ÍPX•ÀÐ×”ºÿ™Ê,ÿw"ÿHü"ðÿ‰¼ÿ;qÿ]£ÿòˆÿ·ïùß¡e­­•Œl^à ðºaÀÀ_;æÿ‹5²Y»þ7Ñÿ¨ üÃÿDjôÚq[óW)ØXØþa9È€\€¦* ¨‰ÀÌÈúµGÛ5mMk-ðUË¿Û`fgcû7Ÿ†ÈÄÊö¯¦sÿô5ýwæ¯òüÍ›USþ‹œ†8ã¿oÓ¿£T^U‡j¸Ú½û:Á¦ÿyø CBìpgæâ0sðòxøØ|¼ìžÿM¶¿aØÿuV4‚B@.Ý×’ÙØÿ.ü?~ÿ:}ý7i[°é_S¢5²5}¬ÿ4üå6q„@^õüû­¿üÏóß#ºMPægÀ&‚ß,“R“¡•™¿†¥t»:Øá~ØÖhäåø”ƒÛ½“‚×øK +X~Ž <7ºNØ=m}bØîïÀ·þО<É&ñ¤¢ïÌÁZ¦mæeÜöcÕ/DK>Ôþî~:¥°úö ›Ööú°ªš~Á#éh3'éô–Þ‡Ê)Ç—úÆÝË$±:¯ó' veîÁ!mìÞí͇ž¾_½íçð[ÄŒ‘È4‚F^ñqPWCÈUÉ3ü½¯#ú&C[0ØÇb~Ô:âÚã~ƒ ²©eŒ!Ž0¹íÒI ÙÅ(³bI1=G…ìfN¸/Â5ˆq“<ß•³†‡V*Þ0UÍ|Šc{ƒoÔÙÿImIûŒãè¥ÖöußÍ Q1ƒ¡özPÞ¿“گϫ¼Yc>!×™ˆÆWú'Ϲ­*Œ“MÞþ£@è/$×+w4rŠ!ØHo21ëËñ§˜‚=+Ë„€ÜÇ­!6N{“(Ú>eÂeó\õ]o±Ÿ“wl\ ™¬Gnœo·z`2»Ï–Nûùˆû,˜lD}æ@£_¡Í5å©o¬­Ï¤à­C«1oÏKè~ýìÑ/áO¢Ä8+)þg ÿþ!kÁ¹k4ÓØ$hÿm< éÏÑ€Ödä½°=úU@”—¬r³ÇÕOABu¯gDkÚ"Réqðµc~càÈìôñÞ¼h-$»0´ž“”O<$|VÖÆ.§È#ÒšN´\ ³èÐám0(2ó+‚€T¯-EëGÙZ‰Š·£c}ÓGŒd˜‚“úø¬Ì¿~_PÇ|Aóªmð/8½õ£Ö‚oŽ&{«útQƒŸ§4¸çHmâg /µDÛ€vvôbíþ,£&8@~tTþÁʤ1÷ÚÐò\Ê ö£Wæ1 ï[>e± «±Y«Ú‘£Æ´·òe N®¨ÍI-T@#Î%«¸>+æ‹ÉŽ?äÓL+…÷®õ%Šô‚/'•E›&Ãýs|%­Ñè8:i©’«2‹M†º¾U›ü+´¨Ä¢8ê9˜É ¦$O<Âì†MÊ}ö/|yZ²“•Èmý Q ß°üK¼ÜÓXæŒB>V:¦=Ö±9E¬‹ñDèÊ'¤:y¨~1JD?ÌØùÁ×h[ÃÒNZ7Ä:Û®ˆcñ)Gl%…¨Ê÷ù§w„àÞùÌ‹NSÒºÿ†:ip9¬$=H\íÜ–)Ç¢ˆÓM¯GÉu9l¡qò²-@¾-÷mÇpÈÊT°F€”ÉRS+׌í£Þ¢];þøœ… ·ãØD˜Dã82Ûçk*ZoNGtY2ӎýDTšu{îç< ÎùGªO.\·]8$¡Å"VPu‰Ü÷Mø|-=˧47ï«—Rb¡sšµï£ê)PwF\¯¡ÖüËw»½fPíX§G!¶× }GhqŽRÄ6eHܱf?H†Äâ{‚´79 Ü¢Z.£…c¯®{.Õ‘Dònè^‚ôÕ#v)ž‘"1¬Ÿ…¢1¬´à[,»l§ÓP­Yº×F½¥6ð¬ÃUfý©‡§ |†séýsÃp΀wFý9âšU?Ú–.ßO›ƒµÿ:ÅJßN üSœt„"k&öÏgÿ›÷¾<à<¢@Å[þ²äΟ’! ¡–ËŸ®‚ÛªïôêÆIÃ’‚¹MM†ÍU͈™ä©¦'£wO‰.ž=d*¸µŽlË€÷ÝÒÃI¯Óœ‘©wpŠ³ÝøI–ji¿uîT£HÌßͰ;-ìU¤8•Õã"á¦[|޶sOà…ÁMÓ\¬Ü}‚m¶zx65’9Ä Ñ›=Ó"‹4†1¯'T'|·XÒù=³+¨5»z»Z2•³Ã]I1üntdÐÒ—KÊÞŽA•i›°S‹¯]ÄGÇA[ Å ¯Fc-èÐù×òļ°é B „Àå‹çá»®(1¬‹!K–Oå@h!¬|°³w‚H°AÔ)KAëRnáéÑ#sÁ±ì ¹¿®ç'/øE%CT6Â:¼å¯a½ŒMi*!9! °ƒiYb7DEàE§3²z‚“ÁS DJçÜãyÓEyñ±#ý¼ˆÕM”)³e`*€i´Ì‰õœ¬øŠ³gQà3 ¾´«|™‰â†èaÉÖa¾ËAŸÁò«ÿ]…Dþ‘o}Tpå Õ½·R6þ–Š,A ¡©‘o´mý-¶xUKáÞò‰Dè>Є"Óoþ„ ~âðoÊïuÈn½‡ ÉüÒX雯 ";FôÅcËýɽ.·š`;ˆN8¾¶š'r´z‹0ùVü”•j-=!½8«’í¬Ì–ßœ°ðàGcÞ..†½2DÃe˜Êƒ¥#7_#ŠÊï3ª`¨Ê§€n­oòmÜ.‹~“-ûùÅ?€œ«ê\ÄïUúU˜[¯\~-*Nù§!ºªÛ…q‘xåöt»f»6#g°Xn,%¯Œ.@:k³Wn…ŒÒ³K^ô[("Ú/¢'?5ð+mÀÔƒ™Êv÷úrN’¶»ŠL9›O'-ƒaiª ä/·†T¥C“|<R";Ò:e)l1HÀ‚$Ñ @zÒΕ‹¾·–ïp&ßðïî½$ÜÓ¬{[Y&ºˆÕOmñûÚ'Ò»¨ <œSd—çOfñ†oêlÁÈ{Q÷jD±ØÐîwVA½!§Ê¿û§c9¹Ì~øŠßá×`öÊGŒ?0ØVçæ&Èö-΀‡Êâ@»üúfùŸBV:ÕÐ=ƒU±AÂúÐ÷û³$:ÕEñÅß¾¯Ö=û™oHYHŽRK¼ƒƭш%ŒÒÃC÷ß—¯¿!^§B©­}ÞH™ì¥n³_Á­c´ù`º»ÁD„,U|ÆåøÍƒ¯Ü:~5$j«z°¨±£j§1o-è¢s[p¨¼÷À=>jë}ÞG`¥OkÉw&I®X!F@–l•’ëccû½âìÿð¶‹=Þ¬ñ_Ž,¸2QGí“anÕèÉ&“8“ýq ¿-#6ì<ÚÁi³PÚ½.é~~‡ƒèÂ\ÃïÃg»ì:o’JåPñCÕP"aÙ¦Ø.‡BÜÖWî¢êéÅ-ºãcú J£àˆ4µÍUQÊòx$8³_&y«kc=u`pH·ºê×vw5¢K~^må^$R¹’±rõxHgx×vëÞ\A:ù`øJ>ô6*Bg;/ßò¶Hå¹éç%od·ÜÌe û;"¯±Wä}¸G!ÈúR^]5‘÷¤ ÉÖ@^ï¶ÜO¨Â;•’ŠÃ¥MÀ¹ˆuÛˆÛ˜Þ¡5L,*mq¼%”§Q5»Æ©QõÅ1B&GWv^t/dðCž ³hä$ò>ă|ȈE[–ûUè]ƒ¹Ùí£‡.æZêOIzýs3M!Zÿ!Ñð9ŸŠHû7C·(ìLSO‚£§akëó#ÞGÌæÄØ’¾ÔO»ÙüïÂK9ÛñÐ…ï÷=Ø•Ñ*‘xk…´\•5¦-XîÅÓˆ;Ë;'Sè Ê’qdZó˜ÚAæ)ÈSG²#¬Á ¢©«1‹¼°®ÑOú§PpXiém 80Ö¡N¬\qÝÊøQqƒnR” áiÈgü›#ÃVq¾µ+óÑ;Ô%D1:,:ÝëY˜‹§RCL=:WzýhžÅGŸ¾íßh¢"åÔýˆ7ÈÚÍP%ôV^S$ÖeÍÕŠ'ç·)§„‰µû3ÎN¿À’É/¼…/º%ºqsÕï­ºîÄ1JpƒU"-ÙðR¾huéÇA‹•ª6 KS å¯TN@|‘cë7¹§s0lˆû>Þ“å#æe…sÂŽ)(ÅÑûRUbÓkÝÍv<[%Þý´;xi¦fÆ DŠì™|.`GÆ™øQ•Hžf—±õ½ïÊgÞ'ŸÒŽ| ñtTL;{ï=9 bðØÎµ³fÌ+FY+FÉ™7 ¤;ݺCÛÒ±ãÆv¿)œˆšZÝÍ\‚ˆKÎf¼èa‡¸ÉZB ž…B¾á]/>æ9ÓE¥ïµ¾¯›Ïûý9 á׃ì‘<.a_ìÙÉ6yÐ5$7?&'ËÄ3¦µc]_ÿóïFmÃΗ–^¥Õ@­8Yu‰»ñEWÆÏ±tD„*1{'áNMµ>ŠiÚ£¦ïÇÓ$E\)ÊlAâ¸Ù—A?³½y Þûº /Ç(²e¾‹Ç”‡†·éÜ"$—ŒcZÔǵCà¦õsvâ¯JiNûVÔ¨Ÿ“v‡½²ì¸m¤± ¿š„ VŸøT‹DO „K|ÓOÌ0ì\|–p=ÒeeCÈ[[‡LV˜;nƒ+<ý-­{FjdJ>¤¾Gs=¥H+PHÍW…U-i„žÔhžqµ­©Œ$ùPGËçIP˜ÛÈ#özêë þ´{sÇÆz`wÀÏÉ-AçÑý[GH?X*LB¼Êñª+Šu$Xßt;´`2¡& *r» ôÓ›@6÷5ÄÉyHoTÐ?J&Ò[úÎÀܧL“ÈÑÓŠC¬*åpÃee”„ ê¬Ç+JJaáËf(”êÛ'd‰`*«'–œcÃÓ¯Q¿v}¥µ±¨=7Ï»"‘ªw'G(ï±â=ê(ÌEs%,«d>κ}bÞO*%>çhy‚MsËÔ¸:»ö3MqÌÜ—Â鄌—„åŸ4Ñ Bô[¼çM)é¢$á[dKÖÓÆ„:_á1qÙ´û:Ý’?F «U±a¬ÃO…ù•°ÈŽœÛ±g´%„Qîuà>¡~o£‹œJÁQ3Ø[yKEà£_ÔeyË[6ŽPfD“oüÓPÞÀqÀééé­@›'iâ¬Y˜•jÁüûgÜ'¿psVä dÎß°Ì%ŽeÍ×®,X²iî I§ÃD"þÂÉgŽNû0¬ÙíM±ûªô.ài¬ÅÞ…ÕZ5…<Š )æu3 æ ¸ð@Y(·µ˜êaZi€S{·þÊÜÄ Ï«¥ªWh/w¢O<@F¦. øz;wZaäçW´D¯é®”T÷¾oóïhŒŠ_n¦U{'F ÑßꡈJMUÐN5Øg¡!Î%Næ1£!\b„3Ç(èZ˜Uð3œ¨.Ä¡Êh×hi ‡¤dÞç­Ìj­Ãïüé%ƒiô×à¢*¯¦©V“ë)Ww y’š´ŽÑ}OZÃ8‰*£Ij1dÊÉî ¥gzwoiý°ß3>;¯²ßà™¡šis^‡z`f[Œ°×.ÒØbvÝ\K4ÛÇjK ùõ‹cÙZár»]iô+QKy–¶÷D»‰Âº]==ô î]\t“òº×¿¶ QÆNçFܤÒ{¾øÝ¡š<ŒÝcpñ$­ÔËy6µÐðTA=wÀ?@%B°“>Fký÷Öñ¬Ø ùúp‹hçe>èªËhͪhy/Ëþ`½!NŽjÕ ŸóÒ -nÈÙl/¿8gt5«ý›pîˆ}‘Š]ѳdÙà„¥‚=²÷,Jr@¶ þ¸6Ë>û<™à4µ¨àØïzC¾¡|û4‚<åT%þ˜F´µ?r>Z#ÑÖΤ¤ûÒl!Q:”  ök,}V™x"Õ iÚë<&ìçͼ돶xøÝ˃òxµ¼1f-Mƒ¤ÁcpJú5hGë<¢ÜÉËõ1¿jãñgd Æ Ùé®FFdü’—}µ›”*Eæ?☘´ÆIØYÏl[nŒr Ë1Ø’¡2“ÖÝ$£å?Ý&¸‚[XCb¸u<+1EÖ,éfMº«d0¾’6éG@ãâVWú2׈€)¹æšâC—oAÌ_ƒb¢EDM0ä·<Ê¢¥.óØ`awÝ9<®ìÃ'ÌO^``..±®]ÂK6á.H0ëîöÏè Š°8ê–´¯?"ÞÏiÐ;.D“‡Ë÷¿ãÞÀ’;wuo [+¶áÕJÔàø³ÿIJìVݽð•¦öïÉr²WNuu§5wÚ­Ú§Ñ´ ¶‡uû>¾³tmk…_xmr.ÑnÓáxû‡ºÚfNmVèú$ߺ{ôC$mí4FZXk_Íôo©ÀÔíLØ& 35Iýµ·×žâPº‹£>úÓšRßÙå4´Õ³ŒŠâpó ŸšÌO:òÉ'çMÌœ&Ç÷äOî¿4žEÜ]ÔÊ·Á_ÆÕ¶ar¼èçv‹ŸK͘†wÝ˲{¾ßõû4ˆÆëUK8l‡š%±…Ú­9á±—½[~Y¬©òH´*P[⯄“×ÿ1bZ/TÜ'>ÈrŒºv¸ÓË3Q¸è1d`º½ ´ÅÝ]‹|—þl9xý>¾\ärŒÝ«>ÃÍC+{vdÏ~SØîehêă6^–2QI…ÿì áq]»ëÏS'2á}ox-f¨og¿Óv.l·9¼bõ®¨„hq›a“…Þ_S†ÇFT®7/NË÷oÇbœ¢<ÞñWÊmê¦fÍî¿IÌþj‹3/+üåeúò®Èï¤w%íŸÏ 3UÿbI¯MhÙž:%œ;¼qMUdݪ>¼pÊîrFvl7àªüŽoý8¼’»Äœ¦¿âÂüd#Ú#~ÿ|úÅÌ¢\Éô7¶,+aì­×©—*Àâ”1 mQ7øð1KwôæØ!…È^µº¤®’¸¶•¼—$ªµ|Ÿc-EWÖuõ~¶f{JVØTðØ,ŒZÿXç”GLI0šñª}ŒÞVã+kÎzxi‡zº°å|MEW‚äÏøM3psã(Qº†öe&â„tX ´ð@0ñi±òC²&…ÕÏwMý·!ÇÎT ŒÈÇÇ/2Õe—#Å}3?æîå: s Û?²7UžwôŸÄ.‰IÝ N¨ü˜sï÷†¨Šiá&ë&b/‰¥ÈM[æ]U‚§ó~àDü,†@ê ¼Aˆm1í!'Ú¾Ê(#ÂFR¤ /s í³1éjrO®ÒK=Îi»Š]a«jg„[BJ¤ç¶ÄÈíï(¡ç†1Ɇµgeöõ"ó¥Jx×i´)½¹\ÙæË «Ý²ˆÌ—:q¼YÎIHÂè:\®UNÇvîSWö´µ°h‰xvá¥ÜGO‚׎Lò[*=T'¼¬ œ ÐgÃóžd¯Nö£ô¯ÙôúC¥¾9÷5¡¾ºÚJ<ÄWb/ég,æž6®aÙcø=óI[»5Y÷…Î DÞ² ¡E¤ätÖ®âm€mûsûtžÌªZÖ˜¨] ºÖ ýÍÐ)m ^½|Þ£)æ$)Ö%#ÀÏ‹ðTÜÞˆ‰ûFÏá_áø| d+åê¼ Ú¡`àŒU«o/vH;Lº°Öñ¤­}´µh:;òÜkýùÆNÈØý”ºI;íÞU¤3›CÂHwš)¥4£'„î†mм€¡…Lš…ÃËÄJöaoþº$ŸµÒ ˆæÿܸ©ZP“’«Œ{§©âÿm‘]&ó²öµ=MÞ5‚tÇqä%=o²Mù¹üË[Ìg}â÷òÃÖŸ‰s˜/ýC~ûÏ(†5ñ! ÂÙ¬*lñ³aeBø6q‹hã«Ò5‰Dÿ ùÀ¶“jx‰yæ‘Òe줇8gªùÊæqñ‡Î{¥(¾2†à.æÊWº Gä—®6ãÝ@Kë–·®‹Ÿ£`EüIyŽºôåÄØ¹(úŸ×v*iû5‘)w…^Ú$Þ”AÞŠå°{ñÕ28w*¯Æ!ÆXZq™ç• ™ô¯ˆú È¶(üªÑß9©’§=)S´¼@‰ïj¹tw­ºQç§Õ\ú0’\ê ý~ÚÛa·û_c›÷{8Ž—@ÐõáEÑÖ¥Ìì<ºz™0⥎U­ ì±G©'çksÿ³Ï÷Îì sÂ…UšâD°`[Ÿ?§Jš<‚ 'gðä½ìþ£&2(UÆï® ö#ö$½e'²/Ñ2·\Þä δÔÍÊ<¤k£]Á I‹%ãS•`‹ ‚ËÝvgIÅ¡ÂGm3°í.?Ù|rB'Na%`IzѯÎî½Â ×’Ö#T)ê g‹.NÍ/\õmæÆ4ýjÜRµ"%?êFt«¾Ñ°!‘ðîâÖÙ]ªº«à”wåq^JG³bº8fž`ÈMÐXÙ›háZ5´èc]CZåÀº¾µÈµŽ‘º†aî¦1˜g‚ùVH#ºÍ!v¼” jÒ±_Z”,‰=[þñÏÌ1µ:öñ™’Ü• xð£2–צH–¼;k¯ú¸îÖ¾|h9uùXLOâÿbZTiÛÈ~~.˹٠¨Ü=îLÿÀì™ñï¸*¨Îá¶–@äi“*]>‘88%±;z[~ŽU‡2 YÒD}^8a¾’-˹J\÷µäø È¦¶ZŠP.öu¡0ÞYC;¹Ÿ¦U>1PV„ ps7˜€ÌmŸ Èä*ª×ûÄŠ?iØÑ‡†4N‚)\ˆtÁ/0®:ãPF1à×G޾ô\+kM÷HL,bp* 7¢ÉBOZ™E²×λÝ#w?j|ûŽ„»Ð#jñð[Úl‰w”8…¿Ú<é·cÛÁñ­š)S¤QÈ´Àûíc*ÉÒ›/³Õn%¤ïF‰¼ç¦šqñËÔiùð „™R%’°ˆç"ÜïºÇ´9ìû—W6Wˆ™m¯ò–r;³PX :_|Ÿ†,î½ é)нX@´"d:r¾Eròa.·?U•Â÷Ú¨YÄñ„Ç­sÃÀ¼" æ‹B[+¢äî‚ÉávޏˆäÚoªC‰=Ÿ`^ÿÎs&m‹¹ N—X'L/pÞñ'*Ê(p;ÕÄb ß]^¹)¯wÚÙ?õúZ©)—…Ûúa³S&¨n®M®·®ï”Ò·b $ ³þcÅAN­Kßx­ËŠ8sk0óv汸êOi£¯½pRG¼5·k'Èv üB^:l°#4j»½'ÄÒ$g`VÏ¿7ju`&ùÍf-`2ܱtRÛe˜äý]Ç~ÖÅ*@¨ûÈŠî±l‚èCÉ%MÞ%YÑuÛIôi}{Î-…8Þ½À‰‰7 Û\ˆÎ)[wÓ÷à‡1Z¼hʉ£›d‘R`× É0EÛðõóýDÓ:e"ùŠ€!ÜVJ@¢•ô56‘6 GáѸ²Íq|ìK½1:g„²Pþ<;RÊUú‹>çוX]‘r@!\5¤­•¸€× öCå@(¬g<2÷÷‡L¿9Q«Ef þ†aRØçVĜڈk/)ߨ™îà{w8«3 7ĬqÊWôÚ8×u)>5±A'R,5‘wêÙ\ó¡ßS”™yÇ'‘?RƒX(ÍH¦Ówh–%ª¡RÌþð´ÔÆŠo˜¿Egã§.yc*ŸºqûP×cYmŽ+ª|L/“´Tæ’ "h M•&ï½Z.ò#Ÿ É©àþ–€uÁ ³%H½OÛS¯óI†¶ŽCl•‘ئ/€n¹Ø•g¬«+S"%0!¤ˆ›±ÜSŠü“R´ßjÐÁŸ.íGâÒ.ûTNöH„¾Òîa%×Ƀkp]]ÎSê-Ààu]æEÊ~ëålýc!ØÂ\Èe¼»>œV_¶6~„)-•Jmš.úÛ’4žãĦ¯4zý´æöyZyø«ú²@àÜ9ÜN±iæ¡3áÇüïR†ÑÇ2‹+¦ñ@¦§ŽÛ**$ìgU$Drœ01°æàì#¶qs!ce–[éôN\3{»¹R×Å»#žik' qøcŽ)•[¤&Îc™¢MÚ,iβr*ðzYÁß’Õ­p±Î"¬ù"ørMyaq‚ITü}±,¦ÞÍ‘°?ÅO¤(˜¡|¸!,é0ÈQgkÿ`Á/¯Kâ@îºÑ`®ûdÅ÷TÁvð!I€Fö4÷¦¿Ã‰™À'ˆ  ÷ôG½AÜSÛfmø!cQöφ¹(Öz㕃 .ãëiÒ†7ƒ<ågûƒˆ­€ª)»¥yÉéz>9}é„HØãEî©÷L²RCY'äã)Ÿ­,Dô¿4#ÈJ6ÿpÀß=%ûç?zË?è©ÃÃ&}Z‚8§<nP^HÅv`Ò»®–dƼ¡T³ŸÓ\þîÇJ°[žvìàxEES™€è¨î'I¯¾Š¾†Üª"Tf?…¼q²QÙÌ%쟸F6C–Öf߯ä'’Õ rÅ} àÔì-Hˆ!MT±æÆî½BªtÑK'BuÈçÛUÝnµfoB] ?òF«²ÐÛòj—|wdÆä¡Gdi»­eŒLÐÔ"¨”gÁŸB#ŽÇ‘AãÅUØÓcY‘ Í­—õÉO¤ò0©eª˜åkæ s‘ªdQD¼“\‘ŒVmî~‰¶I‚P­¯ÌrEGJ=| ñÔª^ƒYï*gW@ø¼¢$ªW?)ŽÀbiY mDzG q‰Åo;˜jvÒ»³XUÞ|jXAfhLY+YÛñ*›[”eéäp´nUʉrhϾOpúi9úykίÜc]¾ »•2ñÜÜφNoEdßw‹ð„Îc9ßÕÐxiÑ fy´ˆ‰3*9¡C‰?6€ƒ,ÃÈÉ›ízÁ¥Ú˜Õè ñ! ¢KJè·¡Ò·†iÓ,>½Êm|;•T¢Ê²ì¤þç^âé:T© \OÉJV[<‚è—ImµŒ–äÕQÕ… $›qe ¼+vÓ¢}!)‚K(^Z•Ñ©gCx^¥±‚}¾9áw iŒ[W¿»M”ú®TõÈ»>á÷ž LßyÝÝèÈ.Z¢GŽÕAmo‚\Äo’íT›¦j\‹Ð9ŒÚw%D|mQTùµ–’ ¶(Ãu„™®\}·oŒ\^3/\J£CrÃT‚?-˜ôBº…e:0ž$áSžöh=ß‹WÜßG\§yÛÈ¥¾µ‹FB¶üÞÁUf ø&èçg_Ä3Itô¨¾Ê÷‰0¾=ë-G9a–Z7¤"E$hU„óû5WudnÍ·«O%¼3†¿4“¤Ã?ÊŠV?9~/› ¥ø$HË™×âìÿKücšÈÊ!ä{oO€ñŸmÅ ¸ñßà@FÒ„Y“'CÈÐ}¾†ãqßdßç?‰ÌâO~ ©n '¸žõõI×£BÃ4}—¾Œ{m¶e³lÊ=¬_ès­^{i8)Õ¾¡ˆ8ÄY›¨ÖO#ևힽ)!v²åXì?>G¥,M^?í¶9ŒŽGøîMM;—åå}Í =ÜÃì…Ì\{OÄÖj4½ý#ÓV_ú>H)´¥éD¥J7I :O×—‹ùQYƤ¬ÚÀ?j†í:¤{WöƒÜhbäV;Æ3fkî1 û’¨îŠÂ”òG¶C)1/Gû»s0õ©öE+Ø«V?¨È9ð\ÛRÊÞóî%fšwvèí›~TaÔ&ôË4d 5ÜW*©›ÿ„x7J¦FÁñ#VfþgYuÂÖ:„Üà“*úP!˜©‹“Šæ*åœlòÎíª`îÏ2‰ˆLÓZƒL}Œ÷°¸¤ßvÖÙƒèš ÌolçÐýB—0a(˜VÒf—Ü•·BÉ Yhâ"$Ý´ö´÷=1·E‰ÝÇWId›0Ô£‹Q+©š‡ôÛzK~:z¡Â÷] +„”ýî'µˆ CæiçMþEÔ@تÖíoôɈÕ'r€-œÙ€BSñ²ô !^Ð.[ÿì}W˜Tfæº Ç{ª:É,/{ÍÉsXŸ€zðUq‡(%ÁÓþ"ÏOì#R¿lÏ0¤» ÞI`<8âJÿ ¦¾„Æ9lé¼^ÈŸ‰>Õ^2º-ž÷Ñ|¢. ¨8¬„Z±¬Ž*ôß®:Õ"aêªÞÌòESŒ4X‹Ÿm*°9BxN÷ï|\–Ã}ïjß[Å®4mÒ~ôo ƒéüí™~ž»NzcÕÓuÑõ}e“—,ÃÞâô8컿pcÿÍl1‡‰¦$³,ev†J(±ßSPâÉ!½@ìÿ™®èáÕèÛ¢ \úCfLõGÇωyM¥Qþçš¦ß ÕggõRñ¢H°ž;]Ž¢f‡Fíå]nÇ÷3GùÅåˆ)“{{e~¥…]˜Ã¹K÷(´§srä¯ý†ëkrÙ¡w x_âˆ$/A›Û§­«x`,’ *‚»I9Äìx.Bnm¥¤¦ Å0°Ížíq>þ)\«é>±Ã_ÚÙðmJŽ«Ûïx£f%Hr{»Õ¥ß/„¥ß?;¬æi^˜€~v%w×c 蕦¬•”œì¹ÐwFk(UEo3g…0ìŠä§×b#I•èb^§@}Ú]a1 û@'+ø® ›[…ö]8u0Ã#/1$# ãÈ‘µQ<ÑùÇ·òf·‹s;k `ãîÉ{;ûŠMnO'ÔªÛ<»Gï*÷mtÄ· PG“çÁ)ýT‘:‰¯ñ)ù_7¢‘ªaÛ›-æêt[±Íf¦LŸ'–5 ÓꌡXýàüru^Æ@ò±(•Ý›k#µt)äÛª-éÌHÙ·œ˜ÛO6qúpB|Z!W–ÃN&®¡Ò•Äkêά}HD­üW¶‚y©° ;n¦L‡y´'Š TÝ„=XBN¼¾G*¶Æûˆ-)L â` Ø)ü®b›?œa½œ•¤ô±n—þƒâ¼¸¾:†€vGåüFö8ñ×nBàýÛ Ì*'”Îiì—­ü )h@C÷ˆÎ¸LÚ'é—ŸCp”Ít °ÿÑO£ endstream endobj 6802 0 obj << /Length1 1612 /Length2 19563 /Length3 0 /Length 20402 /Filter /FlateDecode >> stream xÚ¬·ctf]°.;éØxãŽÑqǶm½±mÛFÇfǶíŽmÛÎíïÛçœ}ƾçþ9wÿXc¬YUó©§ê©9ÇZäÄòJtƶ†@Q[':&zF.€¬¹µ¡³£Œ­4"ÐÔð×È GN.ä4p2·µ6prÔ€Æa €™ÀÄÉÉ G²µsw075s|WQT£¢¡¡ýOË?!C÷ÿéù»ÓÑÜÔ@ñ÷Åhekg ´qú ñ½Q 8™&æV@€œ¼†„¬໘¬ @ ht0°È;Z™¤Í€6Ž@*€‰­Àê?#[cóJs¤ÿ‹%à08ÚÌÿnºíþqÑì€ÖæŽŽßæŽS§¿=p²˜ÛY9ÿCà¯ÝÄö_Bv¶#¬ÿúþ‚ÉÛ::99˜Û9þf•ýžNfNÿäv4ÿëØšü4¶5rþ§¤}aþz ÌmN@7§rÆæŽvVîsÿ³s0ÿ—†³£¹é2 8M Œ­€ŽŽaþbÿÓÿ¬ð¿Uo`ggåþïnÛ£þs'G • =óßœFNs›šÛÀ1ü3(6&¶&Æÿ°;ÛýOŸ Ðáß}ÿgf¨þ’00¶µ±rMàdmþ¦|ÿ¿S™þ¿Oäÿ‰ÿ[þo‘÷ÿŸ¸ÿU£ÿíÿÿ=ÏÿZÔÙÊJÖÀúïüÇø{ÃØ¤ÿÜ1Vÿ¯pks+÷ÿÆÿ¨ü’ÿ8N›!`cúWFzÆÿ0š;Šš»åÍŒÌ&V;õ¯]ÅÆè`enü«è¿ÍÐ112þŸ²™¹‘¥Í?­gýÐÆø¿’ÿ+Ò¿ÔTe5Ä„Ôhþëúo”ü_í”Ýíþû¥ÈØÿ¯Å?‚‚¶nOº¿'Žù;€íoB&&ïÿC¶a˜þs-càä`îÐú[2#Ó¿…ÿç?W:ÿFÄÆÈÖøŸYQr2°1þ;^ÿËðÛÈÙÁᯪÿžø¿ÿÏõ¿ƒºàVm~Y¤e¤;Õ`å Mkõõ0Û•Ô+æûUÙvû¦…msVè¿WÓ7Lq}¶º/œÚ}ìKRŒô`ZQv§/óð½I©zóQ6(ÚÙitKÓÏÔ¢<¯æ¥· 4ÙUv&u‹ß¡¦Ú8À\=Qù‘ºäû¡“=Ú!ù¥ÖÅbt 7€ ÖœžQ$?=RŒ vß@öîãÑdÇÂ’ÿ4ÀòI>%Nrr×w¸¯7ú„|uawÝù©ˆ\ N–Ôå=âDt¥1(Ðè !0ÀžßdMž>«à›=àT¦”ƒÉ9Ô0 Æ,ˆ½i|Î-Gz=”bï ZLÛ/¥)È ¦>%ÞðxßÍpë+QØ" %ø4d³À}å |¶ÆÅpï{S,~ó*èØøÔ,Ëö«ÌÕì•b·½84*£ì"µšþ„ƒö[Œ„ç‡Ør_…æ×i*b)Qï-ÿò–p>P‹è·GKÎU^Ù™XÄâÄ¥¦–±GÆ_çN”?pQ«w™žöápBßÏÅzIúYÖ_.r¢âOoéïXÙ®«7s 7Û¼ ˜e™iPbÒèëþÖ”œ¾qt|0Gý™‘ÊZ‰Ìõ LwÐ’í™$ü[8¥º)¥ ©ztÃC[µ¶§íEK¯4Ô$žì7[Z£°n@áàt›¬| ›¬¢(;Ù%Ïá6RPÞòO‹($÷êI‚ÓVº¥”¦C¦?D3Tñ'që·kí /y =¦‡1´=EïÇäª`W31´;a)c€-±¹­ðïmÅÌ*B3E£¢Œ‡,(ſ댅y›gûÃxpT ƸðÚN=Çzc/ƒ”Ô²wù°‚Q虆¶–OÎ[ÌðÈbö–<®~ä4¨Üù{=aÓÕ ²†;Ãt…ºZû½á 7tl‰S[äÜr¸« á,˜Iç§æ“I"¤½u"ŠÇfÝŠ_¸±:ÉÅ\ûº;˜rkÅЀaø-r»tãÅûkCÎ(hÔÚ‚Ë®Í æÛÒý eñäá(¶~^ªÝõãžî}§îÌ¥Äÿ*ÆïK{©þ;ó YÏpm·Ëª­‹4ðhHæýñ½÷)ÓÝL<ŽYÖÒޤμ֩5fdúî§zfÿŸÕ›Šâ@M’rç?!ðŸ‰î‚‚'™§ÑE ¡Ú>tâUúJ¤ZRÆUJEŽ Øã\í"ÛcAHñJ³&†ýkgN*~£@P6n¦‰cÃ>ÁêB£½§k¶G^C¡pfƒ£+'ÙùpN;Æb}!ìU> :pÃo“½ˆEx±L#˜/ȘbÞMóF®©€³ã-ð.:¤Áï!W oï@£1¿Êéóæ¡kb†àUy2ÔÐNÿšö¸…˜«Yßz¥1t.15A4RÒ(U¥‚îœïcS¶/+¢!?Þs>áV;ÙÜUÊ.¸± x‘c]mÐÚ9Ý¥[ï/–<ô}@}·•ýñx jh“Y¸t$¸sŽ‚>+Ø'íú‚ÿ¬\çî´Ï<Æ" D¾1áÅ|@ÚŠ y‚7èŒÂ/þøcânL,š¹ýx «©{‰«jH©©…º(*=u™£×Tˆ°/Ùdîf+÷íæN|ô=¥A®OKyŸëPÒÎ$°9ŸéKˆ$TÄš}þ[‰Ì†:(BRÕyÁf£À6@ç>|†Â¸a÷¼b¤êbêûÀ†>š+ð)‡õvAqëËYê·Æ–ˆ:=W©å¼yÝ€ þ¡B3ÜhH$fŒ0üz—¶ÜsÜ÷tÏMSÊ dßœó )º^Ôe™* @™ê«~ÔQæŽôûÅ$ð7p9¯Ü~Aè»9Ì’Ø,÷95ÎØÛÜoq0¨çºúd²üÏÝ©|x’&ïMfB^ÞeïXï r.Ì!ñMų̈ei9R¤]#®!¬d)¯lûÔÕK‘ýCȈrôS5Ž0LSׯc†î‘'ÝvE.aAdðÀ{™Ä¬Ö/±olÛM©W:S;"רŒëâ±òÕåŠçzßÓk²ZšåD/TF®:ù”«kÌqÓi0vº÷šÞ›\)ËÛˤ…å±ùвJvè9Üjª¯g¼ˆóµ¾Bœ¬×MÛÉauö¾¹· “/¾näEØ!}é˜`8ŽÃ»–ÕÓ ¾µûÈÕ\"„NÙ‹4#Ïú/toá ®l ÁÅÚJÙZΨ,¯Lˆßšm‹f I/9ÑÁBÁäõße ·­äêö 7žJ‰'çàWÀ:)y®µDÂ×7µõ«g¶èm<éí ëî dgõrÿbyxU4·a‚Qž>×z@á[ˆ­ ¼-ÓZ*)9Lñ´‘ŒÏ‚eeð¯y‹ì3Tg+ü$-²av0f6:Do¿$ä Áß[{ܪù$= •m³Ÿ—`Úñfq“Èì¶Ë¬µçÀ…B­Ã?¬ë«ˆAXÆS‰-à…#—’ ŽÁ#Õꨛ©µ§ÇJ£^04ßÓ‘Hé\Às-6å_‰}žm–‚úñ÷aЋ“é¡Ç²b0Ô³½ø$¦7± uC’X\›ñ¤aÓ¬ CuÉլ߹8”{§õA¤RWA 6¯ð¶«zÀ xxåütW©{‰ý2À éø6³D’¸H =¶{û¥t-kå¥ÏLSl2l‘å6¾ i0Ç÷æAË¿d2„Im®g¤|¶0Ï`šgÓ ¯>ÚRfäaª¾ºg±¨Uò4\ v™¬ˆãê­bê`@¬(Ztœ¾Û+½O$ëAdF{ÒRV &KBâ‰<^h}+Øåºk,ÐK·lÒ¾MØÑM›û^‚³3jv´0S¢™Ñ?ùÜ8Ç6Yœ®“ô°¶]…_ÜÕhý[lö³VÈw}}Ÿ»ÖˆË¡ƒÐ¡è%(•ÄÎaÙhó$ÎÍÎøù‰Çme°$eý ¹L–;ë ‘¦A0›M=¹®~°Ë„k ï.›‰|ÔC_~p~µOÒ_¢ÓêÙ)ñÉdÅέ°¿AÈÎ{sËÕK~à )0¹˜`¼¥ÇªšDôsbÈʶ­ü™ ª000~© ®àeë×K ôñj pÛrLL]ãîód,1˼: &)Á ¬:µ•ŠÁKcb—\§s`»ìÄGT¸šÕƒy’yOüƒ^¾áÇ ó;ØWD¸—””6k:½UyäÀ¨‰…"}¶ì{c6’\´`d#NÚaLüzbÀnhZN^U–@ýOHv¾]sP ,!®›„¦¿Xæµ.'õè¶*eÒŠ¦)üÖ¯O:¶Øu¦wjê´õXÒR“¸åÔ]ØÚ!ˆP²ûßìajÆ üªññ~õâV—«1R|YUø«Àw ]äF.J"Ò!¥T{ü‹{ˆu‘õ,îÐ/4àt¶m–qÁõ‘×biáHzhÇQjˆ³]ô D?²ì÷›í="]™ž4ŇO¹i¢ú¤ûÒщH?Ÿò_óˢùÑž›þ„b´5yDœ¦ÝëòDz8Í/ä":ùöd,ÀF=UphqR+¨U —^s 'z(Ú ùÜ+5óÁ7'þûñ–Ï/ué~ N½˜›Vüïö! ³üàRüŒëc‰ó¹®Qï¸|Ý>â Ä#Q”ÛªŠúËÇvÇ'34…²ØB÷hV‹$™<øõH¬Rä{z\}‡ ¬VC÷¼¼9° ^¦ùV`BÍYákiQq¨µ~»|¥fíj$ $Œ®>/¤ ©T2ëˆÖäuôJò‰“íºº#ëÏŽXE}J Rü1ž<Ó£‡G=SMúëV41õ#â5-»¥ C€&'®WE»ë!¼'=yJHäðD¢Þ¹Œ°_ü"·fû7y•8=ظØÊ9Nƒ0¿µœHšåVp6žŸq(ð¨ìç&Æ—ßÙÊFÄV_¤Ec0yq M—üä¡(áF`e¢F%ì!ßG‘¤|Qñ@½!­y ©®äнŸUj`£ˆÎÞñP œÿ™Å»‰2¸2Æ®ôA_MPÂè_x¯Æþ>{K©U¥¯ùÄGÝ»À{`‚•¨˜·¦„¡Ç ê¯õ ïȽ(ã.G°9TÞ¦%ì²È9Îh.1Ï(ÑcN´±W‰üùU‡Y5¨°¨sµ·øô e n›Wy© Õ–ÔiæöÐŽ@î[ /KçNÈèO»ø?öÙïœÆ³!ÍC­<x`•!5±7âkfÞ{M“ß‘v”e¶XÄ>㹈O×m˜äxó+x~±.¼t¹ Œ]øk>m>ÃFÝä™ Ë1Mƒµ’d|,#'’l!LÅnóë(þ\ƒVº[þ&Á¦#sa4žl_‡S’µñÑGÌðmÞ¬œ+ÊmÆVýÝrÛùçMv] ún4$o"ª¶Þs¡%­ðOL¾¬ôÔIòÞ¡®4ªêÖ» Îæ»áèƒùß(½†µñ–TÂß–'@7Ž'î»ád¹)zÏhc5>« ºÞœJâçÝQÆØ¶E¥hq.J«|LBÔìR)œÑèÝúïƒOú¬¨]KÇõ¼žÅal×ä,å&ÍòfÁ®Œ}%ºõ.Ë0Sd—òd…¯… F"¾Â`ªe•›ÔpÛøë!écøù`œçÞîLqLCÚß+ãí©G†Æ/–f˜ƒ5L4­¤öÚ<»%© Šà»nEWüõ;^•œaŸ.8óz~@A;a­2׈‡ã7=˜-“&ÊÖ„IžÆk)ìÆ >'Šðzl:øÏä®Ô=´‹Ô=úÉ^k5Iš ¥8Ð=nð~lpA"¹CØ^%j/S•^q‚ÖÆ´kï. ÑÂH›MË+k¡ -ñ—Ó±8(ó‡;®l\‚åÔv|Æt²É² J &çôK ——á[Éò¢ÒfÝ·¹˜äöˆ‹äÊðçd‹¨ÄcX%›¸Ð‰RXd Á¢$,Öl¤!ÿÁ8M}²Nf˜Ïy!@3)'=_Rœ‹‡ÅýÀ¡'¿'±2Iñ=ìB&cNú‹ãG»èJ`M{6¦s¹@ë£=£ý·r æH6¢1”øå˜fFä6ó\jž®Ïx¿Óhy ÆòH‰§EVéÁE—•¤eï%к$n°á …P版£p©üTQ^•Ó;˜8¶ynº:© +zÅšöG>ülNÀx)pÇŠ¢s{þý %ã„‘4‡&êvôâ–³Dš¦Ä2å£D£¢¨•5Öo2Iç¼Ü¾[C½R´ ûk¨}z ͇FJ¹õ9Þa!“CݤZpÆ6Éu­Ñ&úçÈejš ÂgàÊ:.ó*bsŽ –~s ÛîJncÖ05÷,,ó»+úõ-eûf,ƒ,d¨«ˆJÝ&’úÕ<ÃÎN™¸˜̉ˆHxÓ¬gåóÄpz~ ¿¿ƒ—ˆ¯˜(¸F#œ8„·Ûµ"&êAB3 ô#íéµ¶¬œý,ðjõÝgؼâ`X„È›¿ü´·šlví:›ú Ee#‰¯@{o„®p÷6÷•c^V3âlò©Å9Ë%;rþ•Çq˜3QÂÕLĬ¯ÖJqˆýX™LCŸh½´qK„¿Ùê%²×¬þ˜v¦\U˜¾Þ³fWõ‹T¤SÖÐW—»* ä¤(¿ŒÁ@ÖGXkX|˜À‚Îö«p•ÑL$Û1ãLÖLD6ò÷"lÿFªª`«Ä®¯s7íV·^çiLÊ,z] G>fYá«Zæ^®Q¶ù w.¤–ùÆ®•r¦i5ø››7;aé2îkleU98ß "ñmN c™PÁ® S¸†úR·5è;Csí CSqåéÂ9.Š>‹†–|”’¾#dN±ªÍÄDŠ4´B¯F§hˆ>0Qù©L<ç0߯¡Jäkk¯·m‹Ê ¶ÀyNÏÓgakΰdX®°¬ðaöž©{ö(ë|4«þéb«$ú]´Ð Æÿäù£ÕâLn`½¼ê[JèáEBv©Þ•+™kÿÏšb”Ú5ö‰+h:…ØèZŒ8Ø8¢¹Kí8ÏD‡ÚÏ7Žóѵˆä®•„Ô?ÍßBÏÛFj¸ìÂnÎÀBµ)Ç_™¯ÚJ<ê¸cë­ñ¦PP»{6}ã‰ð` ^Ÿ­ð¶» ®˜Ô±ÅjÜ>¿÷M[°¸" •é´™îS)kÛ³m°‹6¨YÆ2ßÖʦ 9‰0… Í¿¿„xnFÒàN}š »¾ÛÙùÊÅïû|9Öô÷™‡ÌŽ©Ǫ́;Þ;0ÛϺg ¼ëò¬L»ïãE”nµBW<ðr@— /Ž  ÈiV ˜S ²€±õ½Ùm‚Pï©R^*à¨y,½·~ê\¾“þÊͶ¼Â¨:v\#«Ÿ4 h2ºÖ!àÁjªQT‰i‡e®°à'Î祉Áê½ÆÄÜß–¬?²+¸Þáäêªà†C¶‹Þrö¼/oSÕCS0çê†Ѹvä#<­þÀâ©Cþ÷£é‹o±à‰+˜ìº°²hñ-Àl¾üŒÊ —ø‰éW ÚnÞé:gË™Ç9þ C¿_ÈWªˆdJΠש)Ho²b0ÁÑjTFÐØ9[* ‡5½ä‰~—Æ`¸*¾W|¦ƒÙ+$VÖI~Ñ Í²Š ÉQ‹;.L°…?Í?í90Û0Ø%vzßÏŒ%»&ãÒûó’aèî{ ¡æZ9ç´ë™¸ðk£‚Ú(ãòfÿ^ô|ýZ*V/mab`ì!RáF‘HU­e4ºº½Uι¢—€ŠËÄ“€˜ZdXéul¡[ÔîždÛI'„· jB&Qß…,TO¦.S ¤ƒ•5ÇèÏ3É’S"f”†^?„¹Ì†šWJ¡K øýàê­Êu”‚µˆ¥S]§âäÊ^CËoæ®4l¢O8ö`ãäñ1äëo´éß5°6ÉŽÚ3'›àä¶0»šL·w–9Î…FL<ŽŸA·Ï°#àyÊÄ(ÔXÕ‹ÓŽHȨ^ í*œÿü\®Da'­…!Ló‰gûr9ܮӷCºo¢æ=E‰Ÿ8d:d§Óù§o×I’^†mªBÄD©7V;²´Ò¾p ìê“V¯ãÍÈï‹_Š4̾ÜpÄÑ ÜJ›?=¤‚égrƒš2ÅícÏ’n‚¡…ú“¹X#I¯Ž3çA¾ê”}4*öõð]Sà–Lr|–žir§1{>ìõ‰î*·d™J‰Äx¢unnq¥úOºÀ(5d¸"Ù(HX]} –ÿ¼ün÷ 5ÙxájRÎ- ÉåmÂÊbÑ廆úÞ¬¸þÔXØ T”ÐVúü¦ešË¹\>jtÖzÍ \é¯ÒD=’Qaui<„ÃIè>‡éß«5öÙQîúÍ—% ãšÈ#]³-ÄY¢2¹]êU~›6[¡VÔcä¼ïW=*Tá›…ñ)îº6ã•roý‰ÐSDÃIónM’{‘”òÊ–!hì±v^ÚTÆ0N7¬/þçhµ}ˆ/ˆ¤©EŽ_£[Šš2²éªØEþâf^ÚIÙè=¡‰˜¤†AEöE!ïIã´ƒO̾ æé6d'·Ôþ<õm“à"2?”Sx€2¶»1"Ÿ {Ò•ò]ìí6‚-/ æÒr~ÚÆ¤0mÂ1l'tq¹¶NY‰P"ë&“Ø—î¾ïPó‰1+Ÿî—ô«•²zô¥ ý(W÷|ºyy|ua•jžöpÛTÆ7q¸žò¥,{&œÙU†Jâ†ZhCÒ Vìdñ¡1OïÆª¦·ïžEÆ;Š ôâJ€7n¯îÉD‹Äx}‘í[µtú{;l’‰¨Ðî‚‹Ûε³ìÀ@`iÓT•þŸTð•;ØÃÀ°i@‡3mÕóˆeA²s®ó÷&eñ“* =FÚô"Éj»Á°Œ!IÆ…‰Cm— ‚œzøÉQI`. ’ 'ÿÓœÐȦ? ±î6]‡¾¸Ë˜¸œÈC/R_¾×Õ~ðeñÍ?úå£áË->éœÆâïïÛ¤Û–ÎdÞ¦,Gs¶šåœ ÝGD¿;ë¼û!(Q®¦ï'­ìļ›*Þž1ér¦@m|¦ýÈ‚Ñz¡`™{P›Ëõnà¿×ë;„f$è‡ðͱ~¨*ÁÍ@¯"$!á îçP}µvëBˆ”~[^„Ié1Ϲ/…»#@!àqbt ‚Ø9ISÏgOSƒØìö†%©Å6ºÄÑU…hó=UäG—ZàZã{Z«º˜’ù•œBz/CþÞg 8yÞÕ »1%lŠ4&ßÈÌRÙÅg­±«£—VéD&6~`©U`×z>9§œŒÙçò È¥/£Ðe—ﯲ=o™÷Gˆ†×Hæ—DB¹ðœ/'×(‰ï=¾½ºêE†ý€“cí`F+jÙs•+íS1 =¬¼B•¤ã “6^MLdbM0ó«Ã¯dÝ%h‚¶¬«gõA0惘ƒu‹íåfäŽ+è}xŸ€°þI᯼u³óg3Bë ‹ü¦•-_¨î,DDˆ Þwð!Jc¶_¥0ëidù2¯í»í ²o7çóâŽM¨ñ„O”ÿ±éæ0ñ©Òî:’+¥˜9ø…"m¬,-žrŸ¢S]Žt¥b?§~ÏÈŠªêýI_9l|]ñË `½+8»­H†|4Â8èË4– #ÂmËÚ½D§ÈË$ÞÕôžÛ· /Þì¬XÈ’Fƒ´Ü¯E·‰‘b×n)ƒQOc;0x%¾qïeð<7:ËSÓè†7L¿â`m™'Ü`ï½Íïænÿüæ‘fˆä Í ½3 ¿­g[vBu7ÔÐ]#6Z‰m¾z˲_¦ÕÓîxͶ颡3¿p¬JÒyîp1R’VeÊ3ÏRCú+.V&35ü!2P¾§!ï‡4nµðX×U‚öÀtŸëà3Ú€RÂqÛ§ngÜ×– ÚÔ~9-BP4Í^ˆy+tÓõ ›t·6ÊŠù#Ì'Ú§ø9v wÝšZ ×í%¦³¯,Mâ—ßg­Ia xsÃäDÅU¿šÈÍ×÷\È\2­×íD•x&lpÈMãkû’ŠfM‡«VÎËñiå/ø_k‡åÁiyÇò§$j4º[Ç]ÒøßˆçYÕ 1CÁJ]z‡‰¶‡!÷çÚ·Iy㾿ôϰü(>J@ hºWòxüÁzén¢ïÔM'7?©Z[?¹«x=_\þ<&׸‹J2÷Rn³:#° UXޏ>˜û0 侬$}hS ‚²5’89 ËxÀ–n$é7´¼Uýç5®n,7É À"EÚ¬"Sú»ÆîŽðš^äq ë¥B(Äðò?La$¾ªj` R½Ü8²X’÷’(3Þ^ð‡: ÿvËßIQ8 ŒÛCÈÍD*mg UEsáT¢7 1 ‰a2Æ#ЯzS$)h&3•lzë`iq{É0ÌÚ÷QÜ3I\ç×χG¾[Cf®MA^;r½X¼ÎÏá1ìññÁ'âz¹…ð´U~ìëÇú/´iN̆]Ô%Hv÷1q_ORUÆÏýqrôû]{.EW™¡´ŠÂÒ|E1‹´­|*ÅtÀi%è߯ާQKŽéoâ|ÅÈ·MD´™@g~Ñ3lÖc-3œ±Ýê,fÄÐ_"WˆÈ•ŸÄ 9ŠÚÜ.T²îÁg‹{šŠûÞ…3–<›zŒ´ëh8i–>®¹Ê'‰«_÷G[Ããà 4=Ï’ºq¢s¦£òÓ—]&éjÔg„ç¬>yNäwÔ´„…Pû@žçéNa¤ÕÇÑË[èÜŠ’#U ÷ú¥Bš½´8à†¾gÔB¯Ê‘ ~¤!×zŸ¯H;UxžûÇ5¹þÊ´êwÐDd_*HvãaùR…€K¡PåïK´xmíB¹{ü šÖŠßcƒsŽPë'½²t.FN>·,fÄ`‚Ÿ‰z5ÄÚdµçŒ™œ°zÐáM‘“¨"höñ;jÎݧÓxÑ¢˜†Î‘éæ•1“¯5d´VT¿[9a;Æ$3¢ªeÊ tªWlÐFˆ^,ßxÿìDÃëiöuŸ¸8žž‚î3ö65r5ão4¶|+{îä Ó†ö€3Öß©…xqËtºîñv_'÷r” LJ¤<´ÑÃÃüç»Ò«j.‘Áè&Tä1Ù¯lvóìëþ€CF:'Hm γ«’Eæ?B…Ï~’¶ÁºåL!õ/¾ÍO9;ì¾Ê;!7ev(oÉHÓ—½_é4„fìÕˆ‰†½ö4(R bb}ñÎÙ¾—|þ5 /SÀϪ…^ÃЇcÔÅsJ­¡rÖò|‘‘€Q,ËòŽvåH=J|AÌ„ÐUñ’!t¸;=ØâêΩ€šW7Ò4bÌÖð{³Š, šðe¨ú„Ô3´ËÕÍ~Í“írò] W̤ØüJpï)œE +-n¸›ðÖf·ö'Æ>HxÐ0à.ÕRá;"Eî„â–žˆ­EáM?ßQÃ7½`—×TDãPJ¥ð)O2áël¾¢Џ¸u V¹¶4á|ÒoµÎ‘•¦;‚yG˜ÆK6Õ ä$-8ФjƧ½;ÞIýb…ñWwÜßh±²£)Áák¥#nwZn—–¸½~ÿi÷sêäÈI¯˜½Œƒ=ä’j˜›jîªè”R&Ù‘Bçªw£yôîc’˯§"Î)DAÉç•.þÎIŒFÛ³ÔÁè«Ê7®Ì½ÿàn2BûT,„2’_³ç‘?€þÕ¤D´8Tý#u0!²®vË–Æi.ãöt¢$ñ(,ŠâÒ×ín2Áǽóž¤#°¡‘no ’ÿ¤IÉ!Ú%ØÃ ÇÝuH†€x%zTሤ‹pƒ*bÒyŽ•–‰¬ø¼¤FÊ£%‚ "IÈ aèD³ Ç̱këô¥]5¬n#žmg†6µL1׉'jÍèf¯wþ’kéJÊ™‚ðgw)!:Ô[$UUÐgJõ–:›òø}ª*î/j¾ÕvÙÒAWbºj^‹Xþe!ßTbÑ,9sn|`†’Þ|×öÙÚ‰Ô‰ë®"uwn®:ç>?çVhâñ6`4ÔÊó˜¥íZ"_42r·Œà»(ï"7s¸#ºý¾àifÉQ¯£3F:¬RT‘m‚ÉxH@Àn!*jI òhñ5þA`yÕX›‚Ι#Ž’¤ºøàŽw#ÆE[Ùšú³‚øÕ n»÷0%ú þ')›Ä0áÉF~B ©ÅxbaðÉsó[ñ*ż·² û¹ úÊÕjÚIëOÒ½¡ãR¿DØfèÒ]yí·G¯Ö¯ŸÕ^ªò̦Àñ:²·­ècºÑU9¢÷èE~0såLº¾l§ p¸ÄžzSÄêWlÿ2$yD)=ÒÔ ÞœEñøXü³à§[Pƒ"Ôß ²•8ýùžKéîù,Uèë–øoþÇ­žçÊPTQæáãEOè)¢ÝÒ_Kt¸sÝ‘Cõ„’ëÍkà>Ä%zÝÜêùÛÞ`øXß‘ûï×8Û:ŸúNêá 9\,èBÁ~P÷u,V¤5´‡=:ê‘礎—áµ]‹¯¶.]ŽGlô7E”p©ÖM(¨ç÷Ú&ýzò°, ¯ D¨ÞE<%‰5u÷nQIWKX×¾CUæʹ_ü‚Òw|±Q§bJ)sPy8ÈÕ^©¹È*'‘¦_u:”½¸BÈ Âg§*ovå%MBs—*C?\¾däì´Ù@2%¥HqL`%ìP›)±!a¡%”ÃC‰dôZ”šž¨/¾Âù!¸ûÆõÖâ(Ùøbêqœ_µXE.÷±ËÍ÷çþö¸ÀŽ„WFõÙ4À7!doe\éàðõC'š(ÎÃ[îÐWÔ–°æ,w4×~—¸&wk ž¬lXõñõ_¹÷há/güyhíõv_@D(R&*# %Zf8p±[3gI[¥¡Õ~¹7QÆ[Ƥc†w…*UȹI¿øí̶ø}W]÷Í#dº2Š.|PíË8l=iyÖ ‘~Qm˜Iœ$ÿ{¼sòƒÂ¢(šOG4ý=ÍE‚KE´ø‘ø¼2mÕ[¼[9I‹Éð‰‘«WÚ-BâaÇ| ë딄sã³äS§MÔà“>b¢Û›` LášYŸ1/#7X¸´…¯­Ñé§q‹tåçQe\Ä=:_;×ð.qÇ‹ö†y韺¨ƒòCŠAÄ$÷™$*PtÇ3bÜ=$§˜óM»} 5é›l´8NŒœJi1m·:°©|óªKø¾pBгØá—ròh¹»‘L¼£}^ä tSc­Âüá¹äv ƒb˜P6†žB 'Ïk3KŒ¼p­ÕpòÂ:Õqñ™”OÑg²„I.™å; éc-µÆ ¯Hè$.YÅ¢¶‘NNb¬[fã¢>bÓÁΙœú…¢øÿ€yÉ‘ëéGjI[´Šý¬éŸ òjC±¬n¦®Q…‚Aºq w¡Éâ§TR ¡´:^OßýÒ¶e[zekJvo=´ØÐÂ7å§J"2ÊÔ+Þ˜«ˆcQƒ·p5¹êžµìM¥Y£"¬]U`X$®Ģé?_:ÔáW‰Þ¢Ýj¹–µÚtù–ñ¢æ†x%õe‰*0 ÷FF.&´ØVï^y;=V„Ù*õl¹«±C`Íîõ“y†N­F;0óêÇwûîhu§àOå‹L·ö?„Ói8ïR1ëÍ<óÚæ¿ç ú`s{sÇÉ£7»uÚŒ©¶=ëGTh.TA…¯Z³Û¾°k®6Q“lÉäM–ßÑä"N11­!£QM!å®U‘ |{&0ÒMË-h–èÏa­Ô#Ò/Žr€Ò—nӤ㊊J¬}êvmVµ‹pÏé\šˆÓÂle²©óV'8J(s«©ëvsÀ vîâ °X&À¿W[xcÄ9ÒbHãIôb¦µ²T^.Je4бž!>à/óߌlPv‘Aösöˆ¨Ólõîxz2´ŸSëHœC`;kÀé$‰ÊÙ‰øü‡ÄöÙ8ûʦ>^ònyõ¬»Zõtºa ¾â£|£°ÒÒGÊ “©ïšÈuøÕ}2" .Ýt±ä@UÚ}§à?¤ÕõrÑÐG ›[5ý,q$=»{üб›Oߘ/eqƒ·†*è:6WSÊ«µÒÏ©g È¢PãkÑ•®”âµFÌë†Ù·áa a ÎA¦’kÊ2+ð.ûÐóÌf éj¿cmïñù#…5AÒO¡tùOtú–âô½ÂLîN8ÚçYía†”wî/h/úñÜNbö}6\·ÛÑå<ÞɲÔË‘^Ö×CÑÒÌAP¡–t½Thí¼Ú–÷qéü,‡AË£Þé´ÐO Ä}ß¹îQ‰Ž†É\íþÌ^ Jf4¯¿²Ü7®÷ÔË#ÌV,H…à„¥Èþ8K}%ïÌüœT¥_““ô­ÂŸ2žêx˜‡ ÷CæIš£Šèx޳=Ó:KÅ]ù‚8«^*8B_FÍaŠPŽ5UÀZcj ?§XÃ\äÀƒ[㉌†º_ª+vˆC–e~S†|ø]ÉW^>ÒáÒ}AúLOU „eÈ3a;z¿tTðÃwzî;²ˆÊ‘«´ï¿`-Äp~Uz^Ôp g=ÏæÁÖa„W4Ã7ç0²Pe Þ*ų¸œDA{í°˜†œ µ[QØ‚²ê:“Žç¹æcJì]<m‡£ú)-KŽØ5SŽ•zrâ8V+c—ñ÷ãƒ"å©Ò)® ÛíØÀ<4í©~á'’›®®Yð¦p½.LóÜÒ”˜c_\n}2£#Ìh†Þ«‹ƒ7LŠeÊ-¢)溡êãÅ Ò'…cùð°µFkë`Ò÷l,Нs¼QD©¢ —ÖÃIˆ?²a*OI¸u‹dÄ0½ìù$ Ö}wämÞóžÌð<ïm+RåEâgK׺øŽ cò­Z«¥é”y|Í×”i%ƒÿÜqÜôèvËK­ßÐËhBÓ^Œ :hod¶-ƒ½¦¸Ÿºù'û©%Ü(Ò)ë:>Mó¡>=Q6HØT%€#cÎ%¹âIj<ÍíåSœOâR©†\úÕm]€E7#\]¥„—ñWÀ˜LkYÊù¡ÿ~¤Ø«²SUȽŒ=Ò;æ¥Ò3.Ÿò±®²Ã³nfã³Ð[P á lï8î:¤Á¬AYlÕ$¥@±|Ü÷äzëyËô³ç„ÍkQôê%úr…Jþ<9WSŠ|A[n*€F,9&gÀ}|yý±4üÅÅXEñ€ó©°­zÿ«6JògõM½˜ð:æ°ˆKÎ ]xÞˆœøcµè£·UfâXïZ·êÇ.¬sɥ˖˜«‘†’ÐY± šXF9è/i¤Ôæ- Í›‚PÕøäwNð OÈ7KìTNCÆúáòh¬Ò„ùdìNp|ãPë‰;èé¿õÙJøÄ$B'BëFÆ’P¾€xºà±eø ­ÞRgô7ÎÔˆÅC3RÃ6òÎÛ ù)ŒcëEZAÈ–½©ÑRã˜ìëÙU£æaÓòð§U§|š»^»ÒÝ3oúßß[מG0é/=´¢ýS} UùaÔ±½ç½6Dr¤ÚqJÅEyGP¢3kU dÜå‚áPS‹ŠÆƒƒ•M?»HÑß·±üV¥â,Úî>ò…}©Fû_¸B ˆX¯d/7¼UÜcš6³¾·¸nµšõ{¿ß¢ÏÇ'ûöÌ/Åe£ä–Ùg>Þ³h³O1£}Çf´ÅeA®M‘7ãõ9iïbn®£ó¹iÁŠÕHÒ’ÞmÆT?c,$([¢ÂƒÙBÕeõñk32C„w­vņ¼ÁBøÝ1.áqðÆ|ÌhŒ=Üé !ÝÐ3äFO™§ŒÎà+\Î Aß@–RºÆÚKGìHü‚»~ˆC½I´»OÝy·c}s©—4?&àR” =‚6y‰ë¶ÜyÕ ˜ö²ÞÔäxׯjæGœVnÍ ÷qØ>EM¥6}GÍÒOcëÿÍ7¼U\ÛŸE¬Ë|Ñ",/swñÜ•Ǿ2fÃrÈ­tnÇê´‰s œ*|+ëã4ó?!D2ûJ{œ¤µ9#˜rßЧ…é1§»¿q§‚Ö¥D×ëú8Ág'd›ô­‘8ª2ÑA)±t§4qñÔüìxÏËŠØ·DC“3ÒÄ´¢úé³F¶™hd×~ë 6YäaÛ¹hu= ±ˆ¸nnt¥?Œ¤¦äqxØ!caÄI_e‰goÆ{{VoÇrÝÒVÌùòg!c®n­ª:(öé—E3ÛL÷Õ¨¾éÎÕžF‘ÔºøBFçc»þ°š TKƒã€®^<Ü‹CXlDб f=¾¾»uì2E| 6îTmo\­û¸µ_TÌ0‚ÜÛÄ[4r‚•ÜŒ* ž„¦#ZÛ¬U  ÍWÈsåÈêüÞõ)º– ®É‘šµb÷ŸÉ9ͦD<ãèD•÷®ßʈUnÃvÔ)Ç…Eïá v@ìí%š±(5í æQè}bÝ„ƒv]š¡h¯„3˜:`6М„[š»ëgL]ß_öë\Èö&”ß µ³Ì.d;v*èÎ*W5nY Pnñ;$AG^°'ŸãÁ2X¶3ÊU²{¦R‚å"z¸nßÚ­/ÁÌôBÝQÝ“kö¹Ð.¡æÍ‰ 6˜f¦³µV„š¡ þ@ø•ß“ÛF+-ÆD¬¡»:ž¡÷½±U¬ ÚÈÅÚqeûBw² ¸Î0¹Oàóù]@à ¢ŸL¨åîÙÞ}¶ÒgÄÁûKÔÃe!P6µUç üÐôMÜì…À¥ØçòØÇQŽ{Vfï§ŸË€ªðhÏQ\ÓòûvRÚå¡ñª˜ngeÄ<»ÃËèèCWjèfZrÍîíÅ-Og›bæi¦0Òʺ^"Ð9±A°ç2=XídIkÅËõvΓ¤Ë_‚ú#”+k£RÍñU̯ Cª®z%›Í0ñém¯ÞÜ]WTe곃҉ôv£+Ú÷om4QnæO¢½Ü·È¤Úù³ñ ç!ÌÊÜX»^NRÉúÞCbÁ É +õ{)æÈ1g™NØx1Åš´·Ñb]è ä“çwÿs 8à¨Qké•%PñÞ"°DU>¨pr®fPò ¤?Þw!  UÅ-zN)éÚÁ*c3üa¨ìÚOÌ㸒ºÎ/ Þº¥³¶†&Êg·Ôö^U„Ì®„ÂÈ`*Ȥ8qêʸFKp9L&o|‚›´O£‘fÕ•ÎßMóžqþ ë0r{l¡ p¬Ç³‹po±iB¸8ªaËötðȬI4öGÆcø„²<¯gxpÅyöDv³X™žwqQhÈW b­‰öŒ™¾´îS”3öLJ\K¤•£;55 €Ú ›ò-Ü{¡Ó‘1^Þ¯Ô’ÖŽ]ÑÀß–*À‹ÔÊá¡”D_Â9Ã1]ÛÜgZ‡C¥þÈÌœ?x‡î6"úå=ÿyöÃïýû°ƒutÒOj^ÃmC¤?GÔ¢ÍÅÎeÚuÆAô=űûËïÃúÝ‚Œö ´¿­¸Pø&Įßb˜Á}/XuVlŸ*€·ZÉqlÓ¦³Fè)‰” ÑÆF_ŸîùAÃú)ò›ý&H‹ª… [‰Ô‘0obûNöR—þÊx…ך×ÁƒÉ,ÂKR˜'¢“sŽJ<2z…©QKŸ Íj#xe•¶ãÁÎ’ Í'µ@”1²fÃéÖâNLj2örÏ…rŸÁÔœò_0¢žýtZ°« âôQût¥Y÷;îÔRÐnmv2Egû_ÖÂ×€ÍAÊ<Ô8Ö '‡7_“{•"o:gÒƒx-FšF!­ôÊÀÎÍ((œ2æäçZ c–Êb­Ö3$? Fl„Îg‰ù°Æ÷+Æl³º+l”5mÌY„dÕY>ú‰0:e™a¬t®¬:†®|ÚáyÐÓêøQòƒŠüQá ÂošEôŸ¦mq€›´+ýwÌvÎ4¡˜ÜbìÖÌÆ4œöCzh2,UÕQI/ÜÅ]2m/&oƒ?íèu_Z§ì–ÐX zãÙ3Ù€:¢YŒìb¢^¤$ì´]n8j’æ|Vv¯+é˜Ã8Î=EÇkE âeÓÑ#lÑ| ³®H–“ö e™¸9¥bºM¾åÃzQé§òç͈2"¡É ¤é¼;†%ÂÉÙEÏ'1y$&£¶I>‚é¯,ª'b¿&_guÓ,>LÔUù(‡´Ê\¹,Ö볋e9 ò #‡Â$®Ž­TrŠËæeà~>c¡Ã‹U·Lg´gêø±Ù>“É|„?<£t¡ J§ÐŸSöŸ¾“z—Áw< ɳ‘§‰*HòÎÅ-0¥eü»Mƒ]þÜcôdVgé„Tâ’Uè„jN: ©væNùÓH‚_¥œà iuX´r²8; É`Y²÷Óî÷؆ÂB1³½ž€3€J«m>%cŠíLNAÙÛÕ²´~õ–lÔ+¢§´ç#6Õøy…NF=h6É­æ{"¥·»q¼»„O`–M —¢‡¢>DXÆ™Ãh—'Á “ ¸ÐbæžH19'²U(†–LØG:x9 øz#f릊k„8SÑ™uLWQËø Ù›9¡þ'ƒçŠË༰dß^¢§(MLCµF?8&ʳ¨LžKJ„Ûä,…ã.żJ(¶`¨Ê–psÀh¹•€¸~Ƨ‰¾V3<ŠÏBF¯­©^`¬ÒpßzŽH\!}ˆw$URJ`½ò@šnöyùIE=¤ô¨ÛZ'(ž8S¢KO¬ù_eð#ŽŠõ¼e&ÅÀ/6jLÇn­p–%„ÿµ÷Æ“¡aôº"W:/œÙÏV’è<‰\¼ 3˜ß­·¤ 4ø—ƒºÕÚ– C8mßc:ÖkåΙ©ºè³‡¶hN91Ú.&Åû—±ŒÔt‹rͦºpmóÏKCñéE¼cºsÿ~!áÊßd!px›˜ ŽLú€mÖÏjÉYC¿°å»Áå”6‡f‹¬bÙo_гuJTfµ³§›áà´ÁK};ß2»‰Ï·é‚ÊêŽ]ÂØ7VõýÝ9ËëYO¬œï·×[qæÓ„’€c´9®AQaÊ àTS1àžN Õ[ÙaÎ/¬0¸ªœÓ¼w&¦I§x h‚``p9È}¡tÄeÚ¿Œ€ì¸ bdÊýuçã¦Ð“éG*ê; "QÍò_§¨¾£úTîWí!›w#˜£Dn{Ø—Pñ!ðÞÀðkÔÁI)#H¥„.œ‘ 9‹…㤑¡² âíPp¾=z òšaKq†Ôç í«0Zd×Nò,$á“‘žI£0k²JY;˜â‡¼*¡e©Ï ÂAiº‰®™88’¥)FÒÊ­iApÁ\@ñÊ^æpÞ÷—$Q¢J±’•´|8g "fu³ø! Þŕ߄éûŸáãŠü8h¢É (ü£Ã”bþ™…­õŒ Ê{¹ W‹¨ËjÝ€PÌÃéÊQ'Н*fæßÆE5¤ó¨?ΙÀ… ×'Ýt±´  Q@ñßÓ‹Œ¥&x n> ÓÏ­ñç…& Óà!‚ïó7ÌR.er¤¼ÍŽyªø Dëˆp ãø]Ö¾27y;xçú…çÂA1Ð]õ{åÙ» g¡Âè ·?ʇyÁm(.RNÜs±©yÐ9ý}_ÇæÞiÇM¸½lÞŠXe£Üœ˜)æÛ•kºU›ô¯îmE’Þl@2¸ûùLÆ7F¡ÞmXbNvFPž˜f"ÆN9â"·Û…´‡C5ItÑ • ìWÈìðÖblbËs©ìLçx”Òâ Iñ”…ƒ`‰êŸÊ«tMð?K½ †ªÏì|-°løŸtзÝ÷""‡iƒ-h“/9f˜añ‚–lõ+û÷û8"Ò}—߫ʓ¾CˆiOüXžªoZü=Þ9¥T겘ú«û-Õˆ…(…t*Õ_6±0‘Øw%c”ŽUg/¿¯Øíì&–§¢÷ñ/Óý±A€:’9æªË(Ö)"dŠ»¢›ûC„ØÇ®¯ÎÀð~ÄÃâµDá#ðDÊÕ§¡¯¶œ…Т"N€£—kšh¯ºønje£X°ËV˜XOÈP0ÒT,‹'ϘF1Û2¬P0ÌÞO›Œn‰ªÖ(à ¯ß6 ç—0[B†Z¬ìfiV~¢3ü`|ºçjJK‰ýߪ#öñ'Ÿ8þ8í­¹2¸ ¦¥žÚJ’Éú˹Ý%¸®ÞlëâÖTãi½Mä “£üÕ‡@Íú"Ç S¢P&y¡|oÈV¬'Ü$j³Jý‡LfÍ=Ñ(wÜy³ò[§$p²S²è,¥œMI"̼ÄD£¬q”¯²üxóŸ*.ì5Ö³ Ô/)€—¿~nLÞ§&ô©€C“)xA¢ RÒ|c/I,•H-.À©iî©H>€Ísx‹%?RÝ÷—ʹÒÕŽÓka9(NÒ1]É2,êJó+ÙP‚×+…n§žØz‡ý\ý§´‡»ÁÜ(…Ç>D~©¹7~Š+ÂÊÐѶ)úf@Ãaå•ì}YUŒº& cj„n„ÕåEÊ;¾8‹€[á9Tõ_¾;ˆSW&Ëö£s;s WÈQá¶46 …´‹3]0,'8¤Ø=ó—)4²D±¿ÁØ<DžŽqô*YŸÛ[d[p‘Çš[›.UÕÈ\ÒÅSbÎh‚MþÓ°° àeoŒ¶oýÛ]îþæÆ ¹¤ûm¶œDåg;¤ô3ólÉPò/áwätÿl:”êœ=‡!¯|@ìç ‘—Óº|RÀŽ{éeÒxÊ »4`Óµ G-\å~²æ=Ëí.Ú°x$iËžêUX;Фã|å8Àæ§Ñ?è™CÇÅ¡Á»Z7iûñy@·ç¨ìjˆòJ¢«¹ùð=Éé,·Ô¯ÝÁ¸ÙtÜöáÝíMMžE®ThQ+J·vHJ ‰¥WçǽÇé˜×¸a86ûl¡6œ€ñ8l50c°EÜ•´³>©b>Wÿ†÷šètú·xM ,EíAÙˆrñ×ïÓ™=¾ -‡%owkƒí½peÏkÁ%ÂNÿ›y ä4MâØn<ĸžÅ-=1vã{¢pyáÝŠw ~<Ë©£ÌIòª¡" ìXÀ{ wL÷Õ&: ;£¥®9 é'¤örÊË‘ô³ÃDǧ7W¤{ý”YøšÔØ4’WE› ½CaÊ©@Ř}m:\Ìì¤ÖÚ(çra Ðî’¸ÅMM%MÖ"uEo7 endstream endobj 6804 0 obj << /Length1 1630 /Length2 8988 /Length3 0 /Length 9826 /Filter /FlateDecode >> stream xÚ­ueX\k–5w ®…»»»Ü RTÂÝ‚ ¸»wwN€@€‚wËGîîž§¿ù5Ó?ªžóîµ÷Ú²öy•†6›”%Ô,upeãbç¨Aì-Ü\Þ@TÙ´ÀÖnêvÀ À‡JG'ã ºB ²@W°0@l ƒÜÜ.!!!T:€ ÔÑËbmã `ÔÕÒgbaaý—å ÀÂëÈK¤ ÄÚ@ÿòඃ:Úƒ\_(þ×Ú`0ÀÕ °‚Ø2ê†Jj F5]€Øì ´h¸½´¨B@`0À ê °ûûA,!Zsaá’r.Ž`ä% ì ;þXŽ`g{ˆ‹ËË3â°v:¸¾ÌÀ €8€ìÜ,ÿðb·‚þU£3ôÅÃþ{!Ó€º¸º€œ!Ž®€—¬²ò×éjtý“Ûò V/ž–PÛŸ–þÂ^h^PW ÄÁà ötý“Ë °„¸8Ú½^r¿9:Cþ*ÃÍâ`ý¯ XÎ`k ³¥ØÅå…æ…ûÏtþÕ'à¿utt´óú+ú—×?k€¸º€í¬ØQ¹¸_r‚\_r[CP9þ,‹’ƒÀÅù·ÝÒÍñ˜;Øù¯1þÙ¦—"€–P;/€%Ø •C êú’Àø¿S™ý?'ò@âÿˆÀÿyÿoâþ»Fÿí%þ¿¾ÏÿN-ïfg§´Y€¿/ÀË-¨þÜ3v@gÀŸ»ÆÉ üÿ…í!v^ÿCà¿;êƒÿ.ö¿øþVr¾ EÊÁúE6.nvοÍyˆ'ØRâ ²Xí^fö—]×Áìlq¿hû×X_‚89ÿ Ó±€lþˆÀ÷7v°ü÷ò_äú«xC#=9–ÿé†ýËSãe\u¼Á€ÿJ£ÿjùÏÃii¨'À‡Ÿ ÀÆÍ#àrqùýÿ¢áú×ù ÐÕâ 0ædçää¼üÿã÷¯“É¿ÑÈ9€ –6GÛè`ù²lÿ4üAnÎÎ/ÿõþ¿4ýó_k{‚A¨+KPH軙鮵„¹Ã“²Æý½\pÃaŽ¥ :E5О€‘›B•æŸÂا…ŸÛ¼Ÿ~(3ïŒöØ1ô¤‚óÉüh˜ú pÖé;Xv‚9LK1Òõc|NT¿ÁñsêílMjj™–<"’Owð8#ŸÜ0Ò¸âÑ^;búƒÒêãñ;±apk é“÷n®ÇF†‡zÎú~²äģЉ ýS¨>¸z™;_6€žîÝ<¶D4C°«àØ?´ÆøºRžI5ùÀK G 4¿#¢KŸÕ Èt-×Î%à+Τ\’obšîoä<›¢î¿µn CbJzF æ4êG­^2 ëEP“;…v٩ܽKI%J4<‘ùø£µ%Ÿ8ž%NÖ#l>¡ŽtËžá™Ëå-±.šæ:q`îì™êX6Ü hcØÃ·+l1­Á‡1Í~"ËVœªyãÕÂc§ú S˜”’Çdß+ ½Š9 0êw†§GßqÀ訪z^ée³¯T™¦L³Èeñ%ø ¯ýe«dp)N¡þá1ôõdî¢^¡n´×‡ÏùÉ`µ®Y¯ŸÝˆLÀî­¨ˆeºˆz”)îEüþr4†RÈK‘$ë ôc)–À^&Lð÷ë ~Þ‹ŒRô#• 9œ›¨u„N9© ? æ ‡E@*\Nbªåq›8~ÓÙÝÑ(`FÖÑŸg,÷å¡yßö“¢„€ìÇWÊK¶kõ:¨{%€nUv!Ž·SP?°U€ßÛ‰Ã[Æä\:5-ê9î2ùUª¢5zˆVJ®žÎ¾à(¦V)Un‚Qä({*%íÔ8˜ç+…æ[º×'Ã!!´1]§;dè”=”v4èdéiªGbf û-xü  aÈãHµœûþ>cûë"e¿:kNŠÕGì¹ò¦‚i„):ÊŸÔ³Dü¸µx¥6n´Iä”o„úÖí£&ƒxY¢åÑÏ\¤ޤ/d1ÙÁLTW1Úã„ÉÒØÌ|Í1×$”ßÉ‘v®Þ‹\ë}~à0þòí¶)˜dìîŠm˜Ø2÷“ÈÈüi¸i¬g[ùÆÇ–R„Îåí»u_— üzêÊo~-Çš[þÏlËËìã·ÂýÃ[qw©>dÅÞ°¯ ë‚UaŠ}i÷ñZçŒ_*ó^Iªxåö³|!öÁÙª­˜ìu‹º¬cƒêç]‹ì'd\0j£»p~%º-Ž%f”hB1=†üõDù£ðWù09W*goDÞí_fœ#P´h±íÒZ¢9î·½Úà¾ý0øY¦sŒCß3Ó"_Í2åµ0©VÚʬϼ·dŽp!2ÿ'õ:ð3ò™ÞõêØwµãÁHŒL‘’÷“#1­áŽHa7r¤À 6æ[ë 7`íÕ,Ÿ»d­ýF¹ÁÆNQʛíÈT3ŸÄ9µ^ÒÃ5ùe¨\é¡iÍsÕR–­ÐÂ*µ¨„´ÓõGUÊz¼13í)›ŽkHįól}눃Ô=WŸY=“V¼Ðo_GäÚ†¦±¨š6úó=Ã[¸ŠÄ©¯&·;µ*³²{Ô>1Ó*‹½ç‹§©@ÐÐs<(65•ýo*ä¤gQkSn¤5t9O¦$à#XPéÊŽz¹!Åúç·ÛTÛÞr­½ÓÌu|7¶²¨Åz¬™ ¯K pröM²V–e‚¿ÆEv''.(c9RÇ9ÿ‚•íUu_¹÷ÁÒ;zì5L%º·Î¡P|ÇÁ„2°ï±š*õ÷Ö¯ú9ŠìØÜÝ«š²â ©€§÷‰0W’­‹7žìfˆóEÉè쑸"¶ýKsCw~ÀæÛ?8ÉÜZ¿Ôghljcsi ò“W²þÒ;nÔlOt¶?1‹í±mÍ%Åó$ ž’C—þ@ó3¯ádò²[3.5ü^zŸ­S2M"ˆïg³~-.É¡â×.,„«A¶}#«áWÀ…ñy,Nœž¨õjÆm}dL˜w­;5­’ßa0¿w³;9aF§e2uª%s}Ž€r…ð²Ií ü$ÌI ÒSo ªõI+óë5ã[þrê «J=鳤¶Íb?°Mµb½C6HÃX;,Žu Sn·­¬5†/’ç Ÿ£ÓÅÿf´Ùµ¼b€ŠN%î@%ª3ÃÁ½fŒŒ6•ÁÅ‚â%BF™§' Ÿ­ÿ™4)_NN¶‹5ú îšçâ1®É;!‡Qz³Ê$i†D¥²k»ÊñY³¾®tqþU~]ÕS0³·2r¦TøÒ ¯ø^=[8Ù‡?Ê™ ¤ÈSE§£¤êôôÉï-1iŠÀ•»±]%+µ[l^RÃvÃ"NщM#„_årÕ-;äûAðó5öyÄûtK¦o0Èóõ“)üP­'*ú¿~_Ô'ãâ9ë ™ÞÝéJÖ•Hc¨<…Ì­ô­Bo-Ò³S¶-AS(Òp–²O LÚïË…ÊXžbc"ÙÒ¬…;Cõ­ùí60Ê8÷J»"ñÈIî÷ˆ »Çtº‰¨ƒ BtÙ‹Õ_ouêþ0·C +Äú¡=*}ªS‹#èFv­X”Jí_ÑãNÑý®a©§+‹¢Ñ³WDi‚§zù²9Ü ø@Ð%†¼^cÅ}óB âOOˆPà¨ïnQǽó $Bvž ‡aVµ=$5‚k)%ÜÖ—möQ£(y<‘\¯ÿUg`Èüºš›}¸eêºà1û}«ê»©‚Å B®5?f¬tõ„]FM±HG»_h§nÀK zXÐ"+Sî"Õ)(æ–U$0ú5åYërÜòØ«O°+Ò£Y«»ï)÷¶4ÈV§‘`£Ùãß•ùtùˆåì®ì±´å››ûVÉ¿ÌZ¤qúÛÆb­<Ï¿³{€ôe–'+¥ˆµ½§Á7\›}p'P¸/Q.—v´ÌBˆÉ3³ˆ§Ëÿ°‹ÇQ€Xsöyó~ɽ®©â–o·ßºæÄ<æüg¹¹Ÿùöq¢Î¡‚´ggÕÄ[ SÖ‚ÆHBmw%ßÀEó ñzYççV)DÑ÷Ø9lë){±ûE|ÑóI-¡üM/míÁÜÃL¤¬wâÊ«,1ßÿÔ6b~j0ÁŒÇA¼‹HW2éFèUYRB˜KŽt_¸å]tmÏ ñ™A ©ÑFm<1ù¬à´ŠÔkè Æ<ã`¯¨¦kK,kˆ{LL°ahVï Mï¡!R}úÂ2x3•Á*âlþ`ó&hÏHœ§J«äý°‰݃J™Ü}ø'ÉŸ<‡ÃbÓpEdªáÑÀÜ­÷U_ójšé¶5ž“÷$O*O‡ ^7„Ú(“RöQ4ǯWºöM_ÜëeY^}{|n㤥»2Ò¡t ¨T£nHñx¿pêå¬[u –¦]«f ÌÙ(L\_-Û"ÆÍ<¬úÔòÞ'‡ØëQ;S}W¹·÷Œõ;;J­\ÊJ ð§¶Öª'§JÞïMsʠ'˲ú‚fŠ¥ ˆ A.iãiðË÷Õb¹àbL`ì(èÌp;¼²Õ=ãD|ÊÂåÛË—NqÞ~½wœÃÔ…¿ Hc_ 0¦”ãZ7ñ¯eý€–»¡!ÅíÝF!Dûdh|¢ȰʾêTÉ©²6h*¿Xüéú>ªvU=dcˆ1rk4#ÅU'žS0³vc#±ÃR¦òznÌ[JÎ…¶Y!c_®QýÑ6ßlîä°NîT3ª'ü·‡/W‘ÑÝ¡¦2¿*Rœîø¼ßîZú‹9:ð–Q¤2Í—ê¡>6r·þsÃPҡ׌ð'³¬Þó{†7*¤k ŸþŒßÄFú×£\ùÛH# NuÕ4 ¾X0K7W=_nªI~LZù“Úޜ âÌ»Žà’&ôcä(OÏ\úªN–YÒÁ6¦9Ú~眣èšqrn)b1´r9õ­¥#™ÿ†gÍEaHRO/éo·?÷uØ|ë¦ãÆVü»Œcøð›/rÍ‹yj‚⯑Øl?§yPO>ÁÊ“²¥:i[s.ÚDôæ&1¡ (¹ÓˆäÛÆª¤|y[ÔG=;Ùí žO%¡Ö‹k Ö¬äZŸïÙ27Ûrj±` Ž h†¯b ¥}ë- °Þ6ŠH1#Ê5¶D¡Ú¤¯Éãàï…–Ö[´æª]ƺæ½{ô8[¾þlgßå±~Ñx62hBÓr—ϺIöLÞz|béê`܇²àJ:«ò `aÏ­F7+ý·31Å~'S!ñ{Ü:§+­/#J—ãΫ`”¥d|?ï ði¾Û:}ížø¦¸”MMË¢ðP_PH¯ç’à=ïÛÂÑFTŸŸd¼o ñ©l$X¾ðgð)MÝì~œP¿e!5!чèT¼}WÈÙæó ü®äÀ³CHüá$›a±P±‡®ˆ<6(ý(G)rMI‚ÑžJg3:€üºRkl÷øª¦©d†-p>gwHljVO4ÙöÑ– S–]‚ÌÂ_wàÉëe¡h¢½ò¹ìnyÒç fûÑÆ úJã:²ÁOPzUWhî,\ÜMýÃgg¬™ŸYxöV¯ߊüwÌʳbYl؈…Œxç*Ͻk!Òðn¸ 3ËÎ@˜ªÞøá°© C»@™VÄVAÚ>à×òE²ÇÀz!|7émIºÃ¢ÄF‰GšÍü¢S"‡ø%1•Å;^ø»»¬n:ì$þ¸J„‚RwP|RèÊåóeŠ‚z’1:‡þ£†’&#ÔWˆ­€`æCJUÛmáîPØ?·Š„,r7I}Ué˜Õ7ÜaµÌŸ$݆ØÎ‰XdŽŽqb/(3WÝþ2t]Q° ²ñx {¢eͦÞæ,•§àª*$¦(%½9ØÓ±Ôñ(“¹&ö¬Tt ì‘þ×tëÇ«ÿègYÜþØxÖцÖÖû%&;)ëa·Mæë5IñB—RÿŒqºÂ–ã9yošg$º¨ ÐUòĸÕR5ðR.å ­.a°y•ýÈkYÁuzɹ“¨ï—"ÏÉ»òßp=´”lï>Ò›¨ÜÓ¨w˜=™t1JìrÊôÊ I~j„¯äbÌŸógk\÷ ¾ÑÂÉôIÂÑsìèý¨*'³ŸH:…Âr‘ƒö) OEc3™€+-Ž#Ûó6—@ö zãÐïû)½>i[U¹2ë(jk]ôð ]Å7r_á ;"më£ J\ÓÓ_ÍÜôŸÚ[¥·øzxe÷K»ãgË“TÁà‡0.Æo"EÃþÕH»oÁÖЊw¹t/ÁÏJ0…XSÞ]‰˜íê¡=T1ö̯k·:F—¤÷%Ù úHͧéú¶ ²ç¨p9nŽ’Ò4ŸmE¢cìøô›@n•Ÿ»Œ?ô„;¹4r3DGosCÖ*›× ·…çŸi|yÔp JÜ#™Ô‘„!Æè,;ãs» y´BÛ—ÖÁtr×£æÉêR¦JOO¸‹3!|Sñ½Í6Æ{KpØ7-çýeu ’¼_ ²¨4µ]ôºe³¸ n²LÅD5•z§X‚/ÆvpO)ÁÈÂó©ú¡'€ØðpÓÛ^ÈÂ#Èrz´Eéàî&"N©ó—8°S!ÖñŒ‘Ë©;úª tÉÏXÈÝy€°D¤·Øc6.¬?0}åzÊ£õ øxU$K#5ZÓ;æ×q+UƺF&…UDx0èNúÃiŠ–`Ãv'•®©Ù6Sèn×tâmaõ­ŽTMï~÷PKš("d õê}$&Øy8ç4(G@»¢C “éE°õóüÈYDŸ·<392’_N™…Í£æ»HüU`J…Ò5™/,SrÄëmXŽ`j1ËHÉ»e×;ê^;ã|ÐÞràì-¯Ä;R[QÿKs&`í[².´Ôæ-|VD²ñ¦ŽùÔ¶»†­V¹|Mãb´ø½îiM¶‡,jÑ);¨L¾µ‚tйæB½°M_¯Î_¿ #² üM{ó„/^‰lkûí(³½Ø$Än0š­ÁÁöîÚÄÉ#B£–‹õÅq^¼g®1îS_cŒvi½˜  Hã=óßàßoÊ+…®øJ¹˜>FQðÕb†ªËK<#F1çB^‘³¤ °kï §|ãZ±.÷dÃ6ß6;YÍàZÚ³~; ‹UCv4¨2è3e58ç½G Z’ ”P Ï(ꓵi=ÆY…·ÙŠÿ`—…fþ\ìjbnÛíÊ65œ†Ðý¡Hiè0P¢©×´CsgóýÔv¯àª³‘‡ïqýXÌT¹]ÈùU^ÿ£ñŸü­Ä“N#JY¡•¾·8B¹K`™§º”I¨ÂÑ áê…m·©>$=ÉàeH'0 è%ä“|3LÌñ&×ÙþN‡äI>zÝÈbŸDxŽ`{|ËÂ@Uú6àÖ.cMµt o~çíÔúöš|S5'³5ZT%Ä,,í(k\¾ä­þå ×ég~nÆÔ¨5~‘ó~ü4Â3E9ƒc°¼yB¸á*•d&qàÙ^œ©Ì '–¶m+ÎüèOæpØËô «áZü¿Û“ÅλÉša Ž‚c GüñÏ;Ѿr’Н›ïïÇŽ”Ó…B›Ç‘E¥²Eàkñ’ü‹mk j<„…ìiŠøI„’1¿ (ëßO¶5a¶Æ}%SD,UÚ°&’A½á#ä?j“¤ƒsî5òïZ¢`.‰åk%¾¸!ñaü§¾ºÊïÀåÈÔZέ@i$üTÛ9€mÍVÓeŒ‰ –<–ûàË'ýÆÎè¯æ,95Rt‡ ãû·1V€#R…†Jr¿äÏxBù‰!ð¹îìBÀŠ;ÓÑšúËõÙçŒõ¨ZÍçx³ÎÈIË[c^èG"˜zV±œÙ,9š£A«fÀðº"Ô«Ö²ØÃÕC©ùÍ|?=É«!(L[)S0wþŸ*ä ·(S)1W±ž¶Þ‡ijoõÃ1p ÿê©ÇvÁµÝbì.˜ameløP²%¯erqìHÿ Ö…~wç±p¸:ÕyÜâ7“£ÍÄ€Ô²€kuòë=Ð9ßòŠO¢.tM©Ïšíh¸'ºD|7Е.4ä[6˜gäLLå¾SÔÎÊL§ Ûý,ð==š+ÀÖÞ¸ƒÈÀlg>ÿ6L´ÉluD Æ0ei3ʸ‚<»‹úÇUq®Ôóûð®Ù&GûÓ7mªA00÷ZâŸóm—‘?dºñf¨õ¬G8ìNGF?m êJ ÷Zû1´ÚÐ oM½2)úèС7ñ^\É\Ê×éùW¨àÃcpº÷^­xŒPbÅ{~¹AËj{Äà€ãdÆOQN\xu™(…Ù›Ž?… ¼w:öOŒÙß]—[RúžÈ{~¶4Rç ¾óŠ˜mÎG}c]¥ ÷å  ç57êŒR¾‚µ _§ ©LªKýb¹Ê‚»œ¥ƒ®·ƒIt3j‚úæsgrÒY¬š8Ý2Ur,‰Œ…Ê™:õôRoîZÝ?K(¾IÚa?Ç2ÖÕšhò3]¤†Yïy¸ OázðÜ8vwØ€¶:z’yšWÞ…vMo|r' ÚšVÁš7¯oTn2‡´'AÆ\¹ôø¹ ÛGãl pZV¹<^Ó=9cž®§P´73-ÙÒƒ5ÝG×öêp§ª»‘÷\ÀfXŽ”!Rpz‚IáF ǹ ƒS&Š>m×1ÞM¬³+¾çŽ{‚˜ÁÔr—uòL*<°f¹}î[s'if?õgh=?5"MŸéË+îÃq|ɈìX%e±.Žn­ªð`/p(~û;…9  tÄ*;ß,»€Ù(õÚv1¡_ï4êçÈ0EҰܣ嫶PÏÍ´JjÔ:ëÚ¡Þ¯í ³²‹5[a³žÔÃ,D.¤}Ú-§š3R¹j ¼-é´>nWÓÊËI²æ¿ó±†®‘Eý\#4^Nüž2’VŸÌôš» Q·t¤oPY<´‹ýV`ëàvûBºÜ^÷ê«Ì»ƒM¿ÈI¨S•1Gˆ‘.ªÂíèÌA½ê±Ä[mXîKþ<‰E&O¿Äß¶1gìÍID°ÔAŒ©ž©Ï^š{<4ÛŸxǺ'™*ÙËÏëc‹ÙÖÍÊFˆpŒ>¿¯á=^ý•¡nâ(ÀÕç_l¡Î¾”Æôe³P+jkÙMMˆÚ¤PäwÚ8™nU?øñüw¸v:+z ÿ*Õ©a<«kÂ\´¬ã»³Ç¹kË9³ E–ý,tÝÝbõu„äPÿ.;QÍŒã(w^RüæÂÈÖ[¯þV¼¬ëöÔ¿×ñ°`¡s¬îƒxÊ(¿(cܬÂ9a%odZ·“e[õ»ƒÐ.[—µ€_¯îöóÕ,Úý裾y¬ãÛz”Cœ ›…vÖ1WË‘H¬GÕ•ùË™·ñ4p‘¥.© 1ŠÄKóé²ÒÙ-*ä#dA[Ú®“`ý»þ§n[Ú’ÆÀ^f#2=´{"yÓ‚NL¿Ò”÷Ô´Cò rqÅâèÁÊ®DÌ׿swI"“myç§Zœ‰ ³D²Ùg4L{ð’ÍLja“y2ŸrÃ*ýÕ.å6u¦Þ®‰íå7}l­¥|+‹JËbkžªú〨Þœà¸Ë<—™_ñ9óÀá.gÚÆVÍ_î7:Æþ&hƒƄ¬¸^™¥4e•ÍŠå÷¯ž`Q„Åšt$Z"#:Y5[ÈñÃÜŠd瑵_h°Ý?®½Ôû›UL0_´÷:úÛ­53'd(™+êiþÃ@´ƒ™40ÞðW"ަ;âi°j]Jm»˜P[%Ù»ýk/1æð :Óçk–õ·sKÍ;:?Vˆ.U©Í¥³òyáV§ËI] í‰Ð(¯¿æEŠqûg—Kœd6aíøè<-©YÓ~›Hõ?ÖWÅd9FzmB$V-Í”$áRÖ“†©g[)v á@hDD1ˆQÌ_ɉMéã@_÷½uKeeª$ü\ ‡´û(fÖý¶oàOQžÞžßôåÓ9ÛÆGLN¡˜Ñ¬ 6 áÊcõâ8ä$l3☽ÔAatÖ¢·°6X†¤°2­x}ÏkÈÖò^…9¢-iý eL¿?G&1_§ô¦óYF¶¥ù{Ä&mRjoA/©ÓýµZ؈„IÂFI•«(}ú³3Â'ítšN ûÚ†yÀì³›wñ •ôyTÿU #œ¬wr§ÔI•Á‚7Ž'=î.Ad´D AȤ±‡)³`ÅÙQ!ToðÐk ÿç³myÇGlÔ’Õ›€Æ9R½}û ÉÆd±Òï!Ó|{®AV]N7=û,%Âæ“Í_ÊE–Ê,A¨¦˜ˆîë2G$SÖ½ÒKI”³*7“BÊ&«ûOpt ;¤j‡}©[—mN¯ÇMQ²º¸¤t–OqðEYNç-á>¿å§æ’@ê ¼SW 5mE_¦æm©Ñu©Ìò¬ YŠ#ú½ ÷ê!E q{½Ñ|“Ø™\å›€Ò =âM ò—®Üxþb#•>{G©>´Z |Sÿv€}V”ENSÝr´kµE’¹YCÍv…ŒÇCÌ °Ù†j +ˆÐÖ¬ïIJ#s_ó[’††ú9ç .¤/8È4÷!¼È{¢ã)¢©;‚¢À9¾Ôhå7&ó‘>"§)UÔ7ï:“xÑ#Ôºž·»ˆï³ öåGŒŠÇs0Y€å~<”G‹.m#@™È0"—x=–"y:±ÜOÙÚà>jû¹X¡ÅÔôc(#Ñs›ZàV³`<QçÛhñt<ÿ¢u!n¡µ,ìÛf 9(Ä!'hÏ9T ÍŠ7ŠsëÜ¡ˆþ¨Î‰ã~‘økv¦A>IDÕß~ž©N$´I%Hå×´îA£Ó€UíÓO@ŠüL˜¾£‘lÏ÷™•ŸTÃ÷õuåF$¹ÜS4MfÇw ]ÎWvFi? VÒRkoMlY>j|øòÃiP9×᱊b@}q)/Ž1Žj–"£Œ‹(¾ˆ&;kbŒåaØŠò·5ÚÞ;Ü Ô”òíÎÔó\?ÍF(ª·ðÃ3<,líæÖˆ©JõErwß}C@|Ê +¥¢HæN¼Ÿ$o¹uÕfùý/­¬™¾¥ÙçE_«áÑý©´ht¶°ÉêP!¨ÊÎQÜÌ2jqÔÊ©èµÌùpýS¢§Vq#¿jÌ0·Æjòwë2·9¼Ú:*8rÚb¢e½i/XÊ€\{ö|'bÝ ¨†oú*2j=ºò¬¾pãï"Àÿ2áqÔ endstream endobj 6806 0 obj << /Length1 1608 /Length2 12870 /Length3 0 /Length 13703 /Filter /FlateDecode >> stream xÚ­wePœÝ–5ÁÝ-hãw îw÷ÆÆÝ‚» wwwwww·÷½3s§î7¿fî®z¶œµ×ÞkŸSÕ$ ÊôB&vF@q;[=3@ÎÂÆÈÙIÙÐV†^ØÎÚðád‡§ q‚,ìlE A@€:Ð 4°°˜¹¹¹á)"vöîŽfæ µª’úZZºzþJ¹ÿgä㤓…™-€òãÃhmgo´}@ü¯*9`ja ˆÈ+hJÉI¨%äT@[ £¡5@ÁÙÈÚ ca ´u~˜Ú9¬ÿaŒílM,þj͉áKÈ `p²[|ºíÿ ÑìŽ6NNß '€™£¡-èc ;€…­±µ³É_>ü¦v²w´ûȰùˆ}€)Ø9œŒ-ìA€ª ¢âÿà 27ýUÛÉâ# °3ýÈ4±3vþ«¥¿c0Q¡…­týUË0±p²·6tÿ¨ýfïhñ7 g' [³2 8Í M¬NN0ØMçŸ}þ[÷†ööÖû;ë¿8X€œ€Ö¦ ðÌ,5AµÍ,láÿZ)[S;3Ó?ü&Îöÿs:þ= ê¿væË C;[kw€ ОQÎôQ@ý¿S™áß'ò¿Aâ‹Àÿyÿoâþ«Fÿíÿ_ïó¿B‹;[[ËÚ|,À?ÀÇ ãüõÆü¹†6ÖîÿCö¿&ªÿÁð‘~ŒAÈÖìC &¦8-œÄ-Ü€&  cs€©¡õÇŒþö«Úš­-lZþ=F=3;û¿ÄTÌ-Œ­lÿ:÷ß! ­É¿2ÿçoތŠ¢ÒbŠ´ÿúšþ¥ð¡:HÅÝþƒØô!kgò_Æ_ÂÂvnOzfNV=+çÇecbp³q{ÿõþbþ§-kr´ph4ÍÄüwëÿñû§¥û/0b¶Æv&í‰2ÈÐÖäcµþËñWØØÙÑñCÑ¿oûGËÿiÿ½ä@ Ð~yÁΘ7È2%=T…“50&ªÝÓÅ 1l_X«’—ãWa×雺Å]jðRÌP7ÁóÖì>dÿº'Mó{¨ Ûšª3xö‹À›ìKwÚ:e+'íïF½B¤ÔcõHÏó9™MH-&µßÛcŠJz/Є­¬Ž°ç÷_üÈ\rü0Éïì‘}ŒÔÄ`µ¡Ö¡WåS&ü¹¿£êè$êÞçýGÁkˆã“tD’r7p¼©5~u¥¯àÉL'1î‚fx¬$Gè"‡ü-„/Hh~¦›ÂǺnܰâ3'r€w(Í2AX­ë‡ÑÔ>LW7 ØÕipUþ\:‘Çö\dÄØÀI’vŸ(Pgfh󽎟Z¢ïkÔ½p˜‰åÆ$„™W`”#üû ÅÏDË>–TV²?/.pfªŸ_ZÇ%aÈÙŸ#5'¦ ÙÁCŠ\~Æ$¹baÕ׺‘t8[H²ááÛÁcÛŸÃ_<»Êç1ýÎx6bü½hÏ3_Ï.lUqõ­ÆÓœ, ä| Îmnñõ8Ü ¾R`¸ÕZ¦ÝnÃp/# I–UÍ¿¤ž_c$9¢“7û\UÌkQ © ¿FQÇwvˆ€BÍä5p÷Θ—mnsÙ"S5ͱ£)PÚ=Ô‚&µL Ì(Ž'üsB°q‡å“ÙrÖSbìci/*1™fÇÝÀV¿†Nëtñ¨;Ÿa€„³½ñ»PÿËvÜ‘FˆëÊR"¯®U·Ä3t 0Z›j7Öív#åÛOíb2c°Ø°þL>sÑg[,ßÜO^Ì¡x0 =Ÿ™_›; fÊöŒJCSwⳈ֫£SBF}¢y¶:VØÆ¦„ùú„q&Ú~Ÿ;¾¿“; ±˜‚œ¡?%ld‘ij)‹œ±•`µ»Î¦ëIñí:d»ËÆ&'Jª/<*â‚–Ãð´-b'TÂÉ10ª¯Yí ísh¨Ž<Ò˜On?­[iSo­—=º€Hh WžLáwU²§"ŒL –I׳·ØÛÝõtOSoKLˆOyƒå…¦_V™Mëôøhh©1üÚ‰qZCg~ð Ên?ì Ž˜À/`dŒR7t/al± )À#vrp0{EcR³[ æjÃç,m¢X¥ –q¼O^,ý6_β”ñSY˜îý8µó®”—÷;˜ô£!à.Ö /ÈåZIcúîfl¡ÇÎ&SZ^„½ÄæÚWLÒBKî9¬ðÐ;\8yLÎOÒä­ƒá_|6i0"æ²î"¡:;YÁ/|B–¬™!IcÌU!éuâ,KKŸ­,RSãp6xEqÇE{½4çC†cç:ÐuL­:ûg¥ Ýœ,¾@Mã2]|¡ü¥Í]ˆa˜ÁÏÆEž‚üM­–éúâkV<_kÉbµ‘Ö ¢Hp/»o­i{Ì´ê䙢Öj‚uà±ðºüES6ÖÖ¤.¢M¼"(A‰‡Ö2Ú ÁƒÇÚý€rV:‘ýiA/vÜÉÖß$€©¤Üà±*2­þ«ý¥–Œ7áÇ—â±èköc*UÅ+;麷7¼íÑçöÈ*ô¨ˆå_EʼsŽÓziF‘Âqmr«'¸Á”V³šù)2Ró=÷r‡2wëožŸ"G=Kòëü5çÐùÁ ZŠ ÌÙ+Ž–uÕºøQ„4ÕUGPÓ#ä¥'=¡|ÃFÄ(läà½: ƒÎ…GÞÃÛÙš»\.R6H §ÜbóÛÚðZ\µ¢ö[`× Õr7Å´rió2"/§× ƒîÔò×5ÅjG¶PJc²ŠþhXWÃo¦Ã·pž«¾íˆç²ÎñM‘t|(y`µz…ry©ÕÎlßÂÞ…Ï?ØûëJŒ[j3L¯¥:ˆçP™— 6G寣îJŸÊC×^>K3çzé}[tT:`6ãèBìÍeˆ““n= /9}j/3Ó€ïÅrÒÇÁÝjU{|îÅWT‹@Áµ”K<$)o¹¹}å dêßö¯A˜£ lU4¸úЇÕ=6Q¤¹U.ÌHôÀûìÅê¤ V¶Àœ^¢órÙß· ‹s÷'+õ®L÷/»<ÇtËͬ<(Ì®M_uº)TÜžtù…\ãðöÆrUùqs4²EvD79Å4·…•ÔiVnûe†J©®M¦ ÊÆÔFºé)œ{‘qq²¢Ú'ƒ<‚]]†íætÌä„!R+ÖÑ)HSI›I¾a¼©’d P±—wzÉȹ´“}þÔ±«ÇTò(‡dr|> ¨ÎUËW‚MÊ4q”1ÚѯþmþƒÕ{BÄ­Ì·ãEB½Ï®±×,ˆ‹¨Ì:‘©ôĈîÎÜ<¦Ú½úDåŽk×vIH‹¹AŽ”òì6hËy„<÷+Bõß—•{Î ±Uã]ýøâª9¾qTÃR–øFaÝR½ã3•ƒet€ÐÜÁ¨š

‹øßÌ2Èî­c‰_Ÿw-ÕÝiá8ãá"qVCâÞå[c'‹shÝ1±mŽé8–&âú„ºƒfÚõ5š¨í‰º+ªÂw1©#Çâù½Ñþ×ý³õ#ÅaÃQã 3f]W±p8ïnˆ“†w1<­”xË y>RñŒ>½$ÂÁÐD—o|‡¹´ŠÉMY#ì1R×Ôòtá ìß¼žÂÕíT$øÂ¥ê»K«¸`Ê2êÕǶõ£ûr¤Æk=‚Ÿh†!‰ßˆ¬lT,ü{*Çj­ÎŽ»R-é Cü«3þ”PéÒ4L¾3‘N¿ÛÑYQûE§/œo_bé³½.·ÊÅ«&¿É®$X S=¬¦ÖJÚÌþnJv» jõ½ÒÓ(n è÷‡¾.0K@.:Ž¿pñE²€H»–š`RÇÝ¢îzÀ‰ƒï.Ð6˜.9šoÔüÙÃaAåœm‡<ýä!Í[JŸ! fð•ý |±Aó2K _àK- 1§jøõ›Õ½‘ä'ž\-·> ž$9×¶7V:…bÉÜ€èQéå¦Å¿6^TÍ’Â1fȱU³¿kÓ'dÓúê´E‚ˆ§R'Æu¬ˆÃYò»˜€õ³éLȵ^)OâXsä­ÓWïõô褜àzh·ªˆ[Ù¨›>|%ýXI‚´A^æ]ž­ô÷ *ÿÞcÆå¸ïTõ;|?5ò©ëw›ÂKgÄßÜ®Î:Á”-rðßëh9.¨US2go@hd‚÷Éüüà(LR)‚oÔ4@|£€ÙUmxMo—# ¼¼Tt®2«¹OìZht+äÌÔÁ 0#ÕÊ—©–’a€¡%1ò…ž1ÆÌ©ÏÃ0è’ðö“¯—,3Ä}Øç¸ð÷ -ŠÈÆí©¦U‚ç:a$.:Išfó¹¶Šo°,¨‡èÏpQkï. ²Aê ùó=a-“eZöW ¯Õݾ?¦¼ó‡'öΫ[±Þ·b?6ZG$ïΘ+uˆ_mKP†ä†àޤƒî[b|EêcéûˆZÑÁÊ ¡¡ËíTXz¹Áú³ØBël4Ã)*ÉGâço©Þ1¿,·ÛxŒ†uÞI¸>¼Î©à¶xŸ-÷–•{80·Ù°™Úc4H#›×î•/ÇþAñÊHT Có¾íD”Ç[4S„"|%}ÀÆZÙåÇà™!NšåÏõöeD0‰Äü9<«Q(;G$E‘§H”L\E-ÙeШðb—¬ R@Ÿ¢JxIE7ó597X‹ÍVø1™z‘Úò@)0r¹z‡¦l vl þÉœ²±|Ÿ—«ÓàêPŽÛ„§û,ÈËÖžEè‘V‡Yû•;È—z„Ú›Õ‡¢Ûu+°šrç>î»Ñ§­ø V2Ò#&¼!Œ¥¯Ø]’;™ì”N¸¿š¨†Y`Í…åJl˯8r¾ýÁ³ëÔ•ýá_€Ü Þ¾Ù@óyÑÈF·ìR+l£.½¶…ûáWU;¦¼ÆtÈŽùlä6%í~ºfeš*´àsÂè{ýï ±‚1¤ÒÛÆšÒ“ÄO°zÄf&kV»¸æl¤¨Ší0}W•áBŠáîUë{npvñÛÊ¿áï"L›éN FSýë ×êSß?þεJ Ðáëp]:U µÿ’'Þ"ó-¾·CS—Daµs’ÇC¬ tŠÌ/-}¢MÇu;‚¬­×¡ï鉶 àG¶ž9؈‘’¸Câ‹©/ˆÞaoÒ¾š$aœ®¯{ìäD^漓ŒO`Hxê6+‹l†á еmú²øÚ}¿2.Ô!¶U3øb¥ž¼‡×¥«ßÔ+^H8² ·UÙ;7P¤ÿf½®ò«##œdm$›@8†¨h`²—òJ¬D©¬ïHNùf(š˜Mb¶ )jü¦Í:j#³ÝòGQâÐk÷»?zÏP}_oÜxµ"d†á‘åMh5t£‘Ìh#þ|ì  È?æ3euX(˜“÷À|Û¼—|ZCÔ¬°_Uyº³0#’±¤Ýá’¼Aà¾qVji¿Æ¡'WºI]ø“¯zƒ›Ûâ]40ê÷4zlpIðê$ß6ï&S&ûYû$WžÚŒ?•Ö—98yÓã$³Ýòƒž¿×ð»D‰±Í‘ÜÆP!{& ÆOë*]ç¤Z ûMCTÊ0ƒÑZˆÅÈYÐA™!uB–Sí¥ÅolÃá®(ˆ\GµNN„ZNB ›u“ Ò5°êѳ?0_Öç3‹í¯F‰]ŽŠpKݹªç\¯ tUVêsùPFÝèn@`ÈÍõéî&Éц[Òzd/*ºÖtŸ×“úª°k™kKžª 'p±òw”jÖ¨ãÁÞÑ(UVYk¼‚§’bË;C«©àôøÖ bOÝ_+DØÛऀ ðÖÑ>nœ/£Å ʳYGZÐã&Uˆ¡&Í?™µÂóù7…Õ®úÅ›ÖÅß»'!¡š×2NEìkrÝ9y³mV¯šK¬ Êô½²RÃ|ܳЙÞ-jHBc ÊÚâMŇý)˃tlª1—;»f—D4‰…2Ú–2l¸¤Éc—tú{qÇnë ”±1¿În¼T*>×CF"·:ºËn nŸwQÕ–Y4öãÙw×&«T«´rŽ-}Ëo7fö_H|øuŸÀ¸pä’GYÈâê4sØÜZUHsZÑn £„ÉHŸÄs0/Gïîî¥çŸ>•DϼJwÝRy&ýû³gÛ_Pö9_U…°Lûoƒ^ßFR’XXC ÷Û¾Ÿ 5Þ¡·I]­gïÏJ“7QÜëias5¨åmÑŸŒHIŽíUÚA¶Ý’X)dûž¸&¼í ¿nœÔ¦ÊQZ®Ô7]¸÷Ýjv’œ7ÔÅE¢ÔØÚû —î£mÀh`RŒÒ¹†ûŠø +½˜Zoƒ"ÒDÖ à<¤TýCúÌóÍSÍi†d„7k–û!׌øaP줤/hLQ¹ieÇtXû8ùÊÆaN¶LGKcPýJnè\&êm"­½ù¸Òšx¢}•RíÌŒZÔ:ÞºBqöZhº%.c Y+”HQÒ* Bâ_‹Lð cËNÆ-xñèíÕþ‚Ü~ß0½33÷Ùû FZÅôÊ×è’à ~tƒ5r‡ñž+‚ä²:>³D°2B†ç @ƱöNž>ñÀýBgi…r‘Q”wã%(Ó¨’YaeŠ”8…Š‘Ñr‡ôp#ÆH“o‡RÖ„6£¡ÍVY"½µÌ¢¤U }¥kÈF%•bi[òùR’[(½ÔQÙÕ<‹5#nlÌ Ýº;15&ÝiáR"ë·÷Lg2˜!çéz¢Mádû£+<©31î #¶TL<ìªz)(HW·äø¿ª2s^@‘TàxŸZOœ N±–Cºÿl¾ _²ï:þÍÜI›ºmG‡_oÆ’2±ý JÒTíÝî(M.7SQú§«ù%g§›×´ÔØx¸gº* ü, =ñë ¼J_f2©öÖw`Ï5î [ê%l îqŽmp*µ'ºÂ=ççYÐÔ ìUÔEõ7Y |Ž/:¿gÎ'uÏʼn:ýwjÈÜŒjÍãUk²›T5€¸#“®µbøps!áÁ.qªÒ‚š<ôH5T¹ (óÍ™MÞàZÈÓ;tM“[ëóÚ]Ñue»þç”ÎzŽ©˜Øb<Ž‘¨HзÃ^¢jÞƒ gÅDËa‚o•J7¡¸ë.¹WÈŒ'2ÎJäX ݈på¥5—z5>Œrøáâ™ÚH±×é¯2Ÿ†™è‡Õ´!„ÈgV3œ™Áîâ[w±ê/Õlìy¤=pØëåGFc\É¥í›ÜÇÅXÜ›R`Ôt´=ÓºE¹À˜Ru;%W‡Ï»Ú«}û"ÜÚùm¦íAMÇz¶ˆ}¦xoв´p¢yYLœöªÒ ‘`‘Θ¿• gŠÉ©z[‚¤FØ(ÿļS$³¶•ù^KGñ%~ÏiWàÍúÂΰ•ªtæ§4\ÿ¹w‡@Ä%òˆcÇê¡%‚è{³C£{µ·’Ìnµ9Ïsµlؽ÷†Oú¸±ôº¥—„^uðç¿]øå[nýíe 8XKt{3m@jpƶ¹³)o™$@ÿ³d‰[º—['Æ@æûš5‰‹vJË€à¹DT´öד&%TmßFzãœÆ§I·Ê5à Ù1>¨FPÌd¸°Vª=_ŒU‰YØ?î?Õ]&„ÝSMóH¯}&»û½Å…Ø+°HÓ,æXÛqêç‚\­?éô8QêÀKýÎ ÐÛä)¯&I€KiÇãǾk.ðœ£ä‡‚‡dØõû2ñ,õ Žgôü¡¶˜R0#–ŸHGCAT6a;|\môŠ Ø‰f‘¢giVÃ5³Ò|óGhý³ìqÞ#¶f¾îœÀ§ç8VåDñgö†¼†E°þEyï$û¬ê9ÚxyÁæÚ«ŸÊ, WE䟘¶WWÔÎ×â@|„õ;I#o‘ à²gj‰Œ§ðÍ-HéX'(½…þZÞ¤¢WTjâ݇,ʪûåülŸÁ2gÏç 'ÊÙ`Œ;ŸHûå™Ï`[¶bÆ+ñû£0£ëŒô™V=M”±f¹‚;÷”LQK:Ê8Ôü~èF¯³hñ Ü‹‡†D¸‘._ãsPšË¶ÑÙ/†hýõùóí0#3®îG­Ä:Q2jþbž-îk–»}œZu·5~V©°WÕÏ}徬 â/Æuk*ngƒÓ.A„í³o²q{Òçãdã» ì)©Üøñ„s^<›ë»áøcMÎ*ú+|ï½V̶’Ä›,|aºOL稽VT~vˆR7æ›–FcMLsXù D»/ÿ<0:Hbmz5C« ©ûzÞâ‹ ÿJbYµße:jªíEñíÅ+†‹Øh/»”ö˜ž}„7ò3íx24ŒE¡ášç£|L¦k~tP9ö-UÆ Êõô> ÷‰߯ZèÄ6‹‡‘ÁiŽÆøÊɬLŠRW<Ѹy|¼f_07•t6UÛx¡ï€LˆoMÒ—Lþ«?¼UI'‚س†NrÆyzòØ:X’ DÍoÔò©=ýê߬¿î„ùÿ2Üâè÷‚Î+õ0TÃ5F¤©dméKA–½ëÙN¸eô™H8¾WóÜuE_¦¡E¨ÖØFùÅ ùg¬ñAÙ ÃüÚ©À-Ae•tÞ!²vÁy¸º°nH{H‡V–B8<4=_¹Ã@1%0~XžýÝDàW»šØ°&éó䧜Ҧl*ò¯ó·mV|©ˆÅwÆiihÝê‹tx™ €=}aÙõ^÷#š£¾á=½ËœÁ9[C¶uŸ· RìÂ$rÙÓDZó:lÄW¨ NˆÞ‹äìӛ̅Ï6ÞÔØ žAÈÅùâÎ26Ó›9€Ç±!‰Ý™ ’º9þYŠ›öi"ñM€”𥗟[dK?=8¦PÖ§ÄùÌ5b–DŠ™¾JªÒ^¦/Šø’mËJpdâù‘Å5û­þV¥"çy Ôï‹)Ì¥Tª© Tø¹`­ž¨œ Ë´Ë@6RcsõDbp¢ºIç{HröX¶BÙTJ²= ^¤CH€Ðn…¨a(?LŒÜ©Ay“m;?˜ÀFÚqø^Í—Õëê‡; Q9iL.C™ò¤?•Ê{aHn‹c$¨Ñ:ñÏFñ_üÈêIë‰k±LùlV«Fœ«(Oj¶;`ÕJ¹ kÑ×(ýšƒ|¯óÇbCÿ ͰÒÉknZJÖ%‹$W§‡Ÿ“TïA»D˜ÃÜc‘\¦ZÔí®¢Æ›Vç¾Æ¯OW·^ü§ù$f‰4Ö7êSv”C7Ù¬ØþɈFÃö®¤ýƒL6ïÙd!ǘ׷¦µÍ‘3õ¾ÆÉÙ#è°ø:ñ_m£>økÛƒ†1¡Ú°ä‘pY»%ö/¸u kÐÙ”¦Ý¢'Ù)¥MØl‡Á;‚–˜Œéʼn.Â~lõnþå(rΧ´rÑQ¦Q‡Ñr'4Ê,P¾À 2·¸lû¨»iœ^_cˆ»â÷ÃýÌ ûeO“^>ÐüXMIÀ¦@Ä:O›ÝçP‡|´ ÆÕù¢~åMîOÀ…l:ž”â…ÚÏ”Ø3Mÿ^b{jÍ”:Èͨ™4ºz|¼ º|èm =¹σYX¾…ï‘£ ^@gèJÝxÒZ6¢›L)‰¾¼-µå;›ÝúÂ3wg)À?;x­çfw» Ñ¿é”x–èârK´«óqŸ`úËç¸$°ÏOexáSq"´0b«‘Á¹È¤#) öƒq³öYÕÈ!?‚|¨jц/F/³l7Ù“·jÊ$f†|µã0cwæÍdØÀ âKaCŒ´7x} 1ÿ ˜Ó?-Ë[ ]u¾€;ú)õ‡3"ë6…ˆ®jm—Qás¢ýN¼¢äö•=ôc0ÚÂïÇ7Ø9¼dK¤6¦Y™5D§6Ö![×+ðO­åò'ò< ±±oYxð aWE,à÷fJ"ðlS°,ùòHóò%‰ æeûŽ6œÅw7‹PD¥í­[ÿ¬²½@a#ÇïüÉNÿJ@JèÚî®Jsn›~MÚ*tF™"úYâä˜y2ø M€Å8‡î@fa@õUý§;…=«’¯Ma«ãçñY^U«§%M+ž–/1?ŒÌùÙS»µçzè"¢&¿f%ì€_ÃÃÔîâ=º|à;÷ó1[å½Jðïºþ™ÈóÝ‹¸ ¸´Õ‚ s~_Ùòä¥ÝóÌÇ$¸m³\OæÖ«»ã 6‹H¯ô$Óº6g‡"ñkxMMø“‡/2-£¿_[+Sé¼AIyÝù ºZîá´¾Ò½Õºˆ:èï(‹â/†ü9éº3˜ Ô&³©-xLž#akLžõ{æâÂ<ç }>0ɦ+&Æ´ºô;ä$n`£±±<_à]\u¶š²1G6ì?Ý%œ5]œ5øüA—“.þz±BÑÕB&0¸0Í,u• õ>ÞwërÝ9k”—>´˜¼³žñ‰b6&1ts%ºNuévlFŠz5˜˜zWrÓ#YÉA¼G¤/O>uz÷§ýâܤë‘@üËœZ ·º¹[™ÉÌ«ÚDøg­-’s*è"a»O‹(ýpÅG‰K@sZ¦ï´×ÉÖc¦É/ÍUCtµÇíÕTŒ­ñZN_¾ rˆ‡m'± ñnºî=SÓ˪ß$}Š)tÇôg$@úR*À6GÍTlŸgªzአ6ÚTa5g|Áµ/Þ6 ‘p@ÜäŠml6páæíÓÄÿ3AÍáKß#é)Hrh˜¼/ý¶ºÊµ½pVé$Žx*©_T]ÆÕÀ\A^€k#%âÞGõÚ'G=ϧCv¾;¯ðCžñÎÚ\vòš¶]úïM•YŒÌ扻h~‘] °j˜;¨9]§=3T±dö#”ïäf™>ºƒ?ªûb w 3­ÖÈÍ‘Kƒì¥[ƒCV$°ãË4£§­%¼L·Õ”¢2þ,XS.ÑõG_ZNÛñ‰Ø&[†:j/¼º43[{úý– Å¿Êqs¥ý£)ÛoE’˜3¿ÅêÄ Ëç?òÚ†<*kªy«½¸xÑ>_D6Œ˜(O†ëâ†-zÌÏî|Ci,öŽ<DòÝïÓµâ¢NÑÞ]%¬Qü1_Á ÷€aÍ™¸Ïå‘ýÙnoI‹”Ÿÿ:þ‚›ÄAÞæó%~ÀˆÈ †®aÞ+UtüãÚæ¦T?+ÑÞ­ ÿË 7EŽŸÒˆZ\sß ×Ç&˜v‰ÒßBä1ó‹uÌ.ni©0G»CÕÝhIà±âA‡Ø§4Ÿ' ¦+«E^W¿‡¡5úÅ*Z=#:±V!x©£e€Ó¾ƒ8˜5¤K'ÿ“^¹?ø-ÙA¶˜9Á«"Šx“û(ù<7¢Æ“êv ÄÊñ龫J¯oÃÞZ?HQ⪛€ÆyaØDûTßÊàtZ‰ëá,ÚBm[u¹LäæèÀ=âv½ qÍ6¨lð§e~ƒ@DÅàCôYÙL~²gÓ:WpÍÁD®£àŽ›RªÔÏéã·£é¯t‘E'UÞžEUê°ämÆ~Qªy‚˜ë2ë~”&Oyû*ºoÛ™Ây¸^Ô\uÁ†õeáöyï˯õô®úIpËâg^]J¥Æã™{VZ»2èÀ÷‹•lyW¸¾%ìíKÌqa»¯’™Ä°Sŵ½9ßN GpW©¡ËÙIÀG¢½f_ß¿öŽ­GnÍfà£ê+$F°±¿ËšK›«{ÎLß*üLCÝêa"ÕãÌ]ô*HmÛ,Ü;qƒ¨ ¬„ÉmÐ{˜_ꔌ‡ +‰"=‹pÜçê®É±åSöºÉ‚E‰Ë5)Æb*—ÕÕW‚Ê!ï™3°) ¶òo_ÜFÛx¿x,á`Ю—ñ}_s ¼ë.}L |!‡vá(ίs“h‘ñ³kÙÕDÄ£xÄ)üaÑ_]pVÙ·ï²2ÕÕæzJfí¾jÉgøiù*©¹ãvø…ÍÑNÝ`…ÚµéØ&ªdAËb:¸©* ºµ×:ž%nï:Žˆcü®ò:ä_ .FD*ѳùd wÖKKà´7qôÌPb˹*bul~Ç爂o8êÉ’õës!ÏäÐÀ BX%÷(tõþΊé2Ï, Ø=E¡¡£e~AôsžÅüu⬉b¸»Ÿ‹•o‰¦7òA·X_<5Éù1<çg=æÃøòD¥ã»1ª )ù¨±‚¹¿µÚŒ”‚µióÛC$ó7v0=ú¸ƒ„ú•Ï=÷£Ú—Í6V¤ˆªú a„jD’ذã. hcßZo’ý.j:$†¸ªLyâåùWg1n'`#?K˜±âñÇK'SÆ£}Ê­ã? ¡ÇËZ>«çÅ;¢Ëp6‰á›gr¡ö¦€á½¥q[ Ýö,änt[3úñùBOÈ "SÆÍBknD{¤œË’ŸÁW‚»ÐO˜9;[LhÇõìbÜ\Îõ2™;úë0_+ÐãÐ>ìAsHšï˜t3Ç w>Iþn8brì9ZDu©¤Ü¶è0o«›ÑQ<ÿ>üEÝ s^,"»'²ÃËõÆYdÂ:2÷Åí-|ï~/)­7 È|þ,t¡a‹±aÒéºn™¯5äbjгMÃRéýi‰XL¿/y¼ ¦{½útñGúNÅâ Xô§MÔâP8ZqjUQ#~1Û>¿„nï°‰>÷‰}סF™!è¶-¯[5tüÓø[ð§ ¤)³˜%xñ_›µ¨6×wʽQç[g€„ÞýòïÚycØì"ƒ_EÖ*É¥Í1Qd-‘:4†me |àÜÀêÔûWC÷†eSel6P*² Ž;£êá3Õ9«(¼~óȼŠÐœW5åh?¦'­SCÌ®…Þé}GyÎúnCT Ñ„ËZ sF0áGo”A/Ëû3‘|©ÇÎß®ã*Xm¸â—!tCV¢}*} L!kŠu&án©ócÓÒrOߣšL®$¶Ðôó>)5]@{÷®#¼8"ûÛO‚à6!—0›¼z%ã¤ÎÊ5jÿÄ]n6?â³—é§k@›PH~n’9ÚDS¦>¼­«ý¼©ýÖ0MFP ª –>Û;°’(–•Q…€, ¥amë^ý @ŸÓ­»to,Ü÷ç>ņ¤ÙNè¥×\MùWÏ%ô3q%ç¸ÎfQájñ„{Ø ¢² l8pn”rB$Ä›£kTþUIœT-óîψÄÄÖdˆ@Hå„GŶp"¦’q‡Ú‰–³ÔŒ6¯Bb_CNŽ…vPpº"ÝŽÒ0 F^Ç}ø<ûÉUËŠÑ=ŠÜ(”M@Ã|»ÿUS–@ÊΨ¢Ž»i.á½²¬g“=…ð‚¹ºBF^»0$:ˆ;K›­Nýÿy;. endstream endobj 6808 0 obj << /Length1 1144 /Length2 3325 /Length3 0 /Length 4068 /Filter /FlateDecode >> stream xÚuSy<”['74„kKˆÇ.Âûš-»’e¨31ŒfF¶$K„,I¸ÊV*²/¹ö$×’}Q¶PYRÙåõÞÛ{»÷ý<<ç|¿¿óý-ç{Ä„,­et1DÐH ÈÈËBÕ8ÎÓŇl"˜Ëœ±>TBAÄÄÎá(xð4•Ð'( ŽH0@Q¨ü97ÀE`P@ªUUW’§®¡ Iê€% çI ,A HÂãTÊ€ˆöñ k//<ÄœÉD$«®ÔÊþ™Ð'zù“pX7 isÖô©ˆ¼ššàâÿ'€d–ˆS—@<Ñë UÂ$€$jјƒXKWÔ ŽrÐ. éF¡x©ËÉy¹¢@*&Kv•%€¹“ÔBÏ0úDÏ2ä`f8ˆ¦6å/÷óÜ<D_Bà?`Wó­%Œ—œ çíšü7˜ A~`X(AaP5( ½Ðí&wòœ¿ø”?€QLP Ñ pEáÉ`Τþ dÔ% |À Àÿ%þ¾ƒÈËš¸€Xê5üP§Â ë÷½ŠBÂùŽPY(T€|­.P/C$àý„ÃQž ·8cih$ýsïEéé©’2ò*Š€ LU‰êª¢š’ÂÏŠ–(Ü+‚þ8lBp%jß §NìÏâ/$2Õ…€ä7Þþ®'Rphüa’óP%(ÕÔŸü¿šçoü¿Zèç†>xü·þ%¿7P;'æÀAïxéá(OÞÿ_üh~÷ùÿÑ1¡ ð8´.‹ÿkL8²!ÎÄXâ(h·ïÆøŽÛ0ß^hI$ãÞ, #¯$ÿwÎ ‡ö €d2Õ}ß(€ù)嚈Á°€5…ê? óp@£}H$êx¾]õìŸ{Wµ@ôÑÑa"Z#ܽ,¼n³D—ÏWf®[á¹²Íú¾ "$O;#{¨ Îã‘ǧ˜ýEõvºe‡›v‘#mDß™X_5½zYvŽk쇌£x?È–kÂÕ™W%{?BŸóÞ¼Á“’¹¨ïßb¼"”¿ŽÓÖïb·Ž rŸØt˜_ðFÐó äß/<‚X>©Æ½ºŒ0Æ_±R§lo0€º‡F¦0™>­ìÛ’0u`ªü°ÁQXÏî<4ܬwT)x0ÂB)[uáC橨7t=…m»Õ›é4Ð6žz%1ÿI®“éë›v©Afzž[7OL0³ððô„(™{jŒ¢ùÒ†î5×÷I¶3«¾”Ñ%8¿w)öŽž ÈËÈáñ1g0z3=¾YÕ ë©Itý„½p#¼•³®ªy+ÍvØóØDÿ…Ž·—ô›̦f:iJÏ ÐXñ‹o…^Ò"V¾»lbíôìþoÊFñ5Šîjº9š+Î¸à†¢„ôDFÁw'æ{¬W.®]?|Ê2½9p„wf·PYhžS7)™½ol4' W˜ã¢Æõd-bü«ñ.>òóÖ[+õª!eëך „uG~QŸç¹âËKçI5Û·Îæ†‹c¤…‡ºø'õ´öë ×β¦á$ì0Q±9tãYÆF‹CÓ1›;Q֓ןŸ{44®fݸNÇ|ON“S|‹Gqþk‘vS°2>ß.I,þz3SØU>­%©¨˜ÖÓ¥i\f_.±—(8›~ÈuIÕ‚wÂél%J÷^7ø”oxjGzš`n¶!è<’®3–=c8áöXZ|Ǽ邵Ÿ~¢'ùÚoœ7«9_Åj±D¼go“+ba‰cðw¸ÂV©ËëžU‘Û»w¹±„òv^·—1j:Jûó<¬K×§Q©®‡U)>ËqªFøýÚ±aNùßë¨:­ÊÌàè+[ÃUJç*¯.¤ó¨ð P[Nt·ZÁWÿ®5#›ù$e>|á+üU‰Rÿ/!îÆ$õ£³ÕBûµKÒØžxÎÂ7yþ›†þ¡áŒŽf ?ÎK×åÓ§õ\æ¾Ù“RE¢ñU^+}Ó3ìñv¶êQ¢õZM @FÃj]g¯ã£dX8²”ébE'§ˆSÜXý¹€÷…£~ÏÛ­òÃnÌÓËiH²Ç] Wo±³˜úðYö×m7 ‰§.5š¢×Ýé¹·¬¼;,ÕïZ2ëG#×h!›žÜ½aš8&ÿö”êš—1CÏ'w4éÇ\×|k~ñÚÛë¿÷Hd¸3D²T¡nSxfã¤úèóBmòÓ„'ÂËÜN.œ¸ü¢,"fìæ}ûÔúU¼§Æ´±{×DúVM¢þcù‘Wš…BVΦÓeh$ZòIï¼/wÐgô®–Œ?VãNÊ璘-b€É/=|0ûJ¤òñ‰¦£¨øé q޾‡y6­óM¶fU‡±¬S/ÓùNTÙÁÞßiÑÂR4kò212EþÄ:å¬àÚ_mJ³÷¿ôšf~=$‰6ÏÑB°-'™öŽƒw´A|à°Jä8iT7R´Ç¹cc–HÓœ›!>ù)°º*Laµ3ÉÏŸøé.í"žÀ1=†jS¿1ý^m~Ï(¡ Qg°îh% ÓÚÜ¢«ÛµW¤Žg1}YÄö¹i¹ôÁ§a‹Ë7ÌY`Ó­šUÛ!ù\G”“Î, 9'}c{­Q¹BbM³wŠ•5¢R%¼¹­ØøLÒZ±ÃÐͱùEŽJ¯)‹H•Þíê#+cG6nOh1Vn©gè¼²øt:•³$é~&¤ÍÚ‰¡F¾•ÿAŸ}¶É–¼°Ð!Ø£m«Á7X(aLW#Ëíûë<-Ë|-S´Y¡&†´ºù¥BتŽJ½UºúʰÍâ!3:–²j§ÛôUª¯?DŽÛIéU|¾;ø¶Ö“Çh£Í«1¾Ã ÜÖ->Ý7”?x45†6~P°u­6vî³4¥Ñ_•–ã–g›Çxlq{k$4º„&¯âÁIâÑ™SYCLÇÄz"ü†ãê+°áÈ<‘ó·¯UM}U¿\Özí5û«Â©Ñ¨Þ‰‰¶çˆ„ëmû´ÎZUˆb¥®è#b(ž’ˆ {Ûj[ë+'BZ&šô‚õ>n[ïÓ¦#ñsL¥:K/Žž‹5§˜'¯_õLåÞÏòÇM0¿Ã'ã¢hBÙ ãi¢i?4Êú+LÝKvˆòÂ6!sµ³Fe6R¿ZqâÆ/»wÜút.˜¥½w[éoé^‹~1Å®û&µdËøë†ðƒ…yxÛ­k¢ó¢kâ|›ë êÝó<µ§I@eÑ'Ø>CÞ.«Wg#Z¾’UØblnÎ^®?2œt®é‹’½ËÏA=Soá—Œ¶R”ûÌ ½ÀÙÙÅ(y,mQ¯G­Éú‹OgzFy­ñ”Z½Ë¤©Pšò} åb´ÿï¸éŒ³ÇÚw¬aöî~úèbè\š÷Ì_Cá»uòàs1D1YcIæ΋÷¹îaÚ°ºP¡Äñžã劬sIÙJ-…ŠI­Jlž0,åä)wn‡¬ ´Ð™8Äֶ˸1ÃY V+•ñ½ÖåÚ¥@²ÌFØŸG$ °QøU§xµBº÷ÛÏ&ÓÒîù Âsðˆq©k i +ÌW&$&6oýÊù80íºÆ»~7>½,ÆE–Þ 7»ÇƒX< éƒY•àö¶tÕù±– ǃ™œîd§~Î3œA&¹™ò±žK,‹${(4¦hÜ·E(,>Ð8Ì{ñš÷å‹Ä½Ùva„͸(ÒÁzþ©a±$)r+ð˜J’Mc:zôYæ.p‡0ø²ˆuîô Jž{t”йYãDð º9pg×ñÊí;oÖômó$«•éëUNç£ûû/"s6çÂŽ›®vùEF‘‹-£ZØTœx0¹ÜAžR)+î{“Œ¬áÃKrï·Êú%µ;¼Óž5ň:ׇˆ\uò§a\jþœ©³éœ?h—,çíC>“ß´È ½$F¹^›?÷€Î@f TP8¡8 ɯï@«»çºÃÀâá¸Nâ’;+—;¾Öy£Š(Eês°ÑqYÂLž¡òa/Eà’FQåa¿éòíçÒ²ÃjËeøD•Øwxjì•i”Þö¾W1Àòõu’À¬V½EA”‘Çœ^{ÝûìÏÌ*#Ï0غ©OozWˆûÙ§ E*”ó‚Iâ•ð}.¦cC´G ; ²j1Y}p‘í½¶C’%…•Å^o¡w$-(±o6`–âVœ¶Xø>_AçÝ5ÕˆJˆÙ>4¯¼ÖPÏPË×ChY…5zôÒ+×uþ²ä¿ ÑßÂÂB?†ÿ)• &/sꃚÍ7ê<ÇWY)öåÈ¥ÑÚ¯"a¤OØ«ì™þÉs1¥DÜ¥33åE AÈÉׂ4ÞÏb²"§[Mõ4 Mfo@’} 3?ôµ¹E»íNиkCç§.ìZ…8· †Iç/uæˆ"˜JE5ëww Tš‹í‚‡Û±MׯÝÞ‹ìXÄ‚¾QéÑ'Œï\ïÞh°l¹ïâ÷¬Ü²´Ò>Ü®Q¶–„6Mjä ð…î)z f°Ý…òYÈé;q’4 ’ª:Ý.&¹¶E’ßIEÞƒêí45¹ÑæõVFÄšNð˜íŽdéˆ{-ê)0HÆØ4'}y« äûð·êžó…WH»Žb™ÃÍ™·8¤0Ówm+ùŒºäÁ$‚öT$Ëut843±$X‚AkmÒý&îúÕÈC‹¬á\B‰·²Û!:Ek\ó» Ri{ÕËîëÕ­ß…‚¡nݘQUR ÷V­&º„Nâ&LÑm¦7-}öB³>Ò²Ð^ÄäÕÞ[¡ÓâÚY)w$jÝêt¿èÌÆAê5Þ¯EÖwßðßPÒåÌÀÌ]Ù[¢iv »-B—8éø´œÍdIÒob:È¡2›?ËŠû°Éí"au8ÿ¦QÜÇž«éO> stream xÚ­¸ctfíÖ&ÛvžØfUlÛæ“ä‰mÛ¶m›§b£b«âŠªÂSïÞÝýõاϟ>ß5ƺ'¯9¯yϱƢ"SVc1w0J:Ø»2±1³~(‚ìLÝ\Tì¾È3)ÍA€¿r.**1g ‰+ÈÁ^ÜÄø 4ˆÍìì¶/_¾ PĽœA–V®Z U-:Æÿ’üc0õúŸš¿ž. K{õßw ­ƒ£ÐÞõoˆÿkG5 àjX€l1%eE)­”¢@ ht6±(»™Ú‚Ìò 3 ½ `áà °ý÷`æ`oú§4濱D\&G è¯ÐÓ èøŠàt¶¹¸ü}€\–Î&ö®{àêÙ›Ùº™ÿà¯ÜÂá_€þZØýÕý ¦ìàâêbæ rtüͪ,.ùoœ®V&®ÿävýU,þZš;˜¹ýSÒ¿tÃüÕºš€ì]®@O×r™æ G[¯¿¹ÿstý †› ÈÞò¿0œ–&Îæ¶@—¿aþÆþ§;ÿU'à«ÞÄÑÑÖë_Þÿ²ú_@®.@[ f6ö¿9Í\ÿæ¶Ù#°ü3+2ö6ÖËÍÝÿ§Îèü¯Ñþ33tA˜˜;ØÛzÌ,Š®ShÿïXfþï#ù¿âÿ‚ÿ[èýÿGîrô¿]âÿ¿÷ù?CKºÙÚ*šØý€ïÀß%cbø»gò€›ÝÿËÅÄdëõÿåôŸÖZÀ£u°5ÿOŒ«Éß–ˆØ[þ¥…•™õßB‹$Èh® r5³X˜Øþí׿äöæ@g[=ð/¯ÿj)€‰•õ?têV 3ûàú· hoþŸðÿRõ/ð,²2Jb ÿ‡åú/Cå¿CàªîåøÛÿ(EÁÁüþ #*êà ðabãæ0qp²ý½{}áfõû?¤üW ¶ÿ:+˜¸:ƒ<zëfeûWõÿãù¯“Á„‘°7s0ÿglÔ\MìÍÿNÚÿü£6ssvþKð¿.ÿߪÿçù_3zÍÖWÌøB­3s²\q ƦÅõ†Ø ÇÂ+ZÔK‹ëú2#÷¾Ô¿5„1·Î~ýèòZùéø~$K<>€cKÓŸ¼."ò£ ,Fߦîáa8f1¬@κЊõ¹Y–ß…ÒåfÕ<ÞŸVQ5,ƒ!žíáp†»y¦ ¤p/Ä¢|rDñ7ËhNÀîEkÃh,ùyAröüD32ñ}l´ÿzðˆ!?žŠÏ×?í'Yª«—±óC‹Ùô‹;#˜Æ„›£®ìºs’y[w¶‚EÝ6}@Ë0C6óþJCýÓ½Bšf°A¬¨ÝS¹¸Š[ÃÙb“”TÇÈÈ 1XKb6Yô‹FâÀs\›+TÄÄÉÂ<+K#´,Gmc'm”åfÔ9)T¥œ'gâ„·;WÚ\iP“©?—â› iöq °ïaðü«hø—+(lï·A㨦0eÚÕüpw¤q­=knx34™ù_å ¿lxÓÞ~Ï„,Ä€~àKJ¦›ÐޝÛ3ýŠ;^öD^ò¶Sð•©~þlÃÞ w´±Š•u¼“®ý`YË´ý)@ø¹‚Ï<õœh¹lAžáŠôCU XÃlôÈú*!@\퀬â8EÿÅr“  Ç ‡‘bè$×3ÿ¥mwx'|D]ò=#³ð*#óœd™y[ª™ÞõUS ´Š‘Vxº©ìä&ÓG4ªíJXá4¿¸Óªä Gœ}ybÃÜË'ÜéË LõÐZkè†Ùן¥~ÅL¤½0+“Ä ¼¨*ì’æ0¼‚7ÜNÌ´ÿ\0öêi áK´^z’4'à‹c®Ñ”12Ö_tÒH{„yy Ùdæ-†uMÌsùÙc?dß?-¸¾löºûfð¡ÿÔæ››Ø°kÁ#…8µWÃ"^:*Ôœs~cEfôaÑ?Îâ˜Q;i—]þÐò¨Òv·}ÍΤFð<ÙMíðÊiVçK¸J¶a cÚ‚æÁàñE«pw»Û5)ÿÇp˜I"1qúU%‡G²5¡€}£óó¥pg¿¨Ú˹K¾cEÀ7²G±/^FO`jp{ðàöÛ¹Á:ÒÕazïz/Í«)Cxý†8»¥æ~ILÆ÷³üš¬ŸV®²³ÇˆU‚°?o=¡¿ÅœcBwûø±ÆMýæœS%jÞÝÛ¨0 ×£<G¢WTu׋¿ƒý>åu  çeÅù%/×€ZÅ©P€®+pIt7ðDX”rWïJk{!ͯ‚þI^=8×e//ä àØ§ýái:”$ʰ0kÔ¥eÅ1³á)ï}ýè3àà0B½û½LúLšzm³6H:”µ#ŒLl5•`Ç·xcůôí¯M/T¹ôÓœŒÕáé‰`{xÍÕA«%ýÆfä0D5Ö±äŽZ«Çr%¶ 9¾)ø+â»%ܪ˜G~Ú±†k­2 ?Ò¿Z—µ%ÕçlB|<ÚV1­F ¶06À¶XMß_?@µñ×~ÝJžiU_s[Ü(®š•ÀQÁ³”AÜi¥6Ù}…%N)®)×ÚàçË`×`!übøä}@¸ðÄà­MŠw €ŸÞiCîÍÓ)Óiî뉯FºµE$T r;¦`²/¦†ã¹svs€©£5½˜X;óvÃ1FYzû Ž•™_W6*HRÚšŒ§IúÅ/ÅŽÉ@RvLGV7Î`“i‘ÿø7©‡ÑA›ð^ŽF<+¤‡»*qÕ‹ÈÃ÷ÇwÃ[ÎÛÂzß‹f2ׯ¡m’¯®<¾òø®¢˜ªŸú ¾ð^µkB¹Õ{ˆ‚¯°'žo]樓$Úzs”b‡ †Úò;HMÙ¤y:KAäÆzÀGÓ¯™j†–Nù)¥”Œ‹É£È•„6mŠñéIêú½NÙ_ó€RŸr•V/šç;>]#„.4=™ùýÕÙ\°&Á.úçÂgd(~‘ôè¹ò( –Æ«@ÓŒ¡câkµv’aZNÌéðSµI Žã÷¢î§¯A<|‚~w¸:å²8¢_D¿‡§È~KÿlïsªÃÒ>d"íËôÊÒì0f`ÑêA˜Ö`_(Èñ"ç²zÊ‘,L~˜œÇ£dm.Ùpí.οt,öqÉ5nD»*KÜ£ÙKAðlqÃŽÛù×ð>Eâ¨Y:vQ%³94óH\Ûï…âÛnÖ'à¤ÚîZÐŒ”ŒaæiŸ¯æ]9/Ñ0BnÛ°fõ_ø§…ö7»Ž,’MÖÕ´çV7¨!lš†’¥úÒ:GjŸ©}*,IO;¾>¤,ÈXI_ûíç°.jÁM6 Ro{u Íh/Š£ªutŠtÇ%©¢íå茛%ƒ|’SÑÒÀu7ÛÄ)ZDÖ½³çü¤ðzjµoªžÇùËò®ƒ öÛØšv‹ôôØX_&ìp9¯˜g‰¾ÄîúbôDä{ºxŸUsK§vö`* –“uX(³UÅ©0þ±ï¦Ñ•©_µŽW9œfb‡î;ÿó+_z A‘«j/«¾Ð46,?‹ßÛέ÷ KU'=† Ý1¨eð²ô3tm k¯{Š÷¢Ù­ôz'3—Ñ.t”uѨ#WXN;¼>\Ü”ôŒ`xrÞ2^¶ùºÞ(yöðfV›3êÍ9n€q‹j´º*³h¡¨ÐÇ^V8úêyòö=¥;ì:EáW1RšÜmѯŸ ôr¿ чWû–‰·IÆ^”38µà™K/#¨ö‡ Ä¥êΫ˜„…é€&š Ûƒgô£(k ö¬8›…6¬u`óÒÂòfÒº(ß¶ÄÛ^¸¸t{‹›á툟ÍG%ÑoÔ†§«ÅB5}#Æ!wú•¬º¨˜/Ë&yäÌǘåž;¬p‚ ×vG°Á}™µU mºC)¦Ð±UYñq.qEÉ¥ 3øê1lJÂß/Tȼƒ‡Lß1KG ‘ó?.&|“«u íúm™Q[WW…þ]3ÁuÙ¿ŠA#'¿ÀJx[rjµÛV¦T9ŽËa·@ïÑÕD—*d4s4Ðð=Çn¯-UÕ f);Ò|0Á B!å•vF´Æg½LñÄØ·Hózœ¦¥ÍŒ 3íÙÒ'ÚÀ(˜ÓŽÙZ^ ñúÁWS²UÕH'Oþ€k¹½kˆ3´?~>Fm³_Í$}egvÃÛ‘^\¼V©òak-ÑlÅÉÄDç–R<¡ð–}ŒQïs€@ rëݽ6ÃÜ7ÉDøœk³1zBÊÃÞ‡oö~Ý%‹¹ü^ZØX?gÃâ'ÖuÙ#§dhèú1@.1¤vй_Ý·0!DŠîþ'uXÀ˜IVÎ*â`" ¢¼a0` ¤VR•qäFµ!ë^1´è¡œZ²Žk]Xnx˜€ÌqÕ¬”©®!eE¥_ä.dºÿª¦†þa×*àÞ\šÈ½ I-84jg¤ØkÂc.q5ß E¡|®ÿÍZpp¶ŸmÀ)”Ö²ÙÍ“ø•Л#eŸ,Ž#‘œvAõÖDϦóûîj %¸‡Æ!Æ…‹2Ãz݆ð=P0z: ¤Hëe·ãoï÷Bs $ZŸàЦ"<×jâíXßËú–lXŽ0X¸?K<¨œ7û¸ÂúÁ²!¥Ô —Þfiúü>wPT“¯ê>Õ—RX·' 48ýÒ”>$C²z_^Þp5oˆ8)ÑSmœ1СŸ±Y¯s bÊ÷¿ƒ#®æìf ü\ϧ8{nýšYÏ©_ ùUÈͨ' [Ô¦•}Ê­KÈxæ»\ñ:äÖ½]”B»€’P¢š¾Œ‚Ãg1fäkÙ5/ðzÛ&‹6KlO fÏÜÊlòÆDÍ zTXßšý¼òýÎßIJui Wºtšñ;†®k¢î·4VÚé [”È8؆¯wLžÁ¢U3»8hÍÛ s:óºb!÷ßëlÝE»É+ ìò¯íp3Žp³¶5‰Ò¦>A3ÃH<ë¤C§."áÞ’n㯴®†×Ü‹ zïÃÜå”H–’‰å3vjòJYèêYÓžv§]ùà+"ÔÆ¦ªôþŽ™ðÚ_¬p!ò¤EbfÕ„R[ç»Ì#¶|ÿ]|‘Ë÷²'ý«’ÞK®yn¤'ánDñMPj˜Qu=×îYg¤iÑÖ¾>¾÷‡Š)f÷޾Ú\ãÝ®œä<£ŠH—Åïq®‹‡X葦 -Í©1|ü5æÁÙlULï„@ò݈´Ÿ Á½×2”÷ͺ>ɼ3ú¦ÅÆûø9ÃN…%AuA¬ýãgë«tR}}g®¹÷/{œÎW£ÜM0®\ÉàLx2óF}µ÷ Øâ*ÝûUаç¤ÞtKŸ…ѦW¤¬JÁ_ðø2T©­Óc8ù¾‰ø;øË!B.£]]YjrUǫíâÎæ+æD¤Ó%s ^qº–¥€èónÈ?zñ«.SZ¸ w¥bã¯AsUê9DA‘´îM.é {݆FÙ¬Š*NF8}£Åï<@h¢p ß~‹’~ÎÈn”iªÏ’v°+β£â‡QZNù|ç›…Ûd±;­2FÞð„o­X;²|žn$}žÊt¢c‡S­¥‰4ŽA}TÀ˜ãV—s<[—þS¬ý¾¸–¾ˆ=#te¨:³pL¹X*oD_€p þ`[¼­”ê¨n©†ìÐìîiµ]|†òú ÔKog~dÀb –a$U…wÐØÁ›àì9‡8q;d¤t—ž×Wôj„éÚñJa­?Ô ]Ý?Ùû};ñ²W‘mÄrd!Ìò íh,Àl#±”ž°~œæk/Þ›XÕÆ×—Í‘žÎF×r×ß)Ã/ñËCœL4RšxéÁ+Kgv&¼1 “ÎZë…¾ÿ¾œÐgÜa),’Ÿ.ůj%Iš]1€»“5|µ~YÙ©¿YËQ÷ZT,Û–;RÃ]ïóEJ‹w”ay8™LǞDŽšñ,ë>ì·Ï¥1yÞKœæ%Vã3=*¤Eµ@ú[ ˜-mú‹·ù "€AÌ‘(Çѱ|,„ƤGu!—qLóçw&Í0öfvuDÉ_Mß×òÆÀ) /gu]WOо±íy΢S…bty·¦b:vÍúGno×å¢,Ù©kT€ ’zI$Y|µx/úsuRþ6ø˜-ëÏ‘‡ ' ?4JÛÃ×é?JwŠ=VCf©|Òšm0}­F§ž:Y=°œ…4Љ2ñ´ÃËo)OdWxšæFÍ/ÏTo´4=îê³ÀlFŽX'ä3(‰-ÞidþbgÂÂôïÀ"ûBO¶J#˜sd,."Úª5PpEM2X¦þ(*5ÖPЬä†õ:õëdÐð_|ú:Õ5?ÿ“œ—%ñë Äbå­üK}Çûñá J y-E&Q—ä ©K2¬[t>¥¬ÛeÇžºfÃè‘`&N³1hí‡TnyªÛWm ˶DÁ9³¤ÛÐíŽ\æ‘´ùœìåèñÀ[+r¸-²tajüå@<Ô“H(Øëèͱ׋f©5ç–rÔ%_k¡´‘`Ò|7 9Pßê)îUW˜¯²d2Õ>¬#¤ß·à„nq¼Ðõ·¶pÇVÆÕ™z<|;3]_NUÄ}Äýi$®"öÔ¥ôJð!.¹=‰b»…úðÿìɰiür ­ù%xÅDnlA4HÈïÏüƒZAS„šÚ ÀvÁ”Zëå=nª–Àãb#b8»(\ïÊ+ŸÆ€f§¤îŸÍñÑ¡`9ìp˜9éÃ}§dµ zÐ>7ÃÅé ÌxÄ3%A‰°¨(Ã,$Õ¸u?Ìêd‰x³§OÛ{X´a]«¯;¤˜(Áôz¯zî¯ÜaÄÕ½‚V‰’ás¡†ÕC6íÍí`4œò³’X@j}œo~A°ÃÂÞ6¸uýXÓ<ÞrmøÝ›Ð«~Tù̾2fD$4ÈŠ ؤÍE`zÉcæŽá˜6ýü§Æ³øYüZÏXt,©ZTŠlMîc“¡BAù‘C3¡OÜ–} ¹”=±sýjµ¯‰TŸšá"-ü»16OÅÀÝON·Ï?<}ɬöRß'¿2˜Í²G§ ZÌNÀ¾SÚ`ÖΤ?ùÒ<ŠÂ´Ù2"¡\J4aìíZž#x|á4à«kbÏæç ™MÓÌJµ÷õ*í<€òV"}K-ÓþÅå 3mªæ¦(EùfØoa¸]œ¥V6ñÏ'¡M2FšÑ,î¾×çöëTß„,š 8÷J{1WTWÙüpRr~q”š‚¬Ñ¯€Av†ž4/ª”åi:rÁŸ‰™…Ù0Tö«ß¡U³aé¦:`çãŒgy„~f¦^€šÆg[‚Ž" »¦Ñ°:Ã] ní†Î4ŸÏmŽ~ûÁ°ãe×A(Ä>Èâ°zµ—ìcìyHD°Z‘búf¡½vìþ]ûXÑÝšz€(°¢+o3˜Thƒ´pÿ b†@¬|{²YßjÊÖV£á ;evù$Î š—tvkŽUgõü݉¹X¤Ï/â· Fò‡ˆ‚\² I»âެx`šÛHb%hNù‰—žO^ ý@c‹YvzÎä@ç×?b°#Âsì•-›&úÊf·r—ê†7ƒ²ò£0»bÊJ æšœÓfWžk-Lq6ô$•1¦uqÂÇ}©ƒ‹„µhœO˜ß¤ƒn3|ó« žêÀ=Æ¿ç°þ4 -Gâ]ì¶ð >òK)Ún¸W”Õfjö·%Ј&‡ÎqàN?þ|ô:ÓBƒØ¢Im2ò¶îk˜jæ<ÀÏ{ô`Iõ\4–=}êëè^ ž5ʦ=»Ðs¿—Åwó(9%Fè=ôœÆcÑe7.¼ÜØì2CƒÜÞæ¼^âúP˜vƒwäF»údüqFòTžhàq Ø*hë‹:š Œcî)®šÝ0šç¶.øó¥ÑciÈãü&sŽþ¶8f(ÊêëøÁi–Éqÿ¨<‹Hµ½3c›ôØýŠ%Vû„LÆÎå ì  Ç nÞ¯²˜K!7¦ÑC+Aƒç¬æ&«/ä}QìÔºm/©%Ú×n‰x µšæ³%+(¿ôd†w:ˆc¢Ë5·Äº$ñÙ€,¥àÃjÉ×`} H³ ËrÇzÈm'\ÃwþÎßG:ëIoôV÷[>Œ8£|ºŸ;qƒ kyÀÛ¬˜0î{8§ÂuŸÖõŸ'¤Àå;DÏBÜåÔ0´Z¤5°ÍH/A"bªBSó|>ýdùÒˆ«´pÄLhß6i¤%Š’±X lñ·³q7ùw:D(씳[´BegN~i Òœ^[Ÿ`‹‚ù ÔÈ6}Kc¬XÙ‡L¤'’¥÷’Q“?)Þo Ŭh¾'¼ÎÉ…S—k¥˜@ºÜè«-ËÇxyEþ.¦D×E|«¾ÆO2+ÞjÙq’÷|$°_#x'¥E 6crãBÝ͇ bÚõÐ %·–ÇÌm ’³§ýI i>·ôã^Ö€BèdzèIßÂèÖöhLË5ö„~êHïÃÐaœÕ…Æ+r#]¥K«VIm kSçÀÍÈ'¬W7ÚÑÔT­qÉ,5kݦVI®sÂ×蹈4YL(Qäì-²UÏÊ=Mm¿L3eO¹ÛsïrþìÜI3ßj ãZ<€ýÄS‚ªñŧãèBnfn\ WS ¸(˜ø/<~ø”8Ç—¯·°¥]7izñâ"²Ô•š°3tëÝ–.ã˜jeìƒ!ð¸ŽV9•i*ôò¤ a¼Avïó2 *uË´…Ž/»"ozX^Xöa&’—ú;'†ZmÚ «ïŠÄÍn4óÕ”)æ“ác¥ëup¤4 å©È_?Çâ$žÂíŒe0ŸXŒUÒ d£0Õæ‰f_^ðùA-7héñ§ÜQqø p™Ÿ´F\ N¬³/ZŒ’ªÃý€G¡n?¹9å'Á¯Ã 9:Û9rL`Œõ6Ï®1‡=«Kšè Ìhû›ÓŠ:„u%Òt2ÖìL³Ó[=Ûó´q0ÙÝkU«=Û‘É$â€íÓ~€´€^GCtøsËÖM^½–ºTºÚRtð\÷ôÑûRÜ^<7Z–’ <ÍÇzà«·´¥Ü˃ƒæÝ¹crPÝ‹ øåGU¥úä–dÑ4±H6¤kçƒÞ('zOÎ]x̱çÉH±åÒw¡C{ñÜæ9ßVèì~DÞ,WÈeg&/Pu»wçcmÁ)/…²,œŸPEP¯‹zñºòÔåÕºÖrå$›ØEÇɧüØ"Çý»n’X®ºÝopâ h!ìð¾8ö|‘záªÇ~u‰Ü,5YkŶÌ8PkË+_ŸB7 èèl’ù1ÑýœþTi—¿k'Î[á»Ë؜̯¸¡y/OÆ5”S÷% ’Š)s”¬°&W¬“äArÆ¡ÉóTÒq¸iVø¬D¨ñ~Z4Q±KK] É奌"(ðµe"êeoª- Ýå¤ëø‡îÀ­¨&–iž:ç¨2ä‡òÃóñ}IËâ“Bl¶'Ò©>aiy"Ú]¯è¥ÑÛ¬•ðYÝ@èÉW_Ý÷!Yá/—ù¬WÁ\ŽJg”n®ê&³„‹e ýY‹ÔÁyÙ¾ÌàoÔHçÕ4á¼ÎÆ×}6±VÕJ&=vée•Í*¶#3)«äXŠmjà¿KEg}¹Þö QsÒ'•j*1ß«¸^Â’vs¸@•-)tPK°ÅÉ7 {¨zêIrÞ)~.7 ýÐÑ,ä¿¡ÅÂ|€æ¡ í²¥±Á…õXS§àÑÊ)e/éµ$Ë[Õ²À(EågVNEž?„ìŒß‚ë}Ýõ«"W=)² 1Õ¼IŸ…NyÙ9ép;"~¶ðç-öÀ×é9æ:ý^—ÚO©ŽÇbJæJZóߣˆëaaE¾ÑܾҰA‰7¨æ x_ÔÌ%‚²dµ43å†cMc]q<ç°TÐ7à¢Zø*ȱWX³· j7êì59‚nÃ…­XÓ ŽqËdI^,Cvƒb]è×/À4ˆ?Èç:æ‘æºHŸd\Æ6i¾fûr°£×#Öá“}›¶¥èº±N6šÒm¼qDÏÀZFBlO“‘ßs³¿fdúï¥bx¥qÐ|Htàä´3FƒhÀô!U„…rnÛ†tNXiÏïÑÆuêX2“v=pÍ ïêˆà»–“­O‰ð¢zÁÌSGª÷{ù©ô > X_¤®v Ÿé¿ÎTÔõÃÙWrýÉÞ«%FÔæ?°“ùzYq.fIO´âdÄ‘œ éä®D½»Â–ýx[ÝÐkwŸk‰™‡Ö böxùÔÉ61õÈ«ƒ‡{6<+'­cÚ`ßùòÙsX <Æ¢Cõo“z&õÝœuP]Ž©H€U‰Í 0>®ã‹4Ÿuï¬ÁÇõ eê,gw÷³bå°C3ß‹–37ú]ÆÊ3Ëé±Ñmž ÆV×a'F3ïõÑb}5ßדÒOѵ;ÖbÊäƒä– /ë\3( fÿ¨_Ø``Ì#$D½rþù9\êþ\³©ýŒƒ%Ï›ç—Ψÿ{˜ƒóÀG•å½+mç¸7z]¶æÜ^îŒxÕtÌÉŸ6§ÚeÍ0ùÊP:-d„9ÕͰ1LÆl Ha=ŒVlòNA¿zY¿zÏ3™2sêîþ©{˵™Ìº8Hã!/MãÎä¶ç¥,Z¶%Ð- ´´r:mAñüe^“‚$.ç‘\jNFö4qZ+Ч¤ë³¹1 ´án ÌÿÁFé·’øYã©@–ºN\Ò'k{÷[½Ì{æõë‰9Êñgç–<,ØyR­VX;»¶`¦\ÞK`è(a,9>µÎàb#ñê-n°zU(÷JØ„eup¸;dó¾ê,A?Õ}ýŒ§ ËlÃcf³g:DuÕ˽2ÿró ȘI‹Ä²_€J?¡ ÅÀ¥ñ»&ê²]±_UUDæ~½ýRSXTGYsýCt÷âjÚBBø“?ÿÂ)–NýúþjòfÕ”O¦Sær¥¬ÓoøsV®ð’‹÷Dè>ŒÉíå½W-ZªyOó›MæŸ ÓÆÄÇî)>46ãb¤ üuœS¡¹1ÚŒ~(»ûãTÞ_§Ñÿ~^¶–£íhõØ’ Òó;çØ¸ ÞfáÁSu™sÚdø²ÿŠmÔ ¬ªq±yéÏdÃÒê |\.øõÛ±W¦[­Þ,»;Öþ«-Žëc÷ÁÞrõQõƒí$ÿ¯ÝBP“@”45‰”¬¯ÆÞ_JZ”Òê„äeDWþ™·§¸'šjS×3Y”V”uŽ€píÔU‹ùµhe%W14­¦žóÕ€÷>æCô`Up•Msû’’K#Gã3¬ˆò¦Ö‚ ®˜‡7œÑ¼¨êk¿ üŠûµB*æ'Ðà5~kâ̲ý\u|°]÷†QQæßwÙE!¸—{ÁrLÌè7~‘î×¢=š<¡Nž¸¯2:«wST§KÀ?K[v~¹áF¤ê€NyÜ6"@ö)ÆÍ’ £¡ß³I€:‚™—¤;Ó2å”UVº ¬~SôSkÍg.Õ¶ò‘|AÍV²¢Ìé˜j,š|vH ˆ¯¨¥hŸ‘¬| <+C¢¨'‡)žwi”Ü®®5%H9:e6Z­Å/Lø¬ÝU’C Õ3‰i¯…ᲨѤËÎÈ›WªèÒ{u’Sbé.äá 97³ýH±wN´õ킽NÍÖá]:¼>}„úÏ–¬T§e¡}ŠÛÍîÛ#wŽUz5õ·*Om;sƒŠÓ›Ì(<ìœ8.¾×Ó—ë.‹’¶Dƒm„Ø¡T`6Wb¾~áȧn‡IªüÓ˜¢z¹“è.d垸a¡ý.óÚVÇšƒqpOš¢ÈYè‡È[‘]øû>Y1Vφi43©ËnéÑ]eJW9ßíæ«"—)'îÔû$‚¸©äà¬×m±NyÓGVx6¶& Ân:ð%$n¿_‹dwßò)µrd®>W­–9x¹¼¥öM‡öé•:»&ô%Ì6¡RMònyQð鼟[$œØ¢Ê­=Ó颰#&~œ›|ö.œ¶Š Ò­#ð/yC’Lh!³NÌ'ëÌž¿A:Ý9ŠÚ:Sl¸Gh r°üŒ’&Ò[&È¢n*&÷ÊCO?í`˜QÏ\ôr=5[ͺ|ä#ñd³c‘nWƒ_7èa‡™d KlÜ€W!{=,`£S|úøÙ©Ô5%Ì8ˆÏ #Aú„¬Ý!1ìÓ¶H›äµñ{#¥]ø°"•0#z_ˆ)cZk/v•1Yï®7oo9- ßΞ*÷é°q °Ntg¾fÑýX[„ã^¯Íàá Cùghý;L𛫡Ÿ.¯H¯Y’iÀ™‡‡ä¼_Ü7œOÙ=B•ÂÆŸÜ8¢àMö÷ü€¡rweü³®TŽŒHñ’÷¡É‹1Û†à_»&VZ ÁVßvæW¤[£oï]«\ØØ¶û°ó»a¨+§æN3s5ÇÝR",Dý_•Ôy„M'œÅYQ<ãH›Ý×P‘J›¨¬­[~V·Ý:Í3'Jj—Å\Z!Ai˜eS £`ŽC!ìûP ?Ü\ÀP j6ZÄöÒj§ôk†¶¡Zÿ4Ïg†„;ÐKY²í¡š Ïó²^évmû¨ë5WúÕ¼ôà”@Äž ÑÒ#Û<ŠT›XäVáŸJ“l4½ÍPàj¹uQ¶-)õ©‚Jt -z°Ô¸yßú«šuv>‘vúFÆëñÆ€hÏýzÞÂOß{j‚FLÓ$i¨uâüL°ŸáªƳÝc É÷ %b $êC3¡‚"Õ|¶Äº²9,úóÚ¼c»¾ßÅG€ÐRäMàhóºÀwD°'&ð%iù´Tme ¦¢_é@wT(fK’A”)¬ÚS›¹ÊJŸYËV]#dÛ7¡W<´Ä¼Î^¹»ïç7;çòJ°üe:˜×—\‘B>cž½4¢$#Ž:k˜”bÁ-©fynƒÍhv¼§MǬÓQëõ}l°>ÔeXbÅ?‰ÙfUŒÝsJ´Èô€M;w©[´Æ0öw9l+±:hJªÖPßÈïã}!G]MçÔV4#%!æ“n°ND-…í7Á”݈¿ö=&öJfä†`Ëi1H\a÷­’†*2*u·A&ƒ…‹3G82c5p½Ëº›o§-,ÏtÔãakà÷°åôu¦*Ó‘ä‰^@|Ûª{Räöúôàvy[n…€  õÑ¡6Œ®©µªd<êΙU}ÍfV'Þpúã˜Wp ÄÙ¬ÁÏ,Dc4f0FÍü•§²øÛCD/z¥'ôû“FÁ;|{ýaz>"(è ¼üòç7# Új…ÎR}E Å ÓIÙÚÜ€ˆôHígeäÍP XؽˆÏ¥0+ÓЛ½/êÔéàx'ú`µúú4’45†‚sCö€¶ûz*Ü"ýœ0‹ vÇ&êpn’¥‹ñ¹û,ß$H+Ån6eóµý°ÖOèmìóiµ¿ìûÜ‘û8ô”¢ì W:’ºö·}Æ*÷ «üŒ³‘ çú³£ç£ÿJŽ"X¹óÊDĈÛ_±¸$Æ­—~û‡fq@“®o"0’e£wÜqÅ÷!‘¢ôÚEsj›©-ð*9FO‚dµnL_SÀ}ŸMÚ#4ÊWw,Ü´ù¾@¿Ï¾Ð‘w¡t5=¸fÿ‡î0T’‹@Ž<È„øì3Ç{ˆé*¡ÜñjçÎrcÌÆ-U}«|#ˆ“ìïwXºþr’R­òS¯ë}ö½¯—Õ]Éfƒq¥@Æ8± ¼Jƒ-jz©AÇÀØCž¾NÅz“À/ÚhhbH¶“ž*”„Áëa5ùo¸‹\vЋŠe¹rÞÎ>wd9 üz«>gÛ0*gÂTnРƒ1„Â&eŸ¢ì¯³ú775ƒI¦oET·eæÿÊ-¼ÒÒmïÖg„d[OÕ_"xfk;2”±&š–ùÏî(TÈ?~ð«QF%ÝW‡Eêñþ1j›Xd¤J;J[Ö›nØ¡ú7ê£Ó:„gÁ¯Ø8úYqŽ(Wó*¾OÂé³C+1ºÝ É¥Ž-§éë ¹îú‰ ¯ýscýî½T‚~‹ŒÆ¶aåå6¼x5t:dhÝÅÛnëÀD5<)¶³Æ”~ÁKGØbÛ§‘eN³¨KY4>³Žvš‡«rؕੜBî–™éäî—(ÒT>–A^ëØ½†àAúÊ" .yèú¥qz¶HH}ت/èmMíË')¸ÞlälF›ˆ)\-ÜÆ®¨ðŽè&³RZØsk¡vµZŸDE7·Ì I:¼õ™ä"’Œ&mà]¥“o××&Â#匛ª~â7õRL¥IûU¬ÔžŸ1¦/^ª¥ë øœ²65ÑÓ¡§¡Î¨î 6ÙGŠÏyU+×QÔÅÄ»c6‘ucä…“É+z9ÈiBÙa%GcénS÷ÿqŒ½“'‚•sç›H>Ä I;1ÃA<ëo„±J ¨Xª|ÿ¦ü%±tÏëÚ‹;* ƒgù' ïctÁ7­I½6€sW éZE/îð7† š©[eËòuˆäŽ ¸o'ô~YÇ]£ídƒLs…ÊæÔ¬ØVé^ú® Sµ_8ɧRa±Áp—äÓåZ©ÄŸ°7¯ŸïÛ ¾øeè€r–Íòu¬Š¥Áã0ÉúU³ '/š·ó%”¸úô)n¿›ùÉl÷b"œz¤¢ûn,ƒÀ€ã² óþìê¥êm.DÞ;%òBàŒ3+"Z°q¸.w5SHºÓ ;”$éä¶âDo¯“ÍÕÅÎ=â$”{*÷wȦœù÷ù~²Õ;M»®GixÈX`¨ÜëH;Þ½s£ÉÆvÚ"”— ©÷ï"ÞOŒ2Oû”E­ýwqk)xcžW!.M"oi‡›Æb×ö~2Yæž.6„É|ã´Ac³áûW[|]Öx¸CœKYª;¥o~ß#Æï𛉠;RËërvj8Ñ0e1¥ÚÍá4ßH‰"k§¬ÕŽ oŠÐ„v3ON·8¿9[÷7„s]œ(j^ý"æö®ð`hwAœ5Æíh ³uã§¶)"/NnÃVøÔT Â^¿Œ%íüN½”âF2ЕÉøvê>oÀUÿŠ?q_ÊA‡t=ž,Çh²¡3a¬Ï™a«~×iïMádšÖ›½+*g™œþžzç›×ÎOUÙÕó½Í’š‚X’ôê¤öªìçsoû²žÎxµ œôlõ¾øÈM#ÙÝÖÅ"`¤­”°^Ã@Q«ŽD û/Õ¸r²¨®‡"«.¬Ó²b­Ç[hSÌ0k~›Â:¾VÛ‚ÑœZJ"MÔÕmm†,“[8î{,êÑ¡ÙKlwhŸ¤¯y«¼@궉[‚Œ÷H–ºÃKÍ~×V" –Î¥tĬ¯…4~ž]3N{˜‹È°žw ýŒN¹0å<èæÐãj†Ócà­Ýµ+ &¦z­¢v †ÀB7ŸÛÞ•áå*û=ƒ’”Ú[ÍE u—–À´ZjЍl7B¬øžÚšQgp8Áµ6B¯Á³õ@€t߈Ç ˆ´N¢š@bŠ|¡ôöRìîáÎz 3:S–9†Êh‡‡Ù%ÆTÚGF2v¶ÃüL]õƒhz<}êº#fç™WWL’Áæ±Æð£kiBµÊ¡8©³ ò7}&a/Òžœã[u‰tùâÃ…ßʵ‚‚2óc`z=™?ì…T4-3èËî¶óáRµÌ¨®¼Þ剧@lÆ‹B#×0ìZŒÏÖë %g _®Ö/1ëm¬vòf»"Âîrv~ÛQ4ßð”ƒ%Ñðym†tðuÕ¾£ïÔŽ8êæ§Á|Ÿ"HÇ«x’Ù ÙšÑå Cn¤U€ŒCœ–{ø¬é^€åÀ² ¢“«[<±³ä9ƒ':¢›,D!³2Å¿ÖY÷ý¢\½c]y +3KQŒ\&k'WÿçÓ¾ŒT1"Ãõº˜D0_YéZʳL€'I &+Ë(fódŽÏÄ”0né×>¿õU#ÛÌ%ÿ=ÕŠ%.ç'å;O›çÆB ÜÑìw¬ü ÞÁwÞvò#¤ŒÉ4˜ç<—Ú%ØÒ ä8̰mè¾,á¥{é‘iBY…¶­Ïr»`@ÀBÝŠi¶·xùDi…ñ½°Î þÎ1Tu¡ø¥†+,.ýÏ&qŠ- ^]è3ýÚõ·OƒU]ÚÁ!°i}½9›«Dû]†g±†Á•?j]K ­èQPÒíu¡x–‚­1~Ë3‚Üß^c¥à(g­‚‹düGèÿ'ÍZøŸÍ=ÿY¤V=  C˜&d‚»%8!(@𠬓’)øÕË9bÈÙÁæ0O«€ˆZ6 EÌi°áÌ¥ˆzlhl$Wë¿u=ÜãúZ–™v¯; }Y±H@þ N£66¯‚héâidÿ5ïqßkÂ[°“®3/Æ\QiEhtà²ë>\­¬ L(!j°¼õ †ò!·;Ð~ÑY}äêš»,âŒã ‰ç1šLïàèÑo_÷Áî›í®g@-ªšñ<«ϟ¦¨1ÔØ­$èIù¡dj9ç*Œ‰›êZ6žÄHïwƒˆéo*9ÔŸ¾Ù8eÖ”ÚË…©Í‡mëT§âªÌhùÖ2L·$¥A̼•ÁÑhÐgi{;F8‘¿qD¯ŸNï^¯/JAT½uÏá2V1º !wsèN9ÍNØ¥F¥…±¬ ¶0ªÎа»]¨˜ Ålш_€¾o] —¬Þ, 6e‰!šà{ã/ÉMôã(vP ˜Á€mYbOMlN\(fÆN9æ¿Möü Úiù«íΉL†S4;¹gLš>8qSTÌ ­„øC¦Ý«Qf[šú;Ã\ÒPÄhÝ%o‹R 4ËjœGå<³tlìì}ÖÒz‰ž?—‡”_%ëK7kΫ¹8‡ã®*«¤ÔÅnøøß«J«*̲ç͈Êaãòµù»ǺŒnÍ”÷ds骶Ú°Ïþ i—6Ü)ûaøS“ìsóDÿºŽ$²{+;G·H:-¯àéÊjij/hýv7ƒMý'ZK"³‚«|Ù\FòZ$O<çò9V”ðÉI#äÅÝlf2sUæ’`§»`Ù¡PÙ¨uÔ8ÿÍo€nÄ3ñc^ÙóŠ”Éâ¥@Ú²RÚÈor$ËKÚEeK²Ô&ÇuqèÑÏ|çCfúd ä à×QûJüÓu°Æùb;Ûñ[¶·ÏÊÏhè¹ý>6lý ð—à݃fµ¨ó„êô^”©ÚpÍ' EQ&K¿ àƒ§n¬ #fr®œ?†‰ËycmÞ§¥ÀóÅ­ûŽbPå÷G*®¿”³þnF—‰F–µ'í¿ß…Ÿ% }ZA'$ȵvÀv™Ë'oŒôÁ”8µUá}mgO×%øŸ%Ÿù endstream endobj 6812 0 obj << /Length1 1630 /Length2 20898 /Length3 0 /Length 21741 /Filter /FlateDecode >> stream xÚ¬¹st¥o³&ÛvvرmÛ¶wÒ±mÛ¶“Žm£cvÌŽm³óõï}çÌ™u¾™fÎ{­ç®ªûª«êª§ö^kS(©Ò ›Ù›%ìí\虘x –¶&®Î*ö¶ öÜrô*@ WÀ_;;…¨ÐØÅÒÞNÌØÈК¦3777@ÔÞÁÓÉÒâ» €J]E“š––î?-ÿ„L<ÿÃó÷¦³¥…€òïƒÐÆÞÁhçòâÿú¢*pù˜[Ú¢ŠJÚÒ ’*Iu€$ÐèdlPr5±±4ÈYšíœÔs{'€Í¿S{;3ËJsfø‹%ì 08;M-ÿ^z˜þqÑ€N¶–ÎΟ–Î 'c;—¿=p±XÚ™Ú¸šýCà¯ÝÜþ_„œìÿFØþõýS²wvq6u²tpüͪ$&ñož.ß]þÉílù× °7ÿifoêúOIÿòý…ùëu1¶´s¸=\þÉe˜Y:;Ø{þÍýÌÁÉò_4\-í,þ“À haìdftvþ óûŸîüg€ÿ¥zcÏݶÿWÔÿä`éâ ´1g€cfù›ÓÔåon K;8ÆfEÚÎÜÀÌôo»™«ÃøÜ€NÿjÕ?3Cý—„±™½'À hǨ`ïò7%€êÿNe†ÿ>‘ÿ$þoø¿EÞÿ7qÿ«FÿËKüÿú>ÿWh WcÛ¿ðïø»dŒí÷ @ðÏ¢±1vúÿÝ1¶µ´ñü?Ýú¯ÑšÀÓý?€I»ÿm‹°Å_i˜˜þm´t–°ôš)Yº˜~˜ÛüíÙ¿ìêvf@'K;à_mÿÕV=3Óñ©}·4µ¶ûGö»€vfÿµ‚¿rý‹?£ˆ†¢–‚íÿfÁþ+Péï ¸¨y:üåö?ª‘·7ûŸ‡`DDì=ÞôÌ\z.æ¿ïß_BÜ,l¾ÿ›”ÿbþϳ¼±‹“¥@÷oÝLÌÿªþ|þó¤ÿ_`ÄíLíÍþUc;³¿Óö? ÿ¸M]œþŠü¯ð·êÿ8ÿkî@ )ÜÚ²½)oˆUFv¦K=vþÈ”˜î`?3øH¨Cy“ZIQ@­}ŸFÄw•ÑG](Có ÏŸÏ¥3‡ÏšÃ±~,›o}iÀ«B_2ê"Ô-Ê.NÚà FƒrÄÌsÍïëE¹ß:L‡»SÊ*eP„3]¬N0×ÏÔdnEäOH~¦éñ˜Ý(Í hõÅgç”É'ÏO߆ÇGG~öÝBàÓæÅÃRðcû¥ž‘¤¸x9=4™þ|sãt®^ÊiÓ¬EMVw÷Â_v%&ŒÛAgμd%²øÝgZ6‰—u¿ ƒc)I #žU“1hè^–>_åX¿hàɰÎ^厳„?jŽ^–Ì +aßþƒªA%$5¼˜­–h&¥ÁÄ…’©¬­Í?ËÉÖ€'H!.€-T0^™²+TkÐåâKÃß R£–1Ô{®D?Âo NË|äõàÈÇ$$¤mFsóý¦RÁ'¸Ç‡–¶ÕŒ%R9mUýkd Z0£%®µÎ]öjŸ‚õ 7Uj˶™˜'F:ŸâÞç>Õ ­O·§7Cœ=qAÐhöx°Y¶lƳiD[ª÷ä‡,¬@œB[ªÎù'Ò¢IÝÏæf:Ýè½*üœN‘´ì¾(޽^ÂlÀÓ5Ö¥› zaÚb˜G”5ÒBÜÏz4™qÐGCF &›S™Z-ØFo—N4Ž®yãKa”¸-X¼ÉꮿÜÇô&´è;˜†?XJ•ûfA‡C4%…Ã>¬›[öRBA~ &Ù~ÑÒgˆk‹w*(¶ö|©žCS¦Ãæ¬TÎFZÂ÷ë1ÓZBÍ4Ptµiåü |75ëí'¹åI{ …f ¯¬m_¤Y•ÖO©ÆR¹\±v[ÛÀ°†¡ Î(OnÁÌEJ¬Â J€Vî-1ä{áËÍ—RtÈ(VKP3ü=e!(0³…u?ˆöºË§$Eú‚šW±ƒ+6;VgC;K,¶ÝaÏ»ø +ZX åc¦¯ÝÅBq;H|Ðqý¼S¹P½{üöC±£ð»½ŠüÕ0E…jQ¤…¬þ =.¬Jz»!^nûS3fòM-ÿmØ…U‹ÓëméÁà-±OÖzÙ’³éËÀ¦ã…çþ\ 3´j¦¸ÀÞ’ p%Íl°™?Æzq>¤Æå~Î\ ZµX ¢¥Ûå’He´ ;”È•^Njõ‰48^3ÔÕV¿Kr|íÙ§«’kXÔ™99x‹n6;?…ÞâßÜ%ϳ[§A©ñûY1™76Ï|å²ÀÁÆ#­èæpñV£YçêÙiÙm’3üÖŒ9³´û f#%ÅðùØÌ&ïεÊò9šêN'¯¬èïóõª`Þ½EÇöW Ús‚—P±dU›»“…–r1i-DňG J·ȧ<>æs­I|(¢Õ"î ú–ƈ~ö@†fØ"苻εIz‡¿Mü <¿•ìÙ ŽØqÈœ¦+‰’PMãûa)-§D(ú]jñ–ÜÿL,‘ ¹Šw&¢õU6dE­X)_y5KáYðÍ?Ÿwj±Žmg­-ÒÒÈ“Â5ˆs®‡7©:Ͳ¡pó6ÿ&L1¤"¹ÏçΜŸ;ðýçÁçPiüJö ûÈǜΔ(oÿZ mKæÄŒÔèãjþ"P÷þ F1오nù¨9ØVù2MÔIi˜Ÿ…t¥'[÷JIx%Mì%&Ü8Œ9.©DÁ‡ΠoŽaÕ<‚)ß6=ùa"e%nÖ¿n©WÜ€.½õ'Ú2§ŠÓ(íPæÛãjk—|âôD(Å|Öi+µZ[qß¹ÃNú*.R@ÇÃÅ‹˜ÃŒ”$ØFLc%mćèQB5ùè÷:è dí5-3nŠmôjC°FÅñ\iQ ×Vãýò<S“Ï—Ïl«~C!”Äœ­¼4UŒ¸JIw2²$còžä^ÎZ(´‡ëoÿúVµ0ú†šî—Am¶M¢òëð… |$˜}" •©ØpC…eÈsI5Unv©5»N+QˆöF݈›>m}±[OG©þ'µÕ‰ä ùmõ0Í¥µ=åƒÌ/ÈÇ\ÃË^—àêPÖó%IÂ=—6©ª&º•³Kyà?“ÅN/ªˆ†ø´­Ýéaôn~Ò!ÝÖ¤tÑ=Èàí¢ƒœSI' ÐäÍ£åÃA{I¤ †žJÐ ¥Sèy¢£›÷>—mKΰ³/F߸u¼,ĵ–_5ÿ9 )!úÁÊÛˆM'ð}1Ä%þÅ7’Ç©“©É®Ã¾åc¶aˈ%Ç4fMîÀ|àC@‡g·[‘¬v­%XS0~çàz£êr\NL«A’8Ô¹Ñ𠬢¤ 24ÀÞmÆHjÛ¼õl œ8AlŠr¡xçAi¹6OQøÃh˜ËÄwv7]íy¸Ð¨\4Š[=ˆ#ÔïøÜ<Ò§*‹Ñ±x±ØšËxø‰µ%û9hR7qá¼DùÖ'50U€–¢eö5ΪÕįbâ€v’l·rØæP¯fµy¥'Bœõ'—¾öà­˜§,\%p(ó=¨šµ}.þå;Ÿ«„ô£ôpÕüé;ƒó‰üí‰ÆMpF§9óÛøÔDg#P5¤fܱž·L­Üt—àcZ Ty¿’µégvvƒ{‚Úµ†(Rѯ*É#ë@â ›X/¸í#Pò—†œób‘y1€VýË”ÅÌ)l ’…¡”­âZw×$MþÕy*”p"ì¢ÜLÕ/ª$=ÀºU GTÊî[ñ>=š$)ÊÚéuú#€l õv1DƒNOJ¨^¦ÕpȽ?ã%¹Õ¹ÞŸ­´`ñÖ›8[j$ v4,o…ó}ú¥†ñ7$ë] GP†+ýº@ R†8F±* <›â×˜í©µÁ裟žó?÷0Nz{ñ„VgòXq24é/K×ÅÁ¢»ŠÚ×5¨Hå%"‰D ²ÉC9MãçeÓsj¿Ìáâë`¸œ,ñl”ØyÉ…3Ô"nŽ¡0o÷ºO´ ØÀ0¹þDÉŒõ›6RyqDz(Vóq¸›ï V7ŸÐ[²Ï`³ÑfÝÌÔ\бg%,ôˆ¤óì—ò ÆÃ5¯NRó§Â÷ýüh»Õyz7†úí6„»-¬ŒéØ8ú&'z“¸…°m'¢ð@öÛŸ¬‹Ù•޶+²kÅ.¬YÕ¥ê°miÙ½=®ý¡êVõ¾B:‰Ù="ÏoÖ2Ì=°’ Áy0ñ† WXð/`kIt>“PqšF]=œß5£•ÔHÊPkfNƒ¥!ŒÁ3rûúBòöd^Í×\wý*qÞó)aʈu{bôú“ͪfØ`5‚œýf.î‰ÙÜÊ È8zx,Áx‡šølD»%UYA‹~5MûÛ5Ÿró°Ô—  ƒ;2ž*ÙîVkdŠ 8žü¬š!½.×ËânúˆŠ­ ~&ùvÞV«Óá¬ÙáKN5upî!,roçæ˜ß€âω›X“}8>µrí ®Á2E¡=^fšh¾¡‹òßÉd3Âòqe<žåqa´ô+M¦•×z%ëñ&½qcÆfu| Tõœ¡ùcwéέVImÊ/¬ß‡¦Å²J*__®³Z9ìð·;E…%}Í[€ñ%Èòƹ%¯RFŽyŒ bÔGwTŠªž tÆ£sj|œ6]±)/ò­H2Ë…Uæ>c¡äµ8áÖµÉúÌÔÛü”—SŠÈ:äö±Îîp~fEâ§+•Ÿ·XÌ#0ÄéÀCîº>þwõ7O­êìZã>GŽ*ju ið¸ èÏÙt¥›@sÓ2³YÂþÔßf „*?1¤9À‹ª´›É×Ó8rŽ—Ø~ ÍQ ©¦`t—¶³\ú¥õ•/c­ƒÒDÄ È pö?(ÄS¡ 1b;w勹O@5Fùò@ƽÔêïDG µŸ»;Xò¥öNé6’M¶Uj÷Ã.¢@Gó´3úˆK"~!¶“{I•s1íø~ËD/þ}ÇÉA‰ûÆò´ g€œûé9#¦R5iÛé“Gûj €–ë‹Û+0°ö ‚ñØç§œ—Õ# Mì¬D¼'%a¤x–N4iÚkó Ç]ŽU+¶Èjs´8u¤4±ò©·“ÈMQÛ¬YMœDLD´Øq㮬mµÕDz‘)„†ßx4–&|ÚŸ_0dù•ûø6ÝÍTP¥òiP^×dIÖ纰ê™ûúUíaÕ[õ”j`>Hk¼ŠQjnPÌ+]ÇŽB®ea±[;ûA_;·XYzË¥ÏÊ@ûéÉóF¦L\ÍG¡*)rè®P•z£ûÕLS‰H‡EÈâÅ‘¡3Nmø#‰*~þò* ó”ù—pˆ'°DAÖ´&î½! ~ML¡ê"ò·ðùÆÛÃÐ+¾÷Ρ~îä¼,‰4ÒÎŒ;;‘ˆûz™É3ù='\u ·‹áwn'QÞ²±eþoÖ8…²bøDêMŽÔ+›7R* …µLŒÜ,R–üãH1L$ó²©õŸÓÊè’ÄP |ß±²^pdm &dÁ˜›xа17äD'÷a-&1ß— Åê[ì“$æí©¥¾qD‚žø° EC,†Ù9ðóLj‚Âäp ýw°ë)ËàÚkú>[84ö¥äæûÕÒŒwÝýË^ú½~\æŽn'ÙO L”û=–˜é]ÚÔ€•3qÃÍÜzw# ½âe Í‹R¸][›fLÀÔwk­IWˆ€ŽMšO¹“bÓArF£•â³/¥"Js¡³þ6:ö抵˜VWNgÊ#pŸ›~ë¿Üt|ó“ldìÉ¡>8oó½ ›s)c (/TWh>'Œ öSàSÌXx«ƒ†Ë‚Q% C@—`kÛz¿,ÇDÅÒ¥¸#7“jŽÖHä’Ž8g ,¾âxßoœÊl,[‰bó#¼³h\:¾º q*)\ „¹[èF%á)æÜНdóˆ¤yA÷: rC¬Üñ*É!tÐü`ÇPÓÓ–qjæˆ5ãk[¥UÓÇV1.S¦(ŠÀFÀ¦¦ÛºÖ©”{³¸ÄM¦¹œ°1Ã5&þá¼à&E½hNÛž)^åìFWªð\˜•‰ä½ ¹óWõHÝšà@R¹õûdÖJåñ·ˆ¼ž[ö²r¡ë¤9¯EãÀ1s;Ú{ÂÊ-±bì6³$Šdèß-=, vËÅgEl|we4à? :! ;~Ìx2J( Â7=~±O´ž¬@P´³Ç³`lL=Øßà$ùíúMÔüÄŒg´YK!ùâÈ¥•²›âº›0²‹E?”ou2º~ùH¤G)‘¼×§¹þÉø^¶¼o£³Òb/£ðò‡$Íáv ÉnpaÉö‰ŽÎÜ7J¢:ç2,ˆdÙ&5XR%á’çkœ‰°@‹6ÆÉY£^øÛ¹]'m£kÆ\÷UöD›ùÜÓWF|ñìr~m}ñàXjà%”8øÁ‰·¥‰#ë„Ú´Ê´’ø×@œXO!ƒß=™&®\üß²`ùÎX;âCjh €¨‘ÚxXŠ`ÜHǽ-}G£O¾2~nÒ†ÎZúMt—jàfùŒ¶X Þ©à tÚq.; Xa¢ç ²2›Ã«œ|˜l]àvÌ*³B«ƒ­*Eö´C—ásïèIô5%M¾——î”BÒG¿¼ü—ä.,óƒ_R¯`“zŠÊ1¶=ÍαÈáAxbáûfYíï¿ôÈÌ/ר0¸Ù Áæ42EVДP¨y1 mtàž¬gF¥yPR87 Ô-2(9Á¢|5k1€a3£/—>&¿÷K}à ›'²÷Ñ0 ¶«»r:Þï³7…šf¨*ú|UÂìù¹â§£üi̋ò3ިŹ,î%›ŒS0ÇÎýÙ÷“6µ$’¯zmóÃNxÎä–ù-8íy´ýã1ò2Ð$> _{1Sè]« Ǿ_|¯7?´°ôµ%‚à9<+FÝm=è»ÚRÁB2˜6ÿ &Ü™@Ñ*Ñǘ9Æ5TŽQ…r¸o?’6$xã­<ÕÜ/ã>Ðñ•eZé¹C*™ß>sžî†¿ÏþD˜rS÷ýÖÞÜÎQi=,õžc¦Mù—#žÇœLÝ\â0ÿ¼„zOViTE {ß7éü²F’·æ'ûH„üY¡ã“:Š*æÍšæÜÁ¯<¶Õ×2/i$‘þÖTVqR¬Tsåê°hÁhÖ~›±0 Cqˆ+_Ù¬"àcc™y¬`>”Æ¥ûF3³ $HɈwÎÀg ¢ÅôU"yH…ÓRè_ôåTÐë¼ä! ]nMÁ¦ CiÊ)”çJ V^•Óz1|·g‰]F^~[«š¶à/Kys‡Ì„§e[û Œ¥-R¤hó€Ú´|2Ù ?µÓÇ›äNOyˆ+‰XP,ðïeÿ|mSÏÕÑR¾Š5ÿ.úʘÇÙSMFƹ¸Ÿ)Ÿq7ú»Uæ‰kÖû¢–Óí®ãÚ—þ“º]ç‹`„ÕýlÛ"¤oUvúÇoåÏæ÷Òýc–§X¬Ø)œùÙêèþµ_ eÀ•™ÎòT4ÙË—ŽÙïÆ¥y1òÑÏ£9èÙhG=F“ú½çψ\X½ŠÅÔG'7óÁBÕßbWq>.#\ø> œßhâ Çññ¤žæ1ôÞ±H|åz«mÍ;a“ô´,Bâ³Y†ª¡ÔÇ.Ðw&eü^âØ“ÝwÄú±Ä ”–ï*½*êÛ¥›ÌTH†¨¡?|wëW¬<õ Ôà“¦B àS˜ë3šR0·-fc˜¬À.;\È3T8~Usý°òŠÝJyÃufÃîÎÇÅï$胛օâP¯A|[­Á¦¢¸va‘>Ô„Ê“±ñÕÊyBáp¸Ž“ ÉÜ·á3œ%æÚ—EŠÊú¦±Zåìrz:3ÙÜÇ7ò‡¾.#i(/üÔåÏ7”´;Ï[â–l„ÏÚMƒ‰™ù®ÙVP'ˆºQií^<î«_Üï¨Ýv-þ-›;¢ úWK±ßSXˆÖAJ?‡gü…jøú+´ªÌq®}ß5ÈKPDZèÞ=,Û.[Ír3¼±Ôj+³ÒrÁVfú*ý'£_àš1RÚ-ºàÀ"g‰¦|·q=ÆX>á mSXÄíçSëõ$g:H's”äùöt½ØŸU®h¶¸ †¸s vÇvú³sli(„`˜ÓmcÙšÓ„ð8âobÖâQê3 ‰cü¼ÜNɺŸ³ Oë8<<`(®ËÙö¡*.…yP²I"M`é[JŸk¹vpD¢ÊLÔ6§ØCÇúžÍBߪ[Fòé€2pàNnÆÔ¡ç.‰Ò»ËxxJJP$Þ¶©®ê&Cd°tãŽÃúãgƃömÉþ )d¸3ÂÐ=ÈÛR~îø[òCó2£ ÛR©µP/^ ’êšu±Â  µì]/vµò›#£û3 péo–†¾Öì: j/=éPÇ]3!¥Ùô{h_È3;ìùI m^@C ×ué›T*ÇÖè*áJꨜ•ê9MŒ'jÉíY¨hò”`º!¥*¦@²Ã…¤…¢ï«Uzè–è³Ûö¶+±´ýÀÌÊ_=V™€=k°þt‘«.³(iê¹b)Y dâô šùŸÝײw±kr™è&©.²æ,~ò®jW;"5ë¹CVá\€ø÷ þ:4gÒÑ//Gó܉”x6t¨!jÒîûÄÞœ•a}(Q·HA³_òÛŸ<ܨ†–sݤ:Æøa÷Nmì/Ï÷ÁRéòŽ>âܯaBÒ C0’+»Þõ¡¼’´¦ÂËœ9öG"ΞàÛÇ®æ š¹'gZöºö¼\·äå¦ÍÛW~ïè½Ø[™Ïy¦aP´'ÜðŠ${"Ô¸ÀCÒõ˜ˆ[â¶™þôFð?ã|4êí+D{qÐx\s;ã· %ÙªLÞþßϱº?{Âsø±s¡±rO¬§OƒnW®Ù%¡–ÑÒÚÈè-™"iÄgª[€—ÍÊ¥Õ‚j¿×«§FJ¹’€7beÈ- Yù™)xÄ„}èvÓí+ê¾YgùgUS¬Lï¶Œ¼¤ïTÆyi{ýiú¡aucpãкm&M6çB_S+³} ð”Äé¬Ò"É{!Bâšä ®sHŒØò¥"» ù%ÝøsÃÅóö‘9æþý&ä·^Y1ž38<©¢mõf Z•Æèo| iu  'Ø ¨UHV^#•Ù}6Ÿµ×¬¦µÖ$ žÓ°Jξå÷æÈ¨ö̽Z Í }t¡Ð±³&ìøô¡:"ô®ƒte§„¿pV˜ç¶sÛ{ħt49µ žPʪdhcŽü¾»·± ûÅ\û“+=ÁÜ^#é!‡šöÚ¬èB%´oÏý«-lóG:*0AÕ<ñ°—A©$V„§òYV?ǘmŒ]V1òk-~Ûr2Ì*è‹ ,F ú¸ ‰Þ˸fØSÓ-9|pG+ ð»u÷kZã]y¥ß%–ïüž©é‡`Ò3ø¾÷‡uIJ¼]½òëOÿ;Üàhß!ÊmÀß\S ¤±ÞçùÇIj:ZõSîIPZˆª1ÇšI•§®ºƒ€4YŠ@@p쮄C›:9“ ˜cL}‹šYì!ÚñF¯®Ù=;º†¡_ÜäY„F£‰üÔêÑ ZЪ³¿žVÑöþ5úo Ú«<ÌM ªEzJ>dÑÛ ‘ïcee!¼Ýá©/®‘ªÌLg¤ŠJçBÚS¯ë5‰-w†"Ù7h\:˜†°á¥Î,á%­’‹h¨Ô}D6w ƒ'm¸ 'Qua»O²o[P+;žØŽWÙfG–Q‡SPÜ ãÄî÷2ûÅ©eùì,SZë½XŠ+ÆWÊ”ï»A<˜¦Q椋—qúºÛrñ# ˜”gìëÊò”?hS4?(&ºž:Ö:0¦m&J7nè×$§’‹^JtÁ¶»J˜éÐï¶Uá°³6¢´Œkm­V®Þ upæÐ¹ Î:Í#éíÅØ†‘"o¼¹.FÖÇw‡±€ù„=÷•Þ÷`SÞ¾&áùêI‹lD‹¸„!_yD3ýGpã3|_&•?ùÊ=c.š‡Æµbo¾R¶âÑAµ’#4 Õ#ΆcÁ¯¬ìõ—̧iL¨42ß^a#k·jý¬„nº—‡ô¡¯>ªWD¿÷THýÄsöáãÒ‡HƸ•·¿Iþ.B=ëˆìó)ï` A¯æŸX<'±íp1Øžêhïô©pìûézúÓp×’ŽBE>7¶Üˆ÷,¶Ï,¦Ü)õ¶4ÌúáJ,‘Åþi½Û*9­6+Œ›_×8·–eíÑæ)¿¨TÑý æ÷¨¦ÅÍ9®¾0á¹MI%û ÚŒÍ Cy{8GÐDX$°»…¯Ä*Ðx‰cp¡+9]ïF³†oÅ—¤"㜩®xj0éÒ+Iæ¡e8²µë‡Ï¥^þvÉ/+¸å¾L÷‚ÓXáò̹‹£ç¼ap$œç­§æ…!Ÿ5p«¤›5…º7ŠÅ¬E½RRT.w™a°Ô©í³h¶E“nL«¿vòqcë¥|J© { ÞMWV(™)–NõH³Å#Xx-yÞyÝ®$:?»-q=àÁYj¡‚´vGv®×(’`´U›Ý~¸Ï‹ó„ßFûó[<%¢¼ì?«ÞÖ(="œ)y³Ÿ©4Wéx¸…¤º·ÊùYÄká¥õ£›m!}³èI§[I£Æ›Þ=½ÚHU¿¦¶Í2$(ѳ’¥4éÇTǹAÏd · GK#úF¢d*iÑàÂå‡Ï¦H–,…([#9±tEåƒR§^ÒnÖNzÐûÈ1QŽ¢ýÀ²s£jìÊùžhHIÁ3Áo¦ $ï…ÇÏõ,r¬;pàÆÈËx1¯[sm§2Nñó‰¿\P4êwLÜa»!Ú;PA³1RÎc¹ ò‘IåWè~©ç1ß@O8Ô±@aíüÉY¿ùqBâå¢ $Û²H,î.M=wë'?FŠE‚ò£á‡?i\ð8Ü?«Q(˜¨µ™).!¯þ†q$¹ªA°7’ ‚„RŒ‘”‰k‘ÄÌ—Ç·9„J-˜÷³'RÃÑÿ£÷V¦ô>ÃÀÅomSIñ©Cª#:ÿœûñ²ìI[í¼%r½Cà³ÎFB3ɳÉîõo©X8ºüm¨!êËI»y>ÀEŽudk’è3›;}f(–ÜÍ…½˜áÊ-.ü^îåA~ƒëúýÚq$P<úåQ QÖ®OÀ'È £Š?ñ¸šÿy&žœZÛðIC†>lœÃM¾<Ã>·‚:%!‰ßÛÃÞèzïÔÓg¤ã„¥øõ»ýqVÌ !eëIop ·ªYi±ß¯…‘KúVqÙ:Š­LVµØçät|³¬µú¸Vñ+ÏP±/yf÷âù¨áØUçb;Þ;™.“õ7²ýï ð»Õɧ®#/¤zeK•»ð ŽùްÆóZuˆKñ Ë´BÑSœ'W×¢ ÷ôWÐk1Óëö(ˆaÞ ºÔrÏõCE40S‡„¦èƸž d ÷ì¢jõÅ`°P'9pòËì$Gù=ŸÑcÉm,Ó;=C"ß¾^8ée¶¾gLåÑåk^GJ†ŒAoÞ”ÇÖ§ùƒÒ+Zâ• áôcÒ$4é—†®©†ÐšguùÖxejCûVøYÇ×§ czéLð¦ƒ_{™HçYmëT75#Ð,qàÆÙ¡mìUÔ>ƒè¡•šAê8­it·Þ£ä±€bÄeÓÍ¡á™"éi£¹R“5Ò¤ü„)—ÂAU&¹¼¨É]Í˰Áì}YR­áR)Q£%—% }Ò(Åž|H€rÒ¬g`÷ʯƒeôá—å€`¼.‡U­Š¼_<Žþÿ`V9ãEÝ>úÅ%0”›SÏã†%;Þ+}ê’W¬?çLÂÝ,IZ¢ O”lD™ÖqôŽð;8wÔ"üä’Èá°‡IìàÝÖ¨#Õ‘±©£|zE-?TÊŠD««83mØ…QBL [VKÀ l߆¼d?ßA×*>µ†6N³% …ãî謊9¢Ñ´íõlGzæà©5z(Ã`>£¿Ïç®DK“dóŸWZt>®ÅÝÁ^8R%è¡“/²çF{}Ìn¿E¾ŠPV"²X² €@„O ·¥ÒA­±NoP!C–®o«ëæ´:‹×À‡/¹Ùe:'©ó%¨‚El‰t$…¬÷H·à ·°[嬯Pb‰ÂA¨àò±sÀ”*Nq—É? ì³Û`Ÿ×YŒÁ¨ï¨Ì àÌ@<ŠØ;JuÅ—ÃÖ¡‹}CuVIvª³žŒš»ó®c>mô {N¬P1ïž8êÅç²Vžƒ*>³mS÷39€!Ô+õÛvôíîêh4×"F:jKó8 {¸? ¢µG ÍÉäøW¿Ì-e´ÈÞaºÈ,›«,kYq0ioR®ÃÞê-z\èÎvxÿ© ;2жÅr×J±PòÓÑ?¬k{ ê=ŠÔÈÇ VÇ.±}+Ou’5~çGÛ¡ûàЬ|¯)E—(ÀãÛ‡»Tp¤Öu‰ ¼Q2Q'ú ÞR%ß³~Ú'Bb…–˜¥‚B"d­ºä]¨:ÊGãns¿Ó®}æ—çhÜ)0Däøº 9©Ê/˽Ђhïí‘ábŠËZܧ[¬:u¶ß{ÈSF=³…НíhòÙœ¿u7æàχ~¢ˆuÆ^1N³£2÷«‰J€¬fž‘êH±ŽK‚No*•€õ(Í9öUð,nä7ÑÝ[{‹9ütnÆÔ&°öÙgÖÃÅ(Q÷ž˜XVzø©yÛEŸ#%}ü}¸sLJ© i —œÍ wØÖŠPV:§1Knþ.IòeUT’*!ÄújBŸÇ½D žý:Šš>Ù×òZ¬èO#ü–ävӔߓŽVîsþ‘;VK7–”CÅ7ˆÃ4¢R‹ˆ\ìs’ïà µNDðœò_pÆ«ZÞ VÜтFÖZ*dQ¾£±˜ lžúTxSoÌMÐë¦-Ý9ˆMë¡ÅpL;ä囡¦iq±:~Ãǯ«&!ˆØúÒ «~  ²q]6TÜXûb0FŸIëšÛËâ %*ú•âvÂ%#–~¦l¢°@Ãþ à![¯Y^l¹lpÔº;¡/F‹õ®hšÙ'Yñsê”-§?l¡?aƒÆ=ŠƒEçüU 寗9; ¤ì´|–Õas_xdY l£Pl° ®s²ó³Ý÷ñxl‚\x‰Ój¦ö9Þ/‹ëÉ o¶yŠ[šôÃOŽŒä +޼2 $;#.κ(üÎ0Uþ…#„ƒtÙ 2VÀ1JRi]~աδŠÿ>™i–±:w6vG3@‰v¡söü~Áàe\nv5ŸP"ÀÁVÛZ¶f©r´N”“ÛÈâÀ‘dLÔÞRÉ® ÷¸±ðå×mp“ï©M ç¯l*ü ü\VÂ7™@.1½|¡·~AöÛ%JÕèá]ítÀ›ÂDKGæjœ£‚³¢dëAçú[¶o‚µ®¥Iü›1ßGŠîS°WÐÍÓ^ˆ¡~Ìzt»ø Jo7”²yͳ´7޶ªíÁPƒ™Yަ cf0׃šõ‡™þŒÍG¿ÑZËÏ1îÊ­€<}!£‚<ëÒáx®i*h ä”Ìõt㉲Á…jXO8¤W¹C'Ü6µG\z-/ªÎâV9\i*­…õ·,áÆáœBê:ë~‡U¤6œãKUKRcM÷æfS÷½ ¾¤<(u¡‘ž1‡µfBÔðHª;óœl‰Ú³ö¢€éÓÊ> º€Êº¼$%%ØÔ×ÔÌšŒø¥÷ŸÏ,¼ìq»S‚ŽŒ±†A2«?Êk9Ü~ßc4këá´}•±cåp¾ÀÂJÅëë|)ïá?à©ÔD…eÅ£ˆ¢kÆÜ%9F]é/ÉAÁ‡|Ü §ÃÑ“b—M„Ïh„pblZ©‡Büþ¾íÁ:X—s2hçÌÆ¹¸¥5SÍ£›“é«›zWé<´ ‹ƒÍ Óhöžú±xs5˜4­Dˆb@«%¸›ÿ²ý{è0Ñ+(þ§®Êü¶dðGöDqO¿tÀú.å»3¿øþ@®Ë©™|¯Ò°Qå#DU­tšœëuj –vµ&­Ò œ¨ŽÕº»èd]·ár.L”…ߊüMÏá6›³2ð$®7“2Ñy²žà;)ªqëí²“£d ²kDX N©Þ­¾Å ŽÖP(£4 ¶)ÜW³}[¶iDÌîj°ª)j Zi 2}åù‡S€ é€ÊÉ,6+t«ê ]¤øƒÖZ ö#¾‘öNÇrë˜ÖÍss3*ÃO·¼yfõ© SÍÿœâø–W}›)|ýæð™õ†_¼FÖCR~÷öN퇈،è)ü‰HišéñÞÇ6%]¿T¦UðÌñý…9ßùçÆ¦ÇVEx5üœýF¹–éq?x¤4éSy¦¡¡fÅ 2$´×Yj’7süu¦ðÌ“q̦»\µ–.ާ¼ãÇ¦Òø¹â9‡Bˆ÷ãÉ”c¥l»|ÍÛÌY!ˆ7¾bD®ë‚¹~‰À\,W–|Ø@ÄíÞùh¤ÀálvO¡›u†Mô¦‚Å1MH*f-=£Z…vð:úL1n˧=TWa,)=1Cû™vW6ün 3Ê“G¬è•VîŸ?w@Å;%¯ ›&æá÷ˆÆïà &ãjÝOß%ý–"0“ðü¶Ê‰æ +ft=u¤»Rø©L2²Q¼GüµRÝjãGùo¼7yût(>–ៅôÃËCˆÐ;¦ò–y6ñ=Ú³p½C'#@Pª¾ìº²òH5ÙÇ„Á7£G3ð ·â}‘r­ʦ˜öô²I}Ñcê[ì2;Í}0°k4Ÿ¥°Õˆsš-I¹ÒKÚõ V»œÍ²2 ³FIdœ³ GK<øi¡™ž Á¡œ•S‚îÆmÛäaòõ¤*sÉ礴n¸áUO}BQUŒaz/VQí k*† z„½¯£ìÜ/2#S‡”Ðã.æbe—~{›UÏEº$iÍm¥þ²6Ò%¬ý<Ú' eVH`.s›X.”­·ƒÈ†ÃëöÓ¡eígQ7ZÉ`7X}\•ö­ºˆ0¤+1àO§‹ —Âú>µ“„¬“ºm6ÛÈ£< í·âVz#tl»yŸ}9epËkªÙIoÿìÂdˤ\#¯µb"N 4³lŠ‚‡|¹Éá(¢4Úz$HîéŸ1è#V^%NÃÍ;óz4›#%Ga‡ºh÷'–×'¿0†WVîÌe^š¢ˆ=ýyÖæÆ1+\1!*á¯W÷ß~Õ<ãžf2['ïãÀ‘+íKæþ?£"p”ûL´,G™wðãÌWºd‹Iç‘§Æ{Þ'Äw¨•#z¶ô U@ÏÚp¶û °ÞøôëVö[Ž+ÑŸ ¥n 9ÿ(g½t»ÏÑ óãU|R/.OáN}®‹R„\¢é6[TW‚[rÞ‘e_—“7<²Ltë>xqDÈ¥‡’챫‚wCG lÿÇýù}ŠdêâÁ=²6?¨uÄûñsýÙ…Ž¹“!{rùÁçþº¿žMk5j—Z(íŸlÞ&ÓÄÐMˆ›Ò7[ìoõJRØ%ƒçD¬r„·Àûz¿Ý %W·€–ƶ|:‚ã9¶¥hœüe¦Ov&žÛë÷±çÛ6‹ µŠ5þSZ­¶/,%oi¶',HÕµ"q•Mïé›I~YÁŸ&Afü3Vq´ÆUÐàæyÆ[V4¨ú˜÷ÑÓ†{ÁbE½ C¶Eßåra³C=}÷[NÁ–‚Ь=‡l!cl—q+ „÷¸7QãÈsÔÒXcW8'fxlνa$ #œÎ[Ú‘uRXoÒ%U&¾Sb$!Ó'ïfôyÂíV ÓŽ¥Ø‹x÷B;¥“¯ ð8‰q¦÷?/·*žPÅÖ4ê²'ýp=ȹ^m›õ›ì绬W±£0ÑWݼéØãzÛ•=ÒFŸoç Å×q8ócœá VšwèMƒ–¨ŒúÝz¯;Êvv+cÖ*t7ªñ%š©¬œ6#Ù•ÜÕè URâÆŒ…½8n - •°EZ2f±Â× ¥Ù"IÈ36½ kqªæNˆŽBádàþEIÆÖã½*éºÜ‚”ò GW6…zä—ê8Žn¿·iñÎÓzµð/‘Ì?Ó0xàSì}´væ£ßì­?ût‘î,w¢à+ˆéd'´%ÁÆûq±Í‹—švWæl¢àHñ¿ëvS€@™ÞY<·ì¬¿Ã1Xî{q iG:.Ø­Š.{býHÙ|PO=) >?`w›gf¢Fø½’»Xº½:äq¯/Ži›¤ê- UâÞ6ïß·\ÌÑ/XGÂ6(B&oƒ“\(Á—Vw¬‰ y¾M5´™%yÁµ¡:0† Ù6+#Æõ:oFÌàì~Ž3æÂwâútÆËç|ù³7‡õ¢Ü?' Ïq5(æ­‘ÅþD0UÅëZÓCX4IzkV4H5`ÖË=Òj87|ƒ1ñBoƒ¾ï&v†\ž=NÌ,Ÿ Gœ™²G‚÷ªÚUL½9æ3 ǘܦ}…úÜpl3,ǸµÙ(`$اÌÕK¹Z>¹#HpúuÎÒ)16ÄÚÊU™|ð×½·ƒÓÅ¢êNoÕÑš‘5Soû}+4õYGÊè;å÷iy“EÖÞ%#!Ìÿ•f¯*“õRÌ>_Sou篺n-wý~Ù¦®·‚eß<#E Wz§ïVýñ,àüô ªJÓµËGŸ¶rcì¢[rp —ŽI'<ÄWO½^Õáÿh{Ì7œŽÂMËë Pü!´`«$B ½âj{Ž…¢áÓœh†!¡þ^¡_Å?«pE¦©Ícd°Wǽ}Ýiû§¬Ó:él£™F,¢̰¡ZóñØ]EîHê[¥¿鯗TÖ‹ÜÕnCÇ›|üOæïæm"‹Øä>?9Þt‰eö¦çJ{f Š3úï'ÚKU*ÜËÚN‘~¿gbÃÑÐâž»Pº5³ʾ·ˆ¦åË+”‰´ñ!µ€!Ž ¢T“!k<¬LŽòÚ!uyf/€Â„µZmrß` ô“,A"ÕkN¡ðxá-ä×È ³ ž9*ÜxV©)½¢X´Ñ~÷ÌkM¬%þŽõt×ç¶<4àöÄ3ú¢”\ØÆd÷t£k ¥´'%ß_FZ)=‰WàZT:wÃ4Ç!ÿ¡Í §_Ë6¯Á±J æ F¦Í“å˜Ã-îK3’ÉóKXPC9ýÈ6!¡ü}¢ÒAýrªÞR‰f Ð¹†=Š™,ãüT~ gv¨•¡F`Äáàüƒvß-sG-sI÷[GŠRœ»ÄšãÔEfù×û=KÒ;(D^è^±öñW¿‰CùÓb=§Üka(Z˜Nà*ZvÖ³öo ²ŸDr{èÛU=Å'5f÷¢äœ÷ –xJ’x…”°7¸‘räP‹ÕÁRã§ mãóÂìŠÅŸ°ðt¤1I¼Ö³×£ÉF¦þ™/?zh/e§½¬s‹o¿vîá¹ã²G 3È ¢qÕËy1¯ÏS¨…ñ¾t°ZfÁ½ÝÝ‚'¢´ÔÒøM8Nd.¦iÌ}Ú ÌëkV°%â餫éçdîN,ðÖ”k[-4·Q¯‡†¥Æ~jñøÔO”s™†ë‹ r¹C¤5cPÔ¿IÆg\·b_þÑ e\}þ£7Ö@Xx¨¯1á¯ã0³¢Ñ¿5ˆölXwÌ?•²Å.ÑöúÀ(YJÈa†)ÂgóºereBŽ?ï&vOÞÈÅwž™ÀÊ—˜C®»¢@×x„ ÐLdYiH#Á/SÙ=+¾Tvô|é,,w¸u¹RÅÔ5¿Ù㿨jBçv1Z¥1T»Ñjcàõ¸ çôÞÞÑܨX)˜Éøˆ„}ÈöAy^®iFF㵦‡Å |¾+ždÖŽÚæY†ñýâ<ÊôÜRoà«ËmC¨ÌK$fMe¿—e±in"PµÓŽà¾èYF¢ö#×¾HŃp8ƒÁ¹À+é ïc _àe7ü'ú]ÚÆÏOWò(oG}Z#I¦\Û¥/á}ìskÊæ:Ù½kŸVÜ¡º¼múËü]•åüþå–sÊë’>÷däæ^-üI.Þs4Çíö¨ÛKµ­·:6ê€ Îqõë÷í\r„ÓpÕä38F¶tVQýÒÉ×&΋ÈZ\Y-¨biõ¯?7P&ŸZXA̤¯HÍÙ%ÓC#b¡Q׃ö}ïÙCxÔy°ñšuÀ‰º©Oš ±;{&Õ¤UkãM¡š&ÛŒÜýf<Ðî/aK²@Íéë kJfGË`]s@«'=ø“×”nø=¡S~¶êÄ!+ýw>†rõ óÕÏÙCEY¨ò›LÁ‹ XïƒÒ\úyð£ÚP·¹n -¾QõÖý­ƒòi #n™îǜӹÊMÅH©iÉC¯úÀKˆ­j¤Cœé‘Û©'QoÃ7ˆˆ˜ÝÑÊTwj7¿idË`Ï¢%ªÙQTïÿ™“2Uc:né‹‘¿0Nôm5'ÒG²Ð£îã‘Ë3B–ôUÙHa܈Ûä¯ëuW5$a?Ñ÷ltco×qZµXe9 õO?ï]›>€K‰Þô1Enº2ùǼs…ãT¼z.ØP|ʆ—ôŽX‡Kœ{d©Up„ñG¢ŠâÅblã·¡lNøÀ–Ý58‹o»{“©+ÞЄBP«Zmf!ä<Ñ”ÙAÒûšTÙ§Øø?Êÿ­#•2¤– í^HôÂépÿMÛ^³ñPò Çif­Í®×WJ»)‚l @hÙ«3ÏÎLФ4Rñ eÞ{‰A‘ÇuЊ@P±mð"A,Èx=Éá;7• <”i à/éVé¼· &šÓ‹«• —…¢•Zx¥©ØP¨´+ ¼iþ¸t 勤ˆÑ?Úbot¯”}¸_å{šãÙŠL í ±«OT”ãD ¾\È8¥¶ÊÔu!"W-ט.2>#Ué­™¬ºÚó¿åÌâ‡#Éõ¶/0«ÀY:“sèâ¾Ã3™;þ»U¥þg}/*C‘NÀ`xí-GÅçØš€ð(T’*ÏRÀvìBö¦.¦|ÍK9„ÚHŠJÿ/4ŠëÍ€¢ ,=¹÷†xÁàŒ¾½FÄœ&qN¯ßm›x¤jº,¢M ŠrÚU‰ä/ä¾ÊΠ¡ ; Æ„ßÀÚ=åyGÓvùškG®Èé¿;øò2H`š~ëf–‚¼±+TzεìC`v§å•°«‰½¡íÈu›ë­Ï»»Â,¾ìKöé”gË‚y„^É»\÷2 ûZœ¶­YFî^tW´S:#_ð¿ ÃJ0õ±U·YkÏí‚wðü“˜CÂO·0äPóï=^Š–S´Ð°Çl¥Áè”·ç><µîÓì]q]Ÿ-ÈWøÞ×ÿ:iT)eÌËHŒ«úéòÁ ´!ÿFZPIU¬Uo# ÎAãh8.œ}Ĺñž=3ÿ¤ã‡ÿ~–´RàÉ%r¸ÔÓ¹‰×•”XÑ.¸}÷ñÒéÕ¾ª$Ímð.Ö%Á¹w’M©M™nxÛ¸“ñL¼MX4Ç§Ž }½/ã-©ƒéñ­oº# ¨ }—·³Øã\°ñ§feÐ0ÀÛp””ê×JÁw÷ç²ËÒ–@ uc‡â”,”¾‚e{GöòL¯‚°ùé -ñ0uYF·Ë‡@ñšÔòù?SÂðýso4‚"äA[AÐÐÛë§C›ª16¦Û§qóÆ… 7~LÄüd…e"3¼ò­)ÚPëDòʺŒ‹;/:µYÙ‹Û¾‡U~õYÙŸë¤ù 2ɼªE`¿oYþød\5¦Ä€EHf^O¸Ðû.ãLµ"7¸Úšøåvؾ ç˜QLEÞ#cÇù«rð…‰ãÝÙC¼·€EÈ“§©ì/Û_KOå´`ë ®,¯:îÆû·˜€h&p²ˆQQä8ÛÙ°7ކÍó[Ó¢ðÞˆ–šÐ´Òžð%î ‡_·Þ#¯öÙ›Hèò‘ià™îÍ¥V²¶`Ŭÿm1Üø7wyÎh'áÑ$x¡åõt©GñyýwB‡ :∸¿„Ï÷€d„PB”?±2G¸ÿã”ER‚ªg+’–^.ºÂŒÛÍ-çÖÊÝ9ä³àE/Èý)Ҹșú·ªÛ¡þÒ<‹¥ª'¯š۰©Ö=½8ë#܈HLtìîø]ªa‚³ãêÃ[ÑäÖ4óã¾uÝC Ñwd·?‡ã³ím^¨Ø•F-"³EÌ<åP,æc–ägª½ ÎÁ곿ÊIÝ$6LßZ²îNºyÚùð,Ðo§˜Bâ–õLßÌ6>•é†e…‚-éÕ{¡±Øž5!+àî„…Y‰ƒ v5ôK1¤WiÇÔð½z°‚vÃWʺû+Œ*µèI…­ œA>^P¤¥ûYKTT·ðUú™E¤ÿ–kKgýømÉ8·ØûF•i“§/âUVóX rò6:ˇ¼ClA½'àÐþ 21ZËqM;¸‰Ù_´ÙnÎ/ÕMÚWÕ÷?2 ¨†ŸyCÅÙ¤ ,ÿ#lkåÉֱ˜¸OÊážP–¥5.u…\Ë¿ô3 Íæim AÂ?F"KBJ¹êõd­ø‰5¸‘‡MÈ P(æ~¦¾Eª1/âÿÐÏ>[ܲïÎZ}=Z½ŒbpÊ-{¤@,yPõ9·²]IÙµ eï¿Þq µy;&kƒþ4H[k…÷ð NéKãðSô2Sp”œl°Ù{Ùóþ|๕/y>Ç4SK‘îE Ì ÒÎ\Á/[CuõT_¥!±½¶Û]eéórúkêX#ú¯©C‘«C0³}þÂ| ƾ.5’‘ñóc[®ËÍ…Ö¦ÀY˜PÃa®ùu‰|”gŠ#ÖEk±V‹8¹°ÙÙöÄ]a§Z¦½ÿ\¨4€ jWPLËÿ~apA2t²e–‘Í@þ€ô5_Ï}'Ëó,Æ¡m›û ÅGiq'G3ƨ\ú¼èy…C–”¡Ö#ª‹¡è>öîö¨מ!vO àyyÊíÐË­ IÃ÷¡“¿ÎyìGq~Ð$H´qàÀË[,ìO懤Æì¢1)üÈ–Ä»æà§98ìM¯Gí Ûlw{qîW¥™åÚ»—‰0ž±Z/oìÃèGczÙ.V)ÙãŠÿ†æKq D Í¿Qc±å¨>þ“N.¤ÞÄàö‚o-ïÝð(õiÝŠc¨õ²§˜)'Çb³3Ðò)Wr•Ü{“ãbsÛ¤A‹>‚ U©ÌÆmÊœËÓÔA4ûdç)±̳öR¢íòãä.v®˜â°|µwà¿Bqè§ ÄøLú//ž8í#r Íq·†&»wß’éźy»¨Ÿé4ÝaT Ylعy[ÕèmÚ[•xžxV´·ByŸ,×ÕÀ“’VFQ"øXí¦³\ «kD– dT5²¦NÔ(¤'¢* åíc–V,X%>®Ö†ée3yÐ*¯$í“ (ªîÍ‘þ;SÆN@©€Œ:H„z(>¾åh?é¡ÐÖ!§LSþAÓUükûI¾œ]䔸…Ôvl„¦‚’ðˆ(¢uõäFáx¨´T®2õ}Ö¾¶éfí3…·ß‹¨ýãÞXª7r?¹ÞÕk7˜Zë¯=äó¢2i»â•‰`&Ðn³ò$ûd“(cÆÁÐ׃„%Že¢½¦äŸ†ô™\.UIƒñ{ö‡°aŠzœ$¹ªC# _h¡2áŸÝœÈÿXæßHñmR£ëî‚XtSi¨C{+(µrNû†¶aëx Ÿu•R%½y¡¦q¨ Ov„tQ#3Ì¥Z|¹iÐhâ΄Ô"ÌeÊAÓV/‰€0ŽG8h¤ÓÝéöwB†)ªå꓃ªotÜhTú"^ewýŒº„ò½r§£.+°–J¥B–WPÅzsÄ3®Þ†ÂLŸ¢À¡Œñ Û5Ù»ÿ-£)wµ£…$qˆÙ¤%¼Ÿ‰Ó–Ò“›¹Ì¤{âÞš÷WUè§´ºó"3Fì÷›ƒÒ@%h^bC%ÔPÓSVÿª­a‡[¶[ÐùT 8Žèæ2â÷Þ‹ œÌSIáuC¿ÂânY1ð8nÎ\bz ³rk7ÑcV’£p±É»C9¾»­¿(* {ËûZ/¨«t +™'äbÎeù–¨´,br!ÕrÓCÉyØÒ¬UâàK{Ý qñždá…'ÍbH8¼ßçC¶dIçwøèŸ´2‰­´À ”‚£ŸbÅ øZØãrûH±~‡»W.ÚÏ/´¦&ê>Tç¦LÒTÚMõŽS‡ÈÏ­˜í!ÇKàqY²°| ø+_U+<ü<ÙÍ‹æÉ\ç®" 0é§–cNË[màžßÊ¿Óÿ †Ð0… ¼ÐýÈ x•u:‚û[Dì7^º’¾ *%ÜþḶ5 ûzdoAúzD‡~\²•zUy")¦žŽ†¹¾æüþÑÇq«pªyÑ«e·*¦î™ÈÊ endstream endobj 6814 0 obj << /Length1 1644 /Length2 7940 /Length3 0 /Length 8769 /Filter /FlateDecode >> stream xÚ­xeXÜ–5Z¬´xK±àwî)îV N‚×âî.ÅÝB±b…Bñ(î…"E?ú¾ßÜ;Ï™?3÷Wrö:{mYûìçIè©Õ4Ù$!p3¨†`ãbç¨XÛ›¹8kÀíUà e6 ¨¥ àÑ·MO/í#¬á00*Ð…B2Ps77€ aÓ¤áNÖ–V“¶†.……õŸ–?WfÿJÃbçäý X;ËY»C!jÖs+€Øî±oÙµa¨“5 ú¨ï_­°qqrþ ¦eemn û#ßßù×*%û«UY}umU–ÿºdÙ4í‡í-¿Àß.jcÐòp€þ<Ý7pÈ?¥¤àî/6.~A· ×ãk|L ÄÍëóßÿ‹ˆëŸç7`„“µ;À“““ë‘ôÏ'çŸØÿ0Œÿ…Ff‡ü$Myœ½þÀæ.NN’ÿµëÿó_¯ u‡šcÏ}ƒ› Ù¤e¦#j_ä ŒÈ~êæBv(iÐ*Ì÷¯†wù¥…­€*Lok‚Ù¿ Ýð˜Ùs¸ÛPdÞüÜMbÇØ•=Ê#÷¡öäã/2´ °lp˜”à¦ïëFyO+/£ðsêl®Ž¨k˜ß>¡øÚÎã„y| ô§uÍ÷'¢»pxækžZKü¯‰ ¶`oŸ!qçò‚±ohp ¿ë'zÏËûX,zað ßä=ê$„‡©Ó¯ó{ôkWçÊ™¬ÝjüDm7O²›o.Ttç1+„\é‡<”–’ÈëœßÌb•ÜŽBCpb¸ ÄX©†¥Ç´Mê>~SØŸåŸ?¨J³ÍœÅXãl5F~“O£-ä[ºÇ×a’xÝ7iy­Ã)ˆ—®®¯):&À[÷Jœ^VìY¤D­ÿPyÒªDQ´I;‡S´©J+­·.{_m@Ô•-škË-â—£§„„¾Mó~ÔƵFoŒøšÈ+””ÅF©òQ›ÊÉ9t ñ´¦˜ü7¥£uzžkÒPü׋öTBQ 9ôgÞgÉ&-]†i²|¸Sâ¦cÛŸ•ŠW1=ô_w"•*a‰Å¨äúò&ìß=›6«éold5ŒÜ1Z© Ëj“JÉìŠà_K¦È\ó’¬1¸Škç¥ ã†¸GØ>›Šé¯%PB>ËaÉi·«X­‡Un7ˆ|ihQ•!kk6»ê§|;º€!}ƒ¢ã‡’Tá¶ûÁ!’ÞaËÛÕ5s&.7§Š˜v½ƒræ.È¥»É+ù…þD‘‘CCºÃ˜듬)qV…f¶ŸÍ«)tSÐ µFÅ:Ô›ÉÊÜs\ݵl—.”³Ô¿À¡ÊôºQÂJÞ,]UòÚ ½~¿×õEÊÙ2U|öxöïBJß»×9ëà]¸º:qç«ñH"©šA¿ôðdžŸIê^UÑ¢GðX#C4^¾ z¿¦.ñ’«2ï‹ÖZsx‘ Ê–[õ[fãˆÆãüænM»%éqûÃR¬Ç†Kì@½ŒÇù°:Ý“' «B'CR1~¿«ltFÖº)³zºV–3b0­ò(ýl*£;ÍDÑH¤œ Ö+ ‚ïB¸èôü–°¦f-w—>.ÊÜñÔ*î¾kØžºìÎÖ1€TrÞÆ¼ë £.C}©¦›‰òõlãM.ñu>d׫&A’.Zº-‘VÌ·Âð¼ü¼ÌÓI«6žù¥çW`¥Íra–œo´"±Š[›K€_8ÿd¡íNâ:öÚM~?³‰bHÖíÌCÌõcaϧ^9e(܆œuœôÕl$Ïx- Ÿ]bšïX0Ʋ^(,àÇùEž³–ÔÆO>$ìR¢I­ÄK@:` Ó6‰á‹ìPR¸E£¤šŸxÏbE¢ò^) FªjæÀ]™ú˜5ËÖðmUÇfwH¨O”Eíçñ*[1!rõhS1 äê÷™øâTgܲ©TÛ\ÆE•·ÒÜ¡ž•þÜ„U³b¬¨,Ãnt<ï± uûY°Ð¹¼…þÕ ÜSÕC Í€²@Áßf£$Ö3“²W3Œ’‘Ñ'sÒÏqàf$åÝI`ÑÎF}º© ïfØCX£ˆæ ÙÕ÷àÝô«ý• Hç•ÅìoËíòTI´*Çbo ah»NMÛ—A FÅÏÚéÀåæ_¨<¬R·³Éˆaj–6?¨u•¨ ×EOsÈGHŸî>M‹¿¦ù0‰4p‹¯~0+ H™Db©M7¢»øG¯®áOÍÈÔ“…EËá¹IaA÷¹Î8¨¯¥©/ùóK±ð’ëàÜf W~ÞðœðÈwñÆŠ¹ëÚ–B6žŠAŸg˳Ööfħ´ë–(¸‰ŒAt¢èqeÏÉU>õ pô–>í1a:x˜l¼q AV&3>Å;þíh_ ’§`ò#Çèi›v2)t,ö:huŠZëÛîÝùeÆžxèýž¹±ö¥Òç ôQ6`0•:ê©Ð'¨“U)óÐõÚÀ^†çµ^‡ôÕª}ÂåQC:šG´³I;A°ÞXr¾×§pç'ȹçî#á,¢©#}ÄÛf~zþ¤»=£Ø)¼¥”c4Ù,$Çnñîj¾’³šîjiâå–æ£LÇ …ð‘{k#UÝe-ƒsį@)xå»M¸qtªœøÊÊk¡PNG$^Ý‹j £Ø¡žpUwó5?SÝþûrõVðÑÐk=åXá7†èׯÐ~¥ D )`Dø²6FHÓû%,FHÃÃ_°¹ Öf{nŽœ`ó35ê…"R¨l}¸„ƒ± ¬6¢kÊuâm·ðe]2U¦IÂßÏ‹W¡f øgÉ”H1­²Ré3é g‘·Ìqßô^ÒèMÈâ'3Ô÷N&]3èe…÷ýÂa¾yq‚ëXŽ×;–qÏz!õI?ïÑR–•ÿ8}K 4¹êœÇ/6±]8Ú yú•wõlÊ5´\˜Ùÿ~Má9]˜šœ Õ–¹™ê'X˜KD79yZ“M˜Î;ÕW#Š~^ºZ~cÈÇ9¿Ã¿¾€•ºùe5¨ÞÆ£Ú‡‚1‹­/QúɂÚz®ú'Ë…ÄlGÍ;݈×e„Žb2MÏûwlƒhô,{º¢#{iç«3U6[èr_þ¸¥ú•Ö®ˆ®e˜ª*ËZ?‘1«øyå's_·\´óÊòUe¯ª˜r¤FÅYiŽOÖ4ìò>#gS†±ž }“ïŒÿ¦OŒã•áÐK¯PFÌìj*&žgH»“xß?8M'Õuæš9p1Ñï“¡âOø­µ£aÕ„ÂÒn‚Þö›Y½uB–4aG‘㺆˜Á/¨TÀ^ƒ²ïVäú8hØfpid¢ y»©¡'%Ÿ‹¶”ø²q²”ÿ*šîÛ½`}ÃÔx{#CsXƺ£3·°Í{c£œ|pÛ–§V¦ÔÕðr)Ÿ‰qY¿ àæ Ææê¾|²9¥0‘•×{>R?“ÍÚЂM&%rÉà4ÌOÞ>·#ü}íÕ?¾ÒÂìÙc±éú>¦ä«mH!•¿a÷[s}Xè×Jo–8Õ¢; gzíå“hƒúžHÖtã€ða#FŠ€‰¥¥ãV»Qƒ¤$¤%©;¥:ÈOD…:Ï÷-:~WÌ dVUt1ã¶f%JkðôšÏ”LÄÑ5ÞÞíù¯ÆÝîD›“Ö¼—"ˆãÌÉWO)¿õ­j\”?7¹Z–¾aNY¥Qç¨P8‘xê”IvðºkÔ¼ç@Ó^Ò>ö#ÖW2ÑL¯¼ÕwGÛÖÒ=@%lÂß„*ºX“Ýñ,)o„¿b)0ÀūƨC´ðÈïÇ&=­Ó-dPpe{Ø”éXÇS£™ôëÊ€ÀÅ/›ÖƒD£¥MÞ^—†SáRcÙÇç®°ìIïÆzQ–Ïþ3y:ëÇÏöL,âŒÂYô¢}ùÚE™²óŠIÚx"½¼ÐÓÉBL¡y7áß"«Ò¨ó„o§@»v¦ÉäÛŽÝH×R?[gä“~ÑÖŒQ’4þ™‰ä ù”Ùlˆo"·°ˆZ•ƒž:bÓµ‡)øùUø[.¿Ø°Á1û‘E:¸—mfJe“Ûòk‚ÜH7Å^Õ^ôB´éEò·•Zè88aøLî*'b©’X?J„•嘄‰ŒŸ¿¡§Â¸ú5š¹$rüiåÁ© PtÙIúö†jËUG÷°±÷€=™bƒmZäR‘kÜU5¶òºü>§º»}½ºI|îÛ$I…8²t-äØ*YtLS=º×ËGB;û‡¶™;;Ùxަ|ó8$ñ¿³j­ÒkÏìZjnb«®Éœ“¹“üC; ÝaZÁh‰ Iª‰ŠèRîÃÁç’ñ™ýM!%AªÛ ™Ul†|ÅïËåx²,ªogð‰êíŽðÚvN©ÔlM8Ô¡Ö(wlHñ˪‹‹.§ÿ–ç‡DYéÛíº$ÍOÈœ©¥¼´"—N)™¹$›2cªpÔŒÓH5½Fð&Ž…WTë ûé(y}}¨aN_ø>«…ÞÞHPRu‹ñ`éŻզê´ÂšÓ!Åm öqZýxÊΛq¬sƒ×}ʃö!‹mÒae‚Ôføž?Ÿ;OŸ8Ï>½½6ׇ·*qÜ ï¥ %æ¦*öÐ t4‚*MYPd>`"ÐçJ«èóœŠßœ·Êò³$,YQ|ǧ^<öÀieÈÏFÝé®_õ[E6ß²s©(ÕA ½»Ó¨{jóëh0®X[0¸eÙåí‡ü^ZÄŠ-ø^ÖS_›îKœ¦*5-Sè%» ?ù”²1VÑþB+weî§¹Hš·¨BLÃóN¥9 ­]Œf²Î¦uïÍçGQSܱ¸Czy áÃM…_„ünO†Îrå«2K“øI #…±âLŒ¢g#†å¬”•¾?‹ÝÓò[Ï'5“ é³ÇÊV•x]Þ†UÑ…¡ÒðØÑ â‘¿‡¤T`”öaÊîxþª™ zI1þáYuh-Ù5‘§¬`釢˜3îû0J« ÷~Ì‚gý>Ã1¼¤N¦Û)ö“þc +0 =¶PrR ScBjƒ™¼˜ö<õ²mK.ÖF!¼uÁ36ê!4I¦êf,Áp“®ÑoÊŇÓt†ÒÍ®cý:Nºœ‹é½ý -Öª`$öõ‚›¬ßúÍV3gÞÛîâl‡#^}Йû°¹ŽÀÜÂë á7‘_÷îTpK: /E[üºœqEö!Š”!Â_ë´ã߀¾“k›º&¶‘î6qû Ë0-}ãRžhD~aý4ºÓ1›Ÿ¡@øKb}¿‘l`f} ÅEêÒ©Iɧ¯"A5Í}ÌÔYWQ–(ÒŠºÄ‘×övœ³UdQÑoêÒÀá6"ëÔ“Ú}Ó)O5»Ð{÷‘sïü܆¥•:8Plö<Ÿ7³­mH%‡,½!a[{]0pÂ¹í²§‰ù‰gX«ÎrÞ »·˜·ž!ùV¢Í©—¸)ºi+ËuS;»óa,êOó;ci xÀƒ.º&êpU[]µw°ÁP!¡QWPΞô0ÿLkuèu©ÆTDYå´€ã2¨|êˆ$1Õ0œ0¼ªÝ„•™¸c•Arkò²yP`GW—Ðݹ:lœïe}¿z=+ç3÷ý§¤oGø9¡G° ÁÝÛ§º£lŸÇÐ …c‰/f 5p‹‚d¿¸jÎw½0ĵšEK Dg=Óß‘“¨ãbÜ_Îþ*Ñ.ÑF™›á¶1¹LëzìÈ£AÂ=»ÝŒÙ7|628§Èõ<ËÄÿô€\&³‹Ø^Ýœ”äà2nb2øø¬ò‡HÎMÞlÍgâSwÚµ^_EQP`‚ÊC€´á°!Mšd²F®b”E±imvswÔ6ÆÙœÇöüœ8¢k渮uð‰ŽnšìÇF¾ þ ‚JŽZþdxH?5%2îÄ€÷â§ ƒ¢Ôåê×ÏMD^iJ¤Â¼•¯3å,ƒdOV]°IH)èu$lmØã»å)g½;ƒÓ^ÇÝÏo}%ņ„säbÐ8§å9¤0ç’¢ Ñ8þj¡‚–.Ô}—0íŽ.ââÑxFÁ@þƒCF:+T=oá×ð©Åþ8ü–¥º;@ wØÔÚ,éä{Q >Å»NŸú¶åû›œó–ˆü …æWOžª) ¼g ö¿Nºð¡a¦îZÂ[Žä²9G:ÄÞ?û ÷¦s:âÑ®¨Z*øöœˆ~&¿Â5˜Ð…2U*­kiiôÓ禂G2›ŽnÑëöÌÏp°ÝÐ]k”z-öuqÿíâKKÎ6+•½–È¡¤o]w8Ä𾄋/˜ÛìL";ñ7 yÌR8‚RAñ0ÿ]’ñ2zʼnKY’Õ¸±¸ïcb$Ý;#öZAž=ð¸|>Êæø„¤(€uÝ <\î)ß6>(ËÀ¶xbâ+B°³Ç­ƒ+áÓ¶%S‰bI¹¢”ƒ¦Ï"ñ ƒtÆýNXõ5!²ß°Ü·âù§Å3Q† ²J¬\_¼J „’r_ãQ”·N™+O§„šæî½#íI|îDtI&T€ Gý¾½SçÍqƒ}/_è¦ÞI0Ö°† Iõ=83d¶ Ÿ†°ûsNPó’-Äo„øîûhèVb89ûÝ€¹ÝÈ ÖK~ø_£*»Ò•$å¹NÊ¥æ)&#Z(­ ÜÊ·"û8bmƒkÅo¿o¢¾H,ÜF!mÖI”hJqìHìÑ¥^Ïé3o.ÇWÛlˆmüœæà‘‘4¦üÊ㽓!Hv3:FýùKƒU¸õówѪí2 ‘t¨)â- ‰Úñ®ÇlVá—J»ÀðÞ€ëOZçÒ;SÛDvO0±ÛIró´©Ç>žu7uX ï,`TÔá,åq¶×ÏÄV¾V ñ£%;>ä9rœþ}î®#°Á5ʘF›Õ7¤œµgÏÒ½C§­Œ°Ì¤×Ž‘ý”²±w™"ÔÜö æ”!BH ü4Ӄ܋QòeÈ@âõdz ,`FšmÀ?ÔÜ£þÊL½—SF¯Ï»·å~3Ñhù]3é“J3sž+ hKðkvxßv5™`~ /ФðUûArY…rvæâl[áSúx¯9öw ‡smç®Ô{aO·Sç‘k×ÁÖSTT)Ü[÷à£5NLšÿªN!;^rG9o€€Z0 à&Sü˧"ãº9xjȌϗžŠòkFæ¼z¥F‘‰Ïä =Þï~ˆHÞ7™?õ_¥œFwÈ7M)c̹:4ÌzñJ>Óbth¨¿É®Í_á_#“7ŒÐ^lþ|ñôµ˜kî+!"]Œ1;Ö)ú²ÿi$‰çó‰˜É!§&¾h@ ¶#fUlEYªI>óØ VAÚˆÎ=ˆÌ Éë@§Î°QWfúÌ>Ô‚zm.÷ûö–í»·¦¤æÂ"[õdQ”у¹ôýs.=·Üá€ÀÀt½#ˆ ±gAƒ¹¬q÷rõ±'–­âf²„Š<Ý+¼u°à5ج!®ÒÏó„xá¨ÜU¾"ŸYëXŒþùN¾3bìÔ¢g…©=¯9ü\êȤûÉ ¿ëÛKûO®¦“îE"èø)ά:ûq(£Ä9ùOh}´OJÅ‘º¢o÷ÊŸ8ž>iV¼Û*¼¦Ä<™6v¼+ZËþ5˜„ƒ@@Ú *ùfãN'ÄgbØ©Vî¹9-£ëy¹?š“¿Ô¸+ ]‰ç†¸” G¡óHwpÆTwL…¼Ÿ%´á «•[.&rcá¶>ÍEX–ã‡Öìç¹ócÛËl‹Û9‰ÚK~œkéPÂÐÛM,ù¹:!cKíÍMM¤k£[xÛ~40ÆÞ´Âxÿ4j˜£-KcSfM/µþ3¿ `L=,Ê‹|aŽdñÛµ­™ç§²¨¼WÑ*_c”è3ãÜ<ÏfÍ×"ÐÃO)6Å *žè°[+Û‚¥Z ­9y¬Vñ™jþc²3ômÖßc¬xòyl—Ñ= f!Ùl±Ñša~:á ¿Æ<D-ft +nî“,”n‰ÞëË✜ \ô{À”¿Ú¯ÃEÆöí€FRïQ_òg(ÆçÛä€óVæ_a? @3»Þ-J¹¯ËJðªÆJQ±â^vPL΢ŸüWÖÄmØ{rœ2‘A³º,Œ›Á-íJ¥à¤2þQ)nDð2éäßÏÓÑ™#eévÔ1Kl•¬5y{»¹IÜÚ©r$ÕP¢pÖ $4uqWàiG>í@tjù82dwÿóÙA³³ª»ßtB&ý)6S3rÉÀ6À@U'\œ7ãÜ—½­RÎÊ¡FgêÉÀ>/æuÒ´Æç»á÷ÕùñÇÞl—L¡½Î“&Þ<¥N¢£¯bo†æ,ì•‘á˦³ò †ñö½ä´i¹ýæ$jÛŠ·öìe8-¡©‚t-‡ÍÍZQ rÜ÷/–•~S,ŠX´,§©”Ž(Yÿ?âtü endstream endobj 6816 0 obj << /Length1 1647 /Length2 10328 /Length3 0 /Length 11179 /Filter /FlateDecode >> stream xÚ­weT]Ý’-îN€àww îîô9àà®Á!Á‚k€@pwOp‚—àÜåñ}·oß÷½þÓ¯ì=öª¹jVÕšµjŒMG¥¡Í&iíl ”sCÙ¸Ø9…j 'Kw7-g'5g!6- ­»"ÔÂðŠñ¡ÑÑI»-  g°Œ( ÐZd€Vnn—@Úâí ²µƒuµô™XXXÿeùk ÀÒûŸÈ«§È  ýð::Cœ€`è+ÅÿØQ@í€# ­®a¨¨&`”WÓÈÁ@××"4Ü-AVìdØ8»ÿ±X9ƒ­A•æÆþÊ%é°¸A€V W7 —òÄ €]@nn¯ßÀÖÕ }=¨3¶rt·þ+W»óß A\_w8½b¯dÎnP7+W xª!#÷<¡vпb»^a€³ÍëNkg+÷¿Jú{¥yE¡ ° ô‚þ˰¹A-¼_c¿’A\A§áîÛþ+V€+ÐÖÂÕÚèæöJóÊý×éü«NÀ©ÞqôþÛÛùï]ÿ™êt´aGãâ~i}m £qüÕ/Š`gç?ìÖîb@׿ˆñ¯žazMÂÂÚìè °Ú q¨9C_Cÿg*³ÿï‰ü¿ ñÿŠÀÿ+òþÿ‰ûïý—Küÿ{ŸÿZÎÝÑQÍÂéµþ1g¯ƒÆ x5À_ÃÆÑÂð×ÀYý_®N GïÿÎùßwëÿ‘õpþ;ü’`ÛW…ظøØùþa¹É¼€Ö ¨•ÀÆÂñõðþ¶ë‚­®Ž 0ðUä¿Ï÷Õ‰“óß0;•ø/5øþÁÖÿ^ënWÀ¡­¢'­£ÀòßLÛ¿7k¼vTÇüG$}Ugëÿ\üE%%åìðeãâ°q p¾^Æ×ë(ÄÍëÿÿû7׿֪PWÀ˜“““ ðúþçó¯•é¿ÑÈ‚­œ­ÿê#m¨ØúµõþÓðlåîêúªøßÓàµò®ÿ¾@ Ð má—³•H˜ýçÌth5Qî÷QãÞn.øïá’:¢‚ Jç®ÀÏ‘ëBåæUáìõãÂÏ-Þ³§-%æíÁnBG†®TàI>™? SOî }›ËvÇûÌôCýXß?3*kFüœzÛ¿G5µÞ?"‘·ñ¸¢ü¹a ¢ñ(zC{ Á °J«M hÇ©‡Á«.<8¤OÚ»¹fèúñ} ë ±g‹”%'•NÄ‚( å€*êmîzYgõŒxï!àŽî‰é‹ŸþäN ¦þì,]ã3uÇÄØVr:n"•æV·`WÏéóçû¥´ àYøc†€_°\5M¼UÄù)ÎV¯È6'YÊ*‹’nF‡‡AÐUÝ|*¦Ÿ#OÆ‘¢×¹Ež¾…¯]“ˆÜ"£Öy&ºöµ”»fã^ É›OùÙsÐÑïù?»â(«j•{ê¾€e>î=|B*Z#ôÜS(öSý¡3†ÂƒëF‡çó1÷~ŸúúÈUJ«RÛ†Cü f©€³¸Ü~!öÜç±ÖN@!`\ëM'~>þ”ÿû~Åo°~?Î8nš¸+ d,/ºv¥W;Þ~ÍYäÿ^Áw’”#Ê,ñ¢y¹½ wZYüg`òÑW¶úç¥JYºxñ#;Ñt³¸eyQÝÄ\è”NŠJ™5³jq¢]”&f€ù`+ºBË õ´=,IÑà›˜/„ÆMo x×Ð }ÇÈï~É<‰ £V¿í² °ÄRT; Õ7^vµ|ó;S =:§²4’ú$m¾õ¥ƒC‹M¸÷B‘!•âm&¡(ÿû6I˜È}#ã)˜–Ù†=¹ŽËØh’˜q§2ý=•Ý(þ—9v9² ï³½/xÞªž˜B$p3ŒÃeêýãâ&ð´ç b>ÑË z¼k³ÇǿЩνŒiQ (:sÄÊcˆ;ȧdÙvª¨¯–îò¢l Q¥ýØU0#„Â{“gÒ&$ü•ƒµŠt×j“~̵éÒ‚:+”ßxWºokU©² Àù/~¶zOyZßךµ$¹ßûiVÆI"iãu®·]ýËÔwm z-7–î=qR¼Š€ûyDžîÄåÖ íöúƒÂÃGXoOÒe³/òj_¯#•|õ°Ëc NŒxŸ•‡;·íE2Â]gXiÝ–=!5/.^]+P9j[_æ‚+É“±è¦Hî&Ïhžú‡Ç¶³}†[>!/XC010§!Ñ2„bqqô|ˆz~Î R5Š-s³÷Œ 4R%"´(¨‡îfê ÎÞ/"†±m \?>½8 ùí>‡€é,¿à'?©O#ÚI¾v€ìÞ)S£3BªÇ–}ªÂ÷Õeèí¬5€‰C˜5cÞg9…¦íOt“ž®µ™úˆ+ÃTup„ ib‡Sn ô?¬*g ®¾Õ»Õo¦,$òF•7Öæ¦¾S¡sí]ï|Ý}àµÏ¾lª>…‘6¬(yÄo ÿP#)+&&^ÍDQêØ!sÁÙU%1~áÙÛð„}›Iq?e÷ÏGm³ø—þµ&ÇÊ3Çé#R£Ž ¯’šyâbo8#ñé7|ûxù S0MUÝGOùëTµoqú›Ÿb«)6ìöi ”ɰvPÁ0Ñ¿\é¿–·)’IŠ"ÏD l|ÿ2É-£ÖPSR‡UÙÛ’NseQñÖ[QßBâX6†áJpÎG`Ð0ñbhØ2rhaìÕGr×X=ØØ”Íç 7½»`0\û¢(T©ë’‹>Êì2';ÝW¤œ ó‚ÛšÓÏÎå¿”cQî±{ jÒ†ÈÈ„ïU¨ì–Á™äB½¯U÷±”Īsý#;ÏŸ”ß eÂR„ðG=–bÜ|¢svJ‰ÛòËU¼.gÎ7†¿„ýPIVÆ8]DXÌmèê1¶o'ZªX†É+tc‰±Ç9éêþ,_ëš¡˜4Æ·ìxŒäu¿—ͽÐÙºýãµ»­yÕ± 2ønNØ©i2öHf¬t/àFöSãS2*n#z98Ò?ˆ´8;ʤݦéÇó lÀð"¢ïõþ'cÙ1eƒ*žÊÉv³‰›ƒœ³x%¾SyNLs¨'¥®f4/Å̇Ò{®¾dW ¹¼¸N`M·N·ÏzµƒXzÿ½ŠÚm ?ø£¾˜.)anz‹¾ÙÑý«Š{kÄ@s…å´¶”˜¥5aŠlá9KôNÙ®®ÔC½QiH.óì±t‚X½]ï !çVÅ6¦º­Y câš‹9ºP~¼$‡ûq,wž1 Á³QY‚±íDo†Ó"ãàÿ¥o£¬|È ®ZÒêÑn¬ê•¶?â)¢³ÙHªÑ{îEß’‰"¶BQäã­ã#æÒù¹„TÐvb>,‘àm1[åè‘€CtåÄä Ë ^yÌÒä|„ÆS¾ï›pE»îÚwÝ—"bLü†b%=(K–ÉÑm.;µvè`ÊŽÁ£ßéT.Îj'6‚]rœ•èó}žÚÓ´ë¦X7°éþÊ'këŠ/ä³v^ÊÕ×Öpš’ç¹jضSo7nS›$•Š/ž€<;ÝuÂr©©z¯óþǽkþ°Po«D\±¨­[IWØÓ©±ÇªoH ”Nñ|ìž6È ½³»¿Ì‚À„•ç¤ÙŠ™Ù£o„ʹ~èó{¾É\Âby>¦¼aîg0[9àWÆŠ/Þ^0ÆÉáîÕ «:(‡‰€ –ßã‹Ã2 ÿÖ0HWSr6âCŒWȉá°³}ç;,w®«°Ðuß±¥ºJè˶RµÑݬïØñúéB‡Ò;“äFí!Ϫ¯1¹• õ‹¯PU»ó$Ôâö@P?[T/ð}”C;s4ªNw¶Ké­õB˜¯RFî ârÛžÍQ†É3‘ÝýÚ–•{âU|Ÿ/ŽðÓ¶Á,,E&å@Lb<)-Èi¦»ìUG¤66*Rjî-¾‰­šûs eÿ"_=ó¡£X×Ám¶ ‡¤[ó'G~zVs<Ûi¢Ãy³n:·IgÜawhLœ·+âFhÎQ;ö¢Ž¾ß§ÞQwó²0XSÔî{<™§9Øø£MiÝyƒ7‹©Qe­¤Ã¤3£ÛWÒž™«Çˆ„xe‰pØuįÜsgŸ’FØÔŠT5‡Ù?Ó¯g½lvЖ`GÀ>ªz70'q¼9–ŠFeLO9ògN˜Òá#û\¿p95äâhûÈYùµ2‰•¤Zf«â!•<5Îéd·-sÔ’ž(Ö0ÞLƳ)³·ÛýʨdÏ'3P`ÆŠØZ£>H£K bÉìq©©Äó¾ ™Ã*(ÉqíY¨ðèI Ó ð—ÎìåSpm“Ú¹nñ|"yÿ˜Wn!\%õe½‘øpÒ¨Ô*Ì"Êùô° ÷.+ã-‚‡Õig$#7»d°é–‚þ)¶i*£1Ÿr²xD6ªè…*E@µÌ¯†\ñï«ØFw“X»åßæºFïÓ2å# «• ¢6 É8烥˜‘U¿îuÖÔ$1¶G׿¯d9°Ãyç•£ìÛ¨[; —»só™¿XÆÈuudÌWÕCd:’sá$¼]EgÄDS­Ãå2;¨Çä8UDL!nûâXÀg-›s©«ÁiÒaç[QBP{ÙŸë}ƒ‘LÊ¥C™`R¢ã*š´˜ D”gûXÇ”ÔIïDÂ÷ïlûãF¨çO‡“´Ø/óÓbâ4—;üQ ÷ú~Ù"¸öÍr˰ȊuÔQqªsò}4G9?~ÌC‚-r¡ÿNô•›:³0ñÂ_¸ÐÂÖ|›”0nRÍ{»¸Öä+ºŽÑMòSAÞëÏ€ÉEæoª©ªëö…¹ˆÉ°»¡4&êP4ÈàÐGQFáû£ŠÁeÓ“©­f3A+û€š̬âùiàõüÛŠÈ ù©&Øq'µÅ¬ôî$c€µ+µ˜ÔðøNëÌR]™Ò Ô~ÜoÃöNsnG,ø1þwÑÄA6t´¸n…4èioJgÝ¿Š,~!\3 t}îvå²Þ¾.1нÌ8¿ó^GÁ ŽõÔ©gÖ¾sî5µ 3?½¥ç¼ˆ›‰,1Wb ÂãqXO{÷nCdâœFç®…@5§KŠ5•¢ì“}5áLO¶ñÑ/î…„Ñ¿P­Ci P·ƒv¢hmô¼ Ue®K¯8óÈ|(X¶ x@æ¶=÷•BçÚ;¦¤™úý+ÛlX¶Ü&HQ=2?·'Ë-rÜmH¶k%'ÙÂùi4R`ê@\fµVòì)ÃLàÃzo˜‚Ë–~ÞÂgúôá㲨èô‚Ú(sÚåë˜{-އÝÓÁ¥Â–½z¿½÷Î33%Ø/o~ç}b •HŸ¨IbW6絡ÖKFï¿ÅÍ÷»¿^”5iGº¹”ý:….þ\û##RMwÇšäZˬ%Leº?Ò×}ƒ æ¶‹¶ð7åNƒhXþ¨ÑdB ¡wöÄ0$J&¥Åjé2ç5Õ¨YPÂ!X¤ÌÒ!¸Àþ6+ýG{]䀮u²§{S´R}µ§bZZp4©RO7{![…¶ª¬ûºò%šQ_’íxÒ“GA4™»Q1ŸÂŠøBÕêu„2}œ1žTå9ìD¬Þ›æÉŸ®6jCü@fn¤¨Äl²oŽx *>ÓÂ,¿B]ú îõ§ëŒý<}OJB:Š$yw¸\(–¤†ZýD¯Ksýå·àÄÐÆgÿ`íxî¾[ºáp«¾™“1ŸeF¶C›áœ†”ƒNw¹‡v—..¬Ð¯aÊ%-Ù ¥bå€ÚEÃ7^}mÛLõhGnaøÅ5ORZKþÁûÑô·_ɤüfBéÝÕª³xËd3p±Òº&‘1Ó×~e>?D_!ªŸóúY‰‰~jbØÕÿz̺ÓõŒaø>: ²1é)í~àÁöm»B3üæ!ùö»— •3\=ŒMF—œÈO…4&WÙ¼štDV‘Æ>°W”É:t{5¿/ôC®+ 7¾ÈӸœ&÷ÁØÔut×·T6‹¸Ž$2ÞÄToYÏñWRòI³å»‹1»õg.üpþ¤§§ë¡ûÑHx¥¯;©hWïhÃ몟Ùùîöc\}bl½Q²6.¥Lßmo½VødáðãyÏó‘ñ‡V"¡Asä \ý??Û 3ˆ39ÖEÊ.X1GÖ¨ºŽY?1Ò×ÿ‰¥Î¨´#r9ò8DÆU!%uHÔóQNΚjÆržL¥!¼áú†¯ Onô\ð‚²<§)Ÿ–1ƘxÓU‰©kø£Jô#Üñú'k²%•3 z‡dOÞá^G¥Ñh ûã<ócÇnŽò=ÇÄÑËìÌHÜ`kÖškûÜ““hŒ F9³p‹#æõ§C­6Qa=[Ç( Nõ¡T]oÉJÒÖk†ÿ%4ƒÉ2”?w©ûè* 4â[Æê 'ÃñGCmÑá}[sXÛb<|ÂÚX‘<ºß°§f¤ÇÃu·êè”2|]µ2¦ƒºð{wï6aê¶•Ù›IéOŸJòX4‘¶SãEæT”Ô[›®[mŸ±«€©P-âq#‚jò¨ŠÉéÎè‹1u&}s' ¿ð(î‚"ȉ‚ñŽ?™ènU¯aŸ(3m/{ÎØo`%Mã´cˆÓýR¨ꎺ÷ÛM”`)ê¹­«v¢™©PA©d‹”Îùê|@—*}5dc¥U#̪ ¢qmc*L¾~$2˜ÍMóÑ^ æé(9K¸,ºmeØëËKü Ð7­âÈâÙ!EL2¹ _[ÿY‘³ŸQ”Ò?jÇlys#+ë¤Ò/[mbvŠú7Z9×Y"¼<€ƒž¥Ú¥ßèœOû­äãñ•kO«TSv-5U_ðF“s{Ç87½¼,„–<‡ ƒS1Uqú, Ìèšu“ÐÂØábóí¹>ߦ€%÷2Å–¤ o©¹û[¿€¿ÃF(Þ`*µ"Ã5Æ€xAÆð³œÇÛ2°gLãëÑéù†âüA<Ûo¦NkÂÚÆæI¹jÄHyßN‹-{ ô#Lþy).¥YqÃZ`€aÊmñi k²Y¯hwКÅþÝr<)ök Mš6<ÿN]–ŠÀcý)q«O§Z¿›”ö@ÃÍÇ4Íã[9ò!YQ7˜þC×<È2œæ¥& ­#ÇÝ‹bÁãŠ"KóúÞáSõØŸ!ÖMÕ ß8fˆ©Kw¶IüJ¢-N£™o8î¤1ÆŒ zÚ·­N92æ£dúÀxc<ÞÄuK«¸º/ªô·30òLë¸){‹$†uÛÔßäÓ4*)mËæzÛ¬  c”IAZÜŒƒ]q®å©&n÷Àù¸öKvmžt6yíW ZÛ€– ®ô¸Öý‘üe Dª=3mé¾ì2ïÿ Qh¿Pðn ­ 3'fôêm|¤FÒ ¶é5#w·Ù—äU}ëZyÓga ý€+>c·&#F´{¡v>£ƒ¢ìtÕ –X²ÏQcvª^ƸôȰŸ I"OBML¥(æg?Ñ)e¼¼ÑÍãsœ=MÍ7 ?Æðª§½}!x0‚±^°«î5\;,©Ÿâ±„m@naO_»a¤›—• êùõÕ¬â(ø¦„¹ŠzUu;‡—èyR{i˜1¶ß£ µ{%·ÓÐ ÓNð“/ š±þ¦«š½Ÿ”<àÍ¢¶ íØçAvæ\Où˜v%EÂÞ < ©Lhv²uÒ3~m[€üß…X uiò-ÔÎG‰èiÝ/ê:&}Kén&O9½Ý`¤£´ª _¢€ó`€HWõ¹,O±œp?üͪôÂAô÷×ÿhWUÙå^ªÀ·C‡n+] ý+û;aÚlÙ9¢‹„B s4ºÒðIm¨—N¦þÚoì5¸-Ðn“=#'¸¦æè9Ãëã±±ûB‡C85Lš5 ®;ÓÆBÑØó£Ù¹‹°Qßâ¶‚?¾Œñ7£œkº;åàëË3N‘ÐÞo„åÝ©(„ø‹0{Â}êçD4²=–óFòLÊü™ÅŪl¦)§‚ñÅ5ù¾(f[w3“œº.ôjÔ>Å1äÑTÜŽv5 L ¡Ø–Páy·CѨÓ=¥ºw9¢¨h@_í¡ÁR¹ÏÊÔp襖1ŽÊŽï)\Ñ lÑž¤bÚRŸ2nst¢Z\¾äémö#~§'È«GÆÅ‘øv±?­Nµ91ò[@-6(in¸™c‡,zˆ—4ޤºqO÷#›v\EÞ(Ž[Lêݶå1ÿp©õ¤Må€þ¬y2^mÈm¦~ë´kò–N$›ãÈÿ—¢´ÇÆwÖÏù3R‡ ·°Ej’Ou¨„7ÑÇJ$¼Æa6Å—t ~?OÕÀ›!Õ^Ï6ÖƒáË >^D^e*ù¦ì}u¨ö¢=£úfÌ\Âï¦ò­³gT NÍ8¬)ÚÄ9¤8X6ê´Ã–õŸ‘hPÑ‚nj¬­Ìy+)U” öÝIª ‚ û/`bÞ+ GÚühTKl溬³4üÔ—ÚdºV÷… Òšéäë‰ôÉ26¦ã®Õ\™&³òb¾5KPÏF4*5láœqÐõK{[Q´ú“iô£¿yèûä„1S+¶?=®9û½ê8¡‘­uœŸ®Ï!*«4tªá©6{L%a”·u>•÷µ~~añnpý’ä­AeÉ(þÖN´ÃNh{zŠÞ@ãÁ*ç'ɯi!Î’µßï”;Ð"Ê&ŽüØfš6?Ë6D·D¹“=¢ùÊÓf!®º¾í¥ÄÅ‹X%I‹ °íÝ~ nLÞÚÅæu3fŸ9Z¿Ab5^Š|­X¦‚týoÄ'§ÀÛ,¬D²J®›HfÓ¤ðuL¶Š°õ–ÂA2ÙÔ2 ©•è]íꧪúÏr5Š÷S(àì ü?X_Q–Dñe#äë—µÒ¨ ´c›én·&³—©E3ž’·B9x|µUöèx³Ã2#4ޝ53׆Úa凘ö·"qqøÄ÷_†s,È'éÚŠÕ±1—2vâ‡MµôfC$íÇna¨„6’Tóm !÷Žóp”çŸM­ùLjîtî=¶àÔÜ%;7µFetxõ)yéÃ;ïêÑ1.p®ñ㬸ä ×ÈÊóB!¦ t*þ¼Ÿ¤¨°Rl1™~Ê$§ÒVDy9³’açËά¨§ÚäÏSä¤ÍÆóÅ-¤c¥Câ=!*+Íšhð14M …Æ@áÛTRî÷£ÌpqwB¸n‹*C Éäèe^˜ EÓs{üÚõ¸^½ã¥ƒ¦½—=à_~? ´hbÏô(häŽ7ž`Š˜[Ü®„5Ñ4;„Ô^ãïœÛ꯽¨É&„Gýé”›ÂE)èU1FAQåLçì ‡œ®Áœ–=ó3mw'ÄËYJ™ÛK êoD:+.¾F˜¸c8–¦{ÙF¾}À×[<ŒˆEyÓ¦4jð׫¢“ÁI&ÈZBn´f‡5 ¦YífqKûÏ¿zD zv†w÷𺰻TÙ¡™¿Ú+ÿ(«Ê)W’Ô(a®[ºG“g|R1)OÔÏF ¹áû£H½ãh]sùöÄtxÂö‘‚F@–†‰³œC·Á wè=͹úâ‘¿K¡ô³Óµeu‡i’Æ’qñI™E}~èîQ:Ev3?ñ‚î0NãÜ-G}lM®Tˆ-P’V¢×xÑIzz¸kïa½À+{í÷HãÔªÊü²rFœêQ.q¿ÞVàB¾r¯×Y´‘­¢‡È,üþˆ„‰ËÀ+u›%I×ìsh§7ƒ©â ?È9òO‹Qa•ÏlO“ÀÔãRÌ£Y±Œ¾#ÓÝX¢£¥} ½ÀÅ]‹NùЬÚ|·›Ÿ#¿ªøº÷tʯÑ顱Áðù+fæ­éÜø[“:žvù^)¼ H}çV¢S‡gª{…#y€•zcÞ¾^++Ž£mÛÛZe–Çë‘ 7A˜ðâ<D:0?°]±ôd©·àF&eÓz£pÆ—ItÚJ3Xýy¬ YQãÏnÈÚŽtŸÍŽ9¸]BòñÃ’óˆwrQ6<á­ *ý—.–JÔì€xή4ŽSE¶ÃÃí`¿(º7’¢o©KŽ”ÌPªÒþ†!°€ý÷ø;ùZ¶bRo3û£èçÎêo‰é3*=Ý4™%Ze|A½’:yì]Iè­_€¾Þ‡óÆF:É®%WíàjhêùI  2¡˜Ì¯Góä€I’D¶UHA›t}Ø•ƒõ1»e]$s„¯>+ÑËŽó–Jäü4Å×®·cî]¬âZ+3ÖóVê²÷üOÃ4­ECÙ&™ÁÜ÷! ÏÌŽ0‘eø]ón'ÖÍ™µï¬™æ¤Í:“š2(µt¿ÎÉàJqlnxWsù.rÃ*`ÓýC¨î¯æQ(¯Raæ„fÍ,zï+Ä‘‰â©à·¤¾@Ä2õ/³š?K0ÿ±|ôû=DNqk¬/Ù7wÖâw©§Ñ(2±­“ #ìÙ$ % i- È9(CžîGlä~.8_ö½YÐx8óP0A²ÀÉ.Ô/¨c©!²¾QÖvÞ_øÞõ¦õ‹éðœ…â®Ì怉aK×~ ãqÑýÁg Âi‹SÆ J{´0<T?ž¥Â&3¸A“ç %(Õ/¹ïõškDú…”±Ÿ+«©!N16ŸnˆF\‚9†üÚ°˜<íüÃÔmÁoCMƱú³¿ ÏžÝ]Eîb†û¦|^žíOí¿•‰+I§5@fŸ ¤Ò§oÄÑ-¡yêJÆz«ùŠÆ¼ö& zO™û˜íƒ¬53hç˜XýÁÐU»¯€¦^²–Öºs^°aÒÔ”Á½üCª^6hºcæDkwå–*¡¬2Có-ø¡œSÌ p·~>±‚Ép«ÕÜÌKÕtX2éÍ+¥³ä§#d‚3Õ‰Øú¸HeØÆ©ÄIiêÎ[“›â<Švœhd*½rÕ«Cﻀ&q^{áñmgƒ±ÊâM4¹¾v"[rÖÜu:;MŸYC‹ƒÏ³ÚÄl·î÷GR^)üöÄ `ºm3¦ÌÀ%øþ!a+"—Yí¨¯?CPõd/öžœ•V¦¶+`$cKÿ “õÚ]Ðk]AKKÇ!NO!Ó¦ëeA—6;‰[×J¼³ìŒ»*,›ßv>vOƒíã—ìçƒ*ö§d#¼í»DÓð|˜_^ÆøùãÜn®d" ÞrÐ )nï]q¤Ð¶¨Ýô­6¶'t-QOf àò¹–ʆQÄ0È}誕҄?§]¸®òk\ß{K2+N0†ö‘ <(N|7öVóTÞõ÷Ra¸¾¦kïC¶r¹[°\n*ü"ÊUà@è°ÜûNp¬€î>¸ã"€ËvVv…8›·EðÏš¨²dDj7Uò=­&ªÃ7¾ô]:©õ6‰.×U†¯ËÁõD’CU£:á$³Žœ¡ïÃ[‡äá7JžPÀÍkýTç Ï™>”?s‘È¢ìFýŸÞ m³¿[†c1q—©PÄÐ búþh"´ë?½{¡àtzP<[Œ[ÜFJyBɽö…6Žib"OÎøQD.}IÌåéåëZƒXÛjJÐI?|/Vò°°™Ń­|¶Ëzwz µ;ãv³é°ŸtÉ‘÷3]î'Oïƒëm#úB6<šÚ¬; ÕÛiº_yU8ÌTn'pá5oÝ~64Ú¤ d©ôO3Ç ÒsJ2ò@»¼B³ÂGEg/ˆp9Ï‹@Ñ éçµ43ÊTG#lCRwµL±Àd×îgN®ïîÛ,´tÉ}Qt-1´'ª‘fm@ĺ|ï5­q iy”èN]d¡K¯V)‹LAˆå/ú»ÃSVÁÊ›´J?ò™.kzET™xÏÙÕÚ?‹±.³Éb«æ}º:ž!æH|þá°‘ß´Vœ¶‡úƒH1q;þ½™ˆ+‡íè– Q¡ìéÝâ'ª '?;0!…ëZÔ§ƒ²<<ÙA`jeÇñ½àdX8¾ ߘ÷1ñŠT;è6nøúÑ:‘ endstream endobj 6783 0 obj << /Type /ObjStm /N 100 /First 1026 /Length 3948 /Filter /FlateDecode >> stream xÚí[moÛFþ®_Áw(|Ë}ߊ±c·i;‰“´id™¶u‘%G/iÒ_3»³Ô’¢$Ëò¡8 0—ËyfgŠk¡Š²àÊÁ?ÎÖÂàYÒãYZàYFÆ:UÀ8ëÂ<ÛÂK<»Bqßž§x`©KœäyÁ½)‘…2Ü•…°>PªR „m‘²…Òqž/@s%/”·¼”¥ŒÃ1]h_†»ð%R“(Î [ da•QHâ  R¶pÒ£ "E ‚¼ð¾”)¼ÀÌðZkp+@¼F@Àü‚ƒe 2œ90Ñ8&È‚³.AˆÆ[Æ€|P:¡z F;p8 )¸…sÿ:à¹çp¡`"— Wè@ð¥*xàà 2qnqË!båp't!„Æ ^Šžø¬(!ŽB"3Á•EÀ4ð¿K¸¡ËEK¡1àBCä…å <Í áÃcg)Ài\¸-TD–¥èIgá1 öª ¤à¦P’#)…„xrpx§„€Jô§–e^FaždfÁ­Q_éÀ,íJäàM#è«J­ ™â!1&°Ð;Jb²:i«æÀÌFH‚Aʘ²8× L‹|1MÔˆ†„h…òÒAVc´uÉ1³ øACÜ‘”HLqƒÉ.$„“•kÉQ„VHB¬ ZÅ5ÂÊ`þð`! M…‰®@š¶¶iˆ<í$ò•(ÍtHfJÌÀ‡˜ÙRÈ€E´Íƒª£Œ |ÑgF TrŸÐI¤ç½?$àÿuÁN†óp!¬ý—ƒ38¨„“A?};ö9Щ 9Š ½ÏsÃ|¨xéP€0/°AŽbŽÀhŽp3ÆCBšI(âéž#4ŸEï§{ø'Ç‘ê€gðA½H:?ãøŠîDÛ»“޹O‚~D#O\ÑÒpF¬•á/I˜¢ –qì ´»ÌþOÔUÇÂdœèA*ƒ4*“ã97«6/“‡ECXïU7¥1œ[fŠcÝÖäçd¾^* Eû@³Bø!DùøeǺ烛Ízþè¾:ÊîOaÏÿö0ªkü[¹YS>’8ø>äÄ(A˜M°D”þ”Í8§\óîCwrQ‰e,æOÆ?å.JHów-i‰ +hô¾ÿ¾ÇÞ|½« v2ÏŸV³Átx7ŸL{áú´ wžŸ¿}ùìð»£/žñnŒú׳B҇“/ÅRè^*‡NøÐcOfƒjÌ4Un6mT]µ­r»Xõö—ߟ½yòÝéðöb1{1??8œŒ.»ÍS"‡ËtRÎò,p¢8­En0MëÊd¬S¹q>7î ;dGì);f'ìGö{Æž³ì”±×윽aoÙ;ö+»`vÉ*vÆlÄnÙ˜MØ»«¦ÃÉ%›²Ù¨?»a‹ñe5 &Óªá(ä{;êÝéû~Íõºº^t;ŠcŠK€.¤¹ã G馣lî(e×8Jå~BwnòÓÏì—ÚW/Ù«†¿~cïÙï¬Ïú·à£Y|Éú³Áp8N‹ÛHχ£Ë È98qö‘õçàä‹þàcôåEÊ.¦ýA…y©¬@~¬æõ0ÐñÆ€ &£Éþ½½íC°.'£0©X0‡UŸý«¾ Fý[vÅ®†Ÿ+v5YLÙ5»žV}Ђ{óõî¦CŒÿÃ>BœGÕl‚=Ž+6^Ü^€1Ãk þ úÓjT TT,F?§ì¸-fìû´¨fó!è÷i1™W—£H„‡†\b³êvm™UŸAÙð eØœÍo¦UÅæNØ"Ë7ö™ýɾ°¯ì/öW5´ÒOì’~ï?zw|ÔN¿³‹Ñ°; )hao°G B*×I(×&á ¦Tʘ„É«î~¬J±Šáø\<ßÑ…j¾zúóñ+ráyc©ãj,mø7è˜|VÊ…È.k ¾Ã<±–â1A|±‚²^·—˜ ,ÂÖ(ÁkV5¢¶Á(Æk9KÌÀEœ¼‚ ÇÀÍN«öé‹ã—'?æAßP¶+Âi :ìnµÌ‚ΛAçÍ Ë5Aw:‹¹yÌc|–õnH¾‡cÅMµ“>ƒW:<²ÓŠÿóñ³·g©’¼žÜžNüóƒÕåšBÂ$àb ÝMÞ¯5›¼\:¥ôk‘÷4†oFÂz¼ \Üá©!±\k6@b¥LmÄ£%7ß©'9|wöÛéÓV(7ä7†R¸J¡²PZ×¥æü6÷ÈoZÜŽH÷‹yµ[i‹ämJ£Yó‹T¡úÐÑ\ª/,Lî¾Æ™!¢”F¥\éGÚ9òwv%÷,²Ú¦ðÚ”³ã÷¯ÞžudäÁù¨?žÿ›û?ÎÍä<|i»Ü;L²]8 Üs9¬¦Õl8c_[Ù©é8þîèÍOA×¹Âã> wȼí Ót^fÛHÙnÞt½Cv™/T«ä/úYßI¿¦=ÀÝÕ§vÂ¥¦²¨å­ŽÕúx<˜\Ç× ûðê ¼<T³âÐ6*¤Lø«³?Cín–%"Óªiu ‹õ€L¤ÐG” bѪ˜ýP˜¬bÕXOhK¸ • ’T-j@CýzH·×¨xËÝX^ûò\†íåv¦ßhÍo:›rY²½^ÚùeÒÂ^¿¦Êê-~Ø´©ZÅß1QÉ- ß—…¹%§¿-£•?â£r]-–àü°ŠCHùÅÅ<\â äúaVáÕ×S ØÆÏ1[ÙÉp:›#D pôØó~vñëðr~3‹_&vÖMòÛïVäû¶|Ü(Ôòñb)_ï.íÛž–"øícÛ&S„ã ª¥&¤uÂuüÂqgåÖ¾aYQN®xIæÊáæ´VÎóGQnãþ{EA½â=ÑP°Gû( ®ÝÝ®(·’ã Ýpu]:O>Šnk7a+º­ä?¾ÈWæÊ©GQnÓ~¨­ç}׈«× =þŠzr“zQ²TO?ŠzÛú›7gŸhd_ù(*Þ¯']QTo¬€B70ìî¥éËþu5ƒÞk²À^®×ÓÐÕáwÆáù_†—ÐÅ\c0 mè*èSˆèÀð?Jpþð0.< Å3~ùŽgóZì(ÌXùp!&z °ñ-]aãíÂ’0kD<‡ïÀ(Ä©è‹~9ÝUŠD$òX\&‡sKl„Já%ÖGB A„ÙÃo\‘㸎/vðãm1‚„­ˆ°»Yå¢,'ÆV?üš<V$‚Ì£Žã¢hÕÆŸ?¯86Ú ­Ÿ"Âìa•àñ!`%ÆO#Bx"¤%B‰=D Eª $²AXžˆ$3ö¡¢<CЂ×#Eš#Ü¢d*6R%B'QšŒ‘† –v'в)Ê‘—$!X¨=ÅA¸èí#J©ÄF'Q&PN •b¥v‹U[”'¿% Í!È*-y"ü¢tÊ@­“L“§ Ô)uL„ùEªÙ”o6¥u;…p)cün TK”OVù¸´ÂzÇA –\–DøÝbÅk¡ ¤ð´´JZ¥¢õP*K·´’{ˆÂß86†'‚C™|+--\Ò¦(¡RH—dú¸þA!’ÞRP–{8P•TJUI¢Àm‰ "¡x܆Á>H–{ˆIcÛ3 ¨î*U’%ÓH\Ê(J9²JSõQš*;tM‰Ð©Ú±Zˆ†(CÕBÙäIKÈUôF PŽÚåbÁ| (O•]ù¸˜ºT†G '–k.*ü8-°X-©ê´š@å‹v¬Ô¢ 蓈±¡d׆ʭ6´Ðh»]”Z/жĸ51™ç¨uÒÎle,FÈf‡Ixü Tç꾓º%åù>b¬à©£"Ž?æ¤&u,>õjYá§Ÿq5­©Ô»à>i-Q©Ò›=d…‰RmMž¤6ü<”ªF‚2ßºä ·VVø9)¡H¦§ìÒ&MßwlÁñ»µ´Y¢å-õbõ’XW¦:[,ÏóÑpŒ\ÃV$;ªd¸Y¿; —Q¨­ŸÎÃ÷bŽü Ò´ / §w,/§Õç"üP4ßÔë—¬mrH$Vwr0µ…é{Z}™ÇŸÒv1”C¾™¡ñM†Ý–K†Æmf¨t“¡èbhlÆP·&‰a§FeD›ƒkÚXvràKÚoæ mèXÓÛ µËš- U“a§†Zg 冼Án3̲]—k&ª‹ƒÊ²]Ù5KF™ì%R¦"!“œHÈ<Ð+¢2X¨-°PMXß”œLK’MC²X‘œáG­Ã‰R€Q`¤ÛXVJÞÌ-Ç[º‹†î„ø¤»iK–²d Yªl´Î4–²¤ØÂ¡lè.M'à hÂof(šÎèÖPd@f Ã&Ðd'ÐD4!·0lMtMd@åf†¼‰;щ;žáŽÛ- ›0$…Û 3tqµ…a]¼³ ó 4œofX61Äk ýQ^  endstream endobj 6825 0 obj << /Type /ObjStm /N 100 /First 984 /Length 1639 /Filter /FlateDecode >> stream xÚ…–MŠ^G Eç^EíÀ%éJUŒ!!dx²üHmwZr„5±«ÿî}¥ïqììgíegÛºÿË"ã8ìÅeöœ%Œ8`akhášî]j'þmÜ8ð:ü¼3;çy°ö?ðƒ¬çpö¢­íK$‘mXÄáF~z"]ï"9¯ºùê?U‰¯óøOÏŽ °ŸntȳèZtˆ-z"‹7G‡øÝhG?Ýèð+2[t0-DݘAtø£±Rtû鉟ǭüd‹F‡¯DGÌï!ïP ?þŸ°dŸ'ZBêê3ôñz‡úE¼ÜO¼Û;ÔÇ(¸'[¢>&?É’¸´Ÿö’ÃÑá“”»£ÃE<>:ÿä¢Ã' ’èP^`Š<~z¢¶ ':ü“4:üÑ rŒ¢Ã?2Ø…s¢ƒo¼Ñá#ƃè`^º9:èYJ;:|$J7:H–²E‡¿(ž~GÇÆRÝÑá“ôx|ˆ¯Ÿü§Ç_?ÑÒ+‡úIýä¿â'ÿÁ>ñvú$ýS´8ù?ì—ñ“ÿ²ø‡ì'•':â}ÆŽ—a[tØ·—Ë^^ÂÃÑù;:|’NBtø$í±èðËœˆòIâèðIÞÑáåNItø$œèðIž—(ø/•èðI£èð!{¢Ã'yN\>És5:üÒç‘èðIÞMϻ޽ÿí/~òÇõïíõë»÷?Õ÷ëù—ß?úë‹ÿßàë7>úûëxùòçOÿ|‰?å—/?~,þ!½ê(%ðeÛü?)‡À]­ ¤ÿíy~û­J/û[  ¨» Ô(C åÀ×þ>Sàþqà½5]à}ÞïµRh)C —Àoü} ¤@úqàyj ¶o¤Ø¹C ÕÀŽ;'êXHy}àï‘yÜ5ÐÚÀDŠ ¤Ø©-)–H±C lI±DŠ ¤X%ÅZR,‘b)ZI±–M¤è@ŠVR¬%E):\Y땵%EÓ•u¸2ꕵ%éÊ®Œzem¯Œte Ëu9 ½2ÒrÀ°¤.ôWNËA†å u9 ]’–ƒ ËAêrv9HZ2,©ËAÚå i9ð°¸.i—§åÀÃr຤]œ–¤p%…ÛåÀ‰H¡J ·Ë)4B•nI¡D ¤P%…ZR(‘B)»’B-)I8mN«Âi­pZN„ÓªpZ+œ–„Óá´*œÖ §%áÔA8µ §µÂ©I8uN­Âi­pjN„S«pj+œš„SáÔ*œÚ §&áÔA8µ §¶Â©I8uN­Â©­pjN„S«pj+œš„SáÔ*œÚ §&áÔA8µ §¶Â©I8uN­Â©­pjN„S«pj+œš„SáÔ*œÚ §&áÔA8µ §¶Â©I8uN­Â©­pjN„S«pj+œš„Su E+)­pª&Rt •”V8U)HA%E[RHÁ@ *)hIA")¨¤ %‰H‘J ZR$‘")RIAKŠ$Rd E*)Ò’"‰HáJŠ´¤p"…R¸’"-)œHᮤpK 'Rx …*)ܒ‰H¡J ·¤P"…R¨’B-)”H¡ª¤PK %Rö@Ê®¤PKÊN¤ì”]I¡–”H„S«p¾>ð÷oWÆ œ¨ÂùúÀ5I81'ªpj+œH‰A8Q…­p" 'áDN´Â‰$œ„U8Ñ '’pbNTáD+œH‰A8Q…­p" 'áDN´Â‰$œ„U8Ñ '’pbNTáD+œH‰A8Q…­p" 'áDN´Â‰$œ„U8Ñ '’pbNTáD+œH‰A8Q…­p" 'áDN´Â‰$œ„U8Ñ '’pbNTáD+œH‰A8Q…­p" 'áDN´Â‰$œ„U8Ñ '’pbNTáD+œH‰A8Q…­p" 'áDN´Â‰$œ„U8Ñ '’pbNTáD+œH‰A8Q…­p" 'áDN´Â‰$œ„U8Ñ '’pbNTáD+œH‰A8Q…oÂù/‘´ü³ endstream endobj 6826 0 obj << /Type /ObjStm /N 100 /First 984 /Length 1821 /Filter /FlateDecode >> stream xÚ…˜ËŠ,G†÷ýñƒã——sÀf5 Ã0/àÅYŒŽ/øñ-UgVK‘êŠÕ™õëú"þS]ê(µt©Rz·ÿ£`´Òù˜…¨Û¢–i *}çQä°wf/mØ;“Koõ žoÇ(‡þeH9jµÊa!¸Ï‚:ØV­lou* ²×ÚQÀš…®º®&ÙŠ ¤Û7DŸ6 ú´“e!útTS–ª«iyð(˜Ý²f)8Äb0 U¶¤µC‡Å ÒzYiÚÄÍb ¶àB UW¬´s4ª=ÕæÑ¦§‰Ólú”¬³­4Æq¶¢Â }´…Œ9ÞtÕ “eJÚD¶uUµå–©ªêêè¶’ÂöžÒêFØ×xhu¥›4ÅÞÓNêNiH;)µêfvRê4eí¤ Ù7Z-bòd±&êJŠ™² H³Úˆ§®¦)k#¤wûë$ › "1éÐ:+rÀr&qV¥nh«ÃºQšÅÐ jÄC7 1,FºzT©!›<²ªTZkÚɦÓ÷¦+}:lJlËÚ´)–Õ¦ílË 6Žu<žÚË: Q놷ýÀc˯ØH‡Æ°v61=íd×Zu¥ìÃv²Ùl¥¦Í3´“ý‹¡ÿ•,†vr Z íäÀñHc–¡›§1´“ƒmJ bSíäh†´“£_Ðà£`ТÇ0 “-†¾<cÌFyVƒ ÚÉY'Þ¾ÿþí»ÿýüû/_ é©„ÿ÷í»lÝß×ÿùéÛ×_çþñ‡ýË>êÚÇ/_¢Bs *Æù‡o_ÿ|?7ÿùó·ßÎÇÿúÉ>>øñÿè·ÿÔ[0rÁj v©Ç¯°næõ>ÆËüêŒ_õ?Ó…O÷ùñJ÷¹»È²$;;CiîìðZa>w;™3Áú!8çF°GÁ4Ã9œ`Ûr<^Å ÒF°FÁž âCp¯Lj‚œ ŽéûFP¢`M›äOO…3ÃUœÂ‚Ås¨Ï”NН¡~¦ø>Ô×Ü\C=×PÝáÔœžÚg¨žÎ`wXtÙ(P¨¾§„wGIÇkÁ)ù$CGI›ÁHIO)iŽ’Ö6‚‘’–RÒ%mS²Ä’[JIs%˦d‰%·”q%˦d‰%KZ²¸’…6‚ñ`´dq¯9 ’–Ìî`ྌƒ¤»ƒy#Ï NÏ vç×ׂ4£ d‚äNڜԢ RAw8Ðæp x8Pz8;hC ")”äHÁ†DR(=àHÁ†DR’G >#åRHÑ€C£/ï:â¶^÷Õu½\Ÿ×Ëy‚?=Ó±†v†”WCúŒuv£¦3é )¯†ô¦©©)5Îtòj:A:"5i†ä,)­–tígEªÐ‚¼Þ ÅÔ,÷ÿ3ãsƒ.K~nÜ"³‹¼ðô uFN9J«½)€(õ ä<(­ô&ú$CçAiõ 7Á{*øÁ­tÙJM'9ÓI«é\7<:ˆç@]~eü¾áWO¯ o·ÈÍE^qºB]£–«s§´ºÓU¡~h¤ü8J«½ ¶(˜fè,)­–ô&nJ-)9KJ«%]£%¥Ô’’³¤´ZÒ›`„&µ¤ä,)­–t Ôƒ’ó ÔèåHbáøùk$¯ŒÏ‘¼þIrŽä¸Ev8É‚Ó3ÔÙ ÉŽt‡“ô‚ÄfÔTÐQ"¼ —Îg:h¤¾ä¤Ð°ƒ†ÇF0B#)4ì aÙFh8…†4Œ×‚¡ávÐÐÜÆ årÐPÛF†(eˆCDÁxÓPzÓC4/J/8R°!‘JI#RIAJ )ØR#)HI©Ž”º!¥FR’R)uCJ¤Ô””êH©¯KFt¤WÂQΑâÁXr¥T°;AÙ†’‘þŒ ç;q¼> Å‘—üq8`~v8\ iÎwbõËXgdíº`Ï ð™ñy^¿Æœ áZ\èÛÝ;b7jšüÇAq¼Vˆ©C…s¨¸;ÔEP¢`š¡3žXçM0H%…ó¡¸ÿJ£EêCá|(VzlQ© £¦ËF0R“úP8ŠÕ‡®‚ч"õ¡p>«½ FˆR çCÑÚF0\©Hm)œ-EÛ Ñjì© #E6¤H$%ýiÎ|B6¤Dó‰Ô|™OȆ”h>‘šO8ó ÙÍ'Ró g>ÁR¢ùDj>áÌ'xCJ4ŸHÍ'œùoH‰æ©ù„3Ÿ  )Ñ|"5Ÿpæ´!%šO¤æÎ|‚6¤Dó‰Ô|™O`CJ4ŸHÍ'œù6¤Dó‰Ô|™O`CJ4ŸHÍ'œù6¤Dó‰Ô|™OÔ )Ñ|âÃ|þ í÷ h endstream endobj 6827 0 obj << /Type /ObjStm /N 100 /First 994 /Length 3315 /Filter /FlateDecode >> stream xÚ•Z[¯Û6~?¿BɃRÞ/@Q`ÑÅ. ,ºE›·¢:²ì#Ä–\INsö×ï %Ú¤DIn€¢49üæÂù†C%Š™‘LQÂ2C3E¬Í¨b8P<ãLà€d¤1:…Ȥ¶8 ™&8£M¦•~ÌŒ08Ã2ËPF2¡G FÅÏ(Õ¨N‘Œ2‰ú¤Î(ç¨PŠŒ Š%…X¤ˆ€U©Qƒ€Uå,°ª®r“QÃËŒZŠ«ð“Z‹x`CÃ`ÎQ‰;ÏüÁÉ(G5¸N è "£p•RYtˆ˜Œ)ç5ƒi…Aô˜3¤…ø1 x0R'„ã"èbe!„œ* #ˆ!DU½ÀHdœSÜQäÌÂÈ%A<0—K¥qÄ2® ¤ÒB$¹g`: ÅIn´Âè°å ’‚h : ’‚*”ƒH ÆP ˜Š#™ AÑ>Á`dPŽÛLHr\eBIôƒs8wÖsH…Ñ_:À_Ð9"G,ŒþR0ƒJăc”L£6t•s´€ ‚ EÒY…ÒYE`›ÒðÓ@$¥–âFøŽFŒÁàX#1f Œ ¹(ž¥apd œ†™PðÓ€õJaFŽ ¥0i4±âF<ÓœZœ™–à¾B•Z+7§2ƒÉ#ÁnÕdF37g3cœ xïF4³³Î@t­4WÒÎXãd1!ŽB.3"C 2Ê`ÂÇ٠„p³‰#щÌvà"‰0›„¬g›—ï¿ùîs=œ+$¹®ÿúòÝ?p,Æñ/EW5ÃÈêq¢«¾ŽÁýü¹ú6àOã~þðC È@º ˆ•%”I@r$Öìª%‰Õ Üä! 7x(@¶Hb@•¤@cW=O! ¨9‚ˆ¢ä×ÿUwý˜øŸ¢wËS~lo°;çl¡KºøLÝ‘jîÏÓ«ö¾ª¹¦‘j½ÐÌÍd¦Ù«š4ëT¶B)| h½ƒ £ÀšT ØŒø´f!é6 ²1 L|RfPÅ€I>©€OJîÆ|RI>©€OŠíÆ|RI>©€OÒnʘ^*I/ÐKª@’$`À!Éwi8< ¨!v\±Ë“Á3@¸,Ö\öIjˆÀG±S'Xœ'¾bù:!¢:á©èë]”(Fc^(¼®I5OÒ…‚넸Pˆd4xP(¸ØŒ ÅŠ…A¡àtÅ…‚'  3;€q¡àÉBÁ‚BÁä à„À’••±Š+ƒ˜¥·xJ!§ZhJµ+š½íÉšAÑ éìPûä»ÛÝÐÂ÷mk¶Ó€x4&ž{k„Q£Éd¥(ÙF˜ÚB š¬&$ Ñ;€1Ò},™õ±KÀ˜NÉ>–},™õ±3@÷‹“tzô±ÒÎúØ%`L§Të8@¹²ënðP€lÄ€* H€³>vµµwƒg€¶ÆjÐ#$‚ æ\ð´ó&Ñv§’AcÚQ²ÐÅ]d[—ŠȈ”ñnÆsÖ(¦š?˜U‚ØA`‘I©öfyH·£ötÕ€&Êìª0IÐDÉÀ A%y¡^(¶sŽ1/æ)¤Â[çSŸBr¡9 ´ÛšeL •$ $Õ6 01`’O2à“œóÉ#x i!`‰$+“ 2I ÐBèm§xœƒ>hþ||o=Œ)Κ:‰9¼*ÎdvŠ€?‚® LÆŠ$aD@nV¼÷&v×÷Å“»¾C_s—Târ»…¡³6`hïÚ¤Ùˆ­—>ˆäs Ò8Íx2Qy@%f·XL%ž¤ ¨ÄÔ`|5¥-d•ߤ ÓIÀ€YŒ¬z„$³hÀ,ª·œÄÉÊU|à,fçÛ•Ì¢sf‘˜Y4É,0‹Ò„ÉXšd ˜E̦÷ÆÄBgD£1ÑèÑH@42»³îª|Ü“ÙI¶ƒßY$ÙË‘̼}W¤…&h_•;€ñ5MHP€l0rÙ$ÛW´¯fÞ¾ÎãöÕ$ÛW´¯fÞ¾.E ˜t9èfͼ›¥¤·pŽÀ²’ã>ìÑ3ôaâ”Ôþ 6%µñª~..UŸýþáŸm™ÿ6Ýð1s@Ù‡ÿòãçÕcWš}øõóo?áïѨìCQþy«ûz¨Û&¯šC>tõ)/¤Ôx­H5mS9!»:ÞšÿßÃ:;Ž?À‰úR33Ó»þ˜;H Uw©›öÜžÞ?fz,Ó0S¶ÍתëA }¤6\C›OUW7'\ã÷}å[Û}ª›~ènNû§sÝ£ó‚M!+®õG8 áѺêº\œ>R"ônÍÖhçÒC\<ÔÇ£•®SÇqpÓ<˜n‡·ªs³ÞÎþ½)¯]{êŠËGüK-ïâí›;P'­õýZǺ:.ÅP¾MAQ‹“ ¬ZîXøðÚÝ¡¿Ve}¬Ëã_)ŽÊnÇ#ª—fL?ÓÂiÏí_¸¢¦\+ÎñXŸn]1¸£ÔbÂàU‡:/_óª-p5Ë…Þ-ع+3ãf[¾Ë]×:ÛÇû5ÜÚÏH¼êþw®_ó7íôìñ«î¨`“Š!ËËáx.NÈ%Íl¥oo]YÁš¯Úз…±Ëm+¢„Ëü[‡d–”Gj!Y Ì=itdé¡úZ—z0V¨x$:šïê¯.T¦ Pè±![º›¸Ø¸â0º =,2èKÕ5ÕùT5PÆTüÃs;Û¾/ºwGþè4Î]Ñœœ÷,:Ö¶¯OPkÀË*(ø1:=¹—~Î,^l]q´¿½>NƒËPm»^ÛnpìÖìqP÷3eÑT~(†"Mp¹ V—óò­h¦B)Ùrù¹Âr)Ç+ré|àÅ>N*Ëî.ò¢ÃÚ¦„Ú0rí»Ò‰ÊuQ;?ì¶Œ÷×’u9Ïõ0÷B}Y4ùkuª›»'"Âm÷ŸA~*¨Á,¾c;ö £åÒ˜'d=®ÞÅÞÁƒZ±'8"J»eéÐ^ïñµÏÄw‰mØç‚‹ÒÞý8T=ˆTÅe¼§Åã:Äk²½Ž·$pëî!’¢úKQvxÒ雟[ºwHšF“ÃØÖA#êº:þTî&/A> Þš4(XÁÚP_\³¢8VÁý¾¸\ÏxÁLƒpÍõ6~V~O—g Y};ŸéÛò}a¼ÝB¢ Ï-íZúÖåÕá4ÂÙ»žÚÁय¼áýZõ÷J¾°é¯'a¹>ºr?ÔÅù§ÿº¶Èø•S=纹Þ8‰×º“AÙ»@ëºm¶pÆ›æD–C?çôLV7uYœÏ¯Eù¥wW#—¾VÅàš,ÆÂt-ôJ*­O·QpåKký««ÇËJÊå™8;g‚ gªoUyÃ¥û-ר”Õ·+\önqöF@@‡wEí…(BÕaöZ˜Võ±uD#þ÷)‡v?ï«?ñ†e÷YˆÀ' m€\Ô’¥…ù…;G|Þ[úé- Àú|zL`ßW\¯ç÷ά~õ-3ã¾1K _‹®¯‹=feOê™PruÙ]ÐÐQ91•ƒŠY¢4·‹‡FìéÚÖe€ærçªhn×…_vÅ"hñ€ŒÑÇi4ýÓ¹U‘|¨\74ýËŒ¥œ+›PÄÝKnÍ »P~¨ÎÅ{upå~­gÜ~|7ž-ðâ0RœïYŽ}à["}+÷t] ûTìò‰…ð»/^ÏxRÂ÷¬{[ªw¸Ê×»}üoí;W_«³Ûhø^ôçAú›:ö¡nsÿø‹äj†rÌe™^{'¥Ö¥NÕð–­KÞ3›¯ËÜÏ݈ݘF>o =½~*_þNK„Ì®E¸Íñ•†±ÐjSÄDÒ+Gïô¦EUbEú–ÊI°ñ9²¬ÑÅ5Ýk(`Ó£XI×LÂöÜ?Ôò×÷;ר¯ãص—üúöŽ-(¡lG¨†òåWôc2º¯8y~`hÔ–¤û„٠7ú0~‰Ü¥rˆ§PwCljǾÂ"Ê׊h ìêÉô!–qnžÛ¨ØM_ÿ£ÈÙu\ ̱Oîìa{±ODêiOÜöå—{ß,ßjy9äÓ×!÷9¸«lo€‡P~)ú/\—=TÇâ‰àº††lxÃ8ÙÐŽÍï#ûõºè©€à®Úg¢h÷© ¿áç\¸û¦'>Å ÝÚp7üUtÕ,KåVU¸ßæI-ù¦øôg3Ü¿zm³%éj†+2–<êDX¶‘Ÿ vó(ÏÎf-Öm~”{¶!„E%ø6qÝÈ뮽ï78­ о=‹”`ÜzÜ9þ“·ú™(Çñx ÛÅùÿ $ÿ endstream endobj 6854 0 obj << /Type /ObjStm /N 100 /First 1052 /Length 4854 /Filter /FlateDecode >> stream xÚ\Ms;®ÝçWhù´ð?P55¿àÕ[ÌvjŠ­øª®ced9wf~ýÀvb«O“ÉÂÕ$ÀHµJËiv¥å¼K)ÛEÑ?Í.ê.†àµ]LÕï’]¬!éU ; Áî-qG”Ø®hGÜü*í¨ÔüI¯xGM·è 1ÙÈ¥è\ª¦Wu—r#»j»Ô|¶";d#ë”L,vwÌnA¥1 jڱĤsTÞåèÔ¼ËI ׫²Ë¹ºnÝålŽª“òûT@lã5ýÃÙæmjP)fŸÔRÿSƒCaÕÍæ–w5û(­ìjM6G«»*ÙÕÚ®Åb4ÙµäHØ©çLWÿ茆Mh'!º4íDý§sï„Ù¥y'¥ÚRv¢(íÊøˆlC‹’™ÞD %ª’„ —ÍnБw1Ã+Š<ÆÄ.“^fŸô’õ²Ú ¢NJ¥«½$öÁt¶N¦jôÁt6r ÆiLÑP‰ºEÝO6EÔÙRÑà(f´ÒmΓ¨³±aŸêlœ4>ôRgã,®¦³që7èl9˜EÝs fél9[ôél¹³t¶,Íì%­iȉr û¤³•"~ƒÎ¦cö’ÎV£…“ÎV9ø¸ÛÅݧ†Äêa ±Åh³%­%¶q“Φ ¢¤‰Æ]TN]MgS'Û`IgÓ) [ÒÙ$›MEQªÛ aEŠacK%½Å.5—B÷$k2…b±,:%J5”YÄY/“¦Œ‘ºÇG¨zY-4„›&fp÷i‘þ3ӳΦÛ Ù2·ˆM¡”™Õz©³%uʧ¿þõÓ_þïðõø²ûÇÿ|y}¾¿»¿ÜÝŸ¿NwÇëÝËëç‡ã÷ÓýñîúŸoǽ™Kº–ü}゙¾/zSÖÕdó¦ïÇËËéü¬=Ø€¤9´yÓõøÓ½=éÚo?=_—çÃÓÝõrz|t3H6î}:ßÿáSÛºø÷~úËÿž¾ž®¿ê<Ü??ýíoCw>ŸŽßO:1+åа¯‡ËwŸ_¿|9^ôãÃÞrøû{ÍO×ã³ßž¶nÿ÷Ãáz¸;½ÜÝÿ~x¾{ùv¼?}9Ý›NØÐ9³1- ¡øÛáòr¼»?<>_WãôËéÉIjuæØŸÞøÕa§þv¼\ÎÆ;óFH};?=¹6ä—Ãóã{ˆ74Ž/Ç«E¼®XÛ7øxÏN}¦ :í¶…Í—ÓÝ‹ºzM¼øy:ÚÔyn¥òÝËùõâ©–CÜ6õþüj w÷µgq&Ù¾Wé»öu!ñö]Kõ“Ç4¸õéüY3ý|¾Ü}>þ~ø~rÚÓHEÃÿÖ½y¤k§üÒØ¿äìóõw»ÿ^Ä…-WÁšwŸ_¯§çGgeà°¶Öõòåzù‘[9lÜó]—à“æ‚>åWûÑ›ãÍùýîëñðòzÑQô7Í{ý¦  ûºl„¡=¿î¢e«ß¶áäëùîÛïÿyÙ[­†·œt³ÛÂFvü|Vi¡1uÚ; ›#MÝõúüöô“wi[fõ¦ãåøì¡ õE>Ÿ—ÃÓÃá_ß÷UXÞžØúp´@;=9_¾úJ½×byõôüò|÷Y‘èhV,ÿüðþüüåôè·æ7k?h®0ºÐŸn©¯÷× ü–$@ì+²-ðv_ Û÷Ù}¬´}}æ÷ð»{¯çÇ(ï>Ô"ň²›eµ¸Cõ0ò^)h©ÿÞË,)Ö÷à<çݪòóÓ§ÓËyï'‘׃=7+ÇŸŸØNxnëÈ}gÕ‡›‘ùoÂã¿÷¯}ÈÈïÌ{“›•>[^‰,SkëÏ{¼¼^oãþDp=>ÚÇÏ—ÓwËÀ¬Üáåüð†¯ôEñ°ú£€ê®LzK¦'­=^5¿>ŸžÔ¬_¬Oç?½Xê¶¾X–-áøôr5ǨÂowÑ(BŸ‡ý®½ÅæGJx‰Ð‘­+ÝÆ7D\༤"z[?Š’‰bC"6Q‚³‰ÞêÔ¢b¢ºªôW¶®Ô&ðªûÖa|5%ŒAL1Dc güqÊÈ[¦Ä©Ñ\Ý¯ÕÆà¢¤ ¡) NPÄ.‚†A ŠF5«@d>æu¼²u¥6×|\DP4‚F­Îc4@`倸##(3r ™sæ1¸¶_«Á‘”+¡) Ü«É*„"#¨d³d•‘È|\¤ á™­+µ <#¨2‚—¬W…#¨f.Aµ PHFPm\2WçYºRƒKFmd‚) –P`&#¨1Š¿d ¡øKF@Z“ZžËžÙºRÃS ë›ÆGA-2‘@-%(k2#›¨Žón…Mµ&Ø”í·PŒq1\ü¸š(£Œäf¢‚Xeã‡à"•­ÝÈcæÌÔ[­1¸lüüè¯?ŠŒŸD(²ñ“`©’“‹ –ñ“0¸ì¢1:³u¥6gqDi— †Kf6‚rDe#¨@+V/æä’ÆO;3u¥6FW¢‹ì,ÆPi(2‹1T#zÞc¨fÄP1†jEî*ÅEu¯¬ ±2+ÄŠ1Ta!Vš‹Ð*PŒ¡òje9 è¼O€"srã1yeU‰ÕY%VÉÇE¡Y“‹ •]„|Ò¼¿BÔ#šÍÀ#dÅ8éêm6©R¬dRz,«˜ì`HtŽØPaceD” VñDóØJ)2ì èv)¡ÉJb¥…Âß*% ¨'°B‰zpXAA *Þš\+t(Ôa]B·+Hš, V"é  Î¬BR 3+( õÝÊmý\«p>³­À¡ÈÃ¥#Ý®i²pXiDUFÚ‚­0²ó¶µ„°Þ[e£ÀVØwÞ7AÝ.ʪf^mãê½Ý–KmR.5#¤¡çK3BudÍ´6#DPk%F PÌ­’Ç nË%™”KbŒˆ€XÛP hÛ[l?) VRlG(0Í6„Ú:Û c®ä¶\’I¹$¶“P¸‹m$E”pb{uñ‰Ï¯_?/Ú/üæ‡ Þld °š—‡*Y–Š÷:ÓO¹Umïêë‚ð›ïÆ3‚‹8Ö€e~¢ò.Ö>]³mh’ ѲñÁ^ 7Äh·$šð¼ì„…Ù…Œ…Å…Nª.,XèÓêëb7PÂõ¨{·ª¼º—ßýdN^Ãä¹+ö¡»°bºánã­ÍkÍR'`#JÝÿûßÝ_+”¹ó*r^ì‘/Ë‚ŸéÍ€–=Ò=s(lÌÜO úyb¨Xè'ŠƒõH<ªƒŒã·[½Öœaõ`l““”ù9gPæg•!BYsA™¸,Mpò(Ža’ÇEd.¹ë)F(ëçÃeNgLPæ'Ä‘¡Ì]ó¦[¼VœÁtÏǧuÏGšiq@™»‡”¹{(B™»‡hóö!êŠc˜©{—œÖ½K eîÊPæî¡e˜„\ÇÝui¼¹ÅkÅ1L^9Nx^Ÿ5*tÎR†2ç,(ëßyÀ@Ýé© v›×š3¤NZ8¯“ÆÊœ4ŽPæ¤1JÝÜIã‚eîõœ'@W–<´ä…µ¼1³Ó–+:o¹a¡— ¹°Ð]_†…àb7PÂuòÊ Î^IXèô†B÷c?yYE%c¡»¿”ÚºGª3´þ *v9óç2Æ2§–1µÎlÆÌ:±yF,ÑhÎ:­Óê¬f̪“š©¥çdÝ9©°m(KN5ž ]qêšc¤eÉIØv”%'aÛQ–œl 9Ø5”%'agP–”’0DÛíªS¸ÎžD<µÓ'…î§ŠýÔsR0}='ßSJò mÛ#ÕZ§¯búœ½ŠÙsò*&¯sçÔÁ޼ô´7äÝâµâ ¦ÓòÚ³N*–ùWa«S{Ö¥°¡I.lX˜\(¨«Õ5ÇXkϺ+ýÚ³.ÁR¿öl² 섪J xBŸ/ŒIí6¯5gH‹Y­.KPæ_ eþ}QØø6”{„¶D µ ÐUÍÔæ5S["6föHK =ÒRÄB'.ú¨„GõAiLjS›¶ã­a›<˜`×Óz0À®§õ` LªìzZªœ¼Šc˜Òc)!se‰%ØõÈ ¼¡é¬¡í\:m°æ—%xŒUÖ=¹kNÁ:q°º“þ¬O°¼“þ¬O°¾“þ¨N9b¡“+4éÁò lÞÍXê_Çìù£>eÌ^ÏUÌOOÕ eîÝ„½ëÎM2AJa4gHÆÜ85Œ©qfP_û1@Eû68*8|s°ÕÂÛÚwº3èÛl •*¾-ØZD’bˆ¬šE?ûà„ºÓ¸p¤2„·ÞìŠc|ËùHª{Ž û¸œp$´;—ŽT7°z°¢&'.'Ë»–›`ÃúÁÒU§p=^Q±—#’Co9áH0úú G*ØO}-@µ° ûË$a†¶î‘ê ­÷ ©a»œ¾‚ésö fÏÉ+˜<çí:Ä~8’Æ›‹ÉkÍP'®`âœ7´ãЗõOÂ2ç õyq9I²¡énž@½íÖºæêr¸’ÐP\W:@1¡3‡º:u²á&'UË&ô{Â8aãú`±«Náú»A#êáÍò´ã€ÑzÚqÀh=k8ú«X1ÌÐÊ©ÎÐúËBŒZ3úû\¤¿0Ĥ¿2ÄqÃQÎ_Äåoþp,¸Ä{¤:ƒë¡ÜðÌþþGÌŸ¿AÄóçïqÄüy‚4NžãònôZq†Ô³«a{}alØ\_Ø$@™/lh“*ö“>&,ëïÒæm—êŠc˜ý QsûA!£æ,öƒBFÍYì…Œš³ØOúIÅ~ÒÇãf¼[¼VœÁô¤@­x쇈ŒšíØõÚ±"rJPÖßñD®ë'oÌasµMOÞb??cT¿Ç~~ư~ïçgŒZרÏÏu®1/P –ùr0>ê&Í1м­pâ´AY*Pæ@QÓû¡£ž5öCÎãìÌgÂôŒ@MiìgŒzÒØÏ$V·}ÛaÙ7–V‘}c™ O`®J¤2;}_šaÚ÷¥¹(sÏÃ"²ïK3,"ûÆ2}c™ëp—¬[¼VÃì;µ Û¯¾S˰ûê;µ ›¯¾SËèø"öV†Sßiå:~rÖuÐÖiжŃȻˆ+Ã}Ù0eX¢÷M†}ßÙdØ4õInãìl«2Wœuß7l®ûº}c“aÕ76Y0ÌþÒ=‚Ùw&y|ÞÔ-^+Ža.›öËÆfF[ï±oØ1ìmú¶ÃÖ¦o›1ìlú¶ËxgEÖ_çpÍÒâXœ·º ;¿¹Œ L\‚ÄK¾†P’›/¡N@Þ|4}r’ó%OJ&(² @‡Sä ¬ þ‡¼}Ôý7¯‡_™£õŽM7ŒÈ;_Ayß+¨m"ïþ}Í‹ï&Ð+Ö° êwÈÛU‰m‚¯îÞŸõº±=ÆA–¬Ý‚,Y“*Y²UÆ®5¨B<¸Úr½@c‰ KÖÛ A– z€Ð­-‚,YS*“ÁZÒå!øÚèMðÙKŸ’°©ÆR‚,ÙkŸ’ KöÞ§$È’½) &ƒ½¾)ãÔnëZoÐXJ%à >{TdÉ^•Y²W$%Ád`ÿ“0Á'{ 7Ágo‚ CFR€$Gø)`H‘1`"˜‡CccÞ¯ÕÆÐú¡FF[p´jd¸H.§9nhúø ÍZN%2LøåT"ÓjX•o]s 6ûà6{1@6{5€öh9”È0×C‰ s¼JäÐf`óhÎÀöŸ_‚+Èr¨‘ᲜId¸Š„¾»šf¯ÿ’RÂ㛣9Õ ÚÕ!gWÂuú¦ÏwWsÂôùîjfLŸï®fÆô¹+Õ7G—Ÿ/¡-{¤:C›úhaþ|w53æÏ£)3æÏh)3æÏj)3Îÿ±¥Ì³PN qß~‘àÿ9Ï{Ì endstream endobj 6955 0 obj << /Type /ObjStm /N 100 /First 1050 /Length 4240 /Filter /FlateDecode >> stream xÚ…\±®-· ìïWl™SäY%‘ A"mà"\ˆSØÎÿGªz;»lö]®4ŠW#ñÜé£_åš>æÕ¤î½úìûÁÖ?¾ürÙŸ™åªuî­ªøþÀlW2ö“\Õt{.÷VkûZOc½uÀc½ØÜOz5kxŸ]RÆbú%Íu=i¹d`4­—(FÓv‰ûCåêMök Þu¡ãêZö[t^Ý;|õUñ>»F¯ððkÌ!ëÉÊ5Ì÷›mýS1šµk pÛúÈp[ÿ5)k —–u=ÍKæbzéh‘Ù¥:öhæ—ºï÷­¬µ=ÆÈ:¬Þ.[X÷“\æ²çâýòª{ŒõÒ5ù=ƒõ˜®¬÷\V°k©œøz”¾&RÊb¤ Ì®,JŠ5Ù‹“º§»)µ-õØ×ãùµÇz\SÞ?Wm¥ÂM×cp[£µ¾0¬Ç5Z[×c]£µÍézÜ ÐÖ+×ãMºè~\£É\ĭǾ3¤–5Z]£- lÿtÖÅðÙ5ZŸ /[£u›xÙm, ëq¥Èš®l·Ç:†n·¶FV·ÛÂZgÛ­­Ñfó¶F[o¬‹f¼a6uî©·5À®Ç5š6ÁO×hÚçþéJ‚º>ºÝ–oUDzF³Úwd§·`’+«­ Z£-–ªYÅÖh^:>°Fó†ø®ùWÔ²® Þ?]o¬¾Öz¬×Š?BÝÛzìm¿¬Ëzœ p½±••-k´>öÂ|v­§ëý¸Ô Ül=æÛýj­èx”õ(àx­ÅEñØ0Ñ­)^«¢ÉŒîp6iS¿~üñ뇿ÿë·_þ¸þù—ÿüñçÿ÷Û¿ùýÛ_W²|럫/’VÝøÇõ½mÀV©mÂÖ¨Maj3Ø:µ9lcÛ~þúáo¿þöëŸ|ÆwÇŸ¿~úéfýV÷«ƒY¿5Ø*µ lÚºÁ`¶3Þà¶²«`¾áÄ”‰ç;ÐõŒ¼Ö Pµp#°j¥ÆˆÑ¤¶ˆ‘R[ÄèjLúî™AEzŽé99P¤çä8‘ž³QÒs2œ|«$8LJ8¾Ã”½v:lP6¨ ¡×Imr(µ!tê¯01ã»ã;Ì4ÆJ?+Æ 7ÂÓ<=o܈ð¹p#âçýk¿¯Rx¦`A€>2ðÉ À•‘¾n܈üu§F„ÉZv|ˆg¶möfáìµ #g¯59Ø&0r°­ÃøvGÆ/½´{ÞÄ5…;ñöD #ÏÇf0ò|lc§F$²qGAø“_«1mâš¡ðWy² ø«œ?•ó'à¯rþü5žP‚ð·šÀ²p—k ü5Ο€¿ö@økœ?Ôã6” 㥕Âf†U?Ä3ƒŠBcœ;ÔãÔ¡Ìcn ÈÏ6¹ y*ƒá)ÒPx¾#ñKbŠò‘‘¦b܈4•°HÓ^¸iÚ+7"Ëú{9Žy×.Ò´ iÚ;5"NÇ)ª|çôE•ïœø¨ò]3´öa®Úø5Ñ9°5nµS f…3 b… ^%ãuOùÂY©ÂH±&·*cfÄŽJ‚±£7BgºëŸúatX„ž*‚¡§Š@#tׯ§,QY¤§,é;¡ó¾ï×¼,é)K*|d„ŸÊ=e‰ê=e‰ =e‰*=eIßÕœ’²¤yYÒS–ÔùÐÈ`ãô!N“Ç)Ê’qú¢,'>Ê’I†Ö>Ì5CeÉ8±{5ŠØ½úC(ÀŸ?ÀÎáb>³'hï¥i{f`gòtšÉ³`&OÆXÏFmȤÉÇDÒ’àìâøÓ¢ŒPeQF”ª‹2¢åÁsç¡Ò#:‹2 TlX”­ïÕÉîÖr kQF”Š‹2¢T¬X”­ƒ ÆÉ£R#ÂTJv|ˆgUD+gUD+gUDgE@gE@©Ô°(Ú$A{—°–KX‹*¢Ó‡*¢Ó «Ó «Ó‡P HXm–¡æš¡…„ÕÆùƒ„UáüAªœ·´•4mã QÙE”Ä}±_ørîëŒÝrȹ¯³úàÙ`ìÜ(0¾C•{êÂóë¹ï³úvÀ¨Ü8a4nTw®rîëìý"ãÌ›¸fpçÂã µcÓµcÓµcíáµ  9vÖf‚¶}˜g ô5NÄŽ5NÄŽ5NÄŽ §bǘ6¸¯³÷]ï™öÝ3 ±dÂÙƒÖ1áì‚ÂW"XxÀˆøOJùÏ )Â_yø}v."q eì¢IâŠÃdRXc×D·&–à¼íGvâ-qÙ`ìŽIâ²Á˜–“¸l0&å$ýíí· D÷ÄóTï÷£ý˜3ñ|G:Oõ§Û×yª?Ý¿ÎS½évžê="Ò-è<Õ{¾³œy×.˜îbç)ÿT|ĽŒu§¨Þ“ÓÕ{râ£z¿7¦i× m”ÿÉù‹ò¯œ¿(ßÊù‹ò­œ¿(ßì e~í ÜÛ‘w¸¦pÁŸrþŠÎCõ[9Q¿•ó‡³*Sž8«²÷Þ­3mâš¡Åa—Oev™=„üÙ\ðgpÁŸ=ÀEø-ƒ+ýÃ\3¸@;x¶vðçFðç<•;øsžÊü9OåŽ y–Êlï9XÐ眾úœÓ×AŸsú:èsN_}ÎWæ3j–ü)رÙóÂÙFÎÞh0rö†ÀÈÙF¾xÆ€q$hGù0×îÄÛ9}Caäô ƒ‘Ó7FN2fð8M„ÿ½5ïL›¸fh'ø«œ¿ þêüÀ_åüMðW9üU¾z&Â_gwÖsMá‚¿Êù›à¯rþ&ø«œ?,êÁC¡à¯ñå£ËîÔsÍÐ*økœ?íaÒà¯qþü5Ο‚¿Æ—"üM¸J6šoü5ÎJëà€PYYOD#ŒSA{aœÝ1Èi„ñžU)½móN90ή)ätÂ8Õ2§ÆéNùtÂ8݆N±µÉ¯ Ò #y'ŒœN§2š]œ+D‡ ÷C „q„¡— )!v¦@Åα cAu¢:Ñ„á4õO†ÏGx¾wÀÄœ‰ç;ÒÓÄáTÍ&§Ší4q8Ul§ ÃYŒœ& §‚ë4aø{Ì™7qMá‚=ªØN‡SÅ]>xœ l]9}P¶®œx([OîvŒd±åÊö´q¸rþ l]9P¶®œ?([WΔ­Ó+žÓ…áV¸wek¹²=mnœ?„bðP@Ùºq´P¶n-”­;G e랢õsÍÐBÙº? Î3ÊÖg$”­;Ot([÷‡("ü® Ü»²µ\ÙF‡ž­P¶îœ?([wÎßV¶£ÎßV¶£^,¶²¥´-›*[ƒD¥pú¶²¥pú¶²¥pú¶²¥pú¶²¥ð#Þ¿.y¦}÷ÌÀn…8Jáìme;Jáì °W9{ìUÎÞ{•/žèWIÐÞ•­åÊÖ G©œ¾ú*§o€¾Êé ¯rúbËȃ8þšq{W¶–+[ƒB¥> þço‚¿Æù›à¯qþ&øk|õL„¿õî]ÙZ®l q”Æù›à¯qþ&økœ?ÔäÉã¤à¯ñå£ó -Ùÿ¿ßVxT{Æ7ä©òŒïÇSÝß§ª3¾ÚîNÃÖ£G>¼©ÑžŠQô#Ñú%Jµf‡­TjvÈÐJ•f‡ ­¥Ð¤Ø"´øŒñ1“ R®R‘Ù!@+Õ˜ú³R‰Ù!?+U˜ê³Rˆ¯äø³ß¥gÏ”g‡€«tçÜ¡;ki”ɶ„29À–P&ØÊä@¼%aò&9{ª8;”[¥;æ½Y‹P*èJå]B©ÜëxÒ7N\’%ySš=šz­Òr‡Ì¬¥S¾&øê”¯ ¾:åk‚¯N‹ÀDÀ{’±7…ÙSÙ!Ôjé<ºà«S¾&øê”¯]\'õÚµuRŸ]ZgÂã¼ïÞ²ÊZBÐ߀%öá´î–؇³Žµ^bN3²Ä>œ¢/±Ÿï;€rû–jO¿^ÒKlÃÙõH¯Öq¶mPAt³Vˆ±OD}ß|¾÷¿×Òï_1 Ïw¬[ëõrå#ƒ{ˆ°´ˆ¡s´«,°¾ÿi„3ë»g†P©Œ¨‘jTGÔH5*$jä »Äé5$›òÐB²½ÿQ„~ÿ> ßa¶HQvõÐã‹+øëšÔXa|ðl0 7 Œ;Œ¯’9¦MÄ3ÛÀ^åì5°W9{ ìUÎ^{•³×À;ôÞFDÿ½éÌ›¸¦pA_åô5ÐW9}¨"Ρ 8ǃ*à<™PÞ/ÐΜïžÒ¨– ªˆóLD"RÕ‚o†ÚlH$ºë”S$[¯·ß7’ŸÿÈ)#tß*§ŒÐ«œ2ÂŽb·‰Hw˜rÊ@ò¨¿Ÿ•9 ’ü4HN¡»T9u„nSñå½E_å6Ð×9}Qè.TNè3Ckæš¡BÒ9QH:ç/ IçüEœ¿¨ã!Pÿh ÜûA‘ä'E‚ó—õvÎBÑ8ñþçOÀßàü ø|ùÆ|ÿ–Í™6qÍÐ øœ?ƒó'àorþüMΟ€¿ùE„ÿýk6gÞÄ5ƒ ´sÛÁßäüuð79hi¨“ó‡–†:ùòAKCMdÝýk¬á °ÿ2× endstream endobj 7056 0 obj << /Type /ObjStm /N 100 /First 1050 /Length 4244 /Filter /FlateDecode >> stream xÚ\»Îî¶ìÿ§P™¯È1÷Æ `ø ‚i àÂ@N ÛyÿCUÑP›âÿ~+rvVÔîHb+W¹Z‰v©µuÐ/oøË˜ÿ­µ\שÊ%Òë:ÒK\}Ù%uþ7ü’QdÅ¥âåkÕuVXçùkG¿´[¬£qÙ2´24}ÉekÓËÚüoÙåEÖ™›_sXXãrocŽÑꜰ¬1Z»|8ŽúÒá;®p]xz¹¢T—+úXãΟT±…¨ÛU­­ùu¿jÅùz\µ‡Ì1zà,Ó;sºQá1OÚ‹íŸôâk¦C®®}y ½æI¶aWo±|‡_}Œ…cþ7Ô|Ž1ê 3<Ú5vègHÆŽý—_J™‡®¶'#3ÈeNJæLÆ:œœˆ,6çï®u·˜‡UæPÓe²þÚ.Ñ‘yØç¡‰®Ã9šÎ¸ÍC™£i[Îs^b¥àpŽfsÞëpŽf^ñ×9šÕ·9šMds4™£¹~0Gsëp›£ùœÎ:œ£y_´Î©\‹ªy8G Ãtޱâ0'8â0óOjQü`ŽVµ®ÑtŽVcåáœö8}T9 àià4žL˜Ìnðß ÖñÌKãX‰g"‘öÛc/ã`[‰d´»{°¤»Áœ‰ç;Ò±—£åþØËˆÑrì ‹vµcóM›Ú±ù¦}ëØ|'mëžóÓ3CZÅBÇm°ñ tØx l$OPvIa÷ÛÛRjó37Ráeýb[jåã ŒÆÎãàF_ÆvÀ0¾.I÷¼‰k ·âìʇn0rzJ‡ñ€h,cçˆÀì-¨½[þ7´„Ûÿƒ\ MÒe£ðÇîŸËþØýsÁ_ç %o ܇ª¶]S¸à¯óŒð×9þçHÁŸpø#Â?4CÛ>Ì5C«àopþü Ο‚¿ÁùSð78 þ_á=ûPÕ¶k ü ÎßRÕ„*Œ›’”Ã%¿T5¡êã2 ŒO…Ñ2´ýÃ\3´K*_.£ÃÈù[ªšPõq+Œœ¿¥ª U—±Ã8¸Um»¦pÁŸpþüñåôèSN_€>åôèSN_€>ãWOEôS°m~í`Ï8{ìg¯‚=ãìU°gœ½ öŒ_<Ñ·š ­¤x¬yñXAŸqú*è3N_}Æé« Ï9} ôñtj¿§hIñØòâ±?çhøs޶?çhø‹Zð<¡ÂY9ÕHñØò\nà/xF6ð<#ø ž‘üñ vðœÜŽðGV*7R<ö¼xìà/8ü篃¿C£ÚÁ_åüuðWù‚Ðþš•S=/;ø«œ¿þ*ço€?§þ½ó‡Þy ü5+•;)G^<ðwh¾ø;´£üzþ…ô‡*m ü-+§)G^<ð×(èÝx>¢u+¼¡WÈ"Ê×]…,¢ü¢VÈ"·Îþ†õY:.׫BWÑÓ¤A-W!º Ú—Ôr¡@!‹( ²È-´ŸábÞÄ5… j¹Ò€îºÐBWQ®B(dª´/#øã"‚¢—¼•ö7´„\IûE§£ã€üq¥AQåQ¥}Á 7(åBbõ»5è¸âæšÁŵyHH\œÊUóÊUÅi©^¼Œà‹ YäV|_Ð>ï@Ë38ùm…‘ÓYå +Tã:B1® ¥köÙhžÈPUŒk UŸ¡PUŒwu QÄxW§EL`}M*eÌ›¸¦pAŸ>ÞÖ)TãmB1ÞÖ!WËaM†(b&Úg_°\3´PUŒ÷u UÅì0/ðÇû:…(b¼¯Sˆ"f<¡ Š˜%•2æM\S¸à÷u UÅx_§PUŒ÷uX ××¢ˆ9_+ Š˜g®?û‚åš¡…ªbÎùƒªb~˜4øsÎTsÎTã&VÆÒ³;PE9§½õ¡F@ßv(Ðð «*oq°(þkbÙ­çÉ©¥”bE-¼nÀ‚ZxÙ€õ´ðªËiáEÃÂ.`-,#Y†íI¦¥-VÒÂk,¤…—@Y)J,£… X…?pÀ(%Y~íÙÛyZÿc^(`^'`ý^&`ù®’cñ.’cí“L#÷gáïiÝ•S¸@ŽÔã<ÖMáÒ9–MáÊ9=áÂ9Ö<‘¤â÷gÁi™„S”æLáº8ÖKá²8Ddáõ4dáå$dÉ4ñxú‘ÖùX¸ºýX¸XùXxQõXxMñXxIíøþžæŒòYÕ´¾‡ð,\ ‡l,¼`‚j,¼^‚h,¼\‚f,¼ZÂ"[“E¶> ût…Þ,¼ ƒZ,\‡X,¼„‚V,¼‚‚T,¼€‚R,ž,²íYз´ž‡Î,Nù‚J,¼>‚H,¼<‚F,¼:‹ …Pˆ%SøÛ3c{ZÇC_^uA®îC.îC®íC.íC–LÙïϾ§Eteá²>Taáª>Daá¢>Ê þâ$aá’>aÉýþ,òFZäAO.çC ®æC .æC ®B ^çB –LÉÏ"o¤ tdá7¨ÀBï3ïRû˜hÙð.%½e–û]J=xâ]Èì¦9…<ß¡–û]Jzo,û•l®8”oû Mˆý‚&?)Î)üœÛ»¨½çüôÌâEKúfBÙ/ZÒ©ì-i‰Tö‹–´D’ ´@;,úXp%×Rîd²ÃÈ ÞìäNªÈ ~ æè KöûõwCD+Ï\·k äÑ{žìô¹" û}®ÈNoãq öFo\²_°·÷OSîi× -ÞÐ7z3‘ý†¾Þзà¡Àú‡P€¿8ÀEøß?Q¹çM\S¸à¯h•§+Baø«<•ñ‘«UžÊøÈÕj–ÊÏ×ñ$ýÈuý“®œ?|äj•ó‡\­rþð‘«UÎ>rµÊW |äj­$pŸ¯ãIú‘ëú økœ# 5N>rµÆˆ„qúãâ`‘Aâ™!ES‡ ÐŽF÷=„¾Ó¦{¢£u'?}¬¬;°­%8 ¼ßaÚ=]–Jvßò¨œi÷-«sO¥`m¥÷lM=Ùã{28f@‘cô±ÈÞLèä¾7Ó0úœyo¦aT&Þ›i•‰÷f–<<µÇ÷»p|‡¹7z0útto"`ƒO ‘§Bèþîש¢¹¿@™ÆÁð|ß_`Ï™x¾#ÝoßÏ“ ¶Âm›R›ÃfÔ°9µUØÞççFðÌ€6œ»Òq;lÚlŒÒý=²Sõ¶Þ”Ò¹Þ”ª%H•RÍ)­7¥´§ª»Òuú·îJ×iOTw¥ë´'ª»Òu=„ ±×÷J©^ášÂ{´`­»ÒuZ íOÆ]xœPéºq´¨tÝ8Zªn)Úþa®ZTºî-*]÷Zðçìæâ•Ó‡Ý\¼rú°›‹WaÌGZ6>Ä3‹Í\¼rö°™‹WÎ^€½ÊÙ °×8{ö¿xhß¿N¿çM\S¸ ¯qúô5N_€¾Æé Ð×8}Rx+Âß2n£~˜k†¶‚¿vü5Î"!܆@(§q JäÞdÅ{vÍÖG·ÓÒ6àÞ¤Åé{í®áè‹í®ÁhÑí®ÁhÑîìýƒü{ÞÄ5…»r*h‹Òvå@B‡Q¹qÀhÔˆ8uîˆ,Šgh뇹fhQÄEáü¡ˆ‹ÂùC …ó‡, ç5XÐ>¯í,’>oÏ›¸¦pÁŸpþPÄ…hÂùC*÷ƒ ü ¿|Pƒ…D†¶}˜k†Qç#ãêœw¬ªÓŽÕkðbõ<~X½†%@ýCßaî­Œ‚>Rº·2 ÚÌÝ[…<‘ü´™»·2 úxçÞÊ(’@ž[E¾•QÜ[íåî­Œ‚ʦ÷VFA¥Ñ{+£ Ú轕QÐ÷@öVF‘<´#[Eº•QÜ[…qööÒeœ½½tgo/]ÆÙÛKí-ï­Œ"yìL¶2Š|+£¸·2ŠÊIØKW=úê!P ¯ò@!ÂC±—®šqûØÍh»fh÷ÚWCƒ¿ÆY@ÿ_h£ñkíc4~  }Œä²=oâšÂó‡þ3çýg4ÎÐ*ÚÇhü"@ûmdhÛ‡¹fhÑF?Ì üuÎúÏèœ?ôÑ9è£óËýc$ïxïyWÀý/a endstream endobj 7157 0 obj << /Type /ObjStm /N 100 /First 1049 /Length 4251 /Filter /FlateDecode >> stream xÚ…\»®m· ìïW¬2»ˆ³DR†¿ H‘6p‘. Ä)bçÿC U]Í‘Š ¬{fSÒp(‰ÔzôRÛó>½ÔñˆÚ¼ðÇZ‹ö>Íç_Zy\u^ÈSJ/óJŸbeÚ5{âߘWõ)côyÕ)R¿ÅUV£‡¸Šö«£]d ½þ>úv™WåQE{ñ_­6ûèúhï³ån½eÚöú˜Ô9¨Þ3—è£÷Ǻyƒ­?µ`ðã}ªå© còÔéЧ•2Ç2ìiª³·QŸø~מÖ]£ùãWÐ^ü$G0üé6fËï¯Ï«è<}åòŒé¸ÒgèÀßì­LÛpĆ«öøÛ§¯¼‡›_´7¯:GàþxŸc‘÷}Üã'qUžòŠà2y­Î!½¡ÈÛþ’¼^`š”2;’·Å¥ö`#oËÆq9âjH(ñ«yJ‘é?)Ñ›TÁeô&½Öy½‰\Fo*è-$*j†ËèM[ïÑ[‰ÞÔ_üṵQ˜Eo¦mŽA¢· 1ÿ*Ñ›w’è­¾3$E¢·*ùÛè­Zþ6z«p»HôV]-z ¿DÀNÇ‹DoMCö¸ŒÞZC»½µ1½+½õ·Î4zëqÃgS¦9!"¼?ˆÞº÷ÙnØF½oô¦ÑÛ0]DìDÀT˜9fÂlÌ¢7/ïüAuÄÌôÆV _åú ÆU¿ô«\?~ë'ЯÂýM.t…„r˜^éB¿Æõè׸~ý×/'-w…B¿Æ§Âý­ßØö3½±Uè׸~ŠA·/ ý:×O¡_çú)ôë|ú(ÜßõBwŽ›˜^éB¿ÎõSè×¹~`kœ­A¿Îõ3è×ùô1¸¿Ûña¦7¶Á¸ÐÀ¸Àø €;þ3æ?ÉÍgÜ–¨ú!†gš²vÿ¢_tìƒp¿w"ú}pñàÎÁéøþ¾G²Bv¹ï>’»O ﺀÊAh„Ÿ÷vŸHõolÛ‡™ÞØb÷é/×»O¿—äúa÷™¡_y9÷—r¡»ï>rß}$wŸ^¸~Ø}záúa÷é…ë‡PÜØ}záÓ»O/íÆ¶˜é-&Ñà"`ñr®/ç3‹—sbñrî?,^n¢ö!†gšúCúy_sñêÒ9KùÂÁ/ÎA¿¾Dðë9„u/`y%‹É£_ÂäÑ/!öõ Bˆ}û‚bŸîtе«¿‘­by#›kÝFu-]tÕµtÑT×ÒEwR]K-¶t-]Ö/låý0Ó+]Èg\¾\ºŒË—KWåòåÒU¹|p…pÃ\ºªÜض3½±Íµ¯rý ‚ð!CáA oðŸÔ S%sv\‰ÂýÂÊrí¢5©­µ‹VC¶Ö®ö…%¢¿}Ñ%$o·þþ8&-Ï\m­}´à±\**E«`Ë`¨¼M­-ƒ¡óÄòny#Š`¢´e05¡‚–¿5ƒVu5}G‹ºš¾»Ôtñnx¦YÓõ´ «ézZÏÕt=-ÙÚ¢9(–4b 9ÎrÖ=…hWš-iŽB»ÍÁ<ß“ -pzR¡õÍ€Ýx_Š °söÐvšãºŸæÁï`¸-~;ÀËb,Éb,êS®bìüµÏÁtÞW|K¦Ý‘aŸZEÃÊúl€ŒAPeÐÔ䀘Ãòìyè1)ê[5»3ÁüÌï»Ý_n7‚%ï§–RJÞÌ)6ebé¦äMàÀÅ X§XvÚ5d¿,×À’7R£iNeŠ5 §2€qI˜0Là9Ú$v¢Qô²}ˆá…%6²A”%oûV)Á  ;Kâ%ïùFƒ;Ñ8âÉ~ÇW®7|%oœÎGŽh·L¨`ØÈ†PÁ‚Q3ìDƒ¬â’·z³ Ëþ!†– Á„ ¦L¨` Á„ ¦L¨` Á„N…Çõ=Óüþ¯\oðJÞ(¦¹ç!˜RÁ ‚q‚)Ì ˜Ò)bð¸Ö Ëñ!†–Á” fL©`Á” fL©`ÁŒNƒÇ­œiš~ˆá&3ªJ…`T” ÁŒc̨`‚"·vaébxaY!˜QÁ*3*X…`F«¬RÁ*«tŠTxüxž¾F¼^h6Fß X¥‚5V¹«T°Á*" ¯ýÌrß2›]IB¯JõjЫR½ôjT¯½Õ«A¯FgH‡Ã/ËOÛ“¼ëÛ!W£ruÈÕ¨\r5*W‡\Ê5@„Bè"dßS¼K´¢j*£ŠùÔFä¸Uòa“2·}VŠÈÊqY-"+Ç=#òý)VÚÝH"ZY5"+Åe刬—Õ#²R\–«ÊJqYZ„LÂáv!Y?»Ý…d&ÈNåÊ ×©\™á:•+3\§re†ËÂUV†{ŽWÙîͦá&ôrªWf¸NõB†ë/Õ ®¿T/x S ÃõW.,Û‡^X"Aö— † ×_*2\ùp  ®¿t† Ãõs})Û Ù4¼Ñìhš † ×  ®*²S–Èp½Ð)‚ ×Ïõex7¼°D‚ì… † ×  ®N‚*2\/tŠ Ãõs}™#Þ o4!˜PÁáºPÁ°VtÊ®  ® "Èp].«ì÷¯s¤á…%d*2\*2\N‚  ® "Èpý\_æˆwÃMf4f±w:Zd¸nÔ;ÈpݨwáºQï Ãu»¬?Õ?Äð ²u.R\¯4œ‘âz¥áŒ×+Y¤¸^iÌ"Åõz‰Ùfbx¡‰m±S–Èq½RÁãz¥‚!ÇõJCŽë•H‡ÇëeýÙWÙ~Mò:ôjT¯½Õ«C¯FõêЫQ½:ôjt† 7—yÙ÷$ï:-äjT®¹•k@®FåB²Jž¸ܪ.Nîâ 6 è²]Žï3¼Û£†‚Çà¢aâVËá°¢Ãr8ƒZ¡AVràq¦€ˆÇjöu|J6Ǻ™éÕ(˨kÔéh0Pòt‹àÙŸ€ÈdÃã=ò²´O÷tL]1ÖÍìHOE»Êº4@Æ  ˆ8¥'rÓrBïÄØ¶ÙQ v\gÚ¦_¿Þ¼ë(oå%ÚL ôÙ©lGy˜P `G¯=•Úz“ã‰dßïÞõËSXÒS*¡CÅH…Ž´2u@Tà¨1Èõ3?ûìfGz#cŠ*S,©;p©;oéKvÜ<Ò—vÜ&Ævà1.ïâÊH!È“I2RvÒFÎÑnv†%ŠžV*$dÉœ§„$'Ó|pb}SÛóïßë§·Gç´¬v÷aª,hŸcª r !ÒÈ!žêŠ•Áí~šº=8—vGŠºvr¨ºvrR§ºvrR§ùNI`Æ0!ý¨fdÓ.±Æ»Ù]8‚Æ 4ÀbP 1( D6ÉÔT3²I¦¦š‘=ú™Ÿ}v³#=Ëx#é˜æûRÈA’æëRÈ»kšofS`•bìt4žÞín$+Zî´×l0,'5ËȧVøÎ Œãø&éífwa$ V<‡Îõ—Aˆ4ˆ¢A ÉÕ&„9&¤9ØÝîH°®€SÞ+Nù`p$!Ž$¤ƒTäY€‰ÁÛÇgÖˆwÃM¨E²¶‰A.’šM z‘ÜLQà„&Ô;½HÞ61xü˜¸­ï†–‚!3*˜@0£‚ 3*˜@0’ïN ?> °F¼^h‚‰P& "”xåBi€…иAØ Œëfv¡‡#…©fM^ŒC9r¦¦Y¯’¹j–Ü…d®š%w9~&»™ùe½^XÎØR’¸!Hâ„ ‰k@ð%9„Ô<(ý”}çX7³#½,¹ ¹)®Yrr:¥Y4–ÕfÑ\:屄7‹ærüdFŽu3;ÒËò·?Í·°”.KÜÂRº,q Ké²Ä-,¥Ë*µo÷ëVýÂìBn#7û5‹Ua¹@–†B>'¡Y 9ÓÒ, …œii–†rüXDŽu3;ÒËÊPÈ]\ËBn‹½‹·3¼I¢coò&‰Ž½É»gÞVÚí±q{Ói$w¶7y“ÔÙ²žd¯†YÖ“Fî9YÖ“•Ô“–ÕT=žßÛöظÝζ-K±Jfže1UÉ̳,¦*™y–ÅT%3ϲ|aß×3[ôNÛžmgÛ0;Ò««KâÑÜö*©,·¶JêË­­:mpú«‘Ç9,w§v|m3Ǻ™éåÖÖÈa¹µ5²DXnm,–[[#ÇÞ–[[#ÏcXîNíø8FŽu3;ÒË­­±E"·¶Æ‰ÜÚ[$rkk¤H¶ÜÚ›çy¼>‰ø½¾g¿äd–»ûd¢å®Ç¾˜h¹ë5R[n&{¶N>¹ioëì²oÚÛ¶ï¥Ý‘á:ùdßY´|iP©,_söÉ=Ë×…}ÎÍò5GaŸ ³|ÍQÚñié5âÝðFBÊ Ë·…}ÑËr‡oB½ƒb}ìËò5Gaû²|ÍQÚ±BZÞ /,Qì±IZ¾4(ì[’–¯9 û”¤åkŽÂ¾$iùš£´J݃¡ßó[Þì.$ÁC¨Z !T°*HZÏòl¼ õ'‚FÆ™Ÿ}v³=l1ìË5ó1öåÌšùûnfÍ|Œ}5³f>Ö*í Ž<>¾m†°:r+‹Âfµ¬Õ|y¤–µú5nîäeãZÖúE^6®e­_Ç:°n§øiw# ç‘J°–µú‘R°–µúuÎ88KDâ ,áœã'TÖ€7;ü?ñî endstream endobj 7258 0 obj << /Type /ObjStm /N 100 /First 1049 /Length 4159 /Filter /FlateDecode >> stream xÚ…œ»®,·Eóûz_‘U| è N 6 @€åÀ’ÿßäâ89½§ØhºÕä®Å×îé™nµ_éêVã2k󢥫Ôõ—–¯Ö}]Ø)¯ ¿rvbåÊ^ Ö+×Þ×U»òHDûeÉê·y5æ]K¬¿Íû—nóª§kþoý»ž/ _wžÏ¿ùå>ƺ*—·L´^> ¹í*iߥ_Å“Ï6ú˜öÕ—Wéu‰SDŒº®òU-—ueW-…¿ùU[çª\5õjÙ¹jWó¶~µe¶1;ÔF^½SLBQ¤Ý会¬yýgÌ®õÂÕìPôÕû(×0ôF½¦ 2Ú5Z]mD¿Æ«Wä¼zq…—™ë3-ê,ì¼ÊWÌ®+»rJÆå2 íërIeuÇÓD’f'×åd’b!óÔ'¼\gÅ<űsÛ˜—mÑõ) ç±:ï³êÙÒ,켜­™çÕZž­Y­u]ÎÖ¦öÕÄìñnër¶æ‹j_ s€¤˜­Í²ÍÆ 7›­9\ÜfkÅl¥Ùl­”¶ÒæçÒb©°ÙZ _i6[«™þÚn%s‡ÙZmˆŸÅÈu„ÍÖl¶Ö²‘6[k^×Ífr«ƒËÙZ›@Öål­§ÊålÁ2/gk'—³µÉsur¼ºÏÖÑÙÚìÞ,™ó×ÙÚh¨˜5Ìc¬±°(æÈÈœ·ÉÁ¤ñ2[‹:¸œ­ÅXÔçØœw-\¶5ƒúêYY“©D›­ÍN*Ÿ#ÐRÐõù–óš‚^ç„Ê%-ñÕæe£|³I›][âk™ó1­™s³9el‚寳µ9£Æ·üöÃ_ÿñÛ/¿_ÿÓ¿~ÿãßÿý퟿üçûŸkþnéu͉msÙøÛõ5–‰¹Šù ÍúˆP!$ïX É6Be…~þöÃ_~ýí×?tooy?ûé§…WÕæ ÔT(õ{ȾïªT¢šQTÌHkÏûëžö¨Ï6‰!{ ‰¹Ú‰$æ!HÌõP„¨ed¢–aOòèë-í !†ŒoÑdh˜«Œeb:ψusbãYb¼DÞ£Æù/ wÙê"Õs’±F,ËX'f26ˆÉ¢2L£?‰Ü¾åD2Nc¨6§!å£>IõˆOR<Ú“ÔŽôäÏúüuO;È î+f~aœvË2Ä8õ¤b E3b$š«CÉʳ¾¯ƒt¥=ê+„UÕ$ ¬© ¬« l¨µ41ꮥ?.3ôõ–ö(¯¾A”¬Ú„» ‹ « QKo*D-ýqúíÎÞò!áCµ —å†DómÅeˆbÖ¦b³”g_·ÁvZ^Ú&QªjEö¥«$ÊP!jY¥tjYåµÛòÒNËKÛ ª×7ˆ:dêÓßÛ`ÓyPj!cTº§g‰_W˜~Üû{ìY¶ ©n2ªî2«^d X]•‚÷ÇãZ¿ïƒ$dRÛ*kËi¼wÉ‹Óxï’—qÏ®ï ¯‘dŒŠü¬Ò^"ï$^Cò2x ÉËà5$/ƒ×¼Ù¤H4¶“Æúºç4"±I‰(lR!›ˆ¾&õ1•U{þþ¬ï«¼qÚÇ^<†:{½x uø{ñêô5öâ1’ËX!Vd¬«O"Ç}_$ñ$³qk]ÚN¬ËØ 6d,ˆ…Š1U‡Lcúœ*ÛK$T²zŒ,±zŒ,±zŒ,±z¬§*°\eŒŠçö,sõøžx’ °,±|¬ç~*°,íõS‡frŠ8·|PÙ_"ñ ’-d«¬I!ËΚrœ³&…¬kRÈ¢±&mÛöY`yÝÓåÅ÷]81äâ½&¹Éy®óâê ï5IÔã½&ùãP¥Ã÷¼“H&ˆwÙ*DÖã½$©Óz¼—$u\÷’¤ N°$gϸ;|Ë;ˆÜ Z‘¸öŠT¤È½")r¯HUŠÜ+RÕ")xµg•·'Œ$žd«ʑ·W¤*GÞ^‘ªy{ER*X‘†É´½"Õ~PÙ^"ñ r/hUs€U Ìén“À`Ms€59xœŠ7–é÷‰éí(`Ms€5]y€5 •¦Ckr(T¼ƒÊþ‰•`M+ëXAJ—À ÀºVÖå)T¼ÖŸb/‘x’ °.€uI%&¡T€uC¤É‚F‹ƒÆñºç$¢Ð%,úo”õoio¾ÂI®ʇN#oô}‘·óžô­ÁH§c¤Š$VŒ‘&cðŸ*¬Åg8+Åx²!ïßO2á(Žg+Hq>›1ª3duØ}#I•쾑¤JvßH'•w˜f'•lÞ‘¤J6ïHZe%&‡»o$9dÙ}#ëò bùY¦ùK$žd·–c!;äeóŽ,±ûF–ÀØ}C˜­£âfëÝá{âA%›wd ŒÍ;²ÆæYc÷ “ÀØ}Ãt騸ٳL//‘xÉ:2$K6ï0 ŒÍ;Lc÷ “ÀØ}Ãäa÷ ëÏ*ï"K9Š„—I^ìÝa’{w¸äÅæ.y±ù†Ëª²8?ˆ¬¯{ÞA$[w¸ÄUÁåW—K\\.q±“ yK6’qXbkzÝóÙF†ì»ˆxS åï[ü!Š&<ÕŠ‘WMÆ(Z=`üº‰÷(1ï]?„¥Z1fˆ°T+Æ–jÅãU‡1^uuãõéÜóîñ=ñ$“)"|ÓŒí2¯&yQ¸"ïHÝŠÌ¢lÅãuÏ;(¤æâ#ĶßÚ‰"Sñ" S1ñI_Ûoí„x"ßÞoíD?üb™wÞ£@{Ï®[…¡ødjÅ%lËŠAªk‘ ÞdŨv2“ïßO2¡¥Lƒ½'ˆ: Ú{„«³Ð~]*š¬ÎájG¶÷¹öyóؾ'TîcñÐ]ØÀ5e“(!Ù$I@¶H³×=ï ŒMb„b—(ž´ý†V( ¶ßÐò”tZ&fÏ ¿2ô£™ÜïwÍ;»j¼!C T–p¿»â{Ûï.…rtûÝ¥x|ËêÝÙ[ÞA Åãú¶ß| ñ–Uã} YA———f¨Ê•%)o„¹>+üаòZÔìPS:¡®B…ÐP¡J(T¨!BÖ¥z4åë'ç¤ä îkªI()wX7%ñ®X«»^&³¨—r(u×Ëê³¼¯‡·zøÌ¼Õ]lenê.¶xæÖê.¶2'u×Ky“¶‹¢ìG{ÝòôIëîì=ïQàúëÖÙuÒêSV'°4‚:ìM A×ÁJðéñêÿû-Rrw¯ºéN°éà Øu0ì‡:A6—8©m/•zRKÓ¹j~l.¹~èüªæ—áW5¿ ?ewVò×z{;ÖíÔ£\øUÍ/ïj~~UócIú0” ~UO£ü-Ôö—J=©5ø5ÍÏà×>t~Mó3ø5ÍÏà×ôô1ÊßÚAîí¨·Srá×4?ƒ_ÓüØ7>¬6¿¦ù9üºž>Nù{>©/•zRëð뚟ïP¿®ù9üºæçðëzú8åïý ×ý¥Rrá×5?6÷¢øuͯÀoh~~COŸBù‡ÔÆK¥žÔø ͯÀo| ¿¡ùø ͯÀoèéS(ÿ¹¥¼TêI.‡¨[n…ßÐü*üBó«ð ͯÂ/ôô©”?ü V§j9‹_h||ñAíÂgéƒÚAðƒÚ ¨ÕrN-§E¹ µç ·%Ö¹e‚ºÍêAÑœ È­Ô¹U‚§ÜÄá±­qw¯/k| |YãkàË^âé³Sþ|ÈMûùðØá—5¿¿¬ùuøeͯÃ/P¿¬÷Nùóé¬ÜÅᱟÇr‡Ÿi~~¦ùuø™æ‡áû` üLOŸAùí䃺8<ŽóáqÀÏ4¿?ÓüüLóð³rá÷ÁüÊï§³ò‡Çq><ø}0×~®ùñ£è>ü\ó ø¹ž>Aùý䃆8<ÆùððsÍ/àçš_ÀÏ5¿€ß‡G¿ ‚ò—ÓY9Äá1·ǀŸ6hx7ë–´96‹˜6 ÆcÓ'R㱈•Ú¸WêA+Ž2iÏŽLÚ²c“vì¸Á¤ ;f0U¹LàS=œ,ì¾Ûq1ÆI&íÕñI[ul`Ònœ 蹊 LMŽ<`j‡¡k÷UØ‹0259MñI»]ì_Òf÷—´ŸÅü%mgñ~éäfý¾úúqñÅ9&meñ}I;YTêõ×—´ÇÅô%mqñ|©†¬ßWÝrœ™8ÆÔ%0ü^Òî»—´Åí%í_1{IÛW¼^:¹×r_mËq±Å)&m]Qâ²ðؼ¤M-./iO‹ÉKÚÒâñÒ8<‘(÷u¶:1 ƒ—´cÅß%mX±wIûUÜ]Òvs—NnµÞ­y=:sz« 8»¤m,Æ.…†¯K¡ï °SW—â`ÜîF¦9–0iÏ¡ËÚrãç²vÜØ¹¬ 7n.kOÌðÈmw+~\cq‚Y{m|\ÖV—µÓÆÅem´1q9É ‚‡Ëé`ÓúÝ‚÷£Çfí±ñoY[lì[Ö÷–³äÅ´Ô§a¼[Î{Öï#v7Î/kooËÚZcÛ²vÖ¸¶¬5¦-g9CðlÙ¶lÜyãxÈÃñeí©ñkY[jìZÖ®™µR;ÌZ69EðjÙgöq?äÅñ‡ÓËÚKãÓ²¶ÒØ´¬Ï«¸´¬F˜´¬waßÚ¿á¦>ÞÚ¿áÖf|=äõ㫜ûÇ$ÜÔgcûÇÜÔGcûç ÜÔIÿ„[Ó%ÀT7]9X—À0®Öõ=©øã—­Þ¾'Tâ{­K`ø^ë=ªr pÇ*ïÈ «¼!àñ;ïÞÞò =UŽ2Êüvƒ›2ÃcÏVåcÆ{¶ªÏ—Æ{¶>¼ÔooWãÛUã=×Õa|¼'kh!R‡ññž¬ê0>Þ“U½u7Þ“5‡ê¸¿%7Žß¶{Òu©‘CŠDã‘8¤D©ã ð®ï(Á¨ àØƒQù?¾Æî®Îçû{÷îꜸ¿wïžuž³g…_wŽ8îû[ûîꔹ¿µï®>hÙ_cwWgÁý½{÷¬‹Ó‰uħcÜwŽ8îûkûîê(É×öÝ•gÚ_cw7É‹ÃMòbçpÓ÷¤âæ•ñ‰•ìn;‡›ÆS7 ŒGžn<]}ª²¿xïþøMÝw0É!ËSw Œ'¦î<Ý%0yºëö¨¸—g•÷ëå(^.yñÀÔ]òâ©»äÅOwÉ‹'žîr† 2DÖ×=ï ’ç¥^$.ž—z‘¸x^êEâ⧉‹ž^äá§?>²{|O<É„W‘¼x^êEòây©É‹ž^$/”$9txàé5T¶—H<¨äy©W Œç¥^%0ž—z•ÀxàéUã§W-“Š?´{|ODæÿ@92 endstream endobj 7359 0 obj << /Type /ObjStm /N 100 /First 1049 /Length 4270 /Filter /FlateDecode >> stream xÚ…\½®-= íïSLÉ.¸L'¶%Ä ZD?ïO¼š“u’âJÑõö$ËË;ŽÏhëö¼¶ñ>µaP™ÿæ >Ã1h—yJé=Fý)Í[ŒÆSF«1Ò§˜âöÔòú9òùTÑùSP»ÅS´<ժĨ>íñmO«ŽßÉÓzŨ?óŸÅh<Í #}¤‘="bsõ¹` {ñ7~gåé¥aTŸ˘£öôîÉÓ `­?ãgTÀ5}F¯Ù3´×9‡ù´…rŸ?.OŽKçù„?z` “˜âÿä±RâÉÞk‚Ñx¬kµ@è7´úaª7´üÎ_å›Eƒ¿Âù«à¯pþ*ø+üõ©0鸵~˜ê.ø+œ¿ þ ç{ø7»M…ó×À_á¯Oƒùë{Ck¦zCÛÀ_åü5ðW¿Aþ*篿Êùkà¯ò×§Áüu\à6„¦ê.ø«œ?$FÎ ø«œ?•ó'à¯ñ×G`þVnhýÃTohü5Ο€¿ö \ð×8þçOÀ_ã¯ÀüM/pcÝDõÉë7!·ƒ¿Æùëà¯qþ:øÎrâo92P¿9rÿÅR¤„ßdÈ E€1ú®#¾4Á^„pyo¼oNõº7!´þˆ,ƒ?‹¼ÔW„Gn„áAAÞ‹ãÖ}Sª×= !ExdGD1jáñD E‰p"<¼!H¹¡Ü7£vÝ‹J„Ç?DááD*õ=Äá± aDxèBzÉüÛ¾ µë„bÔ-A„‡DáñC*% áCx8Ãæ/õ’ñï §Þ $øâáCx´CÜFùBت5„G*ìùvÉóeßd¯'8 áñBxD¸ÿ:èj”®ºx€ê0x»ä÷}?©ö;LðÅ£êhQ+d2ð%”/ÔÑ¢šHd˜F-‡:ZTÏ(÷ê¸PQ†‹J&›„ % u´¨u2JêhQ e2X¼_òù±ŸLÇõ`Š2\”[Ù´ ¬SÂPG‹‚,‘!‹1jÔÑ¢xËd°x¿œÑÆ~"Õëe¸¨³iAX§„)ë”0a¦ lÐWDañqIt?‰ê5ÉS6(a Â% ¹¡Q ”0aƒ¾"‹K*«{’g×$Ï@ØàËaƒf lP „ñê§0¥¯ˆÁâÇ*öZñ®xƒ ”†„F„)%ÌA˜R„ñ"¯ÃâvqYÛ“<¿&yÂx¾ê Œ§FÂŒÃa+ŒõÜ+ïôÜF½ ü zG„=÷ÁÊ;=÷ÁÊ;=÷Ñ8H¸#+ïôÜ+ïôÜF;ÖrÅ»â &Ü‘qúÚ?X§cÿ…ZÆ©Ô8°M¥¶ij½@´Ï®wA»VjW˜•Õ";¼xTjX…U"Gz1+厜~ÝTǵ©d¬w óYÁ«iŒåÅ,ÅË‹YŽ;–wnX»#d®xW¼Á[,KË‹Yáb¤§ µ ÔÀ/?à˸@ÔÏ®wAÛ±ÕHOŠÐ…B‡§²•¦§²$V—§ê{øÕSõꩺֵâ]ñH„"¡@ò£8£S@ÁNÒÙöcÇn¹\ë¦v‡#׌–=CÆNÑÙ3dì(˜ý)6¨ìE®Q,»$ìØ¡›kÝÔŽð²ÅÂXNž-Fî`,›$Œ%*Ù$a,$f“„‘;2Ë& ;öÉåZ7µ#¼Õaa줓ýÆŽˆyÑo섘ýflInB,¯êíØC¶»é]‚ v:Ì‹~c‡Ã¼è7v6Ì‹~c±uÑo쨱®êÍýŒðk˜·v[ýÎÎë¢ßÙyb]ô;;O¬‹~gç‰uÑï¤[ËÖM½¿Ç`1¶v•T¼Á4<šrOujxªSÀS⇧:…Ou¹ ´Ï®wOegß¼è7§Ðá©ìä›ýÎŽë¢ßYjº®êýø×¹Ú]ïˆp]ô;˰ÖE¿³k]ô;é» <µrÀSYž¤ËSëñ}ÔÝSõꩺ<•\ØXö%x¡€ 5ðŠð …ôÅ.í³ë]Âtìä–} ^)t‡ˆ¼‰ÙZàä:ÊVk WƒÞùx¡›§ÚÕSWc‚³ÓE^õ{£"PHî·,¯ú%ßyÕïävËò²ÞŸ X‹Ýô.A!;æU¿³s`^õ;;æU¿³|5o•½S-ìØ—kÝÔŽðòšÍÙ­Q^³9ËWóšÍY¾š×lÎ.}òšÍÉ)6YeôïÀù×F¿¤lÙ8Á ÁÙFÀÊÀÙöÀŠÀÙôÀJÀÙò $fÃ# o©šßá³W‚Õ~³s€U~³ÑÕ}³ÍU}áŽì#[ô˜¡ùÖûî·Ö÷ìŽ`åÞl`ÅÞlm`¥Þll`…Þlk0’–eSƒ“2ߺÝýÖìžý¬À›Ý¬¼›Í ¬¸‹­@!ŽÊ´½Ìᣒ¾ê²ßãÒÏ®uÆExVÒÍvVÐÍöVÎÍæVÌÍÖ+Ìá£v¾*±ßkõ³k]€-…ÑEwVÂÅþÄ.ÞwV¾uTŸ­2‡j¹ÕrÆeŸ]ëŒ+ í¬Îê(³³jŸ£ÈΊ}Ž;«õ9 ÎV™ÃG}|Õê¾&í³k]€-•Ñ[°±ÕGYÕÿEukŒ–ødƒ5æðñÁkõŒË?»ÖW|ëÁ£%¾ô` Z£%>ÓÀêaù±SVËOž«a¹ÊMë ,B˜±5Æ·X•,¿ÊŠdù¹PëôiA M9⣠ÖÏŽ¸…°!7XÁJg~s`åÖü$*+¶æBm0Vâ; 6Ø‹€7ÄÑ?›ÒV|¿!ó+¨¬™ß@e%Èü,¨ FJ|xÕŸ]°ãt®rÓº Vc%¾×ÀªŽ¯°â£ãc ¦Œ•ȾŒáŠ-˜¶3®Ím¥Rÿ¸zÿ endstream endobj 7460 0 obj << /Type /ObjStm /N 100 /First 1043 /Length 4631 /Filter /FlateDecode >> stream xÚ\M$¹½÷¯ˆãæ¡Ê¡/J Ã;³{[øPS]Ó“p}´«ºkÝÿÞäSdf(ƒ õe&ZO ’))C•cªÓ<åHnò>ɃŸb"y´Ä©º ir.£‰¢<åÉ¥’å©L®8¼«N~õCŽyæ·2ÀOüþX<ùÉg'cs˜| Užâ\–±9M!Îx¢)¹9O¡$Œ-Sœ Ð:Å0–ÁÿŒ)ZÜÄãE—ÂFTþ?…)yh_â”bÄSšeѠДꌧ<‘ó[& ` Ô‰R;êr^ƒ"  A PÔ ´›e ëfØ®ya1O!;,ÁëIÅ0ÎëãÀ‹/*b|U10vëEØØˆq##AlpªT0¼Še`AÅ °¨bXÒ°4e`d:lÇ Œl!§2 bý¬A`ƫ̀¯^¼Ê hñqß¾pؘJ½Bil1íè5|Å Aà+F _1í›w½r“a»æÅFv$M$ÈŽYƒ@v,¾¢©ñ•œ aÎÓÛq»¦%c.nÒ–iÉÚ: -C[¤eÎk+´Ìù¶°¬loŽÌ„·´ÝBZR†¶[HKÊ Õ_`'©ìxø+Ï*ƳX™ÊÀ•ðIR}—$Õ%ðHR=‡$Ò šTBÁg*û†ÃvØÀ<øBÛ^P›;Ú^ˆ–¹£­Éi‰þ¢ƒ‹.L×yßÄë|CÃ"-s§:U*<¥­#i™;5¨|¥­i ~m1H-ÀóîÚ¶EÕDjqZfM&Ì/ªù°¾¨ÖÃø¢Û‹j;Lßß"Ò&Ni§ÔâTÛ æ§Ú":·8u³>ÌÓÇy`EŰ ¯ã4ã4·8uÚ<·8uÚ <·˜ªª²mNU ‚°YYón6ÍÛ Í£ÒŸSNÛëeĔӶz1忍A2Ó Â¹¢B‹¶¤· ¼.ýeXúËT^—Š Ò6e ª0«<¥-éËÚ’¾´ôåÂî>¸lK–þÒ²ŸÓv¥e?tŸÀ_4 ì8•”~9YÖ00ÊÀÊ|P¬ôP)è*ÁaQu˜‡Ã¢ê0‡EÕaÓÖé']ŒÅ}3½?(GfÂaQu˜‡Ã¢ê00àUU‡8,ªS$€ñXV–ƒ2p`%|âUŸÀ%^u <âUÀ!^ Ô«„‚OOûÆÃvØ®yµe;m£S—l§vÖ%_‘>Îж*uÉWÚV¥.ùŠvCµn7êðp£¶‘T… ORõ:Ú2½6ÏkËôÚ<¯-Ókó|ÊûöùÃvØÀ<„öËLmasZ¦¿|þr|y>L©œ~áh-Ç·/h]æÝËûÃëë×Öqyëç»OB=å´¯¾L±¥óFëÖÎQUO{•¥E~§€YÚä¼9žÎ—69»§_R–69´M§$´´ÉykÊ›Ér–égé(Dzä¨{«œÇÒ)s/mrK=I³œÀfß[(G¯9ÇuèæíZâ¢À¹Ÿ¡$~u+¡©ÐvvïÒ†#ïÓpiÃYwì”\~ëÜж9sѵ\qé’©f;=ì¼ÖvAWj"Œ{Î[ݧŽ_/¼¥¾ ™j{rQàÒÑÐË:ãQÇ}Oêwpq¨ÛáJ%!.Î]ü¢NÇ`)\:Zj q1ud¢ÇÒ· qÉw±Áš;ׇêm¢ŽsÔYšÙ# \:Z¢Sêˆ B•ޤ ÄQíÈ B\îÃ%q9wda¢l7 .-5…¸ÒçŽ Ä•Ò‰ŠB\?É£WC§yâÎ?8.m¬GZŽ-/Ù2zKËä¥Ó2²Jé¼%XÚ’´õÙ12qÉ÷)"fi£þ}¬H nÖÕ .-5«¼¢÷9kÄ“£“”féV;~—bè¢0 q±vÙ6 ©Õ EËzXu4´LBõ“ qä;ÿ&!Žú0HB\¾RSˆËµ7Q˜(.êjŠ—ކš,C¸ã’„¸ÒK'!®ôÓ7ËÐÒÈ:r|uAP¥‰’®â%_Z ²sú©,ØÅ¾I \rkJBu©K”’Oy­¸&PÒ©£¤' ó¼öVñ–ÌË%cÍ€$^—]'Wxê)yÔå.·Ju}Ýf}³‘ý¹h[ñ'ù–3ÉZ7I·Ü´Î’¼\™×œHöt%w…¦×!*¹Ó)Ÿ“œeŸ»ê1O~îJ°¤Y?÷‚™'>äjMUšºœÂÚe¿v¾¤L爵 Ã9æ¢U¢%½zÖšHv妵Ç$Wyדdé}êtIhZ› ©Ò{Ò=ϵ9Z¥YÒª÷]’¬ê}çmIRÜ´̪änU))Òû.§H†ôaÖ3_<—ädUdɦLÝ:¡H2å¦5w’šx Ô ¢BèÔ#4­V2#W}-›ÎS6Y•X²¨ïk‡$QhÍËÍ´v¬¤Dî³&“@T7a ¶}q˜Î˜¬L ª®' Q±›$DÅ.ÅÕç]¢bWIlQ¯t®¼d^¢bZ«ÇBr^û' Q±ã. Q±›×YˆŠ]¸æ€&}ÎÒ¹àf+ßeÕ-ð²Õ—…,D¥.Y䌦5YˆJa=Á²Øž¢¾ÌçB›­2Æo,q=Š•ºTQšÖ&!*ÑZ“"D¥nö±=U½ÆžÃ®Xe¬OÔ¨"<õ»Í"<åná)w“©O¹®ýÏ-¥êÉ®œË˜Å[šJ·{¬BS×R«ÐT;2«ÐT»U]•]çÜ9¿Êî{6V'õ\ƪUƪìÔ]·—«²QwuM]•}ºïxª²M÷uÍæ‘W:ëe£+v.aÜIWì(ûªs|—åÚšÈã¿eỦãusÝpe]‹4½>@꥟®Ú;zÅî†5¡îæßÂÆe*¼Þ}z½ûüûmº·ø@Ð]&À†’– …]Å÷“ò›!ŠW}°8°”Å2¡  ÕQgDmtˆ*©Ô¡­ÞÚØ±Á¨¢ÑŽzjx@Ö›Ùè[‘5ÀVn °Þ¡½å ŽÚë[a6„·m€­X`+ÛØ ¸¶R>2؇ƒ:vlp+õºð€Í‹µúo€m%`€mM ƒ²ÑNY·Z+C‡Öb‰n8kuÃX‡îÂÜðVæê$ÀW£ËbÏÒtÐF õ-9¦jH–Ý9 œìΖÎrÄ;'DÕ%DýÍûæúÓIúfìØ`©Ïs1„K¥ž-6¤f»Ù¥z;§ƒX²Y˜¤;?´—êØ¡½¸Sá báèu +Hc–ц뱞6<…5l]£¯‡MÅ=ë’±XW½ŽO–ƒK:&AîHÇ$Æ]Ö1 qWF–n«Og'|¼Ú<÷˜„·ž¹ðYpÐ3>Ò zvÂWºAÏNøLwÙµÛ†%;Eýœªï",zÒ ú +5cªŽ‰1ú ß"}…'CÌSh¬ŒŠÏƒ¾zjß-†’ ¿¹‘zü g€bl)(Ö–ºo-ÔÖ†ŽÍÅ͓ٻ'ÎqûÄ îŸÄ ƒcEš›ÚС¹+ÃG+ÃEÂR0<$$éëO|ê¢ÁnÁOÛ#KÃA94T(.*ŹÝá"kW1u¬ÝíÓ±v·IÇÚÇ#C·ëCõ‹Àë.íº.¸]¾Ð±v)å#)ðøÂa»/h˜üæ±Ý4,6ØÙµ·#w m]¢¼<ê‚“`§¼ôòx¼ÿöôpÿûÝóñíI>Ö(gä_sœüôíËï/Ï¿Ÿ?Ÿ?½¡d/QñúðÛÍÃó×§›û—§‡GþßóûÃëÛñåùæãñõá¾}@â– tº±g­¿ïmû¯G_®dW]×·¯¿~|x?Þ?Ü|ùöù¿däKϧ»û×—›?ÿró÷þüßòcU®xóן~øñðKŠ»îòË?ÿø—›Ÿþòóÿû7è²ê!RÏ–>}”϶_¤í§¾G%hÝI¬~þíE,ޤës|~îâiëªáí3 ïÖü®ûüóõîù“ðê²ÑƒãìÛóËÓñîñæ voYï·¼È)ßB˜¶/’óö.º¸|úbùÿ‚ßK“¾?ɯ‰ùÚÍowOŸa¥;&~רÂÀÛýݳüpXGö6u[ÿmo<ƒ>~~}á‰ö$ŸQ-óû­ÅÒ×Ü7IÖª}“ü‚éû&ù±îê]òSâ6|¯4XõÖ”ÄYNÕõÔ–åqáôsÐãÃÝý¿¾ߎËWàóÝãË'´/yðíñåÿ¿½ß½~ãðÐÉî—¯¯÷·¿=Þ}z»½{¾ÿýå¿&gÅ’“zê ­=­“„ħ‡×Ë»Óé石#à §´‹?´þRA‚Ҏ䯴Kâß,– ¯GnM[ãâ/R$ŠÏ²Ò^ä[€M;ÎLÎNY·3yË ¶€ySB¯5»²g vŽ9*¢d$¥]¦)íòíÖtlØN©°kg¹Û³økÍ®‡ì™‚=^IŠ(V¹ÒÎ*Meæ°¥½[·Taç¶'_ת]Ù³Û¿ó'Ç0'Úˆv×TÚõÅ €ýmËε~×cö ÂÖ…BU„a]˜Óº(tÚ«dZ¦Õ|êâP¬*{^¢³Q×ãTËúNÎN—Œi^‚ÊȨƒ­R,PFV dZ«jíFouðÐd\u–xöQõ:ˆ=– ÕDÛwR,3#Î*Óc»oT•WGíÆnî|Éd‹bM,”°À´PùÞ*& Å'jd¡øZ- φáudxja|¾!°E‘±‚…"mE øæÍB…ÒD*”¦á‹öêè¡á¡^uÚ¸pTLXF“=?,Î,(™(> t#Ûƒj{G{jõÞ‘·Àw„ÁBÅ5-4cÑi¡íDZ±žúè¡á±ýVoŽå‹ÕBqä-ÇÅæ›q`\,çiadxT=¿'ÚcûÃ9†_NõAGO÷ÚMwvàYVþdã²0ñyl}>Xã‡öS»CC– ¨Ý§!_m\V.a¶qYÀgãØz—mÆ8KŒ7|²o ÑV¤ n.ÀÙ> stream xÚZMo9½çWÔqspO‘’(Ìio»ØÃîq1Ç®8±»ív2?Éj¿¬]úpAÀ”Jz|$¥'V''™§yÊIxâ”ÝS¢àFœr^‡ÒD3‹[2—u0O”‚ºU&ʺŽêÄsb³l‡Y?™E¶¬¯”²ò9LaÎ>#Ç)„à9M!_ÙBNÅ­<-ëŒ2EqK§²ûYæ)Æ’ £Ðe&ÆSÌa S,—÷â”fr´’ŒY\ß“)qJnå)ñ•K™R,î½A¦¤î³Î“qqJ“­î«(O6èžj˜d_Ï^ÊIX}e ‰DZGó$‰Ý-“Èe®N²²”yž¤äø);Qƒ4ËÜ yµ—Ùqe6‡BŒnÙòÑq ý³lyq\ñi…Ø-£¥]¡y*s,†a_Ï^)k.Ų]‚9dVœÊš|¡4#â–Læž/Oy*EƒÊTô2W'¥Ù1xž”)Ó¤!ø{Ì“Æäïq˜Ô‹Á¬8©÷™Ó¤e^ß“Im²[VWóì)¶Âš)9csÄ*pn|hŹ23y $°™bf03Gw)D3Ëåà5¬y}׊Øìõ]C#¦õ]C£°FÚÊš(z¡ˆ-C”’šý›HV¢¡YºÝIK&‘z–ÄrC<“£ECc ëSß2×§†ÆAÖ§†Æ1¯+{UeI†Æyö&ò¶†Äv±÷ÌBIaNëSC 曆.©L†lÓ¸ihÁêÝMC —l&C 9zÐmãS(>ýúë§_þuû´,ÝaõáÜvþÔ^ôÔ”rùÜ™ÿè.Ý Gϰö}ô k7ÃÑj7ÃÑ3¬¡;ì©ÑøqœC{þ5ð k7ÃÑ3¬Ý Gϰv3쩞äÖîæKžÕ+øçÏùWðO–áû>î¦0Eî¦0%îî®$>Ü}Ê>,À9´ç_€â(ýªw“ä5J]þ2ûäîîËpJÝÝ%žšDWð/Ÿ;ó¯à/žáÔͰx†SŸ¡g8u3,žáÔͰx†Sww‰§&åàÚó¯ €g8u3ìçu fÏpêf8{†¥›áì–îæËžá+øëçÎü+øgϰt3œ=ÃÒ€gXºΞaéf8{†¥»ù²§F®Ð@çОEüˆ§.ƒâ–n†‹g8w3\<ù›áâÎÝÍW<5ùŠ;Pû°é×Ð÷çn‚‹'8÷Ãã ÎÝOpî&¸X‚¥¿»\]é p ÍéWÐ×Ù]èòSòá.?eîòÓàÃݳE£wkK–·^ò×öX¯º«8J·D5ûp÷xÐâÃý z‚¹]Ùñ΃çÞ¨Çöý×ú|™^±?Ÿö7_Ž/ÏŸ'ë”_³>½;¾Îþ4¼}z¿<<îÏwßÖ×åíÀþüm9­Ó›ÇË_¾FÂ¥ÏnžÏ·'ûûîöàS¸ºÕ½u¬9«MåÍK§»uå·>~=>>l±K÷u‰TÞòÙÞü¼¯¯£‡ãañ5‘Âׇ?Ö0J“ãÆãÿOiŸ÷Ï^þ»šç\ÀZÀZÀZƒ¹ºŒ¼_Ÿ¶ˆ!Ôˆä2ÈeË( ¯² ý#âû'" D0Ê`”Á¨ ä^"zÏúîI¤°€P¡Ba.pªþÈ÷nyÞàåØÀE>ÕßÔÞ-Ÿ.x‡—§/Ëi-šq © ¤ ¤ ¤ˆ²¾º¥s«nÞ!„-*ïêDêLXaF‚!CPÞå-fÚ15@3,0Àëõó­pŒxj¼EÍξB%##{mGÌ€gT†¨†·¨ºã(ˆ1ˆ1ˆ1"ÎpŒãÔæ (Í»\ƒ2x1x1xA˜¬aXIP¶˜Ü" YWȺЂ@+Zð `[¼do`‚ä]XA ­qXG°-#k¦ò®w`1Vˆ±Æa@®0µ RPrM ÍUh®¦a ñ¼£-äÜ„b+[b qUˆ« 1©ÆŒ­‚4+¤Y1†¦*4Uëûõ`»W8y¼kTð‚&k/èªBWµþt´EØîÎ~@U¨Ðe….k3h«B[5ëÕ¶û…‹ÿŠW¡B›Ú¬Ì ° Õ’†¨eý1óݳ0·$ú¬Ðg- •U¨¬ê°”Â\ILˆ;jÔ/DZ!ÒªàUè¬ê°–B¬Ž† ÍR‚Lë«Lçù"Ón †1,%G(5jÚ‚Ú: &#Ã(0ôдÝ5ÁN^ªQ ÄÄÄ^uÖ xFÃJr„*ÀeÇ¥ fff„3<ãq)‚Ö¨2ר f f fŒ˜3<ãüªT»Fë]c뀃X±€8Ƶ¤Õ®‰þSz…@+€V­€€ø†¥w±‚l FpŠàÁ)"Ø^ÅaÅZÚbã¦bË€S§N±Nð+ ‹È¶&†fé&ðJà•À+!Ú ¥á½Á¶¥cã¶b € ЇÉðêà¹F¬  B-`&µÀ³<€ºmŸbñËwšA,ƒX±ŒHg8–‡PGØ¢š´7ކ ^¼2xD¼À±2¼:À\ƒ†F+ V@¬ âž•òj5ª4„¦€™‚™‚™"ä Ï4~€ê?doŸicß(˜)˜)˜)b¹¥qWìZ¡rÕ*Ú:„F€a$2åP§5P4cÁ¼ ¶µ%ú –W˜Ro‚V´š´ µ­%ú ’¤Þ3š˜`¥&+(-Ai‰?¨#Ý^’í¸ ¡&51hAi JKã–Ø*Ô¸kdBMj à©%H-{âT_B“´„† Ô¥¦^P[‚ÚÒ¸)v­Qw$‚ZÔš"ˆAo zKã¶8I}GJ¹q{ È5A®)ä– ·4nŒS©nö(6’ µ¦^ †ÚԖƱ#l³*äWŠ jMPkjKP[÷ÆŽ°å*ìŠW£‚Ôš2˜An rKãÞXÖÏ)ÔиŸÔš Ö”A rK[·Æ°=|ÅÇjMPk*àµ%¨-;cØÞ}µñÁ×–-h5ЂÖ´–ƱVß{yÞ5Î{5A¨IA BKZ¶Å¶þæ¸gòÿÝ[C‚TšÑ3d–!³_g†3”˜Ñ÷2´”¡¥<ì{`S²27¾éÚ2`%ft½ 1eˆ)»^(f}ëb(1C‰-/CLb†-¯¯¿‘/iý¬eËÖcF„‘`Œ*HꟵ$6T:@Ф8 ß Ó1 Ã~×ÖßVL\êS6@Ф8 ß Ó1 Ã~wEà5Å*xAŒ:Þ= ÐÓ0ìxW„T£–×øþÜ- endstream endobj 7732 0 obj << /Author(David Schleef, Frank Mori Hess, Herman Bruyninckx, Bernd Porr, Ian Abbott, and \311ric Piel)/Title(Comedi)/Subject()/Creator(DBLaTeX-0.3.9-1)/Producer(pdfTeX-1.40.17)/Keywords() /CreationDate (D:20170511121607+01'00') /ModDate (D:20170511121607+01'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.17 (TeX Live 2016/Debian) kpathsea version 6.2.2) >> endobj 7662 0 obj << /Type /ObjStm /N 70 /First 689 /Length 2094 /Filter /FlateDecode >> stream xÚ•™Mo·†÷ú\& ] ÉóA†€¢Þ5MЦ]^ÈÖ*À’ ]¹Eÿ}É‘7šaycføò=<Çg®›Å°7Ë!Fï„”S4d)=° íÏ-ð ¾ÞS‚ÕõJ %öÇ} 5õ?y q‘|Ö¢ÔFÔÚ¯µ±“K$Ä\Ök¢.Ú# ÑR쑇èy¥„X´+x ±Z¢,!-¥RbH±Ö¦QR›lì÷•’¬3h·$•>^ÑL»F±ÜûD‹‡TÊz­„¼,ë}5ä­Eu 9¥>^!çÔ}ÔÔò°Î¯YÎû\ª„l«ZmYrY# ¹ØyȵôÔÕ$.ë5HJM×%HÖ¥G1ˆ¸žµ(ÑvK‹rO©G¤ÓžÄ%vµ>@”õ¾öX’>«žˆ¬Ý[O¢Øz_ûGËú×ú\Hî«éÕeîÿ”|öæÍÙÅ_n¯OáÏm¼%ü½Ô†û8A!¨_‚6T Þ]üp{wûÔžÿîãééþóÝûããáÜìKù>l®eÿþÝÙåå Ñ0d!`bÙæ¢y¯9’ÄUÆUÆ•,LKÒ\Ò—¤bÚk ¦S‚)!Û¼¤Ì4›@Þh–‘MÁ”bJ1¥äZ™–ÊL²¶‰­Ù+*–KŠ%%ÕÆdÖòwÛøËNÒ‰5¬VŒ Ó1¦c>×ôMb}i‹9H­}uCŽ[Nމyžˆ® e§šN_Ž/Ç—“fgb^ç¢iïTu¯Y°U°U°UÈwa^Eçšj;ͶIì5qUpUpUHwe^5Î5KÝhæQáVLULULU’]™VQ_7Šzˆq ‰§úÅ“, A$HÓÒ¾ã¼Ôl{IJӔEO ŒÀ Á´‚¼›z©YÑöšWWW10¯8­ &à/5Ë2Úl%â*â*â*’íļҬ‚ºÀæM)ñö%Ô#Œ‡«„+¸*pUÒ¬„ºÀ¦†J®'T¨,W`UÀªäY uÍz¼)“&KÆX°*yVBmü­K½)“&‹à ª T™UPñÝ›Òjj ˆ%ˆ,‚% *@UtV?µ¯ÛFP  ‹â¨ Põ©¢ä­¢ë@GŠ##½ U@ª˜L}³±×8Ê*8p,Fzá©ÀSñÙñ²¿Mk>ìQ"ÀX€±8– ©@SñÙᲿ!Iµ¾5ì%ñŠÅñL˜J™.»€l4ËpÅŠ¥` ˜ 0•2;\vÍ[ëàp)X ±TLS¦R§åS×Ãå§«›c{;î °@`©x¢DuÙÕÍ—ý«†Ö†‚\¹ºd!PkbçéBÀœA¤‚Hi¨ _MøÀ8Upª‘DˆËPáy%¯n¯>ýë 9ÄÑž¬`TÁ¨&æj’½ÖF"ítö»–‚R¥J‹ªÀP¡æe®›X²ß^\_º.8Upªt© "j¶¹®uká»Çã¯çOÿýt<ÿðpw¼¾=ÿpw=ÆPUzU…‹ uß«n5®ÿ¾½ÿõ¡©Ÿ>¿??<Ý>Üò`·VЪ UiX<*xÔ}ÃúbøôEïÿ×äà‡<ÅtUZV… !uß²î5d§¬=ýËÀ0œU8«4¯ +Vª-síg•4Tσº¹ r•.VÁ¦‚MÝw±j[hãø*ͬÂO…Ÿºof"u§míeÛ{+VZZ…£ê»Úzz¼½9ÿpóùÔtþóxût{óéñ¡½`w§®À¯‚_¥—UªeWSo>œÿütõøôLÅ·§.w8Ëþ@®`WÁ®‚]¥‡UÈ©utÄùÍø›óx+§Ã€+`WÁ®‚]¥‡UªuvÄéöÇ製þ*üUøk4±Qm™qºÀæDÞP=úüaÙ²d£‹5 kËì³*lÉ1›Ò¤ H}¬^‹³sΪ°õ*£×Âà¶ÁmƒÛF#kØÒ줼 lŽÊQÛÁu  Á ‚7ZYƒ¿–¦•ÔòNµú@càÛÀ·ÑËðµœæ¢µl5ËA‹ » vì6ºY¼–§¥Ô6‹š–Aãl`ÛÀ¶m£5˜k2+¤6þ¦qÎËà-5xmðÚàµÑÎÀ5UQîýÜ E}0`mÀÚ€µÑΘ5Uî>Xµ>£ FŒ6¾4­ÙìHðWü|`Ù ³Af£¡5˜jV¿íçƒñ·_ƒÈ‘ "­SsýÆo¿Ã/wŠ -­ÁTƒ©Vâ·}¹}w1xlðØhh ²dµâßöÝeØ:X6°l4´Y ²Zͯh_Ñ>d6Èlô¶[ ¶Z­¯jŸ^wÌuíÚiy}ɯ=ÔþÑ¡Ëa´Ãh‡Ñ£FØ÷_š7‡®9.4;hvÐì Ùé‰}ú‰y„ËáVçÙ!³Cf‡ÌNoìÓOÌû­n\ª–,{’WÔã®LwzjÊžÊle~wä·ÇS»yýá¹=ÎÕ´>4\üùêéêãÃÍÙÅß®nާÐÞùÕÍÙÅOŸÛá÷þù’<_úñêîxzþÙzýä¯×Ç‹žŽÜ¾^üáêýñãéÍ›‹?ß~YZðóÅãåeŒkôöòò]›ÃÅOŸŽ÷ZK9D&ö?äB4 endstream endobj 7733 0 obj << /Type /XRef /Index [0 7734] /Size 7734 /W [1 3 1] /Root 7731 0 R /Info 7732 0 R /ID [<0BF6809BAAA8CEE7331DD546123A2AB7> <0BF6809BAAA8CEE7331DD546123A2AB7>] /Length 17644 /Filter /FlateDecode >> stream xÚ%Ýyp[ï~ßw’à"J%Ú÷…Úw‰Ú÷]Ðhß·ëÞÄIî8N„M{˜q`2 êÉpÚÒu&,ÍrIZšaÛ);Øwjt<ËÒEY§±=nèØfë2`RÖeŠ×sÿyÏs8çyž#,_|OEEEÅ¿­¬¨¨¬ˆ*ÿ²Â(‚ꨢbeج¬¬Øømì²Ye´öÙ¬…XTµ‡;×@=,ƒX+ +¡VÁjX HÂZXëal„M°¶ÀVØÛaì„°§»a4Á^û¼ÀA8 Çà8œ€ÃPUÄþq8¬CŽ·üx•߇“p®Á HÃÓ2f* VÀJ(?|ÕÍÓp¦Œ¡åP>¬êÍ幊mþŸák©¶Â9¸ï˯€Ø; |¨5*à¤àA=•vü$œ‚ÓÐ gà,œƒóp.Â%¸ Wà*\ƒëpnÂ-¸ wà.܃û‚ðÁcxiÈÀSx¯à5¼·ð^À‘¨¢!T<§b»¬†U°öÂ~¸f£ç1¤¡ü(µm×á&܆»ð¾”1]u°Àx OÁ§Ë»V×¼ vÂUx eyuí ØM°öÃA8aÚßÃøŸà3|òCUÌ:ÞY«q–ËÙ*¨†Xj³–ßlXt³ݬE7kÑÍZt³ݬE7kÑÍZt³ݬE7kÑÍZt³ݬE7kÑÍZt³ݬU6k•ÍZe³VÙ¬U6â˨¢ñï‡=Ý䨮Á ¸ ÷á<…çð>ƒ ›®†š¨bß*Œê °<òôØà‡“p.Âe eÚ“O{òé‡ðìA08ýÊûRßT•P aAfAfAfAfAfAfAfAfAfSÆìpB™uB™uB™uB™µg-ÄY qÖBœµg-ÄY‰˜µg-ÄY qÖBœµg-ÄY qÖBœµg-ÄY qÖÊ›µòf­¼Y+oÖÊ›µ8g·D[ÿIÐs˱-‡5„u°¶Ânh‚}pŽÂY87 <ÔHÃ(¯Õú–*0‰-5°VÂ&ØÛa/ì‡ãpNA3\„Ëpƒ'jqŽ˜uB™uB™uB™uB™uB™uB™uB™uB™}N³/!ü­óˬóˬóˬóˬ…8k!ÎZˆ³⬅8k!Ζ#ý¢ÿ1‚J¨‚jˆA ÔB,‡‡•Ð!Ww¢Š]GÃãÕ;‘…90-å'ªŸŒ –Á*`kr=l„]°G“MžŽ&/ÀU¸à”çjÙݵ°ÎÂ(Ï˲Î(ª¸í¿üeníÜ ÇÀ]:ËÓÔ°i ”g·!sn8ŽU°Ö@’°ÖÁzØal†-°¶ÁvØ;aì†=Ð{aì‡pÁa8GᜂÓÐ gà,œ€†¨âø¯ÇQ9 …zX å=X>x A9+¶–G+¦öÃq8 å$ÆýWß¼ÎÂ](ÏZ¼m”ó_X ûá܃rNWÞˆÁf8 g œØ•Ý5‡]pîB9¬Ëḽ?çá\„Kp®ÀU¸×!È» ·à6Ü»pîC ÀCxá ¤!Oá<‡ð^Á;xà#|‚7p2ª8û;ÁÂkGtÊ74¶ÖÃØGà>”gcq5ì„‹P~òUG“°šà\„ûðÊKmUïr8 à!”÷yÕâV87 |çÕÏø/ ¼«G«a„˜}†/ðÕËA¯¿‹ÀËÁ猪bPµPõ° `9xù]¼Šü®VÁjX HÂZXëal„M°ÂR{U\ùa×ÊËoÍ­]PNΚácpîAÙQ"¶Eÿ´¶ü‰ïvÂ1h†[P>ÞÄH#l‡‡ðÊ~“gc°ʳ–ìY o¡†ä|a+ìòýÖ~/ç ìmí@¬Í° ðí°vÁ¶¨âñ¯…c oQšŒ¾À›{aì‡pÁa8GáœÝQEæ÷Ã#ƒp šá<\€‹p .øg£Š/á®Âuû·Íè¦QØ;pîÁ}HÁxàqTñó{ÃC½„ÛQÅO›O Ïà9¼ðŽ äï=|€ðÉ!œ ™|Uüöð(ŸíP˜&)žà™Ý×QEÛƒp—7PÒÄo…ÍwQý^xß#Ï3ò<#Ï3ò<#Ï3ò7S~£øÏ–…û‰÷ŒdÏõŒPÏõŒPÏõLÒnP;#Ù3’=#Ù3’=#Ù3’=³ÌäŒ0Ì„¿ q†Æjgʯ‚þäxxÞ *3ÞÎ͈ŌXÌ8Þ±˜‹™þ[\ç [8¢CQÅ¿>@,f¼ œogä`Fg„aF^f΂øÌÈÆŒlÌÈÆŒlÌÈÆŒlÌÃŒ·‘3×Á{É™› 43·A,fÄbF,fÄbF,fÄbF,fÄbæ1ˆÀŒ7£3r0Þ‘ ÃŒ0̼¡™y¯Ë™·ð¤dFJf¤d&¤ä3XG3_MIDP UP 1¨‰¢í›Â]êa4€w½7W@VB#¬‚sPEu¿þv5¬$a-)ëal„M°¶ÀVØÛaì„]°ö@ì…}°ÀA8‡á…ð>þ8œ€“p šá¬Ä†¿½á\†+Þô;Þ¡pøç£hM.êU¸×áÜ„[pîÀ]¸÷!à!<‚ÇðÒ§ð žÃ x ¯à5¼·ðÞÃøŸà3|²ãC"0$C"0$C"0TµPr0$Cr0´Â;¯SQtõLxö‡è¢{ˆî!º‡è¢{È­Œ¢¦? ÁþñCÄ?DüñCÄ?DüñCÄ?DüñCÄ?DüñCä ?DüñCÄ?DüñCÄ?äC!ö‡Â';gA”‡Îƒ ÉÁ ÉÁPÈçCœq>ÄùçCœq>ÄùçCœq>ÄùPxKëöôGCì±?ÄþûCì±?ÄþûC/}ò´â¤<Š¢“?fW,†ÄbH,†ÄbH,†ÄbH,†Äb(<¥X ‰ÅÐWUTBTC j ê |†âýLSƒƒyE﯇X p–GÑŽpÃ*X k IX ë`=„Ö6Â&Ø [`+lƒí°vÂ.Ø {  öÂ>Øà ‚ÃpŽÂ18'à$œ‚ÓÐ gà,œƒóp.Â%¸ ¬N?ñQÓ+(Ë«î{-Šž¾ qnÀM¸·áÜ…{pRðÂ#x O x žmósx!*¯à5¼·ðÞÃøŸà3|‰Þ:$¢C":$¢C":$¢C":$¢C":êa4ÀrÓ9틱èƒ9èƒ9èƒ9èƒ9èƒ9胎ÍQôW§ÃÙ玭QôõNØ”ˆ‰èˆ‰èˆ‰èˆ‰èˆ‰èˆ‰èˆ‰èˆ‰èˆ‰èˆ‰èˆ‰èˆ‰èˆ‰èˆ‰èˆ‰èˆ‰è¸ÖBÇ5`¿ƒýö;Øï`¿ƒýö;Øï`¿ƒýö;Øï`¿ƒýö;Øï`¿ƒýŽ5ö;Øï`¿ƒýö;Øï`¿ƒýŽ÷þ»;äcë°Ï£è'„锃9èƒj;3ÄœbÎ 1g†˜3CÌ™!æÌsfˆ93Ä~ô©ø2ði÷æå°â°a¬†5€$¬…u°6ÀFØ›a ø”Ýù æ|s>ˆ9ÄœbÎ1烘óAÌù æ|s>ˆ9Äœb›Ã†#pŽÁq8'ᜆf8gÁçü›Ë/²%LÓ%¸ Wà*\ƒëpÃ÷f-eÖRf-¦óbý‡? pnÁm¸wá܇<€‡ðÃHCžÂ3x/à%¼‚×ðÞÂ;ðU…“BÌI!æTKÙ«T¥ó𻤶EÑ÷$üÓ)¦SL§˜N1b:ÅtŠéÓ)¦SL§˜N1b:ÅtŠéÓ)¦SL§˜Nš"4Erª:ŠþÎo†'”ÛZa³³í£ZS|Þ®á³æ•FÏŒÖøÊàøf Í™º-í†ÍîrÓ(HŸ”ø¤Ä'%>)ñI‰OJ|Rⓟ”ø¤Ä'%>)ñI‰OJrR’“’œ”ä¤$'EcŠÆµ©QôK+Ãa‰TJêR@šRÒ”’¦”4¥¤)%M©&yIÉKJ^RwüÇüÆÁœ…ó¾g²tÇ·»!ü­ä¤$'%9)¡I MJhRB“š”Ф„&%4)¡I MJhRB3î,0n²ÇåyÜé!u/ŠþÁ¿&äEšRÒ™©”ïËR¾/K…p}uŠA5TÙç{²YIÏ=£ò›Ôq;|‡Fϸ3͸üËÚxUýàW­â8.‰ã+ü™X[âÞEËи8Ž‹ã¸8Ž‹ã¸8Ž‹ã¸8Ž‹ã¸8Ž‹ã¸8Ž‹ã¸Àó;^~1û›‰ðlNAã":.¬ãB3.4ãB3.4ãB3.4ãB3.4ãB3.4ãGìdøÃšqöÇ%g\hÆ…f\hÆecÜéfIX ë@BýØ›À+”ú-°¶ÁvØ;aì†=Ð{aì• õá†#pŽÁq8'ᜆfPQÎÁy¸á\†+p®ò‹ú>òölmánG•?}*ÌäP—QîC €SA½^õ^xÕ{áUŸ† ¨Ð¨ÏAÅG½‚zï¢ë_CˆÅ[xïá|„OðÔƒÔËA›½j“ƒ¶ð:BÚª!5À~ûmì·±ßÆ~ûmì·±ßÆ~ûmì·±ß^J²ßÆ~ûmì·±ßÆ~ûmì·±ßÆ~ÛÖ¨ò—¾†]#¾ø6âÛˆ÷}cmñmÄ·™’63Ô¶=ªü¹ÿ ü™´ÉA›´ÉA›´ÉA[0#mrÐ&mrÐ&mrÐ&mrÐ&mrÐ&mrÐ&mràkÏÚ69h“ƒ69h6K¨î6’ÛHn#¹ä6am£q:LØÓ¨òþQØñPÇCh¡m„¶ÚFh¡m„¶ÚFh¡m\NÓ8Mã4 Oj§iœ¦ÑKöÚi§œfpšÁiU¤ÔN¯Œ*Gþz("/¼˜&oš¼iò¦ewZuÑôª¨ò—ƒ£iB§¹œæR5Kítx¯Áå´•[ÉÓ4N«¦š¾åµ@Øg«VÝMí4¡ŠojCñMs˜«;Qåàß SbO[ºÓ‚9LS;Íê4«êsj§¹T¤S;Íå4—Ó¡XKéP³‚¡æ¼µlö¿ÙëºæÔ@-¨)j®‡åàóçf%FÍÞÓ5«3j^«£Ê„MÂZ{Ÿˆ*í»pÃ:X`#(OjöÞ¯YÝWóVØáí’º¥æÝ°T…5ï¥aÍJÚ45«köN³ù0£p T:5ŸåNͧ@ÍSs3(+kö^­ù„W(@ETó%PÕì“Åæë D«Ù[ÕfòšoCxÛ§l«Ù»§fåSÍ)x@|Ø 5TÍOÀÞö0§¢ÊñÞ09á?fo‘›•Y5{‰Øü^A¨›{J¯š?€Z°æO  ¬9|”í¡ÚYmgµ=¼ ¯ÖYmgµÕöº¨ªê}¸³Û©mgµ=¼S'´]õX»él_Uþ¯Ã׿íü¶ÚNh;¡í„¶‡J¶ðfžËv.Û¹lç²]Õ_»B´vVÛYm©vAj§¶ý€wcpÐí4¶›¿vÛlg°ÁvzÚÙj?Uþó? ;Éj;çílµ“×>ìg«½üºó¯‡û©skç£ý”ÿ#ýÓOá.Ûe·=ˆb¡½üâx¡:Üš!4<¼ÂÅö°“¡.Lû«¨òÏ~)Ü£öðAoÓQÕ³ŽP¥ç£ûéʨªaOØäÈ©´Î ´Îi³Î‰±nº!ªZ¹î¾ô!Åy²Î9±Ne“`Ýt2ªJ ÷#ÀɲÎ)­Î‰±Îù¯nzkTµõçÃ]¨pb¬s:¬s:¬sê«›nŠªöþõpËÊÙqã73îdT§–³núhTu´/Ü…ép«Év&¬s&¬›à„Sš¹Ÿ>Uzþ‚#gǺi³ëT_7>÷¹U]¨ w±pœþëÔ‹Ö©­›ÎDUW;Ü>=2ãNduÓ¯¢ª{ÿ0Ü`Šëêœæê'IŽ O‰ªÇÃ]Ô‡5©kRd×>î8UuýÃðÎ߇XMq¨ªÞ] ÿV>ØjÚ+£ª/ƒá†ÕfMkAY“j´&zM£ªïÿQ¸³Ê½¦- |¯i'„x~â^¸Kø GIZ“º¾&%}M£ª¿üSáVejMG –Z¿&µ~M§A­ZÓ‰¨ê¯ýb¸³"¶¦óÐìÃýÞÃMPØt T6)qkº£ª¿ùç¨xkº×à.¤@\ÓCP פ¨°é)ܪ~þ/…¿õÑ_Ósx/¦Ï|€gQÕ/< ñ^ù|ˆ™–`ácTõŸy­RßJJ¿•ÎÿNø7u}-Þ<¶(ÀlQÜ×RUõÿáVå™-¤´pÔÂL‹ÍzZhl! %U U„¿PØBO‹ ΖfÍĶpÔrTu¶ÐÓrvEUÿýþV¥g‹JÏ–ðG-J [”{¶Šª~0îÇ[KxPzZèi1÷-碪\îBc 3-æ¾……¥¢-÷€*Z®EUmá/Ô¶°Ú¢´…™>ZîEU¿ý.Ü…¨ÞZ‡²Î§-ô´ÐÓ NË*þ÷ãáÎlµðÑòÖ($ “HY‹:ß.[¸œ ïãC±êû¨êþ8<Q“F“¼MnŠªÏœ ›JY'­­Iz&«£ªÒ‡|JÜ™äÉð™`¨µ„&™™<U'ÂÄN†É!y’ÕI&/GÕÿÛp+ƒ“VÏ$ƒ“Ý$y“–Ú$¡“ætòVT½mYø ~'œ´¬&ÕêN²:IÙ$«“Ï€¼Iò&Ùš´p&)›T;ùX´â'Ùð³2œ0±£ê!ò“AÔW7(V½A%TA5Ä j¡êa4ÀrXqX ° VÃH@6ÀFØ›a l…m°vÀNØêhïӿv7 {£ê+¡Ôöî>Ø¡âè ‚ÃpŽ‚BÜ»ÇᜄSpšá œƒóp.Â%¸ Wá\‡pnÁm¸wá܇<€‡ðƒ‚âÎ09™¨úÞO…#z Ïà9¼€—ð ÞÀ[xïá|„Oœ’;CE2¿üvòÛÉo'¿üvòÛÉo'¿üvòÛÉo'¿üvòÛÉo'¿üv†ÙÎFÕÿβðDj¢;Ë+ôÅ? ›ë€øNâ;‰ï$¾“øNâ;‰ï$¾“øNâ;‰ïÜM°˜îdº“éN¦;™îdº“éN¦;Iî$¹“äN’;Iî$¹“äÎ0/ç¢êa'é“îNº;é“îNº;é“îNº;é“îNº;é“îNº;éî º¸3Lw2ÝÉt'ÓLw2ÝjÊé“îN¦;™îdº“éÎ/jÊOBETýœð6EP UP 1¨Z¨•Ú›–A,‡‡•Ы`5¬$A•÷¦u°6ÀFØ›a+lƒí°vÂ.Ø {  öÂ>تä7„CpŽÀQ8ÊÎ7•OÍ?ë×] ™p”§¢êÿÇÂDœ†f8gᜇ p.Áe¸Wá\‡pnÁm¸wá܇<€‡ðÃHCžÂsx/ἆ7ðTÓo ?øá|† þ«ƒGÎy†ó ç™ê¨ú—φÌA¦&ªþ¹ß ›ìgØÏ°Ÿa?Ã~†ý ûö3ìgØÏ°Ÿa?Ã~†ý ûö3ìgØÏ°Ÿa?Ã~†ýŒ_

C|†ø ñâ3ÄgˆÏŸá<Ãy†ó çÎ3œg8Ïpžá<Ãy†ó çÎ3œg8Ïpž ?ý >C|†ø ñâ3Äg«/{Zû!ªîüWá8ØÏ°Ÿa?Ã~†ý‚[ ìØ/°_°â ÖBÁŠ/p^à¼@wîݺ tè.Ð] »@wîÝ…dTý«?žÈ”ÖGÕý-lr^à¼ÀyóçÎ œ8/p^à¼@wîݺ tè.XñÎ œ8/p^à¼ÀyóçÎ œd¼`è.Ð]“Hwîݺ tè.Ð] »@w¡¼Î—Ÿ {Z~m6üÏÂ_ ¾@|øñâ Ĉ/_ ¾@|øñâ Ĉ/_ ¾@|øñ+¾~?#À+¾ÀyóçÎ _ídDP UP 1¨Z¨ƒzX °V@VB#¬‚Õ°„µ°ÖÃØ›`3l­° ¶GÕÿÛï‡ü;£ê_Ÿ ›~tv7ì&Ø û`?€ƒpÃ8 ~Mtö8œ€“p NC3œ³pÎø—à2\«p ®CˆÀM¸·áÜ…{pRð‚Ÿ7} O x Ïà9¼€—ð ^Ãx ïà=|€ð >ûõT8Ô¯QõÿüÑLˆÀ  ŠÀ  ŠÀ  ŠÀ  ŠÀ  ŠÀ  ŠÀ  ŠÀ  ŠÀ  ŠÀ  ŠÀ  ŠÀ  ŠÀ  ŠÀ  ŠÀ  ŠÀàvØ;!üŒøAâ‰$~øAâ‰$~øAâ‰$~óÁòôÿú‘ËÕ`ù?úßý½°Éþ ûƒì²?Èþ ûƒì²?Èþ ûƒì²?Èþ ûƒì²?Èþ ûƒì²?Èþ ûƒì²?Èþ ñƒÄ?Hü ñƒÄ?Hü ñƒÄ?Hü ñƒÄ?Hü ñƒŸüGpÞ/æÂÞ—Åÿ‘w½+¶DP UP 1¨Z¨ƒzX °V@VB#¬‚Õ°„µ°ÖÃØ›`3l­° ¶ÃØ »`7ì&Ø ûÀ·€ƒpÃ8 ÇÀo·ž€“p NC3œ¿$ÜzÎG±ºŸ3Mépø£ê?³v .ø ×à:Ü€›p nø ÷à>¤à<„ÇðÒ§ð žÃ x ¯à5¼·ðÞÃøŸ ü^ò |u0ለOŸ&>M|šø4ñiâÓuQlÏh¸³ÝM/‹b+þQØ´¤E -iH‹@ZÒ"´¤E -iH‹@ZÒ"´¤E -iH‹@ZÒ"´¤E -iH‹@ZÒ"´¤E -iH‹@ZÒ"´¤E -iH‹@ZÒNú\âÓħ‰OŸ&>M|šø4ñiâÓħ‰OŸ&~*ìs*Šm|f’ý4ûi?gM‹@ZÒ"´¤E -iH‹@ZÒ"´¤E -iH‹@ZÒ"´Lyò)˜)˜)˜)˜²ö§„ÊÚŸ"~Šø)⧈Ÿ"~Šø)⧈Ÿ"~Šø)⧈Ÿ"~Šø)⧈Ÿ"~Šø)⧈Ÿ"~Šø)⧈Ÿ"~Šø©=QìÒ†½7±S{£Ø? ›"0ÅþûSìO±?ÅþûSìO?EüñSÄO?EüçSœOq>ÅùçSœOq>ÅùçSœOq>ÅùçS·ýÚ8ÌÕÝ(v².ìZo MYñSœOq>~ÂL÷ÝStOÑ=E÷ÝStOÑ=E÷ÝStOÑ=E÷ÝStOÑ=E÷ÝStO}µCA%TA5Ä j¡Îÿ¢Øý¥ð;¡!ŠÝ86—à ˆÃJh„Uà7ÕÊ¿ãÊ¿ãÊ¿ãÊ¿ãÊ¿ãÊ¿ãÊ¿ãÊ¿ãÊ¿ãÊ¿ãÊ¿ãÊ¿ãÊ¿ãʿ㪣ã›wE±Ç?žw7øñ¶òï¸òï¸òï¸òï¸òï¸òï¸òï¸òï¸òï¸òï¸òï¸òï¸òï¸òï¸òï¸òï¸òï¸òï¸Êï¸_‚ÄÕÐÇý$®ü;®ü;®ü;®ü;®ü;®ü;®ü;®À;®À;¾9ˆ¿ãæáÈïG±WóaïSðÂ#¿SiÈÀSxÏἄWðÞÀ[xà#|‚Ïð8÷é~\ÅL\ÅL\ÅL\ÅL\ÅL\ÅL\ÅL\ÅL\ÅL\ÅL\ÅL\ÅL\ÅL\ÅL\ÅL\ÅL\ÅL\ÅL\ÅL¼-žýax"sж6ŠýøÂ&çjgâjgâjgâjgâjgâjgâmœ+;Š·q®€&®€&®€&®€&®v&®v&®%®X&®X&®X&®X&®X&®X&®X&®X&®X&®X&®X&®X&®X&®X&®X&®X&®X&®X&®X&®X&®X&®N&®N&®N&®]M\±L\ÏšøB8„ÛQì/ ‡œk2 ¸9®Š&®Š&®Š&®Š&®F=®F=®F=®F=®(ÞÆ¹º ¸›¸¢š¸F8q•5q•5q•5q•5q•5ñ¶ÐÈ€x•5q•5q•5q­sâÊkâ¾æ/¿@üñ Ä/¿@üñ Ä/¿@üñ Ä/¿@üñ Ä/¿Àù‚Õ½ ã V÷Ó L/0½Àô¦(Öñ«a7¬Š…-Qìoî ›œ/p¾Àùç œ/p¾Àù‚u¾@üñ Ä/p¾Àùç œ/p¾Àùç œ/p¾Àùç œ/p¾Àùç œ/p¾@÷Ý ¡%ç œ/p¾Àùç Áù-'Æ‹ºA„ù»Åþö\8"â8_à|óÎ8_à|óÎ8_à|óºè^ {îºè^ {îºè^ {ڡ ˆ ª :Š 7€Ú(Öùÿ…Í:¨‡eÐËaèoqc%4Â*X k IX ë`=l€° ¶ÀVØÛaìí3nì†=Ð{a쇛p0Šýòöù£p ô߸qNÂ)8 ÍpÎÁy¸AÞ%¸ Wà*\ƒëpC?0·¢Ø¯4„'¿ w@·÷à>¤à<„Gðž@2ðžAh0ò^Âkxoἇð>ÁgøtwÛ«nº»+£Øïü0lšÎî²óütØÔĤ»è›înº»é›én¦»™îfº›én¦»™îfº›én¦»™îfº›énRºé›înº»éۄu—_´ýæú°ktwÓÝMw7ÝÝ"Ú}˜îÖx¥›înº»éîfº›én¦»™îfº[ƒ–nº»é›înº»é›înº»é;è–µî[Àt÷ëü’¶'a†Êÿ‹ÿÓß ;Nw7ÝÝtwÓÝMw7ÝÝtwÓÝMw7ÝÝtwÓÝMwwè"Ãy7çÝœwsÞÍy7çÝtwÓÝMw÷W»QTBTC j ê@—–ÆeP~ÑöoW…¿½ñ(öûÛÂæJh„U sK£¾. HÂZXëal„M°¶ÀVØÛAc˜FM`wÁnØM°öÁ~8áMeÂ18'ᜆf8gᜇ  ùLcw®ÀUx ×£Øÿ07à܆;pî¶6)xá<†'† <…gð^ÀKxšè´†izÅ:Ó¿‡:}‚Ï “N#ç­î×Êy+ç­œ·rÞÊy+ç­œ·rÞJwkhBÔºâÀt+Ó­L·2ÝJr+É­$·’ÜJr+É­$·’ÜJrë–¨f]"ì‹jÝÕT ›t·2ÝÊt+Ó­L·2ÝÊt+Ó­L·2ÝÊt+Ó­L·’ÜJrëq`º•éV¦[™neº•éV¦[™neº•éV¦[™neº•éV¦[¥½õ:ܪQ+Ó­LÔÜjVü½pt·2ÝÊt+Ó­L·2ÝÊt+Ó­L·2ÝÊt+Ó­L·2ÝÊtk0:%ÉZë;`º•éV¦[™neº•ä¢=(’\$¹Hr‘ä"ÉE’‹$I.ZØE¦‹L™.2]Œ;_]ŽjŽü0<ži*6F5›ƒ¨"ñE«»H|‘ø"ñEâ‹Ä‰/_$¾H|Ñê.ŠmÑê.Ò]´º‹té.Ò]¤»Hw‘î"ÝEº‹té.Ò]´°‹œ9/r^ä¼Èy‘ó"çE΋œÏjæå|T³çA8⋜9/r^ä¼Èy‘ó"çE΋œƒsÙ-ZÝEº‹Vw‘ó"çE΋œ9/r^ä¼Èy‘ó"ÝEº‹té.Ò]¤»Hw‘î"ÝEº‹té.Ò] -²ôºÒonÕÑ(ªyõSa´ª¢šSñ°Y 1¨Z¨ƒzX  cÖч•Ы`5¬¬…u°6ÀFØ›a è¶ut쀰 vøû¢š Ãaw÷Ã8‡à0£pNÀI8Z}m½½ŽÓçà<èvô”C}ëÿ Ot®Â5¸Z‚½ ·à6Ü»pRðô;úÃHCB·²ç íØÑ—ð ^Ãx«)Y˜µ÷QÍ£î°Wà#|‚ÏðÅýÜÚA%Tµ½ÔöRÛKm/µ½ÔöRÛKm/«½¬ö²ÚËj/«½¬ö²ÚËj¯æj½ÔöRÛKmï§‚+QÍOþ˰æ¥wSTóþ7Â&Ó½L÷2ÝËt¯îl½t÷ÒÝKw/ݽt÷jÛÖ+¢½û€î^º{é—î^º{éîÕã­—ó^Î{9ïå¼—î^º{é—î^ ázåª÷20ÝËt/Ó½L÷2ÝËôb˜«ÛQÍŸ{Žˆî^º{éîÕV®—ó^Î{é—î^º{éîÕy®—ó^Î{é—î^º{ƒn!ì}L÷2ÝËt/Ó½Á´5½h_é^¤{‘îEºé^¤{‘æ?½îl—E5eOØ$~Ñš^d‘ýEöÙ_d‘ýEöÙ_d‘ýEöÙ_´°EtÑÂ^¤{‘îE¦™^dz‘éE¦™^dz‘éE¦™^dz‘éE¦™^dz‘éE¦™^dz‘éE¦™^´ºé^4‹ç¢šŸùƒp”t/ZÝ‹œ/r¾Èù"狜/r¾ÈùbÐ-À‹ö"Ó‹L/2½Èô"Ó‹L/ZÝ‹t/Ò½H÷"Ý‹t/Ò½H÷"Ý‹¡³ 狜/r¾Èùâ[­Þ–—øßþ{aDü"ñ‹Ä/¿ø%ªù8_ý\·Áçå“ù/ý°Y U áóÔ@-ÔA=,ƒX+ +¡VÁjX HÂZXëal„M°¶ÀVØÛaì„]°ö@ìuÞ¸jôöG5? GtÂ!8Gá‡pNÁih†3pÎÁy¸—à2\ð¼×à:Ü€›p nø ÷!¥Éc˜Ý‡QÍp"ìé#x O x Ïà9¼„WðÞ@ÿÞÃøŸà3h=é{°Õ£0=ZþoûŸÿùðo&b´&ªùµóa“îQºGé¥{”îQºGé¥{”îQºGé¥{”îQºGé¥{”îQºGé¥{”îQºGé¥{”îQºGé¥{”îQºGé¥{t/ì~GùåwToÍQ’GI%yÔ„žˆj~c Ó£$’Êù(磜r>Êù(磜†®¢_=JDP UP 1¨Z¨ƒzX °V@VB#¬‚Õ°„µ°ÖÃØ›`3„n¡[al‡°vÃh‚½QÍÿû£Cx åÕýÿSØ<á†#p´ ½uNÀI8§¡ÎÀY8à"\‚Ëp42½u ®Ã ¸ ·à6Ü» áé­û‚ðÁcxiÈÀSxÏ!ˆ ¯œ×<ïp8Ž7QÍÿ}0ù[xïá|„Oð¾û^ê®f˜ýaö‡Ùf˜ýaö‡Ùf˜ýaö‡Ùf˜ýaö‡Ùf˜ýaö‡Ùf˜ýaö‡Ùf˜ýaö‡Ùf˜ýaö‡Ùf˜ýaMd‡E`X†E`x/ìƒý@ü0ñÃÄ?LüðѨvÍ¡p¼æoøDT[ñca“ýaö‡Ùf˜ýaö‡Ù}kE`X†E`X†E`8X`˜ýaö‡Ùf˜ýaö‡‰&~˜øa⇉&~˜øa⇉&~˜øaâ‡_h¦äUT[÷aÇE~ø p>Ìù0çÜÓ=L÷0ÝÃ_=€æº±*¡ ª!5P uPË –à ˆÃJÐŽ7¶ VÃH@ÖÂ:Øal†-°5ª=ña¯Ò°=ª]ÿÃæÐ8¶ vÃh‚½°öÃ8‡à0£ pì8œ€“p Nƒñ3pÎÁy¸á\†+p®Áu¸7A›âØm¸wá܇<­‹cá‰ÆÆá3QížÃáÈõ4Ž=ƒçÄ¿„WðÞÀ[xïá„^ÊŸà3h™#þ»ÐU™x-¢ZD'´ˆNhÐ":¡EtB‹è„Ñ -¢ZD'´ˆNhÐ":¡EtB‹è„Ñ -¢ZD'´ˆNhÐ":¡EtB‹è„Ñ -¢ZD'´ˆNè Ð':ñÝ6ÐÒù»QíÝÿ1쩉ýnwT{66‰×U9¡«rBWå„®Ê ]•º*'tUN誜ÐU9¡«rÂET:('\I%¡rÂåT:-'¾£[ãå„®Ê ]•º*'tUN誜ÐU9¡râ»ðÃt{5¦äFT{õûa׈ÿŽs]•º*'tUN誜ÐU9¡«rBW儮ʉïˆÿ.ˆym”.è’ÐK9¡—rB/儞ˉï8ÿŽs­ßqþçš,'4YNh²œÐd9¡¡rB/åĈ]¡{„îºGè¡{„îºGè¡{dYTûý°òF,ˆ‘åQí£ía“øâGˆá|„óÎG8á|„óÎG8á|„óÎG8á|„óÎG,ñK|Ä ±ÄG˜az„é¦G˜az„é¦G˜az„éK|„îºGè¡{„îó2r&ª}±;ñ#Ä?Büñ#Ä?Büñ#ÖùHoÐ=bp>Âùç#œp>Âùç#tÐ=B÷Ý#t0=ÂôÓ#L0=ÂôÓ#L0=ÂôÓ#µ7Sò%ªý°%ÌWÿVTBTC ÔBÔÃ2h€å°ôGWáœTáœTáœTáœTÜœTÜœTÜœTÜœTÜœTÜœTÜœTÜœTÜœTÜœTÜœTÜœ<»vÀNØ»Aûu%Íɳ{£ÚŸù7aï?Àþ¨ö/þ×aó„CpŽÀQ8ÇᜄSpšá œ…sp.ÀE¸—á \…kpnÀM¸·áÜ…{pRðÂ#x O x Ïà9¼„WðÞ€Võꚓꚓ=á?Fµ?ý5ÌFèpÿ¾çZF%µŒJºSRߨ¤K%5JêR•ì!^˨¤–QI-£’ZF%µŒJj•Ô2*©eTR?¨¤Ë%5…JºÖQRg¨¤¾QI ¥’J%5”Jj(•Ô-*©[TR·¨¤nQIÝ¢’ºE%u‹Jê•Ô-*©[TR·¨¤öPIWQJê•t)¥¤FQIm¤’=tk•Ô2*©eÔÆoå³m×ß ÇK·–QI-£’ZF%µŒJj•Ô2*©eTR?¨¤~PI×gJj •Ô2*ÙôLI=˜’ú2%{ŽGµ?w)<¼è4•Ôi*©ÓTR/©¤^RI½¤’zI%õ’Jê%•ÔK*©—TR/©¤æQIWƒJê •tI¨¤6RIM¦’=" yT²'\£@´–JöÈ^RI}£’.,•Ô7*9¿Òª!¨ ^ÕUržøyâ牟'~žøyâ牟'~žøyâ牟'~>hüÕþÝMá¡ä`žøyâ牟÷lóÄÏ[öóë¢Ú_ÍW¸JÂy7ˆÀ¼Ì‹À¼£œßÕöýŸáA%b^æ…a^æ…a^æ…a^æå`^æå`^æå`^æå`^æ-ûy«bÞ²Ÿ—ƒy9˜—ƒy9˜—ƒy9˜—ƒy9˜—ƒyÓ9/ óÂ0/ óÂ0/ óœÏs>Ïù<çóœÏs>Ïù<çóœÏs>Ïù<çóœÏs>Ïù<çóœÏ?3Má*O£Úÿæ`˜âç9Ÿç|žóyÎç­ýyâçõ*‚xÁœ·ìç…u^Xç¿zÐ`!‚JpÁŠï È÷bPµPõ° `9¬€8×÷a¬×¾øÞZXëal„MàÊßÛ[al‡°vAùåÛïýiØÝ×Ðͻ̾^Ø®¯ñ½pÁa8Gá‡pNÁih†3p.ÀE¸—á \…kpnÀM¸·áÜ…{‚ðÁcxiÈÀSºŸC¸¨ÈKxoἇð>Ágøbus4”½‰jx$LÝ>—Z;@÷Ý$‰ùÑ£úÀ›á‘Ùxg3<¹ |°vHüzåG;) _l†/Û_×PÕ%Z*üÛM›¸N¦£\×PZÑ:òu 1¨±yͨ<›¡u õ°Ìæ£Xnó²Ñ ðe»Ù]×°m^4Z«m^0Z~Ï>pÞ( kmž3Zëmž5Úmž1Ú›m6mý¾\eg]Ã6Ønó”ÑpaX×° vÛ<Šýë ‘¯3r0]!òá)yWˆ|‘iê ‘ûgN»Bä«è ‘ÃVWˆ|¥µ]!òáÈå +D¾ÂHhºD¾?Ì•„u‰|ÿ#qìù~Û%»]"ßÿÉHлD¾Ÿ….‘ïùþF"ß%òý”u‰|—È÷¿3ù.‘ïç·Kä»D¾ÿ‘Èw‰|¿0t‰|—È÷¿2ù.‘ï—œ.‘ïùþF"ß%òýbÖ%ò]"ßÿÌHä»D¾_&»D¾Käû3F"ß%òýÜ%ò]"ßÿÄHä»D¾_Ú»D¾ÿ‘Qø ‘ï÷ /òýŒÂ¾ˆ|xаã"ßß(¥È÷‡=S"òýwÂü‰|ØÝ0Ù"ßÛ(˜ùþpleëÏ•#¿õ_ˆ|ÿM›ˆ|ÿ £*ùþëF1ùþkFµ òýWêAäû¯5€È÷_6Z"ßÉh%ˆ|ÿE£U òýŒÖ€È÷Ÿ7J‚È÷Ÿ3Z"ßÖhˆ|ÿ£M òýÍF[@äûOm‘ï?e´D¾ÿ¤Ñ.ùþF{ Dþ¸Ñ^‘?f´Bä„ù#F‡!D>ŒÂ]Bä…Ç ‘žLb Bä·=„ù0ã!D~³QB䃞§"¿Ñè9„È—/!D~½Ñk‘âßBˆüZ£÷"RòBäFŸ!D>DJä'Ê‘ßõ‡È¯¶)ò!òB8!ò!òF"?"/±"?"7ù‰yñžù‰ùåFáßBäà áBä—…g ‘bÿ&BäëŒÌDˆ|xJG>"_cdš&BäÃþ™Ó‰ùj#&BäÃÁ°5"_iDíDˆ|8r9˜‘¯0š ‘ï s%a"ß÷ÅH'D¾ÏÄNÈî„È÷}2ô ‘ïcaBä'D¾ïƒ‘ÈOˆ|e"?!ò}ïŒD~Bäûøù ‘ï{c$ò"ß' "?!ò}¯ŒD~Bäû$gBä'D¾ï…‘ÈOˆ|Ÿ˜Mˆü„È÷=3ù ‘ï“É ‘Ÿù¾Œ‘ÈOˆ|ŸOˆü„È÷=1ù ‘ï“ö‰‘ï{dþBäûÂýÂË|ߣ°/"ß4ì¸È÷Ý7 G)ò}a”ˆ|ß]£0"ßv7L¶È÷Ý6 fD¾/›Îÿß/Gþ€¯[7öÝ´È÷Ý0ª‘ï»n‘ï»fT "ßwÕ¨D¾ïŠQˆ|ße£ ò}—ŒV‚È÷]4Z"ßwÁh ˆ|ßy£$ˆ|ß9£u ò}g6€È÷1Ú"ß×l´D¾ï´Ñ6ù¾SF;@äûNí‘ïs €ïïùãF{!Dþ˜Ñ~‘?jtBä†ù0 w ‘?d/D>üYxòyW]ø~ØÓùðá°Bä÷…9‘;&,D¾É(Ìnˆ|Øû "D~·Qð"5H‘ßit BäüÜùíF÷ D>Lb Bä·=„ù0ã!D~³QB䃞§"¿Ñè9„È—®°ðýùõF.½ðýù Þ5¾"¿Öè=„ȇ”|„ù„‘kZ|?D>D*\ì¢ùãc!ò«mŠüRˆ¼.‰üRˆ|£‘È/…ÈKì’È/…ÈÇD~)D^¼—D~)D~¹Qø·ùpCx€ùeFáÙBäãؿ¥ù:#³"žÒ‘/…È×™¦¥ù°æt)D¾Úˆ€¥ùp0l-…ÈWQ»"Ž\–Bä+Œ„fIä¿…¹’°%‘ÿ."ŽK"ÿ-\,Dv—Dþ[¸lˆ /…Þ‹,,‰ü’È Wù%‘ÿFÙ’È/‰ü·p¥ ‘_ ]OÃ57D~)\P2\}Cä—Dþ[¸‡È/‰ü·pE‘_ùoáÚ"¿$òßÂND~)\oVÌ–D~)tàf$òK"ÿM&—D~Iä¿eŒD~Iä¿ ð’È/…vÐOŒD~Iä¿IûR€È{dþ"´÷ /òß=–]ñ™ôÆoÂõ-|nÆà·ðcðput¹úÖ"õ-\'üò`%4Fug¿„XÕ=£ÕQÝO< £5QÝ/þi%¢º?ÙFɨ~Í¿ £µQý½ÿ'ŒÖEõo^„Ñú¨¾³/Œ6DõÚF£ek~#Œ6Aø9f˜«ðƒ­0MáÒBa†RѲǿU-{ñ_–ñ¡9¼Yv ¢ð~ÿ!„·ú!¼ËOCxƒÿÂ{ûçÞÖ¿„ðŽþ5„7óÚkýè£+W_ûѧV!¼{wåÞ}VåšHcåÝø ~ý³q,K|¬ ¬î1-„ÇÌý˜¹3íc¦}Ì´™ö1Ó>fÚÇLû˜i³~ÇV¥;¶¬Ú1×ë³`ÇÖµ:¦8|Ì23cüŽm‹slX—cúÖŽY’c»ÀjÛâ˜RÑ1kpl?X~cš;Yyc‡Á¢ó¥Ô˜õ6v,µ±“`• lì X[cçÀ²»VÔØ%°˜Æ®€u4¦Ì`Ì»VϘ0Œ Ø0Œ Ø0Œ ÃñcÄ?FüñcÄ?FüñcÄ?FüñcÄ?FüñcÄ?FüñcÄ?FüXYü¦ƒeñß|¦¿é`•PÕƒ¨…:¨‡eÐËaÄa%4Â*X k IX ë`=l€° 6ÃØ Û`;쀰 vÃh‚½°öÃ8‡à0£p ŽÃ 8 §à44Ã8 çà<\€‹p .ø ×à:Ü€›p nø ÷à>¤à<„Gðž@2ðžÁsx/ἆ7ðÞÁ{øá|†/@|®,>§#ó¦ñ9âsÄçˆÏŸ#>G|Žøñ9âsÄçˆÏŸ#>G|Žøñ9âsÄçˆÏŸ#>G|Žøñ9âsÄçˆÏŸ#>G|Žøñ9âsÄçˆÏŸ#>G|Žøñ9âsÄçˆÏŸ#>G|Žøñ9âsÄçˆÏŸ#>G|Žøñ9âsÄçˆÏŸ#>G|Žøñ9âsÄçˆÏŸ#>G|Žøñ9âsÄçˆÏŸ#>G|Žøñ9âsÄçˆÏŸ#>G|Žøñ9âsÄçˆÏŸ#>G|Žøñ9âsÄ—Êâÿ¾Ÿsm*_"¾D|‰øñ%âKÄ—ˆ/_"¾D|‰øñ%âKÄ—ˆ/_"¾D|‰øñ%âKÄ—ˆ/_"¾D|‰øñ%âKÄ—ˆ/_"¾D|‰øñ%âKÄ—ˆ/_"¾D|‰øñ%âKÄ—ˆ/_"¾D|‰øñ%âKÄ—ˆ/_"¾D|‰øñ%âKÄ—ˆ/_"¾D|‰øñ%âKÄ—ˆ/_"¾D|‰øñ%âKÄ—ˆ/_"¾D|‰øñ%âKÄ—ˆ/_"¾D|‰øñ%âKÄ—ˆ/_"¾T¿ùMYü>;›ßDP UP 1¨Z¨ƒzX °V@VB#¬‚Õ°„µ°ÖÃØ›`3l­° ¶ÃØ »`7ì&Ø û`?€ƒpÃ8 Çà8œ€“p NC3œ³pÎø—à2\«p ®Ã ¸ ·à6Ü»pîC ÀCxá ¤!Oá<‡ð^Ákxoἇð>ÁgøÄçËâà;æÍyâóÄç‰ÏŸ'>O|žø<ñyâóÄç‰ÏŸ'>O|žø<ñyâóÄç‰ÏŸ'>O|žø<ñyâóÄç‰ÏŸ'>O|žø<ñyâóÄç‰ÏŸ'>O|žø<ñyâóÄç‰ÏŸ'>O|žø<ñyâóÄç‰ÏŸ'>O|žø<ñyâóÄç‰ÏŸ'>O|žø<ñyâóÄç‰ÏŸ'>O|žø<ñyâóÄç‰ÏŸ'>O|žø<ñyâóÄç‰ÏŸ'>O|žø<ñyâóÄç‰ÏŸ'>O|žø<ñyâóÄçËâ·ì.‹ÿ¡7N[vGP UP 1¨Z¨ƒzX °V@VB#¬‚Õ°„µ°ÖÃØ›`3l­° ¶ÃØ »`7ì&Ø û`?€ƒpÃ8 Çà8œ€“p NC3œ³pÎø—à2\«p ®Ã ¸ ·à6Ü»pîC ÀCxá ¤!Oá<‡ð^Ákxoἇð>ÁgøÄgËâÿ¿J|–ø,ñYâ³Äg‰ÏŸ%>K|–ø,ñYâ³Äg‰ÏŸ%>K|–ø,ñYâ³Äg‰ÏŸ%>K|–ø,ñYâ³Äg‰ÏŸ%>K|–ø,ñYâ³Äg‰ÏŸ%>K|–ø,ñYâ³Äg‰ÏŸ%>K|–ø,ñYâ³Äg‰ÏŸ%>K|–ø,ñYâ³Äg‰ÏŸ%>K|–ø,ñYâ³Äg‰ÏŸ%>K|–ø,ñYâ³Äg‰ÏŸ%>K|–ø,ñYâ³Äg‰ÏŸ%>K|–ø,ñYâ³Äg‰ÏŸ%>K|–ø,ñYâçÊâK.Ù²eŽø9â爟#~Žø9â爟#~Žø9â爟#~Žø9â爟#~Žø9â爟#~Žø9â爟#~Žø9â爟#~Žø9â爟#~Žø9â爟#~Žø9â爟#~Žø9â爟#~Žø9â爟#~Žø9â爟#~Žø9â爟#~Žø9â爟#~Žø9â爟#~Žø9â爟#~îV´ì_­*OñÒÊÿ¿=HÐ endstream endobj startxref 720461 %%EOF comedilib-0.11.0/doc/comedilib.ent0000644000000000000000000000017512674013666013631 00000000000000Comedi'> comedilib-0.11.0/doc/comedilib_html_config.xsl0000644000000000000000000000113412416542105016203 00000000000000 comedilib.css ansi comedilib-0.11.0/doc/drivers.xml0000644000000000000000000056257213105043750013373 00000000000000 %comedilib_entities; ]>
Kernel drivers
8255 -- generic 8255 support Author: ds Status: works Manufacturer Device Name standard 8255 8255 The classic in digital I/O. The 8255 appears in Comedi as a single digital I/O subdevice with 24 channels. The channel 0 corresponds to the 8255's port A, bit 0; channel 23 corresponds to port C, bit 7. Direction configuration is done in blocks, with channels 0-7, 8-15, 16-19, and 20-23 making up the 4 blocks. The only 8255 mode supported is mode 0. You should enable compilation this driver if you plan to use a board that has an 8255 chip. For multifunction boards, the main driver will configure the 8255 subdevice automatically. This driver also works independently with ISA and PCI cards that directly map the 8255 registers to I/O ports, including cards with multiple 8255 chips. To configure the driver for such a card, the option list should be a list of the I/O port bases for each of the 8255 chips. For example, comedi_config /dev/comedi0 8255 0x200,0x204,0x208,0x20c Note that most PCI 8255 boards do NOT work with this driver, and need a separate driver as a wrapper. For those that do work, the I/O port base address can be found in the output of 'lspci -v'.
acl7225b -- ADLINK NuDAQ ACL-7225b & compatibles Author: José Luis Sánchez (jsanchezv@teleline.es) Status: testing Manufacturer Device Name ADLINK ACL-7225b acl7225b ICP P16R16DIO p16r16dio
adl_pci6208 -- ADLINK PCI-6216V Author: nsyeow <nsyeow@pd.jaring.my> Status: untested Manufacturer Device Name ADLINK PCI-6216V adl_pci6208 Configuration Options: none The driver should work for PCI-6208V, PCI-6208A and PCI-6216V, but all devices will be treated as a PCI-6216V. For PCI-6208V and PCI-6208A, only AO channels 0 to 7 are connected and AO channels 8 to 15 will behave as "phantom" outputs. The current output ranges for PCI-6208A are not supported. Only Comedi sample values 0x8000 to 0xffff should be written to the AO channels on a PCI-6208A. Its voltage to current daughter board (EXP-8A) only supports an input range of 0 to 10 volts and negative voltages may damage the board. Comedi sample values 0x0000 to 0x7fff would produce negative voltages from -10 to 0 volts.
adl_pci7230 -- Driver for the ADLINK PCI-7230 32 ch. isolated digital io board Author: David Fernandez <dfcastelao@gmail.com> Status: experimental Manufacturer Device Name ADLINK PCI-7230 adl_pci7230 Configuration Options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first supported PCI device found will be used.
adl_pci7250 -- Driver for the ADLINK PCI-7250 relay output & digital input card Author: Ian Abbott <abbotti@mev.co.uk> Status: works Manufacturer Device Name ADLINK LPCI-7250 LPCIe-7250 adl_pci7250 The driver assumes that 3 PCI-7251 modules are fitted to the PCI-7250, giving 32 channels of relay outputs and 32 channels of isolated digital inputs. That is also the case for the LPCI-7250 and LPCIe-7250 cards although they do not physically support the PCI-7251 modules. Not fitting the PCI-7251 modules shouldn't do any harm, but the extra inputs and relay outputs won't work! Configuration Options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first supported PCI device found will be used.
adl_pci7296 -- Driver for the ADLINK PCI-7296 96 ch. digital io board Author: Jon Grierson <jd@renko.co.uk> Status: testing Manufacturer Device Name ADLINK PCI-7296 adl_pci7296 Configuration Options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first supported PCI device found will be used.
adl_pci7432 -- Driver for the ADLINK PCI-7432 64 ch. isolated digital io board Author: Michel Lachaine <mike@mikelachaine.ca> Status: experimental Manufacturer Device Name ADLINK PCI-7432 adl_pci7432 Configuration Options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first supported PCI device found will be used.
adl_pci8164 -- Driver for the ADLINK PCI-8164 4 Axes Motion Control board Author: Michel Lachaine <mike@mikelachaine.ca> Status: experimental Manufacturer Device Name ADLINK PCI-8164 adl_pci8164 Configuration Options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first supported PCI device found will be used.
adl_pci9111 -- ADLINK PCI-9111HR Author: Emmanuel Pacaud <emmanuel.pacaud@univ-poitiers.fr> Status: experimental Manufacturer Device Name ADLINK PCI-9111HR adl_pci9111 - ai_insn read - ao_insn read/write - di_insn read - do_insn read/write - ai_do_cmd mode with the following sources: - start_src TRIG_NOW - scan_begin_src TRIG_FOLLOW TRIG_TIMER TRIG_EXT - convert_src TRIG_TIMER TRIG_EXT - scan_end_src TRIG_COUNT - stop_src TRIG_COUNT TRIG_NONE The scanned channels must be consecutive and start from 0. They must all have the same range and aref. Configuration options: [0] - PCI bus number (optional) [1] - PCI slot number (optional) If bus/slot is not specified, the first available PCI device will be used.
adl_pci9112 -- ADLINK PCI-9112 Author: Pascal Berthou <berthou@laas.fr> Emmanuel Pacaud <emmanuel.pacaud@univ-poitiers.fr> Status: experimental Manufacturer Device Name ADLINK PCI-9112 adl_pci9112 - ai_insn read - ao_insn read/write - di_insn read - do_insn read/write Following command mode are not tested - ai_do_cmd mode with the following sources: - start_src TRIG_NOW - scan_begin_src TRIG_FOLLOW TRIG_TIMER TRIG_EXT - convert_src TRIG_TIMER TRIG_EXT - scan_end_src TRIG_COUNT - stop_src TRIG_COUNT TRIG_NONE The scanned channels must be consecutive and start from 0. They must all have the same range and aref. Configuration options: [0] - PCI bus number (optional) [1] - PCI slot number (optional) If bus/slot is not specified, the first available PCI device will be used.
adl_pci9118 -- ADLINK PCI-9118DG, PCI-9118HG, PCI-9118HR Author: Michal Dobes <dobes@tesnet.cz> Status: works Manufacturer Device Name ADLINK PCI-9118DG pci9118dg ADLINK PCI-9118HG pci9118hg ADLINK PCI-9118HR pci9118hr This driver supports AI, AO, DI and DO subdevices. AI subdevice supports cmd and insn interface, other subdevices support only insn interface. For AI: - If cmd->scan_begin_src=TRIG_EXT then trigger input is TGIN (pin 46). - If cmd->convert_src=TRIG_EXT then trigger input is EXTTRG (pin 44). - If cmd->start_src/stop_src=TRIG_EXT then trigger input is TGIN (pin 46). - It is not neccessary to have cmd.scan_end_arg=cmd.chanlist_len but cmd.scan_end_arg modulo cmd.chanlist_len must by 0. - If return value of cmdtest is 5 then you've bad channel list (it isn't possible mixture S.E. and DIFF inputs or bipolar and unipolar ranges). There are some hardware limitations: a) You cann't use mixture of unipolar/bipoar ranges or differencial/single ended inputs. b) DMA transfers must have the length aligned to two samples (32 bit), so there is some problems if cmd->chanlist_len is odd. This driver tries bypass this with adding one sample to the end of the every scan and discard it on output but this cann't be used if cmd->scan_begin_src=TRIG_FOLLOW and is used flag TRIG_WAKE_EOS, then driver switch to interrupt driven mode with interrupt after every sample. c) If isn't used DMA then you can use only mode where cmd->scan_begin_src=TRIG_FOLLOW. Configuration options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, then first available PCI card will be used. [2] - 0= standard 8 DIFF/16 SE channels configuration n= external multiplexer connected, 1<=n<=256 [3] - 0=autoselect DMA or EOC interrupts operation 1=disable DMA mode 3=disable DMA and INT, only insn interface will work [4] - sample&hold signal - card can generate signal for external S&H board 0=use SSHO (pin 45) signal is generated in onboard hardware S&H logic 0!=use ADCHN7 (pin 23) signal is generated from driver, number say how long delay is requested in ns and sign polarity of the hold (in this case external multiplexor can serve only 128 channels) [5] - 0=stop measure on all hardware errors 2|=ignore ADOR - A/D Overrun status 8|=ignore Bover - A/D Burst Mode Overrun status 256|=ignore nFull - A/D FIFO Full status
adq12b -- driver for MicroAxial ADQ12-B data acquisition and control card Author: jeremy theler <thelerg@ib.cnea.gov.ar> Status: works Manufacturer Device Name MicroAxial ADQ12-B adq12b Driver for the acquisition card ADQ12-B (without any add-on). - Analog input is subdevice 0 (16 channels single-ended or 8 differential) - Digital input is subdevice 1 (5 channels) - Digital output is subdevice 1 (8 channels) - The PACER is not supported in this version If you do not specify any options, they will default to # comedi_config /dev/comedi0 adq12b 0x300,0,0 option 1: I/O base address. The following table is provided as a help of the hardware jumpers. address jumper JADR 0x300 1 (factory default) 0x320 2 0x340 3 0x360 4 0x380 5 0x3A0 6 option 2: unipolar/bipolar ADC selection: 0 -> bipolar, 1 -> unipolar selection comedi_config option JUB bipolar 0 2-3 (factory default) unipolar 1 1-2 option 3: single-ended/differential AI selection: 0 -> SE, 1 -> differential selection comedi_config option JCHA JCHB single-ended 0 1-2 1-2 (factory default) differential 1 2-3 2-3 written by jeremy theler <thelerg@ib.cnea.gov.ar> instituto balseiro comision nacional de energia atomica universidad nacional de cuyo argentina 21-feb-2008 + changed supported devices string (missused the [] and ()) 13-oct-2007 + first try
adv_pci1710 -- Advantech PCI-1710, PCI-1710HG, PCI-1711, PCI-1713, Advantech PCI-1720, PCI-1731 Author: Michal Dobes <dobes@tesnet.cz> Status: works Manufacturer Device Name Advantech PCI-1710 pci1710 or adv_pci1710 Advantech PCI-1710HG pci1710hg Advantech PCI-1711 pci1711 or adv_pci1710 Advantech PCI-1713 pci1713 or adv_pci1710 Advantech PCI-1716 pci1716 or adv_pci1710 Advantech PCI-1720 pci1720 or adv_pci1710 Advantech PCI-1731 pci1731 or adv_pci1710 This driver supports AI, AO, DI and DO subdevices. AI subdevice supports cmd and insn interface, other subdevices support only insn interface. The PCI-1710 and PCI-1710HG have the same PCI device ID, so the driver cannot distinguish between them, as would be normal for a PCI driver. Configuration options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first available PCI device will be used.
adv_pci1723 -- Advantech PCI-1723 Author: yonggang <rsmgnu@gmail.com>, Ian Abbott <abbotti@mev.co.uk> Status: works Manufacturer Device Name Advantech PCI-1723 adv_pci1723 Configuration Options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first supported PCI device found will be used. Subdevice 0 is 8-channel AO, 16-bit, range +/- 10 V. Subdevice 1 is 16-channel DIO. The channels are configurable as input or output in 2 groups (0 to 7, 8 to 15). Configuring any channel implicitly configures all channels in the same group. 1. Add the two milliamp ranges to the AO subdevice (0 to 20 mA, 4 to 20 mA). 2. Read the initial ranges and values of the AO subdevice at start-up instead of reinitializing them. 3. Implement calibration.
adv_pci_dio -- Advantech PCI-1730, PCI-1733, PCI-1734, PCI-1735U, PCI-1736UP, PCI-1750, PCI-1751, PCI-1752, PCI-1753/E, PCI-1754, PCI-1756, PCI-1762 Author: Michal Dobes <dobes@tesnet.cz> Status: untested Manufacturer Device Name Advantech PCI-1730 adv_pci_dio Advantech PCI-1733 adv_pci_dio Advantech PCI-1734 adv_pci_dio Advantech PCI-1735U adv_pci_dio Advantech PCI-1736UP adv_pci_dio Advantech PCI-1739U adv_pci_dio Advantech PCI-1750 adv_pci_dio Advantech PCI-1751 adv_pci_dio Advantech PCI-1752 adv_pci_dio Advantech PCI-1753 adv_pci_dio Advantech PCI-1753+PCI-1753E adv_pci_dio Advantech PCI-1754 adv_pci_dio Advantech PCI-1756 adv_pci_dio Advantech PCI-1760 adv_pci_dio Advantech PCI-1762 adv_pci_dio This driver supports now only insn interface for DI/DO/DIO. Configuration options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first available PCI device will be used.
aio_aio12_8 -- Acces I/O Products PC-104 AIO12-8 Analog I/O Board Author: Pablo Mejia <pablo.mejia@cctechnol.com> Status: experimental Manufacturer Device Name Acces I/O PC-104 AIO12-8 adv_pci_dio Configuration Options: [0] - I/O port base address Only synchronous operations are supported.
aio_iiro_16 -- Acces I/O Products PC-104 IIRO16 Relay And Isolated Input Board Author: Zachary Ware <zach.ware@cctechnol.com> Status: experimental Manufacturer Device Name Acces I/O PC-104 AIO12-8 adv_pci_dio Configuration Options: [0] - I/O port base address
amplc_dio200 -- Amplicon 200 Series Digital I/O Author: Ian Abbott <abbotti@mev.co.uk> Status: works Manufacturer Device Name Amplicon PC212E pc212e Amplicon PC214E pc214e Amplicon PC215E pc215e Amplicon PCI215 pci215 or amplc_dio200 Amplicon PCIe215 pcie215 or amplc_dio200 Amplicon PC218E pc218e Amplicon PCIe236 pcie236 or amplc_dio200 Amplicon PC272E pc272e Amplicon PCI272 pci272 or amplc_dio200 Amplicon PCIe296 pcie296 or amplc_dio200 Configuration options - PC212E, PC214E, PC215E, PC218E, PC272E: [0] - I/O port base address [1] - IRQ (optional, but commands won't work without it) Configuration options - PCI215, PCIe215, PCIe236, PCI272, PCIe296: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first available PCI device will be used. Passing a zero for an option is the same as leaving it unspecified. SUBDEVICES PC212E PC214E PC215E/PCI215 ------------- ------------- ------------- Subdevices 6 4 5 0 PPI-X PPI-X PPI-X 1 CTR-Y1 PPI-Y PPI-Y 2 CTR-Y2 CTR-Z1* CTR-Z1 3 CTR-Z1 INTERRUPT* CTR-Z2 4 CTR-Z2 INTERRUPT 5 INTERRUPT PCIe215 PC218E PCIe236 ------------- ------------- ------------- Subdevices 8 7 8 0 PPI-X CTR-X1 PPI-X 1 UNUSED CTR-X2 UNUSED 2 PPI-Y CTR-Y1 UNUSED 3 UNUSED CTR-Y2 UNUSED 4 CTR-Z1 CTR-Z1 CTR-Z1 5 CTR-Z2 CTR-Z2 CTR-Z2 6 TIMER INTERRUPT TIMER 7 INTERRUPT INTERRUPT PC272E/PCI272 PCIe296 ------------- ------------- Subdevices 4 8 0 PPI-X PPI-X1 1 PPI-Y PPI-X2 2 PPI-Z PPI-Y1 3 INTERRUPT PPI-Y2 4 CTR-Z1 5 CTR-Z2 6 TIMER 7 INTERRUPT Each PPI is a 8255 chip providing 24 DIO channels. The DIO channels are configurable as inputs or outputs in four groups: Port A - channels 0 to 7 Port B - channels 8 to 15 Port CL - channels 16 to 19 Port CH - channels 20 to 23 Only mode 0 of the 8255 chips is supported. Each CTR is a 8254 chip providing 3 16-bit counter channels. Each channel is configured individually with INSN_CONFIG instructions. The specific type of configuration instruction is specified in data[0]. Some configuration instructions expect an additional parameter in data[1]; others return a value in data[1]. The following configuration instructions are supported: INSN_CONFIG_SET_COUNTER_MODE. Sets the counter channel's mode and BCD/binary setting specified in data[1]. INSN_CONFIG_8254_READ_STATUS. Reads the status register value for the counter channel into data[1]. INSN_CONFIG_SET_CLOCK_SRC. Sets the counter channel's clock source as specified in data[1] (this is a hardware-specific value). Not supported on PC214E. For the other boards, valid clock sources are 0 to 7 as follows: 0. CLK n, the counter channel's dedicated CLK input from the SK1 connector. (N.B. for other values, the counter channel's CLKn pin on the SK1 connector is an output!) 1. Internal 10 MHz clock. 2. Internal 1 MHz clock. 3. Internal 100 kHz clock. 4. Internal 10 kHz clock. 5. Internal 1 kHz clock. 6. OUT n-1, the output of counter channel n-1 (see note 1 below). 7. Ext Clock, the counter chip's dedicated Ext Clock input from the SK1 connector. This pin is shared by all three counter channels on the chip. INSN_CONFIG_GET_CLOCK_SRC. Returns the counter channel's current clock source in data[1]. For internal clock sources, data[2] is set to the period in ns. INSN_CONFIG_SET_GATE_SRC. Sets the counter channel's gate source as specified in data[2] (this is a hardware-specific value). Not supported on PC214E. For the other boards, valid gate sources are 0 to 7 as follows: 0. VCC (internal +5V d.c.), i.e. gate permanently enabled. 1. GND (internal 0V d.c.), i.e. gate permanently disabled. 2. GAT n, the counter channel's dedicated GAT input from the SK1 connector. (N.B. for other values, the counter channel's GATn pin on the SK1 connector is an output!) 3. /OUT n-2, the inverted output of counter channel n-2 (see note 2 below). 4. Reserved. 5. Reserved. 6. Reserved. 7. Reserved. INSN_CONFIG_GET_GATE_SRC. Returns the counter channel's current gate source in data[2]. Clock and gate interconnection notes: 1. Clock source OUT n-1 is the output of the preceding channel on the same counter subdevice if n > 0, or the output of channel 2 on the preceding counter subdevice (see note 3) if n = 0. 2. Gate source /OUT n-2 is the inverted output of channel 0 on the same counter subdevice if n = 2, or the inverted output of channel n+1 on the preceding counter subdevice (see note 3) if n < 2. 3. The counter subdevices are connected in a ring, so the highest counter subdevice precedes the lowest. The 'TIMER' subdevice is a free-running 32-bit timer subdevice. The 'INTERRUPT' subdevice pretends to be a digital input subdevice. The digital inputs come from the interrupt status register. The number of channels matches the number of interrupt sources. The PC214E does not have an interrupt status register; see notes on 'INTERRUPT SOURCES' below. INTERRUPT SOURCES PC212E PC214E PC215E/PCI215 ------------- ------------- ------------- Sources 6 1 6 0 PPI-X-C0 JUMPER-J5 PPI-X-C0 1 PPI-X-C3 PPI-X-C3 2 CTR-Y1-OUT1 PPI-Y-C0 3 CTR-Y2-OUT1 PPI-Y-C3 4 CTR-Z1-OUT1 CTR-Z1-OUT1 5 CTR-Z2-OUT1 CTR-Z2-OUT1 PCIe215 PC218E PCIe236 ------------- ------------- ------------- Sources 6 6 6 0 PPI-X-C0 CTR-X1-OUT1 PPI-X-C0 1 PPI-X-C3 CTR-X2-OUT1 PPI-X-C3 2 PPI-Y-C0 CTR-Y1-OUT1 unused 3 PPI-Y-C3 CTR-Y2-OUT1 unused 4 CTR-Z1-OUT1 CTR-Z1-OUT1 CTR-Z1-OUT1 5 CTR-Z2-OUT1 CTR-Z2-OUT1 CTR-Z2-OUT1 PC272E/PCI272 PCIe296 ------------- ------------- Sources 6 6 0 PPI-X-C0 PPI-X1-C0 1 PPI-X-C3 PPI-X1-C3 2 PPI-Y-C0 PPI-Y1-C0 3 PPI-Y-C3 PPI-Y1-C3 4 PPI-Z-C0 CTR-Z1-OUT1 5 PPI-Z-C3 CTR-Z2-OUT1 When an interrupt source is enabled in the interrupt source enable register, a rising edge on the source signal latches the corresponding bit to 1 in the interrupt status register. When the interrupt status register value as a whole (actually, just the 6 least significant bits) goes from zero to non-zero, the board will generate an interrupt. For level-triggered hardware interrupts (PCI card), the interrupt will remain asserted until the interrupt status register is cleared to zero. For edge-triggered hardware interrupts (ISA card), no further interrupts will occur until the interrupt status register is cleared to zero. To clear a bit to zero in the interrupt status register, the corresponding interrupt source must be disabled in the interrupt source enable register (there is no separate interrupt clear register). The PC214E does not have an interrupt source enable register or an interrupt status register; its 'INTERRUPT' subdevice has a single channel and its interrupt source is selected by the position of jumper J5. COMMANDS The driver supports a read streaming acquisition command on the 'INTERRUPT' subdevice. The channel list selects the interrupt sources to be enabled. All channels will be sampled together (convert_src == TRIG_NOW). The scan begins a short time after the hardware interrupt occurs, subject to interrupt latencies (scan_begin_src == TRIG_EXT, scan_begin_arg == 0). The value read from the interrupt status register is packed into a sampl_t value, one bit per requested channel, in the order they appear in the channel list.
amplc_pc236 -- Amplicon PC36AT, PCI236 Author: Ian Abbott <abbotti@mev.co.uk> Status: works Manufacturer Device Name Amplicon PC36AT pc36at Amplicon PCI236 pci236 or amplc_pc236 Configuration options - PC36AT: [0] - I/O port base address [1] - IRQ (optional) Configuration options - PCI236: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first available PCI device will be used. The PC36AT ISA board and PCI236 PCI board have a single 8255 appearing as subdevice 0. Subdevice 1 pretends to be a digital input device, but it always returns 0 when read. However, if you run a command with scan_begin_src=TRIG_EXT, a rising edge on port C bit 3 acts as an external trigger, which can be used to wake up tasks. This is like the comedi_parport device, but the only way to physically disable the interrupt on the PC36AT is to remove the IRQ jumper. If no interrupt is connected, then subdevice 1 is unused.
amplc_pc263 -- Amplicon PC263, PCI263 Author: Ian Abbott <abbotti@mev.co.uk> Status: works Manufacturer Device Name Amplicon PC263 pc263 Amplicon PCI263 pci263 or amplc_pc263 Configuration options - PC263: [0] - I/O port base address Configuration options - PCI263: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first available PCI device will be used. Each board appears as one subdevice, with 16 digital outputs, each connected to a reed-relay. Relay contacts are closed when output is 1. The state of the outputs can be read.
amplc_pci224 -- Amplicon PCI224, PCI234 Author: Ian Abbott <abbotti@mev.co.uk> Status: works, but see caveats Manufacturer Device Name Amplicon PCI224 amplc_pci224 or pci224 Amplicon PCI234 amplc_pci224 or pci234 - ao_insn read/write - ao_do_cmd mode with the following sources: - start_src TRIG_INT TRIG_EXT - scan_begin_src TRIG_TIMER TRIG_EXT - convert_src TRIG_NOW - scan_end_src TRIG_COUNT - stop_src TRIG_COUNT TRIG_EXT TRIG_NONE The channel list must contain at least one channel with no repeated channels. The scan end count must equal the number of channels in the channel list. There is only one external trigger source so only one of start_src, scan_begin_src or stop_src may use TRIG_EXT. Configuration options - PCI224: [0] - PCI bus of device (optional). [1] - PCI slot of device (optional). If bus/slot is not specified, the first available PCI device will be used. [2] - Select available ranges according to jumper LK1. All channels are set to the same range: 0=Jumper position 1-2 (factory default), 4 software-selectable internal voltage references, giving 4 bipolar and 4 unipolar ranges: [-10V,+10V], [-5V,+5V], [-2.5V,+2.5V], [-1.25V,+1.25V], [0,+10V], [0,+5V], [0,+2.5V], [0,1.25V]. 1=Jumper position 2-3, 1 external voltage reference, giving 1 bipolar and 1 unipolar range: [-Vext,+Vext], [0,+Vext]. Configuration options - PCI234: [0] - PCI bus of device (optional). [1] - PCI slot of device (optional). If bus/slot is not specified, the first available PCI device will be used. [2] - Select internal or external voltage reference according to jumper LK1. This affects all channels: 0=Jumper position 1-2 (factory default), Vref=5V internal. 1=Jumper position 2-3, Vref=Vext external. [3] - Select channel 0 range according to jumper LK2: 0=Jumper position 2-3 (factory default), range [-2*Vref,+2*Vref] (10V bipolar when options[2]=0). 1=Jumper position 1-2, range [-Vref,+Vref] (5V bipolar when options[2]=0). [4] - Select channel 1 range according to jumper LK3: cf. options[3]. [5] - Select channel 2 range according to jumper LK4: cf. options[3]. [6] - Select channel 3 range according to jumper LK5: cf. options[3]. Passing a zero for an option is the same as leaving it unspecified. 1) All channels on the PCI224 share the same range. Any change to the range as a result of insn_write or a streaming command will affect the output voltages of all channels, including those not specified by the instruction or command. 2) For the analog output command, the first scan may be triggered falsely at the start of acquisition. This occurs when the DAC scan trigger source is switched from 'none' to 'timer' (scan_begin_src = TRIG_TIMER) or 'external' (scan_begin_src == TRIG_EXT) at the start of acquisition and the trigger source is at logic level 1 at the time of the switch. This is very likely for TRIG_TIMER. For TRIG_EXT, it depends on the state of the external line and whether the CR_INVERT flag has been set. The remaining scans are triggered correctly.
amplc_pci230 -- Amplicon PCI230, PCI260 Multifunction I/O boards Author: Allan Willcox <allanwillcox@ozemail.com.au>, Steve D Sharples <steve.sharples@nottingham.ac.uk>, Ian Abbott <abbotti@mev.co.uk> Status: works Manufacturer Device Name Amplicon PCI230 pci230 or amplc_pci230 Amplicon PCI230+ pci230+ or amplc_pci230 Amplicon PCI260 pci260 or amplc_pci230 Amplicon PCI260+ pci260+ or amplc_pci230 Configuration options: [0] - PCI bus of device (optional). [1] - PCI slot of device (optional). If bus/slot is not specified, the first available PCI device will be used. Configuring a "amplc_pci230" will match any supported card and it will choose the best match, picking the "+" models if possible. Configuring a "pci230" will match a PCI230 or PCI230+ card and it will be treated as a PCI230. Configuring a "pci260" will match a PCI260 or PCI260+ card and it will be treated as a PCI260. Configuring a "pci230+" will match a PCI230+ card. Configuring a "pci260+" will match a PCI260+ card. PCI230(+) PCI260(+) --------- --------- Subdevices 3 1 0 AI AI 1 AO 2 DIO AI Subdevice: The AI subdevice has 16 single-ended channels or 8 differential channels. The PCI230 and PCI260 cards have 12-bit resolution. The PCI230+ and PCI260+ cards have 16-bit resolution. For differential mode, use inputs 2N and 2N+1 for channel N (e.g. use inputs 14 and 15 for channel 7). If the card is physically a PCI230 or PCI260 then it actually uses a "pseudo-differential" mode where the inputs are sampled a few microseconds apart. The PCI230+ and PCI260+ use true differential sampling. Another difference is that if the card is physically a PCI230 or PCI260, the inverting input is 2N, whereas for a PCI230+ or PCI260+ the inverting input is 2N+1. So if a PCI230 is physically replaced by a PCI230+ (or a PCI260 with a PCI260+) and differential mode is used, the differential inputs need to be physically swapped on the connector. The following input ranges are supported: 0 => [-10, +10] V 1 => [-5, +5] V 2 => [-2.5, +2.5] V 3 => [-1.25, +1.25] V 4 => [0, 10] V 5 => [0, 5] V 6 => [0, 2.5] V AI Commands: +=========+==============+===========+============+==========+ |start_src|scan_begin_src|convert_src|scan_end_src| stop_src | +=========+==============+===========+============+==========+ |TRIG_NOW | TRIG_FOLLOW |TRIG_TIMER | TRIG_COUNT |TRIG_NONE | |TRIG_INT | |TRIG_EXT(3)| |TRIG_COUNT| | | |TRIG_INT | | | | |--------------|-----------| | | | | TRIG_TIMER(1)|TRIG_TIMER | | | | | TRIG_EXT(2) | | | | | | TRIG_INT | | | | +---------+--------------+-----------+------------+----------+ Note 1: If AI command and AO command are used simultaneously, only one may have scan_begin_src == TRIG_TIMER. Note 2: For PCI230 and PCI230+, scan_begin_src == TRIG_EXT uses DIO channel 16 (pin 49) which will need to be configured as a digital input. For PCI260+, the EXTTRIG/EXTCONVCLK input (pin 17) is used instead. For PCI230, scan_begin_src == TRIG_EXT is not supported. The trigger is a rising edge on the input. Note 3: For convert_src == TRIG_EXT, the EXTTRIG/EXTCONVCLK input (pin 25 on PCI230(+), pin 17 on PCI260(+)) is used. The convert_arg value is interpreted as follows: convert_arg == (CR_EDGE | 0) => rising edge convert_arg == (CR_EDGE | CR_INVERT | 0) => falling edge convert_arg == 0 => falling edge (backwards compatibility) convert_arg == 1 => rising edge (backwards compatibility) All entries in the channel list must use the same analogue reference. If the analogue reference is not AREF_DIFF (not differential) each pair of channel numbers (0 and 1, 2 and 3, etc.) must use the same input range. The input ranges used in the sequence must be all bipolar (ranges 0 to 3) or all unipolar (ranges 4 to 6). The channel sequence must consist of 1 or more identical subsequences. Within the subsequence, channels must be in ascending order with no repeated channels. For example, the following sequences are valid: 0 1 2 3 (single valid subsequence), 0 2 3 5 0 2 3 5 (repeated valid subsequence), 1 1 1 1 (repeated valid subsequence). The following sequences are invalid: 0 3 2 1 (invalid subsequence), 0 2 3 5 0 2 3 (incompletely repeated subsequence). Some versions of the PCI230+ and PCI260+ have a bug that requires a subsequence longer than one entry long to include channel 0. AO Subdevice: The AO subdevice has 2 channels with 12-bit resolution. The following output ranges are supported: 0 => [0, 10] V 1 => [-10, +10] V AO Commands: +=========+==============+===========+============+==========+ |start_src|scan_begin_src|convert_src|scan_end_src| stop_src | +=========+==============+===========+============+==========+ |TRIG_INT | TRIG_TIMER(1)| TRIG_NOW | TRIG_COUNT |TRIG_NONE | | | TRIG_EXT(2) | | |TRIG_COUNT| | | TRIG_INT | | | | +---------+--------------+-----------+------------+----------+ Note 1: If AI command and AO command are used simultaneously, only one may have scan_begin_src == TRIG_TIMER. Note 2: scan_begin_src == TRIG_EXT is only supported if the card is configured as a PCI230+ and is only supported on later versions of the card. As a card configured as a PCI230+ is not guaranteed to support external triggering, please consider this support to be a bonus. It uses the EXTTRIG/ EXTCONVCLK input (PCI230+ pin 25). Triggering will be on the rising edge unless the CR_INVERT flag is set in scan_begin_arg. The channels in the channel sequence must be in ascending order with no repeats. All entries in the channel sequence must use the same output range. DIO Subdevice: The DIO subdevice is a 8255 chip providing 24 DIO channels. The DIO channels are configurable as inputs or outputs in four groups: Port A - channels 0 to 7 Port B - channels 8 to 15 Port CL - channels 16 to 19 Port CH - channels 20 to 23 Only mode 0 of the 8255 chip is supported. Bit 0 of port C (DIO channel 16) is also used as an external scan trigger input for AI commands on PCI230 and PCI230+, so would need to be configured as an input to use it for that purpose.
c6xdigio -- Mechatronic Systems Inc. C6x_DIGIO DSP daughter card Author: Dan Block Status: unknown Manufacturer Device Name Mechatronic Systems Inc. C6x_DIGIO DSP daughter card c6xdigio This driver will not work with a 2.4 kernel.
cb_das16_cs -- Computer Boards PC-CARD DAS16/16 Author: ds Status: experimental Manufacturer Device Name ComputerBoards PC-CARD DAS16/16 cb_das16_cs ComputerBoards PC-CARD DAS16/16-AO cb_das16_cs
cb_pcidac -- Measurement Computing PCI Migration series boards Author: Oliver Gause Status: works Manufacturer Device Name ComputerBoards PCI-DAC6702 cb_pcidac ComputerBoards PCI-DAC6703 cb_pcidac Written to support the PCI-DAC6702. Trivially extended to support the PCI-DAC6703, it has just 16 ao channels instead of 8. Configuration Options: [0] - PCI bus number [1] - PCI slot number Developed from cb_pcidas64, cb_pcimdas and skel. The register values are taken from the register map of Measurement Computing. Supports DIO, AO in its present form.
cb_pcidas -- MeasurementComputing PCI-DAS series with the AMCC S5933 PCI controller Author: Ivan Martinez <imr@oersted.dtu.dk>, Frank Mori Hess <fmhess@users.sourceforge.net>, Brice Dubost <braice@braice.net> Status: There are many reports of the driver being used with most of the supported cards. Despite no detailed log is maintained, it can be said that the driver is quite tested and stable. Manufacturer Device Name Measurement Computing PCI-DAS1602/16 cb_pcidas Measurement Computing PCI-DAS1602/16jr cb_pcidas Measurement Computing PCI-DAS1602/12 cb_pcidas Measurement Computing PCI-DAS1200 cb_pcidas Measurement Computing PCI-DAS1200jr cb_pcidas Measurement Computing PCI-DAS1000 cb_pcidas Measurement Computing PCI-DAS1001 cb_pcidas Measurement Computing PCI_DAS1002 cb_pcidas The boards may be autocalibrated using the comedi_calibrate utility. Configuration options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first supported PCI device found will be used. For commands, the scanned channels must be consecutive (i.e. 4-5-6-7, 2-3-4,...), and must all have the same range and aref. AI Triggering: For start_src == TRIG_EXT, the A/D EXTERNAL TRIGGER IN (pin 45) is used. For 1602 series, the start_arg is interpreted as follows: start_arg == 0 => gated triger (level high) start_arg == CR_INVERT => gated triger (level low) start_arg == CR_EDGE => Rising edge start_arg == CR_EDGE | CR_INVERT => Falling edge For the other boards the trigger will be done on rising edge
cb_pcidas64 -- MeasurementComputing PCI-DAS64xx, 60XX, and 4020 series with the PLX 9080 PCI controller Author: Frank Mori Hess <fmhess@users.sourceforge.net> Status: works Manufacturer Device Name Measurement Computing PCI-DAS6402/16 cb_pcidas64 Measurement Computing PCI-DAS6402/12 cb_pcidas64 Measurement Computing PCI-DAS64/M1/16 cb_pcidas64 Measurement Computing PCI-DAS64/M2/16 cb_pcidas64 Measurement Computing PCI-DAS64/M3/16 cb_pcidas64 Measurement Computing PCI-DAS6402/16/JR cb_pcidas64 Measurement Computing PCI-DAS64/M1/16/JR cb_pcidas64 Measurement Computing PCI-DAS64/M2/16/JR cb_pcidas64 Measurement Computing PCI-DAS64/M3/16/JR cb_pcidas64 Measurement Computing PCI-DAS64/M1/14 cb_pcidas64 Measurement Computing PCI-DAS64/M2/14 cb_pcidas64 Measurement Computing PCI-DAS64/M3/14 cb_pcidas64 Measurement Computing PCI-DAS6013 cb_pcidas64 Measurement Computing PCI-DAS6014 cb_pcidas64 Measurement Computing PCI-DAS6023 cb_pcidas64 Measurement Computing PCI-DAS6025 cb_pcidas64 Measurement Computing PCI-DAS6030 cb_pcidas64 Measurement Computing PCI-DAS6031 cb_pcidas64 Measurement Computing PCI-DAS6032 cb_pcidas64 Measurement Computing PCI-DAS6033 cb_pcidas64 Measurement Computing PCI-DAS6034 cb_pcidas64 Measurement Computing PCI-DAS6035 cb_pcidas64 Measurement Computing PCI-DAS6036 cb_pcidas64 Measurement Computing PCI-DAS6040 cb_pcidas64 Measurement Computing PCI-DAS6052 cb_pcidas64 Measurement Computing PCI-DAS6070 cb_pcidas64 Measurement Computing PCI-DAS6071 cb_pcidas64 Measurement Computing PCI-DAS4020/12 cb_pcidas64 Configuration options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) These boards may be autocalibrated with the comedi_calibrate utility. To select the bnc trigger input on the 4020 (instead of the dio input), specify a nonzero channel in the chanspec. If you wish to use an external master clock on the 4020, you may do so by setting the scan_begin_src to TRIG_OTHER, and using an INSN_CONFIG_TIMER_1 configuration insn to configure the divisor to use for the external clock. Some devices are not identified because the PCI device IDs are not yet known. If you have such a board, please file a bug report at
cb_pcidda -- MeasurementComputing PCI-DDA series Author: Ivan Martinez <ivanmr@altavista.com>, Frank Mori Hess <fmhess@users.sourceforge.net> Status: Supports 08/16, 04/16, 02/16, 08/12, 04/12, and 02/12 Manufacturer Device Name Measurement Computing PCI-DDA08/12 cb_pcidda Measurement Computing PCI-DDA04/12 cb_pcidda Measurement Computing PCI-DDA02/12 cb_pcidda Measurement Computing PCI-DDA08/16 cb_pcidda Measurement Computing PCI-DDA04/16 cb_pcidda Measurement Computing PCI-DDA02/16 cb_pcidda Configuration options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first available PCI device will be used. Only simple analog output writing is supported. So far it has only been tested with: - PCI-DDA08/12 Please report success/failure with other different cards to <comedi@comedi.org>.
cb_pcidio -- ComputerBoards' DIO boards with PCI interface Author: Yoshiya Matsuzaka Status: experimental Manufacturer Device Name Measurement Computing PCI-DIO24 cb_pcidio Measurement Computing PCI-DIO24H cb_pcidio Measurement Computing PCI-DIO48H cb_pcidio This driver has been modified from skel.c of comedi-0.7.70. Configuration Options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first available PCI device will be used. Passing a zero for an option is the same as leaving it unspecified.
cb_pcimdas -- Measurement Computing PCI Migration series boards Author: Richard Bytheway Status: experimental Manufacturer Device Name ComputerBoards PCIM-DAS1602/16 cb_pcimdas ComputerBoards PCIe-DAS1602/16 cb_pcimdas Written to support the PCIM-DAS1602/16 and PCIe-DAS1602/16. Configuration Options: [0] - PCI bus number [1] - PCI slot number Developed from cb_pcidas and skel by Richard Bytheway (mocelet@sucs.org). Only supports DIO, AO and simple AI in it's present form. No interrupts, multi channel or FIFO AI, although the card looks like it could support this.
cb_pcimdda -- Measurement Computing PCIM-DDA06-16 Author: Calin Culianu <calin@ajvar.org> Status: works Manufacturer Device Name Measurement Computing PCIM-DDA06-16 cb_pcimdda All features of the PCIM-DDA06-16 board are supported. This board has 6 16-bit AO channels, and the usual 8255 DIO setup. (24 channels, configurable in banks of 8 and 4, etc.). This board does not support commands. The board has a peculiar way of specifying AO gain/range settings -- You have 1 jumper bank on the card, which either makes all 6 AO channels either 5 Volt unipolar, 5V bipolar, 10 Volt unipolar or 10V bipolar. Since there is absolutely _no_ way to tell in software how this jumper is set (well, at least according to the rather thin spec. from Measurement Computing that comes with the board), the driver assumes the jumper is at its factory default setting of +/-5V. Also of note is the fact that this board features another jumper, whose state is also completely invisible to software. It toggles two possible AO output modes on the board: - Update Mode: Writing to an AO channel instantaneously updates the actual signal output by the DAC on the board (this is the factory default). - Simultaneous XFER Mode: Writing to an AO channel has no effect until you read from any one of the AO channels. This is useful for loading all 6 AO values, and then reading from any one of the AO channels on the device to instantly update all 6 AO values in unison. Useful for some control apps, I would assume? If your jumper is in this setting, then you need to issue your comedi_data_write()s to load all the values you want, then issue one comedi_data_read() on any channel on the AO subdevice to initiate the simultaneous XFER. Configuration Options: [0] PCI bus (optional) [1] PCI slot (optional) [2] analog output range jumper setting 0 == +/- 5 V 1 == +/- 10 V
comedi_bond -- A driver to 'bond' (merge) multiple subdevices from multiple devices together as one. Author: ds Status: works This driver allows you to 'bond' (merge) multiple comedi subdevices (coming from possibly difference boards and/or drivers) together. For example, if you had a board with 2 different DIO subdevices, and another with 1 DIO subdevice, you could 'bond' them with this driver so that they look like one big fat DIO subdevice. This makes writing applications slightly easier as you don't have to worry about managing different subdevices in the application -- you just worry about indexing one linear array of channel id's. Right now only DIO subdevices are supported as that's the personal itch I am scratching with this driver. If you want to add support for AI and AO subdevs, go right on ahead and do so! Commands aren't supported -- although it would be cool if they were. Configuration Options: List of comedi-minors to bond. All subdevices of the same type within each minor will be concatenated together in the order given here.
comedi_parport -- Standard PC parallel port Author: ds Status: works in immediate mode Manufacturer Device Name standard parallel port comedi_parport A cheap and easy way to get a few more digital I/O lines. Steal additional parallel ports from old computers or your neighbors' computers. Option list: 0: I/O port base for the parallel port. 1: IRQ Parallel Port Lines: pin subdev chan aka --- ------ ---- --- 1 2 0 strobe 2 0 0 data 0 3 0 1 data 1 4 0 2 data 2 5 0 3 data 3 6 0 4 data 4 7 0 5 data 5 8 0 6 data 6 9 0 7 data 7 10 1 3 acknowledge 11 1 4 busy 12 1 2 output 13 1 1 printer selected 14 2 1 auto LF 15 1 0 error 16 2 2 init 17 2 3 select printer 18-25 ground Subdevices 0 is digital I/O, subdevice 1 is digital input, and subdevice 2 is digital output. Unlike other Comedi devices, subdevice 0 defaults to output. Pins 13 and 14 are inverted once by Comedi and once by the hardware, thus cancelling the effect. Pin 1 is a strobe, thus acts like one. There's no way in software to change this, at least on a standard parallel port. Subdevice 3 pretends to be a digital input subdevice, but it always returns 0 when read. However, if you run a command with scan_begin_src=TRIG_EXT, it uses pin 10 as a external triggering pin, which can be used to wake up tasks.
comedi_rt_timer -- Command emulator using real-time tasks Author: ds, fmhess Status: works This driver requires RTAI or RTLinux to work correctly. It doesn't actually drive hardware directly, but calls other drivers and uses a real-time task to emulate commands for drivers and devices that are incapable of native commands. Thus, you can get accurately timed I/O on any device. Since the timing is all done in software, sampling jitter is much higher than with a device that has an on-board timer, and maximum sample rate is much lower. Configuration options: [0] - minor number of device you wish to emulate commands for [1] - subdevice number you wish to emulate commands for
comedi_test -- generates fake waveforms Author: Joachim Wuttke <Joachim.Wuttke@icn.siemens.de>, Frank Mori Hess <fmhess@users.sourceforge.net>, ds Status: works This driver is mainly for testing purposes, but can also be used to generate sample waveforms on systems that don't have data acquisition hardware. Configuration options: [0] - Amplitude in microvolts for fake waveforms (default 1 volt) [1] - Period in microseconds for fake waveforms (default 0.1 sec) Generates a sawtooth wave on channel 0, square wave on channel 1, additional waveforms could be added to other channels (currently they return flatline zero volts).
contec_fit -- Contec F&eIT series modules Author: Contec Co., Ltd. Status: works Manufacturer Device Name Contec GY contec_fit Contec GY FIT Contec GY FIT Configuration Options: [0] - DeviceID of module (optional) If DeviceID is not specified, DeviceID 0 will be used.
contec_pci_dio -- Contec PIO1616L digital I/O board Author: Stefano Rivoir <s.rivoir@gts.it> Status: works Manufacturer Device Name Contec PIO1616L contec_pci_dio Configuration Options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first supported PCI device found will be used.
daqboard2000 -- IOTech DAQBoard/2000 Author: Anders Blomdell <anders.blomdell@control.lth.se> Status: works Manufacturer Device Name IOTech DAQBoard/2000 daqboard2000 Much of the functionality of this driver was determined from reading the source code for the Windows driver. The FPGA on the board requires initialization code, which can be loaded by comedi_config using the -i option. The initialization code is available from http://www.comedi.org in the comedi_nonfree_firmware tarball. Configuration options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first supported PCI device found will be used.
das08 -- DAS-08 compatible boards Author: Warren Jasper, ds, Frank Hess Status: works Manufacturer Device Name Keithley Metrabyte DAS08 isa-das08 ComputerBoards DAS08 isa-das08 ComputerBoards DAS08-PGM das08-pgm ComputerBoards DAS08-PGH das08-pgh ComputerBoards DAS08-PGL das08-pgl ComputerBoards DAS08-AOH das08-aoh ComputerBoards DAS08-AOL das08-aol ComputerBoards DAS08-AOM das08-aom ComputerBoards DAS08/JR-AO das08/jr-ao ComputerBoards DAS08/JR-16-AO das08jr-16-ao ComputerBoards PCI-DAS08 das08 ComputerBoards PC104-DAS08 pc104-das08 ComputerBoards DAS08/JR/16 das08jr/16 This is a rewrite of the das08 and das08jr drivers. Options (for ISA cards): [0] - base io address Options (for pci-das08): [0] - bus (optional) [1] = slot (optional) The das08 driver doesn't support asynchronous commands, since the cheap das08 hardware doesn't really support them. The comedi_rt_timer driver can be used to emulate commands for this driver.
das08_cs -- DAS-08 PCMCIA boards Author: Warren Jasper, ds, Frank Hess Status: works Manufacturer Device Name ComputerBoards PCM-DAS08 pcm-das08 This is the PCMCIA-specific support split off from the das08 driver. Options (for pcm-das08): NONE Command support does not exist, but could be added for this board.
das16 -- DAS16 compatible boards Author: Sam Moore, Warren Jasper, ds, Chris Baugher, Frank Hess, Roman Fietze Status: works Manufacturer Device Name Keithley Metrabyte DAS-16 das-16 Keithley Metrabyte DAS-16G das-16g Keithley Metrabyte DAS-16F das-16f Keithley Metrabyte DAS-1201 das-1201 Keithley Metrabyte DAS-1202 das-1202 Keithley Metrabyte DAS-1401 das-1401 Keithley Metrabyte DAS-1402 das-1402 Keithley Metrabyte DAS-1601 das-1601 Keithley Metrabyte DAS-1602 das-1602 ComputerBoards PC104-DAS16/JR pc104-das16jr ComputerBoards PC104-DAS16JR/16 pc104-das16jr/16 ComputerBoards CIO-DAS16JR/16 cio-das16jr/16 ComputerBoards CIO-DAS16/JR cio-das16/jr ComputerBoards CIO-DAS1401/12 cio-das1401/12 ComputerBoards CIO-DAS1402/12 cio-das1402/12 ComputerBoards CIO-DAS1402/16 cio-das1402/16 ComputerBoards CIO-DAS1601/12 cio-das1601/12 ComputerBoards CIO-DAS1602/12 cio-das1602/12 ComputerBoards CIO-DAS1602/16 cio-das1602/16 ComputerBoards CIO-DAS16/330 cio-das16/330 A rewrite of the das16 and das1600 drivers. Passing a zero for an option is the same as leaving it unspecified.
das16m1 -- CIO-DAS16/M1 Author: Frank Mori Hess <fmhess@users.sourceforge.net> Status: works Manufacturer Device Name Measurement Computing CIO-DAS16/M1 cio-das16/m1 This driver supports a single board - the CIO-DAS16/M1. As far as I know, there are no other boards that have the same register layout. Even the CIO-DAS16/M1/16 is significantly different. I was _barely_ able to reach the full 1 MHz capability of this board, using a hard real-time interrupt (set the TRIG_RT flag in your comedi_cmd and use rtlinux or RTAI). The board can't do dma, so the bottleneck is pulling the data across the ISA bus. I timed the interrupt handler, and it took my computer ~470 microseconds to pull 512 samples from the board. So at 1 Mhz sampling rate, expect your CPU to be spending almost all of its time in the interrupt handler. This board has some unusual restrictions for its channel/gain list. If the list has 2 or more channels in it, then two conditions must be satisfied: (1) - even/odd channels must appear at even/odd indices in the list (2) - the list must have an even number of entries. irq can be omitted, although the cmd interface will not work without it.
das1800 -- Keithley Metrabyte DAS1800 (& compatibles) Author: Frank Mori Hess <fmhess@users.sourceforge.net> Status: works Manufacturer Device Name Keithley Metrabyte DAS-1701ST das-1701st Keithley Metrabyte DAS-1701ST-DA das-1701st-da Keithley Metrabyte DAS-1701/AO das-1701ao Keithley Metrabyte DAS-1702ST das-1702st Keithley Metrabyte DAS-1702ST-DA das-1702st-da Keithley Metrabyte DAS-1702HR das-1702hr Keithley Metrabyte DAS-1702HR-DA das-1702hr-da Keithley Metrabyte DAS-1702/AO das-1702ao Keithley Metrabyte DAS-1801ST das-1801st Keithley Metrabyte DAS-1801ST-DA das-1801st-da Keithley Metrabyte DAS-1801HC das-1801hc Keithley Metrabyte DAS-1801AO das-1801ao Keithley Metrabyte DAS-1802ST das-1802st Keithley Metrabyte DAS-1802ST-DA das-1802st-da Keithley Metrabyte DAS-1802HR das-1802hr Keithley Metrabyte DAS-1802HR-DA das-1802hr-da Keithley Metrabyte DAS-1802HC das-1802hc Keithley Metrabyte DAS-1802AO das-1802ao The waveform analog output on the 'ao' cards is not supported. If you need it, send me (Frank Hess) an email. Configuration options: [0] - I/O port base address [1] - IRQ (optional, required for timed or externally triggered conversions) [2] - DMA0 (optional, requires irq) [3] - DMA1 (optional, requires irq and dma0)
das6402 -- Keithley Metrabyte DAS6402 (& compatibles) Author: Oystein Svendsen <svendsen@pvv.org> Status: bitrotten Manufacturer Device Name Keithley Metrabyte DAS6402 das6402 This driver has suffered bitrot.
das800 -- Keithley Metrabyte DAS800 (& compatibles) Author: Frank Mori Hess <fmhess@users.sourceforge.net> Status: works, cio-das802/16 untested - email me if you have tested it Manufacturer Device Name Keithley Metrabyte DAS-800 das-800 Keithley Metrabyte DAS-801 das-801 Keithley Metrabyte DAS-802 das-802 Measurement Computing CIO-DAS800 cio-das800 Measurement Computing CIO-DAS801 cio-das801 Measurement Computing CIO-DAS802 cio-das802 Measurement Computing CIO-DAS802/16 cio-das802/16 Configuration options: [0] - I/O port base address [1] - IRQ (optional, required for timed or externally triggered conversions) All entries in the channel/gain list must use the same gain and be consecutive channels counting upwards in channel number (these are hardware limitations.) I've never tested the gain setting stuff since I only have a DAS-800 board with fixed gain. The cio-das802/16 does not have a fifo-empty status bit! Therefore only fifo-half-full transfers are possible with this card.
dmm32at -- Diamond Systems mm32at driver. Author: Perry J. Piplani <perry.j.piplani@nasa.gov> Status: experimental This driver is for the Diamond Systems MM-32-AT board Configuration Options: comedi_config /dev/comedi0 dmm32at baseaddr,irq
dt2801 -- Data Translation DT2801 series and DT01-EZ Author: ds Status: works Manufacturer Device Name Data Translation DT2801 dt2801 Data Translation DT2801-A dt2801 Data Translation DT2801/5716A dt2801 Data Translation DT2805 dt2801 Data Translation DT2805/5716A dt2801 Data Translation DT2808 dt2801 Data Translation DT2818 dt2801 Data Translation DT2809 dt2801 Data Translation DT01-EZ dt2801 This driver can autoprobe the type of board. Configuration options: [0] - I/O port base address [1] - unused [2] - A/D reference 0=differential, 1=single-ended [3] - A/D range 0 = [-10,10] 1 = [0,10] [4] - D/A 0 range 0 = [-10,10] 1 = [-5,5] 2 = [-2.5,2.5] 3 = [0,10] 4 = [0,5] [5] - D/A 1 range (same choices)
dt2811 -- Data Translation DT2811 Author: ds Status: works Manufacturer Device Name Data Translation DT2811-PGL dt2811-pgl Data Translation DT2811-PGH dt2811-pgh Configuration options: [0] - I/O port base address [1] - IRQ, although this is currently unused [2] - A/D reference 0 = single-ended 1 = differential 2 = pseudo-differential (common reference) [3] - A/D range 0 = [-5,5] 1 = [-2.5,2.5] 2 = [0,5] [4] - D/A 0 range (same choices) [4] - D/A 1 range (same choices)
dt2814 -- Data Translation DT2814 Author: ds Status: complete Manufacturer Device Name Data Translation DT2814 dt2814 Configuration options: [0] - I/O port base address [1] - IRQ This card has 16 analog inputs multiplexed onto a 12 bit ADC. There is a minimally useful onboard clock. The base frequency for the clock is selected by jumpers, and the clock divider can be selected via programmed I/O. Unfortunately, the clock divider can only be a power of 10, from 1 to 10^7, of which only 3 or 4 are useful. In addition, the clock does not seem to be very accurate.
dt2815 -- Data Translation DT2815 Author: ds Status: mostly complete, untested Manufacturer Device Name Data Translation DT2815 dt2815 I'm not sure anyone has ever tested this board. If you have information contrary, please update. Configuration options: [0] - I/O port base base address [1] - IRQ (unused) [2] - Voltage unipolar/bipolar configuration 0 == unipolar 5V (0V -- +5V) 1 == bipolar 5V (-5V -- +5V) [3] - Current offset configuration 0 == disabled (0mA -- +32mAV) 1 == enabled (+4mA -- +20mAV) [4] - Firmware program configuration 0 == program 1 (see manual table 5-4) 1 == program 2 (see manual table 5-4) 2 == program 3 (see manual table 5-4) 3 == program 4 (see manual table 5-4) [5] - Analog output 0 range configuration 0 == voltage 1 == current [6] - Analog output 1 range configuration (same options) [7] - Analog output 2 range configuration (same options) [8] - Analog output 3 range configuration (same options) [9] - Analog output 4 range configuration (same options) [10] - Analog output 5 range configuration (same options) [11] - Analog output 6 range configuration (same options) [12] - Analog output 7 range configuration (same options)
dt2817 -- Data Translation DT2817 Author: ds Status: complete Manufacturer Device Name Data Translation DT2817 dt2817 A very simple digital I/O card. Four banks of 8 lines, each bank is configurable for input or output. One wonders why it takes a 50 page manual to describe this thing. The driver (which, btw, is much less than 50 pages) has 1 subdevice with 32 channels, configurable in groups of 8. Configuration options: [0] - I/O port base base address
dt282x -- Data Translation DT2821 series (including DT-EZ) Author: ds Status: complete Manufacturer Device Name Data Translation DT2821 dt2821 Data Translation DT2821-F-16SE dt2821-f Data Translation DT2821-F-8DI dt2821-f Data Translation DT2821-G-16SE dt2821-f Data Translation DT2821-G-8DI dt2821-g Data Translation DT2823 dt2823 Data Translation DT2824-PGH dt2824-pgh Data Translation DT2824-PGL dt2824-pgl Data Translation DT2825 dt2825 Data Translation DT2827 dt2827 Data Translation DT2828 dt2828 Data Translation DT21-EZ dt21-ez Data Translation DT23-EZ dt23-ez Data Translation DT24-EZ dt24-ez Data Translation DT24-EZ-PGL dt24-ez-pgl Configuration options: [0] - I/O port base address [1] - IRQ [2] - DMA 1 [3] - DMA 2 [4] - AI jumpered for 0=single ended, 1=differential [5] - AI jumpered for 0=straight binary, 1=2's complement [6] - AO 0 jumpered for 0=straight binary, 1=2's complement [7] - AO 1 jumpered for 0=straight binary, 1=2's complement [8] - AI jumpered for 0=[-10,10]V, 1=[0,10], 2=[-5,5], 3=[0,5] [9] - AO 0 jumpered for 0=[-10,10]V, 1=[0,10], 2=[-5,5], 3=[0,5], 4=[-2.5,2.5] [10]- A0 1 jumpered for 0=[-10,10]V, 1=[0,10], 2=[-5,5], 3=[0,5], 4=[-2.5,2.5]
dt3000 -- Data Translation DT3000 series Author: ds Status: works Manufacturer Device Name Data Translation DT3001 dt3000 Data Translation DT3001-PGL dt3000 Data Translation DT3002 dt3000 Data Translation DT3003 dt3000 Data Translation DT3003-PGL dt3000 Data Translation DT3004 dt3000 Data Translation DT3005 dt3000 Data Translation DT3004-200 dt3000 Configuration Options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first supported PCI device found will be used. There is code to support AI commands, but it may not work. AO commands are not supported.
dt9812 -- Data Translation DT9812 USB module Author: anders.blomdell@control.lth.se (Anders Blomdell) Status: in development Manufacturer Device Name Data Translation DT9812 dt9812 This driver works, but bulk transfers not implemented. Might be a starting point for someone else. I found out too late that USB has too high latencies (>1 ms) for my needs.
fl512 -- unknown Author: Anders Gnistrup <ex18@kalman.iau.dtu.dk> Status: unknown Manufacturer Device Name unknown FL512 fl512 Digital I/O is not supported. Configuration options: [0] - I/O port base address
gsc_hpdi -- General Standards Corporation High Speed Parallel Digital Interface rs485 boards Author: Frank Mori Hess <fmhess@users.sourceforge.net> Status: only receive mode works, transmit not supported Manufacturer Device Name General Standards Corporation PCI-HPDI32 gsc_hpdi General Standards Corporation PMC-HPDI32 gsc_hpdi Configuration options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) There are some additional hpdi models available from GSC for which support could be added to this driver.
icp_multi -- Inova ICP_MULTI Author: Anne Smorthit <anne.smorthit@sfwte.ch> Status: works Manufacturer Device Name Inova ICP_MULTI icp_multi The driver works for analog input and output and digital input and output. It does not work with interrupts or with the counters. Currently no support for DMA. It has 16 single-ended or 8 differential Analogue Input channels with 12-bit resolution. Ranges : 5V, 10V, +/-5V, +/-10V, 0..20mA and 4..20mA. Input ranges can be individually programmed for each channel. Voltage or current measurement is selected by jumper. There are 4 x 12-bit Analogue Outputs. Ranges : 5V, 10V, +/-5V, +/-10V 16 x Digital Inputs, 24V 8 x Digital Outputs, 24V, 1A 4 x 16-bit counters
ii_pci20kc -- Intelligent Instruments PCI-20001C carrier board Author: Markus Kempf <kempf@matsci.uni-sb.de> Status: works Manufacturer Device Name Intelligent Instrumentation PCI-20001C ii_pci20kc Supports the PCI-20001 C-2a Carrier board, and could probably support the other carrier boards with small modifications. Modules supported options for PCI-20006M: first: Analog output channel 0 range configuration 0 bipolar 10 (-10V -- +10V) 1 unipolar 10 (0V -- +10V) 2 bipolar 5 (-5V -- 5V) second: Analog output channel 1 range configuration options for PCI-20341M: first: Analog input gain configuration 0 1 1 10 2 100 3 200
jr3_pci -- JR3/PCI force sensor board Author: Anders Blomdell <anders.blomdell@control.lth.se> Status: works Manufacturer Device Name JR3 PCI force sensor board jr3_pci The DSP on the board requires initialization code, which can be loaded by placing it in /lib/firmware/comedi. The initialization code should be somewhere on the media you got with your card. One version is available from http://www.comedi.org in the comedi_nonfree_firmware tarball. Configuration options: [0] - PCI bus number - if bus number and slot number are 0, then driver search for first unused card [1] - PCI slot number
ke_counter -- Driver for Kolter Electronic Counter Card Author: Michael Hillmann Status: tested Manufacturer Device Name Kolter Electronic PCI Counter Card ke_counter Configuration Options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first supported PCI device found will be used. This driver is a simple driver to read the counter values from Kolter Electronic PCI Counter Card.
me4000 -- Meilhaus ME-4000 series boards Author: gg (Guenter Gebhardt <g.gebhardt@meilhaus.com>) Status: broken (no support for loading firmware) Manufacturer Device Name Meilhaus ME-4650 me4000 Meilhaus ME-4670i me4000 Meilhaus ME-4680 me4000 Meilhaus ME-4680i me4000 Meilhaus ME-4680is me4000 - Analog Input - Analog Output - Digital I/O - Counter Configuration Options: [0] - PCI bus number (optional) [1] - PCI slot number (optional) If bus/slot is not specified, the first available PCI device will be used. The firmware required by these boards is available in the comedi_nonfree_firmware tarball available from
me_daq -- Meilhaus PCI data acquisition cards Author: Michael Hillmann <hillmann@syscongroup.de> Status: experimental Manufacturer Device Name Meilhaus ME-2600i me_daq Meilhaus ME-2000i me_daq Analog Output Configuration options: [0] - PCI bus number (optional) [1] - PCI slot number (optional) If bus/slot is not specified, the first available PCI device will be used. The 2600 requires a firmware upload, which can be accomplished using the -i or --init-data option of comedi_config. The firmware can be found in the comedi_nonfree_firmware tarball available from http://www.comedi.org
mpc624 -- Micro/sys MPC-624 PC/104 board Author: Stanislaw Raczynski <sraczynski@op.pl> Status: working Manufacturer Device Name Micro/sys MPC-624 mpc624 The Micro/sys MPC-624 board is based on the LTC2440 24-bit sigma-delta ADC chip. Subdevices supported by the driver: - Analog In: supported - Digital I/O: not supported - LEDs: not supported - EEPROM: not supported Configuration Options: [0] - I/O base address [1] - convertion rate Convertion rate RMS noise Effective Number Of Bits 0 3.52kHz 23uV 17 1 1.76kHz 3.5uV 20 2 880Hz 2uV 21.3 3 440Hz 1.4uV 21.8 4 220Hz 1uV 22.4 5 110Hz 750uV 22.9 6 55Hz 510nV 23.4 7 27.5Hz 375nV 24 8 13.75Hz 250nV 24.4 9 6.875Hz 200nV 24.6 [2] - voltage range 0 -1.01V .. +1.01V 1 -10.1V .. +10.1V
mpc8260cpm -- MPC8260 CPM module generic digital I/O lines Author: ds Status: experimental Manufacturer Device Name Motorola MPC8260 CPM mpc8260cpm This driver is specific to the Motorola MPC8260 processor, allowing you to access the processor's generic digital I/O lines. It is apparently missing some code.
multiq3 -- Quanser Consulting MultiQ-3 Author: Anders Blomdell <anders.blomdell@control.lth.se> Status: works Manufacturer Device Name Quanser Consulting MultiQ-3 multiq3
ni_6527 -- National Instruments 6527 Author: ds Status: works Manufacturer Device Name National Instruments PCI-6527 ni6527 National Instruments PXI-6527 ni6527
ni_65xx -- National Instruments 65xx static dio boards Author: Jon Grierson <jd@renko.co.uk>, Frank Mori Hess <fmhess@users.sourceforge.net> Status: testing Manufacturer Device Name National Instruments PCI-6509 ni_65xx National Instruments PXI-6509 ni_65xx National Instruments PCI-6510 ni_65xx National Instruments PCI-6511 ni_65xx National Instruments PXI-6511 ni_65xx National Instruments PCI-6512 ni_65xx National Instruments PXI-6512 ni_65xx National Instruments PCI-6513 ni_65xx National Instruments PXI-6513 ni_65xx National Instruments PCI-6514 ni_65xx National Instruments PXI-6514 ni_65xx National Instruments PCI-6515 ni_65xx National Instruments PXI-6515 ni_65xx National Instruments PCI-6516 ni_65xx National Instruments PCI-6517 ni_65xx National Instruments PCI-6518 ni_65xx National Instruments PCI-6519 ni_65xx National Instruments PCI-6520 ni_65xx National Instruments PCI-6521 ni_65xx National Instruments PXI-6521 ni_65xx National Instruments PCI-6528 ni_65xx National Instruments PXI-6528 ni_65xx Based on the PCI-6527 driver by ds. The interrupt subdevice (subdevice 3) is probably broken for all boards except maybe the 6514.
ni_660x -- National Instruments 660x counter/timer boards Author: J.P. Mellor <jpmellor@rose-hulman.edu>, Herman.Bruyninckx@mech.kuleuven.ac.be, Wim.Meeussen@mech.kuleuven.ac.be, Klaas.Gadeyne@mech.kuleuven.ac.be, Frank Mori Hess <fmhess@users.sourceforge.net> Status: experimental Manufacturer Device Name National Instruments PCI-6601 ni_660x National Instruments PCI-6602 ni_660x National Instruments PXI-6602 ni_660x National Instruments PXI-6608 ni_660x National Instruments PCI-6624 ni_660x National Instruments PXI-6624 ni_660x Encoders work. PulseGeneration (both single pulse and pulse train) works. Buffered commands work for input but not output.
ni_670x -- National Instruments 670x Author: Bart Joris <bjoris@advalvas.be> Status: unknown Manufacturer Device Name National Instruments PCI-6703 ni_670x National Instruments PCI-6704 ni_670x Commands are not supported.
ni_at_a2150 -- National Instruments AT-A2150 Author: Frank Mori Hess Status: works Manufacturer Device Name National Instruments AT-A2150C at_a2150c National Instruments AT-2150S at_a2150s If you want to ac couple the board's inputs, use AREF_OTHER. Configuration options: [0] - I/O port base address [1] - IRQ (optional, required for timed conversions) [2] - DMA (optional, required for timed conversions)
ni_at_ao -- National Instruments AT-AO-6/10 Author: ds Status: should work Manufacturer Device Name National Instruments AT-AO-6 at-ao-6 National Instruments AT-AO-10 at-ao-10 Configuration options: [0] - I/O port base address [1] - IRQ (unused) [2] - DMA (unused) [3] - analog output range, set by jumpers on hardware (0 for -10 to 10V bipolar, 1 for 0V to 10V unipolar)
ni_atmio -- National Instruments AT-MIO-E series Author: ds Status: works Manufacturer Device Name National Instruments AT-MIO-16E-1 ni_atmio National Instruments AT-MIO-16E-2 ni_atmio National Instruments AT-MIO-16E-10 ni_atmio National Instruments AT-MIO-16DE-10 ni_atmio National Instruments AT-MIO-64E-3 ni_atmio National Instruments AT-MIO-16XE-50 ni_atmio National Instruments AT-MIO-16XE-10 ni_atmio National Instruments AT-AI-16XE-10 ni_atmio The driver has 2.6 kernel isapnp support, and will automatically probe for a supported board if the I/O base is left unspecified with comedi_config. However, many of the isapnp id numbers are unknown. If your board is not recognized, please send the output of 'cat /proc/isapnp' (you may need to modprobe the isa-pnp module for /proc/isapnp to exist) so the id numbers for your board can be added to the driver. Otherwise, you can use the isapnptools package to configure your board. Use isapnp to configure the I/O base and IRQ for the board, and then pass the same values as parameters in comedi_config. A sample isapnp.conf file is included in the etc/ directory of Comedilib. Comedilib includes a utility to autocalibrate these boards. The boards seem to boot into a state where the all calibration DACs are at one extreme of their range, thus the default calibration is terrible. Calibration at boot is strongly encouraged. To use the extended digital I/O on some of the boards, enable the 8255 driver when configuring the Comedi source tree. External triggering is supported for some events. The channel index (scan_begin_arg, etc.) maps to PFI0 - PFI9. Some of the more esoteric triggering possibilities of these boards are not supported.
ni_atmio16d -- National Instruments AT-MIO-16D Author: Chris R. Baugher <baugher@enteract.com> Status: unknown Manufacturer Device Name National Instruments AT-MIO-16 atmio16 National Instruments AT-MIO-16D atmio16d
ni_daq_700 -- National Instruments PCMCIA DAQCard-700 DIO only Author: Fred Brooks <nsaspook@nsaspook.com>, based on ni_daq_dio24 by Daniel Vecino Castel <dvecino@able.es> Status: works Manufacturer Device Name National Instruments PCMCIA DAQ-Card-700 ni_daq_700 The daqcard-700 appears in Comedi as a single digital I/O subdevice with 16 channels. The channel 0 corresponds to the daqcard-700's output port, bit 0; channel 8 corresponds to the input port, bit 0. Direction configuration: channels 0-7 output, 8-15 input (8225 device emu as port A output, port B input, port C N/A). IRQ is assigned but not used.
ni_daq_dio24 -- National Instruments PCMCIA DAQ-Card DIO-24 Author: Daniel Vecino Castel <dvecino@able.es> Status: ? Manufacturer Device Name National Instruments PCMCIA DAQ-Card DIO-24 ni_daq_dio24 This is just a wrapper around the 8255.o driver to properly handle the PCMCIA interface.
ni_labpc -- National Instruments Lab-PC (& compatibles) Author: Frank Mori Hess <fmhess@users.sourceforge.net> Status: works Manufacturer Device Name National Instruments Lab-PC-1200 labpc-1200 National Instruments Lab-PC-1200AI labpc-1200ai National Instruments Lab-PC+ lab-pc+ National Instruments PCI-1200 ni_labpc Tested with lab-pc-1200. For the older Lab-PC+, not all input ranges and analog references will work, the available ranges/arefs will depend on how you have configured the jumpers on your board (see your owner's manual). Kernel-level ISA plug-and-play support for the lab-pc-1200 boards has not yet been added to the driver, mainly due to the fact that I don't know the device id numbers. If you have one of these boards, please file a bug report at https://bugs.comedi.org/ so I can get the necessary information from you. The 1200 series boards have onboard calibration dacs for correcting analog input/output offsets and gains. The proper settings for these caldacs are stored on the board's eeprom. To read the caldac values from the eeprom and store them into a file that can be then be used by comedilib, use the comedi_calibrate program. Configuration options - ISA boards: [0] - I/O port base address [1] - IRQ (optional, required for timed or externally triggered conversions) [2] - DMA channel (optional) Configuration options - PCI boards: [0] - bus (optional) [1] - slot (optional) The Lab-pc+ has quirky chanlist requirements when scanning multiple channels. Multiple channel scan sequence must start at highest channel, then decrement down to channel 0. The rest of the cards can scan down like lab-pc+ or scan up from channel zero. Chanlists consisting of all one channel are also legal, and allow you to pace conversions in bursts.
ni_labpc_cs -- National Instruments Lab-PC (& compatibles) Author: Frank Mori Hess <fmhess@users.sourceforge.net> Status: works Manufacturer Device Name National Instruments DAQCard-1200 daqcard-1200 Thanks go to Fredrik Lingvall for much testing and perseverance in helping to debug daqcard-1200 support. The 1200 series boards have onboard calibration dacs for correcting analog input/output offsets and gains. The proper settings for these caldacs are stored on the board's eeprom. To read the caldac values from the eeprom and store them into a file that can be then be used by comedilib, use the comedi_calibrate program. Configuration options: none The daqcard-1200 has quirky chanlist requirements when scanning multiple channels. Multiple channel scan sequence must start at highest channel, then decrement down to channel 0. Chanlists consisting of all one channel are also legal, and allow you to pace conversions in bursts.
ni_mio_cs -- National Instruments DAQCard E series Author: ds Status: works Manufacturer Device Name National Instruments DAQCard-AI-16XE-50 ni_mio_cs National Instruments DAQCard-AI-16E-4 ni_mio_cs National Instruments DAQCard-6062E ni_mio_cs National Instruments DAQCard-6024E ni_mio_cs National Instruments DAQCard-6036E ni_mio_cs See the notes in the ni_atmio.o driver.
ni_pcidio -- National Instruments PCI-DIO32HS, PCI-DIO96, PCI-6533, PCI-6503 Author: ds Status: works Manufacturer Device Name National Instruments PCI-DIO-32HS ni_pcidio National Instruments PXI-6533 ni_pcidio National Instruments PCI-DIO-96 ni_pcidio National Instruments PCI-DIO-96B ni_pcidio National Instruments PXI-6508 ni_pcidio National Instruments PCI-6503 ni_pcidio National Instruments PCI-6503B ni_pcidio National Instruments PCI-6503X ni_pcidio National Instruments PXI-6503 ni_pcidio National Instruments PCI-6533 ni_pcidio National Instruments PCI-6534 ni_pcidio The DIO-96 appears as four 8255 subdevices. See the 8255 driver notes for details. The DIO32HS board appears as one subdevice, with 32 channels. Each channel is individually I/O configurable. The channel order is 0=A0, 1=A1, 2=A2, ... 8=B0, 16=C0, 24=D0. The driver only supports simple digital I/O; no handshaking is supported. DMA mostly works for the PCI-DIO32HS, but only in timed input mode. The PCI-DIO-32HS/PCI-6533 has a configurable external trigger. Setting scan_begin_arg to 0 or CR_EDGE triggers on the leading edge. Setting scan_begin_arg to CR_INVERT or (CR_EDGE | CR_INVERT) triggers on the trailing edge. This driver could be easily modified to support AT-MIO32HS and AT-MIO96. The PCI-6534 requires a firmware upload after power-up to work, the firmware data and instructions for loading it with comedi_config it are contained in the comedi_nonfree_firmware tarball available from http://www.comedi.org
ni_pcimio -- National Instruments PCI-MIO-E series and M series (all boards) Author: ds, John Hallen, Frank Mori Hess, Rolf Mueller, Herbert Peremans, Herman Bruyninckx, Terry Barnaby Status: works Manufacturer Device Name National Instruments PCI-MIO-16XE-50 ni_pcimio National Instruments PCI-MIO-16XE-10 ni_pcimio National Instruments PXI-6030E ni_pcimio National Instruments PCI-MIO-16E-1 ni_pcimio National Instruments PCI-MIO-16E-4 ni_pcimio National Instruments PCI-6014 ni_pcimio National Instruments PCI-6040E ni_pcimio National Instruments PXI-6040E ni_pcimio National Instruments PCI-6030E ni_pcimio National Instruments PCI-6031E ni_pcimio National Instruments PCI-6032E ni_pcimio National Instruments PCI-6033E ni_pcimio National Instruments PCI-6071E ni_pcimio National Instruments PCI-6023E ni_pcimio National Instruments PCI-6024E ni_pcimio National Instruments PCI-6025E ni_pcimio National Instruments PXI-6025E ni_pcimio National Instruments PCI-6034E ni_pcimio National Instruments PCI-6035E ni_pcimio National Instruments PCI-6052E ni_pcimio National Instruments PCI-6110 ni_pcimio National Instruments PCI-6111 ni_pcimio National Instruments PCI-6220 ni_pcimio National Instruments PXI-6220 ni_pcimio National Instruments PCI-6221 ni_pcimio National Instruments PXI-6221 ni_pcimio National Instruments PCI-6224 ni_pcimio National Instruments PXI-6224 ni_pcimio National Instruments PCI-6225 ni_pcimio National Instruments PXI-6225 ni_pcimio National Instruments PCI-6229 ni_pcimio National Instruments PCI-6250 ni_pcimio National Instruments PXI-6250 ni_pcimio National Instruments PCI-6251 ni_pcimio National Instruments PXI-6251 ni_pcimio National Instruments PCIe-6251 ni_pcimio National Instruments PXIe-6251 ni_pcimio National Instruments PCI-6254 ni_pcimio National Instruments PXI-6254 ni_pcimio National Instruments PCI-6259 ni_pcimio National Instruments PXI-6259 ni_pcimio National Instruments PCIe-6259 ni_pcimio National Instruments PXIe-6259 ni_pcimio National Instruments PCI-6280 ni_pcimio National Instruments PXI-6280 ni_pcimio National Instruments PCI-6281 ni_pcimio National Instruments PXI-6281 ni_pcimio National Instruments PCI-6284 ni_pcimio National Instruments PXI-6284 ni_pcimio National Instruments PCI-6289 ni_pcimio National Instruments PXI-6289 ni_pcimio National Instruments PCI-6711 ni_pcimio National Instruments PXI-6711 ni_pcimio National Instruments PCI-6713 ni_pcimio National Instruments PXI-6713 ni_pcimio National Instruments PXI-6071E ni_pcimio National Instruments PCI-6070E ni_pcimio National Instruments PXI-6070E ni_pcimio National Instruments PXI-6052E ni_pcimio National Instruments PCI-6036E ni_pcimio National Instruments PCI-6731 ni_pcimio National Instruments PCI-6733 ni_pcimio National Instruments PXI-6733 ni_pcimio National Instruments PCI-6143 ni_pcimio National Instruments PXI-6143 ni_pcimio These boards are almost identical to the AT-MIO E series, except that they use the PCI bus instead of ISA (i.e., AT). See the notes for the ni_atmio.o driver for additional information about these boards. Autocalibration is supported on many of the devices, using the comedi_calibrate (or comedi_soft_calibrate for m-series) utility. M-Series boards do analog input and analog output calibration entirely in software. The software calibration corrects the analog input for offset, gain and nonlinearity. The analog outputs are corrected for offset and gain. See the comedilib documentation on comedi_get_softcal_converter() for more information. By default, the driver uses DMA to transfer analog input data to memory. When DMA is enabled, not all triggering features are supported. Digital I/O may not work on 673x. Note that the PCI-6143 is a simultaineous sampling device with 8 convertors. With this board all of the convertors perform one simultaineous sample during a scan interval. The period for a scan is used for the convert time in a Comedi cmd. The convert trigger source is normally set to TRIG_NOW by default. The RTSI trigger bus is supported on these cards on subdevice 10. See the comedilib documentation for details. Information (number of channels, bits, etc.) for some devices may be incorrect. Please check this and submit a bug if there are problems for your device. SCXI is probably broken for m-series boards.
ni_tio -- National Instruments general purpose counters Author: J.P. Mellor <jpmellor@rose-hulman.edu>, Herman.Bruyninckx@mech.kuleuven.ac.be, Wim.Meeussen@mech.kuleuven.ac.be, Klaas.Gadeyne@mech.kuleuven.ac.be, Frank Mori Hess <fmhess@users.sourceforge.net> Status: works This module is not used directly by end-users. Rather, it is used by other drivers (for example ni_660x and ni_pcimio) to provide support for NI's general purpose counters. It was originally based on the counter code from ni_660x.c and ni_mio_common.c.
ni_tiocmd -- National Instruments general purpose counters command support Author: J.P. Mellor <jpmellor@rose-hulman.edu>, Herman.Bruyninckx@mech.kuleuven.ac.be, Wim.Meeussen@mech.kuleuven.ac.be, Klaas.Gadeyne@mech.kuleuven.ac.be, Frank Mori Hess <fmhess@users.sourceforge.net> Status: works This module is not used directly by end-users. Rather, it is used by other drivers (for example ni_660x and ni_pcimio) to provide command support for NI's general purpose counters. It was originally split out of ni_tio.c to stop the 'ni_tio' module depending on the 'mite' module.
pcl711 -- Advantech PCL-711 and 711b, ADLINK ACL-8112 Author: ds, Janne Jalkanen <jalkanen@cs.hut.fi>, Eric Bunn <ebu@cs.hut.fi> Status: mostly complete Manufacturer Device Name Advantech PCL-711 pcl711 Advantech PCL-711B pcl711b ADLINK ACL-8112HG acl8112hg ADLINK ACL-8112DG acl8112dg Since these boards do not have DMA or FIFOs, only immediate mode is supported.
pcl724 -- Advantech PCL-724, PCL-722, PCL-731 ADLINK ACL-7122, ACL-7124, PET-48DIO Author: Michal Dobes <dobes@tesnet.cz> Status: untested Manufacturer Device Name Advantech PCL-724 pcl724 Advantech PCL-722 pcl722 Advantech PCL-731 pcl731 ADLINK ACL-7122 acl7122 ADLINK ACL-7124 acl7124 ADLINK PET-48DIO pet48dio This is driver for digital I/O boards PCL-722/724/731 with 144/24/48 DIO and for digital I/O boards ACL-7122/7124/PET-48DIO with 144/24/48 DIO. It need 8255.o for operations and only immediate mode is supported. See the source for configuration details.
pcl725 -- Advantech PCL-725 (& compatibles) Author: ds Status: unknown Manufacturer Device Name Advantech PCL-725 pcl725
pcl726 -- Advantech PCL-726 & compatibles Author: ds Status: untested Manufacturer Device Name Advantech PCL-726 pcl726 Advantech PCL-727 pcl727 Advantech PCL-728 pcl728 ADLINK ACL-6126 acl6126 ADLINK ACL-6128 acl6128 Interrupts are not supported. Options for PCL-726: [0] - IO Base [2]...[7] - D/A output range for channel 1-6: 0: 0-5V, 1: 0-10V, 2: +/-5V, 3: +/-10V, 4: 4-20mA, 5: unknown (external reference) Options for PCL-727: [0] - IO Base [2]...[13] - D/A output range for channel 1-12: 0: 0-5V, 1: 0-10V, 2: +/-5V, 3: 4-20mA Options for PCL-728 and ACL-6128: [0] - IO Base [2], [3] - D/A output range for channel 1 and 2: 0: 0-5V, 1: 0-10V, 2: +/-5V, 3: +/-10V, 4: 4-20mA, 5: 0-20mA Options for ACL-6126: [0] - IO Base [1] - IRQ (0=disable, 3, 5, 6, 7, 9, 10, 11, 12, 15) (currently ignored) [2]...[7] - D/A output range for channel 1-6: 0: 0-5V, 1: 0-10V, 2: +/-5V, 3: +/-10V, 4: 4-20mA
pcl730 -- Advantech PCL-730 (& compatibles) Author: José Luis Sánchez (jsanchezv@teleline.es) Status: untested Manufacturer Device Name Advantech PCL-730 pcl730 ICP ISO-730 iso730 ICP [ADLINK] ACL-7130 acl7130 Interrupts are not supported. The ACL-7130 card have an 8254 timer/counter not supported by this driver.
pcl812 -- Advantech PCL-812/PG, PCL-813/B, ADLINK ACL-8112DG/HG/PG, ACL-8113, ACL-8216, ICP DAS A-821PGH/PGL/PGL-NDA, A-822PGH/PGL, A-823PGH/PGL, A-826PG, ICP DAS ISO-813 Author: Michal Dobes <dobes@tesnet.cz> Status: works (I hope. My board fire up under my hands and I cann't test all features.) Manufacturer Device Name Advantech PCL-812 pcl812 Advantech PCL-812PG pcl812pg Advantech PCL-813 pcl813 Advantech PCL-813B pcl813b ADLINK ACL-8112DG acl8112dg ADLINK ACL-8112HG acl8112hg ADLINK ACL-8113 acl-8113 ADLINK ACL-8216 acl8216 ICP ISO-813 iso813 ICP A-821PGH a821pgh ICP A-821PGL a821pgl ICP A-821PGL-NDA a821pclnda ICP A-822PGH a822pgh ICP A-822PGL a822pgl ICP A-823PGH a823pgh ICP A-823PGL a823pgl ICP A-826PG a826pg This driver supports insn and cmd interfaces. Some boards support only insn becouse their hardware don't allow more (PCL-813/B, ACL-8113, ISO-813). Data transfer over DMA is supported only when you measure only one channel, this is too hardware limitation of these boards. Options for PCL-812: [0] - IO Base [1] - IRQ (0=disable, 2, 3, 4, 5, 6, 7; 10, 11, 12, 14, 15) [2] - DMA (0=disable, 1, 3) [3] - 0=trigger source is internal 8253 with 2MHz clock 1=trigger source is external [4] - 0=A/D input range is +/-10V 1=A/D input range is +/-5V 2=A/D input range is +/-2.5V 3=A/D input range is +/-1.25V 4=A/D input range is +/-0.625V 5=A/D input range is +/-0.3125V [5] - 0=D/A outputs 0-5V (internal reference -5V) 1=D/A outputs 0-10V (internal reference -10V) 2=D/A outputs unknow (external reference) Options for PCL-812PG, ACL-8112PG: [0] - IO Base [1] - IRQ (0=disable, 2, 3, 4, 5, 6, 7; 10, 11, 12, 14, 15) [2] - DMA (0=disable, 1, 3) [3] - 0=trigger source is internal 8253 with 2MHz clock 1=trigger source is external [4] - 0=A/D have max +/-5V input 1=A/D have max +/-10V input [5] - 0=D/A outputs 0-5V (internal reference -5V) 1=D/A outputs 0-10V (internal reference -10V) 2=D/A outputs unknow (external reference) Options for ACL-8112DG/HG, A-822PGL/PGH, A-823PGL/PGH, ACL-8216, A-826PG: [0] - IO Base [1] - IRQ (0=disable, 2, 3, 4, 5, 6, 7; 10, 11, 12, 14, 15) [2] - DMA (0=disable, 1, 3) [3] - 0=trigger source is internal 8253 with 2MHz clock 1=trigger source is external [4] - 0=A/D channels are S.E. 1=A/D channels are DIFF [5] - 0=D/A outputs 0-5V (internal reference -5V) 1=D/A outputs 0-10V (internal reference -10V) 2=D/A outputs unknow (external reference) Options for A-821PGL/PGH: [0] - IO Base [1] - IRQ (0=disable, 2, 3, 4, 5, 6, 7) [2] - 0=A/D channels are S.E. 1=A/D channels are DIFF [3] - 0=D/A output 0-5V (internal reference -5V) 1=D/A output 0-10V (internal reference -10V) Options for A-821PGL-NDA: [0] - IO Base [1] - IRQ (0=disable, 2, 3, 4, 5, 6, 7) [2] - 0=A/D channels are S.E. 1=A/D channels are DIFF Options for PCL-813: [0] - IO Base Options for PCL-813B: [0] - IO Base [1] - 0= bipolar inputs 1= unipolar inputs Options for ACL-8113, ISO-813: [0] - IO Base [1] - 0= 10V bipolar inputs 1= 10V unipolar inputs 2= 20V bipolar inputs 3= 20V unipolar inputs
pcl816 -- Advantech PCL-816 cards, PCL-814 Author: Juan Grigera <juan@grigera.com.ar> Status: works Manufacturer Device Name Advantech PCL-816 pcl816 Advantech PCL-814B pcl814b PCL 816 and 814B have 16 SE/DIFF ADCs, 16 DACs, 16 DI and 16 DO. Differences are at resolution (16 vs 12 bits). The driver support AI command mode, other subdevices not written. Analog output and digital input and output are not supported. Configuration Options: [0] - IO Base [1] - IRQ (0=disable, 2, 3, 4, 5, 6, 7) [2] - DMA (0=disable, 1, 3) [3] - 0, 10=10MHz clock for 8254 1= 1MHz clock for 8254
pcl818 -- Advantech PCL-818 cards, PCL-718 Author: Michal Dobes <dobes@tesnet.cz> Status: works Manufacturer Device Name Advantech PCL-818L pcl818l Advantech PCL-818H pcl818h Advantech PCL-818HD pcl818hd Advantech PCL-818HG pcl818hg Advantech PCL-818 pcl818 Advantech PCL-718 pcl718 All cards have 16 SE/8 DIFF ADCs, one or two DACs, 16 DI and 16 DO. Differences are only at maximal sample speed, range list and FIFO support. The driver support AI mode 0, 1, 3 other subdevices (AO, DI, DO) support only mode 0. If DMA/FIFO/INT are disabled then AI support only mode 0. PCL-818HD and PCL-818HG support 1kword FIFO. Driver support this FIFO but this code is untested. A word or two about DMA. Driver support DMA operations at two ways: 1) DMA uses two buffers and after one is filled then is generated INT and DMA restart with second buffer. With this mode I'm unable run more that 80Ksamples/secs without data dropouts on K6/233. 2) DMA uses one buffer and run in autoinit mode and the data are from DMA buffer moved on the fly with 2kHz interrupts from RTC. This mode is used if the interrupt 8 is available for allocation. If not, then first DMA mode is used. With this I can run at full speed one card (100ksamples/secs) or two cards with 60ksamples/secs each (more is problem on account of ISA limitations). To use this mode you must have compiled kernel with disabled "Enhanced Real Time Clock Support". Maybe you can have problems if you use xntpd or similar. If you've data dropouts with DMA mode 2 then: a) disable IDE DMA b) switch text mode console to fb. Options for PCL-818L: [0] - IO Base [1] - IRQ (0=disable, 2, 3, 4, 5, 6, 7) [2] - DMA (0=disable, 1, 3) [3] - 0, 10=10MHz clock for 8254 1= 1MHz clock for 8254 [4] - 0, 5=A/D input -5V.. +5V 1, 10=A/D input -10V..+10V [5] - 0, 5=D/A output 0-5V (internal reference -5V) 1, 10=D/A output 0-10V (internal reference -10V) 2 =D/A output unknow (external reference) Options for PCL-818, PCL-818H: [0] - IO Base [1] - IRQ (0=disable, 2, 3, 4, 5, 6, 7) [2] - DMA (0=disable, 1, 3) [3] - 0, 10=10MHz clock for 8254 1= 1MHz clock for 8254 [4] - 0, 5=D/A output 0-5V (internal reference -5V) 1, 10=D/A output 0-10V (internal reference -10V) 2 =D/A output unknow (external reference) Options for PCL-818HD, PCL-818HG: [0] - IO Base [1] - IRQ (0=disable, 2, 3, 4, 5, 6, 7) [2] - DMA/FIFO (-1=use FIFO, 0=disable both FIFO and DMA, 1=use DMA ch 1, 3=use DMA ch 3) [3] - 0, 10=10MHz clock for 8254 1= 1MHz clock for 8254 [4] - 0, 5=D/A output 0-5V (internal reference -5V) 1, 10=D/A output 0-10V (internal reference -10V) 2 =D/A output unknow (external reference) Options for PCL-718: [0] - IO Base [1] - IRQ (0=disable, 2, 3, 4, 5, 6, 7) [2] - DMA (0=disable, 1, 3) [3] - 0, 10=10MHz clock for 8254 1= 1MHz clock for 8254 [4] - 0=A/D Range is +/-10V 1= +/-5V 2= +/-2.5V 3= +/-1V 4= +/-0.5V 5= user defined bipolar 6= 0-10V 7= 0-5V 8= 0-2V 9= 0-1V 10= user defined unipolar [5] - 0, 5=D/A outputs 0-5V (internal reference -5V) 1, 10=D/A outputs 0-10V (internal reference -10V) 2=D/A outputs unknow (external reference) [6] - 0, 60=max 60kHz A/D sampling 1,100=max 100kHz A/D sampling (PCL-718 with Option 001 installed)
pcm3724 -- Advantech PCM-3724 Author: Drew Csillag <drew_csillag@yahoo.com> Status: tested Manufacturer Device Name Advantech PCM-3724 pcm724 This is driver for digital I/O boards PCM-3724 with 48 DIO. It needs 8255.o for operations and only immediate mode is supported. See the source for configuration details. Copy/pasted/hacked from pcm724.c
pcm3730 -- PCM3730 Author: Blaine Lee Status: unknown Manufacturer Device Name Advantech PCM-3730 pcm3730 Configuration options: [0] - I/O port base
pcmad -- Winsystems PCM-A/D12, PCM-A/D16 Author: ds Status: untested Manufacturer Device Name Winsystems PCM-A/D12 pcmad12 Winsystems PCM-A/D16 pcmad16 This driver was written on a bet that I couldn't write a driver in less than 2 hours. I won the bet, but never got paid. =( Configuration options: [0] - I/O port base [1] - unused [2] - Analog input reference 0 = single ended 1 = differential [3] - Analog input encoding (must match jumpers) 0 = straight binary 1 = two's complement
pcmda12 -- A driver for the Winsystems PCM-D/A-12 Author: Calin Culianu <calin@ajvar.org> Status: works Manufacturer Device Name Winsystems PCM-D/A-12 pcmda12 A driver for the relatively straightforward-to-program PCM-D/A-12. This board doesn't support commands, and the only way to set its analog output range is to jumper the board. As such, comedi_data_write() ignores the range value specified. The board uses 16 consecutive I/O addresses starting at the I/O port base address. Each address corresponds to the LSB then MSB of a particular channel from 0-7. Note that the board is not ISA-PNP capable and thus needs the I/O port comedi_config parameter. Note that passing a nonzero value as the second config option will enable "simultaneous xfer" mode for this board, in which AO writes will not take effect until a subsequent read of any AO channel. This is so that one can speed up programming by preloading all AO registers with values before simultaneously setting them to take effect with one read command. Configuration Options: [0] - I/O port base address [1] - Do Simultaneous Xfer (see description)
pcmmio -- A driver for the PCM-MIO multifunction board Author: Calin Culianu <calin@ajvar.org> Status: works Manufacturer Device Name Winsystems PCM-MIO pcmmio A driver for the relatively new PCM-MIO multifunction board from Winsystems. This board is a PC-104 based I/O board. It contains four subdevices: subdevice 0 - 16 channels of 16-bit AI subdevice 1 - 8 channels of 16-bit AO subdevice 2 - first 24 channels of the 48 channel of DIO (with edge-triggered interrupt support) subdevice 3 - last 24 channels of the 48 channel DIO (no interrupt support for this bank of channels) Some notes: Synchronous reads and writes are the only things implemented for AI and AO, even though the hardware itself can do streaming acquisition, etc. Anyone want to add asynchronous I/O for AI/AO as a feature? Be my guest... Asynchronous I/O for the DIO subdevices *is* implemented, however! They are basically edge-triggered interrupts for any configuration of the first 24 DIO-lines. Also note that this interrupt support is untested. A few words about edge-detection IRQ support (commands on DIO): * To use edge-detection IRQ support for the DIO subdevice, pass the IRQ of the board to the comedi_config command. The board IRQ is not jumpered but rather configured through software, so any IRQ from 1-15 is OK. * Due to the genericity of the comedi API, you need to create a special comedi_command in order to use edge-triggered interrupts for DIO. * Use comedi_commands with TRIG_NOW. Your callback will be called each time an edge is detected on the specified DIO line(s), and the data values will be two sample_t's, which should be concatenated to form one 32-bit unsigned int. This value is the mask of channels that had edges detected from your channel list. Note that the bits positions in the mask correspond to positions in your chanlist when you specified the command and *not* channel id's! * To set the polarity of the edge-detection interrupts pass a nonzero value for either CR_RANGE or CR_AREF for edge-up polarity, or a zero value for both CR_RANGE and CR_AREF if you want edge-down polarity. Configuration Options: [0] - I/O port base address [1] - IRQ (optional -- for edge-detect interrupt support only, leave out if you don't need this feature)
pcmuio -- A driver for the PCM-UIO48A and PCM-UIO96A boards from Winsystems. Author: Calin Culianu <calin@ajvar.org> Status: works Manufacturer Device Name Winsystems PCM-UIO48A pcmuio48 Winsystems PCM-UIO96A pcmuio96 A driver for the relatively straightforward-to-program PCM-UIO48A and PCM-UIO96A boards from Winsystems. These boards use either one or two (in the 96-DIO version) WS16C48 ASIC HighDensity I/O Chips (HDIO). This chip is interesting in that each I/O line is individually programmable for INPUT or OUTPUT (thus comedi_dio_config can be done on a per-channel basis). Also, each chip supports edge-triggered interrupts for the first 24 I/O lines. Of course, since the 96-channel version of the board has two ASICs, it can detect polarity changes on up to 48 I/O lines. Since this is essentially an (non-PnP) ISA board, I/O Address and IRQ selection are done through jumpers on the board. You need to pass that information to this driver as the first and second comedi_config option, respectively. Note that the 48-channel version uses 16 bytes of IO memory and the 96-channel version uses 32-bytes (in case you are worried about conflicts). The 48-channel board is split into two 24-channel comedi subdevices. The 96-channel board is split into 4 24-channel DIO subdevices. Note that IRQ support has been added, but it is untested. To use edge-detection IRQ support, pass the IRQs of both ASICS (for the 96 channel version) or just 1 ASIC (for 48-channel version). Then, use use comedi_commands with TRIG_NOW. Your callback will be called each time an edge is triggered, and the data values will be two sample_t's, which should be concatenated to form one 32-bit unsigned int. This value is the mask of channels that had edges detected from your channel list. Note that the bits positions in the mask correspond to positions in your chanlist when you specified the command and *not* channel id's! To set the polarity of the edge-detection interrupts pass a nonzero value for either CR_RANGE or CR_AREF for edge-up polarity, or a zero value for both CR_RANGE and CR_AREF if you want edge-down polarity. In the 48-channel version: On subdev 0, the first 24 channels channels are edge-detect channels. In the 96-channel board you have the collowing channels that can do edge detection: subdev 0, channels 0-24 (first 24 channels of 1st ASIC) subdev 2, channels 0-24 (first 24 channels of 2nd ASIC) Configuration Options: [0] - I/O port base address [1] - IRQ (for first ASIC, or first 24 channels) [2] - IRQ for second ASIC (pcmuio96 only - IRQ for chans 48-72 .. can be the same as first irq!)
poc -- Generic driver for very simple devices Author: ds Status: unknown Manufacturer Device Name Keithley Metrabyte DAC-02 dac02 Advantech PCL-733 pcl733 Advantech PCL-734 pcl734 This driver is indended to support very simple ISA-based devices, Configuration options: [0] - I/O port base
quatech_daqp_cs -- Quatech DAQP PCMCIA data capture cards Author: Brent Baccala <baccala@freesoft.org> Status: works Manufacturer Device Name Quatech DAQP-208 daqp Quatech DAQP-308 daqp
rtd520 -- Real Time Devices PCI4520/DM7520 Author: Dan Christian Status: Works. Only tested on DM7520-8. Not SMP safe. Manufacturer Device Name Real Time Devices DM7520HR-1 rtd520 Real Time Devices DM7520HR-8 rtd520 Real Time Devices PCI4520 rtd520 Real Time Devices PCI4520-8 rtd520 Configuration options: [0] - PCI bus of device (optional) If bus/slot is not specified, the first available PCI device will be used. [1] - PCI slot of device (optional)
rti800 -- Analog Devices RTI-800/815 Author: ds Status: unknown Manufacturer Device Name Analog Devices RTI-800 rti800 Analog Devices RTI-815 rti815 Configuration options: [0] - I/O port base address [1] - IRQ [2] - A/D reference 0 = differential 1 = pseudodifferential (common) 2 = single-ended [3] - A/D range 0 = [-10,10] 1 = [-5,5] 2 = [0,10] [4] - A/D encoding 0 = two's complement 1 = straight binary [5] - DAC 0 range 0 = [-10,10] 1 = [0,10] [6] - DAC 0 encoding 0 = two's complement 1 = straight binary [7] - DAC 1 range (same as DAC 0) [8] - DAC 1 encoding (same as DAC 0)
rti802 -- Analog Devices RTI-802 Author: Anders Blomdell <anders.blomdell@control.lth.se> Status: works Manufacturer Device Name Analog Devices RTI-802 rti802 Configuration Options: [0] - i/o base [1] - unused [2] - dac#0 0=two's comp, 1=straight [3] - dac#0 0=bipolar, 1=unipolar [4] - dac#1 ... ... [17] - dac#7 ...
s526 -- Sensoray 526 driver Author: Richie Everett Wang <everett.wang@everteq.com> Status: experimental Manufacturer Device Name Sensoray 526 s526 Encoder works Analog input works Analog output works PWM output works Commands are not supported yet. Configuration Options: comedi_config /dev/comedi0 s526 0x2C0,0x3
s626 -- Sensoray 626 driver Author: Richie Everett Wang &lt;everett.wang&#64;everteq.com&gt; Status: experimental Manufacturer Device Name Sensoray 626 s626 Configuration options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first supported PCI device found will be used. INSN_CONFIG instructions: analog input: none analog output: none digital channel: s626 has 3 dio subdevices (2,3 and 4) each with 16 i/o channels supported configuration options: INSN_CONFIG_DIO_QUERY COMEDI_INPUT COMEDI_OUTPUT encoder: Every channel must be configured before reading. Example code insn.insn=INSN_CONFIG; //configuration instruction insn.n=1; //number of operation (must be 1) insn.data=&initialvalue; //initial value loaded into encoder //during configuration insn.subdev=5; //encoder subdevice insn.chanspec=CR_PACK(encoder_channel,0,AREF_OTHER); //encoder_channel //to configure comedi_do_insn(cf,&insn); //executing configuration
serial2002 -- Driver for serial connected hardware Author: Anders Blomdell Status: in development
skel -- Skeleton driver, an example for driver writers Author: ds Status: works This driver is a documented example on how Comedi drivers are written. Configuration Options: none
ssv_dnp -- SSV Embedded Systems DIL/Net-PC Author: Robert Schwebel <robert@schwebel.de> Status: unknown Manufacturer Device Name SSV Embedded Systems DIL/Net-PC 1486 dnp-1486
unioxx5 -- Driver for Fastwel UNIOxx-5 (analog and digital i/o) boards. Author: Kruchinin Daniil (asgard) <asgard@etersoft.ru> Status: unknown Manufacturer Device Name Fastwel UNIOxx-5 unioxx5 Fastwel UNIOxx-5 unioxx5 This card supports digital and analog I/O. It written for g01 subdevices only. channels range: 0 .. 23 dio channels and 0 .. 11 analog modules range During attaching unioxx5 module displays modules identifiers (see dmesg after comedi_config) in format: | [module_number] module_id |
usbdux -- Driver for USB-DUX-D of INCITE Technology Limited Author: Bernd Porr <tech@linux-usb-daq.co.uk> Status: Stable Manufacturer Device Name ITL USB-DUX-D usbdux The following subdevices are available - Analog input subdevice: 0 number of channels: 8 max data value: 4095 ranges: all channels: range = 0 : [-4.096 V,4.096 V] range = 1 : [-2.048 V,2.048 V] range = 2 : [0 V,4.096 V] range = 3 : [0 V,2.048 V] command: start: now|int scan_begin: timer (contains the sampling interval. min is 125us / chan) convert: now scan_end: count stop: none|count - Analogue output: subdevice: 1 number of channels: 4 max data value: 4095 ranges: all channels: range = 0 : [-4.096 V,4.096 V] range = 1 : [0 V,4.096 V] command: start: now|int scan_begin: timer (contains the sampling interval. min is 1ms.) convert: now scan_end: count stop: none|count - Digital I/O subdevice: 2 number of channels: 8 - Counter subdevice: 3 number of channels: 4 max data value: 65535 Pin assignments on the D-connector: 0=/CLK0, 1=UP/DOWN0, 2=RESET0, 4=/CLK1, 5=UP/DOWN1, 6=RESET1 - PWM subdevice: 4 number of channels: 8 or 4 + polarity output for H-bridge (see INSN_CONFIG_PWM_SET_H_BRIDGE where the first byte is the value and the second the polarity) max data value: 512 Configuration options The device requires firmware which is usually uploaded automatically by udev/hotplug at the moment the driver module is loaded. In case udev/hotplug is not enabled you need to upload the firmware with comedi_config -i usbdux_firmware.bin. The firmware is usually installed under /lib/firmware or can be downloaded form http://www.linux-usb-daq.co.uk.
usbduxfast -- Driver for USB-DUX-FAST of INCITE Technology Limited Author: Bernd Porr <tech@linux-usb-daq.co.uk> Status: stable Manufacturer Device Name ITL USB-DUX-FAST usbduxfast The device has one subdevice for analogue input. - subdevice: 0 number of channels: 16 max data value: 4096 ranges: all channelss: range = 0 : [-0.75 V,0.75 V] range = 1 : [-0.5 V,0.5 V] command: The channel-list allows 1,2,3 and 16 channels. start: now|ext|int (external trigger via pin at HD-D connector) scan_begin: follow|timer|ext convert: timer|ext (contains the sampling interval. Min interval for single channel acquisition is 33us and for multiplexed acquisition 300us) scan_end: count stop: none|count Configuration options: The device requires firmware which is usually uploaded automatically by udev/hotplug at the moment the driver module is being loaded. In case udev/hotplug is not enabled you need to upload the firmware with comedi_config -i usbduxfast_firmware.bin The firmware is usually installed under /lib/firmware or can be downloaded form http://www.linux-usb-daq.co.uk.
usbduxsigma -- Driver for USB-DUX-SIGMA of INCITE Technology Limited Author: Bernd Porr <tech@linux-usb-daq.co.uk> Status: Stable Manufacturer Device Name ITL USB-DUX-SIGMA usbduxsigma The following subdevices are available - Analog input subdevice: 0 number of channels: 16 max data value: 16777215 (0xfffff, 24bits) ranges: all channels: [-1.325 V,1.325 V] command: start: now|int scan_begin: timer (contains the sampling interval. min 250us) convert: now scan_end: count stop: none|count - Analog output subdevice: 1 number of channels: 4 max data value: 255 ranges: all channels: [0 V,2.5 V] command: start: now|int scan_begin: timer (contains the sampling interval. min 1ms) convert: now scan_end: count stop: none|count - Digital I/O subdevice: 2 number of channels: 24 (first 8 bits on the D connector, 16 bits int.) - PWM subdevice: 3 number of channels: 8 or 4 + polarity output for H-bridge (see INSN_CONFIG_PWM_SET_H_BRIDGE where the first byte is the value and the second the polarity) max data value: 512 Configuration options: The device requires firmware which is usually uploaded automatically by udev/hotplug at the moment the driver module is loaded. In case udev/hotplug is not enabled you need to upload the firmware with comedi_config -i usbdux_firmware.bin. The firmware is usually installed under /lib/firmware or can be downloaded form http://www.linux-usb-daq.co.uk.
comedilib-0.11.0/doc/dio_funcref.xml0000644000000000000000000002557012426145501014172 00000000000000 %comedilib_entities; ]>
Digital I/O comedi_dio_bitfield2 3 Comedi Comedi reference comedi_dio_bitfield2 read/write multiple digital channels #include <comedilib.h> int comedi_dio_bitfield2 comedi_t * device unsigned int subdevice unsigned int write_mask unsigned int * bits unsigned int base_channel Description The function comedi_dio_bitfield2 allows multiple channels to be read or written together on a digital input, output, or configurable digital I/O device. The parameter write_mask and the value pointed to by bits are interpreted as bit fields, with the least significant bit representing channel base_channel. For each bit in write_mask that is set to 1, the corresponding bit in *bits is written to the digital output channel. After writing all the output channels, each channel is read, and the result placed in the approprate bits in *bits. The result of reading an output channel is the last value written to the output channel. All the channels might not be read or written at the exact same time. For example, the driver may need to sequentially write to several registers in order to set all the digital channels specified by the write_mask and base_channel parameters. Return value If successful, 0 is returned, otherwise -1. comedi_dio_config 3 Comedi Comedi reference comedi_dio_config change input/output properties of channel #include <comedilib.h> int comedi_dio_config comedi_t * device unsigned int subdevice unsigned int channel unsigned int direction Description The function comedi_dio_config configures individual channels in a digital I/O subdevice to be either input or output, depending on the value of direction. Valid directions are COMEDI_INPUT or COMEDI_OUTPUT. Depending on the characteristics of the hardware device, multiple channels might be grouped together in hardware when configuring the input/output direction. In this case, a single call to comedi_dio_config for any channel in the group will affect the entire group. Return value If successful, 0 is returned, otherwise -1. comedi_dio_get_config 3 Comedi Comedi reference comedi_dio_get_config query input/output properties of channel #include <comedilib.h> int comedi_dio_get_config comedi_t * device unsigned int subdevice unsigned int channel unsigned int * direction Description The function comedi_dio_get_config queries the input/output configuration of an individual channel in a digital I/O subdevice (see comedi_dio_config). On success, *direction will be set to either COMEDI_INPUT or COMEDI_OUTPUT. Return value If successful, 0 is returned, otherwise -1. comedi_dio_read 3 Comedi Comedi reference comedi_dio_read read single bit from digital channel #include <comedilib.h> int comedi_dio_read comedi_t * device unsigned int subdevice unsigned int channel unsigned int * bit Description The function comedi_dio_read reads the channel channel belonging to the subdevice subdevice of device device. The data value that is read is stored in the *bit. This function is equivalent to: comedi_data_read(device, subdevice, channel, 0, 0, bit); This function does not require a digital subdevice or a subdevice with a maximum data value of 1 to work properly. If you wish to read multiple digital channels at once, it is more efficient to use comedi_dio_bitfield2 than to call this function multiple times. Return value Return values and errors are the same as comedi_data_read. comedi_dio_write 3 Comedi Comedi reference comedi_dio_write write single bit to digital channel #include <comedilib.h> int comedi_dio_write comedi_t * device unsigned int subdevice unsigned int channel unsigned int bit Description The function writes the value bit to the channel channel belonging to the subdevice subdevice of device device. This function is equivalent to: comedi_data_write(device, subdevice, channel, 0, 0, bit); This function does not require a digital subdevice or a subdevice with a maximum data value of 1 to work properly. If you wish to write multiple digital channels at once, it is more efficient to use comedi_dio_bitfield2 than to call this function multiple times. Return value Return values and errors are the same as comedi_data_write.
comedilib-0.11.0/doc/dio_funcref.txt0000644000000000000000000001306012416542105014200 00000000000000Digital I/O Function: comedi_dio_bitfield2 -- read/write multiple digital channels Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int write_mask Param: unsigned int * bits Param: unsigned int base_channel Description: The function comedi_dio_bitfield2 allows multiple channels to be read or written together on a digital input, output, or configurable digital I/O device. The parameter write_mask and the value pointed to by bits are interpreted as bit fields, with the least significant bit representing channel base_channel. For each bit in write_mask that is set to 1, the corresponding bit in *bits is written to the digital output channel. After writing all the output channels, each channel is read, and the result placed in the approprate bits in *bits. The result of reading an output channel is the last value written to the output channel. All the channels might not be read or written at the exact same time. For example, the driver may need to sequentially write to several registers in order to set all the digital channels specified by the write_mask and base_channel parameters. Returns: If successful, 0 is returned, otherwise -1. Function: comedi_dio_config -- change input/output properties of channel Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int channel Param: unsigned int direction Description: The function comedi_dio_config configures individual channels in a digital I/O subdevice to be either input or output, depending on the value of direction. Valid directions are COMEDI_INPUT or COMEDI_OUTPUT. Depending on the characteristics of the hardware device, multiple channels might be grouped together in hardware when configuring the input/output direction. In this case, a single call to comedi_dio_config for any channel in the group will affect the entire group. Returns: If successful, 0 is returned, otherwise -1. Function: comedi_dio_get_config -- query input/output properties of channel Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int channel Param: unsigned int * direction Description: The function comedi_dio_get_config queries the input/output configuration of an individual channel in a digital I/O subdevice (see comedi_dio_config). On success, *direction will be set to either COMEDI_INPUT or COMEDI_OUTPUT. Returns: If successful, 0 is returned, otherwise -1. Function: comedi_dio_read -- read single bit from digital channel Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int channel Param: unsigned int * bit Description: The function comedi_dio_read reads the channel channel belonging to the subdevice subdevice of device device. The data value that is read is stored in the *bit. This function is equivalent to: comedi_data_read(device, subdevice, channel, 0, 0, bit); This function does not require a digital subdevice or a subdevice with a maximum data value of 1 to work properly. If you wish to read multiple digital channels at once, it is more efficient to use comedi_dio_bitfield2 than to call this function multiple times. Returns: Return values and errors are the same as comedi_data_read. Function: comedi_dio_write -- write single bit to digital channel Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int channel Param: unsigned int bit Description: The function writes the value bit to the channel channel belonging to the subdevice subdevice of device device. This function is equivalent to: comedi_data_write(device, subdevice, channel, 0, 0, bit); This function does not require a digital subdevice or a subdevice with a maximum data value of 1 to work properly. If you wish to write multiple digital channels at once, it is more efficient to use comedi_dio_bitfield2 than to call this function multiple times. Returns: Return values and errors are the same as comedi_data_write. comedilib-0.11.0/doc/mkdr0000755000000000000000000000500512416542105012037 00000000000000#!/usr/bin/perl # vim: set ts=4: $manvolnum="3"; $header="#include <comedilib.h>"; $end = ""; print ' %comedilib_entities; ]>
Kernel drivers '; while(<>){ push @lines,$_; } $secend=""; $status="unknown"; while($s = shift @lines){ @x = $s; if($s =~ m/^\w+\:/){ $blank=0; chomp $s; $x = $s; LOOP: while($s = shift @lines){ if($s =~ m/^\w+:/ or $s eq "\n"){ unshift @lines, $s; last LOOP; } chomp $s; $x = "$x $s"; } if($x =~ m/^Driver: (.*)/){ $driver = $1; }elsif($x =~ m/^Description: (.*)/){ $description = $1; }elsif($x =~ m/^Devices: (.*)/){ $devices = $1; }elsif($x =~ m/^Author: (.*)/){ $author = $1 }elsif($x =~ m/^Status: (.*)/){ $status = $1 } }else{ if($s eq "\n"){ $blank ++; }else{ $blank = 0; } $comment = $comment . $s; } if($blank==3){ $comment =~ s/&/&/g; $comment =~ s/@/@/g; $comment =~ s//>/g; $author =~ s/&/&/g; $author =~ s/@/@/g; $author =~ s//>/g; $description =~ s/&/&/g; print "
$driver -- $description Author: $author Status: $status "; if($devices ne ""){ print " Manufacturer Device Name "; while($devices){ $_=$devices; if(m/^ *\[([^\]]+)\](.*)/){ $mfr = $1; $devices = $2; }elsif(m/^ *\(([^\)]+)\)(.*)/){ $name = $1; $devices = $2; }elsif(m/^ *([^\(,]+)(.*)/){ $dev = $1; $devices = $2; $dev =~ s/ *$//; }elsif(m/^ *,(.*)/){ $devices = $1; print " $mfr $dev $name "; }else{ die "parse error"; } } print " $mfr $dev $name "; } print " $comment
"; $blank=0; $comment=""; $status="unknown"; } } print "
"; exit(0); comedilib-0.11.0/doc/glossary.xml0000644000000000000000000001370312416542105013545 00000000000000 %comedilib_entities; ]> Glossary Application Program Interface API The (documented) set of function calls supported by a particular application, by which programmers can access the functionality available in the application. buffer &comedi; uses permanently allocated kernel memory for streaming input and output to store data that has been measured by a device, but has not been read by an application. These buffers can be resized by the Comedilib functions comedi_set_buffer_size and comedi_set_max_buffer_size or the comedi_config utility. buffer overflow This is an error message that indicates that the driver ran out of space in a &comedi; buffer to put samples. It means that the application is not copying data out of the buffer quickly enough. Often, this problem can be fixed by making the &comedi; buffer larger. See comedi_set_buffer_size for more information. Differential IO Direct Memory Access DMA DMA is a method of transferring data between a device and the main memory of a computer. DMA operates differently on ISA and PCI cards. ISA DMA is handled by a controller on the motherboard and is limited to transfers to/from the lowest 16 MB of physical RAM and can only handle a single segment of memory at a time. These limitations make it almost useless. PCI (bus mastering) DMA is handled by a controller on the device, and can typically address 4 GB of RAM and handle many segments of memory simultaneously. DMA is usually not the only means to data transfer, and may or may not be the optimal transfer mechanism for a particular situation. First In, First Out FIFO Most devices have a limited amount of on-board space to store samples before they are transferred to the Comedi buffer. This allows the CPU or DMA controller to do other things, and then efficiently process a large number of samples simultaneously. It also increases the maximum interrupt latency that the system can handle without interruptions in data. &comedi; command &comedi; commands are the mechanism that applications configure subdevices for streaming input and output. command configuration option instruction &comedi; instructions are the mechanism used by applications to do immediate input from channels, output to channels, and configuration of subdevices and channels. instruction list Instruction lists allow the application to perform multiple &comedi; instructions in the same system call. option option list Option lists are used with the comedi_config utility to perform driver configuration. overrun This is an error message that indicates that there was device-level problem, typically with trigger pulses occurring faster than the board can handle. poll The term poll (and polling) is used for several different related concepts in &comedi;. &comedi; implements the poll system call for Comedi devices, which is similar to select, and returns information about file descriptors that can be read or written. Comedilib also has a function called comedi_poll, which causes the driver to copy all available data from the device to the &comedi; buffer. In addition, some drivers may use a polling technique in place of interrupts. comedilib-0.11.0/doc/doc_html/0000755000000000000000000000000013105044000013010 500000000000000comedilib-0.11.0/doc/doc_html/func-ref-comedi-get-routing.html0000644000000000000000000000675013105043776021056 00000000000000comedi_get_routing

Name

comedi_get_routing — get routing for an output

Synopsis

#include <comedilib.h>
int comedi_get_routing(comedi_t * device,
 unsigned int subdevice,
 unsigned int channel,
 unsigned int * routing);
 

Status

alpha

Description

This function queries the routing for an output, as set by comedi_set_routing. The currently configured routing will be written to *routing. The possible values and their corresponding routings are driver-dependant.

This function is only useable on subdevices that provide support for the INSN_CONFIG_GET_ROUTING configuration instruction.

Return value

0 on success, -1 on error.

comedilib-0.11.0/doc/doc_html/drivercaveats.html0000644000000000000000000000771413105043777016515 000000000000006.5.  Device driver caveats

6.5.  Device driver caveats

A few things to strive for when writing a new driver:

  • Some DAQ cards consist of different “layers†of hardware, which can each be given their own device driver. Examples are: some of the National Instruments cards, that all share the same Mite PCI driver chip; the ubiquitous parallel port, that can be used for simple digital IO acquisitions. If your new card has such a multi-layer design too, please take the effort to provide drivers for each layer separately.

  • Your hardware driver should be functional appropriate to the resources allocated. I.e., if the driver is fully functional when configured with an IRQ and DMA, it should still function moderately well with just an IRQ, or still do minor tasks without IRQ or DMA. Does your driver really require an IRQ to do digital I/O? Maybe someone will want to use your driver just to do digital I/O and has no interrupts available.

  • Drivers are to have absolutely no global variables (apart from read-only, constant data, or data structures shared by all devices), mainly because the existence of global variables immediately negates any possibility of using the driver for two devices. The pointer dev->private should be used to point to a structure containing any additional variables needed by a driver/device combination.

  • Drivers should report errors and warnings via the comedi_error function. (This is not the same function as the user-space comedi_perror function.)

comedilib-0.11.0/doc/doc_html/func-ref-comedi-data-read-n.html0000644000000000000000000000630513105043775020662 00000000000000comedi_data_read_n

Name

comedi_data_read_n — read multiple samples from channel

Synopsis

#include <comedilib.h>
int comedi_data_read_n(comedi_t * device,
 unsigned int subdevice,
 unsigned int channel,
 unsigned int range,
 unsigned int aref,
 lsampl_t * data,
 unsigned int n);
 

Description

Similar to comedi_data_read except it reads n samples into the array data. The precise timing of the samples is not hardware controlled.

comedilib-0.11.0/doc/doc_html/driverwriting.html0000644000000000000000000001704713105043777016552 000000000000006.  Writing a Comedi driver

6.  Writing a Comedi driver

This section explains the most important implementations aspects of the Comedi device drivers. It tries to give the interested device driver writer an overview of the different steps required to write a new device driver.

This section does not explain all implementation details of the Comedi software itself: Comedi has once and for all solved lots of boring but indispensable infrastructural things, such as: timers, management of which drivers are active, memory management for drivers and buffers, wrapping of RTOS-specific interfaces, interrupt handler management, general error handling, the /proc interface, etc. So, the device driver writers can concentrate on the interesting stuff: implementing their specific interface card's DAQ functionalities.

In order to make a decent Comedi device driver, you must know the answers to the following questions:

  • How does the communication between user-space and kernel-space work?

  • What functionality is provided by the generic kernel-space Comedi functions, and what must be provided for each specific new driver?

  • How to use DMA and interrupts?

  • What are the addresses and meanings of all the card's registers?

    This information is to be found in the so-called “register level manual†of the card. Without it, coding a device driver is close to hopeless. It is also something that Comedi (and hence also this handbook) cannot give any support or information for: board manufacturers all use their own design and nomenclature.

6.1.  Communication user-space — kernel-space

In user-space, you interact with the functions implemented in the Comedilib library. Most of the device driver core of the Comedilib library is found in lib subdirectory.

All user-space Comedi instructions and commands are transmitted to kernel space through a traditional ioctl system call. (See lib/ioctl.c in Comedilib.) The user-space information command is encoded as a number in the ioctl call, and decoded in the kernel-space library. There, they are executed by their kernel-space counterparts. This is done in the comedi_fops.c file in the Comedi sources: the comedi_unlocked_ioctl function processes the results of the ioctl system call, interprets its contents, and then calls the corresponding kernel-space do_…_ioctl function(s). For example, a Comedi instruction is further processed by the do_insn_ioctl function. (Which, in turn, uses parse_insn for further detailed processing.)

The data corresponding to instructions and commands is transmitted with the copy_from_user function; acquisition data captured by the interface card passes the kernel/user-space boundary with the help of a copy_to_user function.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-sv-init.html0000644000000000000000000000705013105043776020175 00000000000000comedi_sv_init

Name

comedi_sv_init — slowly-varying inputs

Synopsis

#include <comedilib.h>
int comedi_sv_init(comedi_sv_t * sv,
 comedi_t * device,
 unsigned int subdevice,
 unsigned int channel);
 

Status

deprecated

Description

The function comedi_sv_init initializes the slow varying Comedi structure pointed to by sv to use the device device, the analog input subdevice subdevice, and the channel channel. The slow varying Comedi structure is used by comedi_sv_measure to accurately measure an analog input by averaging over many samples. The default number of samples is 100.

Return value

This function returns 0 on success, -1 on error.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-set-filter.html0000644000000000000000000000712013105043776020660 00000000000000comedi_set_filter

Name

comedi_set_filter — select a filter for a subdevice

Synopsis

#include <comedilib.h>
int comedi_set_filter(comedi_t * device,
 unsigned int subdevice,
 unsigned int channel,
 unsigned int filter);
 

Status

alpha

Description

This function selects a filter for a subdevice. For instance, a digital input subdevice may provide deglitching filters with varying cutoff frequencies. The filters are used to prevent high-frequency noise from causing unwanted transitions on the digital inputs. This function can tell the hardware which deglitching filter to use, or to use none at all.

The filter parameter selects which of the subdevice's filters to use, and is driver-dependant.

This function is only useable on subdevices that provide support for the INSN_CONFIG_FILTER configuration instruction.

Return value

0 on success, -1 on error.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-get-n-subdevices.html0000644000000000000000000000524313105043775021751 00000000000000comedi_get_n_subdevices

Name

comedi_get_n_subdevices — number of subdevices

Synopsis

#include <comedilib.h>
int comedi_get_n_subdevices(comedi_t * device);
 

Description

The function comedi_get_n_subdevices returns the number of subdevices belonging to the Comedi device referenced by the parameter device, or -1 on error.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-poll.html0000644000000000000000000000617313105043775017556 00000000000000comedi_poll

Name

comedi_poll — force updating of streaming buffer

Synopsis

#include <comedilib.h>
int comedi_poll(comedi_t * device,
 unsigned int subdevice);
 

Description

The function comedi_poll is used on a subdevice that has a Comedi command in progress in order to update the streaming buffer. If supported by the driver, all available samples are copied to the streaming buffer. These samples may be pending in DMA buffers or device FIFOs. Only a few Comedi drivers support this operation.

Return value

On success, comedi_poll returns the number of additional bytes available. On failure, -1 is returned.

comedilib-0.11.0/doc/doc_html/index.html0000644000000000000000000011623513105043777014761 00000000000000Comedi

Comedi

The Control and Measurement Device Interface handbook for Comedilib 0.11.0

David Schleef

Ian Abbott

Éric Piel

This document is part of Comedilib. In the context of this document, the term "source code" as defined by the license is interpreted as the XML source.

This library 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, version 2.1 of the License.

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 Lesser General Public License for more details.

You should have received a copy of the GNU Lesser 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.

Abstract

Comedi is a free software project to interface digital acquisition (DAQ) cards. It is the combination of three complementary software items: (i) a generic, device-independent API, (ii) a collection of Linux kernel modules that implement this API for a wide range of cards, and (iii) a Linux user space library with a developer-oriented programming interface to configure and use the cards.


1. Overview

Comedi is a free software project that develops drivers, tools, and libraries for various forms of data acquisition: reading and writing of analog signals; reading and writing of digital inputs/outputs; pulse and frequency counting; pulse generation; reading encoders; etc. The source code is distributed in two main packages, comedi and comedilib:

  • Comedi is a collection of drivers for a variety of common data acquisition plug-in boards (which are called “devices†in Comedi terminology). The drivers are implemented as the combination of (i) one single core Linux kernel module (called “comediâ€) providing common functionality, and (ii) individual low-level driver modules for each device.

  • Comedilib is a separately distributed package containing a user-space library that provides a developer-friendly interface to the Comedi devices. Included in the Comedilib package are documentation, configuration and calibration utilities, and demonstration programs.

  • Kcomedilib is a Linux kernel module (distributed with the comedi package) that provides the same interface as comedilib in kernel space, and suitable for use by real-time kernel modules. It is effectively a “kernel library†for using Comedi from real-time tasks.

Comedi works with standard Linux kernels, but also with its real-time extensions RTAI and RTLinux/GPL.

This section gives a high-level introduction to which functionality you can expect from the software. More technical details and programming examples are given in the following sections of this document.

1.1.  What is a “device driver�

A device driver is a piece of software that interfaces a particular piece of hardware: a printer, a sound card, a motor drive, etc. It translates the primitive, device-dependent commands with which the hardware manufacturer allows you to configure, read and write the electronics of the hardware interface into more abstract and generic function calls and data structures for the application programmer.

David Schleef started the Comedi project to put a generic interface on top of lots of different cards for measurement and control purposes. This type of cards are often called data acquisition (or DAQ) cards.

Analog input and output cards were the first goal of the project, but now Comedi also provides a device independent interface to digital input and output cards, and counter and timer cards (including encoders, pulse generators, frequency and pulse timers, etc.).

Schleef designed a structure which is a balance between modularity and complexity: it's fairly easy to integrate a new card because most of the infrastructure part of other, similar drivers can be reused, and learning the generic and hence somewhat “heavier†Comedi API doesn't scare away new contributors from integrating their drivers into the Comedi framework.

1.2.  Policy vs. mechanism

Device drivers are often written by application programmers, that have only their particular application in mind; especially in real-time applications. For example, one writes a driver for the parallel port, because one wants to use it to generate pulses that drive a stepper motor. This approach often leads to device drivers that depend too much on that particular application, and are not general enough to be re-used for other applications. One golden rule for the device driver writer is to separate mechanism and policy:

  • Mechanism. The mechanism part of the device interface is a faithful representation of the bare functionality of the device, independent of what part of the functionality an application will use.

  • Policy. Once a device driver offers a software interface to the mechanism of the device, an application writer can use this mechanism interface to use the device in one particular fashion. That is, some of the data stuctures offered by the mechanism are interpreted in specific physical units, or some of them are taken together because this composition is relevant for the application. For example, a analog output card can be used to generate voltages that are the inputs for the electronic drivers of the motors of a robot; these voltages can be interpreted as setpoints for the desired velocity of these motors, and six of them are taken together to steer one particular robot with six-degrees of freedom. Some of the other outputs of the same physical device can be used by another application program, for example to generate a sine wave that drives a vibration shaker.

So, Comedi focuses only on the mechanism part of DAQ interfacing. The project does not provide the policy parts, such as Graphical User Interfaces to program and display acquisitions, signal processing libraries, or control algorithms.

1.3.  A general DAQ device driver package

From the point of view of application developers, there are many reasons to welcome the standardization of the API and the architectural structure of DAQ software:

  • API: devices that offer similar functionalities, should have the same software interface, and their differences should be coped with by parameterizing the interfaces, not by changing the interface for each new device in the family. However, the DAQ manufacturers have never been able (or willing) to come up with such a standardization effort themselves.

  • Architectural structure: many electronic interfaces have more than one layer of functionality between the hardware and the operating system, and the device driver code should reflect this fact. For example, many different interface cards use the same PCI driver chips, or use the parallel port as an intermediate means to connect to the hardware device. Hence, “lower-level†device drivers for these PCI chips and parallel ports allow for an increased modularity and re-useability of the software. Finding the generic similarities and structure among different cards helps in developing device drivers faster and with better documentation.

In the case of Linux as the host operating system, device driver writers must keep the following issues in mind:

  • Kernel space vs. User space. The Linux operating system has two levels that require different programming approaches. Only privileged processes can run in the kernel, where they have access to all hardware and to all kernel data structures. Normal application programs can run their processes only in user space, where these processes are shielded from each other, and from direct access to hardware and to critical data of the operating system; these user space programs execute much of the operating system's functionality through system calls.

    Device drivers typically must access specific addresses on the bus, and hence must (at least partially) run in kernel space. Normal users program against the API of the Comedilib user-space library. Comedilib then handles the necessary communication with the Comedi modules running in kernel-space.

  • Device files or device file system. Users who write an application for a particular device, must link their application to that device's device driver. Part of this device driver, however, runs in kernel space, and the user application in user space. So, the operating system provides an interface between both. In Linux or Unix, these interfaces are in the form of “files†in the /dev directory. Each device supported in the kernel may be representated as such a user space device file, and its functionality can may be accessed by classical Unix file I/O: open, close, read, write, ioctl, and mmap.

  • /proc interface. Linux (and some other UNIX operating systems) offer a file-like interface to attached devices (and other OS-related information) via the /proc directories. These “files†do not really exist, but it gives a familiar interface to users, with which they can inspect the current status of each device.

  • Direct Memory Access (DMA) vs. Programmed Input/Output (PIO). Almost all devices can be interfaced in PIO mode: the processor is responsible for directly accessing the bus addresses allocated to the device whenever it needs to read or write data. Some devices also allow DMA: the device and the memory “talk†to each other directly, without needing the processor. DMA is a feature of the bus, not of the operating system (which, of course, has to support its processes to use the feature).

  • Real-time vs. non real-time. If the device is to be used in a RTLinux/GPL or RTAI application, there are a few extra requirements, because not all system calls are available in the kernel of the real-time operating systems RTLinux/GPL or RTAI. The APIs of RTAI and RTLinux/Free differ in different ways, so the Comedi developers have spent a lot of efforts to make generic wrappers to the required RTOS primitives: timers, memory allocation, registration of interrupt handlers, etc.

1.4.  DAQ signals

The cards supported in Comedi have one or more of the following signals: analog input, analog output, digital input, digital output, counters input, counter output, pulse input, pulse output:

  • Digital signals are conceptually quite simple, and don't need much configuration: the number of channels, their addresses on the bus, and their input or output direction.

  • Analog signals are a bit more complicated. Typically, an analog acquisition channel can be programmed to generate or read a voltage between a lower and an upper threshold (e.g., -10V and +10V). The card's electronics may also allow automatically sampling of a set of channels in a prescribed order.

  • Pulse-based signals (counters, timers, encoders, etc.) are conceptually only a bit more complex than digital inputs and outputs, in that they only add some timing specifications to the signal. Comedi has still only a limited number of drivers for this kind of signals, although most of the necessary API and support functionality is available.

In addition to these “real†DAQ functions, Comedi also offers basic timer access.

1.5.  Device hierarchy

Comedi organizes all hardware according to the following hierarchy:

  • Channel: the lowest-level hardware component, that represents the properties of one single data channel; for example, an analog input, or a digital output.

  • Subdevice: a set of functionally identical channels. For example, a set of 16 identical analog inputs.

  • Device: a set of subdevices that are physically implemented on the same interface card; in other words, the interface card itself. For example, the National Instruments 6024E device has a subdevice with 16 analog input channels, another subdevice with two analog output channels, and a third subdevice with eight digital inputs/outputs.

Some interface cards have extra components that don't fit in the above-mentioned classification, such as an EEPROM to store configuration and board parameters, or calibration inputs. These special components are also classified as “sub-devices†in Comedi.

1.6.  Acquisition terminology

This Section introduces the terminology that this document uses when talking about Comedi “commandsâ€, which are streaming asyncronous acquisitions. Figure 1 depicts a typical acquisition sequence when running a command:

  • The sequence has a start and an end. At both sides, the software and the hardware need some finite initialization or settling time.

  • The sequence consists of a number of identically repeated scans. This is where the actual data acquisitions are taking place: data is read from the card, or written to it. Each scan also has a begin, an end, and a finite setup time. Possibly, there is also a settling time (“scan delayâ€) at the end of a scan.

    So, the hardware puts a lower boundary (the scan interval) on the minimum time needed to complete a full scan.

  • Each scan contains one or more conversions on particular channels, i.e., the AD/DA converter is activated on each of the programmed channels, and produces a sample, again in a finite conversion time, starting from the moment in time called the sample time in Figure 1 (sometimes also called the “timestampâ€), and caused by a triggering event, called convert.

    In addition, some hardware has limits on the minimum conversion interval it can achieve, i.e., the minimum time it needs between subsequent conversions. For example, some A/D hardware must multiplex the conversions from different input channels onto one single A/D converter. Thus the conversions are done serially in time (as shown in Figure 1). Other cards have the hardware to do two or more acquisitions in parallel, and can perform all the conversions in a scan simultaneously. The begin of each conversion is “triggered†by some internally or externally generated pulse, e.g., a timer.

In general, not only the start of a conversion is triggered, but also the start of a scan and of a sequence. Comedi provides the API to configure what triggering source one wants to use in each case. The API also allows you to specify the channel list, i.e., the sequence of channels that needs to be acquired during each scan.

Figure 1.  Asynchronous Acquisition Sequence

Asynchronous Acquisition Sequence

Figure courtesy of Kurt Müller.


1.7.  DAQ functions

The basic data acquisition functionalities that Comedi offers work on channels, or sets of channels:

  • Single acquisition: Comedi has function calls to synchronously perform one single data acquisition on a specified channel: comedi_data_read, comedi_data_read_delayed, comedi_data_write, comedi_dio_read, comedi_dio_write. In addition, the lower-level comedi_do_insn function can be used to perform an acquisition.

    “Synchronous†means that the calling process blocks until the data acquisition has finished.

  • Mutiple synchronous acquisition: The comedi_data_read_n function performs (possibly multiple) data acquisitions on a specified channel, in a synchronous way. So, the function call blocks until the whole acquisition has finished. The precise timing between the acquisitions is not hardware controlled.

    In addition, comedi_do_insnlist() executes a list of instructions in one single (blocking, synchronous) call, such that the overhead involved in configuring each individual acquisition is reduced.

  • Command: a command is sequence of scans, for which conditions have been specified that determine when the acquisition will start and stop, and when each conversion in each scan should occur. A comedi_command function call sets up the aynchronous data acquisition: as soon as the command information has been filled in, the comedi_command function call returns. The hardware of the card takes care of the sequencing and timing of the data acquisition as it proceeds.

1.8.  Supporting functionality

The command functionality cannot be offered by DAQ cards that lack the hardware to autonomously sequence a series of scans. For these cards, the command functionality may be provided in software. And because of the quite strict real-time requirements for a command acquisition, a real-time operating system should be used to translate the command specification into a correctly timed sequence of instructions. Comedi provides the comedi_rt_timer kernel module to support such a virtual command execution under RTAI or RTLinux/Free.

Comedi not only offers the API to access the functionality of the cards, but also to query the capabilities of the installed devices. That is, a user process can find out what channels are available, and what their physical parameters are (range, direction of input/output, etc.).

Buffering is another important aspect of device drivers: the acquired data has to be stored in such buffers, because, in general, the application program cannot guarantee to always be ready to provide or accept data as soon as the interface board wants to do a read or write operation. Comedi provides internal buffers for data being streamed to/from devices via Comedi commands. The buffer sizes are user-adjustable.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-close.html0000644000000000000000000000533013105043775017707 00000000000000comedi_close

Name

comedi_close — close a Comedi device

Synopsis

#include <comedilib.h>
int comedi_close(comedi * device);
 

Description

Close a device previously opened by comedi_open.

Return value

If successful, comedi_close returns 0. On failure, -1 is returned.

comedilib-0.11.0/doc/doc_html/inttrigconfiguration.html0000644000000000000000000000556613105043774020123 000000000000004.4.  Instruction for internal triggering

4.4.  Instruction for internal triggering

This special instruction has INSN_INTTRIG as the insn member in its instruction data structure. Its execution causes an internal triggering event. This event can, for example, cause the device driver to start a conversion, or to stop an ongoing acquisition. The exact meaning of the triggering depends on the card and its particular driver.

The data[0] element of the INSN_INTTRIG instruction is reserved for future use, and should be set to 0.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-get-hardware-buffer-size.html0000644000000000000000000000772313105043776023404 00000000000000comedi_get_hardware_buffer_size

Name

comedi_get_hardware_buffer_size — get size of subdevice's hardware buffer

Synopsis

#include <comedilib.h>
int comedi_get_hardware_buffer_size(comedi_t *device,
 unsigned int subdevice,
 enum comedi_io_direction direction);
 

Description

This function returns the number of bytes the subdevice can hold in it's hardware buffer. The term “hardware buffer†refers to any FIFOs, etc. on the acquisition board itself which are used during streaming commands. This does not include the buffer maintained by the comedi kernel module in host memory, whose size may be queried by comedi_get_buffer_size. The direction parameter of type enum comedi_io_direction should be set to COMEDI_INPUT to query the input buffer size (e.g., the buffer of an analog input subdevice), or COMEDI_OUTPUT to query the output buffer size (e.g., the buffer of an analog output).

Return value

Hardware buffer size in bytes, or -1 on error.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-data-write.html0000644000000000000000000000740013105043775020643 00000000000000comedi_data_write

Name

comedi_data_write — write single sample to channel

Synopsis

#include <comedilib.h>
int comedi_data_write(comedi_t * device,
 unsigned int subdevice,
 unsigned int channel,
 unsigned int range,
 unsigned int aref,
 lsampl_t data);
 

Description

Writes a single sample on the channel that is specified by the Comedi device device, the subdevice subdevice, and the channel channel. If appropriate, the device is configured to use range specification range and analog reference type aref. Analog reference types that are not supported by the device are silently ignored.

The function comedi_data_write writes the data value specified by the parameter data to the specified channel.

Return value

On success, comedi_data_write returns 1 (the number of samples written). If there is an error, -1 is returned.

comedilib-0.11.0/doc/doc_html/acq-seq.gif0000644000000000000000000000000012416542105022263 1comedilib-0.11.0/doc/acq-seq.gif00000000000000comedilib-0.11.0/doc/doc_html/func-ref-comedi-dio-get-config.html0000644000000000000000000000650313105043776021401 00000000000000comedi_dio_get_config

Name

comedi_dio_get_config — query input/output properties of channel

Synopsis

#include <comedilib.h>
int comedi_dio_get_config(comedi_t * device,
 unsigned int subdevice,
 unsigned int channel,
 unsigned int * direction);
 

Description

The function comedi_dio_get_config queries the input/output configuration of an individual channel in a digital I/O subdevice (see comedi_dio_config). On success, *direction will be set to either COMEDI_INPUT or COMEDI_OUTPUT.

Return value

If successful, 0 is returned, otherwise -1.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-strerror.html0000644000000000000000000000754113105043776020473 00000000000000comedi_strerror

Name

comedi_strerror — return string describing Comedilib error code

Synopsis

#include <comedilib.h>
const char * comedi_strerror(int errnum);
 

Description

When a Comedilib function fails, it usually returns -1 or NULL, depending on the return type. An internal library variable stores an error number, which can be retrieved with comedi_errno. This error number can be converted to a human-readable form by the functions comedi_perror or comedi_strerror.

These functions are intended to mimic the behavior of the standard C library functions perror, strerror, and errno. In particular, Comedilib functions sometimes return an error that is generated inside the C library; the comedi error message in this case is the same as the C library.

The function comedi_strerror returns a pointer to a character string describing the Comedilib error errnum. The returned string may be modified by a subsequent call to a strerr or perror function (either the libc or Comedilib versions). An unrecognized error number will return a pointer to the string “undefined errorâ€, or similar.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-find-subdevice-by-type.html0000644000000000000000000000661513105043775023067 00000000000000comedi_find_subdevice_by_type

Name

comedi_find_subdevice_by_type — search for subdevice type

Synopsis

#include <comedilib.h>
int comedi_find_subdevice_by_type(comedi_t * device,
 int type,
 unsigned int start_subdevice);
 

Description

The function comedi_find_subdevice_by_type tries to locate a subdevice belonging to comedi device device, having type type, starting with the subdevice start_subdevice. The comedi_subdevice_type enum specifies the possible subdevice types.

Return value

If it finds a subdevice with the requested type, it returns its index. If there is an error, the function returns -1 and sets the appropriate error.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-do-insn.html0000644000000000000000000000576113105043775020161 00000000000000comedi_do_insn

Name

comedi_do_insn — perform instruction

Synopsis

#include <comedilib.h>
int comedi_do_insn(comedi_t * device,
 comedi_insn * instruction);
 

Description

The function comedi_do_insn performs a single instruction.

Return value

If successful, returns a non-negative number. For the case of INSN_READ or INSN_WRITE instructions, comedi_do_insn returns the number of samples read or written, which may be less than the number requested. If there is an error, -1 is returned.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-get-board-name.html0000644000000000000000000000542113105043775021365 00000000000000comedi_get_board_name

Name

comedi_get_board_name — Comedi device name

Synopsis

#include <comedilib.h>
const char * comedi_get_board_name(comedi_t * device);
 

Description

The function comedi_get_board_name returns a pointer to a string containing the name of the comedi device represented by device. This pointer is valid until the device is closed. This function returns NULL if there is an error.

comedilib-0.11.0/doc/doc_html/comedireference.html0000644000000000000000000000645113105043777016767 000000000000005.  Comedi reference

5.  Comedi reference

5.1.  Headerfiles: comedi.h and comedilib.h

All application programs must include the header file comedilib.h. (This file itself includes comedi.h.) They contain the full interface of Comedi: defines, function prototypes, data structures.

The following Sections give more details.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-mark-buffer-read.html0000644000000000000000000000722713105043775021723 00000000000000comedi_mark_buffer_read

Name

comedi_mark_buffer_read — streaming buffer control

Synopsis

#include <comedilib.h>
int comedi_mark_buffer_read(comedi_t * device,
 unsigned int subdevice,
 unsigned int num_bytes);
 

Description

The function comedi_mark_buffer_read is used on a subdevice that has a Comedi input command in progress. It should only be used if you are using a mmap mapping to read data from Comedi's buffer (as opposed to calling read on the device file descriptor), since Comedi will automatically keep track of how many bytes have been transferred via read calls. This function is used to indicate that the next num_bytes bytes in the buffer are no longer needed and may be discarded.

Return value

On success, comedi_mark_buffer_read returns the number of bytes successfully marked as read. The return value may be less than the num_bytes. On failure, -1 is returned.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-reset.html0000644000000000000000000000636713105043776017740 00000000000000comedi_reset

Name

comedi_reset — reset a subdevice

Synopsis

#include <comedilib.h>
int comedi_reset(comedi_t * device,
 unsigned int subdevice);
 

Status

alpha

Description

This function resets a subdevice. It is only useable on subdevices that provide support for the INSN_CONFIG_RESET configuration instruction. Some subdevices treat this as an instruction to reset a specific channel. For those subdevices, this function will reset channel 0 and comedi_reset_channel should be called instead of this one to specify the channel.

Return value

0 on success, -1 on error.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-get-timer.html0000644000000000000000000000660213105043776020503 00000000000000comedi_get_timer

Name

comedi_get_timer — timer information (deprecated)

Synopsis

#include <comedilib.h>
int comedi_get_timer(comedi_t * device,
 unsigned int subdevice,
 double frequency,
 unsigned int * trigvar,
 double * actual_frequency);
 

Status

deprecated

Description

The function comedi_get_timer converts the frequency frequency to a number suitable to send to the driver in a comedi_trig structure. This function remains for compatibility with very old versions of Comedi, that converted sampling rates to timer values in the library. This conversion is now done in the kernel, and every device has the timer type nanosec_timer, indicating that timer values are simply a time specified in nanoseconds.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-set-other-source.html0000644000000000000000000001125013105043776022011 00000000000000comedi_set_other_source

Name

comedi_set_other_source — select source signal for something other than a gate or clock

Synopsis

#include <comedilib.h>
int comedi_set_other_source(comedi_t * device,
 unsigned int subdevice,
 unsigned int channel,
 unsigned int other,
 unsigned int source);
 

Status

alpha

Description

This function allows selection of a source signal for something on a subdevice other than a gate (which uses comedi_set_gate_source) or a clock (which uses comedi_set_clock_source). The other parameter selects which “other†we are configuring, and is driver-dependent. The source parameter selects the source we which to use for the “otherâ€. If the subdevice does not support configuring its “other†sources on a per-channel basis, then the channel parameter will be ignored.

As an example, this function is used to select which PFI digital input channels should be used as the A/B/Z signals when running a counter on an NI M-Series board as a quadrature encoder. The other parameter selects either the A, B, or Z signal, and the source parameter is used to specify which PFI digital input channel the external A, B, or Z signal is physically connected to.

This function is only useable on subdevices that provide support for the INSN_CONFIG_SET_OTHER_SRC configuration instruction.

Return value

0 on success, -1 on error.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-range-is-chan-specific.html0000644000000000000000000000551613105043775023007 00000000000000comedi_range_is_chan_specific

Name

comedi_range_is_chan_specific — range information depends on channel

Synopsis

#include <comedilib.h>
int comedi_range_is_chan_specific(comedi_t * device,
 unsigned int subdevice);
 

Description

If each channel of the specified subdevice may have different range information, this function returns 1. Otherwise, this function returns 0. On error, this function returns -1.

comedilib-0.11.0/doc/doc_html/languagebindings.html0000644000000000000000000001674513105043776017157 000000000000005.5. Language bindings

5.5. Language bindings

Comedilib is a C library but comes also with bindings for Python, Perl, and Ruby. This enables usage of a DAQ device directly from these higher level languages.

5.5.1. Python bindings

Python bindings are automatically generated by SWIG. So always keep in mind that for precise information the SWIG documentation can come in handy in addition to the Comedi documentation.

The name of the module is called comedi. All the C functions, structs, and constants are directly available as is. So you can refer directly to the C documentation for most of the usage. Note that, as in C, the functions either return the successful result or an error code. Unlike typical Python functions, no exceptions are generated on errors (excepted type-checking performed by SWIG). For example, to open a Comedi device you can write in Python:

import comedi
device = comedi.comedi_open("/dev/comedi0")
if device is None:
    errno = comedi.comedi_errno()
    print "Error (%d) %s" % (errno, comedi.comedi_strerror(errno))
    return
        

There are a few things to be aware of. The SWIG bindings automatically take care of converting functions with output parameters to function returning multiple values, if the type of the output parameter is simple. For example comedi_data_read takes as argument a lsampl_t *data which will contain the data read after the function returns. So in C it is used like this:

lsampl_t data;
rc = comedi_data_read(device, subdevice, channel, range, aref, &data);
        

As lsampl_t is a 32-bit unsigned int, in Python, the function is used like this:

rc, data = comedi.comedi_data_read(device, subdevice, channel, range, aref)
        

SWIG takes care of converting simple types between Python and C, but does not convert more complex types such as arrays or structs. Special Python classes are created for these. Moreover, Comedi also provides a few macros. These macros are available in Python as functions with similar names, but lowercase: comedi.cr_pack, comedi.cr_range, etc. So to create and modify a command, one can do in Python:

cmd = comedi.comedi_cmd_struct()
comedi.comedi_get_cmd_generic_timed(device, subdevice, cmd, nchans, period_ns)
cmd.stop_src = comedi.TRIG_COUNT
cmd.stop_arg = nscans
# create and add the channel list
clist = comedi.chanlist(nchans)
for i, channel in range(nchans):
    clist[i] = comedi.cr_pack(channel, range, comedi.AREF_GROUND)
cmd.chanlist = clist
        

One unfortunate consequence is that the objects to represent arrays are as low-level as C arrays (i.e., a pointer with an addition). They have no range checking and no iterator. In addition, they have to be cast from the Python object to the C object. So to create an instruction to call the internal trigger, you would write in Python:

insn = comedi.comedi_insn_struct()
insn.subdev = subdevice
insn.insn = comedi.INSN_INTTRIG
insn.n = 1
data = comedi.lsampl_array(insn.n)
data[0] = num
insn.data = data.cast()
rc = comedi.comedi_do_insn(device, insn)
        

When you need to convert from a raw SWIG object to a proxy object, the .frompointer of the Python object can be used. Also note that by default when the proxy object is deleted, SWIG frees the memory associated to it. To still be able to use the memory, you need to set .thisown to False.

Reading (or writing) a large set of data from a Comedi device is done via a file. In C, this is done by using a file number, but in Python you need a File object. You can get a File object via os.fdopen. For example, to read an array of input data from a Comedi device into a numpy array, one could do:

fileno = comedi.comedi_fileno(device)
file = os.fdopen(fileno, 'r+')
buf = numpy.fromfile(file, dtype=numpy.uint32, count=(nscans * nchans))
        

comedilib-0.11.0/doc/doc_html/func-ref-comedi-get-write-subdevice.html0000644000000000000000000000633413105043775022465 00000000000000comedi_get_write_subdevice

Name

comedi_get_write_subdevice — find streaming output subdevice

Synopsis

#include <comedilib.h>
int comedi_get_write_subdevice(comedi_t * device);
 

Description

The function comedi_get_write_subdevice returns the index of the subdevice whose streaming output buffer is currently accessible through the device device, if there is one.

Return value

On success, comedi_get_write_subdevicereturns the index of the current “write†subdevice if there is one, or -1 if there is no “write†subdevice. On failure, -1 is returned.

comedilib-0.11.0/doc/doc_html/instructions.html0000644000000000000000000002133113105043774016403 000000000000004.2.  Instructions for multiple acquisitions

4.2.  Instructions for multiple acquisitions

The instruction is one of the most generic, overloaden and flexible functions in the Comedi API. It is used to execute a multiple of identical acquisitions on the same channel, but also to perform a configuration of a channel. An instruction list is a list of instructions, possibly on different channels. Both instructions and instructions lists are executed synchronously, i.e., while blocking the calling process. This is one of the limitations of instructions; the other one is that they cannot code an acquisition involving timers or external events. These limits are eliminated by the command acquisition primitive.

4.2.1.  The instruction data structure

All the information needed to execute an instruction is stored in the comedi_insn data structure:

typedef struct comedi_insn_struct {
  unsigned int insn;      // integer encoding the type of acquisition
                          // (or configuration)
  unsigned int n;         // number of elements in data array
  lsampl_t *data;         // pointer to data buffer
  unsigned int subdev;    // subdevice
  unsigned int chanspec; // encoded channel specification
  unsigned int unused[3];
} comedi_insn;

Because of the large flexibility of the instruction function, many types of instruction do not need to fill in all fields, or attach different meanings to the same field. But the current implementation of Comedi requires the data field to be at least one byte long.

The insn member of the instruction data structure determines the type of acquisition executed in the corresponding instruction:

  • INSN_READ: the instruction executes a read on an analog channel.

  • INSN_WRITE: the instruction executes a write on an analog channel.

  • INSN_BITS: indicates that the instruction must read or write values on multiple digital I/O channels.

  • INSN_GTOD: the instruction performs a “Get Time Of Day†acquisition.

  • INSN_WAIT: the instruction blocks for a specified number of nanoseconds.

4.2.2.  Instruction execution

Once an instruction data structure has been filled in, the corresponding instruction is executed with the function comedi_do_insn:

int comedi_do_insn(comedi_t *device,
 comedi_insn *instruction);
 

Many Comedi instructions are shortcuts that relieve the programmer from explicitly filling in the data structure and calling the comedi_do_insn function.

A list of instructions can be executed in one function call using the function comedi_do_insnlist:

int comedi_do_insnlist(comedi_t *device,
 comedi_insnlist *list);
 

The parameter list is a pointer to a comedi_insnlist data structure holding a pointer to an array of comedi_insn and the number of instructions in the list:

typedef struct comedi_insnlist_struct {
  unsigned int n_insns;
  comedi_insn *insns;
} comedi_insnlist;

The number of instructions in the list is limited in the implementation, because instructions are executed synchronously, i.e., the call blocks until the whole instruction (list) has finished.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-get-gate-source.html0000644000000000000000000000747513105043776021612 00000000000000comedi_get_gate_source

Name

comedi_get_gate_source — get gate for a subdevice

Synopsis

#include <comedilib.h>
int comedi_get_gate_source(comedi_t * device,
 unsigned int subdevice,
 unsigned int channel,
 unsigned int gate_index,
 unsigned int * gate_source);
 

Status

alpha

Description

This function queries the gate for a subdevice, as set by comedi_set_gate_source. The currently configured gate source will be written to *gate_source. The possible values and their corresponding gates are driver-dependant. If the subdevice does not support configuring its gates on a per-channel basis, then the channel parameter will be ignored.

This function is only useable on subdevices that provide support for the INSN_CONFIG_GET_GATE_SRC configuration instruction.

Return value

0 on success, -1 on error.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-digital-trigger-disable.html0000644000000000000000000000660213105043776023265 00000000000000comedi_digital_trigger_disable

Name

comedi_digital_trigger_disable — disable a digital trigger

Synopsis

#include <comedilib.h>
int comedi_digital_trigger_disable(comedi_t * device,
 unsigned int subdevice,
 unsigned int trigger_id);
 

Status

alpha

Description

This function disables a digital trigger on a subdevice, returning it to its default, inactive, unconfigured state. If the subdevice supports several digital triggers, the trigger_id selects one.

This function is only useable on subdevices that provide support for the INSN_CONFIG_DIGITAL_TRIG configuration instruction.

Return value

0 on success, -1 on error.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-set-global-oor-behavior.html0000644000000000000000000000652013105043775023227 00000000000000comedi_set_global_oor_behavior

Name

comedi_set_global_oor_behavior — out-of-range behavior

Synopsis

#include <comedilib.h>
enum comedi_oor_behavior comedi_set_global_oor_behavior(enum comedi_oor_behavior behavior);
 

Description

This function changes the Comedilib out-of-range behavior. This currently affects the behavior of comedi_to_phys when converting endpoint sample values, that is, sample values equal to 0 or maxdata. If the out-of-range behavior is set to COMEDI_OOR_NAN, endpoint values are converted to NAN. If the out-of-range behavior is set to COMEDI_OOR_NUMBER, the endpoint values are converted similarly to other values.

Return value

The previous out-of-range behavior is returned.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-get-clock-source.html0000644000000000000000000001016613105043776021754 00000000000000comedi_get_clock_source

Name

comedi_get_clock_source — get master clock for a subdevice

Synopsis

#include <comedilib.h>
int comedi_get_clock_source(comedi_t * device,
 unsigned int subdevice,
 unsigned int channel,
 unsigned int * clock,
 unsigned int * period_ns);
 

Status

alpha

Description

This function queries the master clock for a subdevice, as set by comedi_set_clock_source. The currently configured master clock will be written to *clock. The possible values and their corresponding clocks are driver-dependant. The period of the clock in nanoseconds (or zero if it is unknown) will be written to *period_ns. If the subdevice does not support configuring its master clocks on a per-channel basis, then the channel parameter will be ignored.

It is safe to pass NULL pointers as the clock or period_ns parameters. This function is only useable on subdevices that provide support for the INSN_CONFIG_GET_CLOCK_SRC configuration instruction.

Return value

0 on success, -1 on error.

comedilib-0.11.0/doc/doc_html/drivercallbacks.html0000644000000000000000000001216113105043777016776 000000000000006.4.  Callbacks, events and interrupts

6.4.  Callbacks, events and interrupts

Continuous acquisition is tyically an asynchronous activity: the function call that has set the acquisition in motion has returned before the acquisition has finished (or even started). So, not only the acquired data must be sent back to the user's buffer “in the backgroundâ€, but various types of asynchronous event handling can be needed during the acquisition:

  • The hardware can generate some error or warning events.

  • Normal functional interrupts are generated by the hardware, e.g., signalling the filling-up of the card's hardware buffer, or the end of an acquisition scan, etc.

  • The device driver writer can register a driver-supplied “callback†function, that is called at the end of each hardware interrupt routine.

  • Another driver-supplied callback function is executed when the user program launches an INSN_INTTRIG instruction. This event handling is executed synchronously with the execution of the triggering instruction.

The interrupt handlers are registered through the functions mentioned before The event handling is done in the existing Comedi drivers in statements such as this one:


   s->async->events |= COMEDI_CB_EOA | COMEDI_CB_ERROR

It fills in the bits corresponding to particular events in the comedi_async data structure. The possible event bits are:

  • COMEDI_CB_EOA: execute the callback at the “End-Of-Acquisition†(or “End-Of-Outputâ€).

  • COMEDI_CB_EOS: execute the callback at the “End-Of-Scanâ€.

  • COMEDI_CB_OVERFLOW: execute the callback when a buffer overflow or underflow has occurred.

  • COMEDI_CB_ERROR: execute the callback at the occurrence of an (undetermined) error.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-set-clock-source.html0000644000000000000000000001053213105043776021765 00000000000000comedi_set_clock_source

Name

comedi_set_clock_source — set master clock for a subdevice

Synopsis

#include <comedilib.h>
int comedi_set_clock_source(comedi_t * device,
 unsigned int subdevice,
 unsigned int channel,
 unsigned int clock,
 unsigned int period_ns);
 

Status

alpha

Description

This function selects a master clock for a subdevice. The clock parameter selects the master clock, and is driver-dependant. If the subdevice does not support configuring its master clocks on a per-channel basis, then the channel parameter will be ignored. The period_ns parameter specifies the clock's period in nanoseconds. It may left unspecified by using a value of zero. Drivers will ignore the clock period if they already know what the clock period should be for the specified clock (e.g. for an on-board 20MHz oscillator). Certain boards which use a phase-locked loop to synchronize to external clock sources must be told the period of the external clock. Specifying a clock period for an external clock may also allow the driver to support TRIG_TIMER sources in commands while using the external clock.

The clock may be queried with the comedi_get_clock_source function.

This function is only useable on subdevices that provide support for the INSN_CONFIG_SET_CLOCK_SRC configuration instruction.

Return value

0 on success, -1 on error.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-set-buffer-size.html0000644000000000000000000000735013105043776021621 00000000000000comedi_set_buffer_size

Name

comedi_set_buffer_size — streaming buffer size of subdevice

Synopsis

#include <comedilib.h>
int comedi_set_buffer_size(comedi_t * device,
 unsigned int subdevice,
 unsigned int size);
 

Description

The function comedi_set_buffer_size changes the size of the streaming buffer for the subdevice specified by device and subdevice. The buffer size will be set to size bytes, rounded up to a multiple of the virtual memory page size. The virtual memory page size can be determined using sysconf(_SC_PAGE_SIZE).

This function does not require special privileges. However, it is limited to a (adjustable) maximum buffer size, which can be changed by a privileged user calling comedi_set_max_buffer_size, or running the program comedi_config.

Return value

On success, comedi_set_buffer_size returns the new buffer size in bytes. On failure, -1 is returned.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-loglevel.html0000644000000000000000000001002013105043776020404 00000000000000comedi_loglevel

Name

comedi_loglevel — change Comedilib logging properties

Synopsis

#include <comedilib.h>
int comedi_loglevel(int loglevel);
 

Description

This function affects the output of debugging and error messages from Comedilib. By increasing the log level loglevel, additional debugging information will be printed. Error and debugging messages are printed to the standard error output stream stderr.

The default loglevel can be set by using the environment variable COMEDI_LOGLEVEL. The default log level is 1.

In order to conserve resources, some debugging information is disabled by default when Comedilib is compiled.

The meaning of the log levels is as follows:

LoglevelBehavior
0Comedilib prints nothing.
1 (default) Comedilib prints error messages when there is a self-consistency error (i.e., an internal bug.)
2 Comedilib prints an error message when an invalid parameter is passed.
3 Comedilib prints an error message whenever an error is generated in the Comedilib library or in the C library, when called by Comedilib.
4Comedilib prints a lot of junk.

Return value

This function returns the previous log level.

comedilib-0.11.0/doc/doc_html/comedilib.proc0000644000000000000000000000000013105043777015556 00000000000000comedilib-0.11.0/doc/doc_html/install.html0000644000000000000000000002603713105043774015315 000000000000002.  Configuration

2.  Configuration

This section assumes that you have successfully compiled and installed the Comedi software, that your hardware device is in your computer, and that you know the relevant details about it, i.e., what kind of card it is, any jumper settings related to input ranges, the I/O base address and IRQ for old non-plug-n-play boards, etc.

2.1.  Configuration

The good news is: on most systems PCI and USB based boards are configured automatically. The kernel will detect your data acquisition devices, will load the appropriate kernel drivers and will create the /dev/comedi entries.

bp1@bp1-x61:~/sandbox/comedilib$ ls -l /dev/comedi0*
crw-rw---- 1 root iocard 98,  0 2012-04-26 23:41 /dev/comedi0
crw-rw---- 1 root iocard 98, 48 2012-04-26 23:41 /dev/comedi0_subd0
crw-rw---- 1 root iocard 98, 49 2012-04-26 23:41 /dev/comedi0_subd1

Usually these devices belong to the group iocard as shown here. The only action you need to take is to become member of this group and then the Comedi device is ready to be used.

There are a few PCI drivers that for one reason or another do not support auto-configuration, either because there is more than one variant of a board sharing the same PCI device ID (e.g. Advantech PCI-1710 and PCI-1710HG), or because some configuration options are needed (e.g. Amplicon PCI224 and PCI234) or for some other reason. It is also possible to disable auto-configuration when loading the comedi kernel module. In these cases devices need to be configured manually as for ISA cards. Conversely, most Comedi drivers supplied with the kernel sources that support auto-configuration may no longer support manual configuration.

By default, the comedi kernel module does not reserve any devices for manual configuration so manual configuration will fail. To allow devices to be configured manually, set the comedi_num_legacy_minors module parameter to the number of devices to reserve for manual configuration when loading the comedi kernel module. If using modprobe, this can be set automatically by editing /etc/modprobe.conf or /etc/modprobe.d/comedi.conf (depending on the system) to include the line:

		    options comedi comedi_num_legacy_minors=4
		  

The number 4 in the above line may be adjusted to increase or decrease the number of devices to be reserved for manual configuration.

Old ISA based cards need to be manually configured which is explained here. You only need to read on here if you have one of these old cards. On embedded systems it might also be necessary to load the driver and then to configure the boards manually. In general manual configuration is done by running the comedi_config command (as root). Here is an example of how to use the command (perhaps you should read its man page now):

		    comedi_config /dev/comedi0 labpc-1200 0x260,3
		  

This command says that the “file†/dev/comedi0 can be used to access the Comedi device that uses the labpc-1200 board, and that you give it two run-time parameters (0x260 and 3). More parameters are possible, and their meaning is driver dependant.

This tutorial goes through the process of configuring Comedi for two devices, a National Instruments AT-MIO-16E-10, and a Data Translation DT2821-F-8DI.

The NI board is plug-and-play. The current ni_atmio driver has kernel-level ISAPNP support, which is used by default if you do not specify a base address. So you could simply run comedi_config as

		    comedi_config /dev/comedi0 ni_atmio
		  

For the preceding comedi_config command to succeed, the ni_atmio kernel module must be loaded first. For plug-n-play boards on modern kernels, the appropriate comedi kernel modules should get loaded automatically when your computer is booted. The modprobe command can be used to manually load/unload kernel modules, and lsmod will list all the currently loaded modules.

For the Data Translation board, you need to know how the board's jumpers are configured in order to specify the correct comedi_config parameters. These parameters for the board are given in the kernel drivers section about the dt282x driver. The card discussed here is a DT2821-f-8di. The entry for the dt282x driver tells you that the comedi_config parameters give the driver the I/O base, IRQ, DMA 1, DMA 2, and in addition the states of the differential/single-ended and unipolar/bipolar jumpers:

dt282x configuration options:

  • [0] - I/O port base address

  • [1] - IRQ

  • [2] - DMA 1

  • [3] - DMA 2

  • [4] - AI jumpered for 0=single ended, 1=differential

  • [5] - AI jumpered for 0=straight binary, 1=2's complement

  • [6] - AO 0 jumpered for 0=straight binary, 1=2's complement

  • [7] - AO 1 jumpered for 0=straight binary, 1=2's complement

  • [8] - AI jumpered for 0=[-10,10]V, 1=[0,10], 2=[-5,5], 3=[0,5]

  • [9] - AO 0 jumpered for 0=[-10,10]V, 1=[0,10], 2=[-5,5], 3=[0,5], 4=[-2.5,2.5]

  • [10]- A0 1 jumpered for 0=[-10,10]V, 1=[0,10], 2=[-5,5], 3=[0,5], 4=[-2.5,2.5]

So, the appropriate options list might be:

		    0x200,4,0,0,1,1,1,1,0,2,2
		  

and the full configuration command is:

		    comedi_config /dev/comedi1 dt2821-f-8di 0x200,4,0,0,1,1,1,1,0,2,2
		  

Setting the DMA channels to 0 disables the use of DMA.

So now you have your boards configured correctly. Since data acquisition boards are not typically well-engineered, Comedi sometimes can't figure out if an old non-plug-n-play board is actually in the computer and at the base address you specified. If it can't, it assumes you are right. Both of these boards are well-made, so Comedi will give an error message if it can't find them. The Comedi kernel module, since it is a part of the kernel, prints messages to the kernel logs, which you can access through the command dmesg or the file /var/log/messages. Here is a configuration failure (from dmesg):

comedi0: ni_atmio: 0x0200 can't find board

When it does work, you get:

comedi0: ni_atmio: 0x0260 at-mio-16e-10 ( irq = 3 )

Note that it also correctly identified the board.

comedilib-0.11.0/doc/doc_html/comedikernelgeneric.html0000644000000000000000000005664013105043777017653 000000000000006.2.  Generic functionality

6.2.  Generic functionality

The major include files of the kernel-space part of Comedi are:

  • include/linux/comedidev.h: the header file for kernel-only structures (device, subdevice, async (i.e., buffer/event/interrupt/callback functionality for asynchronous DAQ in a Comedi command), driver, lrange), variables, inline functions and constants.

  • include/linux/comedi_rt.h: all the real-time stuff, such as management of ISR in RTAI and RTLinux/Free, and spinlocks for atomic sections.

  • include/linux/comedilib.h: the header file for the kernel library of Comedi (kcomedilib module).

From all the relevant Comedi device driver code that is found in the comedi kernel module source directory, the generic functionality is contained in two parts:

  • A couple of C files contain the infrastructural support. From these C files, it's especially the comedi_fops.c file that implements what makes Comedi into what people want to use it for: a library that has solved 90% of the DAQ device driver efforts, once and for all.

  • For real-time applications, the subdirectory kcomedilib implements an interface in the kernel that is similar to the Comedi interface accessible through the user-space Comedi library.

    There are some differences in what is possible and/or needed in kernel-space and in user-space, so the functionalities offered in kcomedilib are not an exact copy of the user-space library. For example, locking, interrupt handling, real-time execution, callback handling, etc., are only available in kernel-space.

    Most drivers don't make use (yet) of these real-time functionalities.

6.2.1.  Data structures

This Section explains the generic data structures that a device driver interacts with:

typedef struct comedi_lrange_struct    comedi_lrange;
typedef struct comedi_subdevice_struct comedi_subdevice;
typedef struct comedi_device_struct    comedi_device:
typedef struct comedi_async_struct     comedi_async
typedef struct comedi_driver_struct    comedi_driver;

They can be found in include/linux/comedidev.h. Most of the fields are filled in by the Comedi infrastructure, but there are still quite a handful that your driver must provide or use. As for the user-level Comedi, each of the hierarchical layers has its own data structures: range (comedi_lrange), subdevice, and device.

Note that these kernel-space data structures have similar names as their user-space equivalents, but they have a different (kernel-side) view on the DAQ problem and a different meaning: they encode the interaction with the hardware, not with the user.

However, the comedi_insn and comedi_cmd data structures are shared between user-space and kernel-space: this should come as no surprise, since these data structures contain all information that the user-space program must transfer to the kernel-space driver for each acquisition.

In addition to these data entities that are also known at the user level (device, sub-device, channel), the device driver level provides two more data structures which the application programmer doesn't get in touch with: the data structure comedi_driver that stores the device driver information that is relevant at the operating system level, and the data structure comedi_async that stores the information about all asynchronous activities (interrupts, callbacks and events).

6.2.1.1.  comedi_lrange

The channel information is simple, since it contains only the signal range information:

struct comedi_lrange_struct{
  int           length;
  comedi_krange range[GCC_ZERO_LENGTH_ARRAY];
};

6.2.1.2.  comedi_subdevice

The subdevice is the smallest Comedi entity that can be used for “stand-alone†DAQ, so it is no surprise that it is quite big:

struct comedi_subdevice_struct{
  int  type;
  int  n_chan;
  int  subdev_flags;
  int  len_chanlist;		/* maximum length of channel/gain list */

  void *private;

  comedi_async *async;

  void         *lock;
  void         *busy;
  unsigned int runflags;

  int          io_bits;

  lsampl_t maxdata;       /* if maxdata==0, use list */
  lsampl_t *maxdata_list; /* list is channel specific */

  unsigned int flags;
  unsigned int *flaglist;

  comedi_lrange *range_table;
  comedi_lrange **range_table_list;

  unsigned int *chanlist;		/* driver-owned chanlist (not used) */

  int (*insn_read)(comedi_device *,comedi_subdevice *,comedi_insn *,lsampl_t *);
  int (*insn_write)(comedi_device *,comedi_subdevice *,comedi_insn *,lsampl_t *);
  int (*insn_bits)(comedi_device *,comedi_subdevice *,comedi_insn *,lsampl_t *);
  int (*insn_config)(comedi_device *,comedi_subdevice *,comedi_insn *,lsampl_t *);

  int (*do_cmd)(comedi_device *,comedi_subdevice *);
  int (*do_cmdtest)(comedi_device *,comedi_subdevice *,comedi_cmd *);
  int (*poll)(comedi_device *,comedi_subdevice *);
  int (*cancel)(comedi_device *,comedi_subdevice *);

  int (*buf_change)(comedi_device *,comedi_subdevice *s,unsigned long new_size);
  void (*munge)(comedi_device *, comedi_subdevice *s, void *data, unsigned int num_bytes, unsigned int start_chan_index );

  unsigned int state;
};

The function pointers insn_read … cancel . offer (pointers to) the standardized user-visible API that every subdevice should offer; every device driver has to fill in these functions with their board-specific implementations. (Functionality for which Comedi provides generic functions will, by definition, not show up in the device driver data structures.)

The buf_change and munge function pointers offer functionality that is not visible to the user and for which the device driver writer must provide a board-specific implementation: buf_change is called when a change in the data buffer requires handling; munge transforms different bit-representations of DAQ values, for example from unsigned to 2's complement.

6.2.1.3.  comedi_device

The last data structure stores the information at the device level:

struct comedi_device_struct{
  int           use_count;
  comedi_driver *driver;
  void          *private;
  kdev_t        minor;
  char          *board_name;
  const void    *board_ptr;
  int           attached;
  int           rt;
  spinlock_t    spinlock;
  int           in_request_module;

  int               n_subdevices;
  comedi_subdevice *subdevices;
  int              options[COMEDI_NDEVCONFOPTS];

  /* dumb */
  int iobase;
  int irq;

  comedi_subdevice *read_subdev;
  wait_queue_head_t read_wait;

  comedi_subdevice *write_subdev;
  wait_queue_head_t write_wait;

  struct fasync_struct *async_queue;

  void (*open)(comedi_device *dev);
  void (*close)(comedi_device *dev);
};

6.2.1.4.  comedi_async

The following data structure contains all relevant information: addresses and sizes of buffers, pointers to the actual data, and the information needed for event handling:

struct comedi_async_struct{
  void		*prealloc_buf;		/* pre-allocated buffer */
  unsigned int	prealloc_bufsz;		/* buffer size, in bytes */
  unsigned long	*buf_page_list;		/* physical address of each page */
  unsigned int	max_bufsize;		/* maximum buffer size, bytes */
  unsigned int	mmap_count;	/* current number of mmaps of prealloc_buf */

  volatile unsigned int buf_write_count;	/* byte count for writer (write completed) */
  volatile unsigned int buf_write_alloc_count;	/* byte count for writer (allocated for writing) */
  volatile unsigned int buf_read_count;	/* byte count for reader (read completed)*/

  unsigned int buf_write_ptr;	/* buffer marker for writer */
  unsigned int buf_read_ptr;	/* buffer marker for reader */

  unsigned int cur_chan;		/* useless channel marker for interrupt */
  /* number of bytes that have been received for current scan */
  unsigned int scan_progress;
  /* keeps track of where we are in chanlist as for munging */
  unsigned int munge_chan;

  unsigned int	events;		/* events that have occurred */

  comedi_cmd cmd;

  // callback stuff
  unsigned int cb_mask;
  int (*cb_func)(unsigned int flags,void *);
  void *cb_arg;

  int (*inttrig)(comedi_device *dev,comedi_subdevice *s,unsigned int x);
};

6.2.1.5.  comedi_driver

struct comedi_driver_struct{
	struct comedi_driver_struct *next;

	char *driver_name;
	struct module *module;
	int (*attach)(comedi_device *,comedi_devconfig *);
	int (*detach)(comedi_device *);

	/* number of elements in board_name and board_id arrays */
	unsigned int num_names;
	void *board_name;
	/* offset in bytes from one board name pointer to the next */
	int offset;
};

6.2.2.  Generic driver support functions

The directory comedi contains a large set of support functions. Some of the most important ones are given below.

From comedi/comedi_fops.c, functions to handle the hardware events (which also runs the registered callback function), to get data in and out of the software data buffer, and to parse the incoming functional requests:

  void comedi_event(comedi_device *dev,comedi_subdevice *s,unsigned int mask);

  int comedi_buf_put(comedi_async *async, sampl_t x);
  int comedi_buf_get(comedi_async *async, sampl_t *x);

  static int parse_insn(comedi_device *dev,comedi_insn *insn,lsampl_t *data,void *file);

The file comedi/kcomedilib/kcomedilib_main.c provides functions to register a callback, to poll an ongoing data acquisition, and to print an error message:

  int comedi_register_callback(comedi_t *d,unsigned int subdevice, unsigned int mask,int (*cb)(unsigned int,void *),void *arg);

  int comedi_poll(comedi_t *d, unsigned int subdevice);

  void comedi_perror(const char *message);

The file comedi/rt.c provides interrupt handling for real-time tasks (one interrupt per device!):

  int comedi_request_irq(unsigned irq,void (*handler)(int, void *,struct pt_regs *), unsigned long flags,const char *device,comedi_device *dev_id);
  void comedi_free_irq(unsigned int irq,comedi_device *dev_id)

comedilib-0.11.0/doc/doc_html/convertingsamples.html0000644000000000000000000000770213105043774017410 000000000000003.2.  Converting between integer data and physical units

3.2.  Converting between integer data and physical units

If you selected an analog input subdevice, you probably noticed that the output of tut1 is an unsigned number, for example between 0 and 65535 for a 16 bit analog input. Comedi samples are unsigned, with 0 representing the lowest voltage of the ADC, and a hardware-dependent maximum value representing the highest voltage. Comedi compensates for anything else the manual for your device says (for example, many boards represent bipolar analog input voltages as signed integers). However, you probably prefer to have this number translated to a voltage. Naturally, as a good programmer, your first question is: “How do I do this in a device-independent manner?â€

The functions comedi_to_physical, comedi_to_phys, comedi_from_physical and comedi_from_phys are used to convert between Comedi's integer data and floating point numbers corresponding to physical values (voltages, etc.).

comedilib-0.11.0/doc/doc_html/constantsmacros.html0000644000000000000000000002654413105043775017074 000000000000005.2.  Constants and macros

5.2.  Constants and macros

5.2.1.  CR_PACK

CR_PACK(chan, rng, aref) is used to initialize the elements of the chanlist array in the comedi_cmd data structure, and the chanspec member of the comedi_insn structure.


#define CR_PACK(chan,rng,aref)      ( (((aref)&0x3)<<24) | (((rng)&0xff)<<16) | (chan) )

The chan argument is the channel you wish to use, with the channel numbering starting at zero.

The range rng is an index, starting at zero, whose meaning is device dependent. The comedi_get_n_ranges and comedi_get_range functions are useful in discovering information about the available ranges.

The aref argument indicates what reference you want the device to use. It can be any of the following:

AREF_GROUND

is for inputs/outputs referenced to ground.

AREF_COMMON

is for a “common†reference (the low inputs of all the channels are tied together, but are isolated from ground).

AREF_DIFF

is for differential inputs/outputs.

AREF_OTHER

is for any reference that does not fit into the above categories.

Particular drivers may or may not use the AREF flags. If they are not supported, they are silently ignored.

5.2.2.  CR_PACK_FLAGS

CR_PACK_FLAGS(chan, range, aref, flags) is similar to CR_PACK but can be used to combine one or more flag bits (bitwise-ORed together in the flags parameter) with the other parameters.


#define CR_PACK_FLAGS(chan, range, aref, flags) \
        (CR_PACK(chan, range, aref) | ((flags) & CR_FLAGS_MASK))

Depending on context, the chan parameter might not be a channel; it could be a trigger source, clock source, gate source etc. (in which case, the range and aref parameters would probably be set to 0), and the flags would modify the source in some device-dependant way.

The following flag values are defined:

CR_ALT_FILTER, CR_DITHER, CR_DEGLITCH

(all the same) specify that some sort of filtering is to be done on the channel, trigger source, etc.

CR_ALT_SOURCE

specifies that some alternate source is to be used for the channel (usually a calibration source).

CR_EDGE

is usually combined with a trigger source number to specify that the trigger source is edge-triggered if the hardware and driver supports both edge-triggering and level-triggering. If both are supported, not asserting this flag specifies level-triggering.

CR_INVERT

specifies that the trigger source, gate source, etc. is to be inverted.

5.2.3.  RANGE_LENGTH (deprecated)

Rangetype values are library-internal tokens that represent an array of range information structures. These numbers are primarily used for communication between the kernel and library.

The RANGE_LENGTH(rangetype) macro returns the length of the array that is specified by the rangetype token.

The RANGE_LENGTH macro is deprecated, and should not be used in new applications. It is scheduled to be removed from the header file at version 1.0. Binary compatibility may be broken for version 1.1.

5.2.4.  enum comedi_conversion_direction

enum comedi_conversion_direction
{
	COMEDI_TO_PHYSICAL,
	COMEDI_FROM_PHYSICAL
};

A comedi_conversion_direction is used to choose between converting data from Comedi's integer sample values to a physical value (COMEDI_TO_PHYSICAL), and converting from a physical value to Comedi's integer sample values (COMEDI_FROM_PHYSICAL).

5.2.5.  enum comedi_io_direction

enum comedi_io_direction
{
	COMEDI_INPUT,
	COMEDI_OUTPUT
};

A comedi_io_direction is used to select between input or output. For example, comedi_dio_config uses the COMEDI_INPUT and COMEDI_OUTPUT values to specify whether a configurable digital i/o channel should be configured as an input or output.

5.2.6.  enum comedi_subdevice_type

enum comedi_subdevice_type {
	COMEDI_SUBD_UNUSED,	/* subdevice is unused by driver */
	COMEDI_SUBD_AI,	/* analog input */
	COMEDI_SUBD_AO,	/* analog output */
	COMEDI_SUBD_DI,	/* digital input */
	COMEDI_SUBD_DO,	/* digital output */
	COMEDI_SUBD_DIO,	/* digital input/output */
	COMEDI_SUBD_COUNTER,	/* counter */
	COMEDI_SUBD_TIMER,	/* timer */
	COMEDI_SUBD_MEMORY,	/* memory, EEPROM, DPRAM */
	COMEDI_SUBD_CALIB,	/* calibration DACs and pots*/
	COMEDI_SUBD_PROC,	/* processor, DSP */
	COMEDI_SUBD_SERIAL,	/* serial IO */
	COMEDI_SUBD_PWM	/* pulse width modulation */
};

The comedi_subdevice_type enumeration specifies the possible values for a subdevice type. These values are used by the functions comedi_get_subdevice_type and comedi_find_subdevice_by_type.

comedilib-0.11.0/doc/doc_html/functionreference.html0000644000000000000000000005201213105043776017345 000000000000005.4. Functions

5.4. Functions

5.4.1. Core Functions

comedi_close — close a Comedi device
comedi_data_read — read single sample from channel
comedi_data_read_n — read multiple samples from channel
comedi_data_read_delayed — read single sample from channel after delaying for specified settling time
comedi_data_read_hint — tell driver which channel/range/aref you are going to read from next
comedi_data_write — write single sample to channel
comedi_do_insn — perform instruction
comedi_do_insnlist — perform multiple instructions
comedi_fileno — get file descriptor for open Comedilib device
comedi_find_range — search for range
comedi_find_subdevice_by_type — search for subdevice type
comedi_from_phys — convert physical units to sample
comedi_from_physical — convert physical units to sample using calibration data
comedi_get_board_name — Comedi device name
comedi_get_driver_name — Comedi driver name
comedi_get_maxdata — maximum sample of channel
comedi_get_n_channels — number of subdevice channels
comedi_get_n_ranges — number of ranges of channel
comedi_get_n_subdevices — number of subdevices
comedi_get_range — range information of channel
comedi_get_subdevice_flags — properties of subdevice
comedi_get_subdevice_type — type of subdevice
comedi_get_version_code — Comedi version code
comedi_internal_trigger — generate soft trigger
comedi_lock — subdevice reservation
comedi_maxdata_is_chan_specific — maximum sample depends on channel
comedi_open — open a Comedi device
comedi_range_is_chan_specific — range information depends on channel
comedi_set_global_oor_behavior — out-of-range behavior
comedi_to_phys — convert sample to physical units
comedi_to_physical — convert sample to physical units using polynomials
comedi_unlock — subdevice reservation

5.4.2. Asynchronous commands

comedi_cancel — stop streaming input/output in progress
comedi_command — start streaming input/output
comedi_command_test — test streaming input/output configuration
comedi_get_buffer_contents — streaming buffer status
comedi_get_buffer_read_offset — streaming buffer read offset
comedi_get_buffer_write_offset — streaming buffer write offset
comedi_get_buffer_read_count — streaming buffer read count
comedi_get_buffer_write_count — streaming buffer write count
comedi_get_buffer_size — streaming buffer size of subdevice
comedi_get_cmd_generic_timed — streaming input/output capabilities
comedi_get_cmd_src_mask — streaming input/output capabilities
comedi_get_max_buffer_size — maximum streaming buffer size
comedi_get_read_subdevice — find streaming input subdevice
comedi_get_write_subdevice — find streaming output subdevice
comedi_mark_buffer_read — streaming buffer control
comedi_mark_buffer_written — streaming buffer control
comedi_poll — force updating of streaming buffer
comedi_set_buffer_size — streaming buffer size of subdevice
comedi_set_max_buffer_size — streaming maximum buffer size of subdevice
comedi_set_read_subdevice — set streaming input subdevice
comedi_set_write_subdevice — set streaming output subdevice

5.4.3. Calibration

comedi_apply_calibration — set hardware calibration from file
comedi_apply_parsed_calibration — set calibration from memory
comedi_cleanup_calibration — free calibration resources
comedi_get_default_calibration_path — get default calibration file path
comedi_get_hardcal_converter — get converter for hardware-calibrated subdevice
comedi_get_softcal_converter — get converter for software-calibrated subdevice
comedi_parse_calibration_file — load contents of calibration file

5.4.4. Digital I/O

comedi_dio_bitfield2 — read/write multiple digital channels
comedi_dio_config — change input/output properties of channel
comedi_dio_get_config — query input/output properties of channel
comedi_dio_read — read single bit from digital channel
comedi_dio_write — write single bit to digital channel

5.4.5. Error reporting

comedi_errno — number of last Comedilib error
comedi_loglevel — change Comedilib logging properties
comedi_perror — print a Comedilib error message
comedi_strerror — return string describing Comedilib error code

5.4.6. Extensions

comedi_arm — arm a subdevice
comedi_arm_channel — arm a subdevice channel
comedi_digital_trigger_disable — disable a digital trigger
comedi_digital_trigger_enable_edges — set digital trigger edge detection
comedi_digital_trigger_enable_levels — set digital trigger level detection
comedi_disarm — disarm a subdevice
comedi_disarm_channel — disarm a subdevice channel
comedi_get_clock_source — get master clock for a subdevice
comedi_get_gate_source — get gate for a subdevice
comedi_get_hardware_buffer_size — get size of subdevice's hardware buffer
comedi_get_routing — get routing for an output
comedi_reset — reset a subdevice
comedi_reset_channel — reset a subdevice channel
comedi_set_clock_source — set master clock for a subdevice
comedi_set_counter_mode — change mode of a counter subdevice
comedi_set_filter — select a filter for a subdevice
comedi_set_gate_source — select gate source for a subdevice
comedi_set_other_source — select source signal for something other than a gate or clock
comedi_set_routing — select a routing for an output

5.4.7. Deprecated functions

comedi_dio_bitfield — read/write multiple digital channels
comedi_get_buffer_offset — streaming buffer status (deprecated)
comedi_get_timer — timer information (deprecated)
comedi_sv_init — slowly-varying inputs
comedi_sv_measure — slowly-varying inputs
comedi_sv_update — slowly-varying inputs
comedi_timed_1chan — streaming input (deprecated)
comedi_trigger — perform streaming input/output (deprecated)
comedilib-0.11.0/doc/doc_html/func-ref-comedi-get-maxdata.html0000644000000000000000000000606613105043775021005 00000000000000comedi_get_maxdata

Name

comedi_get_maxdata — maximum sample of channel

Synopsis

#include <comedilib.h>
lsampl_t comedi_get_maxdata(comedi_t * device,
 unsigned int subdevice,
 unsigned int channel);
 

Description

The function comedi_get_maxdata returns the maximum valid data value for channel channel of subdevice subdevice belonging to the comedi device device.

Return value

The maximum valid sample value, or 0 on error.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-disarm.html0000644000000000000000000000663513105043776020073 00000000000000comedi_disarm

Name

comedi_disarm — disarm a subdevice

Synopsis

#include <comedilib.h>
int comedi_disarm(comedi_t * device,
 unsigned int subdevice);
 

Status

alpha

Description

This function disarms a subdevice. It may, for example, stop a counter counting. This function is only useable on subdevices that provide support for the INSN_CONFIG_DISARM configuration instruction. Some subdevices treat this as an instruction to disarm a specific channel. For those subdevices, this function will disarm channel 0 and comedi_disarm_channel should be called instead of this one to specify the channel.

Return value

0 on success, -1 on error.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-get-read-subdevice.html0000644000000000000000000000634513105043775022250 00000000000000comedi_get_read_subdevice

Name

comedi_get_read_subdevice — find streaming input subdevice

Synopsis

#include <comedilib.h>
int comedi_get_read_subdevice(comedi_t * device);
 

Description

The function comedi_get_read_subdevice returns the index of the subdevice whose streaming input buffer is currently accessible through the device device, if there is one.

Return value

On success, comedi_get_read_subdevicereturns the index of the current “read†subdevice if there is one, or -1 if there is no “read†subdevice. On failure, -1 is returned.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-get-buffer-read-offset.html0000644000000000000000000000702213105043775023025 00000000000000comedi_get_buffer_read_offset

Name

comedi_get_buffer_read_offset — streaming buffer read offset

Synopsis

#include <comedilib.h>
int comedi_get_buffer_read_offset(comedi_t * device,
 unsigned int subdevice);
 

Description

The function comedi_get_buffer_read_offset is used on a subdevice that has a Comedi command in progress to get the current read position in the streaming buffer as an offset in bytes from the start of the buffer. The position will wrap around to 0 when it reaches the buffer size. This offset is only useful for memory mapped buffers.

This function replaces comedi_get_buffer_offset and has the same functionality.

Return value

On success, comedi_get_buffer_read_offset returns the current read position as an offset in bytes from the start of the buffer. On failure, -1 is returned.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-dio-write.html0000644000000000000000000000730613105043776020513 00000000000000comedi_dio_write

Name

comedi_dio_write — write single bit to digital channel

Synopsis

#include <comedilib.h>
int comedi_dio_write(comedi_t * device,
 unsigned int subdevice,
 unsigned int channel,
 unsigned int bit);
 

Description

The function writes the value bit to the channel channel belonging to the subdevice subdevice of device device. This function is equivalent to:

comedi_data_write(device, subdevice, channel, 0, 0, bit);

This function does not require a digital subdevice or a subdevice with a maximum data value of 1 to work properly.

If you wish to write multiple digital channels at once, it is more efficient to use comedi_dio_bitfield2 than to call this function multiple times.

Return value

Return values and errors are the same as comedi_data_write.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-sv-measure.html0000644000000000000000000000572113105043776020676 00000000000000comedi_sv_measure

Name

comedi_sv_measure — slowly-varying inputs

Synopsis

#include <comedilib.h>
int comedi_sv_measure(comedi_sv_t * sv,
 double * data);
 

Status

deprecated

Description

The function comedi_sv_measure uses the slowly varying Comedi structure pointed to by sv to measure a slowly varying signal. If successful, the result (in physical units) is stored in the location pointed to by data, and the number of samples is returned. On error, -1 is returned.

comedilib-0.11.0/doc/doc_html/boardspecific.html0000644000000000000000000002254413105043777016446 000000000000006.3.  Board-specific functionality

6.3.  Board-specific functionality

The comedi/drivers subdirectory contains the board-specific device driver code. Each new card must get an entry in this directory. Or extend the functionality of an already existing driver file if the new card is quite similar to that implemented in an already existing driver. For example, many of the National Instruments DAQ cards use the same driver files.

To help device driver writers, Comedi provides the “skeleton†of a new device driver, in the comedi/drivers/skel.c file. Before starting to write a new driver, make sure you understand this file, and compare it to what you find in the other already available board-specific files in the same directory.

The first thing you notice in skel.c is the documentation section: the Comedi documentation is partially generated automatically, from the information that is given in this section. So, please comply with the structure and the keywords provided as Comedi standards.

The second part of the device driver contains board-specific static data structure and defines: addresses of hardware registers; defines and function prototypes for functionality that is only used inside of the device driver for this board; the encoding of the types and number of available channels; PCI information; etc.

Each driver has to register two functions which are called when you load and unload your board's device driver (typically via a kernel module):

  mydriver_attach();
  mydriver_detach();

In the “attach†function, memory is allocated for the necessary data structures, all properties of a device and its subdevices are defined, and filled in in the generic Comedi data structures. As part of this, pointers to the low level instructions being supported by the subdevice have to be set, which define the basic functionality. In somewhat more detail, the mydriver_attach function must:

  • check and request the I/O port region, IRQ, DMA, and other hardware resources. It is convenient here if you verify the existence of the hardware and the correctness of the other information given. Sometimes, unfortunately, this cannot be done.

  • allocate memory for the private data structures.

  • initialize the board registers and possible subdevices (timer, DMA, PCI, hardware FIFO, etc.).

  • return 1, indicating success. If there were any errors along the way, you should return the appropriate (negative) error number. If an error is returned, the mydriver_detach function is called. The mydriver_detach function should check any resources that may have been allocated and release them as necessary. The Comedi core frees dev->subdevices and dev->private, so this does not need to be done in mydriver_detach.

  • If the driver has the possibility to offer asynchronous data acquisition, you have to code an interrupt service routine, event handling routines, and/or callback routines.

Typically, you will be able to implement most of the above-mentioned functionality by cut-and-paste from already existing drivers. The mydriver_attach function needs most of your attention, because it must correctly define and allocate the (private and generic) data structures that are needed for this device. That is, each sub-device and each channel must get appropriate data fields, and an appropriate initialization. The good news, of course, is that Comedi provides the data structures and the defines that fit very well with almost all DAQ functionalities found on interface cards. These can be found in the header files of the include/linux/ directory.

Drivers with digital I/O subdevices should implement the following functions, setting the function pointers in the comedi_subdevice:

  • insn_bits: drivers set this if they have a function that supports reading and writing multiple bits in a digital I/O subdevice at the same time. Most (if not all) of the drivers use this interface instead of insn_read and insn_write for DIO subdevices.

  • insn_config: implements INSN_CONFIG instructions. Currently used for configuring the direction of digital I/O lines, although will eventually be used for generic configuration of drivers that is outside the scope of the currently defined Comedi interface.

Finally, the device driver writer must implement the insn_read and insn_write functions for the analog channels on the card:

  • insn_read: acquire the inputs on the board and transfer them to the software buffer of the driver.

  • insn_write: transfer data from the software buffer to the card, and execute the appropriate output conversions.

In some drivers, you want to catch interrupts, and/or want to use the INSN_INTTRIG instruction. In this case, you must provide and register these callback functions.

Implementation of all of the above-mentioned functions requires perfect knowledge about the hardware registers and addresses of the interface card. In general, you can find some inspiration in the already available device drivers, but don't trust that blind cut-and-paste will bring you far…

comedilib-0.11.0/doc/doc_html/func-ref-comedi-reset-channel.html0000644000000000000000000000644113105043776021337 00000000000000comedi_reset_channel

Name

comedi_reset_channel — reset a subdevice channel

Synopsis

#include <comedilib.h>
int comedi_reset_channel(comedi_t * device,
 unsigned int subdevice,
 unsigned int channel);
 

Status

alpha

Description

This function resets a specified channel of a subdevice. It is only useable on subdevices that provide support for the INSN_CONFIG_RESET configuration instruction. Some subdevices treat this as an instruction to reset the whole subdevice and ignore the specified channel. For such subdevices, comedi_reset is normally called instead.

Return value

0 on success, -1 on error.

comedilib-0.11.0/doc/doc_html/comedilib-glossary.html0000644000000000000000000001752113105043777017440 00000000000000Glossary

Glossary

Application Program Interface

The (documented) set of function calls supported by a particular application, by which programmers can access the functionality available in the application.

buffer

Comedi uses permanently allocated kernel memory for streaming input and output to store data that has been measured by a device, but has not been read by an application. These buffers can be resized by the Comedilib functions comedi_set_buffer_size and comedi_set_max_buffer_size or the comedi_config utility.

buffer overflow

This is an error message that indicates that the driver ran out of space in a Comedi buffer to put samples. It means that the application is not copying data out of the buffer quickly enough. Often, this problem can be fixed by making the Comedi buffer larger. See comedi_set_buffer_size for more information.

Differential IO

…

Direct Memory Access

DMA is a method of transferring data between a device and the main memory of a computer. DMA operates differently on ISA and PCI cards. ISA DMA is handled by a controller on the motherboard and is limited to transfers to/from the lowest 16 MB of physical RAM and can only handle a single segment of memory at a time. These limitations make it almost useless. PCI (“bus masteringâ€) DMA is handled by a controller on the device, and can typically address 4 GB of RAM and handle many segments of memory simultaneously. DMA is usually not the only means to data transfer, and may or may not be the optimal transfer mechanism for a particular situation.

First In, First Out

Most devices have a limited amount of on-board space to store samples before they are transferred to the Comedi buffer. This allows the CPU or DMA controller to do other things, and then efficiently process a large number of samples simultaneously. It also increases the maximum interrupt latency that the system can handle without interruptions in data.

Comedi command

Comedi commands are the mechanism that applications configure subdevices for streaming input and output.

command

See Comedi command .

configuration option

instruction

Comedi instructions are the mechanism used by applications to do immediate input from channels, output to channels, and configuration of subdevices and channels.

instruction list

Instruction lists allow the application to perform multiple Comedi instructions in the same system call.

option

See Also option list .

option list

Option lists are used with the comedi_config utility to perform driver configuration.

See Also configuration option , option .

overrun

This is an error message that indicates that there was device-level problem, typically with trigger pulses occurring faster than the board can handle.

poll

The term poll (and polling) is used for several different related concepts in Comedi. Comedi implements the poll system call for Comedi devices, which is similar to select, and returns information about file descriptors that can be read or written. Comedilib also has a function called comedi_poll, which causes the driver to copy all available data from the device to the Comedi buffer. In addition, some drivers may use a polling technique in place of interrupts.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-fileno.html0000644000000000000000000000631113105043775020056 00000000000000comedi_fileno

Name

comedi_fileno — get file descriptor for open Comedilib device

Synopsis

#include <comedilib.h>
int comedi_fileno(comedi_t * device);
 

Description

The function comedi_fileno returns the file descriptor for the device device. This descriptor can then be used as the file descriptor parameter of read, write, etc. This function is intended to mimic the standard C library function fileno.

The returned file descriptor should not be closed, and will become invalid when comedi_close is called on device.

Return value

A file descriptor, or -1 on error.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-get-hardcal-converter.html0000644000000000000000000001256613105043776022774 00000000000000comedi_get_hardcal_converter

Name

comedi_get_hardcal_converter — get converter for hardware-calibrated subdevice

Synopsis

#include <comedilib.h>
int comedi_get_hardcal_converter(comedi_t * device,
 unsigned subdevice,
 unsigned channel,
 unsigned range,
 enum comedi_conversion_direction direction,
 comedi_polynomial_t * converter);
 

Status

alpha

Description

The function comedi_get_hardcal_converter initializes the comedi_polynomial_t pointed to by converter so it can be passed to either comedi_to_physical, or comedi_from_physical. The result can be used to convert data from the specified subdevice, channel, and range. The direction parameter specifies whether converter will be passed to comedi_to_physical or comedi_from_physical.

This function initializes the comedi_polynomial_t pointed to by converter as a simple linear function with no calibration information, appropriate for boards which do their gain/offset/nonlinearity corrections in hardware. If your board needs calibration to be performed in software by the host computer, use comedi_get_softcal_converter instead. A subdevice will advertise the fact that it depends on a software calibration with the SDF_SOFT_CALIBRATED subdevice flag.

The result of this function will only depend on the channel parameter if either comedi_range_is_chan_specific or comedi_maxdata_is_chan_specific returns true for the specified subdevice.

Return value

Returns 0 on success, -1 on failure.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-dio-bitfield2.html0000644000000000000000000001034613105043776021223 00000000000000comedi_dio_bitfield2

Name

comedi_dio_bitfield2 — read/write multiple digital channels

Synopsis

#include <comedilib.h>
int comedi_dio_bitfield2(comedi_t * device,
 unsigned int subdevice,
 unsigned int write_mask,
 unsigned int * bits,
 unsigned int base_channel);
 

Description

The function comedi_dio_bitfield2 allows multiple channels to be read or written together on a digital input, output, or configurable digital I/O device. The parameter write_mask and the value pointed to by bits are interpreted as bit fields, with the least significant bit representing channel base_channel. For each bit in write_mask that is set to 1, the corresponding bit in *bits is written to the digital output channel. After writing all the output channels, each channel is read, and the result placed in the approprate bits in *bits. The result of reading an output channel is the last value written to the output channel.

All the channels might not be read or written at the exact same time. For example, the driver may need to sequentially write to several registers in order to set all the digital channels specified by the write_mask and base_channel parameters.

Return value

If successful, 0 is returned, otherwise -1.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-get-softcal-converter.html0000644000000000000000000001363113105043776023023 00000000000000comedi_get_softcal_converter

Name

comedi_get_softcal_converter — get converter for software-calibrated subdevice

Synopsis

#include <comedilib.h>
int comedi_get_softcal_converter(unsigned subdevice,
 unsigned channel,
 unsigned range,
 enum comedi_conversion_direction direction,
 const comedi_calibration_t * parsed_calibration,
 comedi_polynomial_t * converter);
 

Status

alpha

Description

The function comedi_get_softcal_converter initializes the comedi_polynomial_t pointed to by converter so it can be passed to either comedi_to_physical or comedi_from_physical. The comedi_polynomial_t pointed to by converter can then be used to convert data for the specified subdevice, channel, and range. The direction parameter specifies whether converter will be passed to comedi_to_physical or comedi_from_physical. The parsed_calibration parameter points to the software calibration values for your device, and may be obtained by calling comedi_parse_calibration_file on a calibration file generated by the comedi_soft_calibrate program.

This function is only useful for boards that perform their calibrations in software on the host computer. A subdevice will advertise the fact that it depends on a software calibration with the SDF_SOFT_CALIBRATED subdevice flag.

Whether or not the result of this function actually depends on the channel parameter is hardware dependent. For example, the calibration of a multiplexed analog input will typically not depend on the channel, only the range. Analog outputs will typically use different calibrations for each output channel.

Software calibrations are implemented as polynomials (up to third order). Since the inverse of a polynomial of order higher than one can't be represented exactly as another polynomial, you may not be able to get converters for the “reverse†direction. For example, you may be able to get a converter for an analog input in the COMEDI_TO_PHYSICAL direction, but not in the COMEDI_FROM_PHYSICAL direction.

Return value

Returns 0 on success, -1 on failure.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-apply-parsed-calibration.html0000644000000000000000000000762413105043776023501 00000000000000comedi_apply_parsed_calibration

Name

comedi_apply_parsed_calibration — set calibration from memory

Synopsis

#include <comedilib.h>
int comedi_apply_parsed_calibration(comedi_t * device,
 unsigned int subdevice,
 unsigned int channel,
 unsigned int range,
 unsigned int aref,
 const comedi_calibration_t * calibration);
 

Status

alpha

Description

This function is similar to comedi_apply_calibration, except the calibration information is read from memory instead of a file. This function can be more efficient than comedi_apply_calibration since the calibration file does not need to be reparsed with every call. The value of parameter calibration is obtained by a call to comedi_parse_calibration_file.

Return value

Returns 0 on success, -1 on failure.

comedilib-0.11.0/doc/doc_html/acquisitionfunctions.html0000644000000000000000000005672313105043774020135 000000000000004.  Acquisition and configuration functions

4.  Acquisition and configuration functions

This Section gives an overview of all Comedi functions with which application programmers can implement their data acquisition. (With “acquisition†we mean all possible kinds of interfacing with the cards: input, output, configuration, streaming, etc.) Section 5 explains the function calls in full detail.

4.1.  Functions for single acquisition

The simplest form of using Comedi is to get one single sample to or from an interface card. This sections explains how to do such simple digital and analog acquisitions.

4.1.1.  Single digital acquisition

Many boards supported by Comedi have digital input and output channels; i.e., channels that can only produce a 0 or a 1. Some boards allow the direction (input or output) of each channel to be specified independently in software.

Comedi groups digital channels into a subdevice, which is a group of digital channels that have the same characteristics. For example, digital output lines will be grouped into a digital output subdevice, bidirectional digital lines will be grouped into a digital I/O subdevice. Thus, there can be multiple digital subdevices on a particular board.

Individual bits on a digital I/O device can be read and written using the functions comedi_dio_read and comedi_dio_write:

int comedi_dio_read(comedi_t *device,
 unsigned int subdevice,
 unsigned int channel,
 unsigned int *bit);
 

int comedi_dio_write(comedi_t *device,
 unsigned int subdevice,
 unsigned int channel,
 unsigned int bit);
 

The device parameter is a pointer to a successfully opened Comedi device. The subdevice and channel parameters are positive integers that indicate which subdevice and channel is used in the acquisition. The integer bit contains the value of the acquired bit.

The direction of bidirectional lines can be configured using the function comedi_dio_config:

int comedi_dio_config(comedi_t *device,
 unsigned int subdevice,
 unsigned int channel,
 unsigned int dir);
 

The parameter dir should be either COMEDI_INPUT or COMEDI_OUTPUT. Many digital I/O subdevices group channels into blocks for configuring direction. Changing one channel in a block changes the entire block.

Multiple channels can be read and written simultaneously using the function comedi_dio_bitfield2:

int comedi_dio_bitfield2(comedi_t *device,
 unsigned int subdevice,
 unsigned int write_mask,
 unsigned int *bits,
 unsigned int base_channel);
 

Each channel from base_channel to base_channel + 31 is assigned to a bit in the write_mask and bits bitfield with bit 0 assigned to channel base_channel, bit 1 assigned to channel base_channel + 1, etc. If a bit in write_mask is set, the corresponding bit in *bits will be written to the digital output line corresponding to the channel given by base_channel plus the bit number. Each digital line is then read and placed into *bits. The value of bits in *bits corresponding to digital output lines is undefined and device-specific. Channel base_channel + 0 is the least significant bit in the bitfield. No more than 32 channels at once can be accessed using this method. Warning! Older versions of Comedi may ignore base_channel and treat it as 0 unless the subdevice has more than 32 channels.

The digital acquisition functions seem to be very simple, but, behind the implementation screens of the Comedi kernel module, they are executed as special cases of the general instruction command.

4.1.2.  Single analog acquisition

Analog Comedi channels can produce data values that are samples from continuous analog signals. These samples are integers with a significant content in the range of, typically, 8, 10, 12, or 16 bits.

Single samples can be read from an analog channel using the function comedi_data_read:

int comedi_data_read(comedi_t *device,
 unsigned int subdevice,
 unsigned int channel,
 unsigned int range,
 unsigned int aref,
 lsampl_t *data);
 

This reads one such data value from a Comedi channel, and puts it in the user-specified data buffer.

The range parameter is the zero-based index of one of the gain ranges supported by the channel. This is a number from 0 to N-1 where N is the number of ranges supported by the channel. Use the function comedi_get_n_ranges to get the number of ranges supported by the channel, the function comedi_find_range to search for a suitable range, or the function comedi_get_range to get the details of a supported range.

The aref parameter specifies an analog reference to use: AREF_GROUND, AREF_COMMON, AREF_DIFF, or AREF_OTHER. Use the function comedi_get_subdevice_flags to see which analog references are supported by the subdevice.

In the opposite direction, single samples can be written to an analog output channel using the function comedi_data_write:

int comedi_data_write(comedi_t *device,
 unsigned int subdevice,
 unsigned int channel,
 unsigned int range,
 unsigned int aref,
 lsampl_t data);
 

Raw data values read or written by the above functions are unsigned integers less than, or equal to, the maximum sample value of the channel, which can be determined using the function comedi_get_maxdata:

lsampl_t comedi_get_maxdata(comedi_t *device,
 unsigned int subdevice,
 unsigned int channel);
 

Conversion between raw data values and uncalibrated physical units can be performed by the functions comedi_to_phys and comedi_from_phys:

double comedi_to_phys(lsampl_t data,
 comedi_range *range,
 lsampl_t maxdata);
 

lsampl_t comedi_from_phys(double data,
 comedi_range *range,
 lsampl_t maxdata);
 

There are some data structures in these commands that are not fully self-explanatory:

  • comedi_t: this data structure contains all information that a user program has to know about an open Comedi device. The programmer doesn't have to fill in this data structure manually: it gets filled in by opening the device.

  • lsampl_t: this “data structure†represents one single sample. On most architectures, it's nothing more than a 32 bits value. Internally, Comedi does some conversion from raw sample data to “correct†integers. This is called “data mungingâ€.

  • comedi_range: this holds the minimum and maximum physical values for a gain range supported by a channel of a subdevice, and specifies the units. This can be used in combination with the channel's “maxdata†value to convert between unsigned integer sample values (of type lsampl_t or sampl_t) and physical units in a nominal (uncalibrated) way using the comedi_to_phys and comedi_from_phys functions. Use the comedi_get_maxdata function to get the “maxdata†value for the channel.

    Most functions specify the range to be used for a channel by a zero-based index into the list of ranges supported by the channel. Depending on the device and subdevice, different channels on the subdevice may or may not share the same list of ranges, that is, ranges may or may not be channel-specific. (The SDF_RANGETYPE subdevice flag indicates whether ranges are channel-specific.)

Each single acquisition by, for example, comedi_data_read requires quite some overhead, because all the arguments of the function call are checked. If multiple acquisitions must be done on the same channel, this overhead can be avoided by using a function that can read more than one sample, comedi_data_read_n:

int comedi_data_read_n(comedi_t *device,
 unsigned int subdevice,
 unsigned int channel,
 unsigned int range,
 unsigned int aref,
 lsampl_t *data,
 unsigned int n);
 

The number of samples, n, is limited by the Comedi implementation (to a maximum of 100 samples), because the call is blocking.

The start of the a single data acquisition can also be delayed by a specified number of nano-seconds using the function comedi_data_read_delayed:

int comedi_data_read_delayed(comedi_t *device,
 unsigned int subdevice,
 unsigned int channel,
 unsigned int range,
 unsigned int aref,
 lsampl_t *data,
 unsigned int nano_sec);
 

All these read and write acquisition functions are implemented on top of the generic instruction command.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-data-read.html0000644000000000000000000001215413105043775020426 00000000000000comedi_data_read

Name

comedi_data_read — read single sample from channel

Synopsis

#include <comedilib.h>
int comedi_data_read(comedi_t * device,
 unsigned int subdevice,
 unsigned int channel,
 unsigned int range,
 unsigned int aref,
 lsampl_t * data);
 

Description

Reads a single sample on the channel specified by the Comedi device device, the subdevice subdevice, and the channel channel. For the A/D conversion (if appropriate), the device is configured to use range specification range and (if appropriate) analog reference type aref. Analog reference types that are not supported by the device are silently ignored.

The function comedi_data_read reads one data value from the specified channel and stores the value in *data.

WARNING: comedi_data_read does not do any pausing to allow multiplexed analog inputs to settle before starting an analog to digital conversion. If you are switching between different channels and need to allow your analog input to settle for an accurate reading, use comedi_data_read_delayed, or set the input channel at an earlier time with comedi_data_read_hint.

Data values returned by this function are unsigned integers less than or equal to the maximum sample value of the channel, which can be determined using the function comedi_get_maxdata. Conversion of data values to physical units can be performed by the functions comedi_to_phys (linear conversion) or comedi_to_physical (non-linear polynomial conversion).

Return value

On success, comedi_data_read returns 1 (the number of samples read). If there is an error, -1 is returned.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-unlock.html0000644000000000000000000000546313105043775020104 00000000000000comedi_unlock

Name

comedi_unlock — subdevice reservation

Synopsis

#include <comedilib.h>
int comedi_unlock(comedi_t * device,
 unsigned int subdevice);
 

Description

The function comedi_unlock releases a subdevice locked by comedi_lock.

Return value

0 on success, otherwise -1.

comedilib-0.11.0/doc/doc_html/ar01s03s05.html0000644000000000000000000000414013105043774015257 000000000000003.5. Further examples

3.5. Further examples

See the demo subdirectory of Comedilib for more example programs. The directory contains a README file with descriptions of the various demo programs.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-to-physical.html0000644000000000000000000000703313105043775021040 00000000000000comedi_to_physical

Name

comedi_to_physical — convert sample to physical units using polynomials

Synopsis

#include <comedilib.h>
double comedi_to_physical(lsampl_t data,
 const comedi_polynomial_t * conversion_polynomial);
 

Description

Converts data given in Comedi's integer sample values (lsampl_t, between 0 and maxdata) into physical units (double). The conversion_polynomial parameter is obtained from either comedi_get_hardcal_converter or comedi_get_softcal_converter. No range checking of the input data is performed. It is up to you to check for data values of 0 or maxdata if you want to detect possibly out-of-range readings.

Return value

Physical value corresponding to the input sample value.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-get-cmd-src-mask.html0000644000000000000000000000655013105043775021645 00000000000000comedi_get_cmd_src_mask

Name

comedi_get_cmd_src_mask — streaming input/output capabilities

Synopsis

#include <comedilib.h>
int comedi_get_cmd_src_mask(comedi_t * device,
 unsigned int subdevice,
 comedi_cmd * command);
 

Description

The command capabilities of the subdevice indicated by the parameters device and subdevice are probed, and the results placed in the command structure pointed to by command. The trigger source elements of the command structure are set to be the bitwise-or of the subdevice's supported trigger sources. Other elements in the structure are undefined.

Return value

On success, 0 is returned. On failure, -1 is returned.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-cancel.html0000644000000000000000000000604513105043775020033 00000000000000comedi_cancel

Name

comedi_cancel — stop streaming input/output in progress

Synopsis

#include <comedilib.h>
int comedi_cancel(comedi_t * device,
 unsigned int subdevice);
 

Description

The function comedi_cancel can be used to stop a command previously started by comedi_command which is still in progress on the subdevice indicated by the parameters device and subdevice.

Return value

On success, 0 is returned. On failure, -1 is returned.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-get-buffer-write-offset.html0000644000000000000000000000651013105043775023245 00000000000000comedi_get_buffer_write_offset

Name

comedi_get_buffer_write_offset — streaming buffer write offset

Synopsis

#include <comedilib.h>
int comedi_get_buffer_write_offset(comedi_t * device,
 unsigned int subdevice);
 

Description

The function comedi_get_buffer_write_offset is used on a subdevice that has a Comedi command in progress to get the current write position in the streaming buffer as an offset in bytes from the start of the buffer. The position will wrap around to 0 when it reaches the buffer size. This offset is only useful for memory mapped buffers.

Return value

On success, comedi_get_buffer_write_offset returns the current write position as an offset in bytes from the start of the buffer. On failure, -1 is returned.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-dio-config.html0000644000000000000000000000675513105043776020635 00000000000000comedi_dio_config

Name

comedi_dio_config — change input/output properties of channel

Synopsis

#include <comedilib.h>
int comedi_dio_config(comedi_t * device,
 unsigned int subdevice,
 unsigned int channel,
 unsigned int direction);
 

Description

The function comedi_dio_config configures individual channels in a digital I/O subdevice to be either input or output, depending on the value of direction. Valid directions are COMEDI_INPUT or COMEDI_OUTPUT.

Depending on the characteristics of the hardware device, multiple channels might be grouped together in hardware when configuring the input/output direction. In this case, a single call to comedi_dio_config for any channel in the group will affect the entire group.

Return value

If successful, 0 is returned, otherwise -1.

comedilib-0.11.0/doc/doc_html/integratingdriver.html0000644000000000000000000001130513105043777017371 000000000000006.6.  Integrating the driver in the Comedi library

6.6.  Integrating the driver in the Comedi library

For integrating new drivers in the Comedi's source tree the following things have to be done:

  • Choose a sensible name for the source code file. Let's assume here that you call it “mydriver.câ€

  • Put your new driver into comedi/drivers/mydriver.c.

  • Edit comedi/drivers/Makefile.am and add mydriver.ko to the module_PROGRAMS list. Also add a line

    mydriver_ko_SOURCES = mydriver.c
    

    in the alphabetically appropriate place.

  • Edit comedi/drivers/Kbuild and a line according to the type of driver:

    obj-$(COMEDI_CONFIG_PCI_MODULES) += mydriver.o  # for a PCI driver
    

    obj-$(COMEDI_CONFIG_PCMCIA_MODULES) += mydriver.o  # for a PCMCIA driver
    

    obj-$(COMEDI_CONFIG_USB_MODULES) += mydriver.o  # for a USB driver
    

    obj-m += mydriver.o  # for other driver types
    

  • Run ./autogen.sh in the top-level comedi directory. You will need to have (a recent version of) autoconf and automake installed to successfully run autogen.sh. Afterwards, your driver will be built along with the rest of the drivers when you run make.

  • If you want to have your driver included in the Comedi distribution (you definitely want to :-) ) send it to the Comedi mailing list for review and integration. See the top-level README for details of the Comedi mailing list.) Note your work must be licensed under terms compatible with the GNU GPL to be distributed as a part of Comedi.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-cleanup-calibration.html0000644000000000000000000000621013105043776022515 00000000000000comedi_cleanup_calibration

Name

comedi_cleanup_calibration — free calibration resources

Synopsis

#include <comedilib.h>
void comedi_cleanup_calibration(comedi_calibration_t * calibration);
 

Status

alpha

Description

This function frees the resources associated with a comedi_calibration_t obtained from comedi_parse_calibration_file. The comedi_calibration_t pointed to by calibration can not be used again after calling this function.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-maxdata-is-chan-specific.html0000644000000000000000000000537213105043775023332 00000000000000comedi_maxdata_is_chan_specific

Name

comedi_maxdata_is_chan_specific — maximum sample depends on channel

Synopsis

#include <comedilib.h>
int comedi_maxdata_is_chan_specific(comedi_t * device,
 unsigned int subdevice);
 

Description

If each channel of the specified subdevice may have different maximum sample values, this function returns 1. Otherwise, this function returns 0. On error, this function returns -1.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-digital-trigger-enable-edges.html0000644000000000000000000001236313105043776024176 00000000000000comedi_digital_trigger_enable_edges

Name

comedi_digital_trigger_enable_edges — set digital trigger edge detection

Synopsis

#include <comedilib.h>
int comedi_digital_trigger_enable_edges(comedi_t * device,
 unsigned int subdevice,
 unsigned int trigger_id,
 unsigned int base_input,
 unsigned int rising_edge_inputs,
 unsigned int falling_edge_inputs);
 

Status

alpha

Description

This function enables edge detection for a digital trigger on a subdevice. If the subdevice supports several digital triggers, the trigger_id selects one. The rising_edge_inputs and falling_edge_inputs parameters are bit fields that enable (1) or disable (0) rising and falling edge detection on a set of (up to) 32 inputs. The least-significant bit corresponds to the input specified by the base_input parameter, with subsequent bits corresponding to subsequent inputs.

Successive calls to this function have an cumulative effect, which allows digital triggers to be set up for more than 32 inputs. There may also be a cumulative effect with calls to comedi_digital_trigger_enable_levels if the digital trigger supports a combination of edge and level triggering. Due to the cumulative effect, it may be necessary to call comedi_digital_trigger_disable to clear the old settings before reconfiguring the digital trigger inputs.

A digital trigger may support edge detection, level detection, both at different times, or both at the same time. If it supports both but not at the same time, configuring edge triggers will disable any previous level triggers, or vice versa.

This function is only useable on subdevices that provide support for the INSN_CONFIG_DIGITAL_TRIG configuration instruction, and only if the digital trigger supports edge detection.

Return value

0 on success, -1 on error.

comedilib-0.11.0/doc/doc_html/commandsstreaming.html0000644000000000000000000007366413105043774017372 000000000000004.5.  Commands for streaming acquisition

4.5.  Commands for streaming acquisition

The most powerful Comedi acquisition primitive is the command. It's powerful because, with one single command, the programmer launches:

  • a possibly infinite sequence of acquisitions,

  • accompanied with various callback functionalities (DMA, interrupts, driver-specific callback functions),

  • for any number of channels,

  • with an arbitrary order of channels in each scan (possibly even with repeated channels per scan),

  • and with various scan triggering sources, external (i.e., hardware pulses) as well as internal (i.e., pulses generated on the DAQ card itself, or generated by a software trigger instruction).

This command functionality exists in the Comedi API, because various data acquisition devices have the capability to perform this kind of complex acquisition, driven by either on-board or off-board timers and triggers.

A command specifies a particular data acquisition sequence, which consists of a number of scans, and each scan is comprised of a number of conversions, which usually corresponds to a single A/D or D/A conversion. So, for example, a scan could consist of sampling channels 1, 2 and 3 of a particular device, and this scan should be repeated 1000 times, at intervals of 1 millisecond apart.

The command function is complementary to the configuration instruction function: each channel in the command's chanlist should first be configured by an appropriate instruction.

4.5.1.  Executing a command

A command is executed by the function comedi_command:

int comedi_command(comedi_t *device,
 comedi_cmd *command);
 

The following sections explain the meaning of the comedi_cmd data structure. Filling in this structure can be quite complicated, and requires good knowledge about the exact functionalities of the DAQ card. So, before launching a command, the application programmer is adviced to check whether this complex command data structure can be successfully parsed. So, the typical sequence for executing a command is to first send the command through comedi_command_test once or twice. The test will check that the command is valid for the particular device, and often makes some adjustments to the command arguments, which can then be read back by the user to see the actual values used.

A Comedi program can find out on-line what the command capabilities of a specific device are, by means of the comedi_get_cmd_src_mask function.

4.5.2.  The command data structure

The command executes according to the information about the requested acquisition, which is stored in the comedi_cmd data structure:

typedef struct comedi_cmd_struct comedi_cmd;

struct comedi_cmd_struct {
  unsigned int subdev;         // which subdevice to sample
  unsigned int flags;          // encode some configuration possibilities
                               // of the command execution; e.g.,
                               // whether a callback routine is to be
                               // called at the end of the command

  unsigned int start_src;      // event to make the acquisition start
  unsigned int start_arg;      // parameters that influence this start

  unsigned int scan_begin_src; // event to make a particular scan start
  unsigned int scan_begin_arg; // parameters that influence this start`

  unsigned int convert_src;    // event to make a particular conversion start
  unsigned int convert_arg;    // parameters that influence this start

  unsigned int scan_end_src;   // event to make a particular scan terminate
  unsigned int scan_end_arg;   // parameters that influence this termination

  unsigned int stop_src;       // what make the acquisition terminate
  unsigned int stop_arg;       // parameters that influence this termination

  unsigned int *chanlist;      // pointer to list of channels to be sampled
  unsigned int chanlist_len;   // number of channels to be sampled

  sampl_t *data;               // address of buffer
  unsigned int data_len;       // number of samples to acquire
};

The start and end of the whole command acquisition sequence, and the start and end of each scan and of each conversion, is triggered by a so-called event. More on these in Section 4.5.3.

The subdev member of the comedi_cmd structure is the index of the subdevice the command is intended for. The comedi_find_subdevice_by_type function can be useful in discovering the index of your desired subdevice.

The chanlist member of the comedi_cmd data structure should point to an array whose number of elements is specified by chanlist_len (this will generally be the same as the scan_end_arg). The chanlist specifies the sequence of channels and gains (and analog references) that should be stepped through for each scan. The elements of the chanlist array should be initialized by “packing†the channel, range and reference information together with the CR_PACK macro.

The data and data_len members can be safely ignored when issueing commands from a user-space program. They only have meaning when a command is sent from a kernel module using the kcomedilib interface, in which case they specify the buffer where the driver should write/read its data to/from.

The final member of the comedi_cmd structure is the flags field, i.e., bits in a word that can be bitwise-or'd together. The meaning of these bits are explained in Section 4.5.4.

4.5.3.  The command trigger events

A command is a very versatile acquisition instruction, in the sense that it offers lots of possibilities to let different hardware and software sources determine when acquisitions are started, performed, and stopped. More specifically, the command data structure has five types of events: start the acquisition, start a scan, start a conversion, stop a scan, and stop the acquisition. Each event can be given its own source (the …_src members in the comedi_cmd data structure). And each event source can have a corresponding argument (the …_arg members of the comedi_cmd data structure) whose meaning depends on the type of source trigger. For example, to specify an external digital line “3†as a source (in general, any of the five event sources), you would use src=TRIG_EXT and arg=3.

The following paragraphs discuss in somewhat more detail the trigger event sources(…_src), and the corresponding arguments (…_arg).

The start of an acquisition is controlled by the start_src events. The available options are:

  • TRIG_NOW: the “start†event occurs start_arg nanoseconds after the command is set up. Currently, only start_arg=0 is supported.

  • TRIG_FOLLOW: (For an output device.) The “start†event occurs when data is written to the buffer.

  • TRIG_EXT: the “start†event occurs when an external trigger signal occurs; e.g., a rising edge of a digital line. start_arg chooses the particular digital line.

  • TRIG_INT: the “start†event occurs on a Comedi internal signal, which is typically caused by an INSN_INTTRIG instruction.

The start of the beginning of each scan is controlled by the scan_begin_src events. The available options are:

  • TRIG_TIMER: “scan begin†events occur periodically. The time between “scan begin†events is scan_begin_arg nanoseconds.

  • TRIG_FOLLOW: The “scan begin†event occurs immediately after a “scan end†event occurs.

  • TRIG_EXT: the “scan begin†event occurs when an external trigger signal occurs; e.g., a rising edge of a digital line. scan_begin_arg chooses the particular digital line.

The scan_begin_arg used here may not be supported exactly by the device, but it will be adjusted to the nearest supported value by comedi_command_test.

The timing between each sample in a scan is controlled by the convert_src events. The available options are:

  • TRIG_TIMER: the conversion events occur periodically. The time between “convert†events is convert_arg nanoseconds.

  • TRIG_EXT: the conversion events occur when an external trigger signal occurs, e.g., a rising edge of a digital line. convert_arg chooses the particular digital line.

  • TRIG_NOW: All conversion events in a scan occur simultaneously.

The end of each scan is almost always specified by setting the scan_end_src event to TRIG_COUNT, with the argument being the same as the number of channels in the chanlist. You could probably find a device that allows something else, but it would be strange.

The end of an acquisition is controlled by stop_src event. The available options are:

  • TRIG_COUNT: stop the acquisition after stop_arg scans.

  • TRIG_NONE: perform continuous acquisition, until stopped using comedi_cancel.

    stop_arg is used to denote how many samples should be used in the continuous acquisition. If stop_arg is set to 0, the entire output buffer may contribute to the output. If stop_arg != 0, only the memory for stop_arg samples will be used. Many drivers do not yet support stop_arg!=0 and should enforce stop_arg=0 via comedi_command_test.

There are a couple of less usual or not yet implemented events:

  • TRIG_TIME: cause an event to occur at a particular time.

    (This event source is reserved for future use.)

  • TRIG_OTHER: driver specific event trigger.

    This event can be useful as any of the trigger sources. Its exact meaning is driver specific, because it implements a feature that otherwise does not fit into the generic Comedi command interface. Configuration of TRIG_OTHER features are done by INSN_CONFIG instructions.

    The argument is reserved and should be set to 0.

Not all event sources are applicable to all events. Supported trigger sources for specific events depend significantly on your particular device, and even more on the current state of its device driver. The comedi_get_cmd_src_mask function is useful for determining what trigger sources a subdevice supports.

4.5.4.  The command flags

The flags field in the command data structure is used to specify some “behaviour†of the acquisitions in a command. The meaning of the field is as follows:

  • TRIG_RT: ask the driver to use a hard real-time interrupt handler. This will reduce latency in handling interrupts from your data aquisition hardware. It can be useful if you are sampling at high frequency, or if your hardware has a small onboard data buffer. You must have a real-time kernel (RTAI or RTLinux/GPL) and must compile Comedi with real-time support, or this flag will do nothing.

  • TRIG_WAKE_EOS: where “EOS†stands for “End of Scanâ€. Some drivers will change their behaviour when this flag is set, trying to transfer data at the end of every scan (instead of, for example, passing data in chunks whenever the board's hardware data buffer is half full). This flag may degrade a driver's performance at high frequencies, because the end of a scan is, in general, a much more frequent event than the filling up of the data buffer.

  • TRIG_ROUND_NEAREST: round to nearest supported timing period, the default. This flag (as well as the following three), indicates how timing arguments should be rounded if the hardware cannot achieve the exact timing requested.

  • TRIG_ROUND_DOWN: round period down.

  • TRIG_ROUND_UP: round period up.

  • TRIG_ROUND_UP_NEXT: this one doesn't do anything, and I don't know what it was intended to do…?

  • TRIG_DITHER: enable dithering? Dithering is a software technique to smooth the influence of discretization “noiseâ€.

  • TRIG_DEGLITCH: enable deglitching? Another “noise†smoothing technique.

  • TRIG_WRITE: write to bidirectional devices. Could be useful, in principle, if someone wrote a driver that supported commands for a digital I/O device that could do either input or output.

  • TRIG_BOGUS: do the motions?

  • TRIG_CONFIG: perform configuration, not triggering. This is a legacy of the deprecated comedi_trig_struct data structure, and has no function at present.

4.5.5.  Anti-aliasing

If you wish to aquire accurate waveforms, it is vital that you use an anti-alias filter. An anti-alias filter is a low-pass filter used to remove all frequencies higher than the Nyquist frequency (half your sampling rate) from your analog input signal before you convert it to digital. If you fail to filter your input signal, any high frequency components in the original analog signal will create artifacts in your recorded digital waveform that cannot be corrected.

For example, suppose you are sampling an analog input channel at a rate of 1000 Hz. If you were to apply a 900 Hz sine wave to the input, you would find that your sampling rate is not high enough to faithfully record the 900 Hz input, since it is above your Nyquist frequency of 500 Hz. Instead, what you will see in your recorded digital waveform is a 100 Hz sine wave! If you don't use an anti-alias filter, it is impossible to tell whether the 100 Hz sine wave you see in your digital signal was really produced by a 100 Hz input signal, or a 900 Hz signal aliased to 100 Hz, or a 1100 Hz signal, etc.

In practice, the cutoff frequency for the anti-alias filter is usually set 10% to 20% below the Nyquist frequency due to fact that real filters do not have infinitely sharp cutoffs.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-parse-calibration-file.html0000644000000000000000000001006613105043776023121 00000000000000comedi_parse_calibration_file

Name

comedi_parse_calibration_file — load contents of calibration file

Synopsis

#include <comedilib.h>
comedi_calibration_t * comedi_parse_calibration_file(const char * file_path);
 

Status

alpha

Description

This function parses a calibration file (produced by the comedi_calibrate or comedi_soft_calibrate programs) and returns a pointer to a comedi_calibration_t which can be passed to the comedi_apply_parsed_calibration or comedi_get_softcal_converter functions. When you are finished using the comedi_calibration_t, you should call comedi_cleanup_calibration to free the resources associated with the comedi_calibration_t.

The comedi_get_default_calibration_path function may be useful in conjunction with this function.

Return value

A pointer to parsed calibration information on success, or NULL on failure.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-get-buffer-size.html0000644000000000000000000000617113105043775021604 00000000000000comedi_get_buffer_size

Name

comedi_get_buffer_size — streaming buffer size of subdevice

Synopsis

#include <comedilib.h>
int comedi_get_buffer_size(comedi_t * device,
 unsigned int subdevice);
 

Description

The function comedi_get_buffer_size returns the size (in bytes) of the streaming buffer for the subdevice specified by device and subdevice.

Return value

On success, comedi_get_buffer_size returns the size of the buffer in bytes. On failure, -1 is returned.

comedilib-0.11.0/doc/doc_html/experimentalfunctionality.html0000644000000000000000000012225013105043774021147 000000000000004.7.  Experimental functionality

4.7.  Experimental functionality

The following subsections document functionality that has not yet matured. Most of this functionality has even not been implemented yet in any single device driver. This information is included here, in order to stimulate discussion about their API, and to encourage pioneering implementations.

4.7.1.  Digital input combining machines

(Status: experimental (i.e., no driver implements this yet))

When one or several digital inputs are used to modify an output value, either an accumulator or a single digital line or bit, a bitfield structure is typically used in the Comedi interface. The digital inputs have two properties, “sensitive†inputs and “modifier†inputs. Edge transitions on sensitive inputs cause changes in the output signal, whereas modifier inputs change the effect of edge transitions on sensitive inputs. Note that inputs can be both modifier inputs and sensitive inputs.

For simplification purposes, it is assumed that multiple digital inputs do not change simultaneously.

The combined state of the modifier inputs determine a modifier state. For each combination of modifier state and sensitive input, there is a set of bits that determine the effect on the output value due to positive or negative transitions of the sensitive input. For each transition direction, there are two bits defined as follows:

00
transition is ignored.
01
accumulator is incremented, or output is set.
10
accumulator is decremented, or output is cleared.
11
reserved.

For example, a simple digital follower is specified by the bit pattern 01 10, because it sets the output on positive transitions of the input, and clears the output on negative transitions. A digital inverter is similarily 10 01. These systems have only one sensitive input.

As another example, a simple up counter, which increments on positive transitions of one input, is specified by 01 00. This system has only one sensitive input.

When multiple digital inputs are used, the inputs are divided into two types, inputs which cause changes in the accumulator, and those that only modify the meaning of transitions on other inputs. Modifier inputs do not require bitfields, but there needs to be a bitfield of length 4*(2^(N-1)) for each edge sensitive input, where N is the total number of inputs. Since N is usually 2 or 3, with only one edge sensitive input, the scaling issues are not significant.

4.7.2.  Analog filtering configuration

(Status: design (i.e., no driver implements this yet).)

The insn field of the instruction data structure has not been assigned yet.

The chanspec field of the instruction data structure is ignored.

Some devices have the capability to add white noise (dithering) to analog input measurement. This additional noise can then be averaged out, to get a more accurate measurement of the input signal. It should not be assumed that channels can be separately configured. A simple design can use 1 bit to turn this feature on/off.

Some devices have the capability of changing the glitch characteristics of analog output subsytems. The default (off) case should be where the average settling time is lowest. A simple design can use 1 bit to turn this feature on/off.

Some devices have a configurable analog filters as part of the analog input stage. A simple design can use 1 bit to enable/disable the filter. Default is disabled, i.e., the filter being bypassed, or if the choice is between two filters, the filter with the largest bandwidth.

4.7.3.  Analog Output Waveform Generation

(Status: design (i.e., no driver implements this yet).)

The insn field of the instruction data structure has not been assigned yet.

The chanspec field of the instruction data structure is ignored.

Some devices have the ability to cyclicly loop through samples kept in an on-board analog output FIFO. This config should allow the user to enable/disable this mode.

This config should allow the user to configure the number of samples to loop through. It may be necessary to configure the channels used.

4.7.4.  Extended Triggering

(Status: alpha.)

The insn field of the instruction data structure has not been assigned yet.

The chanspec field of the instruction data structure is ignored.

This section covers common information for all extended triggering configuration, and doesn't describe a particular type of extended trigger.

Extended triggering is used to configure triggering engines that do not fit into commands. In a typical programming sequence, the application will use configuration instructions to configure an extended trigger, and a command, specifying TRIG_OTHER as one of the trigger sources.

Extended trigger configuration should be designed in such a way that the user can probe for valid parameters, similar to how command testing works. An extended trigger configuration instruction should not configure the hardware directly, rather, the configuration should be saved until the subsequent command is issued. This allows more flexibility for future interface changes.

It has not been decided whether the configuration stage should return a token that is then used as the trigger argument in the command. Using tokens is one method to satisfy the problem that extended trigger configurations may have subtle compatiblity issues with other trigger sources/arguments that can only be determined at command test time. Passing all stages of a command test should only be allowed with a properly configured extended trigger.

Extended triggers must use data[1] as flags. The upper 16 bits are reserved and used only for flags that are common to all extended triggers. The lower 16 bits may be defined by the particular type of extended trigger.

Various types of extended triggers must use data[1] to know which event the extended trigger will be assigned to in the command structure. The possible values are an OR'd mask of the following:

  • COMEDI_EV_START

  • COMEDI_EV_SCAN_BEGIN

  • COMEDI_EV_CONVERT

  • COMEDI_EV_SCAN_END

  • COMEDI_EV_STOP

4.7.5.  Analog Triggering

(Status: alpha. The ni_mio_common.c driver implements this feature.)

The insn field of the instruction data structure has not been assigned yet.

The chanspec field of the instruction data structure is ignored.

The data field of the instruction data structure is used as follows:

data[1]
trigger and combining machine configuration.
data[2]
analog triggering signal chanspec.
data[3]
primary analog level.
data[4]
secondary analog level.

Analog triggering is described by a digital combining machine that has two sensitive digital inputs. The sensitive digital inputs are generated by configurable analog comparators. The analog comparators generate a digital 1 when the analog triggering signal is greater than the comparator level. The digital inputs are not modifier inputs. Note, however, there is an effective modifier due to the restriction that the primary analog comparator level must be less than the secondary analog comparator level.

If only one analog comparator signal is used, the combining machine for the secondary input should be set to ignored, and the secondary analog level should be set to 0.

The interpretation of the chanspec and voltage levels is device dependent, but should correspond to similar values of the analog input subdevice, if possible.

Notes: Reading range information is not addressed. This makes it difficult to convert comparator voltages to data values.

Possible extensions: A parameter that specifies the necessary time that the set condition has to be true before the trigger is generated. A parameter that specifies the necessary time that the reset condition has to be true before the state machine is reset.

4.7.6.  Bitfield Pattern Matching Extended Trigger

(Status: design. No driver implements this feature yet.)

The insn field of the instruction data structure has not been assigned yet.

The chanspec field of the instruction data structure is ignored.

The data field of the instruction data structure is used as follows:

data[1]
trigger flags.
data[2]
mask.
data[3]
pattern.

The pattern matching trigger issues a trigger when all of a specifed set of input lines match a specified pattern. If the device allows, the input lines should correspond to the input lines of a digital input subdevice, however, this will necessarily be device dependent. Each possible digital line that can be matched is assigned a bit in the mask and pattern. A bit set in the mask indicates that the input line must match the corresponding bit in the pattern. A bit cleared in the mask indicates that the input line is ignored.

Notes: This only allows 32 bits in the pattern/mask, which may be too few. Devices may support selecting different sets of lines from which to match a pattern.

Discovery: The number of bits can be discovered by setting the mask to all 1's. The driver must modify this value and return -EAGAIN.

4.7.7.  Counter configuration

(Status: design. No driver implements this feature yet.)

The insn field of the instruction data structure has not been assigned yet.

The chanspec field of the instruction data structure is used to specify which counter to use. (I.e., the counter is a Comedi channel.)

The data field of the instruction data structure is used as follows:

data[1]
trigger configuration.
data[2]
primary input chanspec.
data[3]
primary combining machine configuration.
data[4]
secondary input chanspec.
data[5]
secondary combining machine configuration.
data[6]
latch configuration.

Note that this configuration is only useful if the counting has to be done in software. Many cards offer configurable counters in hardware; e.g., general purpose timer cards can be configured to act as pulse generators, frequency counters, timers, encoders, etc.

Counters can be operated either in synchronous mode (using INSN_READ) or asynchronous mode (using commands), similar to analog input subdevices. The input signal for both modes is the accumulator. Commands on counter subdevices are almost always specified using scan_begin_src = TRIG_OTHER, with the counter configuration also serving as the extended configuration for the “scan begin†source.

Counters are made up of an accumulator and a combining machine that determines when the accumulator should be incremented or decremented based on the values of the input signals. The combining machine optionally determines when the accumulator should be latched and put into a buffer. This feature is used in asynchronous mode.

Note: How to access multiple pieces of data acquired at each event?

4.7.8.  One source plus auxiliary counter configuration

(Status: design. No driver implements this feature yet.)

The insn field of the instruction data structure has not been assigned yet.

The chanspec field of the instruction data structure is used to …

The data field of the instruction data structure is used as follows:

data[1]
is flags, including the flags for the command triggering configuration. If a command is not subsequently issued on the subdevice, the command triggering portion of the flags are ignored.
data[2]
determines the mode of operation. The mode of operation is actually a bitfield that encodes what to do for various transitions of the source signals.
data[3], data[4]
determine the primary source for the counter, similar to the …_src and the …_arg fields used in the command data structure.

Notes: How to specify which events cause a latch and push, and what should get latched?

4.7.9.  National Instruments General Purpose Counters/Timers (GPCT)

Counters/timers and pulse generators are fairly different in terms of functionality, but they correspond to similar devices seen either as input or output. When generalising, these devices are both referred to as "counters". The NI boards provide a couple of such counters, under the name of GPCT. A counter is made of the following basic elements:
Input source
the signal measured or the clock of the pulse generation.
Gate
controls when the counting (or sampling) occurs.
Register
holds the current count.
Out
for the output counters (pulse generators), the output signal.

There are many different ways to count, time or generate pulses. All the modes rely on the counter and some particular configuration. For example, in a typical buffered counting mode, the source is the (digital) signal that is measured, the counter is increased at every rising edge of the signal, the gate is the (digital) signal indicating when to save the counter to memory. It is preferable you get first familiarized with these various modes by reading your NI board documentation before reading the following description on the mapping to the comedi interface.

Each counter of the board is represented in comedi as a subdevice of type COMEDI_SUBD_COUNTER. Each subdevice has a device file associated (eg, /dev/comedi0_subd11) in order to read or write buffered data from or to the counter. Note that the comedi subdevice has three "channels". In most case, only channel 0 is to be used. Reading or writing on channel 0 corresponds to reading/writing the counter value. The GPCT also has two registers named A and B, they can be accessed respectively via channels 1 and 2.

To configure the behaviour of the counter with comedi, the function comedi_set_counter_mode is used. The possible mode values are to be found in the ni_gpct_mode_bits enum constants. For instance, by default the counter is cumulative, even in buffered counting. To reinitialise it after each sampling (ie, after an edge on the gate signal), one can add the NI_GPCT_LOADING_ON_GATE_BIT to the mode. In that case, the counter will be reset to the value of the A register after each sampling.

To configure the signal to be used as the "source", one uses the comedi_set_clock_source with one constant from the ni_gpct_clock_source_bits enum. When the period of the signal is fixed and known, it should be specified as the last parameter of the method, otherwise 0 should be passed. Note that in comedi this is called "clock" because in timer and pulse generator, this signal is used as the clock.

To configure the signal to be used as the "gate", one uses the comedi_set_gate_source with one constant from the ni_gpct_gate_select enum. When the gate signal is not be used, NI_GPCT_DISABLED_GATE_SELECT should be specified. Some NI boards have two gates, but the behaviour associated with the second gate is usually unknown so it is recommended to disable it. Note that this is called "gate" because in some modes, this signal is used to block/unblock the counter.

The function comedi_reset will stop and reset a counter. After being configured, to start a counter, it should be "armed", which can be done either with the comedi_arm function (for simple counting mode), or with the start_src member of the command (for buffered counting).

One side thing to mention is the signal routing of the NI card, which is done via the PFIs (Programmable Function Inputs). NI's naming is confusing because they use the same name for the terminal (ie, physical input/output pins) and for the signal (ie, the logical information that controls/indicates a specific event). The routing allows to configure which signal goes to a PFI terminal. This is done via comedi_set_routing, with subdevice being the special DIO comedi subdevice (eg, 7 on M-series), the PFI terminal number as channel, the signal that should be routed to it encoded as source with one of the constants from the ni_pfi_routing enum. The direction of the pin must also be correctly configured (ie, whether it is used as input or output). This is done via comedi_dio_config with the same subdevice and channel, and either COMEDI_INPUT or COMEDI_OUTPUT.

4.7.10.  National Instruments RTSI trigger bus

A number of NI boards support the RTSI (Real Time System Integration) bus. It's primary use is to synchronize multiple DAQ cards. On PXI boards, the RTSI lines correspond to the PXI trigger lines 0 to 7. PCI boards use cables to connect to their RTSI ports. The RTSI bus consists of 8 digital signal lines numbered 0 to 7 that are bi-directional. Each of these signal lines can be configured as an input or output, and the signal appearing on the output of each line can be configured to one of several internal board timing signals (although on older boards RTSI line 7 can only be used for the clock signal). The ni_pcimio, ni_atmio, and ni_mio_cs drivers expose the RTSI bus as a digital I/O subdevice (subdevice number 10).

The functions comedi_dio_config and comedi_dio_get_config can be used on the RTSI subdevice to set/query the direction (input or output) of each of the RTSI lines individually.

The subdevice also supports the INSN_CONFIG_SET_CLOCK_SRC and INSN_CONFIG_GET_CLOCK_SRC configuration instructions, which can be used to configure/query what source the board uses to synchronize its master clock to. The various possibilities are defined in the comedi.h header file:

Clock SourceDescription
NI_MIO_INTERNAL_CLOCK Use the board's internal oscillator.
NI_MIO_RTSI_CLOCK Use the RTSI line 7 as the master clock. This source is only supported on pre-m-series boards. The newer m-series boards use NI_MIO_PLL_RTSI_CLOCK instead.
NI_MIO_PLL_PXI_STAR_TRIGGER_CLOCK Only available for newer m-series PXI boards. Synchronizes the board's phased-locked loop (which runs at 80MHz) to the PXI star trigger line.
NI_MIO_PLL_PXI10_CLOCK Only available for newer m-series PXI boards. Synchronizes the board's phased-locked loop (which runs at 80MHz) to the 10 MHz PXI backplane clock.
NI_MIO_PLL_RTSI_CLOCK(n) Only available for newer m-series boards. The function returns a clock source which will cause the board's phased-locked loop (which runs at 80MHz) to syncronize to the RTSI line specified in the function argument.

For all clock sources except NI_MIO_INTERNAL_CLOCK and NI_MIO_PLL_PXI10_CLOCK, you should pass the period of the clock your are feeding to the board when using INSN_CONFIG_SET_CLOCK_SRC.

Finally, the configuration instructions INSN_CONFIG_SET_ROUTING and INSN_CONFIG_GET_ROUTING can be used to select/query which internal signal will appear on a given RTSI output line. The header file comedi.h defines the following signal sources which can be routed to an RTSI line:

Signal SourceDescription
NI_RTSI_OUTPUT_ADR_START1 ADR_START1, an analog input start signal. See the NI's DAQ-STC Technical Reference Manual for more information.
NI_RTSI_OUTPUT_ADR_START2 ADR_START2, an analog input stop signal. See the NI's DAQ-STC Technical Reference Manual for more information.
NI_RTSI_OUTPUT_SCLKG SCLKG, a sample clock signal. See the NI's DAQ-STC Technical Reference Manual for more information.
NI_RTSI_OUTPUT_DACUPDN DACUPDN, a dac update signal. See the NI's DAQ-STC Technical Reference Manual for more information.
NI_RTSI_OUTPUT_DA_START1 DA_START1, an analog output start signal. See the NI's DAQ-STC Technical Reference Manual for more information.
NI_RTSI_OUTPUT_G_SRC0 G_SRC0, the source signal to general purpose counter 0. See the NI's DAQ-STC Technical Reference Manual for more information.
NI_RTSI_OUTPUT_G_GATE0 G_GATE0, the gate signal to general purpose counter 0. See the NI's DAQ-STC Technical Reference Manual for more information.
NI_RTSI_OUTPUT_RGOUT0 RGOUT0, the output signal of general purpose counter 0. See the NI's DAQ-STC Technical Reference Manual for more information.
NI_RTSI_OUTPUT_RTSI_BRD(n) RTSI_BRD0 though RTSI_BRD3 are four internal signals which can have various other signals routed to them in turn. Currently, comedi provides no way to configure the signals routed to the RTSI_BRD lines. See the NI's DAQ-STC Technical Reference Manual for more information.
NI_RTSI_OUTPUT_RTSI_OSC The RTSI clock signal. On pre-m-series boards, this signal is always routed to RTSI line 7, and cannot be routed to lines 0 through 6. On m-series boards, any RTSI line can be configured to output the clock signal.

The RTSI bus pins may be used as trigger inputs for many of the Comedi trigger functions. To use the RTSI bus pins, set the source to be TRIG_EXT and the source argument using the return values from the NI_EXT_RTSI(n) function (or similarly the NI_EXT_PFI(n) function if you want to trigger from a PFI line). The CR_EDGE and CR_INVERT flags may also be set on the trigger source argument to specify edge and falling edge/low level triggering.

An example to set up a device as a master is given below.

void comediEnableMaster(comedi_t *dev){
        comedi_insn   configCmd;
        lsampl_t      configData[2];
        int           ret;
        unsigned int  d = 0;
        static const unsigned rtsi_subdev = 10;
        static const unsigned rtsi_clock_line = 7;

        /* Route RTSI clock to line 7 (not needed on pre-m-series boards since their
           clock is always on line 7). */
        memset(&configCmd, 0, sizeof(configCmd));
        memset(&configData, 0, sizeof(configData));
        configCmd.insn = INSN_CONFIG;
        configCmd.subdev = rtsi_subdev;
        configCmd.chanspec = rtsi_clock_line;
        configCmd.n = 2;
        configCmd.data = configData;
        configCmd.data[0] = INSN_CONFIG_SET_ROUTING;
        configCmd.data[1] = NI_RTSI_OUTPUT_RTSI_OSC;
        ret = comedi_do_insn(dev, &configCmd);
        if(ret < 0){
                comedi_perror("comedi_do_insn: INSN_CONFIG");
                exit(1);
        }
        // Set clock RTSI line as output
        ret = comedi_dio_config(dev, rtsi_subdev, rtsi_clock_line, INSN_CONFIG_DIO_OUTPUT);
        if(ret < 0){
                comedi_perror("comedi_dio_config");
                exit(1);
        }

        /* Set routing of the 3 main AI RTSI signals and their direction to output.
           We're reusing the already initialized configCmd instruction here since
           it's mostly the same. */
        configCmd.chanspec = 0;
        configCmd.data[1] =  NI_RTSI_OUTPUT_ADR_START1;
        ret = comedi_do_insn(dev, &configCmd);
        if(ret < 0){
                comedi_perror("comedi_do_insn: INSN_CONFIG");
                exit(1);
        }
        ret = comedi_dio_config(dev, rtsi_subdev, 0, INSN_CONFIG_DIO_OUTPUT);
        if(ret < 0){
                comedi_perror("comedi_dio_config");
                exit(1);
        }

        configCmd.chanspec = 1;
        configCmd.data[1] =  NI_RTSI_OUTPUT_ADR_START2;
        ret = comedi_do_insn(dev, &configCmd);
        if(ret < 0){
                comedi_perror("comedi_do_insn: INSN_CONFIG");
                exit(1);
        }
        ret = comedi_dio_config(dev, rtsi_subdev, 1, INSN_CONFIG_DIO_OUTPUT);
        if(ret < 0){
                comedi_perror("comedi_dio_config");
                exit(1);
        }

        configCmd.chanspec = 2;
        configCmd.data[1] =  NI_RTSI_OUTPUT_SCLKG;
        ret = comedi_do_insn(dev, &configCmd);
        if(ret < 0){
                comedi_perror("comedi_do_insn: INSN_CONFIG");
                exit(1);
        }
        ret = comedi_dio_config(dev, rtsi_subdev, 2, INSN_CONFIG_DIO_OUTPUT);
        if(ret < 0){
                comedi_perror("comedi_dio_config");
                exit(1);
        }
}

An example to slave a m-series device from this master follows. A pre-m-series device would need to use NI_MIO_RTSI_CLOCK for the clock source instead. In your code, you may also wish to configure the master device to use the external clock source instead of using its internal clock directly (for best syncronization).

void comediEnableSlave(comedi_t *dev){
        comedi_insn   configCmd;
        lsampl_t      configData[3];
        int           ret;
        unsigned int  d = 0;;
        static const unsigned rtsi_subdev = 10;
        static const unsigned rtsi_clock_line = 7;

        memset(&configCmd, 0, sizeof(configCmd));
        memset(&configData, 0, sizeof(configData));
        configCmd.insn = INSN_CONFIG;
        configCmd.subdev = rtsi_subdev;
        configCmd.chanspec = 0;
        configCmd.n = 3;
        configCmd.data = configData;
        configCmd.data[0] = INSN_CONFIG_SET_CLOCK_SRC;
        configCmd.data[1] = NI_MIO_PLL_RTSI_CLOCK(rtsi_clock_line);
        configCmd.data[2] = 100;        /* need to give it correct external clock period */
        ret = comedi_do_insn(dev, &configCmd);
        if(ret < 0){
                comedi_perror("comedi_do_insn: INSN_CONFIG");
                exit(1);
        }
        /* configure RTSI clock line as input */
        ret = comedi_dio_config(dev, rtsi_subdev, rtsi_clock_line, INSN_CONFIG_DIO_INPUT);
        if(ret < 0){
                comedi_perror("comedi_dio_config");
                exit(1);
        }
        /* Configure RTSI lines we are using for AI signals as inputs. */
        ret = comedi_dio_config(dev, rtsi_subdev, 0, INSN_CONFIG_DIO_INPUT);
        if(ret < 0){
                comedi_perror("comedi_dio_config");
                exit(1);
        }
        ret = comedi_dio_config(dev, rtsi_subdev, 1, INSN_CONFIG_DIO_INPUT);
        if(ret < 0){
                comedi_perror("comedi_dio_config");
                exit(1);
        }
        ret = comedi_dio_config(dev, rtsi_subdev, 2, INSN_CONFIG_DIO_INPUT);
        if(ret < 0){
                comedi_perror("comedi_dio_config");
                exit(1);
        }
}

int comediSlaveStart(comedi_t *dev){
        comedi_cmd     cmd;
        unsigned int   nChannels = 8;
        double         sampleRate = 50000;
        unsigned int   chanList[8];
        int            i;

        // Setup chan list
        for(i = 0; i < nChannels; i++){
                chanList[i] = CR_PACK(i, 0, AREF_GROUND);
        }
        // Set up command
        memset(&cmd, 0, sizeof(cmd));
        ret = comedi_get_cmd_generic_timed(dev, subdevice, &cmd,
                (int)(1e9/(nChannels * sampleRate)));
        if(ret<0){
                printf("comedi_get_cmd_generic_timed failed\n");
                return ret;
        }
        cmd.chanlist        = chanList;
        cmd.chanlist_len    = nChannels;
        cmd.scan_end_arg    = nChannels;
        cmd.start_src        = TRIG_EXT;
        cmd.start_arg        = CR_EDGE | NI_EXT_RTSI(0);
        cmd.convert_src    = TRIG_EXT;
        cmd.convert_arg    = CR_INVERT | CR_EDGE | NI_EXT_RTSI(2);
        cmd.stop_src        = TRIG_NONE;

        ret = comedi_command(dev0, &cmd0);
        if(ret<0){
                printf("comedi_command failed\n");
                return ret;
        }
        return 0;
}
comedilib-0.11.0/doc/doc_html/writingprograms.html0000644000000000000000000001453013105043774017100 000000000000003.  Writing Comedi programs

3.  Writing Comedi programs

This section describes how Comedi can be used in an application, to communicate data with a set of Comedi devices. Section 4 gives more details about the various acquisition functions with which the application programmer can perform data acquisition in Comedi.

Also don't forget to take a good look at the demo directory of the Comedilib source code. It contains lots of examples for the basic functionalities of Comedi.

3.1.  Your first Comedi program

This example requires a card that has analog or digital input. This progam opens the device, gets the data, and prints it out:

	/*
 * Tutorial example #1
 * Part of Comedilib
 *
 * Copyright (c) 1999,2000 David A. Schleef <ds@schleef.org>
 *
 * This file may be freely modified, distributed, and combined with
 * other software, as long as proper attribution is given in the
 * source code.
 */

#include <stdio.h>	/* for printf() */
#include <comedilib.h>

int subdev = 0;		/* change this to your input subdevice */
int chan = 0;		/* change this to your channel */
int range = 0;		/* more on this later */
int aref = AREF_GROUND;	/* more on this later */

int main(int argc,char *argv[])
{
	comedi_t *it;
	int chan = 0;
	lsampl_t data;
	int retval;

	it = comedi_open("/dev/comedi0");
	if(it == NULL) {
		comedi_perror("comedi_open");
		return 1;
	}

	retval = comedi_data_read(it, subdev, chan, range, aref, &data);
	if(retval < 0) {
		comedi_perror("comedi_data_read");
		return 1;
	}

	printf("%d\n", data);

	return 0;
}


      

The source code file for the above program can be found in Comedilib, at demo/tut1.c. You can compile the program using

      cc tut1.c -lcomedi -lm -o tut1
    

The comedi_open call can only be successful if the comedi0 device file is configured with a valid Comedi driver. Section 2.1 explains how this driver is linked to the “device fileâ€.

The range variable tells Comedi which gain to use when measuring an analog voltage. Since we don't know (yet) which numbers are valid, or what each means, we'll use 0, because it won't cause errors. Likewise with aref, which determines the analog reference used.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-data-read-hint.html0000644000000000000000000000706413105043775021372 00000000000000comedi_data_read_hint

Name

comedi_data_read_hint — tell driver which channel/range/aref you are going to read from next

Synopsis

#include <comedilib.h>
int comedi_data_read_hint(comedi_t * device,
 unsigned int subdevice,
 unsigned int channel,
 unsigned int range,
 unsigned int aref);
 

Description

Used to prepare an analog input for a subsequent call to comedi_data_read. It is not necessary to use this function, but it can be useful for eliminating inaccuracies caused by insufficient settling times when switching the channel or gain on an analog input. This function sets an analog input to the channel, range, and aref specified but does not perform an actual analog to digital conversion.

Alternatively, one can simply use comedi_data_read_delayed, which sets up the input, pauses to allow settling, then performs a conversion.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-timed-1chan.html0000644000000000000000000000603013105043776020673 00000000000000comedi_timed_1chan

Name

comedi_timed_1chan — streaming input (deprecated)

Synopsis

#include <comedilib.h>
int comedi_timed_1chan(comedi_t * device,
 unsigned int subdevice,
 unsigned int channel,
 unsigned int range,
 unsigned int aref,
 double frequency,
 unsigned int num_samples,
 double * data);
 

Status

deprecated

Description

Not documented.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-from-phys.html0000644000000000000000000000664413105043775020537 00000000000000comedi_from_phys

Name

comedi_from_phys — convert physical units to sample

Synopsis

#include <comedilib.h>
lsampl_t comedi_from_phys(double data,
 comedi_range * range,
 lsampl_t maxdata);
 

Description

Converts parameter data given in physical units (double) into sample values (lsampl_t, between 0 and maxdata). The parameter range represents the conversion information to use, and the parameter maxdata represents the maximum possible data value for the channel that the data will be written to. The mapping between physical units and raw data is linear and assumes that the converter has ideal characteristics.

Conversion is not affected by out-of-range behavior. Out-of-range data parameters are silently truncated to the range 0 to maxdata.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-get-default-calibration-path.html0000644000000000000000000000660313105043776024227 00000000000000comedi_get_default_calibration_path

Name

comedi_get_default_calibration_path — get default calibration file path

Synopsis

#include <comedilib.h>
char * comedi_get_default_calibration_path(comedi_t * device);
 

Status

alpha

Description

This function returns a pointer to a string containing a default calibration file path appropriate for the Comedi device specified by device. Memory for the string is allocated by the function, and should be freed with the C library function free when the string is no longer needed.

Return value

A string which contains a file path useable by comedi_parse_calibration_file. On error, NULL is returned.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-disarm-channel.html0000644000000000000000000000655313105043776021500 00000000000000comedi_disarm_channel

Name

comedi_disarm_channel — disarm a subdevice channel

Synopsis

#include <comedilib.h>
int comedi_disarm_channel(comedi_t * device,
 unsigned int subdevice,
 unsigned int channel);
 

Status

alpha

Description

This function disarms a specified channel of a subdevice. It may, for example, stop a counter counting. This function is only useable on subdevices that provide support for the INSN_CONFIG_DISARM configuration instruction. Some subdevices treat this as an instruction to disarm the whole subdevice and ignore the specified channel. For such subdevices, comedi_disarm is normally called instead.

Return value

0 on success, -1 on error.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-lock.html0000644000000000000000000000653013105043775017535 00000000000000comedi_lock

Name

comedi_lock — subdevice reservation

Synopsis

#include <comedilib.h>
int comedi_lock(comedi_t * device,
 unsigned int subdevice);
 

Description

The function comedi_lock reserves a subdevice for use by the current process. While the lock is held, no other process is allowed to read, write, or configure that subdevice, although other processes can read information about the subdevice. The lock is released by comedi_unlock, or when comedi_close is called on device.

Return value

If successful, 0 is returned. If there is an error, -1 is returned.

comedilib-0.11.0/doc/doc_html/instructionsconfiguration.html0000644000000000000000000001637113105043774021203 000000000000004.3.  Instructions for configuration

4.3.  Instructions for configuration

Section 4.2 explains how instructions are used to do acquisition on channels. This section explains how they are used to configure a subdevice. There are various sorts of configurations, and the specific information for each different configuration possibility is to be specified via the data buffer of the instruction data structure. (So, the pointer to a lsampl_t is misused as a pointer to an array with board-specific information.)

Using INSN_CONFIG as the insn member in an instruction data structure indicates that the instruction will not perform acquisition on a channel, but will configure that channel. The chanspec member in the comedi_insn data structure, contains the channel to be configured. The zeroth element of the data array is always an id that specifies what type of configuration instruction is being performed. The meaning of rest of the elements in the data array depend on the configuration instruction id. Some of the possible ids are summarised in the table below, along with the meanings of the data array elements for each type of configuration instruction.

data[0]Descriptionn (number of elements in data array)Meanings of data[1], ..., data[n-1]
INSN_CONFIG_DIO_INPUT Configure a DIO line as input. It is easier to use comedi_dio_config than to use this configuration instruction directly. 1 n/a
INSN_CONFIG_DIO_OUTPUT Configure a DIO line as output. It is easier to use comedi_dio_config than to use this configuration instruction directly. 1 n/a
INSN_CONFIG_ALT_SOURCE Select an alternate input source. This instruction is used by calibration programs to configure analog input channels which can be redirected to read internal calibration references. You need to set the CR_ALT_SOURCE flag in the chanspec when reading to actually read from the configured alternate input source. If you are using comedi_data_read, then the channel parameter can be bitwise or'd with the CR_ALT_SOURCE flag. 2 data[1]: alternate input source.
INSN_CONFIG_BLOCK_SIZE Specify block size for asynchonous command data. When performing streaming input, many boards accumulate samples in internal fifos and transfer them to the host computer in chunks. Some drivers let you suggest a size in bytes for how big a the chunks should be. This lets you tune how often the host computer is interrupted with a new chunk of data. 2 data[1]: The desired block size in bytes. The actual configured block size is writen back to data[1] after the instruction completes. This instruction acts purely as a query if the block size is set to zero.
INSN_CONFIG_DIO_QUERY Queries the configuration of a DIO line to see if it is an input or output. It is probably easier to use the comedilib function comedi_dio_get_config than to use this instruction directly. 2 data[1]: The instruction sets this element to either COMEDI_INPUT or COMEDI_OUTPUT.

See the comedilib demo program demo/choose_clock.c for an example of using a configuration instruction.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-command-test.html0000644000000000000000000001220113105043775021170 00000000000000comedi_command_test

Name

comedi_command_test — test streaming input/output configuration

Synopsis

#include <comedilib.h>
int comedi_command_test(comedi_t * device,
 comedi_cmd * command);
 

Description

The function comedi_command_test tests the command structure pointed to by the parameter command and returns an integer describing the testing stages that were successfully passed. In addition, if elements of the comedi_cmd structure are invalid, they may be modified. Source elements are modified to remove invalid source triggers. Argument elements are adjusted or rounded to the nearest valid value.

Return value

The meanings of the return value are as follows:

  • 0 indicates a valid command.

  • 1 indicates that one of the …_src members of the command contained an unsupported trigger. The bits corresponding to the unsupported triggers are zeroed.

  • 2 indicates that the particular combination of …_src settings is not supported by the driver, or that one of the …_src members has the bit corresponding to multiple trigger sources set at the same time.

  • 3 indicates that one of the …_arg members of the command is set outside the range of allowable values. For instance, an argument for a TRIG_TIMER source which exceeds the board's maximum speed. The invalid …_arg members will be adjusted to valid values.

  • 4 indicates that one of the …_arg members required adjustment. For instance, the argument of a TRIG_TIMER source may have been rounded to the nearest timing period supported by the board.

  • 5 indicates that some aspect of the command's chanlist is unsupported by the board. For example, some analog input boards require that all channels in the chanlist use the same input range.

On failure, -1 is returned.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-trigger.html0000644000000000000000000000557413105043776020260 00000000000000comedi_trigger

Name

comedi_trigger — perform streaming input/output (deprecated)

Synopsis

#include <comedilib.h>
int comedi_trigger(comedi_t * device,
 comedi_trig * trig);
 

Status

deprecated

Description

The function comedi_trigger instructs Comedi to perform the command specified by the trigger structure pointed to by trig. The return value depends on the particular trigger being issued. If there is an error, -1 is returned.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-get-driver-name.html0000644000000000000000000000544613105043775021600 00000000000000comedi_get_driver_name

Name

comedi_get_driver_name — Comedi driver name

Synopsis

#include <comedilib.h>
char * comedi_get_driver_name(comedi_t * device);
 

Description

The function comedi_get_driver_name returns a pointer to a string containing the name of the driver being used by comedi for the comedi device represented by device. This pointer is valid until the device is closed. This function returns NULL if there is an error.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-get-subdevice-type.html0000644000000000000000000000641113105043775022310 00000000000000comedi_get_subdevice_type

Name

comedi_get_subdevice_type — type of subdevice

Synopsis

#include <comedilib.h>
int comedi_get_subdevice_type(comedi_t * device,
 unsigned int subdevice);
 

Description

The function comedi_get_subdevice_type returns an integer describing the type of subdevice that belongs to the comedi device device and has the subdevice index subdevice. The comedi_subdevice_type enum specifies the possible values for the subdevice type.

Return value

The function returns the subdevice type, or -1 if there is an error.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-dio-bitfield.html0000644000000000000000000000621713105043776021143 00000000000000comedi_dio_bitfield

Name

comedi_dio_bitfield — read/write multiple digital channels

Synopsis

#include <comedilib.h>
int comedi_dio_bitfield(comedi_t * device,
 unsigned int subdevice,
 unsigned int write_mask,
 unsigned int * bits);
 

Status

deprecated

Description

This function is deprecated. Use comedi_dio_bitfield2 instead. It is equivalent to using comedi_dio_bitfield2 with base_channel set to 0.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-get-subdevice-flags.html0000644000000000000000000002314113105043775022422 00000000000000comedi_get_subdevice_flags

Name

comedi_get_subdevice_flags — properties of subdevice

Synopsis

#include <comedilib.h>
int comedi_get_subdevice_flags(comedi_t * device,
 unsigned int subdevice);
 

Description

The function comedi_get_subdevice_flags returns a bitfield describing the capabilities of the specified subdevice subdevice of the Comedi device device. If there is an error, -1 is returned, and the Comedilib error value is set.

Subdevice FlagValue (hex)Description
SDF_BUSY0x00000001The subdevice is busy performing an asynchronous command. A subdevice being “busy†is slightly different from the “running†state flagged by SDF_RUNNING. A “running†subdevice is always “busyâ€, but a “busy†subdevice is not necessarily “runningâ€. For example, suppose an analog input command has been completed by the hardware, but there are still samples in Comedi's buffer waiting to be read out. In this case, the subdevice is not “runningâ€, but is still “busy†until all the samples are read out or comedi_cancel is called.
SDF_BUSY_OWNER0x00000002The subdevice is “busyâ€, and the command it is running was started by the current process.
SDF_LOCKED0x00000004The subdevice has been locked by comedi_lock.
SDF_LOCK_OWNER0x00000008The subdevice is locked, and was locked by the current process.
SDF_MAXDATA0x00000010The maximum data value for the subdevice depends on the channel.
SDF_FLAGS0x00000020The subdevice flags depend on the channel (unfinished/broken support in library).
SDF_RANGETYPE0x00000040The range type depends on the channel.
SDF_CMD0x00001000The subdevice supports asynchronous commands.
SDF_SOFT_CALIBRATED0x00002000The subdevice relies on the host to do calibration in software. Software calibration coefficients are determined by the comedi_soft_calibrate utility. See the description of the comedi_get_softcal_converter function for more information.
SDF_READABLE0x00010000The subdevice can be read (e.g. analog input).
SDF_WRITABLE0x00020000The subdevice can be written to (e.g. analog output).
SDF_INTERNAL0x00040000The subdevice does not have externally visible lines.
SDF_GROUND0x00100000The subdevice supports analog reference AREF_GROUND.
SDF_COMMON0x00200000The subdevice supports analog reference AREF_COMMON.
SDF_DIFF0x00400000The subdevice supports analog reference AREF_DIFF.
SDF_OTHER0x00800000The subdevice supports analog reference AREF_OTHER
SDF_DITHER0x01000000The subdevice supports dithering (via the CR_ALT_FILTER chanspec flag).
SDF_DEGLITCH0x02000000The subdevice supports deglitching (via the CR_ALT_FILTER chanspec flag).
SDF_RUNNING0x08000000An asynchronous command is running. You can use this flag to poll for the completion of an output command.
SDF_LSAMPL0x10000000The subdevice uses the 32-bit lsampl_t type instead of the 16-bit sampl_t for asynchronous command data.
SDF_PACKED0x20000000The subdevice uses bitfield samples for asynchronous command data, one bit per channel (otherwise it uses one sampl_t or lsampl_t per channel). Commonly used for digital subdevices.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-get-range.html0000644000000000000000000000647213105043775020463 00000000000000comedi_get_range

Name

comedi_get_range — range information of channel

Synopsis

#include <comedilib.h>
comedi_range * comedi_get_range(comedi_t * device,
 unsigned int subdevice,
 unsigned int channel,
 unsigned int range);
 

Description

The function comedi_get_range returns a pointer to a comedi_range structure that contains information on the range specified by the subdevice, channel, and range parameters. The pointer is valid until the Comedi device device is closed. If there is an error, NULL is returned.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-get-version-code.html0000644000000000000000000000627513105043775021765 00000000000000comedi_get_version_code

Name

comedi_get_version_code — Comedi version code

Synopsis

#include <comedilib.h>
int comedi_get_version_code(comedi_t * device);
 

Description

Returns the Comedi kernel module version code. A valid Comedi device referenced by the parameter device is necessary to communicate with the kernel module. On error, -1 is returned.

The version code is encoded as a bitfield of three 8-bit numbers. For example, 0x00073d is the version code for version 0.7.61.

This function is of limited usefulness. A typical mis-application of this function is to use it to determine if a certain feature is supported. If the application needs to know of the existence of a particular feature, an existence test function should be written and put in the Comedilib source.

comedilib-0.11.0/doc/doc_html/lowleveldrivers.html0000644000000000000000000064131213105043777017101 000000000000005.6.  Kernel drivers

5.6.  Kernel drivers

5.6.1. 8255 -- generic 8255 support
5.6.2. acl7225b -- ADLINK NuDAQ ACL-7225b & compatibles
5.6.3. adl_pci6208 -- ADLINK PCI-6216V
5.6.4. adl_pci7230 -- Driver for the ADLINK PCI-7230 32 ch. isolated digital io board
5.6.5. adl_pci7250 -- Driver for the ADLINK PCI-7250 relay output & digital input card
5.6.6. adl_pci7296 -- Driver for the ADLINK PCI-7296 96 ch. digital io board
5.6.7. adl_pci7432 -- Driver for the ADLINK PCI-7432 64 ch. isolated digital io board
5.6.8. adl_pci8164 -- Driver for the ADLINK PCI-8164 4 Axes Motion Control board
5.6.9. adl_pci9111 -- ADLINK PCI-9111HR
5.6.10. adl_pci9112 -- ADLINK PCI-9112
5.6.11. adl_pci9118 -- ADLINK PCI-9118DG, PCI-9118HG, PCI-9118HR
5.6.12. adq12b -- driver for MicroAxial ADQ12-B data acquisition and control card
5.6.13. adv_pci1710 -- Advantech PCI-1710, PCI-1710HG, PCI-1711, PCI-1713, Advantech PCI-1720, PCI-1731
5.6.14. adv_pci1723 -- Advantech PCI-1723
5.6.15. adv_pci_dio -- Advantech PCI-1730, PCI-1733, PCI-1734, PCI-1735U, PCI-1736UP, PCI-1750, PCI-1751, PCI-1752, PCI-1753/E, PCI-1754, PCI-1756, PCI-1762
5.6.16. aio_aio12_8 -- Acces I/O Products PC-104 AIO12-8 Analog I/O Board
5.6.17. aio_iiro_16 -- Acces I/O Products PC-104 IIRO16 Relay And Isolated Input Board
5.6.18. amplc_dio200 -- Amplicon 200 Series Digital I/O
5.6.19. amplc_pc236 -- Amplicon PC36AT, PCI236
5.6.20. amplc_pc263 -- Amplicon PC263, PCI263
5.6.21. amplc_pci224 -- Amplicon PCI224, PCI234
5.6.22. amplc_pci230 -- Amplicon PCI230, PCI260 Multifunction I/O boards
5.6.23. c6xdigio -- Mechatronic Systems Inc. C6x_DIGIO DSP daughter card
5.6.24. cb_das16_cs -- Computer Boards PC-CARD DAS16/16
5.6.25. cb_pcidac -- Measurement Computing PCI Migration series boards
5.6.26. cb_pcidas -- MeasurementComputing PCI-DAS series with the AMCC S5933 PCI controller
5.6.27. cb_pcidas64 -- MeasurementComputing PCI-DAS64xx, 60XX, and 4020 series with the PLX 9080 PCI controller
5.6.28. cb_pcidda -- MeasurementComputing PCI-DDA series
5.6.29. cb_pcidio -- ComputerBoards' DIO boards with PCI interface
5.6.30. cb_pcimdas -- Measurement Computing PCI Migration series boards
5.6.31. cb_pcimdda -- Measurement Computing PCIM-DDA06-16
5.6.32. comedi_bond -- A driver to 'bond' (merge) multiple subdevices from multiple devices together as one.
5.6.33. comedi_parport -- Standard PC parallel port
5.6.34. comedi_rt_timer -- Command emulator using real-time tasks
5.6.35. comedi_test -- generates fake waveforms
5.6.36. contec_fit -- Contec F&eIT series modules
5.6.37. contec_pci_dio -- Contec PIO1616L digital I/O board
5.6.38. daqboard2000 -- IOTech DAQBoard/2000
5.6.39. das08 -- DAS-08 compatible boards
5.6.40. das08_cs -- DAS-08 PCMCIA boards
5.6.41. das16 -- DAS16 compatible boards
5.6.42. das16m1 -- CIO-DAS16/M1
5.6.43. das1800 -- Keithley Metrabyte DAS1800 (& compatibles)
5.6.44. das6402 -- Keithley Metrabyte DAS6402 (& compatibles)
5.6.45. das800 -- Keithley Metrabyte DAS800 (& compatibles)
5.6.46. dmm32at -- Diamond Systems mm32at driver.
5.6.47. dt2801 -- Data Translation DT2801 series and DT01-EZ
5.6.48. dt2811 -- Data Translation DT2811
5.6.49. dt2814 -- Data Translation DT2814
5.6.50. dt2815 -- Data Translation DT2815
5.6.51. dt2817 -- Data Translation DT2817
5.6.52. dt282x -- Data Translation DT2821 series (including DT-EZ)
5.6.53. dt3000 -- Data Translation DT3000 series
5.6.54. dt9812 -- Data Translation DT9812 USB module
5.6.55. fl512 -- unknown
5.6.56. gsc_hpdi -- General Standards Corporation High Speed Parallel Digital Interface rs485 boards
5.6.57. icp_multi -- Inova ICP_MULTI
5.6.58. ii_pci20kc -- Intelligent Instruments PCI-20001C carrier board
5.6.59. jr3_pci -- JR3/PCI force sensor board
5.6.60. ke_counter -- Driver for Kolter Electronic Counter Card
5.6.61. me4000 -- Meilhaus ME-4000 series boards
5.6.62. me_daq -- Meilhaus PCI data acquisition cards
5.6.63. mpc624 -- Micro/sys MPC-624 PC/104 board
5.6.64. mpc8260cpm -- MPC8260 CPM module generic digital I/O lines
5.6.65. multiq3 -- Quanser Consulting MultiQ-3
5.6.66. ni_6527 -- National Instruments 6527
5.6.67. ni_65xx -- National Instruments 65xx static dio boards
5.6.68. ni_660x -- National Instruments 660x counter/timer boards
5.6.69. ni_670x -- National Instruments 670x
5.6.70. ni_at_a2150 -- National Instruments AT-A2150
5.6.71. ni_at_ao -- National Instruments AT-AO-6/10
5.6.72. ni_atmio -- National Instruments AT-MIO-E series
5.6.73. ni_atmio16d -- National Instruments AT-MIO-16D
5.6.74. ni_daq_700 -- National Instruments PCMCIA DAQCard-700 DIO only
5.6.75. ni_daq_dio24 -- National Instruments PCMCIA DAQ-Card DIO-24
5.6.76. ni_labpc -- National Instruments Lab-PC (& compatibles)
5.6.77. ni_labpc_cs -- National Instruments Lab-PC (& compatibles)
5.6.78. ni_mio_cs -- National Instruments DAQCard E series
5.6.79. ni_pcidio -- National Instruments PCI-DIO32HS, PCI-DIO96, PCI-6533, PCI-6503
5.6.80. ni_pcimio -- National Instruments PCI-MIO-E series and M series (all boards)
5.6.81. ni_tio -- National Instruments general purpose counters
5.6.82. ni_tiocmd -- National Instruments general purpose counters command support
5.6.83. pcl711 -- Advantech PCL-711 and 711b, ADLINK ACL-8112
5.6.84. pcl724 -- Advantech PCL-724, PCL-722, PCL-731 ADLINK ACL-7122, ACL-7124, PET-48DIO
5.6.85. pcl725 -- Advantech PCL-725 (& compatibles)
5.6.86. pcl726 -- Advantech PCL-726 & compatibles
5.6.87. pcl730 -- Advantech PCL-730 (& compatibles)
5.6.88. pcl812 -- Advantech PCL-812/PG, PCL-813/B, ADLINK ACL-8112DG/HG/PG, ACL-8113, ACL-8216, ICP DAS A-821PGH/PGL/PGL-NDA, A-822PGH/PGL, A-823PGH/PGL, A-826PG, ICP DAS ISO-813
5.6.89. pcl816 -- Advantech PCL-816 cards, PCL-814
5.6.90. pcl818 -- Advantech PCL-818 cards, PCL-718
5.6.91. pcm3724 -- Advantech PCM-3724
5.6.92. pcm3730 -- PCM3730
5.6.93. pcmad -- Winsystems PCM-A/D12, PCM-A/D16
5.6.94. pcmda12 -- A driver for the Winsystems PCM-D/A-12
5.6.95. pcmmio -- A driver for the PCM-MIO multifunction board
5.6.96. pcmuio -- A driver for the PCM-UIO48A and PCM-UIO96A boards from Winsystems.
5.6.97. poc -- Generic driver for very simple devices
5.6.98. quatech_daqp_cs -- Quatech DAQP PCMCIA data capture cards
5.6.99. rtd520 -- Real Time Devices PCI4520/DM7520
5.6.100. rti800 -- Analog Devices RTI-800/815
5.6.101. rti802 -- Analog Devices RTI-802
5.6.102. s526 -- Sensoray 526 driver
5.6.103. s626 -- Sensoray 626 driver
5.6.104. serial2002 -- Driver for serial connected hardware
5.6.105. skel -- Skeleton driver, an example for driver writers
5.6.106. ssv_dnp -- SSV Embedded Systems DIL/Net-PC
5.6.107. unioxx5 -- Driver for Fastwel UNIOxx-5 (analog and digital i/o) boards.
5.6.108. usbdux -- Driver for USB-DUX-D of INCITE Technology Limited
5.6.109. usbduxfast -- Driver for USB-DUX-FAST of INCITE Technology Limited
5.6.110. usbduxsigma -- Driver for USB-DUX-SIGMA of INCITE Technology Limited

5.6.1.  8255 -- generic 8255 support

Author: ds

Status: works

ManufacturerDeviceName
standard 8255 8255

The classic in digital I/O.  The 8255 appears in Comedi as a single
digital I/O subdevice with 24 channels.  The channel 0 corresponds
to the 8255's port A, bit 0; channel 23 corresponds to port C, bit
7.  Direction configuration is done in blocks, with channels 0-7,
8-15, 16-19, and 20-23 making up the 4 blocks.  The only 8255 mode
supported is mode 0.

You should enable compilation this driver if you plan to use a board
that has an 8255 chip.  For multifunction boards, the main driver will
configure the 8255 subdevice automatically.

This driver also works independently with ISA and PCI cards that
directly map the 8255 registers to I/O ports, including cards with
multiple 8255 chips.  To configure the driver for such a card, the
option list should be a list of the I/O port bases for each of the
8255 chips.  For example,

  comedi_config /dev/comedi0 8255 0x200,0x204,0x208,0x20c

Note that most PCI 8255 boards do NOT work with this driver, and
need a separate driver as a wrapper.  For those that do work, the
I/O port base address can be found in the output of 'lspci -v'.




  

5.6.2.  acl7225b -- ADLINK NuDAQ ACL-7225b & compatibles

Author: José Luis Sánchez (jsanchezv@teleline.es)

Status: testing

ManufacturerDeviceName
ADLINK ACL-7225b acl7225b
ICP P16R16DIO p16r16dio





  

5.6.3.  adl_pci6208 -- ADLINK PCI-6216V

Author: nsyeow <nsyeow@pd.jaring.my>

Status: untested

ManufacturerDeviceName
ADLINK PCI-6216V adl_pci6208

Configuration Options:
  none

The driver should work for PCI-6208V, PCI-6208A and PCI-6216V, but all
devices will be treated as a PCI-6216V.

For PCI-6208V and PCI-6208A, only AO channels 0 to 7 are connected and
AO channels 8 to 15 will behave as "phantom" outputs.

The current output ranges for PCI-6208A are not supported.  Only Comedi
sample values 0x8000 to 0xffff should be written to the AO channels on a
PCI-6208A.  Its voltage to current daughter board (EXP-8A) only supports
an input range of 0 to 10 volts and negative voltages may damage the
board.  Comedi sample values 0x0000 to 0x7fff would produce negative
voltages from -10 to 0 volts.





  

5.6.4.  adl_pci7230 -- Driver for the ADLINK PCI-7230 32 ch. isolated digital io board

Author: David Fernandez <dfcastelao@gmail.com>

Status: experimental

ManufacturerDeviceName
ADLINK PCI-7230 adl_pci7230

Configuration Options:
  [0] - PCI bus of device (optional)
  [1] - PCI slot of device (optional)
  If bus/slot is not specified, the first supported
  PCI device found will be used.




  

5.6.5.  adl_pci7250 -- Driver for the ADLINK PCI-7250 relay output & digital input card

Author: Ian Abbott <abbotti@mev.co.uk>

Status: works

ManufacturerDeviceName
ADLINK LPCI-7250 LPCIe-7250 adl_pci7250

The driver assumes that 3 PCI-7251 modules are fitted to the PCI-7250,
giving 32 channels of relay outputs and 32 channels of isolated digital
inputs.  That is also the case for the LPCI-7250 and LPCIe-7250 cards
although they do not physically support the PCI-7251 modules.

Not fitting the PCI-7251 modules shouldn't do any harm, but the extra
inputs and relay outputs won't work!

Configuration Options:
  [0] - PCI bus of device (optional)
  [1] - PCI slot of device (optional)
  If bus/slot is not specified, the first supported
  PCI device found will be used.




  

5.6.6.  adl_pci7296 -- Driver for the ADLINK PCI-7296 96 ch. digital io board

Author: Jon Grierson <jd@renko.co.uk>

Status: testing

ManufacturerDeviceName
ADLINK PCI-7296 adl_pci7296

Configuration Options:
  [0] - PCI bus of device (optional)
  [1] - PCI slot of device (optional)
  If bus/slot is not specified, the first supported
  PCI device found will be used.




  

5.6.7.  adl_pci7432 -- Driver for the ADLINK PCI-7432 64 ch. isolated digital io board

Author: Michel Lachaine <mike@mikelachaine.ca>

Status: experimental

ManufacturerDeviceName
ADLINK PCI-7432 adl_pci7432

Configuration Options:
  [0] - PCI bus of device (optional)
  [1] - PCI slot of device (optional)
  If bus/slot is not specified, the first supported
  PCI device found will be used.




  

5.6.8.  adl_pci8164 -- Driver for the ADLINK PCI-8164 4 Axes Motion Control board

Author: Michel Lachaine <mike@mikelachaine.ca>

Status: experimental

ManufacturerDeviceName
ADLINK PCI-8164 adl_pci8164

Configuration Options:
  [0] - PCI bus of device (optional)
  [1] - PCI slot of device (optional)
  If bus/slot is not specified, the first supported
  PCI device found will be used.




  

5.6.9.  adl_pci9111 -- ADLINK PCI-9111HR

Author: Emmanuel Pacaud <emmanuel.pacaud@univ-poitiers.fr>

Status: experimental

ManufacturerDeviceName
ADLINK PCI-9111HR adl_pci9111


  - ai_insn read
  - ao_insn read/write
  - di_insn read
  - do_insn read/write
  - ai_do_cmd mode with the following sources:

    - start_src 		TRIG_NOW
    - scan_begin_src 		TRIG_FOLLOW	TRIG_TIMER	TRIG_EXT
    - convert_src				TRIG_TIMER	TRIG_EXT
    - scan_end_src		TRIG_COUNT
    - stop_src			TRIG_COUNT	TRIG_NONE

    The scanned channels must be consecutive and start from 0. They must
    all have the same range and aref.

Configuration options:

    [0] - PCI bus number (optional)
    [1] - PCI slot number (optional)

    If bus/slot is not specified, the first available PCI
    device will be used.




  

5.6.10.  adl_pci9112 -- ADLINK PCI-9112

Author: Pascal Berthou <berthou@laas.fr> Emmanuel Pacaud <emmanuel.pacaud@univ-poitiers.fr>

Status: experimental

ManufacturerDeviceName
ADLINK PCI-9112 adl_pci9112



  - ai_insn read
  - ao_insn read/write
  - di_insn read
  - do_insn read/write

  Following command mode are not tested
  - ai_do_cmd mode with the following sources:

    - start_src 		TRIG_NOW
    - scan_begin_src 		TRIG_FOLLOW	TRIG_TIMER	TRIG_EXT
    - convert_src				TRIG_TIMER	TRIG_EXT
    - scan_end_src		TRIG_COUNT
    - stop_src			TRIG_COUNT	TRIG_NONE

    The scanned channels must be consecutive and start from 0. They must
    all have the same range and aref.

Configuration options:

    [0] - PCI bus number (optional)
    [1] - PCI slot number (optional)

    If bus/slot is not specified, the first available PCI
    device will be used.




  

5.6.11.  adl_pci9118 -- ADLINK PCI-9118DG, PCI-9118HG, PCI-9118HR

Author: Michal Dobes <dobes@tesnet.cz>

Status: works

ManufacturerDeviceName
ADLINK PCI-9118DG pci9118dg
ADLINK PCI-9118HG pci9118hg
ADLINK PCI-9118HR pci9118hr


This driver supports AI, AO, DI and DO subdevices.
AI subdevice supports cmd and insn interface,
other subdevices support only insn interface.
For AI:
- If cmd->scan_begin_src=TRIG_EXT then trigger input is TGIN (pin 46).
- If cmd->convert_src=TRIG_EXT then trigger input is EXTTRG (pin 44).
- If cmd->start_src/stop_src=TRIG_EXT then trigger input is TGIN (pin 46).
- It is not neccessary to have cmd.scan_end_arg=cmd.chanlist_len but
  cmd.scan_end_arg modulo cmd.chanlist_len must by 0.
- If return value of cmdtest is 5 then you've bad channel list
  (it isn't possible mixture S.E. and DIFF inputs or bipolar and unipolar
  ranges).

There are some hardware limitations:
a) You cann't use mixture of unipolar/bipoar ranges or differencial/single
   ended inputs.
b) DMA transfers must have the length aligned to two samples (32 bit),
   so there is some problems if cmd->chanlist_len is odd. This driver tries
   bypass this with adding one sample to the end of the every scan and discard
   it on output but this cann't be used if cmd->scan_begin_src=TRIG_FOLLOW
   and is used flag TRIG_WAKE_EOS, then driver switch to interrupt driven mode
   with interrupt after every sample.
c) If isn't used DMA then you can use only mode where
   cmd->scan_begin_src=TRIG_FOLLOW.

Configuration options:
  [0] - PCI bus of device (optional)
  [1] - PCI slot of device (optional)
          If bus/slot is not specified, then first available PCI
          card will be used.
  [2] - 0= standard 8 DIFF/16 SE channels configuration
        n= external multiplexer connected, 1<=n<=256
  [3] - 0=autoselect DMA or EOC interrupts operation
        1=disable DMA mode
        3=disable DMA and INT, only insn interface will work
  [4] - sample&hold signal - card can generate signal for external S&H board
        0=use SSHO (pin 45) signal is generated in onboard hardware S&H logic
        0!=use ADCHN7 (pin 23) signal is generated from driver, number
           say how long delay is requested in ns and sign polarity of the hold
           (in this case external multiplexor can serve only 128 channels)
  [5] - 0=stop measure on all hardware errors
        2|=ignore ADOR - A/D Overrun status
	8|=ignore Bover - A/D Burst Mode Overrun status
	256|=ignore nFull - A/D FIFO Full status




  

5.6.12.  adq12b -- driver for MicroAxial ADQ12-B data acquisition and control card

Author: jeremy theler <thelerg@ib.cnea.gov.ar>

Status: works

ManufacturerDeviceName
MicroAxial ADQ12-B adq12b


Driver for the acquisition card ADQ12-B (without any add-on).

 - Analog input is subdevice 0 (16 channels single-ended or 8 differential)
 - Digital input is subdevice 1 (5 channels)
 - Digital output is subdevice 1 (8 channels)
 - The PACER is not supported in this version

If you do not specify any options, they will default to

  # comedi_config /dev/comedi0 adq12b 0x300,0,0

  option 1: I/O base address. The following table is provided as a help
   of the hardware jumpers.

         address            jumper JADR
          0x300                 1 (factory default)
          0x320                 2
          0x340                 3
          0x360                 4
          0x380                 5
          0x3A0                 6

  option 2: unipolar/bipolar ADC selection: 0 -> bipolar, 1 -> unipolar

        selection         comedi_config option            JUB
         bipolar                0                         2-3 (factory default)
         unipolar               1                         1-2

  option 3: single-ended/differential AI selection: 0 -> SE, 1 -> differential

        selection         comedi_config option     JCHA    JCHB
       single-ended             0                  1-2     1-2 (factory default) 
       differential             1                  2-3     2-3


   written by jeremy theler <thelerg@ib.cnea.gov.ar>

   instituto balseiro
   comision nacional de energia atomica
   universidad nacional de cuyo
   argentina

   21-feb-2008
     + changed supported devices string (missused the [] and ())

   13-oct-2007
     + first try




  

5.6.13.  adv_pci1710 -- Advantech PCI-1710, PCI-1710HG, PCI-1711, PCI-1713, Advantech PCI-1720, PCI-1731

Author: Michal Dobes <dobes@tesnet.cz>

Status: works

ManufacturerDeviceName
Advantech PCI-1710 pci1710 or adv_pci1710
Advantech PCI-1710HG pci1710hg
Advantech PCI-1711 pci1711 or adv_pci1710
Advantech PCI-1713 pci1713 or adv_pci1710
Advantech PCI-1716 pci1716 or adv_pci1710
Advantech PCI-1720 pci1720 or adv_pci1710
Advantech PCI-1731 pci1731 or adv_pci1710



This driver supports AI, AO, DI and DO subdevices.
AI subdevice supports cmd and insn interface,
other subdevices support only insn interface.

The PCI-1710 and PCI-1710HG have the same PCI device ID, so the
driver cannot distinguish between them, as would be normal for a
PCI driver.

Configuration options:
  [0] - PCI bus of device (optional)
  [1] - PCI slot of device (optional)
          If bus/slot is not specified, the first available PCI
          device will be used.




  

5.6.14.  adv_pci1723 -- Advantech PCI-1723

Author: yonggang <rsmgnu@gmail.com>, Ian Abbott <abbotti@mev.co.uk>

Status: works

ManufacturerDeviceName
Advantech PCI-1723 adv_pci1723

Configuration Options:
  [0] - PCI bus of device (optional)
  [1] - PCI slot of device (optional)

  If bus/slot is not specified, the first supported
  PCI device found will be used.

Subdevice 0 is 8-channel AO, 16-bit, range +/- 10 V.

Subdevice 1 is 16-channel DIO.  The channels are configurable as input or
output in 2 groups (0 to 7, 8 to 15).  Configuring any channel implicitly
configures all channels in the same group.


1. Add the two milliamp ranges to the AO subdevice (0 to 20 mA, 4 to 20 mA).
2. Read the initial ranges and values of the AO subdevice at start-up instead
   of reinitializing them.
3. Implement calibration.




  

5.6.15.  adv_pci_dio -- Advantech PCI-1730, PCI-1733, PCI-1734, PCI-1735U, PCI-1736UP, PCI-1750, PCI-1751, PCI-1752, PCI-1753/E, PCI-1754, PCI-1756, PCI-1762

Author: Michal Dobes <dobes@tesnet.cz>

Status: untested

ManufacturerDeviceName
Advantech PCI-1730 adv_pci_dio
Advantech PCI-1733 adv_pci_dio
Advantech PCI-1734 adv_pci_dio
Advantech PCI-1735U adv_pci_dio
Advantech PCI-1736UP adv_pci_dio
Advantech PCI-1739U adv_pci_dio
Advantech PCI-1750 adv_pci_dio
Advantech PCI-1751 adv_pci_dio
Advantech PCI-1752 adv_pci_dio
Advantech PCI-1753 adv_pci_dio
Advantech PCI-1753+PCI-1753E adv_pci_dio
Advantech PCI-1754 adv_pci_dio
Advantech PCI-1756 adv_pci_dio
Advantech PCI-1760 adv_pci_dio
Advantech PCI-1762 adv_pci_dio

This driver supports now only insn interface for DI/DO/DIO.

Configuration options:
  [0] - PCI bus of device (optional)
  [1] - PCI slot of device (optional)
          If bus/slot is not specified, the first available PCI
          device will be used.




  

5.6.16.  aio_aio12_8 -- Acces I/O Products PC-104 AIO12-8 Analog I/O Board

Author: Pablo Mejia <pablo.mejia@cctechnol.com>

Status: experimental

ManufacturerDeviceName
Acces I/O PC-104 AIO12-8 adv_pci_dio


Configuration Options:
  [0] - I/O port base address


  Only synchronous operations are supported.




  

5.6.17.  aio_iiro_16 -- Acces I/O Products PC-104 IIRO16 Relay And Isolated Input Board

Author: Zachary Ware <zach.ware@cctechnol.com>

Status: experimental

ManufacturerDeviceName
Acces I/O PC-104 AIO12-8 adv_pci_dio


Configuration Options:
  [0] - I/O port base address




  

5.6.18.  amplc_dio200 -- Amplicon 200 Series Digital I/O

Author: Ian Abbott <abbotti@mev.co.uk>

Status: works

ManufacturerDeviceName
Amplicon PC212E pc212e
Amplicon PC214E pc214e
Amplicon PC215E pc215e
Amplicon PCI215 pci215 or amplc_dio200
Amplicon PCIe215 pcie215 or amplc_dio200
Amplicon PC218E pc218e
Amplicon PCIe236 pcie236 or amplc_dio200
Amplicon PC272E pc272e
Amplicon PCI272 pci272 or amplc_dio200
Amplicon PCIe296 pcie296 or amplc_dio200


Configuration options - PC212E, PC214E, PC215E, PC218E, PC272E:
  [0] - I/O port base address
  [1] - IRQ (optional, but commands won't work without it)

Configuration options - PCI215, PCIe215, PCIe236, PCI272, PCIe296:
  [0] - PCI bus of device (optional)
  [1] - PCI slot of device (optional)
  If bus/slot is not specified, the first available PCI device will
  be used.

Passing a zero for an option is the same as leaving it unspecified.

SUBDEVICES

                    PC212E         PC214E      PC215E/PCI215
                 -------------  -------------  -------------
  Subdevices           6              4              5
   0                 PPI-X          PPI-X          PPI-X
   1                 CTR-Y1         PPI-Y          PPI-Y
   2                 CTR-Y2         CTR-Z1*        CTR-Z1
   3                 CTR-Z1       INTERRUPT*       CTR-Z2
   4                 CTR-Z2                      INTERRUPT
   5               INTERRUPT

                    PCIe215        PC218E         PCIe236
                 -------------  -------------  -------------
  Subdevices           8              7              8
   0                 PPI-X          CTR-X1         PPI-X
   1                 UNUSED         CTR-X2         UNUSED
   2                 PPI-Y          CTR-Y1         UNUSED
   3                 UNUSED         CTR-Y2         UNUSED
   4                 CTR-Z1         CTR-Z1         CTR-Z1
   5                 CTR-Z2         CTR-Z2         CTR-Z2
   6                 TIMER        INTERRUPT        TIMER
   7               INTERRUPT                     INTERRUPT

                 PC272E/PCI272     PCIe296
                 -------------  -------------
  Subdevices           4              8
   0                 PPI-X          PPI-X1
   1                 PPI-Y          PPI-X2
   2                 PPI-Z          PPI-Y1
   3               INTERRUPT        PPI-Y2
   4                                CTR-Z1
   5                                CTR-Z2
   6                                TIMER
   7                              INTERRUPT

Each PPI is a 8255 chip providing 24 DIO channels.  The DIO channels
are configurable as inputs or outputs in four groups:

  Port A  - channels  0 to  7
  Port B  - channels  8 to 15
  Port CL - channels 16 to 19
  Port CH - channels 20 to 23

Only mode 0 of the 8255 chips is supported.

Each CTR is a 8254 chip providing 3 16-bit counter channels.  Each
channel is configured individually with INSN_CONFIG instructions.  The
specific type of configuration instruction is specified in data[0].
Some configuration instructions expect an additional parameter in
data[1]; others return a value in data[1].  The following configuration
instructions are supported:

  INSN_CONFIG_SET_COUNTER_MODE.  Sets the counter channel's mode and
    BCD/binary setting specified in data[1].

  INSN_CONFIG_8254_READ_STATUS.  Reads the status register value for the
    counter channel into data[1].

  INSN_CONFIG_SET_CLOCK_SRC.  Sets the counter channel's clock source as
    specified in data[1] (this is a hardware-specific value).  Not
    supported on PC214E.  For the other boards, valid clock sources are
    0 to 7 as follows:

      0.  CLK n, the counter channel's dedicated CLK input from the SK1
        connector.  (N.B. for other values, the counter channel's CLKn
        pin on the SK1 connector is an output!)
      1.  Internal 10 MHz clock.
      2.  Internal 1 MHz clock.
      3.  Internal 100 kHz clock.
      4.  Internal 10 kHz clock.
      5.  Internal 1 kHz clock.
      6.  OUT n-1, the output of counter channel n-1 (see note 1 below).
      7.  Ext Clock, the counter chip's dedicated Ext Clock input from
        the SK1 connector.  This pin is shared by all three counter
        channels on the chip.

  INSN_CONFIG_GET_CLOCK_SRC.  Returns the counter channel's current
    clock source in data[1].  For internal clock sources, data[2] is set
    to the period in ns.

  INSN_CONFIG_SET_GATE_SRC.  Sets the counter channel's gate source as
    specified in data[2] (this is a hardware-specific value).  Not
    supported on PC214E.  For the other boards, valid gate sources are 0
    to 7 as follows:

      0.  VCC (internal +5V d.c.), i.e. gate permanently enabled.
      1.  GND (internal 0V d.c.), i.e. gate permanently disabled.
      2.  GAT n, the counter channel's dedicated GAT input from the SK1
        connector.  (N.B. for other values, the counter channel's GATn
        pin on the SK1 connector is an output!)
      3.  /OUT n-2, the inverted output of counter channel n-2 (see note
        2 below).
      4.  Reserved.
      5.  Reserved.
      6.  Reserved.
      7.  Reserved.

  INSN_CONFIG_GET_GATE_SRC.  Returns the counter channel's current gate
    source in data[2].

Clock and gate interconnection notes:

  1.  Clock source OUT n-1 is the output of the preceding channel on the
  same counter subdevice if n > 0, or the output of channel 2 on the
  preceding counter subdevice (see note 3) if n = 0.

  2.  Gate source /OUT n-2 is the inverted output of channel 0 on the
  same counter subdevice if n = 2, or the inverted output of channel n+1
  on the preceding counter subdevice (see note 3) if n < 2.

  3.  The counter subdevices are connected in a ring, so the highest
  counter subdevice precedes the lowest.

The 'TIMER' subdevice is a free-running 32-bit timer subdevice.

The 'INTERRUPT' subdevice pretends to be a digital input subdevice.  The
digital inputs come from the interrupt status register.  The number of
channels matches the number of interrupt sources.  The PC214E does not
have an interrupt status register; see notes on 'INTERRUPT SOURCES'
below.

INTERRUPT SOURCES

                    PC212E         PC214E      PC215E/PCI215
                 -------------  -------------  -------------
  Sources              6              1              6
   0               PPI-X-C0       JUMPER-J5      PPI-X-C0
   1               PPI-X-C3                      PPI-X-C3
   2              CTR-Y1-OUT1                    PPI-Y-C0
   3              CTR-Y2-OUT1                    PPI-Y-C3
   4              CTR-Z1-OUT1                   CTR-Z1-OUT1
   5              CTR-Z2-OUT1                   CTR-Z2-OUT1

                    PCIe215        PC218E         PCIe236
                 -------------  -------------  -------------
  Sources              6              6              6
   0               PPI-X-C0      CTR-X1-OUT1     PPI-X-C0
   1               PPI-X-C3      CTR-X2-OUT1     PPI-X-C3
   2               PPI-Y-C0      CTR-Y1-OUT1      unused
   3               PPI-Y-C3      CTR-Y2-OUT1      unused
   4              CTR-Z1-OUT1    CTR-Z1-OUT1    CTR-Z1-OUT1
   5              CTR-Z2-OUT1    CTR-Z2-OUT1    CTR-Z2-OUT1

                 PC272E/PCI272     PCIe296
                 -------------  -------------
  Sources              6              6
   0               PPI-X-C0       PPI-X1-C0
   1               PPI-X-C3       PPI-X1-C3
   2               PPI-Y-C0       PPI-Y1-C0
   3               PPI-Y-C3       PPI-Y1-C3
   4               PPI-Z-C0      CTR-Z1-OUT1
   5               PPI-Z-C3      CTR-Z2-OUT1

When an interrupt source is enabled in the interrupt source enable
register, a rising edge on the source signal latches the corresponding
bit to 1 in the interrupt status register.

When the interrupt status register value as a whole (actually, just the
6 least significant bits) goes from zero to non-zero, the board will
generate an interrupt.  For level-triggered hardware interrupts (PCI
card), the interrupt will remain asserted until the interrupt status
register is cleared to zero.  For edge-triggered hardware interrupts
(ISA card), no further interrupts will occur until the interrupt status
register is cleared to zero.  To clear a bit to zero in the interrupt
status register, the corresponding interrupt source must be disabled
in the interrupt source enable register (there is no separate interrupt
clear register).

The PC214E does not have an interrupt source enable register or an
interrupt status register; its 'INTERRUPT' subdevice has a single
channel and its interrupt source is selected by the position of jumper
J5.

COMMANDS

The driver supports a read streaming acquisition command on the
'INTERRUPT' subdevice.  The channel list selects the interrupt sources
to be enabled.  All channels will be sampled together (convert_src ==
TRIG_NOW).  The scan begins a short time after the hardware interrupt
occurs, subject to interrupt latencies (scan_begin_src == TRIG_EXT,
scan_begin_arg == 0).  The value read from the interrupt status register
is packed into a sampl_t value, one bit per requested channel, in the
order they appear in the channel list.




  

5.6.19.  amplc_pc236 -- Amplicon PC36AT, PCI236

Author: Ian Abbott <abbotti@mev.co.uk>

Status: works

ManufacturerDeviceName
Amplicon PC36AT pc36at
Amplicon PCI236 pci236 or amplc_pc236

Configuration options - PC36AT:
  [0] - I/O port base address
  [1] - IRQ (optional)

Configuration options - PCI236:
  [0] - PCI bus of device (optional)
  [1] - PCI slot of device (optional)
  If bus/slot is not specified, the first available PCI device will be
  used.

The PC36AT ISA board and PCI236 PCI board have a single 8255 appearing
as subdevice 0.

Subdevice 1 pretends to be a digital input device, but it always returns
0 when read. However, if you run a command with scan_begin_src=TRIG_EXT,
a rising edge on port C bit 3 acts as an external trigger, which can be
used to wake up tasks.  This is like the comedi_parport device, but the
only way to physically disable the interrupt on the PC36AT is to remove
the IRQ jumper.  If no interrupt is connected, then subdevice 1 is
unused.




  

5.6.20.  amplc_pc263 -- Amplicon PC263, PCI263

Author: Ian Abbott <abbotti@mev.co.uk>

Status: works

ManufacturerDeviceName
Amplicon PC263 pc263
Amplicon PCI263 pci263 or amplc_pc263

Configuration options - PC263:
  [0] - I/O port base address

Configuration options - PCI263:
  [0] - PCI bus of device (optional)
  [1] - PCI slot of device (optional)
  If bus/slot is not specified, the first available PCI device will be
  used.

Each board appears as one subdevice, with 16 digital outputs, each
connected to a reed-relay. Relay contacts are closed when output is 1.
The state of the outputs can be read.




  

5.6.21.  amplc_pci224 -- Amplicon PCI224, PCI234

Author: Ian Abbott <abbotti@mev.co.uk>

Status: works, but see caveats

ManufacturerDeviceName
Amplicon PCI224 amplc_pci224 or pci224
Amplicon PCI234 amplc_pci224 or pci234


  - ao_insn read/write
  - ao_do_cmd mode with the following sources:

    - start_src         TRIG_INT        TRIG_EXT
    - scan_begin_src    TRIG_TIMER      TRIG_EXT
    - convert_src       TRIG_NOW
    - scan_end_src      TRIG_COUNT
    - stop_src          TRIG_COUNT      TRIG_EXT        TRIG_NONE

    The channel list must contain at least one channel with no repeated
    channels.  The scan end count must equal the number of channels in
    the channel list.

    There is only one external trigger source so only one of start_src,
    scan_begin_src or stop_src may use TRIG_EXT.

Configuration options - PCI224:
  [0] - PCI bus of device (optional).
  [1] - PCI slot of device (optional).
          If bus/slot is not specified, the first available PCI device
          will be used.
  [2] - Select available ranges according to jumper LK1.  All channels
        are set to the same range:
        0=Jumper position 1-2 (factory default), 4 software-selectable
          internal voltage references, giving 4 bipolar and 4 unipolar
          ranges:
            [-10V,+10V], [-5V,+5V], [-2.5V,+2.5V], [-1.25V,+1.25V],
            [0,+10V], [0,+5V], [0,+2.5V], [0,1.25V].
        1=Jumper position 2-3, 1 external voltage reference, giving
          1 bipolar and 1 unipolar range:
            [-Vext,+Vext], [0,+Vext].

Configuration options - PCI234:
  [0] - PCI bus of device (optional).
  [1] - PCI slot of device (optional).
          If bus/slot is not specified, the first available PCI device
          will be used.
  [2] - Select internal or external voltage reference according to
        jumper LK1.  This affects all channels:
        0=Jumper position 1-2 (factory default), Vref=5V internal.
        1=Jumper position 2-3, Vref=Vext external.
  [3] - Select channel 0 range according to jumper LK2:
        0=Jumper position 2-3 (factory default), range [-2*Vref,+2*Vref]
          (10V bipolar when options[2]=0).
        1=Jumper position 1-2, range [-Vref,+Vref]
          (5V bipolar when options[2]=0).
  [4] - Select channel 1 range according to jumper LK3: cf. options[3].
  [5] - Select channel 2 range according to jumper LK4: cf. options[3].
  [6] - Select channel 3 range according to jumper LK5: cf. options[3].

Passing a zero for an option is the same as leaving it unspecified.


  1) All channels on the PCI224 share the same range.  Any change to the
     range as a result of insn_write or a streaming command will affect
     the output voltages of all channels, including those not specified
     by the instruction or command.

  2) For the analog output command,  the first scan may be triggered
     falsely at the start of acquisition.  This occurs when the DAC scan
     trigger source is switched from 'none' to 'timer' (scan_begin_src =
     TRIG_TIMER) or 'external' (scan_begin_src == TRIG_EXT) at the start
     of acquisition and the trigger source is at logic level 1 at the
     time of the switch.  This is very likely for TRIG_TIMER.  For
     TRIG_EXT, it depends on the state of the external line and whether
     the CR_INVERT flag has been set.  The remaining scans are triggered
     correctly.




  

5.6.22.  amplc_pci230 -- Amplicon PCI230, PCI260 Multifunction I/O boards

Author: Allan Willcox <allanwillcox@ozemail.com.au>, Steve D Sharples <steve.sharples@nottingham.ac.uk>, Ian Abbott <abbotti@mev.co.uk>

Status: works

ManufacturerDeviceName
Amplicon PCI230 pci230 or amplc_pci230
Amplicon PCI230+ pci230+ or amplc_pci230
Amplicon PCI260 pci260 or amplc_pci230
Amplicon PCI260+ pci260+ or amplc_pci230

Configuration options:
  [0] - PCI bus of device (optional).
  [1] - PCI slot of device (optional).
          If bus/slot is not specified, the first available PCI device
          will be used.

Configuring a "amplc_pci230" will match any supported card and it will
choose the best match, picking the "+" models if possible.  Configuring
a "pci230" will match a PCI230 or PCI230+ card and it will be treated as
a PCI230.  Configuring a "pci260" will match a PCI260 or PCI260+ card
and it will be treated as a PCI260.  Configuring a "pci230+" will match
a PCI230+ card.  Configuring a "pci260+" will match a PCI260+ card.


                PCI230(+)    PCI260(+)
                ---------    ---------
  Subdevices       3            1
        0          AI           AI
	1          AO
	2          DIO

AI Subdevice:

  The AI subdevice has 16 single-ended channels or 8 differential
  channels.

  The PCI230 and PCI260 cards have 12-bit resolution.  The PCI230+ and
  PCI260+ cards have 16-bit resolution.

  For differential mode, use inputs 2N and 2N+1 for channel N (e.g. use
  inputs 14 and 15 for channel 7).  If the card is physically a PCI230
  or PCI260 then it actually uses a "pseudo-differential" mode where the
  inputs are sampled a few microseconds apart.  The PCI230+ and PCI260+
  use true differential sampling.  Another difference is that if the
  card is physically a PCI230 or PCI260, the inverting input is 2N,
  whereas for a PCI230+ or PCI260+ the inverting input is 2N+1.  So if a
  PCI230 is physically replaced by a PCI230+ (or a PCI260 with a
  PCI260+) and differential mode is used, the differential inputs need
  to be physically swapped on the connector.

  The following input ranges are supported:

    0 => [-10, +10] V
    1 => [-5, +5] V
    2 => [-2.5, +2.5] V
    3 => [-1.25, +1.25] V
    4 => [0, 10] V
    5 => [0, 5] V
    6 => [0, 2.5] V

AI Commands:

  +=========+==============+===========+============+==========+
  |start_src|scan_begin_src|convert_src|scan_end_src| stop_src |
  +=========+==============+===========+============+==========+
  |TRIG_NOW | TRIG_FOLLOW  |TRIG_TIMER | TRIG_COUNT |TRIG_NONE |
  |TRIG_INT |              |TRIG_EXT(3)|            |TRIG_COUNT|
  |         |              |TRIG_INT   |            |          |
  |         |--------------|-----------|            |          |
  |         | TRIG_TIMER(1)|TRIG_TIMER |            |          |
  |         | TRIG_EXT(2)  |           |            |          |
  |         | TRIG_INT     |           |            |          |
  +---------+--------------+-----------+------------+----------+

  Note 1: If AI command and AO command are used simultaneously, only
          one may have scan_begin_src == TRIG_TIMER.

  Note 2: For PCI230 and PCI230+, scan_begin_src == TRIG_EXT uses
          DIO channel 16 (pin 49) which will need to be configured as
          a digital input.  For PCI260+, the EXTTRIG/EXTCONVCLK input
          (pin 17) is used instead.  For PCI230, scan_begin_src ==
          TRIG_EXT is not supported.  The trigger is a rising edge
          on the input.

  Note 3: For convert_src == TRIG_EXT, the EXTTRIG/EXTCONVCLK input
          (pin 25 on PCI230(+), pin 17 on PCI260(+)) is used.  The
          convert_arg value is interpreted as follows:

            convert_arg == (CR_EDGE | 0) => rising edge
            convert_arg == (CR_EDGE | CR_INVERT | 0) => falling edge
            convert_arg == 0 => falling edge (backwards compatibility)
            convert_arg == 1 => rising edge (backwards compatibility)

  All entries in the channel list must use the same analogue reference.
  If the analogue reference is not AREF_DIFF (not differential) each
  pair of channel numbers (0 and 1, 2 and 3, etc.) must use the same
  input range.  The input ranges used in the sequence must be all
  bipolar (ranges 0 to 3) or all unipolar (ranges 4 to 6).  The channel
  sequence must consist of 1 or more identical subsequences.  Within the
  subsequence, channels must be in ascending order with no repeated
  channels.  For example, the following sequences are valid: 0 1 2 3
  (single valid subsequence), 0 2 3 5 0 2 3 5 (repeated valid
  subsequence), 1 1 1 1 (repeated valid subsequence).  The following
  sequences are invalid: 0 3 2 1 (invalid subsequence), 0 2 3 5 0 2 3
  (incompletely repeated subsequence).  Some versions of the PCI230+ and
  PCI260+ have a bug that requires a subsequence longer than one entry
  long to include channel 0.

AO Subdevice:

  The AO subdevice has 2 channels with 12-bit resolution.

  The following output ranges are supported:

    0 => [0, 10] V
    1 => [-10, +10] V

AO Commands:

  +=========+==============+===========+============+==========+
  |start_src|scan_begin_src|convert_src|scan_end_src| stop_src |
  +=========+==============+===========+============+==========+
  |TRIG_INT | TRIG_TIMER(1)| TRIG_NOW  | TRIG_COUNT |TRIG_NONE |
  |         | TRIG_EXT(2)  |           |            |TRIG_COUNT|
  |         | TRIG_INT     |           |            |          |
  +---------+--------------+-----------+------------+----------+

  Note 1: If AI command and AO command are used simultaneously, only
          one may have scan_begin_src == TRIG_TIMER.

  Note 2: scan_begin_src == TRIG_EXT is only supported if the card is
          configured as a PCI230+ and is only supported on later
          versions of the card.  As a card configured as a PCI230+ is
          not guaranteed to support external triggering, please consider
          this support to be a bonus.  It uses the EXTTRIG/ EXTCONVCLK
          input (PCI230+ pin 25).  Triggering will be on the rising edge
          unless the CR_INVERT flag is set in scan_begin_arg.

  The channels in the channel sequence must be in ascending order with
  no repeats.  All entries in the channel sequence must use the same
  output range.

DIO Subdevice:

  The DIO subdevice is a 8255 chip providing 24 DIO channels.  The DIO
  channels are configurable as inputs or outputs in four groups:

    Port A  - channels  0 to  7
    Port B  - channels  8 to 15
    Port CL - channels 16 to 19
    Port CH - channels 20 to 23

  Only mode 0 of the 8255 chip is supported.

  Bit 0 of port C (DIO channel 16) is also used as an external scan
  trigger input for AI commands on PCI230 and PCI230+, so would need to
  be configured as an input to use it for that purpose.




  

5.6.23.  c6xdigio -- Mechatronic Systems Inc. C6x_DIGIO DSP daughter card

Author: Dan Block

Status: unknown

ManufacturerDeviceName
Mechatronic Systems Inc. C6x_DIGIO DSP daughter card c6xdigio

This driver will not work with a 2.4 kernel.




  

5.6.24.  cb_das16_cs -- Computer Boards PC-CARD DAS16/16

Author: ds

Status: experimental

ManufacturerDeviceName
ComputerBoards PC-CARD DAS16/16 cb_das16_cs
ComputerBoards PC-CARD DAS16/16-AO cb_das16_cs





  

5.6.25.  cb_pcidac -- Measurement Computing PCI Migration series boards

Author: Oliver Gause

Status: works

ManufacturerDeviceName
ComputerBoards PCI-DAC6702 cb_pcidac
ComputerBoards PCI-DAC6703 cb_pcidac



Written to support the PCI-DAC6702. Trivially extended to support
the PCI-DAC6703, it has just 16 ao channels instead of 8.

Configuration Options:
    [0] - PCI bus number
    [1] - PCI slot number

Developed from cb_pcidas64, cb_pcimdas and skel. The register values are
taken from the register map of Measurement Computing.

Supports DIO, AO in its present form.




  

5.6.26.  cb_pcidas -- MeasurementComputing PCI-DAS series with the AMCC S5933 PCI controller

Author: Ivan Martinez <imr@oersted.dtu.dk>, Frank Mori Hess <fmhess@users.sourceforge.net>, Brice Dubost <braice@braice.net>

Status: There are many reports of the driver being used with most of the supported cards. Despite no detailed log is maintained, it can be said that the driver is quite tested and stable.

ManufacturerDeviceName
Measurement Computing PCI-DAS1602/16 cb_pcidas
Measurement Computing PCI-DAS1602/16jr cb_pcidas
Measurement Computing PCI-DAS1602/12 cb_pcidas
Measurement Computing PCI-DAS1200 cb_pcidas
Measurement Computing PCI-DAS1200jr cb_pcidas
Measurement Computing PCI-DAS1000 cb_pcidas
Measurement Computing PCI-DAS1001 cb_pcidas
Measurement Computing PCI_DAS1002 cb_pcidas



  The boards may be autocalibrated using the comedi_calibrate
  utility.

Configuration options:
  [0] - PCI bus of device (optional)
  [1] - PCI slot of device (optional)
  If bus/slot is not specified, the first supported
  PCI device found will be used.

For commands, the scanned channels must be consecutive
(i.e. 4-5-6-7, 2-3-4,...), and must all have the same
range and aref.

AI Triggering:
   For start_src == TRIG_EXT, the A/D EXTERNAL TRIGGER IN (pin 45) is used.
   For 1602 series, the start_arg is interpreted as follows:
     start_arg == 0                   => gated triger (level high)
     start_arg == CR_INVERT           => gated triger (level low)
     start_arg == CR_EDGE             => Rising edge
     start_arg == CR_EDGE | CR_INVERT => Falling edge
   For the other boards the trigger will be done on rising edge




  

5.6.27.  cb_pcidas64 -- MeasurementComputing PCI-DAS64xx, 60XX, and 4020 series with the PLX 9080 PCI controller

Author: Frank Mori Hess <fmhess@users.sourceforge.net>

Status: works

ManufacturerDeviceName
Measurement Computing PCI-DAS6402/16 cb_pcidas64
Measurement Computing PCI-DAS6402/12 cb_pcidas64
Measurement Computing PCI-DAS64/M1/16 cb_pcidas64
Measurement Computing PCI-DAS64/M2/16 cb_pcidas64
Measurement Computing PCI-DAS64/M3/16 cb_pcidas64
Measurement Computing PCI-DAS6402/16/JR cb_pcidas64
Measurement Computing PCI-DAS64/M1/16/JR cb_pcidas64
Measurement Computing PCI-DAS64/M2/16/JR cb_pcidas64
Measurement Computing PCI-DAS64/M3/16/JR cb_pcidas64
Measurement Computing PCI-DAS64/M1/14 cb_pcidas64
Measurement Computing PCI-DAS64/M2/14 cb_pcidas64
Measurement Computing PCI-DAS64/M3/14 cb_pcidas64
Measurement Computing PCI-DAS6013 cb_pcidas64
Measurement Computing PCI-DAS6014 cb_pcidas64
Measurement Computing PCI-DAS6023 cb_pcidas64
Measurement Computing PCI-DAS6025 cb_pcidas64
Measurement Computing PCI-DAS6030 cb_pcidas64
Measurement Computing PCI-DAS6031 cb_pcidas64
Measurement Computing PCI-DAS6032 cb_pcidas64
Measurement Computing PCI-DAS6033 cb_pcidas64
Measurement Computing PCI-DAS6034 cb_pcidas64
Measurement Computing PCI-DAS6035 cb_pcidas64
Measurement Computing PCI-DAS6036 cb_pcidas64
Measurement Computing PCI-DAS6040 cb_pcidas64
Measurement Computing PCI-DAS6052 cb_pcidas64
Measurement Computing PCI-DAS6070 cb_pcidas64
Measurement Computing PCI-DAS6071 cb_pcidas64
Measurement Computing PCI-DAS4020/12 cb_pcidas64

Configuration options:
   [0] - PCI bus of device (optional)
   [1] - PCI slot of device (optional)

These boards may be autocalibrated with the comedi_calibrate utility.

To select the bnc trigger input on the 4020 (instead of the dio input),
specify a nonzero channel in the chanspec.  If you wish to use an external
master clock on the 4020, you may do so by setting the scan_begin_src
to TRIG_OTHER, and using an INSN_CONFIG_TIMER_1 configuration insn
to configure the divisor to use for the external clock.

Some devices are not identified because the PCI device IDs are not yet
known. If you have such a board, please file a bug report at




  

5.6.28.  cb_pcidda -- MeasurementComputing PCI-DDA series

Author: Ivan Martinez <ivanmr@altavista.com>, Frank Mori Hess <fmhess@users.sourceforge.net>

Status: Supports 08/16, 04/16, 02/16, 08/12, 04/12, and 02/12

ManufacturerDeviceName
Measurement Computing PCI-DDA08/12 cb_pcidda
Measurement Computing PCI-DDA04/12 cb_pcidda
Measurement Computing PCI-DDA02/12 cb_pcidda
Measurement Computing PCI-DDA08/16 cb_pcidda
Measurement Computing PCI-DDA04/16 cb_pcidda
Measurement Computing PCI-DDA02/16 cb_pcidda


Configuration options:
  [0] - PCI bus of device (optional)
  [1] - PCI slot of device (optional)
  If bus/slot is not specified, the first available PCI
  device will be used.

Only simple analog output writing is supported.

So far it has only been tested with:
  - PCI-DDA08/12
Please report success/failure with other different cards to
<comedi@comedi.org>.




  

5.6.29.  cb_pcidio -- ComputerBoards' DIO boards with PCI interface

Author: Yoshiya Matsuzaka

Status: experimental

ManufacturerDeviceName
Measurement Computing PCI-DIO24 cb_pcidio
Measurement Computing PCI-DIO24H cb_pcidio
Measurement Computing PCI-DIO48H cb_pcidio

This driver has been modified from skel.c of comedi-0.7.70.

Configuration Options:
  [0] - PCI bus of device (optional)
  [1] - PCI slot of device (optional)
  If bus/slot is not specified, the first available PCI device will
  be used.

Passing a zero for an option is the same as leaving it unspecified.




  

5.6.30.  cb_pcimdas -- Measurement Computing PCI Migration series boards

Author: Richard Bytheway

Status: experimental

ManufacturerDeviceName
ComputerBoards PCIM-DAS1602/16 cb_pcimdas
ComputerBoards PCIe-DAS1602/16 cb_pcimdas

Written to support the PCIM-DAS1602/16 and PCIe-DAS1602/16.

Configuration Options:
    [0] - PCI bus number
    [1] - PCI slot number

Developed from cb_pcidas and skel by Richard Bytheway (mocelet@sucs.org).
Only supports DIO, AO and simple AI in it's present form.
No interrupts, multi channel or FIFO AI, although the card looks like it could
support this.





  

5.6.31.  cb_pcimdda -- Measurement Computing PCIM-DDA06-16

Author: Calin Culianu <calin@ajvar.org>

Status: works

ManufacturerDeviceName
Measurement Computing PCIM-DDA06-16 cb_pcimdda

All features of the PCIM-DDA06-16 board are supported.  This board
has 6 16-bit AO channels, and the usual 8255 DIO setup.  (24 channels,
configurable in banks of 8 and 4, etc.).  This board does not support commands.

The board has a peculiar way of specifying AO gain/range settings -- You have
1 jumper bank on the card, which either makes all 6 AO channels either
5 Volt unipolar, 5V bipolar, 10 Volt unipolar or 10V bipolar.

Since there is absolutely _no_ way to tell in software how this jumper is set
(well, at least according  to the rather thin spec. from Measurement Computing
 that comes with the board), the driver assumes the jumper is at its factory
default setting of +/-5V.

Also of note is the fact that this board features another jumper, whose
state is also completely invisible to software.  It toggles two possible AO
output modes on the board:

  - Update Mode: Writing to an AO channel instantaneously updates the actual
    signal output by the DAC on the board (this is the factory default).
  - Simultaneous XFER Mode: Writing to an AO channel has no effect until
    you read from any one of the AO channels.  This is useful for loading
    all 6 AO values, and then reading from any one of the AO channels on the
    device to instantly update all 6 AO values in unison.  Useful for some
    control apps, I would assume?  If your jumper is in this setting, then you
    need to issue your comedi_data_write()s to load all the values you want,
    then issue one comedi_data_read() on any channel on the AO subdevice
    to initiate the simultaneous XFER.

Configuration Options:
  [0] PCI bus (optional)
  [1] PCI slot (optional)
  [2] analog output range jumper setting
      0 == +/- 5 V
      1 == +/- 10 V




  

5.6.32.  comedi_bond -- A driver to 'bond' (merge) multiple subdevices from multiple devices together as one.

Author: ds

Status: works


This driver allows you to 'bond' (merge) multiple comedi subdevices
(coming from possibly difference boards and/or drivers) together.  For
example, if you had a board with 2 different DIO subdevices, and
another with 1 DIO subdevice, you could 'bond' them with this driver
so that they look like one big fat DIO subdevice.  This makes writing
applications slightly easier as you don't have to worry about managing
different subdevices in the application -- you just worry about
indexing one linear array of channel id's.

Right now only DIO subdevices are supported as that's the personal itch
I am scratching with this driver.  If you want to add support for AI and AO
subdevs, go right on ahead and do so!

Commands aren't supported -- although it would be cool if they were.

Configuration Options:
  List of comedi-minors to bond.  All subdevices of the same type
  within each minor will be concatenated together in the order given here.




  

5.6.33.  comedi_parport -- Standard PC parallel port

Author: ds

Status: works in immediate mode

ManufacturerDeviceName
standard parallel port comedi_parport

A cheap and easy way to get a few more digital I/O lines.  Steal
additional parallel ports from old computers or your neighbors'
computers.

Option list:
 0: I/O port base for the parallel port.
 1: IRQ

Parallel Port Lines:

pin     subdev  chan    aka
---     ------  ----    ---
1       2       0       strobe
2       0       0       data 0
3       0       1       data 1
4       0       2       data 2
5       0       3       data 3
6       0       4       data 4
7       0       5       data 5
8       0       6       data 6
9       0       7       data 7
10      1       3       acknowledge
11      1       4       busy
12      1       2       output
13      1       1       printer selected
14      2       1       auto LF
15      1       0       error
16      2       2       init
17      2       3       select printer
18-25   ground


Subdevices 0 is digital I/O, subdevice 1 is digital input, and
subdevice 2 is digital output.  Unlike other Comedi devices,
subdevice 0 defaults to output.

Pins 13 and 14 are inverted once by Comedi and once by the
hardware, thus cancelling the effect.

Pin 1 is a strobe, thus acts like one.  There's no way in software
to change this, at least on a standard parallel port.

Subdevice 3 pretends to be a digital input subdevice, but it always
returns 0 when read.  However, if you run a command with
scan_begin_src=TRIG_EXT, it uses pin 10 as a external triggering
pin, which can be used to wake up tasks.




  

5.6.34.  comedi_rt_timer -- Command emulator using real-time tasks

Author: ds, fmhess

Status: works


This driver requires RTAI or RTLinux to work correctly.  It doesn't
actually drive hardware directly, but calls other drivers and uses
a real-time task to emulate commands for drivers and devices that
are incapable of native commands.  Thus, you can get accurately
timed I/O on any device.

Since the timing is all done in software, sampling jitter is much
higher than with a device that has an on-board timer, and maximum
sample rate is much lower.

Configuration options:
  [0] - minor number of device you wish to emulate commands for
  [1] - subdevice number you wish to emulate commands for




  

5.6.35.  comedi_test -- generates fake waveforms

Author: Joachim Wuttke <Joachim.Wuttke@icn.siemens.de>, Frank Mori Hess <fmhess@users.sourceforge.net>, ds

Status: works


This driver is mainly for testing purposes, but can also be used to
generate sample waveforms on systems that don't have data acquisition
hardware.

Configuration options:
  [0] - Amplitude in microvolts for fake waveforms (default 1 volt)
  [1] - Period in microseconds for fake waveforms (default 0.1 sec)

Generates a sawtooth wave on channel 0, square wave on channel 1, additional
waveforms could be added to other channels (currently they return flatline
zero volts).




  

5.6.36.  contec_fit -- Contec F&eIT series modules

Author: Contec Co., Ltd.

Status: works

ManufacturerDeviceName
Contec GY contec_fit
Contec GY FIT
Contec GY FIT


Configuration Options:
  [0] - DeviceID of module (optional)
  If DeviceID is not specified, DeviceID 0 will be used.




  

5.6.37.  contec_pci_dio -- Contec PIO1616L digital I/O board

Author: Stefano Rivoir <s.rivoir@gts.it>

Status: works

ManufacturerDeviceName
Contec PIO1616L contec_pci_dio

Configuration Options:
  [0] - PCI bus of device (optional)
  [1] - PCI slot of device (optional)
  If bus/slot is not specified, the first supported
  PCI device found will be used.




  

5.6.38.  daqboard2000 -- IOTech DAQBoard/2000

Author: Anders Blomdell <anders.blomdell@control.lth.se>

Status: works

ManufacturerDeviceName
IOTech DAQBoard/2000 daqboard2000

Much of the functionality of this driver was determined from reading
the source code for the Windows driver.

The FPGA on the board requires initialization code, which can
be loaded by comedi_config using the -i
option.  The initialization code is available from http://www.comedi.org
in the comedi_nonfree_firmware tarball.

Configuration options:
  [0] - PCI bus of device (optional)
  [1] - PCI slot of device (optional)
  If bus/slot is not specified, the first supported
  PCI device found will be used.




  

5.6.39.  das08 -- DAS-08 compatible boards

Author: Warren Jasper, ds, Frank Hess

Status: works

ManufacturerDeviceName
Keithley Metrabyte DAS08 isa-das08
ComputerBoards DAS08 isa-das08
ComputerBoards DAS08-PGM das08-pgm
ComputerBoards DAS08-PGH das08-pgh
ComputerBoards DAS08-PGL das08-pgl
ComputerBoards DAS08-AOH das08-aoh
ComputerBoards DAS08-AOL das08-aol
ComputerBoards DAS08-AOM das08-aom
ComputerBoards DAS08/JR-AO das08/jr-ao
ComputerBoards DAS08/JR-16-AO das08jr-16-ao
ComputerBoards PCI-DAS08 das08
ComputerBoards PC104-DAS08 pc104-das08
ComputerBoards DAS08/JR/16 das08jr/16

This is a rewrite of the das08 and das08jr drivers.

Options (for ISA cards):
        [0] - base io address

Options (for pci-das08):
        [0] - bus  (optional)
        [1] = slot (optional)

The das08 driver doesn't support asynchronous commands, since
the cheap das08 hardware doesn't really support them.  The
comedi_rt_timer driver can be used to emulate commands for this
driver.




  

5.6.40.  das08_cs -- DAS-08 PCMCIA boards

Author: Warren Jasper, ds, Frank Hess

Status: works

ManufacturerDeviceName
ComputerBoards PCM-DAS08 pcm-das08

This is the PCMCIA-specific support split off from the
das08 driver.

Options (for pcm-das08):
        NONE

Command support does not exist, but could be added for this board.




  

5.6.41.  das16 -- DAS16 compatible boards

Author: Sam Moore, Warren Jasper, ds, Chris Baugher, Frank Hess, Roman Fietze

Status: works

ManufacturerDeviceName
Keithley Metrabyte DAS-16 das-16
Keithley Metrabyte DAS-16G das-16g
Keithley Metrabyte DAS-16F das-16f
Keithley Metrabyte DAS-1201 das-1201
Keithley Metrabyte DAS-1202 das-1202
Keithley Metrabyte DAS-1401 das-1401
Keithley Metrabyte DAS-1402 das-1402
Keithley Metrabyte DAS-1601 das-1601
Keithley Metrabyte DAS-1602 das-1602
ComputerBoards PC104-DAS16/JR pc104-das16jr
ComputerBoards PC104-DAS16JR/16 pc104-das16jr/16
ComputerBoards CIO-DAS16JR/16 cio-das16jr/16
ComputerBoards CIO-DAS16/JR cio-das16/jr
ComputerBoards CIO-DAS1401/12 cio-das1401/12
ComputerBoards CIO-DAS1402/12 cio-das1402/12
ComputerBoards CIO-DAS1402/16 cio-das1402/16
ComputerBoards CIO-DAS1601/12 cio-das1601/12
ComputerBoards CIO-DAS1602/12 cio-das1602/12
ComputerBoards CIO-DAS1602/16 cio-das1602/16
ComputerBoards CIO-DAS16/330 cio-das16/330

A rewrite of the das16 and das1600 drivers.

Passing a zero for an option is the same as leaving it unspecified.




  

5.6.42.  das16m1 -- CIO-DAS16/M1

Author: Frank Mori Hess <fmhess@users.sourceforge.net>

Status: works

ManufacturerDeviceName
Measurement Computing CIO-DAS16/M1 cio-das16/m1


This driver supports a single board - the CIO-DAS16/M1.
As far as I know, there are no other boards that have
the same register layout.  Even the CIO-DAS16/M1/16 is
significantly different.

I was _barely_ able to reach the full 1 MHz capability
of this board, using a hard real-time interrupt
(set the TRIG_RT flag in your comedi_cmd and use
rtlinux or RTAI).  The board can't do dma, so the bottleneck is
pulling the data across the ISA bus.  I timed the interrupt
handler, and it took my computer ~470 microseconds to pull 512
samples from the board.  So at 1 Mhz sampling rate,
expect your CPU to be spending almost all of its
time in the interrupt handler.

This board has some unusual restrictions for its channel/gain list.  If the
list has 2 or more channels in it, then two conditions must be satisfied:
(1) - even/odd channels must appear at even/odd indices in the list
(2) - the list must have an even number of entries.


irq can be omitted, although the cmd interface will not work without it.




  

5.6.43.  das1800 -- Keithley Metrabyte DAS1800 (& compatibles)

Author: Frank Mori Hess <fmhess@users.sourceforge.net>

Status: works

ManufacturerDeviceName
Keithley Metrabyte DAS-1701ST das-1701st
Keithley Metrabyte DAS-1701ST-DA das-1701st-da
Keithley Metrabyte DAS-1701/AO das-1701ao
Keithley Metrabyte DAS-1702ST das-1702st
Keithley Metrabyte DAS-1702ST-DA das-1702st-da
Keithley Metrabyte DAS-1702HR das-1702hr
Keithley Metrabyte DAS-1702HR-DA das-1702hr-da
Keithley Metrabyte DAS-1702/AO das-1702ao
Keithley Metrabyte DAS-1801ST das-1801st
Keithley Metrabyte DAS-1801ST-DA das-1801st-da
Keithley Metrabyte DAS-1801HC das-1801hc
Keithley Metrabyte DAS-1801AO das-1801ao
Keithley Metrabyte DAS-1802ST das-1802st
Keithley Metrabyte DAS-1802ST-DA das-1802st-da
Keithley Metrabyte DAS-1802HR das-1802hr
Keithley Metrabyte DAS-1802HR-DA das-1802hr-da
Keithley Metrabyte DAS-1802HC das-1802hc
Keithley Metrabyte DAS-1802AO das-1802ao

The waveform analog output on the 'ao' cards is not supported.
If you need it, send me (Frank Hess) an email.

Configuration options:
  [0] - I/O port base address
  [1] - IRQ (optional, required for timed or externally triggered conversions)
  [2] - DMA0 (optional, requires irq)
  [3] - DMA1 (optional, requires irq and dma0)




  

5.6.44.  das6402 -- Keithley Metrabyte DAS6402 (& compatibles)

Author: Oystein Svendsen <svendsen@pvv.org>

Status: bitrotten

ManufacturerDeviceName
Keithley Metrabyte DAS6402 das6402

This driver has suffered bitrot.




  

5.6.45.  das800 -- Keithley Metrabyte DAS800 (& compatibles)

Author: Frank Mori Hess <fmhess@users.sourceforge.net>

Status: works, cio-das802/16 untested - email me if you have tested it

ManufacturerDeviceName
Keithley Metrabyte DAS-800 das-800
Keithley Metrabyte DAS-801 das-801
Keithley Metrabyte DAS-802 das-802
Measurement Computing CIO-DAS800 cio-das800
Measurement Computing CIO-DAS801 cio-das801
Measurement Computing CIO-DAS802 cio-das802
Measurement Computing CIO-DAS802/16 cio-das802/16

Configuration options:
  [0] - I/O port base address
  [1] - IRQ (optional, required for timed or externally triggered conversions)


	All entries in the channel/gain list must use the same gain and be
	consecutive channels counting upwards in channel number (these are
	hardware limitations.)

	I've never tested the gain setting stuff since I only have a
	DAS-800 board with fixed gain.

	The cio-das802/16 does not have a fifo-empty status bit!  Therefore
	only fifo-half-full transfers are possible with this card.




  

5.6.46.  dmm32at -- Diamond Systems mm32at driver.

Author: Perry J. Piplani <perry.j.piplani@nasa.gov>

Status: experimental


This driver is for the Diamond Systems MM-32-AT board

Configuration Options:
  comedi_config /dev/comedi0 dmm32at baseaddr,irq




  

5.6.47.  dt2801 -- Data Translation DT2801 series and DT01-EZ

Author: ds

Status: works

ManufacturerDeviceName
Data Translation DT2801 dt2801
Data Translation DT2801-A dt2801
Data Translation DT2801/5716A dt2801
Data Translation DT2805 dt2801
Data Translation DT2805/5716A dt2801
Data Translation DT2808 dt2801
Data Translation DT2818 dt2801
Data Translation DT2809 dt2801
Data Translation DT01-EZ dt2801

This driver can autoprobe the type of board.

Configuration options:
  [0] - I/O port base address
  [1] - unused
  [2] - A/D reference 0=differential, 1=single-ended
  [3] - A/D range
          0 = [-10,10]
	  1 = [0,10]
  [4] - D/A 0 range
          0 = [-10,10]
	  1 = [-5,5]
	  2 = [-2.5,2.5]
	  3 = [0,10]
	  4 = [0,5]
  [5] - D/A 1 range (same choices)




  

5.6.48.  dt2811 -- Data Translation DT2811

Author: ds

Status: works

ManufacturerDeviceName
Data Translation DT2811-PGL dt2811-pgl
Data Translation DT2811-PGH dt2811-pgh

Configuration options:
  [0] - I/O port base address
  [1] - IRQ, although this is currently unused
  [2] - A/D reference
          0 = single-ended
          1 = differential
	  2 = pseudo-differential (common reference)
  [3] - A/D range
          0 = [-5,5]
	  1 = [-2.5,2.5]
	  2 = [0,5]
  [4] - D/A 0 range (same choices)
  [4] - D/A 1 range (same choices)




  

5.6.49.  dt2814 -- Data Translation DT2814

Author: ds

Status: complete

ManufacturerDeviceName
Data Translation DT2814 dt2814

Configuration options:
  [0] - I/O port base address
  [1] - IRQ

This card has 16 analog inputs multiplexed onto a 12 bit ADC.  There
is a minimally useful onboard clock.  The base frequency for the
clock is selected by jumpers, and the clock divider can be selected
via programmed I/O.  Unfortunately, the clock divider can only be
a power of 10, from 1 to 10^7, of which only 3 or 4 are useful.  In
addition, the clock does not seem to be very accurate.




  

5.6.50.  dt2815 -- Data Translation DT2815

Author: ds

Status: mostly complete, untested

ManufacturerDeviceName
Data Translation DT2815 dt2815

I'm not sure anyone has ever tested this board.  If you have information
contrary, please update.

Configuration options:
  [0] - I/O port base base address
  [1] - IRQ (unused)
  [2] - Voltage unipolar/bipolar configuration
          0 == unipolar 5V  (0V -- +5V)
	  1 == bipolar 5V  (-5V -- +5V)
  [3] - Current offset configuration
          0 == disabled  (0mA -- +32mAV)
          1 == enabled  (+4mA -- +20mAV)
  [4] - Firmware program configuration
          0 == program 1 (see manual table 5-4)
          1 == program 2 (see manual table 5-4)
          2 == program 3 (see manual table 5-4)
          3 == program 4 (see manual table 5-4)
  [5] - Analog output 0 range configuration
          0 == voltage
          1 == current
  [6] - Analog output 1 range configuration (same options)
  [7] - Analog output 2 range configuration (same options)
  [8] - Analog output 3 range configuration (same options)
  [9] - Analog output 4 range configuration (same options)
  [10] - Analog output 5 range configuration (same options)
  [11] - Analog output 6 range configuration (same options)
  [12] - Analog output 7 range configuration (same options)




  

5.6.51.  dt2817 -- Data Translation DT2817

Author: ds

Status: complete

ManufacturerDeviceName
Data Translation DT2817 dt2817

A very simple digital I/O card.  Four banks of 8 lines, each bank
is configurable for input or output.  One wonders why it takes a
50 page manual to describe this thing.

The driver (which, btw, is much less than 50 pages) has 1 subdevice
with 32 channels, configurable in groups of 8.

Configuration options:
  [0] - I/O port base base address




  

5.6.52.  dt282x -- Data Translation DT2821 series (including DT-EZ)

Author: ds

Status: complete

ManufacturerDeviceName
Data Translation DT2821 dt2821
Data Translation DT2821-F-16SE dt2821-f
Data Translation DT2821-F-8DI dt2821-f
Data Translation DT2821-G-16SE dt2821-f
Data Translation DT2821-G-8DI dt2821-g
Data Translation DT2823 dt2823
Data Translation DT2824-PGH dt2824-pgh
Data Translation DT2824-PGL dt2824-pgl
Data Translation DT2825 dt2825
Data Translation DT2827 dt2827
Data Translation DT2828 dt2828
Data Translation DT21-EZ dt21-ez
Data Translation DT23-EZ dt23-ez
Data Translation DT24-EZ dt24-ez
Data Translation DT24-EZ-PGL dt24-ez-pgl

Configuration options:
  [0] - I/O port base address
  [1] - IRQ
  [2] - DMA 1
  [3] - DMA 2
  [4] - AI jumpered for 0=single ended, 1=differential
  [5] - AI jumpered for 0=straight binary, 1=2's complement
  [6] - AO 0 jumpered for 0=straight binary, 1=2's complement
  [7] - AO 1 jumpered for 0=straight binary, 1=2's complement
  [8] - AI jumpered for 0=[-10,10]V, 1=[0,10], 2=[-5,5], 3=[0,5]
  [9] - AO 0 jumpered for 0=[-10,10]V, 1=[0,10], 2=[-5,5], 3=[0,5],
        4=[-2.5,2.5]
  [10]- A0 1 jumpered for 0=[-10,10]V, 1=[0,10], 2=[-5,5], 3=[0,5],
        4=[-2.5,2.5]





  

5.6.53.  dt3000 -- Data Translation DT3000 series

Author: ds

Status: works

ManufacturerDeviceName
Data Translation DT3001 dt3000
Data Translation DT3001-PGL dt3000
Data Translation DT3002 dt3000
Data Translation DT3003 dt3000
Data Translation DT3003-PGL dt3000
Data Translation DT3004 dt3000
Data Translation DT3005 dt3000
Data Translation DT3004-200 dt3000

Configuration Options:
  [0] - PCI bus of device (optional)
  [1] - PCI slot of device (optional)
  If bus/slot is not specified, the first supported
  PCI device found will be used.

There is code to support AI commands, but it may not work.

AO commands are not supported.




  

5.6.54.  dt9812 -- Data Translation DT9812 USB module

Author: anders.blomdell@control.lth.se (Anders Blomdell)

Status: in development

ManufacturerDeviceName
Data Translation DT9812 dt9812

This driver works, but bulk transfers not implemented. Might be a starting point
for someone else. I found out too late that USB has too high latencies (>1 ms)
for my needs.




  

5.6.55.  fl512 -- unknown

Author: Anders Gnistrup <ex18@kalman.iau.dtu.dk>

Status: unknown

ManufacturerDeviceName
unknown FL512 fl512

Digital I/O is not supported.

Configuration options:
  [0] - I/O port base address




  

5.6.56.  gsc_hpdi -- General Standards Corporation High Speed Parallel Digital Interface rs485 boards

Author: Frank Mori Hess <fmhess@users.sourceforge.net>

Status: only receive mode works, transmit not supported

ManufacturerDeviceName
General Standards Corporation PCI-HPDI32 gsc_hpdi
General Standards Corporation PMC-HPDI32 gsc_hpdi

Configuration options:
   [0] - PCI bus of device (optional)
   [1] - PCI slot of device (optional)

There are some additional hpdi models available from GSC for which
support could be added to this driver.




  

5.6.57.  icp_multi -- Inova ICP_MULTI

Author: Anne Smorthit <anne.smorthit@sfwte.ch>

Status: works

ManufacturerDeviceName
Inova ICP_MULTI icp_multi


The driver works for analog input and output and digital input and output.
It does not work with interrupts or with the counters.  Currently no support
for DMA.

It has 16 single-ended or 8 differential Analogue Input channels with 12-bit
resolution.  Ranges : 5V, 10V, +/-5V, +/-10V, 0..20mA and 4..20mA.  Input
ranges can be individually programmed for each channel.  Voltage or current
measurement is selected by jumper.

There are 4 x 12-bit Analogue Outputs.  Ranges : 5V, 10V, +/-5V, +/-10V

16 x Digital Inputs, 24V

8 x Digital Outputs, 24V, 1A

4 x 16-bit counters





  

5.6.58.  ii_pci20kc -- Intelligent Instruments PCI-20001C carrier board

Author: Markus Kempf <kempf@matsci.uni-sb.de>

Status: works

ManufacturerDeviceName
Intelligent Instrumentation PCI-20001C ii_pci20kc

Supports the PCI-20001 C-2a Carrier board, and could probably support
the other carrier boards with small modifications.  Modules supported


options for PCI-20006M:
  first:   Analog output channel 0 range configuration
             0  bipolar 10  (-10V -- +10V)
             1  unipolar 10  (0V -- +10V)
             2  bipolar 5  (-5V -- 5V)
  second:  Analog output channel 1 range configuration

options for PCI-20341M:
  first:   Analog input gain configuration
             0  1
             1  10
             2  100
             3  200




  

5.6.59.  jr3_pci -- JR3/PCI force sensor board

Author: Anders Blomdell <anders.blomdell@control.lth.se>

Status: works

ManufacturerDeviceName
JR3 PCI force sensor board jr3_pci

  The DSP on the board requires initialization code, which can
  be loaded by placing it in /lib/firmware/comedi.
  The initialization code should be somewhere on the media you got
  with your card. One version is available from http://www.comedi.org
  in the comedi_nonfree_firmware tarball.

  Configuration options:
  [0] - PCI bus number - if bus number and slot number are 0,
                         then driver search for first unused card
  [1] - PCI slot number




  

5.6.60.  ke_counter -- Driver for Kolter Electronic Counter Card

Author: Michael Hillmann

Status: tested

ManufacturerDeviceName
Kolter Electronic PCI Counter Card ke_counter


Configuration Options:
  [0] - PCI bus of device (optional)
  [1] - PCI slot of device (optional)
  If bus/slot is not specified, the first supported
  PCI device found will be used.

This driver is a simple driver to read the counter values from
Kolter Electronic PCI Counter Card.




  

5.6.61.  me4000 -- Meilhaus ME-4000 series boards

Author: gg (Guenter Gebhardt <g.gebhardt@meilhaus.com>)

Status: broken (no support for loading firmware)

ManufacturerDeviceName
Meilhaus ME-4650 me4000
Meilhaus ME-4670i me4000
Meilhaus ME-4680 me4000
Meilhaus ME-4680i me4000
Meilhaus ME-4680is me4000


    - Analog Input
    - Analog Output
    - Digital I/O
    - Counter

Configuration Options:

    [0] - PCI bus number (optional)
    [1] - PCI slot number (optional)

    If bus/slot is not specified, the first available PCI
    device will be used.

The firmware required by these boards is available in the
comedi_nonfree_firmware tarball available from




  

5.6.62.  me_daq -- Meilhaus PCI data acquisition cards

Author: Michael Hillmann <hillmann@syscongroup.de>

Status: experimental

ManufacturerDeviceName
Meilhaus ME-2600i me_daq
Meilhaus ME-2000i me_daq



    Analog Output

Configuration options:

    [0] - PCI bus number (optional)
    [1] - PCI slot number (optional)

    If bus/slot is not specified, the first available PCI
    device will be used.

The 2600 requires a firmware upload, which can be accomplished
using the -i or --init-data option of comedi_config.
The firmware can be
found in the comedi_nonfree_firmware tarball available
from http://www.comedi.org




  

5.6.63.  mpc624 -- Micro/sys MPC-624 PC/104 board

Author: Stanislaw Raczynski <sraczynski@op.pl>

Status: working

ManufacturerDeviceName
Micro/sys MPC-624 mpc624


    The Micro/sys MPC-624 board is based on the LTC2440 24-bit sigma-delta
    ADC chip.
    
    Subdevices supported by the driver:
    - Analog In:   supported
    - Digital I/O: not supported
    - LEDs:        not supported
    - EEPROM:      not supported

Configuration Options:
  [0] - I/O base address
  [1] - convertion rate
            Convertion rate  RMS noise  Effective Number Of Bits
         0      3.52kHz        23uV                17
         1      1.76kHz       3.5uV                20
         2       880Hz         2uV                21.3
         3       440Hz        1.4uV               21.8
         4       220Hz         1uV                22.4
         5       110Hz        750uV               22.9
         6       55Hz         510nV               23.4
         7      27.5Hz        375nV                24 
         8      13.75Hz       250nV               24.4
         9      6.875Hz       200nV               24.6
   [2] - voltage range
         0      -1.01V .. +1.01V
         1      -10.1V .. +10.1V




  

5.6.64.  mpc8260cpm -- MPC8260 CPM module generic digital I/O lines

Author: ds

Status: experimental

ManufacturerDeviceName
Motorola MPC8260 CPM mpc8260cpm

This driver is specific to the Motorola MPC8260 processor, allowing
you to access the processor's generic digital I/O lines.

It is apparently missing some code.




  

5.6.65.  multiq3 -- Quanser Consulting MultiQ-3

Author: Anders Blomdell <anders.blomdell@control.lth.se>

Status: works

ManufacturerDeviceName
Quanser Consulting MultiQ-3 multiq3




  

5.6.66.  ni_6527 -- National Instruments 6527

Author: ds

Status: works

ManufacturerDeviceName
National Instruments PCI-6527 ni6527
National Instruments PXI-6527 ni6527





  

5.6.67.  ni_65xx -- National Instruments 65xx static dio boards

Author: Jon Grierson <jd@renko.co.uk>, Frank Mori Hess <fmhess@users.sourceforge.net>

Status: testing

ManufacturerDeviceName
National Instruments PCI-6509 ni_65xx
National Instruments PXI-6509 ni_65xx
National Instruments PCI-6510 ni_65xx
National Instruments PCI-6511 ni_65xx
National Instruments PXI-6511 ni_65xx
National Instruments PCI-6512 ni_65xx
National Instruments PXI-6512 ni_65xx
National Instruments PCI-6513 ni_65xx
National Instruments PXI-6513 ni_65xx
National Instruments PCI-6514 ni_65xx
National Instruments PXI-6514 ni_65xx
National Instruments PCI-6515 ni_65xx
National Instruments PXI-6515 ni_65xx
National Instruments PCI-6516 ni_65xx
National Instruments PCI-6517 ni_65xx
National Instruments PCI-6518 ni_65xx
National Instruments PCI-6519 ni_65xx
National Instruments PCI-6520 ni_65xx
National Instruments PCI-6521 ni_65xx
National Instruments PXI-6521 ni_65xx
National Instruments PCI-6528 ni_65xx
National Instruments PXI-6528 ni_65xx



Based on the PCI-6527 driver by ds.
The interrupt subdevice (subdevice 3) is probably broken for all boards
except maybe the 6514.




  

5.6.68.  ni_660x -- National Instruments 660x counter/timer boards

Author: J.P. Mellor <jpmellor@rose-hulman.edu>, Herman.Bruyninckx@mech.kuleuven.ac.be, Wim.Meeussen@mech.kuleuven.ac.be, Klaas.Gadeyne@mech.kuleuven.ac.be, Frank Mori Hess <fmhess@users.sourceforge.net>

Status: experimental

ManufacturerDeviceName
National Instruments PCI-6601 ni_660x
National Instruments PCI-6602 ni_660x
National Instruments PXI-6602 ni_660x
National Instruments PXI-6608 ni_660x
National Instruments PCI-6624 ni_660x
National Instruments PXI-6624 ni_660x


Encoders work.  PulseGeneration (both single pulse and pulse train)
works. Buffered commands work for input but not output.





  

5.6.69.  ni_670x -- National Instruments 670x

Author: Bart Joris <bjoris@advalvas.be>

Status: unknown

ManufacturerDeviceName
National Instruments PCI-6703 ni_670x
National Instruments PCI-6704 ni_670x


Commands are not supported.




  

5.6.70.  ni_at_a2150 -- National Instruments AT-A2150

Author: Frank Mori Hess

Status: works

ManufacturerDeviceName
National Instruments AT-A2150C at_a2150c
National Instruments AT-2150S at_a2150s

If you want to ac couple the board's inputs, use AREF_OTHER.

Configuration options:
  [0] - I/O port base address
  [1] - IRQ (optional, required for timed conversions)
  [2] - DMA (optional, required for timed conversions)




  

5.6.71.  ni_at_ao -- National Instruments AT-AO-6/10

Author: ds

Status: should work

ManufacturerDeviceName
National Instruments AT-AO-6 at-ao-6
National Instruments AT-AO-10 at-ao-10


Configuration options:
  [0] - I/O port base address
  [1] - IRQ (unused)
  [2] - DMA (unused)
  [3] - analog output range, set by jumpers on hardware (0 for -10 to 10V bipolar, 1 for 0V to 10V unipolar)




  

5.6.72.  ni_atmio -- National Instruments AT-MIO-E series

Author: ds

Status: works

ManufacturerDeviceName
National Instruments AT-MIO-16E-1 ni_atmio
National Instruments AT-MIO-16E-2 ni_atmio
National Instruments AT-MIO-16E-10 ni_atmio
National Instruments AT-MIO-16DE-10 ni_atmio
National Instruments AT-MIO-64E-3 ni_atmio
National Instruments AT-MIO-16XE-50 ni_atmio
National Instruments AT-MIO-16XE-10 ni_atmio
National Instruments AT-AI-16XE-10 ni_atmio


The driver has 2.6 kernel isapnp support, and
will automatically probe for a supported board if the
I/O base is left unspecified with comedi_config.
However, many of
the isapnp id numbers are unknown.  If your board is not
recognized, please send the output of 'cat /proc/isapnp'
(you may need to modprobe the isa-pnp module for
/proc/isapnp to exist) so the
id numbers for your board can be added to the driver.

Otherwise, you can use the isapnptools package to configure
your board.  Use isapnp to
configure the I/O base and IRQ for the board, and then pass
the same values as
parameters in comedi_config.  A sample isapnp.conf file is included
in the etc/ directory of Comedilib.

Comedilib includes a utility to autocalibrate these boards.  The
boards seem to boot into a state where the all calibration DACs
are at one extreme of their range, thus the default calibration
is terrible.  Calibration at boot is strongly encouraged.

To use the extended digital I/O on some of the boards, enable the
8255 driver when configuring the Comedi source tree.

External triggering is supported for some events.  The channel index
(scan_begin_arg, etc.) maps to PFI0 - PFI9.

Some of the more esoteric triggering possibilities of these boards
are not supported.




  

5.6.73.  ni_atmio16d -- National Instruments AT-MIO-16D

Author: Chris R. Baugher <baugher@enteract.com>

Status: unknown

ManufacturerDeviceName
National Instruments AT-MIO-16 atmio16
National Instruments AT-MIO-16D atmio16d




  

5.6.74.  ni_daq_700 -- National Instruments PCMCIA DAQCard-700 DIO only

Author: Fred Brooks <nsaspook@nsaspook.com>, based on ni_daq_dio24 by Daniel Vecino Castel <dvecino@able.es>

Status: works

ManufacturerDeviceName
National Instruments PCMCIA DAQ-Card-700 ni_daq_700

The daqcard-700 appears in Comedi as a single digital I/O subdevice with
16 channels.  The channel 0 corresponds to the daqcard-700's output
port, bit 0; channel 8 corresponds to the input port, bit 0.

Direction configuration: channels 0-7 output, 8-15 input (8225 device
emu as port A output, port B input, port C N/A).

IRQ is assigned but not used.




  

5.6.75.  ni_daq_dio24 -- National Instruments PCMCIA DAQ-Card DIO-24

Author: Daniel Vecino Castel <dvecino@able.es>

Status: ?

ManufacturerDeviceName
National Instruments PCMCIA DAQ-Card DIO-24 ni_daq_dio24

This is just a wrapper around the 8255.o driver to properly handle
the PCMCIA interface.




  

5.6.76.  ni_labpc -- National Instruments Lab-PC (& compatibles)

Author: Frank Mori Hess <fmhess@users.sourceforge.net>

Status: works

ManufacturerDeviceName
National Instruments Lab-PC-1200 labpc-1200
National Instruments Lab-PC-1200AI labpc-1200ai
National Instruments Lab-PC+ lab-pc+
National Instruments PCI-1200 ni_labpc

Tested with lab-pc-1200.  For the older Lab-PC+, not all input ranges
and analog references will work, the available ranges/arefs will
depend on how you have configured the jumpers on your board
(see your owner's manual).

Kernel-level ISA plug-and-play support for the lab-pc-1200
boards has not
yet been added to the driver, mainly due to the fact that
I don't know the device id numbers.  If you have one
of these boards,
please file a bug report at https://bugs.comedi.org/
so I can get the necessary information from you.

The 1200 series boards have onboard calibration dacs for correcting
analog input/output offsets and gains.  The proper settings for these
caldacs are stored on the board's eeprom.  To read the caldac values
from the eeprom and store them into a file that can be then be used by
comedilib, use the comedi_calibrate program.

Configuration options - ISA boards:
  [0] - I/O port base address
  [1] - IRQ (optional, required for timed or externally triggered conversions)
  [2] - DMA channel (optional)

Configuration options - PCI boards:
  [0] - bus (optional)
  [1] - slot (optional)

The Lab-pc+ has quirky chanlist requirements
when scanning multiple channels.  Multiple channel scan
sequence must start at highest channel, then decrement down to
channel 0.  The rest of the cards can scan down like lab-pc+ or scan
up from channel zero.  Chanlists consisting of all one channel
are also legal, and allow you to pace conversions in bursts.




  

5.6.77.  ni_labpc_cs -- National Instruments Lab-PC (& compatibles)

Author: Frank Mori Hess <fmhess@users.sourceforge.net>

Status: works

ManufacturerDeviceName
National Instruments DAQCard-1200 daqcard-1200


Thanks go to Fredrik Lingvall for much testing and perseverance in
helping to debug daqcard-1200 support.

The 1200 series boards have onboard calibration dacs for correcting
analog input/output offsets and gains.  The proper settings for these
caldacs are stored on the board's eeprom.  To read the caldac values
from the eeprom and store them into a file that can be then be used by
comedilib, use the comedi_calibrate program.

Configuration options:
  none

The daqcard-1200 has quirky chanlist requirements
when scanning multiple channels.  Multiple channel scan
sequence must start at highest channel, then decrement down to
channel 0.  Chanlists consisting of all one channel
are also legal, and allow you to pace conversions in bursts.




  

5.6.78.  ni_mio_cs -- National Instruments DAQCard E series

Author: ds

Status: works

ManufacturerDeviceName
National Instruments DAQCard-AI-16XE-50 ni_mio_cs
National Instruments DAQCard-AI-16E-4 ni_mio_cs
National Instruments DAQCard-6062E ni_mio_cs
National Instruments DAQCard-6024E ni_mio_cs
National Instruments DAQCard-6036E ni_mio_cs


See the notes in the ni_atmio.o driver.




  

5.6.79.  ni_pcidio -- National Instruments PCI-DIO32HS, PCI-DIO96, PCI-6533, PCI-6503

Author: ds

Status: works

ManufacturerDeviceName
National Instruments PCI-DIO-32HS ni_pcidio
National Instruments PXI-6533 ni_pcidio
National Instruments PCI-DIO-96 ni_pcidio
National Instruments PCI-DIO-96B ni_pcidio
National Instruments PXI-6508 ni_pcidio
National Instruments PCI-6503 ni_pcidio
National Instruments PCI-6503B ni_pcidio
National Instruments PCI-6503X ni_pcidio
National Instruments PXI-6503 ni_pcidio
National Instruments PCI-6533 ni_pcidio
National Instruments PCI-6534 ni_pcidio

The DIO-96 appears as four 8255 subdevices.  See the 8255
driver notes for details.

The DIO32HS board appears as one subdevice, with 32 channels.
Each channel is individually I/O configurable.  The channel order
is 0=A0, 1=A1, 2=A2, ... 8=B0, 16=C0, 24=D0.  The driver only
supports simple digital I/O; no handshaking is supported.

DMA mostly works for the PCI-DIO32HS, but only in timed input mode.

The PCI-DIO-32HS/PCI-6533 has a configurable external trigger. Setting
scan_begin_arg to 0 or CR_EDGE triggers on the leading edge. Setting
scan_begin_arg to CR_INVERT or (CR_EDGE | CR_INVERT) triggers on the
trailing edge.

This driver could be easily modified to support AT-MIO32HS and
AT-MIO96.

The PCI-6534 requires a firmware upload after power-up to work, the
firmware data and instructions for loading it with comedi_config
it are contained in the
comedi_nonfree_firmware tarball available from http://www.comedi.org




  

5.6.80.  ni_pcimio -- National Instruments PCI-MIO-E series and M series (all boards)

Author: ds, John Hallen, Frank Mori Hess, Rolf Mueller, Herbert Peremans, Herman Bruyninckx, Terry Barnaby

Status: works

ManufacturerDeviceName
National Instruments PCI-MIO-16XE-50 ni_pcimio
National Instruments PCI-MIO-16XE-10 ni_pcimio
National Instruments PXI-6030E ni_pcimio
National Instruments PCI-MIO-16E-1 ni_pcimio
National Instruments PCI-MIO-16E-4 ni_pcimio
National Instruments PCI-6014 ni_pcimio
National Instruments PCI-6040E ni_pcimio
National Instruments PXI-6040E ni_pcimio
National Instruments PCI-6030E ni_pcimio
National Instruments PCI-6031E ni_pcimio
National Instruments PCI-6032E ni_pcimio
National Instruments PCI-6033E ni_pcimio
National Instruments PCI-6071E ni_pcimio
National Instruments PCI-6023E ni_pcimio
National Instruments PCI-6024E ni_pcimio
National Instruments PCI-6025E ni_pcimio
National Instruments PXI-6025E ni_pcimio
National Instruments PCI-6034E ni_pcimio
National Instruments PCI-6035E ni_pcimio
National Instruments PCI-6052E ni_pcimio
National Instruments PCI-6110 ni_pcimio
National Instruments PCI-6111 ni_pcimio
National Instruments PCI-6220 ni_pcimio
National Instruments PXI-6220 ni_pcimio
National Instruments PCI-6221 ni_pcimio
National Instruments PXI-6221 ni_pcimio
National Instruments PCI-6224 ni_pcimio
National Instruments PXI-6224 ni_pcimio
National Instruments PCI-6225 ni_pcimio
National Instruments PXI-6225 ni_pcimio
National Instruments PCI-6229 ni_pcimio
National Instruments PCI-6250 ni_pcimio
National Instruments PXI-6250 ni_pcimio
National Instruments PCI-6251 ni_pcimio
National Instruments PXI-6251 ni_pcimio
National Instruments PCIe-6251 ni_pcimio
National Instruments PXIe-6251 ni_pcimio
National Instruments PCI-6254 ni_pcimio
National Instruments PXI-6254 ni_pcimio
National Instruments PCI-6259 ni_pcimio
National Instruments PXI-6259 ni_pcimio
National Instruments PCIe-6259 ni_pcimio
National Instruments PXIe-6259 ni_pcimio
National Instruments PCI-6280 ni_pcimio
National Instruments PXI-6280 ni_pcimio
National Instruments PCI-6281 ni_pcimio
National Instruments PXI-6281 ni_pcimio
National Instruments PCI-6284 ni_pcimio
National Instruments PXI-6284 ni_pcimio
National Instruments PCI-6289 ni_pcimio
National Instruments PXI-6289 ni_pcimio
National Instruments PCI-6711 ni_pcimio
National Instruments PXI-6711 ni_pcimio
National Instruments PCI-6713 ni_pcimio
National Instruments PXI-6713 ni_pcimio
National Instruments PXI-6071E ni_pcimio
National Instruments PCI-6070E ni_pcimio
National Instruments PXI-6070E ni_pcimio
National Instruments PXI-6052E ni_pcimio
National Instruments PCI-6036E ni_pcimio
National Instruments PCI-6731 ni_pcimio
National Instruments PCI-6733 ni_pcimio
National Instruments PXI-6733 ni_pcimio
National Instruments PCI-6143 ni_pcimio
National Instruments PXI-6143 ni_pcimio

These boards are almost identical to the AT-MIO E series, except that
they use the PCI bus instead of ISA (i.e., AT).  See the notes for
the ni_atmio.o driver for additional information about these boards.

Autocalibration is supported on many of the devices, using the
comedi_calibrate (or comedi_soft_calibrate for m-series) utility.
M-Series boards do analog input and analog output calibration entirely
in software. The software calibration corrects
the analog input for offset, gain and
nonlinearity.  The analog outputs are corrected for offset and gain.
See the comedilib documentation on comedi_get_softcal_converter() for
more information.

By default, the driver uses DMA to transfer analog input data to
memory.  When DMA is enabled, not all triggering features are
supported.

Digital I/O may not work on 673x.

Note that the PCI-6143 is a simultaineous sampling device with 8 convertors.
With this board all of the convertors perform one simultaineous sample during
a scan interval. The period for a scan is used for the convert time in a
Comedi cmd. The convert trigger source is normally set to TRIG_NOW by default.

The RTSI trigger bus is supported on these cards on
subdevice 10. See the comedilib documentation for details.

Information (number of channels, bits, etc.) for some devices may be
incorrect.  Please check this and submit a bug if there are problems
for your device.

SCXI is probably broken for m-series boards.





  

5.6.81.  ni_tio -- National Instruments general purpose counters

Author: J.P. Mellor <jpmellor@rose-hulman.edu>, Herman.Bruyninckx@mech.kuleuven.ac.be, Wim.Meeussen@mech.kuleuven.ac.be, Klaas.Gadeyne@mech.kuleuven.ac.be, Frank Mori Hess <fmhess@users.sourceforge.net>

Status: works



This module is not used directly by end-users.  Rather, it
is used by other drivers (for example ni_660x and ni_pcimio)
to provide support for NI's general purpose counters.  It was
originally based on the counter code from ni_660x.c and
ni_mio_common.c.





  

5.6.82.  ni_tiocmd -- National Instruments general purpose counters command support

Author: J.P. Mellor <jpmellor@rose-hulman.edu>, Herman.Bruyninckx@mech.kuleuven.ac.be, Wim.Meeussen@mech.kuleuven.ac.be, Klaas.Gadeyne@mech.kuleuven.ac.be, Frank Mori Hess <fmhess@users.sourceforge.net>

Status: works



This module is not used directly by end-users.  Rather, it
is used by other drivers (for example ni_660x and ni_pcimio)
to provide command support for NI's general purpose counters.
It was originally split out of ni_tio.c to stop the 'ni_tio'
module depending on the 'mite' module.





  

5.6.83.  pcl711 -- Advantech PCL-711 and 711b, ADLINK ACL-8112

Author: ds, Janne Jalkanen <jalkanen@cs.hut.fi>, Eric Bunn <ebu@cs.hut.fi>

Status: mostly complete

ManufacturerDeviceName
Advantech PCL-711 pcl711
Advantech PCL-711B pcl711b
ADLINK ACL-8112HG acl8112hg
ADLINK ACL-8112DG acl8112dg


Since these boards do not have DMA or FIFOs, only immediate mode is
supported.




  

5.6.84.  pcl724 -- Advantech PCL-724, PCL-722, PCL-731 ADLINK ACL-7122, ACL-7124, PET-48DIO

Author: Michal Dobes <dobes@tesnet.cz>

Status: untested

ManufacturerDeviceName
Advantech PCL-724 pcl724
Advantech PCL-722 pcl722
Advantech PCL-731 pcl731
ADLINK ACL-7122 acl7122
ADLINK ACL-7124 acl7124
ADLINK PET-48DIO pet48dio


This is driver for digital I/O boards PCL-722/724/731 with 144/24/48 DIO
and for digital I/O boards ACL-7122/7124/PET-48DIO with 144/24/48 DIO.
It need 8255.o for operations and only immediate mode is supported.
See the source for configuration details.




  

5.6.85.  pcl725 -- Advantech PCL-725 (& compatibles)

Author: ds

Status: unknown

ManufacturerDeviceName
Advantech PCL-725 pcl725




  

5.6.86.  pcl726 -- Advantech PCL-726 & compatibles

Author: ds

Status: untested

ManufacturerDeviceName
Advantech PCL-726 pcl726
Advantech PCL-727 pcl727
Advantech PCL-728 pcl728
ADLINK ACL-6126 acl6126
ADLINK ACL-6128 acl6128

Interrupts are not supported.

    Options for PCL-726:
     [0] - IO Base
     [2]...[7] - D/A output range for channel 1-6:
               0: 0-5V, 1: 0-10V, 2: +/-5V, 3: +/-10V,
	       4: 4-20mA, 5: unknown (external reference)

    Options for PCL-727:
     [0] - IO Base
     [2]...[13] - D/A output range for channel 1-12:
               0: 0-5V, 1: 0-10V, 2: +/-5V,
	       3: 4-20mA

    Options for PCL-728 and ACL-6128:
     [0] - IO Base
     [2], [3] - D/A output range for channel 1 and 2:
               0: 0-5V, 1: 0-10V, 2: +/-5V, 3: +/-10V,
	       4: 4-20mA, 5: 0-20mA

    Options for ACL-6126:
     [0] - IO Base
     [1] - IRQ (0=disable, 3, 5, 6, 7, 9, 10, 11, 12, 15) (currently ignored)
     [2]...[7] - D/A output range for channel 1-6:
               0: 0-5V, 1: 0-10V, 2: +/-5V, 3: +/-10V,
	       4: 4-20mA




  

5.6.87.  pcl730 -- Advantech PCL-730 (& compatibles)

Author: José Luis Sánchez (jsanchezv@teleline.es)

Status: untested

ManufacturerDeviceName
Advantech PCL-730 pcl730
ICP ISO-730 iso730
ICP [ADLINK] ACL-7130 acl7130

Interrupts are not supported.
The ACL-7130 card have an 8254 timer/counter not supported by this driver.




  

5.6.88.  pcl812 -- Advantech PCL-812/PG, PCL-813/B, ADLINK ACL-8112DG/HG/PG, ACL-8113, ACL-8216, ICP DAS A-821PGH/PGL/PGL-NDA, A-822PGH/PGL, A-823PGH/PGL, A-826PG, ICP DAS ISO-813

Author: Michal Dobes <dobes@tesnet.cz>

Status: works (I hope. My board fire up under my hands and I cann't test all features.)

ManufacturerDeviceName
Advantech PCL-812 pcl812
Advantech PCL-812PG pcl812pg
Advantech PCL-813 pcl813
Advantech PCL-813B pcl813b
ADLINK ACL-8112DG acl8112dg
ADLINK ACL-8112HG acl8112hg
ADLINK ACL-8113 acl-8113
ADLINK ACL-8216 acl8216
ICP ISO-813 iso813
ICP A-821PGH a821pgh
ICP A-821PGL a821pgl
ICP A-821PGL-NDA a821pclnda
ICP A-822PGH a822pgh
ICP A-822PGL a822pgl
ICP A-823PGH a823pgh
ICP A-823PGL a823pgl
ICP A-826PG a826pg

This driver supports insn and cmd interfaces. Some boards support only insn
becouse their hardware don't allow more (PCL-813/B, ACL-8113, ISO-813).
Data transfer over DMA is supported only when you measure only one
channel, this is too hardware limitation of these boards.

Options for PCL-812:
  [0] - IO Base
  [1] - IRQ  (0=disable, 2, 3, 4, 5, 6, 7; 10, 11, 12, 14, 15)
  [2] - DMA  (0=disable, 1, 3)
  [3] - 0=trigger source is internal 8253 with 2MHz clock
        1=trigger source is external
  [4] - 0=A/D input range is +/-10V
        1=A/D input range is +/-5V
        2=A/D input range is +/-2.5V
        3=A/D input range is +/-1.25V
        4=A/D input range is +/-0.625V
        5=A/D input range is +/-0.3125V
  [5] - 0=D/A outputs 0-5V  (internal reference -5V)
        1=D/A outputs 0-10V (internal reference -10V)
        2=D/A outputs unknow (external reference)

Options for PCL-812PG, ACL-8112PG:
  [0] - IO Base
  [1] - IRQ  (0=disable, 2, 3, 4, 5, 6, 7; 10, 11, 12, 14, 15)
  [2] - DMA  (0=disable, 1, 3)
  [3] - 0=trigger source is internal 8253 with 2MHz clock
        1=trigger source is external
  [4] - 0=A/D have max +/-5V input
        1=A/D have max +/-10V input
  [5] - 0=D/A outputs 0-5V  (internal reference -5V)
        1=D/A outputs 0-10V (internal reference -10V)
        2=D/A outputs unknow (external reference)

Options for ACL-8112DG/HG, A-822PGL/PGH, A-823PGL/PGH, ACL-8216, A-826PG:
  [0] - IO Base
  [1] - IRQ  (0=disable, 2, 3, 4, 5, 6, 7; 10, 11, 12, 14, 15)
  [2] - DMA  (0=disable, 1, 3)
  [3] - 0=trigger source is internal 8253 with 2MHz clock
        1=trigger source is external
  [4] - 0=A/D channels are S.E.
        1=A/D channels are DIFF
  [5] - 0=D/A outputs 0-5V  (internal reference -5V)
        1=D/A outputs 0-10V (internal reference -10V)
        2=D/A outputs unknow (external reference)

Options for A-821PGL/PGH:
  [0] - IO Base
  [1] - IRQ  (0=disable, 2, 3, 4, 5, 6, 7)
  [2] - 0=A/D channels are S.E.
        1=A/D channels are DIFF
  [3] - 0=D/A output 0-5V  (internal reference -5V)
        1=D/A output 0-10V (internal reference -10V)

Options for A-821PGL-NDA:
  [0] - IO Base
  [1] - IRQ  (0=disable, 2, 3, 4, 5, 6, 7)
  [2] - 0=A/D channels are S.E.
        1=A/D channels are DIFF

Options for PCL-813:
  [0] - IO Base

Options for PCL-813B:
  [0] - IO Base
  [1] - 0= bipolar inputs
        1= unipolar inputs

Options for ACL-8113, ISO-813:
  [0] - IO Base
  [1] - 0= 10V bipolar inputs
        1= 10V unipolar inputs
        2= 20V bipolar inputs
        3= 20V unipolar inputs




  

5.6.89.  pcl816 -- Advantech PCL-816 cards, PCL-814

Author: Juan Grigera <juan@grigera.com.ar>

Status: works

ManufacturerDeviceName
Advantech PCL-816 pcl816
Advantech PCL-814B pcl814b

PCL 816 and 814B have 16 SE/DIFF ADCs, 16 DACs, 16 DI and 16 DO.
Differences are at resolution (16 vs 12 bits).

The driver support AI command mode, other subdevices not written.

Analog output and digital input and output are not supported.

Configuration Options:
  [0] - IO Base
  [1] - IRQ	(0=disable, 2, 3, 4, 5, 6, 7)
  [2] - DMA	(0=disable, 1, 3)
  [3] - 0, 10=10MHz clock for 8254
            1= 1MHz clock for 8254




  

5.6.90.  pcl818 -- Advantech PCL-818 cards, PCL-718

Author: Michal Dobes <dobes@tesnet.cz>

Status: works

ManufacturerDeviceName
Advantech PCL-818L pcl818l
Advantech PCL-818H pcl818h
Advantech PCL-818HD pcl818hd
Advantech PCL-818HG pcl818hg
Advantech PCL-818 pcl818
Advantech PCL-718 pcl718


All cards have 16 SE/8 DIFF ADCs, one or two DACs, 16 DI and 16 DO.
Differences are only at maximal sample speed, range list and FIFO
support.
The driver support AI mode 0, 1, 3 other subdevices (AO, DI, DO) support
only mode 0. If DMA/FIFO/INT are disabled then AI support only mode 0.
PCL-818HD and PCL-818HG support 1kword FIFO. Driver support this FIFO
but this code is untested.
A word or two about DMA. Driver support DMA operations at two ways:
1) DMA uses two buffers and after one is filled then is generated
   INT and DMA restart with second buffer. With this mode I'm unable run
   more that 80Ksamples/secs without data dropouts on K6/233.
2) DMA uses one buffer and run in autoinit mode and the data are
   from DMA buffer moved on the fly with 2kHz interrupts from RTC.
   This mode is used if the interrupt 8 is available for allocation.
   If not, then first DMA mode is used. With this I can run at
   full speed one card (100ksamples/secs) or two cards with
   60ksamples/secs each (more is problem on account of ISA limitations).
   To use this mode you must have compiled  kernel with disabled
   "Enhanced Real Time Clock Support".
   Maybe you can have problems if you use xntpd or similar.
   If you've data dropouts with DMA mode 2 then:
    a) disable IDE DMA
    b) switch text mode console to fb.

   Options for PCL-818L:
    [0] - IO Base
    [1] - IRQ	(0=disable, 2, 3, 4, 5, 6, 7)
    [2] - DMA	(0=disable, 1, 3)
    [3] - 0, 10=10MHz clock for 8254
              1= 1MHz clock for 8254
    [4] - 0,  5=A/D input  -5V.. +5V
          1, 10=A/D input -10V..+10V
    [5] - 0,  5=D/A output 0-5V  (internal reference -5V)
          1, 10=D/A output 0-10V (internal reference -10V)
	  2    =D/A output unknow (external reference)

   Options for PCL-818, PCL-818H:
    [0] - IO Base
    [1] - IRQ	(0=disable, 2, 3, 4, 5, 6, 7)
    [2] - DMA	(0=disable, 1, 3)
    [3] - 0, 10=10MHz clock for 8254
              1= 1MHz clock for 8254
    [4] - 0,  5=D/A output 0-5V  (internal reference -5V)
          1, 10=D/A output 0-10V (internal reference -10V)
	  2    =D/A output unknow (external reference)

   Options for PCL-818HD, PCL-818HG:
    [0] - IO Base
    [1] - IRQ	(0=disable, 2, 3, 4, 5, 6, 7)
    [2] - DMA/FIFO  (-1=use FIFO, 0=disable both FIFO and DMA,
                      1=use DMA ch 1, 3=use DMA ch 3)
    [3] - 0, 10=10MHz clock for 8254
              1= 1MHz clock for 8254
    [4] - 0,  5=D/A output 0-5V  (internal reference -5V)
          1, 10=D/A output 0-10V (internal reference -10V)
   	  2    =D/A output unknow (external reference)

   Options for PCL-718:
    [0] - IO Base
    [1] - IRQ	(0=disable, 2, 3, 4, 5, 6, 7)
    [2] - DMA	(0=disable, 1, 3)
    [3] - 0, 10=10MHz clock for 8254
              1= 1MHz clock for 8254
    [4] -     0=A/D Range is +/-10V
	      1=             +/-5V
	      2=             +/-2.5V
	      3=             +/-1V
	      4=             +/-0.5V
	      5=  	     user defined bipolar
	      6=	     0-10V
	      7=	     0-5V
 	      8=	     0-2V
	      9=	     0-1V
	     10=	     user defined unipolar
    [5] - 0,  5=D/A outputs 0-5V  (internal reference -5V)
          1, 10=D/A outputs 0-10V (internal reference -10V)
	      2=D/A outputs unknow (external reference)
    [6] - 0, 60=max  60kHz A/D sampling
          1,100=max 100kHz A/D sampling (PCL-718 with Option 001 installed)




  

5.6.91.  pcm3724 -- Advantech PCM-3724

Author: Drew Csillag <drew_csillag@yahoo.com>

Status: tested

ManufacturerDeviceName
Advantech PCM-3724 pcm724


This is driver for digital I/O boards PCM-3724 with 48 DIO.
It needs 8255.o for operations and only immediate mode is supported.
See the source for configuration details.

Copy/pasted/hacked from pcm724.c




  

5.6.92.  pcm3730 -- PCM3730

Author: Blaine Lee

Status: unknown

ManufacturerDeviceName
Advantech PCM-3730 pcm3730

Configuration options:
  [0] - I/O port base




  

5.6.93.  pcmad -- Winsystems PCM-A/D12, PCM-A/D16

Author: ds

Status: untested

ManufacturerDeviceName
Winsystems PCM-A/D12 pcmad12
Winsystems PCM-A/D16 pcmad16

This driver was written on a bet that I couldn't write a driver
in less than 2 hours.  I won the bet, but never got paid.  =(

Configuration options:
  [0] - I/O port base
  [1] - unused
  [2] - Analog input reference
          0 = single ended
          1 = differential
  [3] - Analog input encoding (must match jumpers)
          0 = straight binary
          1 = two's complement




  

5.6.94.  pcmda12 -- A driver for the Winsystems PCM-D/A-12

Author: Calin Culianu <calin@ajvar.org>

Status: works

ManufacturerDeviceName
Winsystems PCM-D/A-12 pcmda12

A driver for the relatively straightforward-to-program PCM-D/A-12.
This board doesn't support commands, and the only way to set its
analog output range is to jumper the board.  As such,
comedi_data_write() ignores the range value specified.

The board uses 16 consecutive I/O addresses starting at the I/O port
base address.  Each address corresponds to the LSB then MSB of a
particular channel from 0-7.

Note that the board is not ISA-PNP capable and thus
needs the I/O port comedi_config parameter.

Note that passing a nonzero value as the second config option will
enable "simultaneous xfer" mode for this board, in which AO writes
will not take effect until a subsequent read of any AO channel.  This
is so that one can speed up programming by preloading all AO registers
with values before simultaneously setting them to take effect with one
read command.

Configuration Options:
  [0] - I/O port base address
  [1] - Do Simultaneous Xfer (see description)




  

5.6.95.  pcmmio -- A driver for the PCM-MIO multifunction board

Author: Calin Culianu <calin@ajvar.org>

Status: works

ManufacturerDeviceName
Winsystems PCM-MIO pcmmio

A driver for the relatively new PCM-MIO multifunction board from
Winsystems.  This board is a PC-104 based I/O board.  It contains
four subdevices:
  subdevice 0 - 16 channels of 16-bit AI
  subdevice 1 - 8 channels of 16-bit AO
  subdevice 2 - first 24 channels of the 48 channel of DIO (with edge-triggered interrupt support)
  subdevice 3 - last 24 channels of the 48 channel DIO (no interrupt support for this bank of channels)

  Some notes:

  Synchronous reads and writes are the only things implemented for AI and AO,
  even though the hardware itself can do streaming acquisition, etc.  Anyone
  want to add asynchronous I/O for AI/AO as a feature?  Be my guest...

  Asynchronous I/O for the DIO subdevices *is* implemented, however!  They are
  basically edge-triggered interrupts for any configuration of the first
  24 DIO-lines.

  Also note that this interrupt support is untested.

  A few words about edge-detection IRQ support (commands on DIO):

  * To use edge-detection IRQ support for the DIO subdevice, pass the IRQ
    of the board to the comedi_config command.  The board IRQ is not jumpered
    but rather configured through software, so any IRQ from 1-15 is OK.

  * Due to the genericity of the comedi API, you need to create a special
    comedi_command in order to use edge-triggered interrupts for DIO.

  * Use comedi_commands with TRIG_NOW.  Your callback will be called each
    time an edge is detected on the specified DIO line(s), and the data
    values will be two sample_t's, which should be concatenated to form
    one 32-bit unsigned int.  This value is the mask of channels that had
    edges detected from your channel list.  Note that the bits positions
    in the mask correspond to positions in your chanlist when you
    specified the command and *not* channel id's!

 *  To set the polarity of the edge-detection interrupts pass a nonzero value
    for either CR_RANGE or CR_AREF for edge-up polarity, or a zero
    value for both CR_RANGE and CR_AREF if you want edge-down polarity.

Configuration Options:
  [0] - I/O port base address
  [1] - IRQ (optional -- for edge-detect interrupt support only, leave out if you don't need this feature)




  

5.6.96.  pcmuio -- A driver for the PCM-UIO48A and PCM-UIO96A boards from Winsystems.

Author: Calin Culianu <calin@ajvar.org>

Status: works

ManufacturerDeviceName
Winsystems PCM-UIO48A pcmuio48
Winsystems PCM-UIO96A pcmuio96

A driver for the relatively straightforward-to-program PCM-UIO48A and
PCM-UIO96A boards from Winsystems.  These boards use either one or two
(in the 96-DIO version) WS16C48 ASIC HighDensity I/O Chips (HDIO).
This chip is interesting in that each I/O line is individually
programmable for INPUT or OUTPUT (thus comedi_dio_config can be done
on a per-channel basis).  Also, each chip supports edge-triggered
interrupts for the first 24 I/O lines.  Of course, since the
96-channel version of the board has two ASICs, it can detect polarity
changes on up to 48 I/O lines.  Since this is essentially an (non-PnP)
ISA board, I/O Address and IRQ selection are done through jumpers on
the board.  You need to pass that information to this driver as the
first and second comedi_config option, respectively.  Note that the
48-channel version uses 16 bytes of IO memory and the 96-channel
version uses 32-bytes (in case you are worried about conflicts).  The
48-channel board is split into two 24-channel comedi subdevices.
The 96-channel board is split into 4 24-channel DIO subdevices.

Note that IRQ support has been added, but it is untested.

To use edge-detection IRQ support, pass the IRQs of both ASICS
(for the 96 channel version) or just 1 ASIC (for 48-channel version).
Then, use use comedi_commands with TRIG_NOW.
Your callback will be called each time an edge is triggered, and the data
values will be two sample_t's, which should be concatenated to form one
32-bit unsigned int.  This value is the mask of channels that had
edges detected from your channel list.  Note that the bits positions
in the mask correspond to positions in your chanlist when you specified
the command and *not* channel id's!

To set the polarity of the edge-detection interrupts pass a nonzero value for
either CR_RANGE or CR_AREF for edge-up polarity, or a zero value for both
CR_RANGE and CR_AREF if you want edge-down polarity.

In the 48-channel version:

On subdev 0, the first 24 channels channels are edge-detect channels.

In the 96-channel board you have the collowing channels that can do edge detection:

subdev 0, channels 0-24  (first 24 channels of 1st ASIC)
subdev 2, channels 0-24  (first 24 channels of 2nd ASIC)

Configuration Options:
  [0] - I/O port base address
  [1] - IRQ (for first ASIC, or first 24 channels)
  [2] - IRQ for second ASIC (pcmuio96 only - IRQ for chans 48-72 .. can be the same as first irq!)




  

5.6.97.  poc -- Generic driver for very simple devices

Author: ds

Status: unknown

ManufacturerDeviceName
Keithley Metrabyte DAC-02 dac02
Advantech PCL-733 pcl733
Advantech PCL-734 pcl734

This driver is indended to support very simple ISA-based devices,

Configuration options:
  [0] - I/O port base




  

5.6.98.  quatech_daqp_cs -- Quatech DAQP PCMCIA data capture cards

Author: Brent Baccala <baccala@freesoft.org>

Status: works

ManufacturerDeviceName
Quatech DAQP-208 daqp
Quatech DAQP-308 daqp




  

5.6.99.  rtd520 -- Real Time Devices PCI4520/DM7520

Author: Dan Christian

Status: Works. Only tested on DM7520-8. Not SMP safe.

ManufacturerDeviceName
Real Time Devices DM7520HR-1 rtd520
Real Time Devices DM7520HR-8 rtd520
Real Time Devices PCI4520 rtd520
Real Time Devices PCI4520-8 rtd520

Configuration options:
  [0] - PCI bus of device (optional)
          If bus/slot is not specified, the first available PCI
          device will be used.
  [1] - PCI slot of device (optional)




  

5.6.100.  rti800 -- Analog Devices RTI-800/815

Author: ds

Status: unknown

ManufacturerDeviceName
Analog Devices RTI-800 rti800
Analog Devices RTI-815 rti815

Configuration options:
  [0] - I/O port base address
  [1] - IRQ
  [2] - A/D reference
          0 = differential
          1 = pseudodifferential (common)
          2 = single-ended
  [3] - A/D range
          0 = [-10,10]
          1 = [-5,5]
          2 = [0,10]
  [4] - A/D encoding
          0 = two's complement
          1 = straight binary
  [5] - DAC 0 range
          0 = [-10,10]
          1 = [0,10]
  [6] - DAC 0 encoding
          0 = two's complement
          1 = straight binary
  [7] - DAC 1 range (same as DAC 0)
  [8] - DAC 1 encoding (same as DAC 0)




  

5.6.101.  rti802 -- Analog Devices RTI-802

Author: Anders Blomdell <anders.blomdell@control.lth.se>

Status: works

ManufacturerDeviceName
Analog Devices RTI-802 rti802

Configuration Options:
    [0] - i/o base
    [1] - unused
    [2] - dac#0  0=two's comp, 1=straight
    [3] - dac#0  0=bipolar, 1=unipolar
    [4] - dac#1 ...
    ...
    [17] - dac#7 ...




  

5.6.102.  s526 -- Sensoray 526 driver

Author: Richie Everett Wang <everett.wang@everteq.com>

Status: experimental

ManufacturerDeviceName
Sensoray 526 s526

Encoder works
Analog input works
Analog output works
PWM output works
Commands are not supported yet.

Configuration Options:

comedi_config /dev/comedi0 s526 0x2C0,0x3




  

5.6.103.  s626 -- Sensoray 626 driver

Author: Richie Everett Wang &lt;everett.wang&#64;everteq.com&gt;

Status: experimental

ManufacturerDeviceName
Sensoray 626 s626


Configuration options:
  [0] - PCI bus of device (optional)
  [1] - PCI slot of device (optional)
  If bus/slot is not specified, the first supported
  PCI device found will be used.

INSN_CONFIG instructions:
  analog input:
   none

  analog output:
   none

  digital channel:
   s626 has 3 dio subdevices (2,3 and 4) each with 16 i/o channels
   supported configuration options:
   INSN_CONFIG_DIO_QUERY
   COMEDI_INPUT
   COMEDI_OUTPUT

  encoder:
   Every channel must be configured before reading.

   Example code

   insn.insn=INSN_CONFIG;   //configuration instruction
   insn.n=1;                //number of operation (must be 1)
   insn.data=&initialvalue; //initial value loaded into encoder
                            //during configuration
   insn.subdev=5;           //encoder subdevice
   insn.chanspec=CR_PACK(encoder_channel,0,AREF_OTHER); //encoder_channel
                                                        //to configure

   comedi_do_insn(cf,&insn); //executing configuration




  

5.6.104.  serial2002 -- Driver for serial connected hardware

Author: Anders Blomdell

Status: in development





  

5.6.105.  skel -- Skeleton driver, an example for driver writers

Author: ds

Status: works



This driver is a documented example on how Comedi drivers are
written.

Configuration Options:
  none




  

5.6.106.  ssv_dnp -- SSV Embedded Systems DIL/Net-PC

Author: Robert Schwebel <robert@schwebel.de>

Status: unknown

ManufacturerDeviceName
SSV Embedded Systems DIL/Net-PC 1486 dnp-1486




  

5.6.107.  unioxx5 -- Driver for Fastwel UNIOxx-5 (analog and digital i/o) boards.

Author: Kruchinin Daniil (asgard) <asgard@etersoft.ru>

Status: unknown

ManufacturerDeviceName
Fastwel UNIOxx-5 unioxx5
Fastwel UNIOxx-5 unioxx5

 This card supports digital and analog I/O. It written for g01          
 subdevices only.                                                       
 channels range: 0 .. 23 dio channels                                   
 and 0 .. 11 analog modules range                                       
 During attaching unioxx5 module displays modules identifiers           
 (see dmesg after comedi_config) in format:                             
 | [module_number] module_id |                                          




  

5.6.108.  usbdux -- Driver for USB-DUX-D of INCITE Technology Limited

Author: Bernd Porr <tech@linux-usb-daq.co.uk>

Status: Stable

ManufacturerDeviceName
ITL USB-DUX-D usbdux


The following subdevices are available
  - Analog input
    subdevice: 0
    number of channels: 8
    max data value: 4095
    ranges:
      all channels: 
        range = 0 : [-4.096 V,4.096 V] 
        range = 1 : [-2.048 V,2.048 V] 
        range = 2 : [0 V,4.096 V] 
        range = 3 : [0 V,2.048 V]
    command:
      start: now|int
      scan_begin: timer (contains the sampling interval. min is 125us / chan)
      convert: now
      scan_end: count
      stop: none|count
  - Analogue output:
    subdevice: 1
    number of channels: 4
    max data value: 4095
    ranges:
      all channels: 
        range = 0 : [-4.096 V,4.096 V] 
        range = 1 : [0 V,4.096 V]
    command:
      start: now|int
      scan_begin: timer (contains the sampling interval. min is 1ms.)
      convert: now
      scan_end: count
      stop: none|count
  - Digital I/O
    subdevice: 2
    number of channels: 8
  - Counter
    subdevice: 3
    number of channels: 4
    max data value: 65535
    Pin assignments on the D-connector:
      0=/CLK0, 1=UP/DOWN0, 2=RESET0, 4=/CLK1, 5=UP/DOWN1, 6=RESET1
  - PWM
    subdevice: 4
    number of channels: 8 or 4 + polarity output for H-bridge
                             (see INSN_CONFIG_PWM_SET_H_BRIDGE where
                              the first byte is the value and the
                              second the polarity)
    max data value: 512

Configuration options
  The device requires firmware which is usually
  uploaded automatically by udev/hotplug at the moment
  the driver module is loaded.
  In case udev/hotplug is not enabled you need to upload 
  the firmware with comedi_config -i usbdux_firmware.bin.
  The firmware is usually installed under /lib/firmware
  or can be downloaded form http://www.linux-usb-daq.co.uk.




  

5.6.109.  usbduxfast -- Driver for USB-DUX-FAST of INCITE Technology Limited

Author: Bernd Porr <tech@linux-usb-daq.co.uk>

Status: stable

ManufacturerDeviceName
ITL USB-DUX-FAST usbduxfast

The device has one subdevice for analogue input.
  - subdevice: 0
    number of channels: 16
    max data value: 4096
    ranges:
      all channelss: 
        range = 0 : [-0.75 V,0.75 V] 
        range = 1 : [-0.5 V,0.5 V]
    command:
      The channel-list allows 1,2,3 and 16 channels.
      start: now|ext|int (external trigger via pin at HD-D connector)
      scan_begin: follow|timer|ext
      convert: timer|ext (contains the sampling interval. Min interval
                          for single channel acquisition is 33us 
                          and for multiplexed acquisition 300us)
      scan_end: count
      stop: none|count

Configuration options:
  The device requires firmware which is usually
  uploaded automatically by udev/hotplug at the moment
  the driver module is being loaded.
  In case udev/hotplug is not enabled you need to upload 
  the firmware with comedi_config -i usbduxfast_firmware.bin
  The firmware is usually installed under /lib/firmware
  or can be downloaded form http://www.linux-usb-daq.co.uk.




  

5.6.110.  usbduxsigma -- Driver for USB-DUX-SIGMA of INCITE Technology Limited

Author: Bernd Porr <tech@linux-usb-daq.co.uk>

Status: Stable

ManufacturerDeviceName
ITL USB-DUX-SIGMA usbduxsigma

The following subdevices are available
  - Analog input
    subdevice: 0
    number of channels: 16
    max data value: 16777215 (0xfffff, 24bits)
    ranges:
      all channels: [-1.325 V,1.325 V]
    command:
      start: now|int
      scan_begin: timer (contains the sampling interval. min 250us)
      convert: now
      scan_end: count
      stop: none|count
  - Analog output
    subdevice: 1
    number of channels: 4
    max data value: 255
    ranges:
      all channels: [0 V,2.5 V]
    command:
      start: now|int
      scan_begin: timer (contains the sampling interval. min 1ms)
      convert: now
      scan_end: count
      stop: none|count
  - Digital I/O
    subdevice: 2
    number of channels: 24 (first 8 bits on the D connector, 16 bits int.)
  - PWM
    subdevice: 3
    number of channels: 8 or 4 + polarity output for H-bridge
                             (see INSN_CONFIG_PWM_SET_H_BRIDGE where
                              the first byte is the value and the
                              second the polarity)
    max data value: 512

Configuration options:
  The device requires firmware which is usually
  uploaded automatically by udev/hotplug at the moment
  the driver module is loaded.
  In case udev/hotplug is not enabled you need to upload 
  the firmware with comedi_config -i usbdux_firmware.bin.
  The firmware is usually installed under /lib/firmware
  or can be downloaded form http://www.linux-usb-daq.co.uk.




  
comedilib-0.11.0/doc/doc_html/func-ref-comedi-command.html0000644000000000000000000000660413105043775020225 00000000000000comedi_command

Name

comedi_command — start streaming input/output

Synopsis

#include <comedilib.h>
int comedi_command(comedi_t * device,
 comedi_cmd * command);
 

Description

The function comedi_command starts a streaming input or output. The command structure pointed to by command specifies settings for the acquisition. The command must be able to pass comedi_command_test with a return value of 0, or comedi_command will fail. For input subdevices, sample values are read using the function read on the device file descriptor. For output subdevices, sample values are written using the function write.

Return value

On success, 0 is returned. On failure, -1 is returned.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-from-physical.html0000644000000000000000000000742213105043775021363 00000000000000comedi_from_physical

Name

comedi_from_physical — convert physical units to sample using calibration data

Synopsis

#include <comedilib.h>
lsampl_t comedi_from_physical(double data,
 const comedi_polynomial_t * conversion_polynomial);
 

Description

Converts data given in physical units into Comedi's integer sample values (lsampl_t, between 0 and maxdata — see comedi_get_maxdata). The conversion_polynomial parameter is obtained from either comedi_get_hardcal_converter or comedi_get_softcal_converter. The allows non linear and board specific correction. The result will be rounded using the C library's current rounding direction. No range checking of the input data is performed. It is up to you to ensure your data is within the limits of the output range you are using.

Return value

Comedi sample value corresponding to input physical value.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-set-gate-source.html0000644000000000000000000000771013105043776021616 00000000000000comedi_set_gate_source

Name

comedi_set_gate_source — select gate source for a subdevice

Synopsis

#include <comedilib.h>
int comedi_set_gate_source(comedi_t * device,
 unsigned int subdevice,
 unsigned int channel,
 unsigned int gate_index,
 unsigned int gate_source);
 

Status

alpha

Description

This function selects a gate source for a subdevice. The gate_index parameter selects which gate is being configured, should the subdevice have multiple gates. It takes a value from 0 to N-1 for a subdevice with N different gates. The gate_source parameter selects which signal you wish to use as the gate, and is also driver-dependent. If the subdevice does not support configuring its gates on a per-channel basis, then the channel parameter will be ignored.

You may query the gate source with the comedi_get_gate_source function. This function is only useable on subdevices that provide support for the INSN_CONFIG_SET_GATE_SRC configuration instruction.

Return value

0 on success, -1 on error.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-set-routing.html0000644000000000000000000000706413105043776021071 00000000000000comedi_set_routing

Name

comedi_set_routing — select a routing for an output

Synopsis

#include <comedilib.h>
int comedi_set_routing(comedi_t * device,
 unsigned int subdevice,
 unsigned int channel,
 unsigned int routing);
 

Status

alpha

Description

This function configures a mutiplexed output channel which can output a variety of different signals (such as NI's RTSI and PFI lines). The routing parameter selects which signal should be routed to appear on the selected output channel, and is driver-dependant.

The routing may be queried with the comedi_get_routing function. This function is only useable on subdevices that provide support for the INSN_CONFIG_SET_ROUTING configuration instruction.

Return value

0 on success, -1 on error.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-arm.html0000644000000000000000000000676713105043776017401 00000000000000comedi_arm

Name

comedi_arm — arm a subdevice

Synopsis

#include <comedilib.h>
int comedi_arm(comedi_t * device,
 unsigned int subdevice,
 unsigned int source);
 

Status

alpha

Description

This function arms a subdevice. It may, for example, arm a counter to begin counting. The source parameter specifies what source should trigger the subdevice to begin. The possible sources are driver-dependant. This function is only useable on subdevices that provide support for the INSN_CONFIG_ARM configuration instruction. Some subdevices treat this as an instruction to arm a specific channel. For those subdevices, this function will arm channel 0 and comedi_arm_channel should be called instead of this one to specify the channel.

Return value

0 on success, -1 on error.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-digital-trigger-enable-levels.html0000644000000000000000000001222113105043776024372 00000000000000comedi_digital_trigger_enable_levels

Name

comedi_digital_trigger_enable_levels — set digital trigger level detection

Synopsis

#include <comedilib.h>
int comedi_digital_trigger_enable_levels(comedi_t * device,
 unsigned int subdevice,
 unsigned int trigger_id,
 unsigned int base_input,
 unsigned int high_level_inputs,
 unsigned int low_level_inputs);
 

Status

alpha

Description

This function enables level detection for a digital trigger on a subdevice. If the subdevice supports several digital triggers, the trigger_id selects one. The high_level_inputs and low_level_inputs parameters are bit fields that enable (1) or disable (0) high and low level detection on a set of (up to) 32 inputs. The least-significant bit corresponds to the input specified by the base_input parameter, with subsequent bits corresponding to subsequent inputs.

Successive calls to this function have an cumulative effect, which allows digital triggers to be set up for more than 32 inputs. There may also be a cumulative effect with calls to comedi_digital_trigger_enable_edges if the digital trigger supports a combination of edge and level triggering. Due to the cumulative effect, it may be necessary to call comedi_digital_trigger_disable to clear the old settings before reconfiguring the digital trigger inputs.

A digital trigger may support edge detection, level detection, both at different times, or both at the same time. If it supports both but not at the same time, configuring level triggers will disable any previous edge triggers, or vice versa.

This function is only useable on subdevices that provide support for the INSN_CONFIG_DIGITAL_TRIG configuration instruction, and only if the digital trigger supports level detection.

Return value

0 on success, -1 on error.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-to-phys.html0000644000000000000000000000772313105043775020215 00000000000000comedi_to_phys

Name

comedi_to_phys — convert sample to physical units

Synopsis

#include <comedilib.h>
double comedi_to_phys(lsampl_t data,
 comedi_range * range,
 lsampl_t maxdata);
 

Description

Converts parameter data given in sample values (lsampl_t, between 0 and maxdata) into physical units (double). The parameter range represents the conversion information to use, and the parameter maxdata represents the maximum possible data value for the channel that the data was read. The mapping between physical units is linear and assumes ideal converter characteristics.

Conversion of endpoint sample values, that is, sample values equal to 0 or maxdata, is affected by the Comedilib out-of-range behavior (see function comedi_set_global_oor_behavior). If the out-of-range behavior is set to COMEDI_OOR_NAN, endpoint values are converted to NAN. If the out-of-range behavior is set to COMEDI_OOR_NUMBER, the endpoint values are converted similarly to other values.

If there is an error, NAN is returned.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-get-buffer-read-count.html0000644000000000000000000000647413105043775022701 00000000000000comedi_get_buffer_read_count

Name

comedi_get_buffer_read_count — streaming buffer read count

Synopsis

#include <comedilib.h>
int comedi_get_buffer_read_count(comedi_t * device,
 unsigned int subdevice,
 unsigned int * read_count);
 

Description

The function comedi_get_buffer_read_count is used on a subdevice that has a Comedi command in progress to get the number of bytes that have been read from the buffer, modulo UINT_MAX + 1. The value is stored in *read_count.

Return value

On success, 0 is returned. On failure, -1 is returned.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-perror.html0000644000000000000000000000721213105043776020115 00000000000000comedi_perror

Name

comedi_perror — print a Comedilib error message

Synopsis

#include <comedilib.h>
void comedi_perror(const char * s);
 

Description

When a Comedilib function fails, it usually returns -1 or NULL, depending on the return type. An internal library variable stores an error number, which can be retrieved with comedi_errno. This error number can be converted to a human-readable form by the functions comedi_perror or comedi_strerror.

These functions are intended to mimic the behavior of the standard C library functions perror, strerror, and errno. In particular, Comedilib functions sometimes return an error that is generated inside the C library; the comedi error message in this case is the same as the C library.

The function comedi_perror prints an error message to the standard error output stream stderr. The error message consists of the argument string s, a colon, a space, a description of the error condition, and a new line.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-apply-calibration.html0000644000000000000000000001460013105043776022215 00000000000000comedi_apply_calibration

Name

comedi_apply_calibration — set hardware calibration from file

Synopsis

#include <comedilib.h>
int comedi_apply_calibration(comedi_t * device,
 unsigned int subdevice,
 unsigned int channel,
 unsigned int range,
 unsigned int aref,
 const char * file_path);
 

Status

alpha

Description

The function comedi_apply_calibration sets the hardware calibration for the subdevice specified by device and subdevice so that it is in proper calibration when using the channel specified by channel, range index specified by range and analog reference specified by aref. It does so by performing writes to the appropriate channels of the board's calibration subdevice(s). Depending on the hardware, the calibration settings used may or may not depend on the channel, range, or analog reference. Furthermore, the calibrations appropriate for different channel, range, and analog reference parameters may not be able to be applied simultaneously. For example, some boards cannot have their analog inputs calibrated for more than one input range simultaneously. Applying a calibration for range 1 may blow away a previously applied calibration for range 0. Or, applying a calibration for analog input channel 0 may cause the same calibration to be applied to all the other analog input channels as well. Your only guarantee is that calls to comedi_apply_calibration on different subdevices will not interfere with each other.

In practice, their are some rules of thumb on how calibrations behave. No calibrations depend on the analog reference. A multiplexed analog input will have calibration settings that do not depend on the channel, and applying a setting for one channel will affect all channels equally. Analog outputs, and analog inputs with independent a/d converters for each input channel, will have calibration settings which do depend on the channel, and the settings for each channel will be independent of the other channels.

If you wish to investigate exactly what comedi_apply_calibration is doing, you can perform reads on your board's calibration subdevice to see which calibration channels it is changing. You can also try to decipher the calibration file directly (it's a text file).

The file_path parameter can be used to specify the file which contains the calibration information. If file_path is NULL, then Comedilib will use a default file location. The calibration information used by this function is generated by the comedi_calibrate program (see its man page).

The functions comedi_parse_calibration_file, comedi_apply_parsed_calibration, and comedi_cleanup_calibration provide the same functionality at a slightly lower level.

Return value

Returns 0 on success, -1 on failure.

comedilib-0.11.0/doc/doc_html/datatypesstructures.html0000644000000000000000000004466313105043775020017 000000000000005.3.  Data types and structures

5.3.  Data types and structures

This Section explains the data structures that users of the Comedi API are confronted with:

typedef struct comedi_devinfo_struct  comedi_devinfo;
typedef struct comedi_t_struct        comedi_t;
typedef struct sampl_t_struct         sampl_t;
typedef struct lsampl_t_struct        lsampl_t;
typedef struct comedi_sv_t_struct     comedi_sv_t;
typedef struct comedi_cmd_struct      comedi_cmd;
typedef struct comedi_insn_struct     comedi_insn;
typedef struct comedi_range_struct    comedi_range;
typedef struct comedi_krange_struct   comedi_krange;
typedef struct comedi_insnlist_struct comedi_insnlist;

The data structures used in the implementation of the Comedi drivers are described in Section 6.2.1.

5.3.1.  comedi_devinfo

The data type comedi_devinfo is used to store information about a device. This structure is usually filled in automatically when the driver is loaded (“attachedâ€), so programmers need not access this data structure directly.

typedef struct comedi_devinfo_struct comedi_devinfo;

struct comedi_devinfo_struct{
  unsigned int version_code;    // version number of the Comedi code
  unsigned int n_subdevs;       // number of subdevices on this device
  char         driver_name[COMEDI_NAMELEN];
  char         board_name[COMEDI_NAMELEN];
  int          read_subdevice;  // index of subdevice whose buffer is read by read(), etc. on file descriptor from comedi_fileno() (negative means none)
  int          write_subdevice; // index of subdevice whose buffer is written by write(), etc. on file descriptor from comedi_fileno() (negatove means none).
  int          unused[30];
};

5.3.2.  comedi_t

The data type comedi_t is used to represent an open Comedi device:

typedef struct comedi_t_struct comedi_t;

A valid comedi_t pointer is returned by a successful call to comedi_open, and should be used for subsequent access to the device. It is an opaque type, and pointers to type comedi_t should not be dereferenced by the application.

5.3.3.  sampl_t

typedef unsigned short sampl_t;

The data type sampl_t is one of the generic types used to represent data values in Comedilib. It is used in a few places where a data type shorter than lsampl_t is useful. On most architectures it is a 16-bit, unsigned integer.

Most drivers represent data transferred by read and write functions using sampl_t. Applications should check the subdevice flag SDF_LSAMPL to determine if the subdevice uses sampl_t or lsampl_t.

5.3.4.  lsampl_t

typedef unsigned int lsampl_t;

The data type lsampl_t is the data type typically used to represent data values in Comedilib. On most architectures it is a 32-bit, unsigned integer.

5.3.5.  comedi_trig (deprecated)

typedef struct comedi_trig_struct comedi_trig;

struct comedi_trig_struct{
  unsigned int subdev;   /* subdevice */
  unsigned int mode;  /* mode */
  unsigned int flags;
  unsigned int n_chan;  /* number of channels */
  unsigned int *chanlist;   /* channel/range list */
  sampl_t *data;  /* data list, size depends on subd flags */
  unsigned int n;  /* number of scans */
  unsigned int trigsrc;
  unsigned int trigvar;
  unsigned int trigvar1;
  unsigned int data_len;
  unsigned int unused[3];
};

The comedi_trig structure is a control structure used by the COMEDI_TRIG ioctl, an older method of communicating instructions to the driver and hardware. Use of comedi_trig is deprecated, and is no longer implemented by the Comedi kernel layer.

5.3.6.  comedi_sv_t (deprecated)

typedef struct comedi_sv_struct comedi_sv_t;

struct comedi_sv_struct{
  comedi_t *dev;
  unsigned int subdevice;
  unsigned int chan;

  /* range policy */
  int range;
  int aref;

  /* number of measurements to average (for ai) */
  int n;

  lsampl_t maxdata;
};

The comedi_sv_t structure is used by the comedi_sv_… functions to provide a simple method of accurately measuring slowly varying inputs. This relies on the COMEDI_TRIG ioctl and is no longer by the Comedi kernel layer.

5.3.7.  comedi_cmd

typedef struct comedi_cmd_struct comedi_cmd;

struct comedi_cmd_struct{
  unsigned int subdev;
  unsigned int flags;

  unsigned int start_src;
  unsigned int start_arg;

  unsigned int scan_begin_src;
  unsigned int scan_begin_arg;

  unsigned int convert_src;
  unsigned int convert_arg;

  unsigned int scan_end_src;
  unsigned int scan_end_arg;

  unsigned int stop_src;
  unsigned int stop_arg;

  unsigned int *chanlist;
  unsigned int chanlist_len;

  sampl_t *data;
  unsigned int data_len;
};

More information on using commands can be found in the command section.

5.3.8.  comedi_insn

typedef struct comedi_insn_struct comedi_insn;

struct comedi_insn_struct{
  unsigned int insn;
  unsigned int n;
  lsampl_t*data;
  unsigned int subdev;
  unsigned int chanspec;
  unsigned int unused[3];
};

Comedi instructions are described by the comedi_insn structure. Applications send instructions to the driver in order to perform control and measurement operations that are done immediately or synchronously, i.e., the operations complete before program control returns to the application. In particular, instructions cannot describe acquisition that involves timers or external events.

The field insn determines the type of instruction that is sent to the driver. Valid instruction types are:

INSN_READ

read values from an input channel

INSN_WRITE

write values to an output channel

INSN_BITS

read/write values on multiple digital I/O channels

INSN_CONFIG

configure a subdevice

INSN_GTOD

read a timestamp, identical to gettimeofday except the seconds and microseconds values are unsigned values of type lsampl_t.

INSN_WAIT

wait a specified number of nanoseconds

The number of samples to read or write, or the size of the configuration structure is specified by the field n, and the buffer for those samples by data. The field subdev is the subdevice index that the instruction is sent to. The field chanspec specifies the channel, range, and analog reference (if applicable).

Instructions can be sent to drivers using comedi_do_insn. Multiple instructions can be sent to drivers in the same system call using comedi_do_insnlist.

5.3.9.  comedi_range

typedef struct comedi_range_struct comedi_range;

struct comedi_range_struct{
  double min;
  double max;
  unsigned int unit;
}comedi_range;

The comedi_range structure conveys part of the information necessary to translate sample values to physical units, in particular, the endpoints of the range and the physical unit type. The physical unit type is specified by the field unit, which may take the values UNIT_volt for volts, UNIT_mA for milliamps, or UNIT_none for unitless. The endpoints are specified by the fields min and max.

5.3.10.  comedi_krange

typedef struct comedi_krange_struct comedi_krange;

struct comedi_krange_struct{
  int min;
  int max;
  unsigned int flags;
};

The comedi_krange structure is used to transfer range information between the driver and Comedilib, and should not normally be used by applications. The structure conveys the same information as the comedi_range structure, except the fields min and max are integers, multiplied by a factor of 1000000 compared to the counterparts in comedi_range.

In addition, kcomedilib uses the comedi_krange structure in place of the comedi_range structure.

5.3.11.  comedi_insnlist

typedef struct comedi_insnlist_struct comedi_insnlist;

struct comedi_insnlist_struct{
  unsigned int n_insns;
  comedi_insn *insns;
};

A comedi_insnlist structure is used to communicate a list of instructions to the driver using the comedi_do_insnlist function.

5.3.12.  comedi_polynomial_t

#define COMEDI_MAX_NUM_POLYNOMIAL_COEFFICIENTS 4
typedef struct {
  double coefficients[COMEDI_MAX_NUM_POLYNOMIAL_COEFFICIENTS];
  double expansion_origin;
  unsigned order;
} comedi_polynomial_t;

A comedi_polynomial_t holds calibration data for a channel of a subdevice. It is initialized by the comedi_get_hardcal_converter or comedi_get_softcal_converter calibration functions and is passed to the comedi_to_physical and comedi_from_physical raw/physical conversion functions.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-get-buffer-write-count.html0000644000000000000000000000643113105043775023111 00000000000000comedi_get_buffer_write_count

Name

comedi_get_buffer_write_count — streaming buffer write count

Synopsis

#include <comedilib.h>
int comedi_get_buffer_write_count(comedi_t * device,
 unsigned int subdevice,
 unsigned int * write_count);
 

Description

The function comedi_get_buffer_write_count is used on a subdevice that has a Comedi command in progress to get the number of bytes that have been written to the buffer, modulo UINT_MAX + 1. The value is stored in *write_count.

Return value

On success, 0 is returned. On failure, -1 is returned.

comedilib-0.11.0/doc/doc_html/asyncprogram.html0000644000000000000000000003512113105043774016346 000000000000003.4.  Asynchronous acquisition

3.4.  Asynchronous acquisition

Of special importance is the so called "asynchronous data acquisition" where Comedi is sampling in the background at a given sample rate. The user can retrieve the data whenever it is convenient. Comedi stores the data in a ring-buffer so that programs can perform other tasks in the foreground, for example plotting data or interacting with the user. This technique is used in programs such as ktimetrace or comedirecord.

There are two different ways how a sequence of channels is measured during asynchronous acquisition (see also the Figure in the introduction):

  • The channels are measured with the help of a multiplexer which switches to the next channel after each measurement. This means that the sampling rate is divided by the number of channels.
  • The channels are all measured at the same time, for example when every channel has its own converter. In this case the sampling rate need not to be divided by the number of channels.

How your Comedi device handles the asynchronous acquisition can be found out with the command comedi_board_info -v.

The program demo/tut3.c demonstrates the asynchronous acquisition. The general strategy is always the same: first, we tell Comedi all sampling parameters such as the sampling rate, the number of channels and anything it needs to know so that it can run independently in the background. Then Comedi checks our request and it might modify it. For example we might want to have a sampling rate of 16kHz but we only get 1kHz. Finally we can start the asynchronous acquisition. Once it has been started we need to check periodically if data is available and request it from Comedi so that its internal buffer won't overrun.

In summary the asynchonous acquisition is performed in the following way:

  • Create a command structure of type comedi_cmd
  • Call the function comedi_get_cmd_generic_timed to fill the command structure with your comedi device, subdevice, sampling rate and number of channels.
  • Create a channel-list and store it in the command structure. This tells comedi which channels should be sampled in the background.
  • Call comedi_command_test with your command structure. Comedi might modify your requested sampling rate and channels.
  • Call comedi_command_test again which now should return zero for success.
  • Call comedi_command to start the asynchronous acquisition. From now on the kernel ringbuffer will be filled at the specified sampling rate.
  • Call periodically the standard function read and receive the data. The result should always be non zero as long as the acquisition is running.
  • Convert the received data either into lsampl_t or sampl_t depending on the subdevice flag SDF_LSAMPL.
  • Poll for data with read as long as it returns a positive result or until the program terminates.

The program below is a stripped down version of the program cmd.c in the demo directory. It requests data from two channels at a sampling rate of 1kHz and a total of 10000 samples. which are then printed to stdout. You can pipe the data into a file and plot it with gnuplot. As mentioned above, central in this program is the loop using the standard C read command which receives the buffer contents.

      /*
 * Example of using commands - asynchronous input
 * Part of Comedilib
 *
 * Copyright (c) 1999,2000,2001 David A. Schleef <ds@schleef.org>
 *               2008 Bernd Porr <berndporr@f2s.com>
 *
 * This file may be freely modified, distributed, and combined with
 * other software, as long as proper attribution is given in the
 * source code.
 */

#include <stdio.h>
#include <comedilib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/time.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>

extern comedi_t *device;

struct parsed_options {
	char *filename;
	double value;
	int subdevice;
	int channel;
	int aref;
	int range;
	int verbose;
	int n_chan;
	int n_scan;
	double freq;
};



#define BUFSZ 10000
char buf[BUFSZ];

#define N_CHANS 256
static unsigned int chanlist[N_CHANS];
static comedi_range * range_info[N_CHANS];
static lsampl_t maxdata[N_CHANS];


int prepare_cmd_lib(comedi_t *dev, int subdevice, int n_scan,
		    int n_chan, unsigned period_nanosec,
		    comedi_cmd *cmd);

void do_cmd(comedi_t *dev,comedi_cmd *cmd);

void print_datum(lsampl_t raw, int channel_index);

char *cmdtest_messages[] = {
	"success",
	"invalid source",
	"source conflict",
	"invalid argument",
	"argument conflict",
	"invalid chanlist",
};

int main(int argc, char *argv[])
{
	comedi_t *dev;
	comedi_cmd c,*cmd = &c;
	int ret;
	int total = 0;
	int col;
	int i;
	int subdev_flags;
	lsampl_t raw;

	struct parsed_options options;

	memset(&options, 0, sizeof(options));
	options.filename = "/dev/comedi0";
	options.subdevice = 0;
	options.channel = 0;
	options.range = 0;
	options.aref = AREF_GROUND;
	options.n_chan = 2;
	options.n_scan = 10000;
	options.freq = 1000.0;

	/* open the device */
	dev = comedi_open(options.filename);
	if (!dev) {
		comedi_perror(options.filename);
		exit(1);
	}

	/* Print numbers for clipped inputs */
	comedi_set_global_oor_behavior(COMEDI_OOR_NUMBER);

	/* Set up channel list */
	for (i = 0; i < options.n_chan; i++) {
		chanlist[i] =
			CR_PACK(options.channel + i, options.range,
				options.aref);
		range_info[i] =
			comedi_get_range(dev, options.subdevice,
					 options.channel, options.range);
		maxdata[i] =
			comedi_get_maxdata(dev, options.subdevice,
					   options.channel);
	}

	/* prepare_cmd_lib() uses a Comedilib routine to find a
	 * good command for the device.  prepare_cmd() explicitly
	 * creates a command, which may not work for your device. */
	prepare_cmd_lib(dev, options.subdevice, options.n_scan,
			options.n_chan, 1e9 / options.freq, cmd);

	/* comedi_command_test() tests a command to see if the
	 * trigger sources and arguments are valid for the subdevice.
	 * If a trigger source is invalid, it will be logically ANDed
	 * with valid values (trigger sources are actually bitmasks),
	 * which may or may not result in a valid trigger source.
	 * If an argument is invalid, it will be adjusted to the
	 * nearest valid value.  In this way, for many commands, you
	 * can test it multiple times until it passes.  Typically,
	 * if you can't get a valid command in two tests, the original
	 * command wasn't specified very well. */
	ret = comedi_command_test(dev, cmd);
	if (ret < 0) {
		comedi_perror("comedi_command_test");
		if(errno == EIO){
			fprintf(stderr,
				"Ummm... this subdevice doesn't support commands\n");
		}
		exit(1);
	}
	ret = comedi_command_test(dev, cmd);
	if (ret < 0) {
		comedi_perror("comedi_command_test");
		exit(1);
	}
	fprintf(stderr,"second test returned %d (%s)\n", ret,
		cmdtest_messages[ret]);
	if (ret != 0) {
		fprintf(stderr, "Error preparing command\n");
		exit(1);
	}

	/* comedi_set_read_subdevice() attempts to change the current
	 * 'read' subdevice to the specified subdevice if it is
	 * different.  Changing the read or write subdevice might not be
	 * supported by the version of Comedi you are using.  */
	comedi_set_read_subdevice(dev, cmd->subdev);
	/* comedi_get_read_subdevice() gets the current 'read'
	 * subdevice. if any.  This is the subdevice whose buffer the
	 * read() call will read from.  Check that it is the one we want
	 * to use.  */
	ret = comedi_get_read_subdevice(dev);
	if (ret < 0 || ret != cmd->subdev) {
		fprintf(stderr,
			"failed to change 'read' subdevice from %d to %d\n",
			ret, cmd->subdev);
		exit(1);
	}

	/* start the command */
	ret = comedi_command(dev, cmd);
	if (ret < 0) {
		comedi_perror("comedi_command");
		exit(1);
	}
	subdev_flags = comedi_get_subdevice_flags(dev, options.subdevice);
	col = 0;
	while (1) {
		ret = read(comedi_fileno(dev),buf,BUFSZ);
		if (ret < 0) {
			/* some error occurred */
			perror("read");
			break;
		} else if (ret == 0) {
			/* reached stop condition */
			break;
		} else {
			int bytes_per_sample;

			total += ret;
			if (options.verbose) {
				fprintf(stderr, "read %d %d\n", ret,
					total);
			}
			if (subdev_flags & SDF_LSAMPL) {
				bytes_per_sample = sizeof(lsampl_t);
			} else {
				bytes_per_sample = sizeof(sampl_t);
			}
			for (i = 0; i < ret / bytes_per_sample; i++) {
				if (subdev_flags & SDF_LSAMPL) {
					raw = ((lsampl_t *)buf)[i];
				} else {
					raw = ((sampl_t *)buf)[i];
				}
				print_datum(raw, col);
				col++;
				if (col == options.n_chan) {
					printf("\n");
					col=0;
				}
			}
		}
	}

	return 0;
}

/*
 * This prepares a command in a pretty generic way.  We ask the
 * library to create a stock command that supports periodic
 * sampling of data, then modify the parts we want.
 */
int prepare_cmd_lib(comedi_t *dev, int subdevice, int n_scan,
		    int n_chan, unsigned scan_period_nanosec,
		    comedi_cmd *cmd)
{
	int ret;

	memset(cmd,0,sizeof(*cmd));

	/* This comedilib function will get us a generic timed
	 * command for a particular board.  If it returns -1,
	 * that's bad. */
	ret = comedi_get_cmd_generic_timed(dev, subdevice, cmd, n_chan,
					   scan_period_nanosec);
	if (ret < 0) {
		fprintf(stderr,
			"comedi_get_cmd_generic_timed failed\n");
		return ret;
	}

	/* Modify parts of the command */
	cmd->chanlist = chanlist;
	cmd->chanlist_len = n_chan;
	if (cmd->stop_src == TRIG_COUNT) {
		cmd->stop_arg = n_scan;
	}

	return 0;
}

void print_datum(lsampl_t raw, int channel_index)
{
	double physical_value;

	physical_value = comedi_to_phys(raw, range_info[channel_index],
					maxdata[channel_index]);
	printf("%#8.6g ", physical_value);
}

    

The source code file for the above program can be found in Comedilib, at demo/tut3.c. You can compile the program using

      cc tut3.c -lcomedi -lm -o tut3
    

For advanced programmers the function comedi_get_buffer_contents is useful to check if there is actually data in the ringbuffer so that a call of read can be avoided for example when the data readout is called by a timer call-back function.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-get-cmd-generic-timed.html0000644000000000000000000000777013105043775022646 00000000000000comedi_get_cmd_generic_timed

Name

comedi_get_cmd_generic_timed — streaming input/output capabilities

Synopsis

#include <comedilib.h>
int comedi_get_cmd_generic_timed(comedi_t * device,
 unsigned int subdevice,
 comedi_cmd * command,
 unsigned int chanlist_len,
 unsigned int scan_period_ns);
 

Description

The command capabilities of the subdevice indicated by the parameters device and subdevice are probed, and the results placed in the command structure pointed to by the parameter command. The command structure pointed to by command is modified to be a valid command that can be used as a parameter to comedi_command (after the command has additionally been assigned a valid chanlist array). The command measures scans consisting of chanlist_len channels at a scan rate that corresponds to a period of scan_period_ns nanoseconds. The rate is adjusted to a rate that the device can handle.

Return value

On success, 0 is returned. On failure, -1 is returned.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-internal-trigger.html0000644000000000000000000000725413105043775022066 00000000000000comedi_internal_trigger

Name

comedi_internal_trigger — generate soft trigger

Synopsis

#include <comedilib.h>
int comedi_internal_trigger(comedi_t * device,
 unsigned int subdevice,
 unsigned int trig_num);
 

Description

This function sends an INSN_INTTRIG instruction to a subdevice, which causes an internal triggering event. This event can, for example, trigger a subdevice to start an asynchronous command.

The trig_num parameter is reserved for future use, and should be set to 0. It is likely it will be used in the future to support multiple independent internal triggers. For example, an asynchronous command might be specified for a subdevice with a start_src of TRIG_INT, and a start_arg of 5. Then the start event would only be triggered if comedi_internal_trigger were called on the subdevice with a trig_num equal to the same value of 5.

Return value

0 on success, -1 on error.

comedilib-0.11.0/doc/doc_html/secondprogram.html0000644000000000000000000001100713105043774016501 000000000000003.3.  Your second Comedi program

3.3.  Your second Comedi program

Actually, this is the first Comedi program again, except we've added code to convert the integer data value to physical units.

      /*
 * Tutorial example #2
 * Part of Comedilib
 *
 * Copyright (c) 1999,2000 David A. Schleef <ds@schleef.org>
 * Copyright (c) 2008 Frank Mori Hess <fmhess@users.sourceforge.net>
 *
 * This file may be freely modified, distributed, and combined with
 * other software, as long as proper attribution is given in the
 * source code.
 */

#include <stdio.h>		/* for printf() */
#include <stdlib.h>
#include <comedilib.h>
#include <ctype.h>
#include <math.h>

int subdev = 0;			/* change this to your input subdevice */
int chan = 0;			/* change this to your channel */
int range = 0;			/* more on this later */
int aref = AREF_GROUND;		/* more on this later */
const char filename[] = "/dev/comedi0";

int main(int argc, char *argv[])
{
	comedi_t *device;
	lsampl_t data;
	double physical_value;
	int retval;
	comedi_range *range_info;
	lsampl_t maxdata;

	device = comedi_open(filename);
	if (device == NULL) {
		comedi_perror(filename);
		return 1;
	}

	retval = comedi_data_read(device, subdev, chan, range, aref,
				  &data);
	if (retval < 0) {
		comedi_perror(filename);
		return 1;
	}

	comedi_set_global_oor_behavior(COMEDI_OOR_NAN);
	range_info = comedi_get_range(device, subdev, chan, range);
	maxdata = comedi_get_maxdata(device, subdev, chan);
	printf("[0,%d] -> [%g,%g]\n", maxdata,
	       range_info->min, range_info->max);
	physical_value = comedi_to_phys(data, range_info, maxdata);
	if (isnan(physical_value)) {
		printf("Out of range [%g,%g]",
		       range_info->min, range_info->max);
	} else {
		printf("%g", physical_value);
		switch(range_info->unit) {
		case UNIT_volt: printf(" V"); break;
		case UNIT_mA: printf(" mA"); break;
		case UNIT_none: break;
		default: printf(" (unknown unit %d)",
				range_info->unit);
		}
		printf(" (%lu in raw units)\n", (unsigned long)data);
	}
	return 0;
}

    

The source code file for the above program can be found in the Comedilib source at demo/tut2.c and if installed as a package usually at /usr/share/doc/libcomedi-dev/demo/ with all the other tutorial/demo files.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-set-counter-mode.html0000644000000000000000000000662213105043776022002 00000000000000comedi_set_counter_mode

Name

comedi_set_counter_mode — change mode of a counter subdevice

Synopsis

#include <comedilib.h>
int comedi_set_counter_mode(comedi_t * device,
 unsigned int subdevice,
 unsigned int channel,
 unsigned int mode);
 

Status

alpha

Description

This function configures a counter subdevice. The meaning of the mode parameter is driver-dependent. If the subdevice does not support configuring its mode on a per-channel basis, then the channel parameter will be ignored.

It is only useable on subdevices that provide support for the INSN_CONFIG_SET_COUNTER_MODE configuration instruction.

Return value

0 on success, -1 on error.

comedilib-0.11.0/doc/doc_html/comedilib.css0000644000000000000000000000015012416542105015402 00000000000000/* give a light grey background */ .programlisting { background-color: WhiteSmoke; } comedilib-0.11.0/doc/doc_html/func-ref-comedi-mark-buffer-written.html0000644000000000000000000000712513105043775022501 00000000000000comedi_mark_buffer_written

Name

comedi_mark_buffer_written — streaming buffer control

Synopsis

#include <comedilib.h>
int comedi_mark_buffer_written(comedi_t * device,
 unsigned int subdevice,
 unsigned int num_bytes);
 

Description

The function comedi_mark_buffer_written is used on a subdevice that has a Comedi output command in progress. It should only be used if you are using a mmap mapping to write data to Comedi's buffer (as opposed to calling write on the device file descriptor), since Comedi will automatically keep track of how many bytes have been transferred via write calls. This function is used to indicate that the next num_bytes bytes in the buffer are valid and may be sent to the device.

Return value

On success, comedi_mark_buffer_written returns the number of bytes successfully marked as written. The return value may be less than the num_bytes. On failure, -1 is returned.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-data-read-delayed.html0000644000000000000000000000724313105043775022036 00000000000000comedi_data_read_delayed

Name

comedi_data_read_delayed — read single sample from channel after delaying for specified settling time

Synopsis

#include <comedilib.h>
int comedi_data_read_delayed(comedi_t * device,
 unsigned int subdevice,
 unsigned int channel,
 unsigned int range,
 unsigned int aref,
 lsampl_t * data,
 unsigned int nanosec);
 

Description

Similar to comedi_data_read except it will wait for the specified number of nanoseconds between setting the input channel and taking a sample. For analog inputs, most boards have a single analog to digital converter which is multiplexed to be able to read multiple channels. If the input is not allowed to settle after the multiplexer switches channels, the reading will be inaccurate. This function is useful for allowing a multiplexed analog input to settle when switching channels.

Although the settling time is specified in nanoseconds, the actual settling time will be rounded up to the nearest microsecond.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-sv-update.html0000644000000000000000000000526013105043776020515 00000000000000comedi_sv_update

Name

comedi_sv_update — slowly-varying inputs

Synopsis

#include <comedilib.h>
int comedi_sv_update(comedi_sv_t * sv);
 

Status

deprecated

Description

The function comedi_sv_update updates internal parameters of the slowly varying Comedi structure pointed to by sv.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-find-range.html0000644000000000000000000000677613105043775020633 00000000000000comedi_find_range

Name

comedi_find_range — search for range

Synopsis

#include <comedilib.h>
int comedi_find_range(comedi_t * device,
 unsigned int subdevice,
 unsigned int channel,
 unsigned int unit,
 double min,
 double max);
 

Description

The function comedi_find_range tries to locate the optimal (smallest) range for the channel channel belonging to subdevice subdevice of the comedi device device, that includes both min and max in units of unit.

Return value

If a matching range is found, the index of the matching range is returned. If no matching range is available, the function returns -1.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-get-n-channels.html0000644000000000000000000000552613105043775021414 00000000000000comedi_get_n_channels

Name

comedi_get_n_channels — number of subdevice channels

Synopsis

#include <comedilib.h>
int comedi_get_n_channels(comedi_t * device,
 unsigned int subdevice);
 

Description

The function comedi_get_n_channels returns the number of channels of the subdevice subdevice belonging to the comedi device device. This function returns -1 on error and the Comedilib error value is set.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-set-read-subdevice.html0000644000000000000000000000717713105043776022271 00000000000000comedi_set_read_subdevice

Name

comedi_set_read_subdevice — set streaming input subdevice

Synopsis

#include <comedilib.h>
int comedi_set_read_subdevice(comedi_t * device,
 unsigned int subdevice);
 

Status

Works for Linux "in-tree" Comedi since kernel version 3.19.

Description

The function comedi_set_read_subdevice sets subdevice as the current “read†subdevice if the subdevice supports streaming input commands.

No action is performed if subdevice is already the current “read†subdevice.

Changes are local to the open file description for this device and have no effect on other open file descriptions for the underlying device node.

Return value

On success, 0 is returned. On failure, -1 is returned.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-get-buffer-offset.html0000644000000000000000000000460513105043776022121 00000000000000comedi_get_buffer_offset

Name

comedi_get_buffer_offset — streaming buffer status (deprecated)

Status

deprecated

Description

This function is deprecated. Use comedi_get_buffer_read_offset instead. It has the same functionality as comedi_get_buffer_read_offset.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-set-max-buffer-size.html0000644000000000000000000000644513105043776022410 00000000000000comedi_set_max_buffer_size

Name

comedi_set_max_buffer_size — streaming maximum buffer size of subdevice

Synopsis

#include <comedilib.h>
int comedi_set_max_buffer_size(comedi_t * device,
 unsigned int subdevice,
 unsigned int max_size);
 

Description

The function comedi_set_max_buffer_size changes the maximum allowable size (in bytes) of the streaming buffer for the subdevice specified by device and subdevice. Changing the maximum buffer size requires the user to have appropriate privileges.

Return value

On success, comedi_set_max_buffer_size returns the new maximum buffer size in bytes. On failure, -1 is returned.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-get-n-ranges.html0000644000000000000000000000572213105043775021076 00000000000000comedi_get_n_ranges

Name

comedi_get_n_ranges — number of ranges of channel

Synopsis

#include <comedilib.h>
int comedi_get_n_ranges(comedi_t * device,
 unsigned int subdevice,
 unsigned int channel);
 

Description

The function comedi_get_n_ranges returns the number of ranges of the channel channel belonging to the subdevice subdevice of the comedi device device. This function returns -1 on error.

comedilib-0.11.0/doc/doc_html/gettinginformation.html0000644000000000000000000001343713105043774017556 000000000000002.2.  Getting information about a card

2.2.  Getting information about a card

So now that you have Comedi talking to the hardware, try to talk to Comedi. Call the command comedi_board_info, which provides information about each subdevice on the board. Here's part of the output for the USB-DUX sigma board (which is on /dev/comedi0), as a result of the command comedi_board_info -v.

overall info:
  version code: 0x00074c
  driver name: usbduxsigma
  board name: usbduxsigma
  number of subdevices: 4
subdevice 0:
  type: 1 (analog input)
  flags: 0x10119000
          SDF_CMD_READ:can do asynchronous input commands
          SDF_READABLE:subdevice can be read
          SDF_GROUND:can do aref=ground
          SDF_LSAMPL:subdevice uses 32-bit samples for commands
  number of channels: 16
  max data value: 16777215
  ranges:
    all chans: [-1.325 V,1.325 V]
  command:
    start: now|int
    scan_begin: timer
    convert: now
    scan_end: count
    stop: none|count
  command structure filled with probe_cmd_generic_timed for 16 channels:
    start: now 0
    scan_begin: timer 1000000
      scan_begin_src = TRIG_TIMER:
      The sampling rate is defined per scan
      meaning all channels are sampled at
      the same time. The maximum sampling rate is f=1000 Hz
    convert: now 0
    scan_end: count 16
    stop: count 2
subdevice 1:
  type: 2 (analog output)
  flags: 0x00125000
          SDF_CMD_WRITE:can do asynchronous output commands
          SDF_WRITABLE:subdevice can be written
          SDF_GROUND:can do aref=ground
  number of channels: 4
  max data value: 255
  ranges:
    all chans: [0 V,2.5 V]
  command:
    start: now|int
    scan_begin: timer
    convert: now
    scan_end: count
    stop: none|count
  command structure filled with probe_cmd_generic_timed for 4 channels:
    start: now 0
    scan_begin: timer 1000000
      scan_begin_src = TRIG_TIMER:
      The sampling rate is defined per scan
      meaning all channels are sampled at
      the same time. The maximum sampling rate is f=1000 Hz
    convert: now 0
    scan_end: count 4
    stop: count 2
subdevice 2:
  type: 5 (digital I/O)
  flags: 0x00030000
          SDF_READABLE:subdevice can be read
          SDF_WRITABLE:subdevice can be written
  number of channels: 24
  max data value: 1
  ranges:
    all chans: [0 V,5 V]
  command:
    not supported
subdevice 3:
  type: 12 (pwm)
  flags: 0x00020100
          SDF_MODE1:can do mode 1
          SDF_WRITABLE:subdevice can be written
  number of channels: 8
  max data value: 512
  ranges:
    all chans: [0,1]
  command:
    not supported

This board has four subdevices. Devices are separated into subdevices that each have a distinct purpose; e.g., analog input, analog output, digital input/output.

Here's the information from Comedi's /proc/comedi file, which indicates what drivers are loaded and which boards are configured:

cat /proc/comedi
comedi version 0.7.76
format string: "%2d: %-20s %-20s %4d",i,driver_name,board_name,n_subdevices
 0: usbduxsigma          usbduxsigma             4
usbduxfast:
 usbduxfast
usbduxsigma:
 usbduxsigma

This documentation feature currently returns the driver name, the device name, and the number of subdevices. Following those lines are a list of the Comedi kernel driver modules currently loaded, each followed by a list of the board names it recognizes (names that can be used with comedi_config).

comedilib-0.11.0/doc/doc_html/func-ref-comedi-get-buffer-contents.html0000644000000000000000000000631613105043775022470 00000000000000comedi_get_buffer_contents

Name

comedi_get_buffer_contents — streaming buffer status

Synopsis

#include <comedilib.h>
int comedi_get_buffer_contents(comedi_t * device,
 unsigned int subdevice);
 

Description

The function comedi_get_buffer_contents is used on a subdevice that has a Comedi command in progress to get the number of unread bytes. For a streaming input command, this is the number of bytes that can be read. For a streaming output command, subtracting this from the buffer size gives the space available to be written.

Return value

On success, comedi_get_buffer_contents returns the number of unread bytes in the buffer. On failure, -1 is returned.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-open.html0000644000000000000000000000563513105043775017553 00000000000000comedi_open

Name

comedi_open — open a Comedi device

Synopsis

#include <comedilib.h>
comedi_t * comedi_open(const char * filename);
 

Description

Open a Comedi device specified by the file filename.

Return value

If successful, comedi_open returns a pointer to a valid comedi_t structure. This structure is opaque; the pointer should not be dereferenced by the application. NULL is returned on failure.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-dio-read.html0000644000000000000000000000753713105043776020302 00000000000000comedi_dio_read

Name

comedi_dio_read — read single bit from digital channel

Synopsis

#include <comedilib.h>
int comedi_dio_read(comedi_t * device,
 unsigned int subdevice,
 unsigned int channel,
 unsigned int * bit);
 

Description

The function comedi_dio_read reads the channel channel belonging to the subdevice subdevice of device device. The data value that is read is stored in the *bit. This function is equivalent to:

comedi_data_read(device, subdevice, channel, 0, 0, bit);

This function does not require a digital subdevice or a subdevice with a maximum data value of 1 to work properly.

If you wish to read multiple digital channels at once, it is more efficient to use comedi_dio_bitfield2 than to call this function multiple times.

Return value

Return values and errors are the same as comedi_data_read.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-do-insnlist.html0000644000000000000000000000603013105043775021043 00000000000000comedi_do_insnlist

Name

comedi_do_insnlist — perform multiple instructions

Synopsis

#include <comedilib.h>
int comedi_do_insnlist(comedi_t * device,
 comedi_insnlist * list);
 

Description

The function comedi_do_insnlist performs multiple Comedi instructions as part of one system call. This function can be used to avoid the overhead of multiple system calls.

Return value

The function comedi_do_insnlist returns the number of successfully completed instructions. Error information for the unsuccessful instruction is not available. If there is an error before the first instruction can be executed, -1 is returned.

comedilib-0.11.0/doc/doc_html/slowlyvarying.html0000644000000000000000000001637713105043774016606 000000000000004.6.  Slowly-varying inputs

4.6.  Slowly-varying inputs

Note: The functions described here use an old feature that is no longer implemented by the Comedi kernel layer. THEY WILL NOT WORK!

Sometimes, your input channels change slowly enough that you are able to average many successive input values to get a more accurate measurement of the actual value. In general, the more samples you average, the better your estimate gets, roughly by a factor of sqrt(number_of_samples). Obviously, there are limitations to this:

  • you are ultimately limited by “Spurious Free Dynamic Rangeâ€. This SFDR is one of the popular measures to quantify how much noise a signal carries. If you take a Fourier transform of your signal, you will see several “peaks†in the transform: one or more of the fundamental harmonics of the measured signal, and lots of little “peaks†(called “spursâ€) caused by noise. The SFDR is then the difference between the amplitude of the fundamental harmonic and of the largest spur (at frequencies below half of the Nyquist frequency of the DAQ sampler!).

  • you need to have some noise on the input channel, otherwise you will be averaging the same number N times. (Of course, this only holds if the noise is large enough to cause at least a one-bit discretization.)

  • the more noise you have, the greater your SFDR, but it takes many more samples to compensate for the increased noise.

  • if you feel the need to average samples for, for example, two seconds, your signal will need to be very slowly-varying, i.e., not varying more than your target uncertainty for the entire two seconds.

As you might have guessed, the Comedi library has functions to help you in your quest to accurately measure slowly varying inputs:

int comedi_sv_init(comedi_sv_t *sv,
 comedi_t *device,
 unsigned int subdevice,
 unsigned int channel);
 

The above function comedi_sv_init initializes the comedi_sv_t data structure, used to do the averaging acquisition:

typedef struct comedi_sv_struct {
  comedi_t *dev;
  unsigned int subdevice;
  unsigned int chan;

  /* range policy */
  int range;
  int aref;

  /* number of measurements to average (for analog inputs) */
  int n;

  lsampl_t maxdata;
} comedi_sv_t;

The actual acquisition is done with the function comedi_sv_measure:

int comedi_sv_measure(comedi_sv_t *sv,
 double *data);
 

The number of samples over which the function comedi_sv_measure averages is limited by the implementation (currently the limit is 100 samples).

One typical use for this function is the measurement of thermocouple voltages. And the Comedi self-calibration utility also uses these functions. On some hardware, it is possible to tell it to measure an internal stable voltage reference, which is typically going to be very slowly varying; on the kilosecond time scale or more. So, it is reasonable to measure millions of samples, to get a very accurate measurement of the A/D converter output value that corresponds to the voltage reference. Sometimes, however, this is overkill, since there is no need to perform a part-per-million calibration to a standard that is only accurate to a part-per-thousand.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-arm-channel.html0000644000000000000000000000713013105043776020770 00000000000000comedi_arm_channel

Name

comedi_arm_channel — arm a subdevice channel

Synopsis

#include <comedilib.h>
int comedi_arm_channel(comedi_t * device,
 unsigned int subdevice,
 unsigned int channel,
 unsigned int source);
 

Status

alpha

Description

This function arms a specified channel of a subdevice. It may, for example, arm a counter to begin counting. The source parameter specifies what source should trigger the subdevice to begin. The possible sources are driver-dependant. This function is only useable on subdevices that provide support for the INSN_CONFIG_ARM configuration instruction. Some subdevices treat this as an instruction to arm the whole subdevice and ignore the specified channel. For such subdevices, comedi_arm is normally called instead.

Return value

0 on success, -1 on error.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-get-max-buffer-size.html0000644000000000000000000000665613105043775022377 00000000000000comedi_get_max_buffer_size

Name

comedi_get_max_buffer_size — maximum streaming buffer size

Synopsis

#include <comedilib.h>
int comedi_get_max_buffer_size(comedi_t * device,
 unsigned int subdevice);
 

Description

The function comedi_get_max_buffer_size returns the maximum allowable size (in bytes) of the streaming buffer for the subdevice specified by device and subdevice. Changing the maximum buffer size can be accomplished with comedi_set_max_buffer_size or with the comedi_config program, and requires appropriate privileges.

Return value

On success, the maximum allowable size (in bytes) of the streaming buffer is returned. On failure, -1 is returned.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-errno.html0000644000000000000000000000707413105043776017737 00000000000000comedi_errno

Name

comedi_errno — number of last Comedilib error

Synopsis

#include <comedilib.h>
int comedi_errno(void); 
 

Description

When a Comedilib function fails, it usually returns -1 or NULL, depending on the return type. An internal library variable stores an error number, which can be retrieved by calling comedi_errno This error number can be converted to a human-readable form by the functions comedi_perror and comedi_strerror.

These functions are intended to mimic the behavior of the standard C library functions perror, strerror, and errno. In particular, Comedilib functions sometimes return an error that is generated inside the C library; the comedi error message in this case is the same as the C library.

The function comedi_errno returns an integer describing the most recent Comedilib error. This integer may be used as the errnum parameter for comedi_strerror.

comedilib-0.11.0/doc/doc_html/func-ref-comedi-set-write-subdevice.html0000644000000000000000000000716213105043776022502 00000000000000comedi_set_write_subdevice

Name

comedi_set_write_subdevice — set streaming output subdevice

Synopsis

#include <comedilib.h>
int comedi_set_write_subdevice(comedi_t * device,
 unsigned int subdevice);
 

Status

Works for Linux "in-tree" Comedi since kernel version 3.19.

Description

The function comedi_set_write_subdevice sets subdevice as the current “write†subdevice if the subdevice supports streaming output commands.

No action is performed if subdevice is already the current “write†subdevice.

Changes are local to the open file description for this device and have no effect on other open file descriptions for the underlying device node.

Return value

On success, 0 is returned. On failure, -1 is returned.

comedilib-0.11.0/doc/funcref0000644000000000000000000007252412416542105012541 00000000000000Core Functions Function: comedi_close -- close a Comedi device Retval: int Param: comedi * device Description: Close a device previously opened by comedi_open. Returns: If successful, comedi_close returns 0. On failure, -1 is returned. Function: comedi_data_read -- read single sample from channel Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int channel Param: unsigned int range Param: unsigned int aref Param: lsampl_t * data Description: Reads a single sample on the channel specified by the Comedi device device, the subdevice subdevice, and the channel channel. For the A/D conversion (if appropriate), the device is configured to use range specification range and (if appropriate) analog reference type aref. Analog reference types that are not supported by the device are silently ignored. The function comedi_data_read reads one data value from the specified channel and stores the value in *data. WARNING: comedi_data_read does not do any pausing to allow multiplexed analog inputs to settle before starting an analog to digital conversion. If you are switching between different channels and need to allow your analog input to settle for an accurate reading, use comedi_data_read_delayed, or set the input channel at an earlier time with comedi_data_read_hint. Data values returned by this function are unsigned integers less than or equal to the maximum sample value of the channel, which can be determined using the function comedi_get_maxdata. Conversion of data values to physical units can be performed by the functions comedi_to_phys (linear conversion) or comedi_to_physical (non-linear polynomial conversion). Returns: On success, comedi_data_read returns 1 (the number of samples read). If there is an error, -1 is returned. Function: comedi_data_read_n -- read multiple samples from channel Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int channel Param: unsigned int range Param: unsigned int aref Param: lsampl_t * data Param: unsigned int n Description: Similar to comedi_data_read except it reads n samples into the array data. The precise timing of the samples is not hardware controlled. Function: comedi_data_read_delayed -- read single sample from channel after delaying for specified settling time Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int channel Param: unsigned int range Param: unsigned int aref Param: lsampl_t * data Param: unsigned int nanosec Description: Similar to comedi_data_read except it will wait for the specified number of nanoseconds between setting the input channel and taking a sample. For analog inputs, most boards have a single analog to digital converter which is multiplexed to be able to read multiple channels. If the input is not allowed to settle after the multiplexer switches channels, the reading will be inaccurate. This function is useful for allowing a multiplexed analog input to settle when switching channels. Although the settling time is specified in nanoseconds, the actual settling time will be rounded up to the nearest microsecond. Function: comedi_data_read_hint -- tell driver which channel/range/aref you are going to read from next Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int channel Param: unsigned int range Param: unsigned int aref Description: Used to prepare an analog input for a subsequent call to comedi_data_read. It is not necessary to use this function, but it can be useful for eliminating inaccuracies caused by insufficient settling times when switching the channel or gain on an analog input. This function sets an analog input to the channel, range, and aref specified but does not perform an actual analog to digital conversion. Alternatively, one can simply use comedi_data_read_delayed, which sets up the input, pauses to allow settling, then performs a conversion. Function: comedi_data_write -- write single sample to channel Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int channel Param: unsigned int range Param: unsigned int aref Param: lsampl_t data Description: Writes a single sample on the channel that is specified by the Comedi device device, the subdevice subdevice, and the channel channel. If appropriate, the device is configured to use range specification range and analog reference type aref. Analog reference types that are not supported by the device are silently ignored. The function comedi_data_write writes the data value specified by the parameter data to the specified channel. Returns: On success, comedi_data_write returns 1 (the number of samples written). If there is an error, -1 is returned. Function: comedi_do_insn -- perform instruction Retval: int Param: comedi_t * device Param: comedi_insn * instruction Description: The function comedi_do_insn performs a single instruction. Returns: If successful, returns a non-negative number. For the case of INSN_READ or INSN_WRITE instructions, comedi_do_insn returns the number of samples read or written, which may be less than the number requested. If there is an error, -1 is returned. Function: comedi_do_insnlist -- perform multiple instructions Retval: int Param: comedi_t * device Param: comedi_insnlist * list Description: The function comedi_do_insnlist performs multiple Comedi instructions as part of one system call. This function can be used to avoid the overhead of multiple system calls. Returns: The function comedi_do_insnlist returns the number of successfully completed instructions. Error information for the unsuccessful instruction is not available. If there is an error before the first instruction can be executed, -1 is returned. Function: comedi_fileno -- get file descriptor for open Comedilib device Retval: int Param: comedi_t * device Description: The function comedi_fileno returns the file descriptor for the device device. This descriptor can then be used as the file descriptor parameter of read, write, etc. This function is intended to mimic the standard C library function fileno. The returned file descriptor should not be closed, and will become invalid when comedi_close is called on device. Returns: A file descriptor, or -1 on error. Function: comedi_find_range -- search for range Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int channel Param: unsigned int unit Param: double min Param: double max Description: The function comedi_find_range tries to locate the optimal (smallest) range for the channel channel belonging to subdevice subdevice of the comedi device device, that includes both min and max in units of unit. Returns: If a matching range is found, the index of the matching range is returned. If no matching range is available, the function returns -1. Function: comedi_find_subdevice_by_type -- search for subdevice type Retval: int Param: comedi_t * device Param: int type Param: unsigned int start_subdevice Description: The function comedi_find_subdevice_by_type tries to locate a subdevice belonging to comedi device device, having type type, starting with the subdevice start_subdevice. The comedi_subdevice_type enum specifies the possible subdevice types. Returns: If it finds a subdevice with the requested type, it returns its index. If there is an error, the function returns -1 and sets the appropriate error. Function: comedi_from_phys -- convert physical units to sample Retval: lsampl_t Param: double data Param: comedi_range * range Param: lsampl_t maxdata Description: Converts parameter data given in physical units (double) into sample values (lsampl_t, between 0 and maxdata). The parameter range represents the conversion information to use, and the parameter maxdata represents the maximum possible data value for the channel that the data will be written to. The mapping between physical units and raw data is linear and assumes that the converter has ideal characteristics. Conversion is not affected by out-of-range behavior. Out-of-range data parameters are silently truncated to the range 0 to maxdata. Function: comedi_from_physical -- convert physical units to sample using calibration data Retval: lsampl_t Param: double data Param: const comedi_polynomial_t * conversion_polynomial Description: Converts data given in physical units into Comedi's integer sample values (lsampl_t, between 0 and maxdata — see comedi_get_maxdata). The conversion_polynomial parameter is obtained from either comedi_get_hardcal_converter or comedi_get_softcal_converter. The allows non linear and board specific correction. The result will be rounded using the C library's current rounding direction. No range checking of the input data is performed. It is up to you to ensure your data is within the limits of the output range you are using. Returns: Comedi sample value corresponding to input physical value. Function: comedi_get_board_name -- Comedi device name Retval: const char * Param: comedi_t * device Description: The function comedi_get_board_name returns a pointer to a string containing the name of the comedi device represented by device. This pointer is valid until the device is closed. This function returns NULL if there is an error. Function: comedi_get_driver_name -- Comedi driver name Retval: char * Param: comedi_t * device Description: The function comedi_get_driver_name returns a pointer to a string containing the name of the driver being used by comedi for the comedi device represented by device. This pointer is valid until the device is closed. This function returns NULL if there is an error. Function: comedi_get_maxdata -- maximum sample of channel Retval: lsampl_t Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int channel Description: The function comedi_get_maxdata returns the maximum valid data value for channel channel of subdevice subdevice belonging to the comedi device device. Returns: The maximum valid sample value, or 0 on error. Function: comedi_get_n_channels -- number of subdevice channels Retval: int Param: comedi_t * device Param: unsigned int subdevice Description: The function comedi_get_n_channels returns the number of channels of the subdevice subdevice belonging to the comedi device device. This function returns -1 on error and the Comedilib error value is set. Function: comedi_get_n_ranges -- number of ranges of channel Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int channel Description: The function comedi_get_n_ranges returns the number of ranges of the channel channel belonging to the subdevice subdevice of the comedi device device. This function returns -1 on error. Function: comedi_get_n_subdevices -- number of subdevices Retval: int Param: comedi_t * device Description: The function comedi_get_n_subdevices returns the number of subdevices belonging to the Comedi device referenced by the parameter device, or -1 on error. Function: comedi_get_range -- range information of channel Retval: comedi_range * Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int channel Param: unsigned int range Description: The function comedi_get_range returns a pointer to a comedi_range structure that contains information on the range specified by the subdevice, channel, and range parameters. The pointer is valid until the Comedi device device is closed. If there is an error, NULL is returned. Function: comedi_get_subdevice_flags -- properties of subdevice Retval: int Param: comedi_t * device Param: unsigned int subdevice Description: The function comedi_get_subdevice_flags returns a bitfield describing the capabilities of the specified subdevice subdevice of the Comedi device device. If there is an error, -1 is returned, and the Comedilib error value is set. Subdevice Flag Value (hex) Description SDF_BUSY 0x00000001 The subdevice is busy performing an asynchronous command. A subdevice being busy is slightly different from the running state flagged by SDF_RUNNING. A running subdevice is always busy, but a busy subdevice is not necessarily running. For example, suppose an analog input command has been completed by the hardware, but there are still samples in Comedi's buffer waiting to be read out. In this case, the subdevice is not running, but is still busy until all the samples are read out or comedi_cancel is called. SDF_BUSY_OWNER 0x00000002 The subdevice is busy, and the command it is running was started by the current process. SDF_LOCKED 0x00000004 The subdevice has been locked by comedi_lock. SDF_LOCK_OWNER 0x00000008 The subdevice is locked, and was locked by the current process. SDF_MAXDATA 0x00000010 The maximum data value for the subdevice depends on the channel. SDF_FLAGS 0x00000020 The subdevice flags depend on the channel (unfinished/broken support in library). SDF_RANGETYPE 0x00000040 The range type depends on the channel. SDF_CMD 0x00001000 The subdevice supports asynchronous commands. SDF_SOFT_CALIBRATED 0x00002000 The subdevice relies on the host to do calibration in software. Software calibration coefficients are determined by the comedi_soft_calibrate utility. See the description of the comedi_get_softcal_converter function for more information. SDF_READABLE 0x00010000 The subdevice can be read (e.g. analog input). SDF_WRITABLE 0x00020000 The subdevice can be written to (e.g. analog output). SDF_INTERNAL 0x00040000 The subdevice does not have externally visible lines. SDF_GROUND 0x00100000 The subdevice supports analog reference AREF_GROUND. SDF_COMMON 0x00200000 The subdevice supports analog reference AREF_COMMON. SDF_DIFF 0x00400000 The subdevice supports analog reference AREF_DIFF. SDF_OTHER 0x00800000 The subdevice supports analog reference AREF_OTHER SDF_DITHER 0x01000000 The subdevice supports dithering (via the CR_ALT_FILTER chanspec flag). SDF_DEGLITCH 0x02000000 The subdevice supports deglitching (via the CR_ALT_FILTER chanspec flag). SDF_RUNNING 0x08000000 An asynchronous command is running. You can use this flag to poll for the completion of an output command. SDF_LSAMPL 0x10000000 The subdevice uses the 32-bit lsampl_t type instead of the 16-bit sampl_t for asynchronous command data. SDF_PACKED 0x20000000 The subdevice uses bitfield samples for asynchronous command data, one bit per channel (otherwise it uses one sampl_t or lsampl_t per channel). Commonly used for digital subdevices. Function: comedi_get_subdevice_type -- type of subdevice Retval: int Param: comedi_t * device Param: unsigned int subdevice Description: The function comedi_get_subdevice_type returns an integer describing the type of subdevice that belongs to the comedi device device and has the subdevice index subdevice. The comedi_subdevice_type enum specifies the possible values for the subdevice type. Returns: The function returns the subdevice type, or -1 if there is an error. Function: comedi_get_version_code -- Comedi version code Retval: int Param: comedi_t * device Description: Returns the Comedi kernel module version code. A valid Comedi device referenced by the parameter device is necessary to communicate with the kernel module. On error, -1 is returned. The version code is encoded as a bitfield of three 8-bit numbers. For example, 0x00073d is the version code for version 0.7.61. This function is of limited usefulness. A typical mis-application of this function is to use it to determine if a certain feature is supported. If the application needs to know of the existence of a particular feature, an existence test function should be written and put in the Comedilib source. Function: comedi_internal_trigger -- generate soft trigger Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int trig_num Description: This function sends an INSN_INTTRIG instruction to a subdevice, which causes an internal triggering event. This event can, for example, trigger a subdevice to start an asynchronous command. The trig_num parameter is reserved for future use, and should be set to 0. It is likely it will be used in the future to support multiple independent internal triggers. For example, an asynchronous command might be specified for a subdevice with a start_src of TRIG_INT, and a start_arg of 5. Then the start event would only be triggered if comedi_internal_trigger were called on the subdevice with a trig_num equal to the same value of 5. Returns: 0 on success, -1 on error. Function: comedi_lock -- subdevice reservation Retval: int Param: comedi_t * device Param: unsigned int subdevice Description: The function comedi_lock reserves a subdevice for use by the current process. While the lock is held, no other process is allowed to read, write, or configure that subdevice, although other processes can read information about the subdevice. The lock is released by comedi_unlock, or when comedi_close is called on device. Returns: If successful, 0 is returned. If there is an error, -1 is returned. Function: comedi_maxdata_is_chan_specific -- maximum sample depends on channel Retval: int Param: comedi_t * device Param: unsigned int subdevice Description: If each channel of the specified subdevice may have different maximum sample values, this function returns 1. Otherwise, this function returns 0. On error, this function returns -1. Function: comedi_open -- open a Comedi device Retval: comedi_t * Param: const char * filename Description: Open a Comedi device specified by the file filename. Returns: If successful, comedi_open returns a pointer to a valid comedi_t structure. This structure is opaque; the pointer should not be dereferenced by the application. NULL is returned on failure. Function: comedi_range_is_chan_specific -- range information depends on channel Retval: int Param: comedi_t * device Param: unsigned int subdevice Description: If each channel of the specified subdevice may have different range information, this function returns 1. Otherwise, this function returns 0. On error, this function returns -1. Function: comedi_set_global_oor_behavior -- out-of-range behavior Retval: enum comedi_oor_behavior Param: enum comedi_oor_behavior behavior Description: This function changes the Comedilib out-of-range behavior. This currently affects the behavior of comedi_to_phys when converting endpoint sample values, that is, sample values equal to 0 or maxdata. If the out-of-range behavior is set to COMEDI_OOR_NAN, endpoint values are converted to NAN. If the out-of-range behavior is set to COMEDI_OOR_NUMBER, the endpoint values are converted similarly to other values. Returns: The previous out-of-range behavior is returned. Function: comedi_to_phys -- convert sample to physical units Retval: double Param: lsampl_t data Param: comedi_range * range Param: lsampl_t maxdata Description: Converts parameter data given in sample values (lsampl_t, between 0 and maxdata) into physical units (double). The parameter range represents the conversion information to use, and the parameter maxdata represents the maximum possible data value for the channel that the data was read. The mapping between physical units is linear and assumes ideal converter characteristics. Conversion of endpoint sample values, that is, sample values equal to 0 or maxdata, is affected by the Comedilib out-of-range behavior (see function comedi_set_global_oor_behavior). If the out-of-range behavior is set to COMEDI_OOR_NAN, endpoint values are converted to NAN. If the out-of-range behavior is set to COMEDI_OOR_NUMBER, the endpoint values are converted similarly to other values. If there is an error, NAN is returned. Function: comedi_to_physical -- convert sample to physical units using polynomials Retval: double Param: lsampl_t data Param: const comedi_polynomial_t * conversion_polynomial Description: Converts data given in Comedi's integer sample values (lsampl_t, between 0 and maxdata) into physical units (double). The conversion_polynomial parameter is obtained from either comedi_get_hardcal_converter or comedi_get_softcal_converter. No range checking of the input data is performed. It is up to you to check for data values of 0 or maxdata if you want to detect possibly out-of-range readings. Returns: Physical value corresponding to the input sample value. Function: comedi_unlock -- subdevice reservation Retval: int Param: comedi_t * device Param: unsigned int subdevice Description: The function comedi_unlock releases a subdevice locked by comedi_lock. Returns: 0 on success, otherwise -1. comedilib-0.11.0/doc/other.xml0000644000000000000000000025640512670252770013043 00000000000000 %comedilib_entities; ]>
Acquisition and configuration functions This Section gives an overview of all &comedi; functions with which application programmers can implement their data acquisition. (With acquisition we mean all possible kinds of interfacing with the cards: input, output, configuration, streaming, etc.) explains the function calls in full detail.
Functions for single acquisition The simplest form of using &comedi; is to get one single sample to or from an interface card. This sections explains how to do such simple digital and analog acquisitions.
Single digital acquisition Many boards supported by &comedi; have digital input and output channels; i.e., channels that can only produce a 0 or a 1. Some boards allow the direction (input or output) of each channel to be specified independently in software. &comedi; groups digital channels into a subdevice, which is a group of digital channels that have the same characteristics. For example, digital output lines will be grouped into a digital output subdevice, bidirectional digital lines will be grouped into a digital I/O subdevice. Thus, there can be multiple digital subdevices on a particular board. Individual bits on a digital I/O device can be read and written using the functions comedi_dio_read and comedi_dio_write: int comedi_dio_read comedi_t *device unsigned int subdevice unsigned int channel unsigned int *bit int comedi_dio_write comedi_t *device unsigned int subdevice unsigned int channel unsigned int bit The device parameter is a pointer to a successfully opened &comedi; device. The subdevice and channel parameters are positive integers that indicate which subdevice and channel is used in the acquisition. The integer bit contains the value of the acquired bit. The direction of bidirectional lines can be configured using the function comedi_dio_config: int comedi_dio_config comedi_t *device unsigned int subdevice unsigned int channel unsigned int dir The parameter dir should be either COMEDI_INPUT or COMEDI_OUTPUT. Many digital I/O subdevices group channels into blocks for configuring direction. Changing one channel in a block changes the entire block. Multiple channels can be read and written simultaneously using the function comedi_dio_bitfield2: int comedi_dio_bitfield2 comedi_t *device unsigned int subdevice unsigned int write_mask unsigned int *bits unsigned int base_channel Each channel from base_channel to base_channel + 31 is assigned to a bit in the write_mask and bits bitfield with bit 0 assigned to channel base_channel, bit 1 assigned to channel base_channel + 1, etc. If a bit in write_mask is set, the corresponding bit in *bits will be written to the digital output line corresponding to the channel given by base_channel plus the bit number. Each digital line is then read and placed into *bits. The value of bits in *bits corresponding to digital output lines is undefined and device-specific. Channel base_channel + 0 is the least significant bit in the bitfield. No more than 32 channels at once can be accessed using this method. Warning! Older versions of &comedi; may ignore base_channel and treat it as 0 unless the subdevice has more than 32 channels. The digital acquisition functions seem to be very simple, but, behind the implementation screens of the &comedi; kernel module, they are executed as special cases of the general instruction command.
Single analog acquisition Analog &comedi; channels can produce data values that are samples from continuous analog signals. These samples are integers with a significant content in the range of, typically, 8, 10, 12, or 16 bits. Single samples can be read from an analog channel using the function comedi_data_read: int comedi_data_read comedi_t *device unsigned int subdevice unsigned int channel unsigned int range unsigned int aref lsampl_t *data This reads one such data value from a &comedi; channel, and puts it in the user-specified data buffer. The range parameter is the zero-based index of one of the gain ranges supported by the channel. This is a number from 0 to N-1 where N is the number of ranges supported by the channel. Use the function comedi_get_n_ranges to get the number of ranges supported by the channel, the function comedi_find_range to search for a suitable range, or the function comedi_get_range to get the details of a supported range. The aref parameter specifies an analog reference to use: AREF_GROUND, AREF_COMMON, AREF_DIFF, or AREF_OTHER. Use the function comedi_get_subdevice_flags to see which analog references are supported by the subdevice. In the opposite direction, single samples can be written to an analog output channel using the function comedi_data_write: int comedi_data_write comedi_t *device unsigned int subdevice unsigned int channel unsigned int range unsigned int aref lsampl_t data Raw data values read or written by the above functions are unsigned integers less than, or equal to, the maximum sample value of the channel, which can be determined using the function comedi_get_maxdata: lsampl_t comedi_get_maxdata comedi_t *device unsigned int subdevice unsigned int channel Conversion between raw data values and uncalibrated physical units can be performed by the functions comedi_to_phys and comedi_from_phys: double comedi_to_phys lsampl_t data comedi_range *range lsampl_t maxdata lsampl_t comedi_from_phys double data comedi_range *range lsampl_t maxdata There are some data structures in these commands that are not fully self-explanatory: comedi_t: this data structure contains all information that a user program has to know about an open &comedi; device. The programmer doesn't have to fill in this data structure manually: it gets filled in by opening the device. lsampl_t: this data structure represents one single sample. On most architectures, it's nothing more than a 32 bits value. Internally, &comedi; does some conversion from raw sample data to correct integers. This is called data munging. comedi_range: this holds the minimum and maximum physical values for a gain range supported by a channel of a subdevice, and specifies the units. This can be used in combination with the channel's maxdata value to convert between unsigned integer sample values (of type lsampl_t or sampl_t) and physical units in a nominal (uncalibrated) way using the comedi_to_phys and comedi_from_phys functions. Use the comedi_get_maxdata function to get the maxdata value for the channel. Most functions specify the range to be used for a channel by a zero-based index into the list of ranges supported by the channel. Depending on the device and subdevice, different channels on the subdevice may or may not share the same list of ranges, that is, ranges may or may not be channel-specific. (The SDF_RANGETYPE subdevice flag indicates whether ranges are channel-specific.) Each single acquisition by, for example, comedi_data_read requires quite some overhead, because all the arguments of the function call are checked. If multiple acquisitions must be done on the same channel, this overhead can be avoided by using a function that can read more than one sample, comedi_data_read_n: int comedi_data_read_n comedi_t *device unsigned int subdevice unsigned int channel unsigned int range unsigned int aref lsampl_t *data unsigned int n The number of samples, n, is limited by the &comedi; implementation (to a maximum of 100 samples), because the call is blocking. The start of the a single data acquisition can also be delayed by a specified number of nano-seconds using the function comedi_data_read_delayed: int comedi_data_read_delayed comedi_t *device unsigned int subdevice unsigned int channel unsigned int range unsigned int aref lsampl_t *data unsigned int nano_sec All these read and write acquisition functions are implemented on top of the generic instruction command.
Instructions for multiple acquisitions The instruction is one of the most generic, overloaden and flexible functions in the &comedi; API. It is used to execute a multiple of identical acquisitions on the same channel, but also to perform a configuration of a channel. An instruction list is a list of instructions, possibly on different channels. Both instructions and instructions lists are executed synchronously, i.e., while blocking the calling process. This is one of the limitations of instructions; the other one is that they cannot code an acquisition involving timers or external events. These limits are eliminated by the command acquisition primitive.
The instruction data structure All the information needed to execute an instruction is stored in the comedi_insn data structure: typedef struct comedi_insn_struct { unsigned int insn; // integer encoding the type of acquisition // (or configuration) unsigned int n; // number of elements in data array lsampl_t *data; // pointer to data buffer unsigned int subdev; // subdevice unsigned int chanspec; // encoded channel specification unsigned int unused[3]; } comedi_insn; Because of the large flexibility of the instruction function, many types of instruction do not need to fill in all fields, or attach different meanings to the same field. But the current implementation of &comedi; requires the data field to be at least one byte long. The insn member of the instruction data structure determines the type of acquisition executed in the corresponding instruction: INSN_READ: the instruction executes a read on an analog channel. INSN_WRITE: the instruction executes a write on an analog channel. INSN_BITS: indicates that the instruction must read or write values on multiple digital I/O channels. INSN_GTOD: the instruction performs a Get Time Of Day acquisition. INSN_WAIT: the instruction blocks for a specified number of nanoseconds.
Instruction execution Once an instruction data structure has been filled in, the corresponding instruction is executed with the function comedi_do_insn: int comedi_do_insn comedi_t *device comedi_insn *instruction Many &comedi; instructions are shortcuts that relieve the programmer from explicitly filling in the data structure and calling the comedi_do_insn function. A list of instructions can be executed in one function call using the function comedi_do_insnlist: int comedi_do_insnlist comedi_t *device comedi_insnlist *list The parameter list is a pointer to a comedi_insnlist data structure holding a pointer to an array of comedi_insn and the number of instructions in the list: typedef struct comedi_insnlist_struct { unsigned int n_insns; comedi_insn *insns; } comedi_insnlist; The number of instructions in the list is limited in the implementation, because instructions are executed synchronously, i.e., the call blocks until the whole instruction (list) has finished.
Instructions for configuration explains how instructions are used to do acquisition on channels. This section explains how they are used to configure a subdevice. There are various sorts of configurations, and the specific information for each different configuration possibility is to be specified via the data buffer of the instruction data structure. (So, the pointer to a lsampl_t is misused as a pointer to an array with board-specific information.) Using INSN_CONFIG as the insn member in an instruction data structure indicates that the instruction will not perform acquisition on a channel, but will configure that channel. The chanspec member in the comedi_insn data structure, contains the channel to be configured. The zeroth element of the data array is always an id that specifies what type of configuration instruction is being performed. The meaning of rest of the elements in the data array depend on the configuration instruction id. Some of the possible ids are summarised in the table below, along with the meanings of the data array elements for each type of configuration instruction. data[0] Description n (number of elements in data array) Meanings of data[1], ..., data[n-1] INSN_CONFIG_DIO_INPUT Configure a DIO line as input. It is easier to use comedi_dio_config than to use this configuration instruction directly. 1 n/a INSN_CONFIG_DIO_OUTPUT Configure a DIO line as output. It is easier to use comedi_dio_config than to use this configuration instruction directly. 1 n/a INSN_CONFIG_ALT_SOURCE Select an alternate input source. This instruction is used by calibration programs to configure analog input channels which can be redirected to read internal calibration references. You need to set the CR_ALT_SOURCE flag in the chanspec when reading to actually read from the configured alternate input source. If you are using comedi_data_read, then the channel parameter can be bitwise or'd with the CR_ALT_SOURCE flag. 2 data[1]: alternate input source. INSN_CONFIG_BLOCK_SIZE Specify block size for asynchonous command data. When performing streaming input, many boards accumulate samples in internal fifos and transfer them to the host computer in chunks. Some drivers let you suggest a size in bytes for how big a the chunks should be. This lets you tune how often the host computer is interrupted with a new chunk of data. 2 data[1]: The desired block size in bytes. The actual configured block size is writen back to data[1] after the instruction completes. This instruction acts purely as a query if the block size is set to zero. INSN_CONFIG_DIO_QUERY Queries the configuration of a DIO line to see if it is an input or output. It is probably easier to use the comedilib function comedi_dio_get_config than to use this instruction directly. 2 data[1]: The instruction sets this element to either COMEDI_INPUT or COMEDI_OUTPUT. See the comedilib demo program demo/choose_clock.c for an example of using a configuration instruction.
Instruction for internal triggering This special instruction has INSN_INTTRIG as the insn member in its instruction data structure. Its execution causes an internal triggering event. This event can, for example, cause the device driver to start a conversion, or to stop an ongoing acquisition. The exact meaning of the triggering depends on the card and its particular driver. The data[0] element of the INSN_INTTRIG instruction is reserved for future use, and should be set to 0.
Commands for streaming acquisition The most powerful &comedi; acquisition primitive is the command. It's powerful because, with one single command, the programmer launches: a possibly infinite sequence of acquisitions, accompanied with various callback functionalities (DMA, interrupts, driver-specific callback functions), for any number of channels, with an arbitrary order of channels in each scan (possibly even with repeated channels per scan), and with various scan triggering sources, external (i.e., hardware pulses) as well as internal (i.e., pulses generated on the DAQ card itself, or generated by a software trigger instruction). This command functionality exists in the &comedi; API, because various data acquisition devices have the capability to perform this kind of complex acquisition, driven by either on-board or off-board timers and triggers. A command specifies a particular data acquisition sequence, which consists of a number of scans, and each scan is comprised of a number of conversions, which usually corresponds to a single A/D or D/A conversion. So, for example, a scan could consist of sampling channels 1, 2 and 3 of a particular device, and this scan should be repeated 1000 times, at intervals of 1 millisecond apart. The command function is complementary to the configuration instruction function: each channel in the command's chanlist should first be configured by an appropriate instruction.
Executing a command A command is executed by the function comedi_command: int comedi_command comedi_t *device comedi_cmd *command The following sections explain the meaning of the comedi_cmd data structure. Filling in this structure can be quite complicated, and requires good knowledge about the exact functionalities of the DAQ card. So, before launching a command, the application programmer is adviced to check whether this complex command data structure can be successfully parsed. So, the typical sequence for executing a command is to first send the command through comedi_command_test once or twice. The test will check that the command is valid for the particular device, and often makes some adjustments to the command arguments, which can then be read back by the user to see the actual values used. A &comedi; program can find out on-line what the command capabilities of a specific device are, by means of the comedi_get_cmd_src_mask function.
The command data structure The command executes according to the information about the requested acquisition, which is stored in the comedi_cmd data structure: typedef struct comedi_cmd_struct comedi_cmd; struct comedi_cmd_struct { unsigned int subdev; // which subdevice to sample unsigned int flags; // encode some configuration possibilities // of the command execution; e.g., // whether a callback routine is to be // called at the end of the command unsigned int start_src; // event to make the acquisition start unsigned int start_arg; // parameters that influence this start unsigned int scan_begin_src; // event to make a particular scan start unsigned int scan_begin_arg; // parameters that influence this start` unsigned int convert_src; // event to make a particular conversion start unsigned int convert_arg; // parameters that influence this start unsigned int scan_end_src; // event to make a particular scan terminate unsigned int scan_end_arg; // parameters that influence this termination unsigned int stop_src; // what make the acquisition terminate unsigned int stop_arg; // parameters that influence this termination unsigned int *chanlist; // pointer to list of channels to be sampled unsigned int chanlist_len; // number of channels to be sampled sampl_t *data; // address of buffer unsigned int data_len; // number of samples to acquire }; The start and end of the whole command acquisition sequence, and the start and end of each scan and of each conversion, is triggered by a so-called event. More on these in . The subdev member of the comedi_cmd structure is the index of the subdevice the command is intended for. The comedi_find_subdevice_by_type function can be useful in discovering the index of your desired subdevice. The chanlist member of the comedi_cmd data structure should point to an array whose number of elements is specified by chanlist_len (this will generally be the same as the scan_end_arg). The chanlist specifies the sequence of channels and gains (and analog references) that should be stepped through for each scan. The elements of the chanlist array should be initialized by packing the channel, range and reference information together with the CR_PACK macro. The data and data_len members can be safely ignored when issueing commands from a user-space program. They only have meaning when a command is sent from a kernel module using the kcomedilib interface, in which case they specify the buffer where the driver should write/read its data to/from. The final member of the comedi_cmd structure is the flags field, i.e., bits in a word that can be bitwise-or'd together. The meaning of these bits are explained in .
The command trigger events <anchor id="source.trigger.anchor"/> A command is a very versatile acquisition instruction, in the sense that it offers lots of possibilities to let different hardware and software sources determine when acquisitions are started, performed, and stopped. More specifically, the command data structure has five types of events: start the acquisition, start a scan, start a conversion, stop a scan, and stop the acquisition. Each event can be given its own source (the …_src members in the comedi_cmd data structure). And each event source can have a corresponding argument (the …_arg members of the comedi_cmd data structure) whose meaning depends on the type of source trigger. For example, to specify an external digital line 3 as a source (in general, any of the five event sources), you would use src=TRIG_EXT and arg=3. The following paragraphs discuss in somewhat more detail the trigger event sources(…_src), and the corresponding arguments (…_arg). The start of an acquisition is controlled by the start_src events. The available options are: TRIG_NOW: the start event occurs start_arg nanoseconds after the command is set up. Currently, only start_arg=0 is supported. TRIG_FOLLOW: (For an output device.) The start event occurs when data is written to the buffer. TRIG_EXT: the start event occurs when an external trigger signal occurs; e.g., a rising edge of a digital line. start_arg chooses the particular digital line. TRIG_INT: the start event occurs on a &comedi; internal signal, which is typically caused by an INSN_INTTRIG instruction. The start of the beginning of each scan is controlled by the scan_begin_src events. The available options are: TRIG_TIMER: scan begin events occur periodically. The time between scan begin events is scan_begin_arg nanoseconds. TRIG_FOLLOW: The scan begin event occurs immediately after a scan end event occurs. TRIG_EXT: the scan begin event occurs when an external trigger signal occurs; e.g., a rising edge of a digital line. scan_begin_arg chooses the particular digital line. The scan_begin_arg used here may not be supported exactly by the device, but it will be adjusted to the nearest supported value by comedi_command_test. The timing between each sample in a scan is controlled by the convert_src events. The available options are: TRIG_TIMER: the conversion events occur periodically. The time between convert events is convert_arg nanoseconds. TRIG_EXT: the conversion events occur when an external trigger signal occurs, e.g., a rising edge of a digital line. convert_arg chooses the particular digital line. TRIG_NOW: All conversion events in a scan occur simultaneously. The end of each scan is almost always specified by setting the scan_end_src event to TRIG_COUNT, with the argument being the same as the number of channels in the chanlist. You could probably find a device that allows something else, but it would be strange. The end of an acquisition is controlled by stop_src event. The available options are: TRIG_COUNT: stop the acquisition after stop_arg scans. TRIG_NONE: perform continuous acquisition, until stopped using comedi_cancel. stop_arg is used to denote how many samples should be used in the continuous acquisition. If stop_arg is set to 0, the entire output buffer may contribute to the output. If stop_arg != 0, only the memory for stop_arg samples will be used. Many drivers do not yet support stop_arg!=0 and should enforce stop_arg=0 via comedi_command_test. There are a couple of less usual or not yet implemented events: TRIG_TIME: cause an event to occur at a particular time. (This event source is reserved for future use.) TRIG_OTHER: driver specific event trigger. This event can be useful as any of the trigger sources. Its exact meaning is driver specific, because it implements a feature that otherwise does not fit into the generic &comedi; command interface. Configuration of TRIG_OTHER features are done by INSN_CONFIG instructions. The argument is reserved and should be set to 0. Not all event sources are applicable to all events. Supported trigger sources for specific events depend significantly on your particular device, and even more on the current state of its device driver. The comedi_get_cmd_src_mask function is useful for determining what trigger sources a subdevice supports.
The command flags <anchor id="source.flags.anchor"/> The flags field in the command data structure is used to specify some behaviour of the acquisitions in a command. The meaning of the field is as follows: TRIG_RT: ask the driver to use a hard real-time interrupt handler. This will reduce latency in handling interrupts from your data aquisition hardware. It can be useful if you are sampling at high frequency, or if your hardware has a small onboard data buffer. You must have a real-time kernel (RTAI or RTLinux/GPL) and must compile &comedi; with real-time support, or this flag will do nothing. TRIG_WAKE_EOS: where EOS stands for End of Scan. Some drivers will change their behaviour when this flag is set, trying to transfer data at the end of every scan (instead of, for example, passing data in chunks whenever the board's hardware data buffer is half full). This flag may degrade a driver's performance at high frequencies, because the end of a scan is, in general, a much more frequent event than the filling up of the data buffer. TRIG_ROUND_NEAREST: round to nearest supported timing period, the default. This flag (as well as the following three), indicates how timing arguments should be rounded if the hardware cannot achieve the exact timing requested. TRIG_ROUND_DOWN: round period down. TRIG_ROUND_UP: round period up. TRIG_ROUND_UP_NEXT: this one doesn't do anything, and I don't know what it was intended to do…? TRIG_DITHER: enable dithering? Dithering is a software technique to smooth the influence of discretization noise. TRIG_DEGLITCH: enable deglitching? Another noise smoothing technique. TRIG_WRITE: write to bidirectional devices. Could be useful, in principle, if someone wrote a driver that supported commands for a digital I/O device that could do either input or output. TRIG_BOGUS: do the motions? TRIG_CONFIG: perform configuration, not triggering. This is a legacy of the deprecated comedi_trig_struct data structure, and has no function at present.
Anti-aliasing If you wish to aquire accurate waveforms, it is vital that you use an anti-alias filter. An anti-alias filter is a low-pass filter used to remove all frequencies higher than the Nyquist frequency (half your sampling rate) from your analog input signal before you convert it to digital. If you fail to filter your input signal, any high frequency components in the original analog signal will create artifacts in your recorded digital waveform that cannot be corrected. For example, suppose you are sampling an analog input channel at a rate of 1000 Hz. If you were to apply a 900 Hz sine wave to the input, you would find that your sampling rate is not high enough to faithfully record the 900 Hz input, since it is above your Nyquist frequency of 500 Hz. Instead, what you will see in your recorded digital waveform is a 100 Hz sine wave! If you don't use an anti-alias filter, it is impossible to tell whether the 100 Hz sine wave you see in your digital signal was really produced by a 100 Hz input signal, or a 900 Hz signal aliased to 100 Hz, or a 1100 Hz signal, etc. In practice, the cutoff frequency for the anti-alias filter is usually set 10% to 20% below the Nyquist frequency due to fact that real filters do not have infinitely sharp cutoffs.
Slowly-varying inputs Note: The functions described here use an old feature that is no longer implemented by the &comedi; kernel layer. THEY WILL NOT WORK! Sometimes, your input channels change slowly enough that you are able to average many successive input values to get a more accurate measurement of the actual value. In general, the more samples you average, the better your estimate gets, roughly by a factor of sqrtnumber_of_samples. Obviously, there are limitations to this: you are ultimately limited by Spurious Free Dynamic Range. This SFDR is one of the popular measures to quantify how much noise a signal carries. If you take a Fourier transform of your signal, you will see several peaks in the transform: one or more of the fundamental harmonics of the measured signal, and lots of little peaks (called spurs) caused by noise. The SFDR is then the difference between the amplitude of the fundamental harmonic and of the largest spur (at frequencies below half of the Nyquist frequency of the DAQ sampler!). you need to have some noise on the input channel, otherwise you will be averaging the same number N times. (Of course, this only holds if the noise is large enough to cause at least a one-bit discretization.) the more noise you have, the greater your SFDR, but it takes many more samples to compensate for the increased noise. if you feel the need to average samples for, for example, two seconds, your signal will need to be very slowly-varying, i.e., not varying more than your target uncertainty for the entire two seconds. As you might have guessed, the &comedi; library has functions to help you in your quest to accurately measure slowly varying inputs: int comedi_sv_init comedi_sv_t *sv comedi_t *device unsigned int subdevice unsigned int channel The above function comedi_sv_init initializes the comedi_sv_t data structure, used to do the averaging acquisition: typedef struct comedi_sv_struct { comedi_t *dev; unsigned int subdevice; unsigned int chan; /* range policy */ int range; int aref; /* number of measurements to average (for analog inputs) */ int n; lsampl_t maxdata; } comedi_sv_t; The actual acquisition is done with the function comedi_sv_measure: int comedi_sv_measure comedi_sv_t *sv double *data The number of samples over which the function comedi_sv_measure averages is limited by the implementation (currently the limit is 100 samples). One typical use for this function is the measurement of thermocouple voltages. And the &comedi; self-calibration utility also uses these functions. On some hardware, it is possible to tell it to measure an internal stable voltage reference, which is typically going to be very slowly varying; on the kilosecond time scale or more. So, it is reasonable to measure millions of samples, to get a very accurate measurement of the A/D converter output value that corresponds to the voltage reference. Sometimes, however, this is overkill, since there is no need to perform a part-per-million calibration to a standard that is only accurate to a part-per-thousand.
Experimental functionality The following subsections document functionality that has not yet matured. Most of this functionality has even not been implemented yet in any single device driver. This information is included here, in order to stimulate discussion about their API, and to encourage pioneering implementations.
Digital input combining machines (Status: experimental (i.e., no driver implements this yet)) When one or several digital inputs are used to modify an output value, either an accumulator or a single digital line or bit, a bitfield structure is typically used in the &comedi; interface. The digital inputs have two properties, sensitive inputs and modifier inputs. Edge transitions on sensitive inputs cause changes in the output signal, whereas modifier inputs change the effect of edge transitions on sensitive inputs. Note that inputs can be both modifier inputs and sensitive inputs. For simplification purposes, it is assumed that multiple digital inputs do not change simultaneously. The combined state of the modifier inputs determine a modifier state. For each combination of modifier state and sensitive input, there is a set of bits that determine the effect on the output value due to positive or negative transitions of the sensitive input. For each transition direction, there are two bits defined as follows: 00 transition is ignored. 01 accumulator is incremented, or output is set. 10 accumulator is decremented, or output is cleared. 11 reserved. For example, a simple digital follower is specified by the bit pattern 01 10, because it sets the output on positive transitions of the input, and clears the output on negative transitions. A digital inverter is similarily 10 01. These systems have only one sensitive input. As another example, a simple up counter, which increments on positive transitions of one input, is specified by 01 00. This system has only one sensitive input. When multiple digital inputs are used, the inputs are divided into two types, inputs which cause changes in the accumulator, and those that only modify the meaning of transitions on other inputs. Modifier inputs do not require bitfields, but there needs to be a bitfield of length 4*(2^(N-1)) for each edge sensitive input, where N is the total number of inputs. Since N is usually 2 or 3, with only one edge sensitive input, the scaling issues are not significant.
Analog filtering configuration (Status: design (i.e., no driver implements this yet).) The insn field of the instruction data structure has not been assigned yet. The chanspec field of the instruction data structure is ignored. Some devices have the capability to add white noise (dithering) to analog input measurement. This additional noise can then be averaged out, to get a more accurate measurement of the input signal. It should not be assumed that channels can be separately configured. A simple design can use 1 bit to turn this feature on/off. Some devices have the capability of changing the glitch characteristics of analog output subsytems. The default (off) case should be where the average settling time is lowest. A simple design can use 1 bit to turn this feature on/off. Some devices have a configurable analog filters as part of the analog input stage. A simple design can use 1 bit to enable/disable the filter. Default is disabled, i.e., the filter being bypassed, or if the choice is between two filters, the filter with the largest bandwidth.
Analog Output Waveform Generation (Status: design (i.e., no driver implements this yet).) The insn field of the instruction data structure has not been assigned yet. The chanspec field of the instruction data structure is ignored. Some devices have the ability to cyclicly loop through samples kept in an on-board analog output FIFO. This config should allow the user to enable/disable this mode. This config should allow the user to configure the number of samples to loop through. It may be necessary to configure the channels used.
Extended Triggering (Status: alpha.) The insn field of the instruction data structure has not been assigned yet. The chanspec field of the instruction data structure is ignored. This section covers common information for all extended triggering configuration, and doesn't describe a particular type of extended trigger. Extended triggering is used to configure triggering engines that do not fit into commands. In a typical programming sequence, the application will use configuration instructions to configure an extended trigger, and a command, specifying TRIG_OTHER as one of the trigger sources. Extended trigger configuration should be designed in such a way that the user can probe for valid parameters, similar to how command testing works. An extended trigger configuration instruction should not configure the hardware directly, rather, the configuration should be saved until the subsequent command is issued. This allows more flexibility for future interface changes. It has not been decided whether the configuration stage should return a token that is then used as the trigger argument in the command. Using tokens is one method to satisfy the problem that extended trigger configurations may have subtle compatiblity issues with other trigger sources/arguments that can only be determined at command test time. Passing all stages of a command test should only be allowed with a properly configured extended trigger. Extended triggers must use data[1] as flags. The upper 16 bits are reserved and used only for flags that are common to all extended triggers. The lower 16 bits may be defined by the particular type of extended trigger. Various types of extended triggers must use data[1] to know which event the extended trigger will be assigned to in the command structure. The possible values are an OR'd mask of the following: COMEDI_EV_START COMEDI_EV_SCAN_BEGIN COMEDI_EV_CONVERT COMEDI_EV_SCAN_END COMEDI_EV_STOP
Analog Triggering (Status: alpha. The ni_mio_common.c driver implements this feature.) The insn field of the instruction data structure has not been assigned yet. The chanspec field of the instruction data structure is ignored. The data field of the instruction data structure is used as follows: data[1] trigger and combining machine configuration. data[2] analog triggering signal chanspec. data[3] primary analog level. data[4] secondary analog level. Analog triggering is described by a digital combining machine that has two sensitive digital inputs. The sensitive digital inputs are generated by configurable analog comparators. The analog comparators generate a digital 1 when the analog triggering signal is greater than the comparator level. The digital inputs are not modifier inputs. Note, however, there is an effective modifier due to the restriction that the primary analog comparator level must be less than the secondary analog comparator level. If only one analog comparator signal is used, the combining machine for the secondary input should be set to ignored, and the secondary analog level should be set to 0. The interpretation of the chanspec and voltage levels is device dependent, but should correspond to similar values of the analog input subdevice, if possible. Notes: Reading range information is not addressed. This makes it difficult to convert comparator voltages to data values. Possible extensions: A parameter that specifies the necessary time that the set condition has to be true before the trigger is generated. A parameter that specifies the necessary time that the reset condition has to be true before the state machine is reset.
Bitfield Pattern Matching Extended Trigger (Status: design. No driver implements this feature yet.) The insn field of the instruction data structure has not been assigned yet. The chanspec field of the instruction data structure is ignored. The data field of the instruction data structure is used as follows: data[1] trigger flags. data[2] mask. data[3] pattern. The pattern matching trigger issues a trigger when all of a specifed set of input lines match a specified pattern. If the device allows, the input lines should correspond to the input lines of a digital input subdevice, however, this will necessarily be device dependent. Each possible digital line that can be matched is assigned a bit in the mask and pattern. A bit set in the mask indicates that the input line must match the corresponding bit in the pattern. A bit cleared in the mask indicates that the input line is ignored. Notes: This only allows 32 bits in the pattern/mask, which may be too few. Devices may support selecting different sets of lines from which to match a pattern. Discovery: The number of bits can be discovered by setting the mask to all 1's. The driver must modify this value and return -EAGAIN.
Counter configuration (Status: design. No driver implements this feature yet.) The insn field of the instruction data structure has not been assigned yet. The chanspec field of the instruction data structure is used to specify which counter to use. (I.e., the counter is a &comedi; channel.) The data field of the instruction data structure is used as follows: data[1] trigger configuration. data[2] primary input chanspec. data[3] primary combining machine configuration. data[4] secondary input chanspec. data[5] secondary combining machine configuration. data[6] latch configuration. Note that this configuration is only useful if the counting has to be done in software. Many cards offer configurable counters in hardware; e.g., general purpose timer cards can be configured to act as pulse generators, frequency counters, timers, encoders, etc. Counters can be operated either in synchronous mode (using INSN_READ) or asynchronous mode (using commands), similar to analog input subdevices. The input signal for both modes is the accumulator. Commands on counter subdevices are almost always specified using scan_begin_src = TRIG_OTHER, with the counter configuration also serving as the extended configuration for the scan begin source. Counters are made up of an accumulator and a combining machine that determines when the accumulator should be incremented or decremented based on the values of the input signals. The combining machine optionally determines when the accumulator should be latched and put into a buffer. This feature is used in asynchronous mode. Note: How to access multiple pieces of data acquired at each event?
One source plus auxiliary counter configuration (Status: design. No driver implements this feature yet.) The insn field of the instruction data structure has not been assigned yet. The chanspec field of the instruction data structure is used to … The data field of the instruction data structure is used as follows: data[1] is flags, including the flags for the command triggering configuration. If a command is not subsequently issued on the subdevice, the command triggering portion of the flags are ignored. data[2] determines the mode of operation. The mode of operation is actually a bitfield that encodes what to do for various transitions of the source signals. data[3] data[4] determine the primary source for the counter, similar to the …_src and the …_arg fields used in the command data structure. Notes: How to specify which events cause a latch and push, and what should get latched?
National Instruments General Purpose Counters/Timers (GPCT) Counters/timers and pulse generators are fairly different in terms of functionality, but they correspond to similar devices seen either as input or output. When generalising, these devices are both referred to as "counters". The NI boards provide a couple of such counters, under the name of GPCT. A counter is made of the following basic elements: Input source the signal measured or the clock of the pulse generation. Gate controls when the counting (or sampling) occurs. Register holds the current count. Out for the output counters (pulse generators), the output signal. There are many different ways to count, time or generate pulses. All the modes rely on the counter and some particular configuration. For example, in a typical buffered counting mode, the source is the (digital) signal that is measured, the counter is increased at every rising edge of the signal, the gate is the (digital) signal indicating when to save the counter to memory. It is preferable you get first familiarized with these various modes by reading your NI board documentation before reading the following description on the mapping to the comedi interface. Each counter of the board is represented in comedi as a subdevice of type COMEDI_SUBD_COUNTER. Each subdevice has a device file associated (eg, /dev/comedi0_subd11) in order to read or write buffered data from or to the counter. Note that the comedi subdevice has three "channels". In most case, only channel 0 is to be used. Reading or writing on channel 0 corresponds to reading/writing the counter value. The GPCT also has two registers named A and B, they can be accessed respectively via channels 1 and 2. To configure the behaviour of the counter with comedi, the function comedi_set_counter_mode is used. The possible mode values are to be found in the ni_gpct_mode_bits enum constants. For instance, by default the counter is cumulative, even in buffered counting. To reinitialise it after each sampling (ie, after an edge on the gate signal), one can add the NI_GPCT_LOADING_ON_GATE_BIT to the mode. In that case, the counter will be reset to the value of the A register after each sampling. To configure the signal to be used as the "source", one uses the comedi_set_clock_source with one constant from the ni_gpct_clock_source_bits enum. When the period of the signal is fixed and known, it should be specified as the last parameter of the method, otherwise 0 should be passed. Note that in comedi this is called "clock" because in timer and pulse generator, this signal is used as the clock. To configure the signal to be used as the "gate", one uses the comedi_set_gate_source with one constant from the ni_gpct_gate_select enum. When the gate signal is not be used, NI_GPCT_DISABLED_GATE_SELECT should be specified. Some NI boards have two gates, but the behaviour associated with the second gate is usually unknown so it is recommended to disable it. Note that this is called "gate" because in some modes, this signal is used to block/unblock the counter. The function comedi_reset will stop and reset a counter. After being configured, to start a counter, it should be "armed", which can be done either with the comedi_arm function (for simple counting mode), or with the start_src member of the command (for buffered counting). One side thing to mention is the signal routing of the NI card, which is done via the PFIs (Programmable Function Inputs). NI's naming is confusing because they use the same name for the terminal (ie, physical input/output pins) and for the signal (ie, the logical information that controls/indicates a specific event). The routing allows to configure which signal goes to a PFI terminal. This is done via comedi_set_routing, with subdevice being the special DIO comedi subdevice (eg, 7 on M-series), the PFI terminal number as channel, the signal that should be routed to it encoded as source with one of the constants from the ni_pfi_routing enum. The direction of the pin must also be correctly configured (ie, whether it is used as input or output). This is done via comedi_dio_config with the same subdevice and channel, and either COMEDI_INPUT or COMEDI_OUTPUT.
National Instruments RTSI trigger bus A number of NI boards support the RTSI (Real Time System Integration) bus. It's primary use is to synchronize multiple DAQ cards. On PXI boards, the RTSI lines correspond to the PXI trigger lines 0 to 7. PCI boards use cables to connect to their RTSI ports. The RTSI bus consists of 8 digital signal lines numbered 0 to 7 that are bi-directional. Each of these signal lines can be configured as an input or output, and the signal appearing on the output of each line can be configured to one of several internal board timing signals (although on older boards RTSI line 7 can only be used for the clock signal). The ni_pcimio, ni_atmio, and ni_mio_cs drivers expose the RTSI bus as a digital I/O subdevice (subdevice number 10). The functions comedi_dio_config and comedi_dio_get_config can be used on the RTSI subdevice to set/query the direction (input or output) of each of the RTSI lines individually. The subdevice also supports the INSN_CONFIG_SET_CLOCK_SRC and INSN_CONFIG_GET_CLOCK_SRC configuration instructions, which can be used to configure/query what source the board uses to synchronize its master clock to. The various possibilities are defined in the comedi.h header file: Clock Source Description NI_MIO_INTERNAL_CLOCK Use the board's internal oscillator. NI_MIO_RTSI_CLOCK Use the RTSI line 7 as the master clock. This source is only supported on pre-m-series boards. The newer m-series boards use NI_MIO_PLL_RTSI_CLOCK instead. NI_MIO_PLL_PXI_STAR_TRIGGER_CLOCK Only available for newer m-series PXI boards. Synchronizes the board's phased-locked loop (which runs at 80MHz) to the PXI star trigger line. NI_MIO_PLL_PXI10_CLOCK Only available for newer m-series PXI boards. Synchronizes the board's phased-locked loop (which runs at 80MHz) to the 10 MHz PXI backplane clock. NI_MIO_PLL_RTSI_CLOCKn Only available for newer m-series boards. The function returns a clock source which will cause the board's phased-locked loop (which runs at 80MHz) to syncronize to the RTSI line specified in the function argument. For all clock sources except NI_MIO_INTERNAL_CLOCK and NI_MIO_PLL_PXI10_CLOCK, you should pass the period of the clock your are feeding to the board when using INSN_CONFIG_SET_CLOCK_SRC. Finally, the configuration instructions INSN_CONFIG_SET_ROUTING and INSN_CONFIG_GET_ROUTING can be used to select/query which internal signal will appear on a given RTSI output line. The header file comedi.h defines the following signal sources which can be routed to an RTSI line: Signal Source Description NI_RTSI_OUTPUT_ADR_START1 ADR_START1, an analog input start signal. See the NI's DAQ-STC Technical Reference Manual for more information. NI_RTSI_OUTPUT_ADR_START2 ADR_START2, an analog input stop signal. See the NI's DAQ-STC Technical Reference Manual for more information. NI_RTSI_OUTPUT_SCLKG SCLKG, a sample clock signal. See the NI's DAQ-STC Technical Reference Manual for more information. NI_RTSI_OUTPUT_DACUPDN DACUPDN, a dac update signal. See the NI's DAQ-STC Technical Reference Manual for more information. NI_RTSI_OUTPUT_DA_START1 DA_START1, an analog output start signal. See the NI's DAQ-STC Technical Reference Manual for more information. NI_RTSI_OUTPUT_G_SRC0 G_SRC0, the source signal to general purpose counter 0. See the NI's DAQ-STC Technical Reference Manual for more information. NI_RTSI_OUTPUT_G_GATE0 G_GATE0, the gate signal to general purpose counter 0. See the NI's DAQ-STC Technical Reference Manual for more information. NI_RTSI_OUTPUT_RGOUT0 RGOUT0, the output signal of general purpose counter 0. See the NI's DAQ-STC Technical Reference Manual for more information. NI_RTSI_OUTPUT_RTSI_BRDn RTSI_BRD0 though RTSI_BRD3 are four internal signals which can have various other signals routed to them in turn. Currently, comedi provides no way to configure the signals routed to the RTSI_BRD lines. See the NI's DAQ-STC Technical Reference Manual for more information. NI_RTSI_OUTPUT_RTSI_OSC The RTSI clock signal. On pre-m-series boards, this signal is always routed to RTSI line 7, and cannot be routed to lines 0 through 6. On m-series boards, any RTSI line can be configured to output the clock signal. The RTSI bus pins may be used as trigger inputs for many of the &comedi; trigger functions. To use the RTSI bus pins, set the source to be TRIG_EXT and the source argument using the return values from the NI_EXT_RTSIn function (or similarly the NI_EXT_PFIn function if you want to trigger from a PFI line). The CR_EDGE and CR_INVERT flags may also be set on the trigger source argument to specify edge and falling edge/low level triggering. An example to set up a device as a master is given below. An example to slave a m-series device from this master follows. A pre-m-series device would need to use NI_MIO_RTSI_CLOCK for the clock source instead. In your code, you may also wish to configure the master device to use the external clock source instead of using its internal clock directly (for best syncronization).
comedilib-0.11.0/doc/comedilib.css0000644000000000000000000000000012416542105023323 1comedilib-0.11.0/doc/doc_html/comedilib.css00000000000000comedilib-0.11.0/doc/command_funcref.txt0000644000000000000000000004453612715406005015057 00000000000000Asynchronous commands Function: comedi_cancel -- stop streaming input/output in progress Retval: int Param: comedi_t * device Param: unsigned int subdevice Description: The function comedi_cancel can be used to stop a command previously started by comedi_command which is still in progress on the subdevice indicated by the parameters device and subdevice. Returns: On success, 0 is returned. On failure, -1 is returned. Function: comedi_command -- start streaming input/output Retval: int Param: comedi_t * device Param: comedi_cmd * command Description: The function comedi_command starts a streaming input or output. The command structure pointed to by command specifies settings for the acquisition. The command must be able to pass comedi_command_test with a return value of 0, or comedi_command will fail. For input subdevices, sample values are read using the function read on the device file descriptor. For output subdevices, sample values are written using the function write. Returns: On success, 0 is returned. On failure, -1 is returned. Function: comedi_command_test -- test streaming input/output configuration Retval: int Param: comedi_t * device Param: comedi_cmd * command Description: The function comedi_command_test tests the command structure pointed to by the parameter command and returns an integer describing the testing stages that were successfully passed. In addition, if elements of the comedi_cmd structure are invalid, they may be modified. Source elements are modified to remove invalid source triggers. Argument elements are adjusted or rounded to the nearest valid value. Returns: The meanings of the return value are as follows: 0 indicates a valid command. 1 indicates that one of the …_src members of the command contained an unsupported trigger. The bits corresponding to the unsupported triggers are zeroed. 2 indicates that the particular combination of …_src settings is not supported by the driver, or that one of the …_src members has the bit corresponding to multiple trigger sources set at the same time. 3 indicates that one of the …_arg members of the command is set outside the range of allowable values. For instance, an argument for a TRIG_TIMER source which exceeds the board's maximum speed. The invalid …_arg members will be adjusted to valid values. 4 indicates that one of the …_arg members required adjustment. For instance, the argument of a TRIG_TIMER source may have been rounded to the nearest timing period supported by the board. 5 indicates that some aspect of the command's chanlist is unsupported by the board. For example, some analog input boards require that all channels in the chanlist use the same input range. On failure, -1 is returned. Function: comedi_get_buffer_contents -- streaming buffer status Retval: int Param: comedi_t * device Param: unsigned int subdevice Description: The function comedi_get_buffer_contents is used on a subdevice that has a Comedi command in progress to get the number of unread bytes. For a streaming input command, this is the number of bytes that can be read. For a streaming output command, subtracting this from the buffer size gives the space available to be written. Returns: On success, comedi_get_buffer_contents returns the number of unread bytes in the buffer. On failure, -1 is returned. Function: comedi_get_buffer_read_offset -- streaming buffer read offset Retval: int Param: comedi_t * device Param: unsigned int subdevice Description: The function comedi_get_buffer_read_offset is used on a subdevice that has a Comedi command in progress to get the current read position in the streaming buffer as an offset in bytes from the start of the buffer. The position will wrap around to 0 when it reaches the buffer size. This offset is only useful for memory mapped buffers. This function replaces comedi_get_buffer_offset and has the same functionality. Returns: On success, comedi_get_buffer_read_offset returns the current read position as an offset in bytes from the start of the buffer. On failure, -1 is returned. Function: comedi_get_buffer_write_offset -- streaming buffer write offset Retval: int Param: comedi_t * device Param: unsigned int subdevice Description: The function comedi_get_buffer_write_offset is used on a subdevice that has a Comedi command in progress to get the current write position in the streaming buffer as an offset in bytes from the start of the buffer. The position will wrap around to 0 when it reaches the buffer size. This offset is only useful for memory mapped buffers. Returns: On success, comedi_get_buffer_write_offset returns the current write position as an offset in bytes from the start of the buffer. On failure, -1 is returned. Function: comedi_get_buffer_read_count -- streaming buffer read count Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int * read_count Description: The function comedi_get_buffer_read_count is used on a subdevice that has a Comedi command in progress to get the number of bytes that have been read from the buffer, modulo UINT_MAX + 1. The value is stored in *read_count. Returns: On success, 0 is returned. On failure, -1 is returned. Function: comedi_get_buffer_write_count -- streaming buffer write count Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int * write_count Description: The function comedi_get_buffer_write_count is used on a subdevice that has a Comedi command in progress to get the number of bytes that have been written to the buffer, modulo UINT_MAX + 1. The value is stored in *write_count. Returns: On success, 0 is returned. On failure, -1 is returned. Function: comedi_get_buffer_size -- streaming buffer size of subdevice Retval: int Param: comedi_t * device Param: unsigned int subdevice Description: The function comedi_get_buffer_size returns the size (in bytes) of the streaming buffer for the subdevice specified by device and subdevice. Returns: On success, comedi_get_buffer_size returns the size of the buffer in bytes. On failure, -1 is returned. Function: comedi_get_cmd_generic_timed -- streaming input/output capabilities Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: comedi_cmd * command Param: unsigned int chanlist_len Param: unsigned int scan_period_ns Description: The command capabilities of the subdevice indicated by the parameters device and subdevice are probed, and the results placed in the command structure pointed to by the parameter command. The command structure pointed to by command is modified to be a valid command that can be used as a parameter to comedi_command (after the command has additionally been assigned a valid chanlist array). The command measures scans consisting of chanlist_len channels at a scan rate that corresponds to a period of scan_period_ns nanoseconds. The rate is adjusted to a rate that the device can handle. Returns: On success, 0 is returned. On failure, -1 is returned. Function: comedi_get_cmd_src_mask -- streaming input/output capabilities Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: comedi_cmd * command Description: The command capabilities of the subdevice indicated by the parameters device and subdevice are probed, and the results placed in the command structure pointed to by command. The trigger source elements of the command structure are set to be the bitwise-or of the subdevice's supported trigger sources. Other elements in the structure are undefined. Returns: On success, 0 is returned. On failure, -1 is returned. Function: comedi_get_max_buffer_size -- maximum streaming buffer size Retval: int Param: comedi_t * device Param: unsigned int subdevice Description: The function comedi_get_max_buffer_size returns the maximum allowable size (in bytes) of the streaming buffer for the subdevice specified by device and subdevice. Changing the maximum buffer size can be accomplished with comedi_set_max_buffer_size or with the comedi_config program, and requires appropriate privileges. Returns: On success, the maximum allowable size (in bytes) of the streaming buffer is returned. On failure, -1 is returned. Function: comedi_get_read_subdevice -- find streaming input subdevice Retval: int Param: comedi_t * device Description: The function comedi_get_read_subdevice returns the index of the subdevice whose streaming input buffer is currently accessible through the device device, if there is one. Returns: On success, comedi_get_read_subdevicereturns the index of the current read subdevice if there is one, or -1 if there is no read subdevice. On failure, -1 is returned. Function: comedi_get_write_subdevice -- find streaming output subdevice Retval: int Param: comedi_t * device Description: The function comedi_get_write_subdevice returns the index of the subdevice whose streaming output buffer is currently accessible through the device device, if there is one. Returns: On success, comedi_get_write_subdevicereturns the index of the current write subdevice if there is one, or -1 if there is no write subdevice. On failure, -1 is returned. Function: comedi_mark_buffer_read -- streaming buffer control Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int num_bytes Description: The function comedi_mark_buffer_read is used on a subdevice that has a Comedi input command in progress. It should only be used if you are using a mmap mapping to read data from Comedi's buffer (as opposed to calling read on the device file descriptor), since Comedi will automatically keep track of how many bytes have been transferred via read calls. This function is used to indicate that the next num_bytes bytes in the buffer are no longer needed and may be discarded. Returns: On success, comedi_mark_buffer_read returns the number of bytes successfully marked as read. The return value may be less than the num_bytes. On failure, -1 is returned. Function: comedi_mark_buffer_written -- streaming buffer control Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int num_bytes Description: The function comedi_mark_buffer_written is used on a subdevice that has a Comedi output command in progress. It should only be used if you are using a mmap mapping to write data to Comedi's buffer (as opposed to calling write on the device file descriptor), since Comedi will automatically keep track of how many bytes have been transferred via write calls. This function is used to indicate that the next num_bytes bytes in the buffer are valid and may be sent to the device. Returns: On success, comedi_mark_buffer_written returns the number of bytes successfully marked as written. The return value may be less than the num_bytes. On failure, -1 is returned. Function: comedi_poll -- force updating of streaming buffer Retval: int Param: comedi_t * device Param: unsigned int subdevice Description: The function comedi_poll is used on a subdevice that has a Comedi command in progress in order to update the streaming buffer. If supported by the driver, all available samples are copied to the streaming buffer. These samples may be pending in DMA buffers or device FIFOs. Only a few Comedi drivers support this operation. Returns: On success, comedi_poll returns the number of additional bytes available. On failure, -1 is returned. Function: comedi_set_buffer_size -- streaming buffer size of subdevice Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int size Description: The function comedi_set_buffer_size changes the size of the streaming buffer for the subdevice specified by device and subdevice. The buffer size will be set to size bytes, rounded up to a multiple of the virtual memory page size. The virtual memory page size can be determined using sysconf(_SC_PAGE_SIZE). This function does not require special privileges. However, it is limited to a (adjustable) maximum buffer size, which can be changed by a privileged user calling comedi_set_max_buffer_size, or running the program comedi_config. Returns: On success, comedi_set_buffer_size returns the new buffer size in bytes. On failure, -1 is returned. Function: comedi_set_max_buffer_size -- streaming maximum buffer size of subdevice Retval: int Param: comedi_t * device Param: unsigned int subdevice Param: unsigned int max_size Description: The function comedi_set_max_buffer_size changes the maximum allowable size (in bytes) of the streaming buffer for the subdevice specified by device and subdevice. Changing the maximum buffer size requires the user to have appropriate privileges. Returns: On success, comedi_set_max_buffer_size returns the new maximum buffer size in bytes. On failure, -1 is returned. Function: comedi_set_read_subdevice -- set streaming input subdevice Retval: int Param: comedi_t * device Param: unsigned int subdevice Status: Works for Linux "in-tree" Comedi since kernel version 3.19. Description: The function comedi_set_read_subdevice sets subdevice as the current read subdevice if the subdevice supports streaming input commands. No action is performed if subdevice is already the current read subdevice. Changes are local to the open file description for this device and have no effect on other open file descriptions for the underlying device node. Returns: On success, 0 is returned. On failure, -1 is returned. Function: comedi_set_write_subdevice -- set streaming output subdevice Retval: int Param: comedi_t * device Param: unsigned int subdevice Status: Works for Linux "in-tree" Comedi since kernel version 3.19. Description: The function comedi_set_write_subdevice sets subdevice as the current write subdevice if the subdevice supports streaming output commands. No action is performed if subdevice is already the current write subdevice. Changes are local to the open file description for this device and have no effect on other open file descriptions for the underlying device node. Returns: On success, 0 is returned. On failure, -1 is returned. comedilib-0.11.0/doc/extensions_funcref.xml0000644000000000000000000012362712715116163015623 00000000000000 %comedilib_entities; ]>
Extensions comedi_arm 3 Comedi Comedi reference comedi_arm arm a subdevice #include <comedilib.h> int comedi_arm comedi_t * device unsigned int subdevice unsigned int source Status alpha Description This function arms a subdevice. It may, for example, arm a counter to begin counting. The source parameter specifies what source should trigger the subdevice to begin. The possible sources are driver-dependant. This function is only useable on subdevices that provide support for the INSN_CONFIG_ARM configuration instruction. Some subdevices treat this as an instruction to arm a specific channel. For those subdevices, this function will arm channel 0 and comedi_arm_channel should be called instead of this one to specify the channel. Return value 0 on success, -1 on error. comedi_arm_channel 3 Comedi Comedi reference comedi_arm_channel arm a subdevice channel #include <comedilib.h> int comedi_arm_channel comedi_t * device unsigned int subdevice unsigned int channel unsigned int source Status alpha Description This function arms a specified channel of a subdevice. It may, for example, arm a counter to begin counting. The source parameter specifies what source should trigger the subdevice to begin. The possible sources are driver-dependant. This function is only useable on subdevices that provide support for the INSN_CONFIG_ARM configuration instruction. Some subdevices treat this as an instruction to arm the whole subdevice and ignore the specified channel. For such subdevices, comedi_arm is normally called instead. Return value 0 on success, -1 on error. comedi_digital_trigger_disable 3 Comedi Comedi reference comedi_digital_trigger_disable disable a digital trigger #include <comedilib.h> int comedi_digital_trigger_disable comedi_t * device unsigned int subdevice unsigned int trigger_id Status alpha Description This function disables a digital trigger on a subdevice, returning it to its default, inactive, unconfigured state. If the subdevice supports several digital triggers, the trigger_id selects one. This function is only useable on subdevices that provide support for the INSN_CONFIG_DIGITAL_TRIG configuration instruction. Return value 0 on success, -1 on error. comedi_digital_trigger_enable_edges 3 Comedi Comedi reference comedi_digital_trigger_enable_edges set digital trigger edge detection #include <comedilib.h> int comedi_digital_trigger_enable_edges comedi_t * device unsigned int subdevice unsigned int trigger_id unsigned int base_input unsigned int rising_edge_inputs unsigned int falling_edge_inputs Status alpha Description This function enables edge detection for a digital trigger on a subdevice. If the subdevice supports several digital triggers, the trigger_id selects one. The rising_edge_inputs and falling_edge_inputs parameters are bit fields that enable (1) or disable (0) rising and falling edge detection on a set of (up to) 32 inputs. The least-significant bit corresponds to the input specified by the base_input parameter, with subsequent bits corresponding to subsequent inputs. Successive calls to this function have an cumulative effect, which allows digital triggers to be set up for more than 32 inputs. There may also be a cumulative effect with calls to comedi_digital_trigger_enable_levels if the digital trigger supports a combination of edge and level triggering. Due to the cumulative effect, it may be necessary to call comedi_digital_trigger_disable to clear the old settings before reconfiguring the digital trigger inputs. A digital trigger may support edge detection, level detection, both at different times, or both at the same time. If it supports both but not at the same time, configuring edge triggers will disable any previous level triggers, or vice versa. This function is only useable on subdevices that provide support for the INSN_CONFIG_DIGITAL_TRIG configuration instruction, and only if the digital trigger supports edge detection. Return value 0 on success, -1 on error. comedi_digital_trigger_enable_levels 3 Comedi Comedi reference comedi_digital_trigger_enable_levels set digital trigger level detection #include <comedilib.h> int comedi_digital_trigger_enable_levels comedi_t * device unsigned int subdevice unsigned int trigger_id unsigned int base_input unsigned int high_level_inputs unsigned int low_level_inputs Status alpha Description This function enables level detection for a digital trigger on a subdevice. If the subdevice supports several digital triggers, the trigger_id selects one. The high_level_inputs and low_level_inputs parameters are bit fields that enable (1) or disable (0) high and low level detection on a set of (up to) 32 inputs. The least-significant bit corresponds to the input specified by the base_input parameter, with subsequent bits corresponding to subsequent inputs. Successive calls to this function have an cumulative effect, which allows digital triggers to be set up for more than 32 inputs. There may also be a cumulative effect with calls to comedi_digital_trigger_enable_edges if the digital trigger supports a combination of edge and level triggering. Due to the cumulative effect, it may be necessary to call comedi_digital_trigger_disable to clear the old settings before reconfiguring the digital trigger inputs. A digital trigger may support edge detection, level detection, both at different times, or both at the same time. If it supports both but not at the same time, configuring level triggers will disable any previous edge triggers, or vice versa. This function is only useable on subdevices that provide support for the INSN_CONFIG_DIGITAL_TRIG configuration instruction, and only if the digital trigger supports level detection. Return value 0 on success, -1 on error. comedi_disarm 3 Comedi Comedi reference comedi_disarm disarm a subdevice #include <comedilib.h> int comedi_disarm comedi_t * device unsigned int subdevice Status alpha Description This function disarms a subdevice. It may, for example, stop a counter counting. This function is only useable on subdevices that provide support for the INSN_CONFIG_DISARM configuration instruction. Some subdevices treat this as an instruction to disarm a specific channel. For those subdevices, this function will disarm channel 0 and comedi_disarm_channel should be called instead of this one to specify the channel. Return value 0 on success, -1 on error. comedi_disarm_channel 3 Comedi Comedi reference comedi_disarm_channel disarm a subdevice channel #include <comedilib.h> int comedi_disarm_channel comedi_t * device unsigned int subdevice unsigned int channel Status alpha Description This function disarms a specified channel of a subdevice. It may, for example, stop a counter counting. This function is only useable on subdevices that provide support for the INSN_CONFIG_DISARM configuration instruction. Some subdevices treat this as an instruction to disarm the whole subdevice and ignore the specified channel. For such subdevices, comedi_disarm is normally called instead. Return value 0 on success, -1 on error. comedi_get_clock_source 3 Comedi Comedi reference comedi_get_clock_source get master clock for a subdevice #include <comedilib.h> int comedi_get_clock_source comedi_t * device unsigned int subdevice unsigned int channel unsigned int * clock unsigned int * period_ns Status alpha Description This function queries the master clock for a subdevice, as set by comedi_set_clock_source. The currently configured master clock will be written to *clock. The possible values and their corresponding clocks are driver-dependant. The period of the clock in nanoseconds (or zero if it is unknown) will be written to *period_ns. If the subdevice does not support configuring its master clocks on a per-channel basis, then the channel parameter will be ignored. It is safe to pass NULL pointers as the clock or period_ns parameters. This function is only useable on subdevices that provide support for the INSN_CONFIG_GET_CLOCK_SRC configuration instruction. Return value 0 on success, -1 on error. comedi_get_gate_source 3 Comedi Comedi reference comedi_get_gate_source get gate for a subdevice #include <comedilib.h> int comedi_get_gate_source comedi_t * device unsigned int subdevice unsigned int channel unsigned int gate_index unsigned int * gate_source Status alpha Description This function queries the gate for a subdevice, as set by comedi_set_gate_source. The currently configured gate source will be written to *gate_source. The possible values and their corresponding gates are driver-dependant. If the subdevice does not support configuring its gates on a per-channel basis, then the channel parameter will be ignored. This function is only useable on subdevices that provide support for the INSN_CONFIG_GET_GATE_SRC configuration instruction. Return value 0 on success, -1 on error. comedi_get_hardware_buffer_size 3 Comedi Comedi reference comedi_get_hardware_buffer_size get size of subdevice's hardware buffer #include <comedilib.h> int comedi_get_hardware_buffer_size comedi_t *device unsigned int subdevice enum comedi_io_direction direction Description This function returns the number of bytes the subdevice can hold in it's hardware buffer. The term hardware buffer refers to any FIFOs, etc. on the acquisition board itself which are used during streaming commands. This does not include the buffer maintained by the comedi kernel module in host memory, whose size may be queried by comedi_get_buffer_size. The direction parameter of type enum comedi_io_direction should be set to COMEDI_INPUT to query the input buffer size (e.g., the buffer of an analog input subdevice), or COMEDI_OUTPUT to query the output buffer size (e.g., the buffer of an analog output). Return value Hardware buffer size in bytes, or -1 on error. comedi_get_routing 3 Comedi Comedi reference comedi_get_routing get routing for an output #include <comedilib.h> int comedi_get_routing comedi_t * device unsigned int subdevice unsigned int channel unsigned int * routing Status alpha Description This function queries the routing for an output, as set by comedi_set_routing. The currently configured routing will be written to *routing. The possible values and their corresponding routings are driver-dependant. This function is only useable on subdevices that provide support for the INSN_CONFIG_GET_ROUTING configuration instruction. Return value 0 on success, -1 on error. comedi_reset 3 Comedi Comedi reference comedi_reset reset a subdevice #include <comedilib.h> int comedi_reset comedi_t * device unsigned int subdevice Status alpha Description This function resets a subdevice. It is only useable on subdevices that provide support for the INSN_CONFIG_RESET configuration instruction. Some subdevices treat this as an instruction to reset a specific channel. For those subdevices, this function will reset channel 0 and comedi_reset_channel should be called instead of this one to specify the channel. Return value 0 on success, -1 on error. comedi_reset_channel 3 Comedi Comedi reference comedi_reset_channel reset a subdevice channel #include <comedilib.h> int comedi_reset_channel comedi_t * device unsigned int subdevice unsigned int channel Status alpha Description This function resets a specified channel of a subdevice. It is only useable on subdevices that provide support for the INSN_CONFIG_RESET configuration instruction. Some subdevices treat this as an instruction to reset the whole subdevice and ignore the specified channel. For such subdevices, comedi_reset is normally called instead. Return value 0 on success, -1 on error. comedi_set_clock_source 3 Comedi Comedi reference comedi_set_clock_source set master clock for a subdevice #include <comedilib.h> int comedi_set_clock_source comedi_t * device unsigned int subdevice unsigned int channel unsigned int clock unsigned int period_ns Status alpha Description This function selects a master clock for a subdevice. The clock parameter selects the master clock, and is driver-dependant. If the subdevice does not support configuring its master clocks on a per-channel basis, then the channel parameter will be ignored. The period_ns parameter specifies the clock's period in nanoseconds. It may left unspecified by using a value of zero. Drivers will ignore the clock period if they already know what the clock period should be for the specified clock (e.g. for an on-board 20MHz oscillator). Certain boards which use a phase-locked loop to synchronize to external clock sources must be told the period of the external clock. Specifying a clock period for an external clock may also allow the driver to support TRIG_TIMER sources in commands while using the external clock. The clock may be queried with the comedi_get_clock_source function. This function is only useable on subdevices that provide support for the INSN_CONFIG_SET_CLOCK_SRC configuration instruction. Return value 0 on success, -1 on error. comedi_set_counter_mode 3 Comedi Comedi reference comedi_set_counter_mode change mode of a counter subdevice #include <comedilib.h> int comedi_set_counter_mode comedi_t * device unsigned int subdevice unsigned int channel unsigned int mode Status alpha Description This function configures a counter subdevice. The meaning of the mode parameter is driver-dependent. If the subdevice does not support configuring its mode on a per-channel basis, then the channel parameter will be ignored. It is only useable on subdevices that provide support for the INSN_CONFIG_SET_COUNTER_MODE configuration instruction. Return value 0 on success, -1 on error. comedi_set_filter 3 Comedi Comedi reference comedi_set_filter select a filter for a subdevice #include <comedilib.h> int comedi_set_filter comedi_t * device unsigned int subdevice unsigned int channel unsigned int filter Status alpha Description This function selects a filter for a subdevice. For instance, a digital input subdevice may provide deglitching filters with varying cutoff frequencies. The filters are used to prevent high-frequency noise from causing unwanted transitions on the digital inputs. This function can tell the hardware which deglitching filter to use, or to use none at all. The filter parameter selects which of the subdevice's filters to use, and is driver-dependant. This function is only useable on subdevices that provide support for the INSN_CONFIG_FILTER configuration instruction. Return value 0 on success, -1 on error. comedi_set_gate_source 3 Comedi Comedi reference comedi_set_gate_source select gate source for a subdevice #include <comedilib.h> int comedi_set_gate_source comedi_t * device unsigned int subdevice unsigned int channel unsigned int gate_index unsigned int gate_source Status alpha Description This function selects a gate source for a subdevice. The gate_index parameter selects which gate is being configured, should the subdevice have multiple gates. It takes a value from 0 to N-1 for a subdevice with N different gates. The gate_source parameter selects which signal you wish to use as the gate, and is also driver-dependent. If the subdevice does not support configuring its gates on a per-channel basis, then the channel parameter will be ignored. You may query the gate source with the comedi_get_gate_source function. This function is only useable on subdevices that provide support for the INSN_CONFIG_SET_GATE_SRC configuration instruction. Return value 0 on success, -1 on error. comedi_set_other_source 3 Comedi Comedi reference comedi_set_other_source select source signal for something other than a gate or clock #include <comedilib.h> int comedi_set_other_source comedi_t * device unsigned int subdevice unsigned int channel unsigned int other unsigned int source Status alpha Description This function allows selection of a source signal for something on a subdevice other than a gate (which uses comedi_set_gate_source) or a clock (which uses comedi_set_clock_source). The other parameter selects which other we are configuring, and is driver-dependent. The source parameter selects the source we which to use for the other. If the subdevice does not support configuring its other sources on a per-channel basis, then the channel parameter will be ignored. As an example, this function is used to select which PFI digital input channels should be used as the A/B/Z signals when running a counter on an NI M-Series board as a quadrature encoder. The other parameter selects either the A, B, or Z signal, and the source parameter is used to specify which PFI digital input channel the external A, B, or Z signal is physically connected to. This function is only useable on subdevices that provide support for the INSN_CONFIG_SET_OTHER_SRC configuration instruction. Return value 0 on success, -1 on error. comedi_set_routing 3 Comedi Comedi reference comedi_set_routing select a routing for an output #include <comedilib.h> int comedi_set_routing comedi_t * device unsigned int subdevice unsigned int channel unsigned int routing Status alpha Description This function configures a mutiplexed output channel which can output a variety of different signals (such as NI's RTSI and PFI lines). The routing parameter selects which signal should be routed to appear on the selected output channel, and is driver-dependant. The routing may be queried with the comedi_get_routing function. This function is only useable on subdevices that provide support for the INSN_CONFIG_SET_ROUTING configuration instruction. Return value 0 on success, -1 on error.
comedilib-0.11.0/doc/bindings.xml0000644000000000000000000001244612416542105013502 00000000000000 %comedilib_entities; ]>
Language bindings Comedilib is a C library but comes also with bindings for Python, Perl, and Ruby. This enables usage of a DAQ device directly from these higher level languages.
Python bindings Python bindings are automatically generated by SWIG. So always keep in mind that for precise information the SWIG documentation can come in handy in addition to the &comedi; documentation. The name of the module is called comedi. All the C functions, structs, and constants are directly available as is. So you can refer directly to the C documentation for most of the usage. Note that, as in C, the functions either return the successful result or an error code. Unlike typical Python functions, no exceptions are generated on errors (excepted type-checking performed by SWIG). For example, to open a &comedi; device you can write in Python: import comedi device = comedi.comedi_open("/dev/comedi0") if device is None: errno = comedi.comedi_errno() print "Error (%d) %s" % (errno, comedi.comedi_strerror(errno)) return There are a few things to be aware of. The SWIG bindings automatically take care of converting functions with output parameters to function returning multiple values, if the type of the output parameter is simple. For example comedi_data_read takes as argument a lsampl_t *data which will contain the data read after the function returns. So in C it is used like this: As lsampl_t is a 32-bit unsigned int, in Python, the function is used like this: rc, data = comedi.comedi_data_read(device, subdevice, channel, range, aref) SWIG takes care of converting simple types between Python and C, but does not convert more complex types such as arrays or structs. Special Python classes are created for these. Moreover, &comedi; also provides a few macros. These macros are available in Python as functions with similar names, but lowercase: comedi.cr_pack, comedi.cr_range, etc. So to create and modify a command, one can do in Python: cmd = comedi.comedi_cmd_struct() comedi.comedi_get_cmd_generic_timed(device, subdevice, cmd, nchans, period_ns) cmd.stop_src = comedi.TRIG_COUNT cmd.stop_arg = nscans # create and add the channel list clist = comedi.chanlist(nchans) for i, channel in range(nchans): clist[i] = comedi.cr_pack(channel, range, comedi.AREF_GROUND) cmd.chanlist = clist One unfortunate consequence is that the objects to represent arrays are as low-level as C arrays (i.e., a pointer with an addition). They have no range checking and no iterator. In addition, they have to be cast from the Python object to the C object. So to create an instruction to call the internal trigger, you would write in Python: insn = comedi.comedi_insn_struct() insn.subdev = subdevice insn.insn = comedi.INSN_INTTRIG insn.n = 1 data = comedi.lsampl_array(insn.n) data[0] = num insn.data = data.cast() rc = comedi.comedi_do_insn(device, insn) When you need to convert from a raw SWIG object to a proxy object, the .frompointer of the Python object can be used. Also note that by default when the proxy object is deleted, SWIG frees the memory associated to it. To still be able to use the memory, you need to set .thisown to False. Reading (or writing) a large set of data from a &comedi; device is done via a file. In C, this is done by using a file number, but in Python you need a File object. You can get a File object via os.fdopen. For example, to read an array of input data from a &comedi; device into a numpy array, one could do: fileno = comedi.comedi_fileno(device) file = os.fdopen(fileno, 'r+') buf = numpy.fromfile(file, dtype=numpy.uint32, count=(nscans * nchans))
comedilib-0.11.0/doc/drivers.txt0000644000000000000000000032615313105043403013376 00000000000000Driver: 8255 Description: generic 8255 support Devices: [standard] 8255 (8255) Author: ds Status: works Updated: Fri, 7 Jun 2002 12:56:45 -0700 The classic in digital I/O. The 8255 appears in Comedi as a single digital I/O subdevice with 24 channels. The channel 0 corresponds to the 8255's port A, bit 0; channel 23 corresponds to port C, bit 7. Direction configuration is done in blocks, with channels 0-7, 8-15, 16-19, and 20-23 making up the 4 blocks. The only 8255 mode supported is mode 0. You should enable compilation this driver if you plan to use a board that has an 8255 chip. For multifunction boards, the main driver will configure the 8255 subdevice automatically. This driver also works independently with ISA and PCI cards that directly map the 8255 registers to I/O ports, including cards with multiple 8255 chips. To configure the driver for such a card, the option list should be a list of the I/O port bases for each of the 8255 chips. For example, comedi_config /dev/comedi0 8255 0x200,0x204,0x208,0x20c Note that most PCI 8255 boards do NOT work with this driver, and need a separate driver as a wrapper. For those that do work, the I/O port base address can be found in the output of 'lspci -v'. Driver: acl7225b Description: ADLINK NuDAQ ACL-7225b & compatibles Author: José Luis Sánchez (jsanchezv@teleline.es) Status: testing Devices: [ADLINK] ACL-7225b (acl7225b), [ICP] P16R16DIO (p16r16dio) Driver: adl_pci6208 Description: ADLINK PCI-6216V Devices: [ADLINK] PCI-6216V (adl_pci6208) Author: nsyeow Updated: Tue, 10 Feb 2015 15:29:55 +0000 Status: untested Configuration Options: none The driver should work for PCI-6208V, PCI-6208A and PCI-6216V, but all devices will be treated as a PCI-6216V. For PCI-6208V and PCI-6208A, only AO channels 0 to 7 are connected and AO channels 8 to 15 will behave as "phantom" outputs. The current output ranges for PCI-6208A are not supported. Only Comedi sample values 0x8000 to 0xffff should be written to the AO channels on a PCI-6208A. Its voltage to current daughter board (EXP-8A) only supports an input range of 0 to 10 volts and negative voltages may damage the board. Comedi sample values 0x0000 to 0x7fff would produce negative voltages from -10 to 0 volts. References: - ni_660x.c - adl_pci9111.c copied the entire pci setup section - adl_pci9118.c Driver: adl_pci7230 Description: Driver for the ADLINK PCI-7230 32 ch. isolated digital io board Devices: [ADLINK] PCI-7230 (adl_pci7230) Author: David Fernandez Status: experimental Updated: Mon, 14 Apr 2008 15:08:14 +0100 Configuration Options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first supported PCI device found will be used. Driver: adl_pci7250 Description: Driver for the ADLINK PCI-7250 relay output & digital input card Devices: [ADLINK] PCI-7250 (adl_pci7250) LPCI-7250 LPCIe-7250 Author: Ian Abbott Status: works Updated: Wed, 17 Jun 2015 09:22:58 +0000 The driver assumes that 3 PCI-7251 modules are fitted to the PCI-7250, giving 32 channels of relay outputs and 32 channels of isolated digital inputs. That is also the case for the LPCI-7250 and LPCIe-7250 cards although they do not physically support the PCI-7251 modules. Not fitting the PCI-7251 modules shouldn't do any harm, but the extra inputs and relay outputs won't work! Configuration Options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first supported PCI device found will be used. Driver: adl_pci7296 Description: Driver for the ADLINK PCI-7296 96 ch. digital io board Devices: [ADLINK] PCI-7296 (adl_pci7296) Author: Jon Grierson Updated: Mon, 14 Apr 2008 15:05:56 +0100 Status: testing Configuration Options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first supported PCI device found will be used. Driver: adl_pci7432 Description: Driver for the ADLINK PCI-7432 64 ch. isolated digital io board Devices: [ADLINK] PCI-7432 (adl_pci7432) Author: Michel Lachaine Status: experimental Updated: Mon, 14 Apr 2008 15:08:14 +0100 Configuration Options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first supported PCI device found will be used. Driver: adl_pci8164 Description: Driver for the ADLINK PCI-8164 4 Axes Motion Control board Devices: [ADLINK] PCI-8164 (adl_pci8164) Author: Michel Lachaine Status: experimental Updated: Mon, 14 Apr 2008 15:10:32 +0100 Configuration Options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first supported PCI device found will be used. Driver: adl_pci9111 Description: ADLINK PCI-9111HR Author: Emmanuel Pacaud Devices: [ADLINK] PCI-9111HR (adl_pci9111) Status: experimental Supports: - ai_insn read - ao_insn read/write - di_insn read - do_insn read/write - ai_do_cmd mode with the following sources: - start_src TRIG_NOW - scan_begin_src TRIG_FOLLOW TRIG_TIMER TRIG_EXT - convert_src TRIG_TIMER TRIG_EXT - scan_end_src TRIG_COUNT - stop_src TRIG_COUNT TRIG_NONE The scanned channels must be consecutive and start from 0. They must all have the same range and aref. Configuration options: [0] - PCI bus number (optional) [1] - PCI slot number (optional) If bus/slot is not specified, the first available PCI device will be used. Driver: adl_pci9112 Description: ADLINK PCI-9112 Author: Pascal Berthou Emmanuel Pacaud Devices: [ADLINK] PCI-9112 (adl_pci9112) Status: experimental Supports: - ai_insn read - ao_insn read/write - di_insn read - do_insn read/write Following command mode are not tested - ai_do_cmd mode with the following sources: - start_src TRIG_NOW - scan_begin_src TRIG_FOLLOW TRIG_TIMER TRIG_EXT - convert_src TRIG_TIMER TRIG_EXT - scan_end_src TRIG_COUNT - stop_src TRIG_COUNT TRIG_NONE The scanned channels must be consecutive and start from 0. They must all have the same range and aref. Configuration options: [0] - PCI bus number (optional) [1] - PCI slot number (optional) If bus/slot is not specified, the first available PCI device will be used. Driver: adl_pci9118 Description: ADLINK PCI-9118DG, PCI-9118HG, PCI-9118HR Author: Michal Dobes Devices: [ADLINK] PCI-9118DG (pci9118dg), PCI-9118HG (pci9118hg), PCI-9118HR (pci9118hr) Status: works This driver supports AI, AO, DI and DO subdevices. AI subdevice supports cmd and insn interface, other subdevices support only insn interface. For AI: - If cmd->scan_begin_src=TRIG_EXT then trigger input is TGIN (pin 46). - If cmd->convert_src=TRIG_EXT then trigger input is EXTTRG (pin 44). - If cmd->start_src/stop_src=TRIG_EXT then trigger input is TGIN (pin 46). - It is not neccessary to have cmd.scan_end_arg=cmd.chanlist_len but cmd.scan_end_arg modulo cmd.chanlist_len must by 0. - If return value of cmdtest is 5 then you've bad channel list (it isn't possible mixture S.E. and DIFF inputs or bipolar and unipolar ranges). There are some hardware limitations: a) You cann't use mixture of unipolar/bipoar ranges or differencial/single ended inputs. b) DMA transfers must have the length aligned to two samples (32 bit), so there is some problems if cmd->chanlist_len is odd. This driver tries bypass this with adding one sample to the end of the every scan and discard it on output but this cann't be used if cmd->scan_begin_src=TRIG_FOLLOW and is used flag TRIG_WAKE_EOS, then driver switch to interrupt driven mode with interrupt after every sample. c) If isn't used DMA then you can use only mode where cmd->scan_begin_src=TRIG_FOLLOW. Configuration options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, then first available PCI card will be used. [2] - 0= standard 8 DIFF/16 SE channels configuration n= external multiplexer connected, 1<=n<=256 [3] - 0=autoselect DMA or EOC interrupts operation 1=disable DMA mode 3=disable DMA and INT, only insn interface will work [4] - sample&hold signal - card can generate signal for external S&H board 0=use SSHO (pin 45) signal is generated in onboard hardware S&H logic 0!=use ADCHN7 (pin 23) signal is generated from driver, number say how long delay is requested in ns and sign polarity of the hold (in this case external multiplexor can serve only 128 channels) [5] - 0=stop measure on all hardware errors 2|=ignore ADOR - A/D Overrun status 8|=ignore Bover - A/D Burst Mode Overrun status 256|=ignore nFull - A/D FIFO Full status Driver: adq12b Description: driver for MicroAxial ADQ12-B data acquisition and control card Devices: [MicroAxial] ADQ12-B (adq12b) Author: jeremy theler Updated: Thu, 21 Feb 2008 02:56:27 -0300 Status: works Driver for the acquisition card ADQ12-B (without any add-on). - Analog input is subdevice 0 (16 channels single-ended or 8 differential) - Digital input is subdevice 1 (5 channels) - Digital output is subdevice 1 (8 channels) - The PACER is not supported in this version If you do not specify any options, they will default to # comedi_config /dev/comedi0 adq12b 0x300,0,0 option 1: I/O base address. The following table is provided as a help of the hardware jumpers. address jumper JADR 0x300 1 (factory default) 0x320 2 0x340 3 0x360 4 0x380 5 0x3A0 6 option 2: unipolar/bipolar ADC selection: 0 -> bipolar, 1 -> unipolar selection comedi_config option JUB bipolar 0 2-3 (factory default) unipolar 1 1-2 option 3: single-ended/differential AI selection: 0 -> SE, 1 -> differential selection comedi_config option JCHA JCHB single-ended 0 1-2 1-2 (factory default) differential 1 2-3 2-3 written by jeremy theler instituto balseiro comision nacional de energia atomica universidad nacional de cuyo argentina 21-feb-2008 + changed supported devices string (missused the [] and ()) 13-oct-2007 + first try Driver: adv_pci1710 Description: Advantech PCI-1710, PCI-1710HG, PCI-1711, PCI-1713, Advantech PCI-1720, PCI-1731 Author: Michal Dobes Devices: [Advantech] PCI-1710 (pci1710 or adv_pci1710), PCI-1710HG (pci1710hg), PCI-1711 (pci1711 or adv_pci1710), PCI-1713 (pci1713 or adv_pci1710), PCI-1716 (pci1716 or adv_pci1710), PCI-1720 (pci1720 or adv_pci1710), PCI-1731 (pci1731 or adv_pci1710) Updated: Fri, 05 May 2017 12:31:39 +0000 Status: works This driver supports AI, AO, DI and DO subdevices. AI subdevice supports cmd and insn interface, other subdevices support only insn interface. The PCI-1710 and PCI-1710HG have the same PCI device ID, so the driver cannot distinguish between them, as would be normal for a PCI driver. Configuration options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first available PCI device will be used. Driver: adv_pci1723 Description: Advantech PCI-1723 Author: yonggang , Ian Abbott Devices: [Advantech] PCI-1723 (adv_pci1723) Updated: Mon, 14 Apr 2008 15:12:56 +0100 Status: works Configuration Options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first supported PCI device found will be used. Subdevice 0 is 8-channel AO, 16-bit, range +/- 10 V. Subdevice 1 is 16-channel DIO. The channels are configurable as input or output in 2 groups (0 to 7, 8 to 15). Configuring any channel implicitly configures all channels in the same group. TODO: 1. Add the two milliamp ranges to the AO subdevice (0 to 20 mA, 4 to 20 mA). 2. Read the initial ranges and values of the AO subdevice at start-up instead of reinitializing them. 3. Implement calibration. Driver: adv_pci_dio Description: Advantech PCI-1730, PCI-1733, PCI-1734, PCI-1735U, PCI-1736UP, PCI-1750, PCI-1751, PCI-1752, PCI-1753/E, PCI-1754, PCI-1756, PCI-1762 Author: Michal Dobes Devices: [Advantech] PCI-1730 (adv_pci_dio), PCI-1733, PCI-1734, PCI-1735U, PCI-1736UP, PCI-1739U, PCI-1750, PCI-1751, PCI-1752, PCI-1753, PCI-1753+PCI-1753E, PCI-1754, PCI-1756, PCI-1760, PCI-1762 Status: untested Updated: Tue, 04 May 2010 13:00:00 +0000 This driver supports now only insn interface for DI/DO/DIO. Configuration options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first available PCI device will be used. Driver: aio_aio12_8 Description: Acces I/O Products PC-104 AIO12-8 Analog I/O Board Author: Pablo Mejia Devices: [Acces I/O] PC-104 AIO12-8 Status: experimental Configuration Options: [0] - I/O port base address Notes: Only synchronous operations are supported. Driver: aio_iiro_16 Description: Acces I/O Products PC-104 IIRO16 Relay And Isolated Input Board Author: Zachary Ware Devices: [Acces I/O] PC-104 AIO12-8 Status: experimental Configuration Options: [0] - I/O port base address Driver: amplc_dio200 Description: Amplicon 200 Series Digital I/O Author: Ian Abbott Devices: [Amplicon] PC212E (pc212e), PC214E (pc214e), PC215E (pc215e), PCI215 (pci215 or amplc_dio200), PCIe215 (pcie215 or amplc_dio200), PC218E (pc218e), PCIe236 (pcie236 or amplc_dio200), PC272E (pc272e), PCI272 (pci272 or amplc_dio200), PCIe296 (pcie296 or amplc_dio200) Updated: Wed, 03 Oct 2012 17:54:05 +0100 Status: works Configuration options - PC212E, PC214E, PC215E, PC218E, PC272E: [0] - I/O port base address [1] - IRQ (optional, but commands won't work without it) Configuration options - PCI215, PCIe215, PCIe236, PCI272, PCIe296: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first available PCI device will be used. Passing a zero for an option is the same as leaving it unspecified. SUBDEVICES PC212E PC214E PC215E/PCI215 ------------- ------------- ------------- Subdevices 6 4 5 0 PPI-X PPI-X PPI-X 1 CTR-Y1 PPI-Y PPI-Y 2 CTR-Y2 CTR-Z1* CTR-Z1 3 CTR-Z1 INTERRUPT* CTR-Z2 4 CTR-Z2 INTERRUPT 5 INTERRUPT PCIe215 PC218E PCIe236 ------------- ------------- ------------- Subdevices 8 7 8 0 PPI-X CTR-X1 PPI-X 1 UNUSED CTR-X2 UNUSED 2 PPI-Y CTR-Y1 UNUSED 3 UNUSED CTR-Y2 UNUSED 4 CTR-Z1 CTR-Z1 CTR-Z1 5 CTR-Z2 CTR-Z2 CTR-Z2 6 TIMER INTERRUPT TIMER 7 INTERRUPT INTERRUPT PC272E/PCI272 PCIe296 ------------- ------------- Subdevices 4 8 0 PPI-X PPI-X1 1 PPI-Y PPI-X2 2 PPI-Z PPI-Y1 3 INTERRUPT PPI-Y2 4 CTR-Z1 5 CTR-Z2 6 TIMER 7 INTERRUPT Each PPI is a 8255 chip providing 24 DIO channels. The DIO channels are configurable as inputs or outputs in four groups: Port A - channels 0 to 7 Port B - channels 8 to 15 Port CL - channels 16 to 19 Port CH - channels 20 to 23 Only mode 0 of the 8255 chips is supported. Each CTR is a 8254 chip providing 3 16-bit counter channels. Each channel is configured individually with INSN_CONFIG instructions. The specific type of configuration instruction is specified in data[0]. Some configuration instructions expect an additional parameter in data[1]; others return a value in data[1]. The following configuration instructions are supported: INSN_CONFIG_SET_COUNTER_MODE. Sets the counter channel's mode and BCD/binary setting specified in data[1]. INSN_CONFIG_8254_READ_STATUS. Reads the status register value for the counter channel into data[1]. INSN_CONFIG_SET_CLOCK_SRC. Sets the counter channel's clock source as specified in data[1] (this is a hardware-specific value). Not supported on PC214E. For the other boards, valid clock sources are 0 to 7 as follows: 0. CLK n, the counter channel's dedicated CLK input from the SK1 connector. (N.B. for other values, the counter channel's CLKn pin on the SK1 connector is an output!) 1. Internal 10 MHz clock. 2. Internal 1 MHz clock. 3. Internal 100 kHz clock. 4. Internal 10 kHz clock. 5. Internal 1 kHz clock. 6. OUT n-1, the output of counter channel n-1 (see note 1 below). 7. Ext Clock, the counter chip's dedicated Ext Clock input from the SK1 connector. This pin is shared by all three counter channels on the chip. INSN_CONFIG_GET_CLOCK_SRC. Returns the counter channel's current clock source in data[1]. For internal clock sources, data[2] is set to the period in ns. INSN_CONFIG_SET_GATE_SRC. Sets the counter channel's gate source as specified in data[2] (this is a hardware-specific value). Not supported on PC214E. For the other boards, valid gate sources are 0 to 7 as follows: 0. VCC (internal +5V d.c.), i.e. gate permanently enabled. 1. GND (internal 0V d.c.), i.e. gate permanently disabled. 2. GAT n, the counter channel's dedicated GAT input from the SK1 connector. (N.B. for other values, the counter channel's GATn pin on the SK1 connector is an output!) 3. /OUT n-2, the inverted output of counter channel n-2 (see note 2 below). 4. Reserved. 5. Reserved. 6. Reserved. 7. Reserved. INSN_CONFIG_GET_GATE_SRC. Returns the counter channel's current gate source in data[2]. Clock and gate interconnection notes: 1. Clock source OUT n-1 is the output of the preceding channel on the same counter subdevice if n > 0, or the output of channel 2 on the preceding counter subdevice (see note 3) if n = 0. 2. Gate source /OUT n-2 is the inverted output of channel 0 on the same counter subdevice if n = 2, or the inverted output of channel n+1 on the preceding counter subdevice (see note 3) if n < 2. 3. The counter subdevices are connected in a ring, so the highest counter subdevice precedes the lowest. The 'TIMER' subdevice is a free-running 32-bit timer subdevice. The 'INTERRUPT' subdevice pretends to be a digital input subdevice. The digital inputs come from the interrupt status register. The number of channels matches the number of interrupt sources. The PC214E does not have an interrupt status register; see notes on 'INTERRUPT SOURCES' below. INTERRUPT SOURCES PC212E PC214E PC215E/PCI215 ------------- ------------- ------------- Sources 6 1 6 0 PPI-X-C0 JUMPER-J5 PPI-X-C0 1 PPI-X-C3 PPI-X-C3 2 CTR-Y1-OUT1 PPI-Y-C0 3 CTR-Y2-OUT1 PPI-Y-C3 4 CTR-Z1-OUT1 CTR-Z1-OUT1 5 CTR-Z2-OUT1 CTR-Z2-OUT1 PCIe215 PC218E PCIe236 ------------- ------------- ------------- Sources 6 6 6 0 PPI-X-C0 CTR-X1-OUT1 PPI-X-C0 1 PPI-X-C3 CTR-X2-OUT1 PPI-X-C3 2 PPI-Y-C0 CTR-Y1-OUT1 unused 3 PPI-Y-C3 CTR-Y2-OUT1 unused 4 CTR-Z1-OUT1 CTR-Z1-OUT1 CTR-Z1-OUT1 5 CTR-Z2-OUT1 CTR-Z2-OUT1 CTR-Z2-OUT1 PC272E/PCI272 PCIe296 ------------- ------------- Sources 6 6 0 PPI-X-C0 PPI-X1-C0 1 PPI-X-C3 PPI-X1-C3 2 PPI-Y-C0 PPI-Y1-C0 3 PPI-Y-C3 PPI-Y1-C3 4 PPI-Z-C0 CTR-Z1-OUT1 5 PPI-Z-C3 CTR-Z2-OUT1 When an interrupt source is enabled in the interrupt source enable register, a rising edge on the source signal latches the corresponding bit to 1 in the interrupt status register. When the interrupt status register value as a whole (actually, just the 6 least significant bits) goes from zero to non-zero, the board will generate an interrupt. For level-triggered hardware interrupts (PCI card), the interrupt will remain asserted until the interrupt status register is cleared to zero. For edge-triggered hardware interrupts (ISA card), no further interrupts will occur until the interrupt status register is cleared to zero. To clear a bit to zero in the interrupt status register, the corresponding interrupt source must be disabled in the interrupt source enable register (there is no separate interrupt clear register). The PC214E does not have an interrupt source enable register or an interrupt status register; its 'INTERRUPT' subdevice has a single channel and its interrupt source is selected by the position of jumper J5. COMMANDS The driver supports a read streaming acquisition command on the 'INTERRUPT' subdevice. The channel list selects the interrupt sources to be enabled. All channels will be sampled together (convert_src == TRIG_NOW). The scan begins a short time after the hardware interrupt occurs, subject to interrupt latencies (scan_begin_src == TRIG_EXT, scan_begin_arg == 0). The value read from the interrupt status register is packed into a sampl_t value, one bit per requested channel, in the order they appear in the channel list. Driver: amplc_pc236 Description: Amplicon PC36AT, PCI236 Author: Ian Abbott Devices: [Amplicon] PC36AT (pc36at), PCI236 (pci236 or amplc_pc236) Updated: Wed, 01 Apr 2009 15:41:25 +0100 Status: works Configuration options - PC36AT: [0] - I/O port base address [1] - IRQ (optional) Configuration options - PCI236: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first available PCI device will be used. The PC36AT ISA board and PCI236 PCI board have a single 8255 appearing as subdevice 0. Subdevice 1 pretends to be a digital input device, but it always returns 0 when read. However, if you run a command with scan_begin_src=TRIG_EXT, a rising edge on port C bit 3 acts as an external trigger, which can be used to wake up tasks. This is like the comedi_parport device, but the only way to physically disable the interrupt on the PC36AT is to remove the IRQ jumper. If no interrupt is connected, then subdevice 1 is unused. Driver: amplc_pc263 Description: Amplicon PC263, PCI263 Author: Ian Abbott Devices: [Amplicon] PC263 (pc263), PCI263 (pci263 or amplc_pc263) Updated: Wed, 22 Oct 2008 14:10:53 +0100 Status: works Configuration options - PC263: [0] - I/O port base address Configuration options - PCI263: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first available PCI device will be used. Each board appears as one subdevice, with 16 digital outputs, each connected to a reed-relay. Relay contacts are closed when output is 1. The state of the outputs can be read. Driver: amplc_pci224 Description: Amplicon PCI224, PCI234 Author: Ian Abbott Devices: [Amplicon] PCI224 (amplc_pci224 or pci224), PCI234 (amplc_pci224 or pci234) Updated: Wed, 22 Oct 2008 12:25:08 +0100 Status: works, but see caveats Supports: - ao_insn read/write - ao_do_cmd mode with the following sources: - start_src TRIG_INT TRIG_EXT - scan_begin_src TRIG_TIMER TRIG_EXT - convert_src TRIG_NOW - scan_end_src TRIG_COUNT - stop_src TRIG_COUNT TRIG_EXT TRIG_NONE The channel list must contain at least one channel with no repeated channels. The scan end count must equal the number of channels in the channel list. There is only one external trigger source so only one of start_src, scan_begin_src or stop_src may use TRIG_EXT. Configuration options - PCI224: [0] - PCI bus of device (optional). [1] - PCI slot of device (optional). If bus/slot is not specified, the first available PCI device will be used. [2] - Select available ranges according to jumper LK1. All channels are set to the same range: 0=Jumper position 1-2 (factory default), 4 software-selectable internal voltage references, giving 4 bipolar and 4 unipolar ranges: [-10V,+10V], [-5V,+5V], [-2.5V,+2.5V], [-1.25V,+1.25V], [0,+10V], [0,+5V], [0,+2.5V], [0,1.25V]. 1=Jumper position 2-3, 1 external voltage reference, giving 1 bipolar and 1 unipolar range: [-Vext,+Vext], [0,+Vext]. Configuration options - PCI234: [0] - PCI bus of device (optional). [1] - PCI slot of device (optional). If bus/slot is not specified, the first available PCI device will be used. [2] - Select internal or external voltage reference according to jumper LK1. This affects all channels: 0=Jumper position 1-2 (factory default), Vref=5V internal. 1=Jumper position 2-3, Vref=Vext external. [3] - Select channel 0 range according to jumper LK2: 0=Jumper position 2-3 (factory default), range [-2*Vref,+2*Vref] (10V bipolar when options[2]=0). 1=Jumper position 1-2, range [-Vref,+Vref] (5V bipolar when options[2]=0). [4] - Select channel 1 range according to jumper LK3: cf. options[3]. [5] - Select channel 2 range according to jumper LK4: cf. options[3]. [6] - Select channel 3 range according to jumper LK5: cf. options[3]. Passing a zero for an option is the same as leaving it unspecified. Caveats: 1) All channels on the PCI224 share the same range. Any change to the range as a result of insn_write or a streaming command will affect the output voltages of all channels, including those not specified by the instruction or command. 2) For the analog output command, the first scan may be triggered falsely at the start of acquisition. This occurs when the DAC scan trigger source is switched from 'none' to 'timer' (scan_begin_src = TRIG_TIMER) or 'external' (scan_begin_src == TRIG_EXT) at the start of acquisition and the trigger source is at logic level 1 at the time of the switch. This is very likely for TRIG_TIMER. For TRIG_EXT, it depends on the state of the external line and whether the CR_INVERT flag has been set. The remaining scans are triggered correctly. Driver: amplc_pci230 Description: Amplicon PCI230, PCI260 Multifunction I/O boards Author: Allan Willcox , Steve D Sharples , Ian Abbott Updated: Wed, 22 Oct 2008 12:34:49 +0100 Devices: [Amplicon] PCI230 (pci230 or amplc_pci230), PCI230+ (pci230+ or amplc_pci230), PCI260 (pci260 or amplc_pci230), PCI260+ (pci260+ or amplc_pci230) Status: works Configuration options: [0] - PCI bus of device (optional). [1] - PCI slot of device (optional). If bus/slot is not specified, the first available PCI device will be used. Configuring a "amplc_pci230" will match any supported card and it will choose the best match, picking the "+" models if possible. Configuring a "pci230" will match a PCI230 or PCI230+ card and it will be treated as a PCI230. Configuring a "pci260" will match a PCI260 or PCI260+ card and it will be treated as a PCI260. Configuring a "pci230+" will match a PCI230+ card. Configuring a "pci260+" will match a PCI260+ card. Subdevices: PCI230(+) PCI260(+) --------- --------- Subdevices 3 1 0 AI AI 1 AO 2 DIO AI Subdevice: The AI subdevice has 16 single-ended channels or 8 differential channels. The PCI230 and PCI260 cards have 12-bit resolution. The PCI230+ and PCI260+ cards have 16-bit resolution. For differential mode, use inputs 2N and 2N+1 for channel N (e.g. use inputs 14 and 15 for channel 7). If the card is physically a PCI230 or PCI260 then it actually uses a "pseudo-differential" mode where the inputs are sampled a few microseconds apart. The PCI230+ and PCI260+ use true differential sampling. Another difference is that if the card is physically a PCI230 or PCI260, the inverting input is 2N, whereas for a PCI230+ or PCI260+ the inverting input is 2N+1. So if a PCI230 is physically replaced by a PCI230+ (or a PCI260 with a PCI260+) and differential mode is used, the differential inputs need to be physically swapped on the connector. The following input ranges are supported: 0 => [-10, +10] V 1 => [-5, +5] V 2 => [-2.5, +2.5] V 3 => [-1.25, +1.25] V 4 => [0, 10] V 5 => [0, 5] V 6 => [0, 2.5] V AI Commands: +=========+==============+===========+============+==========+ |start_src|scan_begin_src|convert_src|scan_end_src| stop_src | +=========+==============+===========+============+==========+ |TRIG_NOW | TRIG_FOLLOW |TRIG_TIMER | TRIG_COUNT |TRIG_NONE | |TRIG_INT | |TRIG_EXT(3)| |TRIG_COUNT| | | |TRIG_INT | | | | |--------------|-----------| | | | | TRIG_TIMER(1)|TRIG_TIMER | | | | | TRIG_EXT(2) | | | | | | TRIG_INT | | | | +---------+--------------+-----------+------------+----------+ Note 1: If AI command and AO command are used simultaneously, only one may have scan_begin_src == TRIG_TIMER. Note 2: For PCI230 and PCI230+, scan_begin_src == TRIG_EXT uses DIO channel 16 (pin 49) which will need to be configured as a digital input. For PCI260+, the EXTTRIG/EXTCONVCLK input (pin 17) is used instead. For PCI230, scan_begin_src == TRIG_EXT is not supported. The trigger is a rising edge on the input. Note 3: For convert_src == TRIG_EXT, the EXTTRIG/EXTCONVCLK input (pin 25 on PCI230(+), pin 17 on PCI260(+)) is used. The convert_arg value is interpreted as follows: convert_arg == (CR_EDGE | 0) => rising edge convert_arg == (CR_EDGE | CR_INVERT | 0) => falling edge convert_arg == 0 => falling edge (backwards compatibility) convert_arg == 1 => rising edge (backwards compatibility) All entries in the channel list must use the same analogue reference. If the analogue reference is not AREF_DIFF (not differential) each pair of channel numbers (0 and 1, 2 and 3, etc.) must use the same input range. The input ranges used in the sequence must be all bipolar (ranges 0 to 3) or all unipolar (ranges 4 to 6). The channel sequence must consist of 1 or more identical subsequences. Within the subsequence, channels must be in ascending order with no repeated channels. For example, the following sequences are valid: 0 1 2 3 (single valid subsequence), 0 2 3 5 0 2 3 5 (repeated valid subsequence), 1 1 1 1 (repeated valid subsequence). The following sequences are invalid: 0 3 2 1 (invalid subsequence), 0 2 3 5 0 2 3 (incompletely repeated subsequence). Some versions of the PCI230+ and PCI260+ have a bug that requires a subsequence longer than one entry long to include channel 0. AO Subdevice: The AO subdevice has 2 channels with 12-bit resolution. The following output ranges are supported: 0 => [0, 10] V 1 => [-10, +10] V AO Commands: +=========+==============+===========+============+==========+ |start_src|scan_begin_src|convert_src|scan_end_src| stop_src | +=========+==============+===========+============+==========+ |TRIG_INT | TRIG_TIMER(1)| TRIG_NOW | TRIG_COUNT |TRIG_NONE | | | TRIG_EXT(2) | | |TRIG_COUNT| | | TRIG_INT | | | | +---------+--------------+-----------+------------+----------+ Note 1: If AI command and AO command are used simultaneously, only one may have scan_begin_src == TRIG_TIMER. Note 2: scan_begin_src == TRIG_EXT is only supported if the card is configured as a PCI230+ and is only supported on later versions of the card. As a card configured as a PCI230+ is not guaranteed to support external triggering, please consider this support to be a bonus. It uses the EXTTRIG/ EXTCONVCLK input (PCI230+ pin 25). Triggering will be on the rising edge unless the CR_INVERT flag is set in scan_begin_arg. The channels in the channel sequence must be in ascending order with no repeats. All entries in the channel sequence must use the same output range. DIO Subdevice: The DIO subdevice is a 8255 chip providing 24 DIO channels. The DIO channels are configurable as inputs or outputs in four groups: Port A - channels 0 to 7 Port B - channels 8 to 15 Port CL - channels 16 to 19 Port CH - channels 20 to 23 Only mode 0 of the 8255 chip is supported. Bit 0 of port C (DIO channel 16) is also used as an external scan trigger input for AI commands on PCI230 and PCI230+, so would need to be configured as an input to use it for that purpose. Driver: c6xdigio Description: Mechatronic Systems Inc. C6x_DIGIO DSP daughter card Author: Dan Block Status: unknown Devices: [Mechatronic Systems Inc.] C6x_DIGIO DSP daughter card (c6xdigio) Updated: Sun Nov 20 20:18:34 EST 2005 This driver will not work with a 2.4 kernel. http://robot0.ge.uiuc.edu/~spong/mecha/ Driver: cb_das16_cs Description: Computer Boards PC-CARD DAS16/16 Devices: [ComputerBoards] PC-CARD DAS16/16 (cb_das16_cs), PC-CARD DAS16/16-AO Author: ds Updated: Mon, 04 Nov 2002 20:04:21 -0800 Status: experimental Driver: cb_pcidac Description: Measurement Computing PCI Migration series boards Devices: [ComputerBoards] PCI-DAC6702 (cb_pcidac), PCI-DAC6703 Author: Oliver Gause Updated: Mon, 10 Jun 2013 11:56:44 +0100 Status: works Written to support the PCI-DAC6702. Trivially extended to support the PCI-DAC6703, it has just 16 ao channels instead of 8. Configuration Options: [0] - PCI bus number [1] - PCI slot number Developed from cb_pcidas64, cb_pcimdas and skel. The register values are taken from the register map of Measurement Computing. Supports DIO, AO in its present form. Driver: cb_pcidas Description: MeasurementComputing PCI-DAS series with the AMCC S5933 PCI controller Author: Ivan Martinez , Frank Mori Hess , Brice Dubost Updated: 2010-11-19 Devices: [Measurement Computing] PCI-DAS1602/16 (cb_pcidas), PCI-DAS1602/16jr, PCI-DAS1602/12, PCI-DAS1200, PCI-DAS1200jr, PCI-DAS1000, PCI-DAS1001, PCI_DAS1002 Status: There are many reports of the driver being used with most of the supported cards. Despite no detailed log is maintained, it can be said that the driver is quite tested and stable. The boards may be autocalibrated using the comedi_calibrate utility. Configuration options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first supported PCI device found will be used. For commands, the scanned channels must be consecutive (i.e. 4-5-6-7, 2-3-4,...), and must all have the same range and aref. AI Triggering: For start_src == TRIG_EXT, the A/D EXTERNAL TRIGGER IN (pin 45) is used. For 1602 series, the start_arg is interpreted as follows: start_arg == 0 => gated triger (level high) start_arg == CR_INVERT => gated triger (level low) start_arg == CR_EDGE => Rising edge start_arg == CR_EDGE | CR_INVERT => Falling edge For the other boards the trigger will be done on rising edge Driver: cb_pcidas64 Description: MeasurementComputing PCI-DAS64xx, 60XX, and 4020 series with the PLX 9080 PCI controller Author: Frank Mori Hess Status: works Updated: 2002-10-09 Devices: [Measurement Computing] PCI-DAS6402/16 (cb_pcidas64), PCI-DAS6402/12, PCI-DAS64/M1/16, PCI-DAS64/M2/16, PCI-DAS64/M3/16, PCI-DAS6402/16/JR, PCI-DAS64/M1/16/JR, PCI-DAS64/M2/16/JR, PCI-DAS64/M3/16/JR, PCI-DAS64/M1/14, PCI-DAS64/M2/14, PCI-DAS64/M3/14, PCI-DAS6013, PCI-DAS6014, PCI-DAS6023, PCI-DAS6025, PCI-DAS6030, PCI-DAS6031, PCI-DAS6032, PCI-DAS6033, PCI-DAS6034, PCI-DAS6035, PCI-DAS6036, PCI-DAS6040, PCI-DAS6052, PCI-DAS6070, PCI-DAS6071, PCI-DAS4020/12 Configuration options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) These boards may be autocalibrated with the comedi_calibrate utility. To select the bnc trigger input on the 4020 (instead of the dio input), specify a nonzero channel in the chanspec. If you wish to use an external master clock on the 4020, you may do so by setting the scan_begin_src to TRIG_OTHER, and using an INSN_CONFIG_TIMER_1 configuration insn to configure the divisor to use for the external clock. Some devices are not identified because the PCI device IDs are not yet known. If you have such a board, please file a bug report at https://bugs.comedi.org. Driver: cb_pcidda Description: MeasurementComputing PCI-DDA series Author: Ivan Martinez , Frank Mori Hess Status: Supports 08/16, 04/16, 02/16, 08/12, 04/12, and 02/12 Devices: [Measurement Computing] PCI-DDA08/12 (cb_pcidda), PCI-DDA04/12, PCI-DDA02/12, PCI-DDA08/16, PCI-DDA04/16, PCI-DDA02/16 Configuration options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first available PCI device will be used. Only simple analog output writing is supported. So far it has only been tested with: - PCI-DDA08/12 Please report success/failure with other different cards to . Driver: cb_pcidio Description: ComputerBoards' DIO boards with PCI interface Devices: [Measurement Computing] PCI-DIO24 (cb_pcidio), PCI-DIO24H, PCI-DIO48H Author: Yoshiya Matsuzaka Updated: Mon, 29 Oct 2007 15:40:47 +0000 Status: experimental This driver has been modified from skel.c of comedi-0.7.70. Configuration Options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first available PCI device will be used. Passing a zero for an option is the same as leaving it unspecified. Driver: cb_pcimdas Description: Measurement Computing PCI Migration series boards Devices: [ComputerBoards] PCIM-DAS1602/16 (cb_pcimdas), PCIe-DAS1602/16 Author: Richard Bytheway Updated: Mon, 13 Oct 2014 11:17:08 +0000 Status: experimental Written to support the PCIM-DAS1602/16 and PCIe-DAS1602/16. Configuration Options: [0] - PCI bus number [1] - PCI slot number Developed from cb_pcidas and skel by Richard Bytheway (mocelet@sucs.org). Only supports DIO, AO and simple AI in it's present form. No interrupts, multi channel or FIFO AI, although the card looks like it could support this. http://www.mccdaq.com/PDFs/Manuals/pcim-das1602-16.pdf http://www.mccdaq.com/PDFs/Manuals/pcie-das1602-16.pdf Driver: cb_pcimdda Description: Measurement Computing PCIM-DDA06-16 Devices: [Measurement Computing] PCIM-DDA06-16 (cb_pcimdda) Author: Calin Culianu Updated: Mon, 14 Apr 2008 15:15:51 +0100 Status: works All features of the PCIM-DDA06-16 board are supported. This board has 6 16-bit AO channels, and the usual 8255 DIO setup. (24 channels, configurable in banks of 8 and 4, etc.). This board does not support commands. The board has a peculiar way of specifying AO gain/range settings -- You have 1 jumper bank on the card, which either makes all 6 AO channels either 5 Volt unipolar, 5V bipolar, 10 Volt unipolar or 10V bipolar. Since there is absolutely _no_ way to tell in software how this jumper is set (well, at least according to the rather thin spec. from Measurement Computing that comes with the board), the driver assumes the jumper is at its factory default setting of +/-5V. Also of note is the fact that this board features another jumper, whose state is also completely invisible to software. It toggles two possible AO output modes on the board: - Update Mode: Writing to an AO channel instantaneously updates the actual signal output by the DAC on the board (this is the factory default). - Simultaneous XFER Mode: Writing to an AO channel has no effect until you read from any one of the AO channels. This is useful for loading all 6 AO values, and then reading from any one of the AO channels on the device to instantly update all 6 AO values in unison. Useful for some control apps, I would assume? If your jumper is in this setting, then you need to issue your comedi_data_write()s to load all the values you want, then issue one comedi_data_read() on any channel on the AO subdevice to initiate the simultaneous XFER. Configuration Options: [0] PCI bus (optional) [1] PCI slot (optional) [2] analog output range jumper setting 0 == +/- 5 V 1 == +/- 10 V Driver: comedi_bond Description: A driver to 'bond' (merge) multiple subdevices from multiple devices together as one. Devices: Author: ds Updated: Mon, 10 Oct 00:18:25 -0500 Status: works This driver allows you to 'bond' (merge) multiple comedi subdevices (coming from possibly difference boards and/or drivers) together. For example, if you had a board with 2 different DIO subdevices, and another with 1 DIO subdevice, you could 'bond' them with this driver so that they look like one big fat DIO subdevice. This makes writing applications slightly easier as you don't have to worry about managing different subdevices in the application -- you just worry about indexing one linear array of channel id's. Right now only DIO subdevices are supported as that's the personal itch I am scratching with this driver. If you want to add support for AI and AO subdevs, go right on ahead and do so! Commands aren't supported -- although it would be cool if they were. Configuration Options: List of comedi-minors to bond. All subdevices of the same type within each minor will be concatenated together in the order given here. Driver: comedi_parport Description: Standard PC parallel port Author: ds Status: works in immediate mode Devices: [standard] parallel port (comedi_parport) Updated: Tue, 30 Apr 2002 21:11:45 -0700 A cheap and easy way to get a few more digital I/O lines. Steal additional parallel ports from old computers or your neighbors' computers. Option list: 0: I/O port base for the parallel port. 1: IRQ Parallel Port Lines: pin subdev chan aka --- ------ ---- --- 1 2 0 strobe 2 0 0 data 0 3 0 1 data 1 4 0 2 data 2 5 0 3 data 3 6 0 4 data 4 7 0 5 data 5 8 0 6 data 6 9 0 7 data 7 10 1 3 acknowledge 11 1 4 busy 12 1 2 output 13 1 1 printer selected 14 2 1 auto LF 15 1 0 error 16 2 2 init 17 2 3 select printer 18-25 ground Notes: Subdevices 0 is digital I/O, subdevice 1 is digital input, and subdevice 2 is digital output. Unlike other Comedi devices, subdevice 0 defaults to output. Pins 13 and 14 are inverted once by Comedi and once by the hardware, thus cancelling the effect. Pin 1 is a strobe, thus acts like one. There's no way in software to change this, at least on a standard parallel port. Subdevice 3 pretends to be a digital input subdevice, but it always returns 0 when read. However, if you run a command with scan_begin_src=TRIG_EXT, it uses pin 10 as a external triggering pin, which can be used to wake up tasks. Driver: comedi_rt_timer Description: Command emulator using real-time tasks Author: ds, fmhess Devices: Status: works This driver requires RTAI or RTLinux to work correctly. It doesn't actually drive hardware directly, but calls other drivers and uses a real-time task to emulate commands for drivers and devices that are incapable of native commands. Thus, you can get accurately timed I/O on any device. Since the timing is all done in software, sampling jitter is much higher than with a device that has an on-board timer, and maximum sample rate is much lower. Configuration options: [0] - minor number of device you wish to emulate commands for [1] - subdevice number you wish to emulate commands for Driver: comedi_test Description: generates fake waveforms Author: Joachim Wuttke , Frank Mori Hess , ds Devices: Status: works Updated: Sat, 16 Mar 2002 17:34:48 -0800 This driver is mainly for testing purposes, but can also be used to generate sample waveforms on systems that don't have data acquisition hardware. Configuration options: [0] - Amplitude in microvolts for fake waveforms (default 1 volt) [1] - Period in microseconds for fake waveforms (default 0.1 sec) Generates a sawtooth wave on channel 0, square wave on channel 1, additional waveforms could be added to other channels (currently they return flatline zero volts). Driver: contec_fit Description: Contec F&eIT series modules Devices: [Contec] DAI12-4(FIT)GY (contec_fit), ADI16-4(FIT)GY, DIO-8/8(FIT)GY Author: Contec Co., Ltd. Updated: Fri, 21 Apr 2017 14:30:00 +0900 Status: works Configuration Options: [0] - DeviceID of module (optional) If DeviceID is not specified, DeviceID 0 will be used. Driver: contec_pci_dio Description: Contec PIO1616L digital I/O board Devices: [Contec] PIO1616L (contec_pci_dio) Author: Stefano Rivoir Updated: Wed, 27 Jun 2007 13:00:06 +0100 Status: works Configuration Options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first supported PCI device found will be used. Driver: daqboard2000 Description: IOTech DAQBoard/2000 Author: Anders Blomdell Status: works Updated: Mon, 14 Apr 2008 15:28:52 +0100 Devices: [IOTech] DAQBoard/2000 (daqboard2000) Much of the functionality of this driver was determined from reading the source code for the Windows driver. The FPGA on the board requires initialization code, which can be loaded by comedi_config using the -i option. The initialization code is available from http://www.comedi.org in the comedi_nonfree_firmware tarball. Configuration options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first supported PCI device found will be used. Driver: das08 Description: DAS-08 compatible boards Author: Warren Jasper, ds, Frank Hess Devices: [Keithley Metrabyte] DAS08 (isa-das08), [ComputerBoards] DAS08 (isa-das08), DAS08-PGM (das08-pgm), DAS08-PGH (das08-pgh), DAS08-PGL (das08-pgl), DAS08-AOH (das08-aoh), DAS08-AOL (das08-aol), DAS08-AOM (das08-aom), DAS08/JR-AO (das08/jr-ao), DAS08/JR-16-AO (das08jr-16-ao), PCI-DAS08 (das08), PC104-DAS08 (pc104-das08), DAS08/JR/16 (das08jr/16) Status: works This is a rewrite of the das08 and das08jr drivers. Options (for ISA cards): [0] - base io address Options (for pci-das08): [0] - bus (optional) [1] = slot (optional) The das08 driver doesn't support asynchronous commands, since the cheap das08 hardware doesn't really support them. The comedi_rt_timer driver can be used to emulate commands for this driver. Driver: das08_cs Description: DAS-08 PCMCIA boards Author: Warren Jasper, ds, Frank Hess Devices: [ComputerBoards] PCM-DAS08 (pcm-das08) Status: works This is the PCMCIA-specific support split off from the das08 driver. Options (for pcm-das08): NONE Command support does not exist, but could be added for this board. Driver: das16 Description: DAS16 compatible boards Author: Sam Moore, Warren Jasper, ds, Chris Baugher, Frank Hess, Roman Fietze Devices: [Keithley Metrabyte] DAS-16 (das-16), DAS-16G (das-16g), DAS-16F (das-16f), DAS-1201 (das-1201), DAS-1202 (das-1202), DAS-1401 (das-1401), DAS-1402 (das-1402), DAS-1601 (das-1601), DAS-1602 (das-1602), [ComputerBoards] PC104-DAS16/JR (pc104-das16jr), PC104-DAS16JR/16 (pc104-das16jr/16), CIO-DAS16JR/16 (cio-das16jr/16), CIO-DAS16/JR (cio-das16/jr), CIO-DAS1401/12 (cio-das1401/12), CIO-DAS1402/12 (cio-das1402/12), CIO-DAS1402/16 (cio-das1402/16), CIO-DAS1601/12 (cio-das1601/12), CIO-DAS1602/12 (cio-das1602/12), CIO-DAS1602/16 (cio-das1602/16), CIO-DAS16/330 (cio-das16/330) Status: works Updated: 2003-10-12 A rewrite of the das16 and das1600 drivers. Options: [0] - base io address [1] - irq (does nothing, irq is not used anymore) [2] - dma (optional, required for comedi_command support) [3] - master clock speed in MHz (optional, 1 or 10, ignored if board can probe clock, defaults to 1) [4] - analog input range lowest voltage in microvolts (optional, only useful if your board does not have software programmable gain) [5] - analog input range highest voltage in microvolts (optional, only useful if board does not have software programmable gain) [6] - analog output range lowest voltage in microvolts (optional) [7] - analog output range highest voltage in microvolts (optional) [8] - use timer mode for DMA. Timer mode is needed e.g. for buggy DMA controllers in NS CS5530A (Geode Companion), and for 'jr' cards that lack a hardware fifo. This option is no longer needed, since timer mode is _always_ used. Passing a zero for an option is the same as leaving it unspecified. Driver: das16m1 Description: CIO-DAS16/M1 Author: Frank Mori Hess Devices: [Measurement Computing] CIO-DAS16/M1 (cio-das16/m1) Status: works This driver supports a single board - the CIO-DAS16/M1. As far as I know, there are no other boards that have the same register layout. Even the CIO-DAS16/M1/16 is significantly different. I was _barely_ able to reach the full 1 MHz capability of this board, using a hard real-time interrupt (set the TRIG_RT flag in your comedi_cmd and use rtlinux or RTAI). The board can't do dma, so the bottleneck is pulling the data across the ISA bus. I timed the interrupt handler, and it took my computer ~470 microseconds to pull 512 samples from the board. So at 1 Mhz sampling rate, expect your CPU to be spending almost all of its time in the interrupt handler. This board has some unusual restrictions for its channel/gain list. If the list has 2 or more channels in it, then two conditions must be satisfied: (1) - even/odd channels must appear at even/odd indices in the list (2) - the list must have an even number of entries. Options: [0] - base io address [1] - irq (optional, but you probably want it) irq can be omitted, although the cmd interface will not work without it. Driver: das1800 Description: Keithley Metrabyte DAS1800 (& compatibles) Author: Frank Mori Hess Devices: [Keithley Metrabyte] DAS-1701ST (das-1701st), DAS-1701ST-DA (das-1701st-da), DAS-1701/AO (das-1701ao), DAS-1702ST (das-1702st), DAS-1702ST-DA (das-1702st-da), DAS-1702HR (das-1702hr), DAS-1702HR-DA (das-1702hr-da), DAS-1702/AO (das-1702ao), DAS-1801ST (das-1801st), DAS-1801ST-DA (das-1801st-da), DAS-1801HC (das-1801hc), DAS-1801AO (das-1801ao), DAS-1802ST (das-1802st), DAS-1802ST-DA (das-1802st-da), DAS-1802HR (das-1802hr), DAS-1802HR-DA (das-1802hr-da), DAS-1802HC (das-1802hc), DAS-1802AO (das-1802ao) Status: works The waveform analog output on the 'ao' cards is not supported. If you need it, send me (Frank Hess) an email. Configuration options: [0] - I/O port base address [1] - IRQ (optional, required for timed or externally triggered conversions) [2] - DMA0 (optional, requires irq) [3] - DMA1 (optional, requires irq and dma0) Driver: das6402 Description: Keithley Metrabyte DAS6402 (& compatibles) Author: Oystein Svendsen Status: bitrotten Devices: [Keithley Metrabyte] DAS6402 (das6402) This driver has suffered bitrot. Driver: das800 Description: Keithley Metrabyte DAS800 (& compatibles) Author: Frank Mori Hess Devices: [Keithley Metrabyte] DAS-800 (das-800), DAS-801 (das-801), DAS-802 (das-802), [Measurement Computing] CIO-DAS800 (cio-das800), CIO-DAS801 (cio-das801), CIO-DAS802 (cio-das802), CIO-DAS802/16 (cio-das802/16) Status: works, cio-das802/16 untested - email me if you have tested it Configuration options: [0] - I/O port base address [1] - IRQ (optional, required for timed or externally triggered conversions) Notes: IRQ can be omitted, although the cmd interface will not work without it. All entries in the channel/gain list must use the same gain and be consecutive channels counting upwards in channel number (these are hardware limitations.) I've never tested the gain setting stuff since I only have a DAS-800 board with fixed gain. The cio-das802/16 does not have a fifo-empty status bit! Therefore only fifo-half-full transfers are possible with this card. Driver: dmm32at Description: Diamond Systems mm32at driver. Devices: Author: Perry J. Piplani Updated: Fri Jun 4 09:13:24 CDT 2004 Status: experimental This driver is for the Diamond Systems MM-32-AT board http://www.diamondsystems.com/products/diamondmm32at It is being used on serveral projects inside NASA, without problems so far. For analog input commands, TRIG_EXT is not yet supported at all.. Configuration Options: comedi_config /dev/comedi0 dmm32at baseaddr,irq Driver: dt2801 Description: Data Translation DT2801 series and DT01-EZ Author: ds Status: works Devices: [Data Translation] DT2801 (dt2801), DT2801-A, DT2801/5716A, DT2805, DT2805/5716A, DT2808, DT2818, DT2809, DT01-EZ This driver can autoprobe the type of board. Configuration options: [0] - I/O port base address [1] - unused [2] - A/D reference 0=differential, 1=single-ended [3] - A/D range 0 = [-10,10] 1 = [0,10] [4] - D/A 0 range 0 = [-10,10] 1 = [-5,5] 2 = [-2.5,2.5] 3 = [0,10] 4 = [0,5] [5] - D/A 1 range (same choices) Driver: dt2811 Description: Data Translation DT2811 Author: ds Devices: [Data Translation] DT2811-PGL (dt2811-pgl), DT2811-PGH (dt2811-pgh) Status: works Configuration options: [0] - I/O port base address [1] - IRQ, although this is currently unused [2] - A/D reference 0 = single-ended 1 = differential 2 = pseudo-differential (common reference) [3] - A/D range 0 = [-5,5] 1 = [-2.5,2.5] 2 = [0,5] [4] - D/A 0 range (same choices) [4] - D/A 1 range (same choices) Driver: dt2814 Description: Data Translation DT2814 Author: ds Status: complete Devices: [Data Translation] DT2814 (dt2814) Configuration options: [0] - I/O port base address [1] - IRQ This card has 16 analog inputs multiplexed onto a 12 bit ADC. There is a minimally useful onboard clock. The base frequency for the clock is selected by jumpers, and the clock divider can be selected via programmed I/O. Unfortunately, the clock divider can only be a power of 10, from 1 to 10^7, of which only 3 or 4 are useful. In addition, the clock does not seem to be very accurate. Driver: dt2815 Description: Data Translation DT2815 Author: ds Status: mostly complete, untested Devices: [Data Translation] DT2815 (dt2815) I'm not sure anyone has ever tested this board. If you have information contrary, please update. Configuration options: [0] - I/O port base base address [1] - IRQ (unused) [2] - Voltage unipolar/bipolar configuration 0 == unipolar 5V (0V -- +5V) 1 == bipolar 5V (-5V -- +5V) [3] - Current offset configuration 0 == disabled (0mA -- +32mAV) 1 == enabled (+4mA -- +20mAV) [4] - Firmware program configuration 0 == program 1 (see manual table 5-4) 1 == program 2 (see manual table 5-4) 2 == program 3 (see manual table 5-4) 3 == program 4 (see manual table 5-4) [5] - Analog output 0 range configuration 0 == voltage 1 == current [6] - Analog output 1 range configuration (same options) [7] - Analog output 2 range configuration (same options) [8] - Analog output 3 range configuration (same options) [9] - Analog output 4 range configuration (same options) [10] - Analog output 5 range configuration (same options) [11] - Analog output 6 range configuration (same options) [12] - Analog output 7 range configuration (same options) Driver: dt2817 Description: Data Translation DT2817 Author: ds Status: complete Devices: [Data Translation] DT2817 (dt2817) A very simple digital I/O card. Four banks of 8 lines, each bank is configurable for input or output. One wonders why it takes a 50 page manual to describe this thing. The driver (which, btw, is much less than 50 pages) has 1 subdevice with 32 channels, configurable in groups of 8. Configuration options: [0] - I/O port base base address Driver: dt282x Description: Data Translation DT2821 series (including DT-EZ) Author: ds Devices: [Data Translation] DT2821 (dt2821), DT2821-F-16SE (dt2821-f), DT2821-F-8DI (dt2821-f), DT2821-G-16SE (dt2821-f), DT2821-G-8DI (dt2821-g), DT2823 (dt2823), DT2824-PGH (dt2824-pgh), DT2824-PGL (dt2824-pgl), DT2825 (dt2825), DT2827 (dt2827), DT2828 (dt2828), DT21-EZ (dt21-ez), DT23-EZ (dt23-ez), DT24-EZ (dt24-ez), DT24-EZ-PGL (dt24-ez-pgl) Status: complete Updated: Wed, 22 Aug 2001 17:11:34 -0700 Configuration options: [0] - I/O port base address [1] - IRQ [2] - DMA 1 [3] - DMA 2 [4] - AI jumpered for 0=single ended, 1=differential [5] - AI jumpered for 0=straight binary, 1=2's complement [6] - AO 0 jumpered for 0=straight binary, 1=2's complement [7] - AO 1 jumpered for 0=straight binary, 1=2's complement [8] - AI jumpered for 0=[-10,10]V, 1=[0,10], 2=[-5,5], 3=[0,5] [9] - AO 0 jumpered for 0=[-10,10]V, 1=[0,10], 2=[-5,5], 3=[0,5], 4=[-2.5,2.5] [10]- A0 1 jumpered for 0=[-10,10]V, 1=[0,10], 2=[-5,5], 3=[0,5], 4=[-2.5,2.5] Notes: - AO commands might be broken. - If you try to run a command on both the AI and AO subdevices simultaneously, bad things will happen. The driver needs to be fixed to check for this situation and return an error. Driver: dt3000 Description: Data Translation DT3000 series Author: ds Devices: [Data Translation] DT3001 (dt3000), DT3001-PGL, DT3002, DT3003, DT3003-PGL, DT3004, DT3005, DT3004-200 Updated: Mon, 14 Apr 2008 15:41:24 +0100 Status: works Configuration Options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first supported PCI device found will be used. There is code to support AI commands, but it may not work. AO commands are not supported. Driver: dt9812 Description: Data Translation DT9812 USB module Author: anders.blomdell@control.lth.se (Anders Blomdell) Status: in development Devices: [Data Translation] DT9812 (dt9812) Updated: Sun Nov 20 20:18:34 EST 2005 This driver works, but bulk transfers not implemented. Might be a starting point for someone else. I found out too late that USB has too high latencies (>1 ms) for my needs. Driver: fl512 Description: unknown Author: Anders Gnistrup Devices: [unknown] FL512 (fl512) Status: unknown Digital I/O is not supported. Configuration options: [0] - I/O port base address Driver: gsc_hpdi Description: General Standards Corporation High Speed Parallel Digital Interface rs485 boards Author: Frank Mori Hess Status: only receive mode works, transmit not supported Updated: 2003-02-20 Devices: [General Standards Corporation] PCI-HPDI32 (gsc_hpdi), PMC-HPDI32 Configuration options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) There are some additional hpdi models available from GSC for which support could be added to this driver. Driver: icp_multi Description: Inova ICP_MULTI Author: Anne Smorthit Devices: [Inova] ICP_MULTI (icp_multi) Status: works The driver works for analog input and output and digital input and output. It does not work with interrupts or with the counters. Currently no support for DMA. It has 16 single-ended or 8 differential Analogue Input channels with 12-bit resolution. Ranges : 5V, 10V, +/-5V, +/-10V, 0..20mA and 4..20mA. Input ranges can be individually programmed for each channel. Voltage or current measurement is selected by jumper. There are 4 x 12-bit Analogue Outputs. Ranges : 5V, 10V, +/-5V, +/-10V 16 x Digital Inputs, 24V 8 x Digital Outputs, 24V, 1A 4 x 16-bit counters Options: [0] - PCI bus number - if bus number and slot number are 0, then driver search for first unused card [1] - PCI slot number Driver: ii_pci20kc Description: Intelligent Instruments PCI-20001C carrier board Author: Markus Kempf Devices: [Intelligent Instrumentation] PCI-20001C (ii_pci20kc) Status: works Supports the PCI-20001 C-2a Carrier board, and could probably support the other carrier boards with small modifications. Modules supported are: PCI-20006 M-2 16-bit analog output module PCI-20341 M-1A 16-bit analog input module Options: 0 Board base address 1 IRQ 2 first option for module 1 3 second option for module 1 4 first option for module 2 5 second option for module 2 6 first option for module 3 7 second option for module 3 options for PCI-20006M: first: Analog output channel 0 range configuration 0 bipolar 10 (-10V -- +10V) 1 unipolar 10 (0V -- +10V) 2 bipolar 5 (-5V -- 5V) second: Analog output channel 1 range configuration options for PCI-20341M: first: Analog input gain configuration 0 1 1 10 2 100 3 200 Driver: jr3_pci Description: JR3/PCI force sensor board Author: Anders Blomdell Status: works Devices: [JR3] PCI force sensor board (jr3_pci) The DSP on the board requires initialization code, which can be loaded by placing it in /lib/firmware/comedi. The initialization code should be somewhere on the media you got with your card. One version is available from http://www.comedi.org in the comedi_nonfree_firmware tarball. Configuration options: [0] - PCI bus number - if bus number and slot number are 0, then driver search for first unused card [1] - PCI slot number Driver: ke_counter Description: Driver for Kolter Electronic Counter Card Devices: [Kolter Electronic] PCI Counter Card (ke_counter) Author: Michael Hillmann Updated: Mon, 14 Apr 2008 15:42:42 +0100 Status: tested Configuration Options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first supported PCI device found will be used. This driver is a simple driver to read the counter values from Kolter Electronic PCI Counter Card. Driver: me4000 Description: Meilhaus ME-4000 series boards Devices: [Meilhaus] ME-4650 (me4000), ME-4670i, ME-4680, ME-4680i, ME-4680is Author: gg (Guenter Gebhardt ) Updated: Mon, 18 Mar 2002 15:34:01 -0800 Status: broken (no support for loading firmware) Supports: - Analog Input - Analog Output - Digital I/O - Counter Configuration Options: [0] - PCI bus number (optional) [1] - PCI slot number (optional) If bus/slot is not specified, the first available PCI device will be used. The firmware required by these boards is available in the comedi_nonfree_firmware tarball available from http://www.comedi.org. However, the driver's support for loading the firmware through comedi_config is currently broken. Driver: me_daq Description: Meilhaus PCI data acquisition cards Author: Michael Hillmann Devices: [Meilhaus] ME-2600i (me_daq), ME-2000i Status: experimental Supports: Analog Output Configuration options: [0] - PCI bus number (optional) [1] - PCI slot number (optional) If bus/slot is not specified, the first available PCI device will be used. The 2600 requires a firmware upload, which can be accomplished using the -i or --init-data option of comedi_config. The firmware can be found in the comedi_nonfree_firmware tarball available from http://www.comedi.org Driver: mpc624 Description: Micro/sys MPC-624 PC/104 board Devices: [Micro/sys] MPC-624 (mpc624) Author: Stanislaw Raczynski Updated: Thu, 15 Sep 2005 12:01:18 +0200 Status: working The Micro/sys MPC-624 board is based on the LTC2440 24-bit sigma-delta ADC chip. Subdevices supported by the driver: - Analog In: supported - Digital I/O: not supported - LEDs: not supported - EEPROM: not supported Configuration Options: [0] - I/O base address [1] - convertion rate Convertion rate RMS noise Effective Number Of Bits 0 3.52kHz 23uV 17 1 1.76kHz 3.5uV 20 2 880Hz 2uV 21.3 3 440Hz 1.4uV 21.8 4 220Hz 1uV 22.4 5 110Hz 750uV 22.9 6 55Hz 510nV 23.4 7 27.5Hz 375nV 24 8 13.75Hz 250nV 24.4 9 6.875Hz 200nV 24.6 [2] - voltage range 0 -1.01V .. +1.01V 1 -10.1V .. +10.1V Driver: mpc8260cpm Description: MPC8260 CPM module generic digital I/O lines Devices: [Motorola] MPC8260 CPM (mpc8260cpm) Author: ds Status: experimental Updated: Sat, 16 Mar 2002 17:34:48 -0800 This driver is specific to the Motorola MPC8260 processor, allowing you to access the processor's generic digital I/O lines. It is apparently missing some code. Driver: multiq3 Description: Quanser Consulting MultiQ-3 Author: Anders Blomdell Status: works Devices: [Quanser Consulting] MultiQ-3 (multiq3) Driver: ni_6527 Description: National Instruments 6527 Author: ds Status: works Devices: [National Instruments] PCI-6527 (ni6527), PXI-6527 Updated: Sat, 25 Jan 2003 13:24:40 -0800 Driver: ni_65xx Description: National Instruments 65xx static dio boards Author: Jon Grierson , Frank Mori Hess Status: testing Devices: [National Instruments] PCI-6509 (ni_65xx), PXI-6509, PCI-6510, PCI-6511, PXI-6511, PCI-6512, PXI-6512, PCI-6513, PXI-6513, PCI-6514, PXI-6514, PCI-6515, PXI-6515, PCI-6516, PCI-6517, PCI-6518, PCI-6519, PCI-6520, PCI-6521, PXI-6521, PCI-6528, PXI-6528 Updated: Wed Oct 18 08:59:11 EDT 2006 Based on the PCI-6527 driver by ds. The interrupt subdevice (subdevice 3) is probably broken for all boards except maybe the 6514. Driver: ni_660x Description: National Instruments 660x counter/timer boards Devices: [National Instruments] PCI-6601 (ni_660x), PCI-6602, PXI-6602, PXI-6608, PCI-6624, PXI-6624 Author: J.P. Mellor , Herman.Bruyninckx@mech.kuleuven.ac.be, Wim.Meeussen@mech.kuleuven.ac.be, Klaas.Gadeyne@mech.kuleuven.ac.be, Frank Mori Hess Updated: Mon, 16 Jan 2017 15:28:52 +0000 Status: experimental Encoders work. PulseGeneration (both single pulse and pulse train) works. Buffered commands work for input but not output. References: DAQ 660x Register-Level Programmer Manual (NI 370505A-01) DAQ 6601/6602 User Manual (NI 322137B-01) Driver: ni_670x Description: National Instruments 670x Author: Bart Joris Updated: Wed, 11 Dec 2002 18:25:35 -0800 Devices: [National Instruments] PCI-6703 (ni_670x), PCI-6704 Status: unknown Commands are not supported. Driver: ni_at_a2150 Description: National Instruments AT-A2150 Author: Frank Mori Hess Status: works Devices: [National Instruments] AT-A2150C (at_a2150c), AT-2150S (at_a2150s) If you want to ac couple the board's inputs, use AREF_OTHER. Configuration options: [0] - I/O port base address [1] - IRQ (optional, required for timed conversions) [2] - DMA (optional, required for timed conversions) Driver: ni_at_ao Description: National Instruments AT-AO-6/10 Devices: [National Instruments] AT-AO-6 (at-ao-6), AT-AO-10 (at-ao-10) Status: should work Author: ds Updated: Sun Dec 26 12:26:28 EST 2004 Configuration options: [0] - I/O port base address [1] - IRQ (unused) [2] - DMA (unused) [3] - analog output range, set by jumpers on hardware (0 for -10 to 10V bipolar, 1 for 0V to 10V unipolar) Driver: ni_atmio Description: National Instruments AT-MIO-E series Author: ds Devices: [National Instruments] AT-MIO-16E-1 (ni_atmio), AT-MIO-16E-2, AT-MIO-16E-10, AT-MIO-16DE-10, AT-MIO-64E-3, AT-MIO-16XE-50, AT-MIO-16XE-10, AT-AI-16XE-10 Status: works Updated: Thu May 1 20:03:02 CDT 2003 The driver has 2.6 kernel isapnp support, and will automatically probe for a supported board if the I/O base is left unspecified with comedi_config. However, many of the isapnp id numbers are unknown. If your board is not recognized, please send the output of 'cat /proc/isapnp' (you may need to modprobe the isa-pnp module for /proc/isapnp to exist) so the id numbers for your board can be added to the driver. Otherwise, you can use the isapnptools package to configure your board. Use isapnp to configure the I/O base and IRQ for the board, and then pass the same values as parameters in comedi_config. A sample isapnp.conf file is included in the etc/ directory of Comedilib. Comedilib includes a utility to autocalibrate these boards. The boards seem to boot into a state where the all calibration DACs are at one extreme of their range, thus the default calibration is terrible. Calibration at boot is strongly encouraged. To use the extended digital I/O on some of the boards, enable the 8255 driver when configuring the Comedi source tree. External triggering is supported for some events. The channel index (scan_begin_arg, etc.) maps to PFI0 - PFI9. Some of the more esoteric triggering possibilities of these boards are not supported. Driver: ni_atmio16d Description: National Instruments AT-MIO-16D Author: Chris R. Baugher Status: unknown Devices: [National Instruments] AT-MIO-16 (atmio16), AT-MIO-16D (atmio16d) Driver: ni_daq_700 Description: National Instruments PCMCIA DAQCard-700 DIO only Author: Fred Brooks , based on ni_daq_dio24 by Daniel Vecino Castel Devices: [National Instruments] PCMCIA DAQ-Card-700 (ni_daq_700) Status: works Updated: Thu, 21 Feb 2008 12:07:20 +0000 The daqcard-700 appears in Comedi as a single digital I/O subdevice with 16 channels. The channel 0 corresponds to the daqcard-700's output port, bit 0; channel 8 corresponds to the input port, bit 0. Direction configuration: channels 0-7 output, 8-15 input (8225 device emu as port A output, port B input, port C N/A). IRQ is assigned but not used. Driver: ni_daq_dio24 Description: National Instruments PCMCIA DAQ-Card DIO-24 Author: Daniel Vecino Castel Devices: [National Instruments] PCMCIA DAQ-Card DIO-24 (ni_daq_dio24) Status: ? Updated: Thu, 07 Nov 2002 21:53:06 -0800 This is just a wrapper around the 8255.o driver to properly handle the PCMCIA interface. Driver: ni_labpc Description: National Instruments Lab-PC (& compatibles) Author: Frank Mori Hess Devices: [National Instruments] Lab-PC-1200 (labpc-1200), Lab-PC-1200AI (labpc-1200ai), Lab-PC+ (lab-pc+), PCI-1200 (ni_labpc) Status: works Tested with lab-pc-1200. For the older Lab-PC+, not all input ranges and analog references will work, the available ranges/arefs will depend on how you have configured the jumpers on your board (see your owner's manual). Kernel-level ISA plug-and-play support for the lab-pc-1200 boards has not yet been added to the driver, mainly due to the fact that I don't know the device id numbers. If you have one of these boards, please file a bug report at https://bugs.comedi.org/ so I can get the necessary information from you. The 1200 series boards have onboard calibration dacs for correcting analog input/output offsets and gains. The proper settings for these caldacs are stored on the board's eeprom. To read the caldac values from the eeprom and store them into a file that can be then be used by comedilib, use the comedi_calibrate program. Configuration options - ISA boards: [0] - I/O port base address [1] - IRQ (optional, required for timed or externally triggered conversions) [2] - DMA channel (optional) Configuration options - PCI boards: [0] - bus (optional) [1] - slot (optional) The Lab-pc+ has quirky chanlist requirements when scanning multiple channels. Multiple channel scan sequence must start at highest channel, then decrement down to channel 0. The rest of the cards can scan down like lab-pc+ or scan up from channel zero. Chanlists consisting of all one channel are also legal, and allow you to pace conversions in bursts. Driver: ni_labpc_cs Description: National Instruments Lab-PC (& compatibles) Author: Frank Mori Hess Devices: [National Instruments] DAQCard-1200 (daqcard-1200) Status: works Thanks go to Fredrik Lingvall for much testing and perseverance in helping to debug daqcard-1200 support. The 1200 series boards have onboard calibration dacs for correcting analog input/output offsets and gains. The proper settings for these caldacs are stored on the board's eeprom. To read the caldac values from the eeprom and store them into a file that can be then be used by comedilib, use the comedi_calibrate program. Configuration options: none The daqcard-1200 has quirky chanlist requirements when scanning multiple channels. Multiple channel scan sequence must start at highest channel, then decrement down to channel 0. Chanlists consisting of all one channel are also legal, and allow you to pace conversions in bursts. Driver: ni_mio_cs Description: National Instruments DAQCard E series Author: ds Status: works Devices: [National Instruments] DAQCard-AI-16XE-50 (ni_mio_cs), DAQCard-AI-16E-4, DAQCard-6062E, DAQCard-6024E, DAQCard-6036E Updated: Thu Oct 23 19:43:17 CDT 2003 See the notes in the ni_atmio.o driver. Driver: ni_pcidio Description: National Instruments PCI-DIO32HS, PCI-DIO96, PCI-6533, PCI-6503 Author: ds Status: works Devices: [National Instruments] PCI-DIO-32HS (ni_pcidio), PXI-6533, PCI-DIO-96, PCI-DIO-96B, PXI-6508, PCI-6503, PCI-6503B, PCI-6503X, PXI-6503, PCI-6533, PCI-6534 Updated: Sun, 21 Apr 2002 21:03:38 -0700 The DIO-96 appears as four 8255 subdevices. See the 8255 driver notes for details. The DIO32HS board appears as one subdevice, with 32 channels. Each channel is individually I/O configurable. The channel order is 0=A0, 1=A1, 2=A2, ... 8=B0, 16=C0, 24=D0. The driver only supports simple digital I/O; no handshaking is supported. DMA mostly works for the PCI-DIO32HS, but only in timed input mode. The PCI-DIO-32HS/PCI-6533 has a configurable external trigger. Setting scan_begin_arg to 0 or CR_EDGE triggers on the leading edge. Setting scan_begin_arg to CR_INVERT or (CR_EDGE | CR_INVERT) triggers on the trailing edge. This driver could be easily modified to support AT-MIO32HS and AT-MIO96. The PCI-6534 requires a firmware upload after power-up to work, the firmware data and instructions for loading it with comedi_config it are contained in the comedi_nonfree_firmware tarball available from http://www.comedi.org Driver: ni_pcimio Description: National Instruments PCI-MIO-E series and M series (all boards) Author: ds, John Hallen, Frank Mori Hess, Rolf Mueller, Herbert Peremans, Herman Bruyninckx, Terry Barnaby Status: works Devices: [National Instruments] PCI-MIO-16XE-50 (ni_pcimio), PCI-MIO-16XE-10, PXI-6030E, PCI-MIO-16E-1, PCI-MIO-16E-4, PCI-6014, PCI-6040E, PXI-6040E, PCI-6030E, PCI-6031E, PCI-6032E, PCI-6033E, PCI-6071E, PCI-6023E, PCI-6024E, PCI-6025E, PXI-6025E, PCI-6034E, PCI-6035E, PCI-6052E, PCI-6110, PCI-6111, PCI-6220, PXI-6220, PCI-6221, PXI-6221, PCI-6224, PXI-6224, PCI-6225, PXI-6225, PCI-6229, PCI-6250, PXI-6250, PCI-6251, PXI-6251, PCIe-6251, PXIe-6251, PCI-6254, PXI-6254, PCI-6259, PXI-6259, PCIe-6259, PXIe-6259, PCI-6280, PXI-6280, PCI-6281, PXI-6281, PCI-6284, PXI-6284, PCI-6289, PXI-6289, PCI-6711, PXI-6711, PCI-6713, PXI-6713, PXI-6071E, PCI-6070E, PXI-6070E, PXI-6052E, PCI-6036E, PCI-6731, PCI-6733, PXI-6733, PCI-6143, PXI-6143 Updated: Mon, 16 Jan 2017 15:17:13 +0000 These boards are almost identical to the AT-MIO E series, except that they use the PCI bus instead of ISA (i.e., AT). See the notes for the ni_atmio.o driver for additional information about these boards. Autocalibration is supported on many of the devices, using the comedi_calibrate (or comedi_soft_calibrate for m-series) utility. M-Series boards do analog input and analog output calibration entirely in software. The software calibration corrects the analog input for offset, gain and nonlinearity. The analog outputs are corrected for offset and gain. See the comedilib documentation on comedi_get_softcal_converter() for more information. By default, the driver uses DMA to transfer analog input data to memory. When DMA is enabled, not all triggering features are supported. Digital I/O may not work on 673x. Note that the PCI-6143 is a simultaineous sampling device with 8 convertors. With this board all of the convertors perform one simultaineous sample during a scan interval. The period for a scan is used for the convert time in a Comedi cmd. The convert trigger source is normally set to TRIG_NOW by default. The RTSI trigger bus is supported on these cards on subdevice 10. See the comedilib documentation for details. Information (number of channels, bits, etc.) for some devices may be incorrect. Please check this and submit a bug if there are problems for your device. SCXI is probably broken for m-series boards. Bugs: - When DMA is enabled, COMEDI_EV_CONVERT does not work correctly. Driver: ni_tio Description: National Instruments general purpose counters Devices: Author: J.P. Mellor , Herman.Bruyninckx@mech.kuleuven.ac.be, Wim.Meeussen@mech.kuleuven.ac.be, Klaas.Gadeyne@mech.kuleuven.ac.be, Frank Mori Hess Updated: Thu Nov 16 09:50:32 EST 2006 Status: works This module is not used directly by end-users. Rather, it is used by other drivers (for example ni_660x and ni_pcimio) to provide support for NI's general purpose counters. It was originally based on the counter code from ni_660x.c and ni_mio_common.c. References: DAQ 660x Register-Level Programmer Manual (NI 370505A-01) DAQ 6601/6602 User Manual (NI 322137B-01) 340934b.pdf DAQ-STC reference manual Driver: ni_tiocmd Description: National Instruments general purpose counters command support Devices: Author: J.P. Mellor , Herman.Bruyninckx@mech.kuleuven.ac.be, Wim.Meeussen@mech.kuleuven.ac.be, Klaas.Gadeyne@mech.kuleuven.ac.be, Frank Mori Hess Updated: Fri, 11 Apr 2008 12:32:35 +0100 Status: works This module is not used directly by end-users. Rather, it is used by other drivers (for example ni_660x and ni_pcimio) to provide command support for NI's general purpose counters. It was originally split out of ni_tio.c to stop the 'ni_tio' module depending on the 'mite' module. References: DAQ 660x Register-Level Programmer Manual (NI 370505A-01) DAQ 6601/6602 User Manual (NI 322137B-01) 340934b.pdf DAQ-STC reference manual Driver: pcl711 Description: Advantech PCL-711 and 711b, ADLINK ACL-8112 Author: ds, Janne Jalkanen , Eric Bunn Status: mostly complete Devices: [Advantech] PCL-711 (pcl711), PCL-711B (pcl711b), [ADLINK] ACL-8112HG (acl8112hg), ACL-8112DG (acl8112dg) Since these boards do not have DMA or FIFOs, only immediate mode is supported. Driver: pcl724 Description: Advantech PCL-724, PCL-722, PCL-731 ADLINK ACL-7122, ACL-7124, PET-48DIO Author: Michal Dobes Devices: [Advantech] PCL-724 (pcl724), PCL-722 (pcl722), PCL-731 (pcl731), [ADLINK] ACL-7122 (acl7122), ACL-7124 (acl7124), PET-48DIO (pet48dio) Status: untested This is driver for digital I/O boards PCL-722/724/731 with 144/24/48 DIO and for digital I/O boards ACL-7122/7124/PET-48DIO with 144/24/48 DIO. It need 8255.o for operations and only immediate mode is supported. See the source for configuration details. Driver: pcl725 Description: Advantech PCL-725 (& compatibles) Author: ds Status: unknown Devices: [Advantech] PCL-725 (pcl725) Driver: pcl726 Description: Advantech PCL-726 & compatibles Author: ds Status: untested Devices: [Advantech] PCL-726 (pcl726), PCL-727 (pcl727), PCL-728 (pcl728), [ADLINK] ACL-6126 (acl6126), ACL-6128 (acl6128) Interrupts are not supported. Options for PCL-726: [0] - IO Base [2]...[7] - D/A output range for channel 1-6: 0: 0-5V, 1: 0-10V, 2: +/-5V, 3: +/-10V, 4: 4-20mA, 5: unknown (external reference) Options for PCL-727: [0] - IO Base [2]...[13] - D/A output range for channel 1-12: 0: 0-5V, 1: 0-10V, 2: +/-5V, 3: 4-20mA Options for PCL-728 and ACL-6128: [0] - IO Base [2], [3] - D/A output range for channel 1 and 2: 0: 0-5V, 1: 0-10V, 2: +/-5V, 3: +/-10V, 4: 4-20mA, 5: 0-20mA Options for ACL-6126: [0] - IO Base [1] - IRQ (0=disable, 3, 5, 6, 7, 9, 10, 11, 12, 15) (currently ignored) [2]...[7] - D/A output range for channel 1-6: 0: 0-5V, 1: 0-10V, 2: +/-5V, 3: +/-10V, 4: 4-20mA Driver: pcl730 Description: Advantech PCL-730 (& compatibles) Author: José Luis Sánchez (jsanchezv@teleline.es) Status: untested Devices: [Advantech] PCL-730 (pcl730), [ICP] ISO-730 (iso730), [ADLINK] ACL-7130 (acl7130) Interrupts are not supported. The ACL-7130 card have an 8254 timer/counter not supported by this driver. Driver: pcl812 Description: Advantech PCL-812/PG, PCL-813/B, ADLINK ACL-8112DG/HG/PG, ACL-8113, ACL-8216, ICP DAS A-821PGH/PGL/PGL-NDA, A-822PGH/PGL, A-823PGH/PGL, A-826PG, ICP DAS ISO-813 Author: Michal Dobes Devices: [Advantech] PCL-812 (pcl812), PCL-812PG (pcl812pg), PCL-813 (pcl813), PCL-813B (pcl813b), [ADLINK] ACL-8112DG (acl8112dg), ACL-8112HG (acl8112hg), ACL-8113 (acl-8113), ACL-8216 (acl8216), [ICP] ISO-813 (iso813), A-821PGH (a821pgh), A-821PGL (a821pgl), A-821PGL-NDA (a821pclnda), A-822PGH (a822pgh), A-822PGL (a822pgl), A-823PGH (a823pgh), A-823PGL (a823pgl), A-826PG (a826pg) Updated: Mon, 06 Aug 2007 12:03:15 +0100 Status: works (I hope. My board fire up under my hands and I cann't test all features.) This driver supports insn and cmd interfaces. Some boards support only insn becouse their hardware don't allow more (PCL-813/B, ACL-8113, ISO-813). Data transfer over DMA is supported only when you measure only one channel, this is too hardware limitation of these boards. Options for PCL-812: [0] - IO Base [1] - IRQ (0=disable, 2, 3, 4, 5, 6, 7; 10, 11, 12, 14, 15) [2] - DMA (0=disable, 1, 3) [3] - 0=trigger source is internal 8253 with 2MHz clock 1=trigger source is external [4] - 0=A/D input range is +/-10V 1=A/D input range is +/-5V 2=A/D input range is +/-2.5V 3=A/D input range is +/-1.25V 4=A/D input range is +/-0.625V 5=A/D input range is +/-0.3125V [5] - 0=D/A outputs 0-5V (internal reference -5V) 1=D/A outputs 0-10V (internal reference -10V) 2=D/A outputs unknow (external reference) Options for PCL-812PG, ACL-8112PG: [0] - IO Base [1] - IRQ (0=disable, 2, 3, 4, 5, 6, 7; 10, 11, 12, 14, 15) [2] - DMA (0=disable, 1, 3) [3] - 0=trigger source is internal 8253 with 2MHz clock 1=trigger source is external [4] - 0=A/D have max +/-5V input 1=A/D have max +/-10V input [5] - 0=D/A outputs 0-5V (internal reference -5V) 1=D/A outputs 0-10V (internal reference -10V) 2=D/A outputs unknow (external reference) Options for ACL-8112DG/HG, A-822PGL/PGH, A-823PGL/PGH, ACL-8216, A-826PG: [0] - IO Base [1] - IRQ (0=disable, 2, 3, 4, 5, 6, 7; 10, 11, 12, 14, 15) [2] - DMA (0=disable, 1, 3) [3] - 0=trigger source is internal 8253 with 2MHz clock 1=trigger source is external [4] - 0=A/D channels are S.E. 1=A/D channels are DIFF [5] - 0=D/A outputs 0-5V (internal reference -5V) 1=D/A outputs 0-10V (internal reference -10V) 2=D/A outputs unknow (external reference) Options for A-821PGL/PGH: [0] - IO Base [1] - IRQ (0=disable, 2, 3, 4, 5, 6, 7) [2] - 0=A/D channels are S.E. 1=A/D channels are DIFF [3] - 0=D/A output 0-5V (internal reference -5V) 1=D/A output 0-10V (internal reference -10V) Options for A-821PGL-NDA: [0] - IO Base [1] - IRQ (0=disable, 2, 3, 4, 5, 6, 7) [2] - 0=A/D channels are S.E. 1=A/D channels are DIFF Options for PCL-813: [0] - IO Base Options for PCL-813B: [0] - IO Base [1] - 0= bipolar inputs 1= unipolar inputs Options for ACL-8113, ISO-813: [0] - IO Base [1] - 0= 10V bipolar inputs 1= 10V unipolar inputs 2= 20V bipolar inputs 3= 20V unipolar inputs Driver: pcl816 Description: Advantech PCL-816 cards, PCL-814 Author: Juan Grigera Devices: [Advantech] PCL-816 (pcl816), PCL-814B (pcl814b) Status: works Updated: Tue, 2 Apr 2002 23:15:21 -0800 PCL 816 and 814B have 16 SE/DIFF ADCs, 16 DACs, 16 DI and 16 DO. Differences are at resolution (16 vs 12 bits). The driver support AI command mode, other subdevices not written. Analog output and digital input and output are not supported. Configuration Options: [0] - IO Base [1] - IRQ (0=disable, 2, 3, 4, 5, 6, 7) [2] - DMA (0=disable, 1, 3) [3] - 0, 10=10MHz clock for 8254 1= 1MHz clock for 8254 Driver: pcl818 Description: Advantech PCL-818 cards, PCL-718 Author: Michal Dobes Devices: [Advantech] PCL-818L (pcl818l), PCL-818H (pcl818h), PCL-818HD (pcl818hd), PCL-818HG (pcl818hg), PCL-818 (pcl818), PCL-718 (pcl718) Status: works All cards have 16 SE/8 DIFF ADCs, one or two DACs, 16 DI and 16 DO. Differences are only at maximal sample speed, range list and FIFO support. The driver support AI mode 0, 1, 3 other subdevices (AO, DI, DO) support only mode 0. If DMA/FIFO/INT are disabled then AI support only mode 0. PCL-818HD and PCL-818HG support 1kword FIFO. Driver support this FIFO but this code is untested. A word or two about DMA. Driver support DMA operations at two ways: 1) DMA uses two buffers and after one is filled then is generated INT and DMA restart with second buffer. With this mode I'm unable run more that 80Ksamples/secs without data dropouts on K6/233. 2) DMA uses one buffer and run in autoinit mode and the data are from DMA buffer moved on the fly with 2kHz interrupts from RTC. This mode is used if the interrupt 8 is available for allocation. If not, then first DMA mode is used. With this I can run at full speed one card (100ksamples/secs) or two cards with 60ksamples/secs each (more is problem on account of ISA limitations). To use this mode you must have compiled kernel with disabled "Enhanced Real Time Clock Support". Maybe you can have problems if you use xntpd or similar. If you've data dropouts with DMA mode 2 then: a) disable IDE DMA b) switch text mode console to fb. Options for PCL-818L: [0] - IO Base [1] - IRQ (0=disable, 2, 3, 4, 5, 6, 7) [2] - DMA (0=disable, 1, 3) [3] - 0, 10=10MHz clock for 8254 1= 1MHz clock for 8254 [4] - 0, 5=A/D input -5V.. +5V 1, 10=A/D input -10V..+10V [5] - 0, 5=D/A output 0-5V (internal reference -5V) 1, 10=D/A output 0-10V (internal reference -10V) 2 =D/A output unknow (external reference) Options for PCL-818, PCL-818H: [0] - IO Base [1] - IRQ (0=disable, 2, 3, 4, 5, 6, 7) [2] - DMA (0=disable, 1, 3) [3] - 0, 10=10MHz clock for 8254 1= 1MHz clock for 8254 [4] - 0, 5=D/A output 0-5V (internal reference -5V) 1, 10=D/A output 0-10V (internal reference -10V) 2 =D/A output unknow (external reference) Options for PCL-818HD, PCL-818HG: [0] - IO Base [1] - IRQ (0=disable, 2, 3, 4, 5, 6, 7) [2] - DMA/FIFO (-1=use FIFO, 0=disable both FIFO and DMA, 1=use DMA ch 1, 3=use DMA ch 3) [3] - 0, 10=10MHz clock for 8254 1= 1MHz clock for 8254 [4] - 0, 5=D/A output 0-5V (internal reference -5V) 1, 10=D/A output 0-10V (internal reference -10V) 2 =D/A output unknow (external reference) Options for PCL-718: [0] - IO Base [1] - IRQ (0=disable, 2, 3, 4, 5, 6, 7) [2] - DMA (0=disable, 1, 3) [3] - 0, 10=10MHz clock for 8254 1= 1MHz clock for 8254 [4] - 0=A/D Range is +/-10V 1= +/-5V 2= +/-2.5V 3= +/-1V 4= +/-0.5V 5= user defined bipolar 6= 0-10V 7= 0-5V 8= 0-2V 9= 0-1V 10= user defined unipolar [5] - 0, 5=D/A outputs 0-5V (internal reference -5V) 1, 10=D/A outputs 0-10V (internal reference -10V) 2=D/A outputs unknow (external reference) [6] - 0, 60=max 60kHz A/D sampling 1,100=max 100kHz A/D sampling (PCL-718 with Option 001 installed) Driver: pcm3724 Description: Advantech PCM-3724 Author: Drew Csillag Devices: [Advantech] PCM-3724 (pcm724) Status: tested This is driver for digital I/O boards PCM-3724 with 48 DIO. It needs 8255.o for operations and only immediate mode is supported. See the source for configuration details. Copy/pasted/hacked from pcm724.c Driver: pcm3730 Description: PCM3730 Author: Blaine Lee Devices: [Advantech] PCM-3730 (pcm3730) Status: unknown Configuration options: [0] - I/O port base Driver: pcmad Description: Winsystems PCM-A/D12, PCM-A/D16 Author: ds Devices: [Winsystems] PCM-A/D12 (pcmad12), PCM-A/D16 (pcmad16) Status: untested This driver was written on a bet that I couldn't write a driver in less than 2 hours. I won the bet, but never got paid. =( Configuration options: [0] - I/O port base [1] - unused [2] - Analog input reference 0 = single ended 1 = differential [3] - Analog input encoding (must match jumpers) 0 = straight binary 1 = two's complement Driver: pcmda12 Description: A driver for the Winsystems PCM-D/A-12 Devices: [Winsystems] PCM-D/A-12 (pcmda12) Author: Calin Culianu Updated: Fri, 13 Jan 2006 12:01:01 -0500 Status: works A driver for the relatively straightforward-to-program PCM-D/A-12. This board doesn't support commands, and the only way to set its analog output range is to jumper the board. As such, comedi_data_write() ignores the range value specified. The board uses 16 consecutive I/O addresses starting at the I/O port base address. Each address corresponds to the LSB then MSB of a particular channel from 0-7. Note that the board is not ISA-PNP capable and thus needs the I/O port comedi_config parameter. Note that passing a nonzero value as the second config option will enable "simultaneous xfer" mode for this board, in which AO writes will not take effect until a subsequent read of any AO channel. This is so that one can speed up programming by preloading all AO registers with values before simultaneously setting them to take effect with one read command. Configuration Options: [0] - I/O port base address [1] - Do Simultaneous Xfer (see description) Driver: pcmmio Description: A driver for the PCM-MIO multifunction board Devices: [Winsystems] PCM-MIO (pcmmio) Author: Calin Culianu Updated: Wed, May 16 2007 16:21:10 -0500 Status: works A driver for the relatively new PCM-MIO multifunction board from Winsystems. This board is a PC-104 based I/O board. It contains four subdevices: subdevice 0 - 16 channels of 16-bit AI subdevice 1 - 8 channels of 16-bit AO subdevice 2 - first 24 channels of the 48 channel of DIO (with edge-triggered interrupt support) subdevice 3 - last 24 channels of the 48 channel DIO (no interrupt support for this bank of channels) Some notes: Synchronous reads and writes are the only things implemented for AI and AO, even though the hardware itself can do streaming acquisition, etc. Anyone want to add asynchronous I/O for AI/AO as a feature? Be my guest... Asynchronous I/O for the DIO subdevices *is* implemented, however! They are basically edge-triggered interrupts for any configuration of the first 24 DIO-lines. Also note that this interrupt support is untested. A few words about edge-detection IRQ support (commands on DIO): * To use edge-detection IRQ support for the DIO subdevice, pass the IRQ of the board to the comedi_config command. The board IRQ is not jumpered but rather configured through software, so any IRQ from 1-15 is OK. * Due to the genericity of the comedi API, you need to create a special comedi_command in order to use edge-triggered interrupts for DIO. * Use comedi_commands with TRIG_NOW. Your callback will be called each time an edge is detected on the specified DIO line(s), and the data values will be two sample_t's, which should be concatenated to form one 32-bit unsigned int. This value is the mask of channels that had edges detected from your channel list. Note that the bits positions in the mask correspond to positions in your chanlist when you specified the command and *not* channel id's! * To set the polarity of the edge-detection interrupts pass a nonzero value for either CR_RANGE or CR_AREF for edge-up polarity, or a zero value for both CR_RANGE and CR_AREF if you want edge-down polarity. Configuration Options: [0] - I/O port base address [1] - IRQ (optional -- for edge-detect interrupt support only, leave out if you don't need this feature) Driver: pcmuio Description: A driver for the PCM-UIO48A and PCM-UIO96A boards from Winsystems. Devices: [Winsystems] PCM-UIO48A (pcmuio48), PCM-UIO96A (pcmuio96) Author: Calin Culianu Updated: Fri, 13 Jan 2006 12:01:01 -0500 Status: works A driver for the relatively straightforward-to-program PCM-UIO48A and PCM-UIO96A boards from Winsystems. These boards use either one or two (in the 96-DIO version) WS16C48 ASIC HighDensity I/O Chips (HDIO). This chip is interesting in that each I/O line is individually programmable for INPUT or OUTPUT (thus comedi_dio_config can be done on a per-channel basis). Also, each chip supports edge-triggered interrupts for the first 24 I/O lines. Of course, since the 96-channel version of the board has two ASICs, it can detect polarity changes on up to 48 I/O lines. Since this is essentially an (non-PnP) ISA board, I/O Address and IRQ selection are done through jumpers on the board. You need to pass that information to this driver as the first and second comedi_config option, respectively. Note that the 48-channel version uses 16 bytes of IO memory and the 96-channel version uses 32-bytes (in case you are worried about conflicts). The 48-channel board is split into two 24-channel comedi subdevices. The 96-channel board is split into 4 24-channel DIO subdevices. Note that IRQ support has been added, but it is untested. To use edge-detection IRQ support, pass the IRQs of both ASICS (for the 96 channel version) or just 1 ASIC (for 48-channel version). Then, use use comedi_commands with TRIG_NOW. Your callback will be called each time an edge is triggered, and the data values will be two sample_t's, which should be concatenated to form one 32-bit unsigned int. This value is the mask of channels that had edges detected from your channel list. Note that the bits positions in the mask correspond to positions in your chanlist when you specified the command and *not* channel id's! To set the polarity of the edge-detection interrupts pass a nonzero value for either CR_RANGE or CR_AREF for edge-up polarity, or a zero value for both CR_RANGE and CR_AREF if you want edge-down polarity. In the 48-channel version: On subdev 0, the first 24 channels channels are edge-detect channels. In the 96-channel board you have the collowing channels that can do edge detection: subdev 0, channels 0-24 (first 24 channels of 1st ASIC) subdev 2, channels 0-24 (first 24 channels of 2nd ASIC) Configuration Options: [0] - I/O port base address [1] - IRQ (for first ASIC, or first 24 channels) [2] - IRQ for second ASIC (pcmuio96 only - IRQ for chans 48-72 .. can be the same as first irq!) Driver: poc Description: Generic driver for very simple devices Author: ds Devices: [Keithley Metrabyte] DAC-02 (dac02), [Advantech] PCL-733 (pcl733), PCL-734 (pcl734) Updated: Sat, 16 Mar 2002 17:34:48 -0800 Status: unknown This driver is indended to support very simple ISA-based devices, including: dac02 - Keithley DAC-02 analog output board pcl733 - Advantech PCL-733 pcl734 - Advantech PCL-734 Configuration options: [0] - I/O port base Driver: quatech_daqp_cs Description: Quatech DAQP PCMCIA data capture cards Author: Brent Baccala Status: works Devices: [Quatech] DAQP-208 (daqp), DAQP-308 Driver: rtd520 Description: Real Time Devices PCI4520/DM7520 Author: Dan Christian Devices: [Real Time Devices] DM7520HR-1 (rtd520), DM7520HR-8, PCI4520, PCI4520-8 Status: Works. Only tested on DM7520-8. Not SMP safe. Configuration options: [0] - PCI bus of device (optional) If bus/slot is not specified, the first available PCI device will be used. [1] - PCI slot of device (optional) Driver: rti800 Description: Analog Devices RTI-800/815 Author: ds Status: unknown Updated: Fri, 05 Sep 2008 14:50:44 +0100 Devices: [Analog Devices] RTI-800 (rti800), RTI-815 (rti815) Configuration options: [0] - I/O port base address [1] - IRQ [2] - A/D reference 0 = differential 1 = pseudodifferential (common) 2 = single-ended [3] - A/D range 0 = [-10,10] 1 = [-5,5] 2 = [0,10] [4] - A/D encoding 0 = two's complement 1 = straight binary [5] - DAC 0 range 0 = [-10,10] 1 = [0,10] [6] - DAC 0 encoding 0 = two's complement 1 = straight binary [7] - DAC 1 range (same as DAC 0) [8] - DAC 1 encoding (same as DAC 0) Driver: rti802 Description: Analog Devices RTI-802 Author: Anders Blomdell Devices: [Analog Devices] RTI-802 (rti802) Status: works Configuration Options: [0] - i/o base [1] - unused [2] - dac#0 0=two's comp, 1=straight [3] - dac#0 0=bipolar, 1=unipolar [4] - dac#1 ... ... [17] - dac#7 ... Driver: s526 Description: Sensoray 526 driver Devices: [Sensoray] 526 (s526) Author: Richie Everett Wang Updated: Thu, 14 Sep. 2006 Status: experimental Encoder works Analog input works Analog output works PWM output works Commands are not supported yet. Configuration Options: comedi_config /dev/comedi0 s526 0x2C0,0x3 Driver: s626 Description: Sensoray 626 driver Devices: [Sensoray] 626 (s626) Authors: Gianluca Palli , Updated: Fri, 15 Feb 2008 10:28:42 +0000 Status: experimental Configuration options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) If bus/slot is not specified, the first supported PCI device found will be used. INSN_CONFIG instructions: analog input: none analog output: none digital channel: s626 has 3 dio subdevices (2,3 and 4) each with 16 i/o channels supported configuration options: INSN_CONFIG_DIO_QUERY COMEDI_INPUT COMEDI_OUTPUT encoder: Every channel must be configured before reading. Example code insn.insn=INSN_CONFIG; //configuration instruction insn.n=1; //number of operation (must be 1) insn.data=&initialvalue; //initial value loaded into encoder //during configuration insn.subdev=5; //encoder subdevice insn.chanspec=CR_PACK(encoder_channel,0,AREF_OTHER); //encoder_channel //to configure comedi_do_insn(cf,&insn); //executing configuration Driver: serial2002 Description: Driver for serial connected hardware Devices: Author: Anders Blomdell Updated: Fri, 7 Jun 2002 12:56:45 -0700 Status: in development Driver: skel Description: Skeleton driver, an example for driver writers Devices: Author: ds Updated: Mon, 18 Mar 2002 15:34:01 -0800 Status: works This driver is a documented example on how Comedi drivers are written. Configuration Options: none Driver: ssv_dnp Description: SSV Embedded Systems DIL/Net-PC Author: Robert Schwebel Devices: [SSV Embedded Systems] DIL/Net-PC 1486 (dnp-1486) Status: unknown Driver: unioxx5 Description: Driver for Fastwel UNIOxx-5 (analog and digital i/o) boards. Author: Kruchinin Daniil (asgard) Status: unknown Updated: 2006-10-09 Devices: [Fastwel] UNIOxx-5 (unioxx5), This card supports digital and analog I/O. It written for g01 subdevices only. channels range: 0 .. 23 dio channels and 0 .. 11 analog modules range During attaching unioxx5 module displays modules identifiers (see dmesg after comedi_config) in format: | [module_number] module_id | Driver: usbdux Description: Driver for USB-DUX-D of INCITE Technology Limited Devices: [ITL] USB-DUX-D (usbdux) Author: Bernd Porr Updated: 13 May 2012 Status: Stable The following subdevices are available - Analog input subdevice: 0 number of channels: 8 max data value: 4095 ranges: all channels: range = 0 : [-4.096 V,4.096 V] range = 1 : [-2.048 V,2.048 V] range = 2 : [0 V,4.096 V] range = 3 : [0 V,2.048 V] command: start: now|int scan_begin: timer (contains the sampling interval. min is 125us / chan) convert: now scan_end: count stop: none|count - Analogue output: subdevice: 1 number of channels: 4 max data value: 4095 ranges: all channels: range = 0 : [-4.096 V,4.096 V] range = 1 : [0 V,4.096 V] command: start: now|int scan_begin: timer (contains the sampling interval. min is 1ms.) convert: now scan_end: count stop: none|count - Digital I/O subdevice: 2 number of channels: 8 - Counter subdevice: 3 number of channels: 4 max data value: 65535 Pin assignments on the D-connector: 0=/CLK0, 1=UP/DOWN0, 2=RESET0, 4=/CLK1, 5=UP/DOWN1, 6=RESET1 - PWM subdevice: 4 number of channels: 8 or 4 + polarity output for H-bridge (see INSN_CONFIG_PWM_SET_H_BRIDGE where the first byte is the value and the second the polarity) max data value: 512 Configuration options The device requires firmware which is usually uploaded automatically by udev/hotplug at the moment the driver module is loaded. In case udev/hotplug is not enabled you need to upload the firmware with comedi_config -i usbdux_firmware.bin. The firmware is usually installed under /lib/firmware or can be downloaded form http://www.linux-usb-daq.co.uk. Driver: usbduxfast Description: Driver for USB-DUX-FAST of INCITE Technology Limited Devices: [ITL] USB-DUX-FAST (usbduxfast) Author: Bernd Porr Updated: 14 May 2012 Status: stable The device has one subdevice for analogue input. - subdevice: 0 number of channels: 16 max data value: 4096 ranges: all channelss: range = 0 : [-0.75 V,0.75 V] range = 1 : [-0.5 V,0.5 V] command: The channel-list allows 1,2,3 and 16 channels. start: now|ext|int (external trigger via pin at HD-D connector) scan_begin: follow|timer|ext convert: timer|ext (contains the sampling interval. Min interval for single channel acquisition is 33us and for multiplexed acquisition 300us) scan_end: count stop: none|count Configuration options: The device requires firmware which is usually uploaded automatically by udev/hotplug at the moment the driver module is being loaded. In case udev/hotplug is not enabled you need to upload the firmware with comedi_config -i usbduxfast_firmware.bin The firmware is usually installed under /lib/firmware or can be downloaded form http://www.linux-usb-daq.co.uk. Driver: usbduxsigma Description: Driver for USB-DUX-SIGMA of INCITE Technology Limited Devices: [ITL] USB-DUX-SIGMA (usbduxsigma) Author: Bernd Porr Updated: 13 May 2012 Status: Stable The following subdevices are available - Analog input subdevice: 0 number of channels: 16 max data value: 16777215 (0xfffff, 24bits) ranges: all channels: [-1.325 V,1.325 V] command: start: now|int scan_begin: timer (contains the sampling interval. min 250us) convert: now scan_end: count stop: none|count - Analog output subdevice: 1 number of channels: 4 max data value: 255 ranges: all channels: [0 V,2.5 V] command: start: now|int scan_begin: timer (contains the sampling interval. min 1ms) convert: now scan_end: count stop: none|count - Digital I/O subdevice: 2 number of channels: 24 (first 8 bits on the D connector, 16 bits int.) - PWM subdevice: 3 number of channels: 8 or 4 + polarity output for H-bridge (see INSN_CONFIG_PWM_SET_H_BRIDGE where the first byte is the value and the second the polarity) max data value: 512 Configuration options: The device requires firmware which is usually uploaded automatically by udev/hotplug at the moment the driver module is loaded. In case udev/hotplug is not enabled you need to upload the firmware with comedi_config -i usbdux_firmware.bin. The firmware is usually installed under /lib/firmware or can be downloaded form http://www.linux-usb-daq.co.uk. comedilib-0.11.0/configure.ac0000644000000000000000000002442713102127254012703 00000000000000# libtool version: current:revision:age # # If the library source code has changed at all since the last update, then # increment revision (`c:r:a' becomes `c:r+1:a'). # # If any interfaces have been added, removed, or changed since the last update, # increment current, and set revision to 0. # # If any interfaces have been added since the last public release, then # increment age. # # If any interfaces have been removed since the last public release, then set # age to 0. # # In summary: # # If any interface has been changed or removed, `c:r:a' becomes `c+1:0:0'; # else if any interface has been added, `c:r:a' becomes `c+1:0:a+1'; # else, `c:r:a' becomes `c:r+1:a'. # m4_define([comedilib_lt_current], [11]) m4_define([comedilib_lt_revision], [0]) m4_define([comedilib_lt_age], [11]) # Set 'letter', normally empty. See below for rules. m4_define([comedilib_version_letter], []) #libscxi c:r:a m4_define([scxi_lt_current], [9]) m4_define([scxi_lt_revision], [0]) m4_define([scxi_lt_age], [9]) # comedilib library version: major.minor.micro # comedilib package version: major.minor.micro[letter] # # Currently: # * 'major' may be incremented at the whim of the maintainers. # * 'minor' is libtool 'current' minus the value of 'current' when major # changed (comedilib_major_base_current). # * 'micro' is libtool 'revision'. # * 'letter' is normally absent and is removed if any of 'major', 'minor' # or 'micro' are changed between releases. Otherwise it is set if the # only changes between releases are outside the library source code or # language binding, for example the comedilib manual, "readme" files # or sample configuration files. When it needs to be set, it is set to # 'a' if previously absent, otherwise the next lower-case ASCII letter # in the sequence. (In the unlikely event that we we need to go beyond # 'z', append an extra letter.) # # Example package version sequence: 0.10.1, 0.10.1a, 0.10.1b, 0.10.2, # 0.10.2a, ..., 0.10.2z, 0.10.2za, 0,10.2zb, 0.11.0. # Gentle reminder: The comedilib manual mentions the version of comedilib # it applies to. This is done by setting the 'comedilib_version' entity # in "doc/comedilib.ent". That needs to be edited manually as it is not # updated automatically. Policy: the version of the manual is usually only # updated if the contents have changed since the previous release. In that # case, it is set to the comedilib package version. # Manually set 'comedilib_major_base_current' to new 'comedilib_lt_current' # whenever 'comedilib_version_major' is incremented below. m4_define([comedilib_major_base_current], [0]) m4_define([comedilib_version_major], [0]) m4_define([comedilib_version_minor], [m4_eval(comedilib_lt_current - comedilib_major_base_current)]) m4_define([comedilib_version_micro], [comedilib_lt_revision]) m4_define([comedilib_pkg_version], [m4_join([], m4_join([.], comedilib_version_major, comedilib_version_minor, comedilib_version_micro), comedilib_version_letter)]) AC_INIT([comedilib], [comedilib_pkg_version]) AC_CANONICAL_TARGET([]) COMEDILIB_VERSION_MAJOR=comedilib_version_major COMEDILIB_VERSION_MINOR=comedilib_version_minor COMEDILIB_VERSION_MICRO=comedilib_version_micro AC_SUBST(COMEDILIB_VERSION_MAJOR) AC_SUBST(COMEDILIB_VERSION_MINOR) AC_SUBST(COMEDILIB_VERSION_MICRO) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_AUX_DIR([.]) #COMEDILIB_DEBUG="-Wall -Werror" COMEDILIB_DEBUG="-Wall" AM_INIT_AUTOMAKE([-Wall -Werror]) AC_CONFIG_HEADERS([config.h]) ACLOCAL="$ACLOCAL -I m4" AM_MAINTAINER_MODE([enable]) AM_PROG_AR AC_PROG_CC AM_PROG_CC_C_O AC_PROG_CC_STDC AC_ISC_POSIX AM_PROG_LEX AC_PROG_YACC AC_PROG_LIBTOOL AC_PROG_MKDIR_P AC_HEADER_STDC([]) AX_TLS # AS_LIBTOOL arguments are (prefix, current, revision, age) AS_LIBTOOL(COMEDILIB, comedilib_lt_current, comedilib_lt_revision, comedilib_lt_age) SCXI_SO_VERSION=scxi_lt_current:scxi_lt_revision:scxi_lt_age AC_SUBST(SCXI_SO_VERSION) COMEDILIB_CFLAGS="$COMEDILIB_CFLAGS -I\$(top_srcdir)/include -I\$(top_builddir)/include $COMEDILIB_DEBUG" COMEDILIB_LIBS="$COMEDILIB_LIBS \$(top_builddir)/lib/libcomedi.la -lm" AC_SUBST(COMEDILIB_CFLAGS) AC_SUBST(COMEDILIB_LIBS) # autoconf backwards compatibility if test "$datarootdir" = ""; then datarootdir='${datadir}' AC_SUBST(datarootdir) fi if test "$docdir" = ""; then docdir='${datarootdir}/doc/${PACKAGE}' AC_SUBST(docdir) fi if test "$htmldir" = ""; then htmldir='${docdir}' AC_SUBST(htmldir) fi if test "$pdfdir" = ""; then pdfdir='${docdir}' AC_SUBST(pdfdir) fi #swig AC_PATH_PROG(SWIG, swig, "no") if test "$SWIG" == "no" ; then AC_MSG_WARN([swig not found, will not be able to build swig based bindings]) fi #python AC_ARG_ENABLE([python-binding], [AS_HELP_STRING([--disable-python-binding], [Disable building of Python binding])], [ENABLE_PYTHON=$enableval],[ENABLE_PYTHON="yes"]) if test "$ENABLE_PYTHON" == "yes" && test "$SWIG" != "no"; then AM_PATH_PYTHON AM_CHECK_PYTHON_HEADERS(HAVE_PYTHON=yes,[HAVE_PYTHON=no;AC_MSG_WARN([python headers not found, disabling python binding])]) else HAVE_PYTHON="no" fi AM_CONDITIONAL(HAVE_PYTHON, [test "$HAVE_PYTHON" == "yes" && test "$ENABLE_PYTHON" == "yes"]) AS_COMPILER_FLAG([-fno-strict-aliasing],[PYTHON_QUIET="$PYTHON_QUIET -fno-strict-aliasing"], true ) AS_COMPILER_FLAG([-Wno-unused-function],[PYTHON_QUIET="$PYTHON_QUIET -Wno-unused-function"], true ) AC_SUBST(PYTHON_QUIET) # ruby AC_ARG_ENABLE([ruby-binding], [AS_HELP_STRING([--enable-ruby-binding], [Enable building of Ruby binding])], [ENABLE_RUBY=$enableval], [ENABLE_RUBY="no"]) if test "$ENABLE_RUBY" == "yes" && test "$SWIG" != "no"; then AC_PATH_PROG(RUBY, ruby, no) if test "$RUBY" != "no" ; then RUBY_INC_DIR=`$RUBY -e "require 'rbconfig'; c = ::Config::CONFIG; print c[['archdir']];"` AC_CHECK_HEADER([$RUBY_INC_DIR/ruby.h],[],[ENABLE_RUBY="no";AC_MSG_WARN([ruby.h not found, disabling Ruby binding])]) else AC_MSG_WARN([ruby not found, disabling ruby binding]) ENABLE_RUBY="no" fi else ENABLE_RUBY="no" fi AM_CONDITIONAL(HAVE_RUBY, [test "$ENABLE_RUBY" == "yes"]) AC_ARG_VAR(RUBY_PREFIX,[path prefix for Ruby binding]) AC_ARG_VAR(RUBY_SO_DIR,[path for Ruby extensions]) if test "$RUBY_PREFIX" != "" ; then RUBY_CONFIG_OPTIONS="$RUBY_CONFIG_OPTIONS --prefix=\$(RUBY_PREFIX)" fi if test "$RUBY_SO_DIR" != "" ; then RUBY_CONFIG_OPTIONS="$RUBY_CONFIG_OPTIONS --so-dir=\$(RUBY_SO_DIR)" fi AC_SUBST(RUBY_CONFIG_OPTIONS) # scxi AC_ARG_ENABLE([scxi], [AS_HELP_STRING([--enable-scxi], [Enable SCXI convenience library])], [ENABLE_SCXI=$enableval], [ENABLE_SCXI="no"]) AM_CONDITIONAL(BUILD_SCXI, [test "$ENABLE_SCXI" == "yes"]) # docbook AC_ARG_ENABLE([docbook], [AS_HELP_STRING([--disable-docbook], [Disable docbook])], [ENABLE_DOCBOOK=$enableval],[ENABLE_DOCBOOK="yes"]) if test "$ENABLE_DOCBOOK" == "yes"; then AC_PATH_PROG(XMLTO, xmlto, no) if test "$XMLTO" = "no" ; then AC_MSG_WARN([xmlto not found, will not be able to rebuild documentation]) fi else XMLTO="no" fi if test "$XMLTO" != "no"; then AC_ARG_WITH([pdf-backend], [AS_HELP_STRING([--with-pdf-backend=[[yes|no|dblatex|fop|default]]], [Enable or disable PDF generation with backend])], [WITH_PDF_BACKEND=$withval],[WITH_PDF_BACKEND="yes"]) case "$WITH_PDF_BACKEND" in no) PDF_BACKEND="no" ;; yes) # Prefer dblatex, then default backend. # Could use [dblatex fop] to prefer dblatex or fop. AC_CHECK_PROGS([PDF_BACKEND], [dblatex], [default]) # The default backend is broken, so avoid it for now. if test "$PDF_BACKEND" = "default"; then AC_MSG_WARN([Default PDF backend is broken, disabling PDF generation]) AC_MSG_WARN([(dblatex is recommended for PDF generation)]) PDF_BACKEND="no" fi if test "$PDF_BACKEND" != "no"; then AC_MSG_NOTICE([Will use $PDF_BACKEND backend for PDF generation]) fi ;; default) # Use xmlto's default backend. PDF_BACKEND="default" ;; dblatex|fop) AC_CHECK_PROG([PDF_BACKEND], [$WITH_PDF_BACKEND], [$WITH_PDF_BACKEND], [no]) if test "$PDF_BACKEND" = "no"; then AC_MSG_WARN([$WITH_PDF_BACKEND not found, disabling PDF generation]) fi ;; *) AC_MSG_WARN([Bad --with-pdf-backend option, disabling PDF generation]) PDF_BACKEND="no" ;; esac else PDF_BACKEND="no" fi case $PDF_BACKEND in fop|default) AC_MSG_WARN([$PDF_BACKEND PDF backend might not work. --without-pdf-backend disables PDF generation.]) ;; esac AM_CONDITIONAL(HAVE_XMLTO, [test "$XMLTO" != "no"]) AM_CONDITIONAL(BUILD_PDF, [test "$PDF_BACKEND" != "no"]) AM_CONDITIONAL(BUILD_PDF_USING_DBLATEX, [test "$PDF_BACKEND" = "dblatex"]) AM_CONDITIONAL(BUILD_PDF_USING_FOP, [test "$PDF_BACKEND" = "fop"]) pcmciadir="\${sysconfdir}/pcmcia" AC_SUBST(pcmciadir) # firmware AC_ARG_ENABLE([firmware], [AS_HELP_STRING([--disable-firmware], [Disable installation of firmware files])], [ENABLE_FIRMWARE=$enableval],[ENABLE_FIRMWARE="yes"]) # new udev hotplug AC_ARG_WITH([udev-hotplug], [AS_HELP_STRING([--with-udev-hotplug=[[/lib]]], [enable udev hotplug])], [ENABLE_UDEVHOTPLUG=$withval], [ENABLE_UDEVHOTPLUG="no"]) AM_CONDITIONAL(INSTALL_UDEVHOTPLUG, [test "$ENABLE_UDEVHOTPLUG" != "no"]) if test "$ENABLE_UDEVHOTPLUG" != "no"; then if test "$ENABLE_UDEVHOTPLUG" == "yes"; then AC_MSG_ERROR([udev-hotplug needs a path as an argument (usually: --enable-udev-hotplug=/lib).]) fi if test "$ENABLE_UDEVHOTPLUG" != "/lib"; then AC_MSG_WARN([Installing the udev scripts in the non-standard location: $ENABLE_UDEVHOTPLUG (should be --enable-udev-hotplug=/lib)]) fi udevrulesdir="$ENABLE_UDEVHOTPLUG/udev/rules.d/" udevscriptsdir="$ENABLE_UDEVHOTPLUG/udev" AC_SUBST(udevrulesdir) AC_SUBST(udevscriptsdir) if test "$ENABLE_FIRMWARE" == "yes"; then udevfirmwaredir="$ENABLE_UDEVHOTPLUG/firmware" AC_SUBST(udevfirmwaredir) fi else ENABLE_UDEVHOTPLUG="no" fi if test "$ENABLE_UDEVHOTPLUG" = "no" ; then AC_MSG_WARN([No hotplug mechanism will be installed. Consult ./configure --help if you want hotplug.]) fi AC_CONFIG_FILES( Makefile comedi_config/Makefile comedi_board_info/Makefile c++/Makefile c++/include/Makefile etc/Makefile etc/pcmcia/Makefile etc/hotplug/Makefile etc/hotplug/usb/Makefile etc/hotplug/usb/usbdux/Makefile etc/hotplug/usb/usbduxfast/Makefile etc/hotplug/usb/usbduxsigma/Makefile etc/udev/Makefile doc/Makefile demo/Makefile include/Makefile include/comedilib_version.h lib/Makefile man/Makefile scxi/Makefile swig/Makefile swig/python/Makefile swig/ruby/Makefile testing/Makefile comedilib.spec comedilib.pc ) AC_OUTPUT comedilib-0.11.0/INSTALL0000644000000000000000000000232412416542105011441 00000000000000Configure with one of the following commands: # For udev: "./configure --with-udev-hotplug=/lib --sysconfdir=/etc" # For old hotplug: "./configure --enable-etc-hotplug --sysconfdir=/etc" This makes sure that the udev files are installed in /etc and not in /usr/local/etc. './configure --help' will give the configuration options. If the configure script does not exist (if you checked comedilib out from git for example), it can be generated by running './autogen.sh'. The autoconf, automake, autoheader, etc. tools are required to generate the configure script (automake version >= 1.5 recommended). The configure script will not enable the Python or Ruby bindings unless 'swig' is installed and the Python or Ruby development packages are installed. Compile using 'make'. If this doesn't work, make sure you have the basic tools installed to compile. If you can successfully compile other things, consult the author, as he has probably made a mistake. Install using 'make install' as root. This installs the files: /usr/lib/libcomedi.so.0.x /usr/include/comedi.h /usr/include/comedilib.h and other things... To write programs that use comedi, look at examples in the demo/ and the documentation in the doc/ directory. comedilib-0.11.0/compile0000755000000000000000000001624512426145301011773 00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-10-14.11; # UTC # Copyright (C) 1999-2013 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: comedilib-0.11.0/testing/0000755000000000000000000000000013162722663012154 500000000000000comedilib-0.11.0/testing/cmd_3.c0000644000000000000000000000463512715406005013225 00000000000000 #include #include #include #include #include #include #include #include #include #include #include #include "comedi_test.h" static int do_continuous(int multiplier); #define BUFSZ 10000 int test_cmd_continuous(void) { int mult; unsigned int flags = comedi_get_subdevice_flags(device,subdevice); /* attempt to make subdevice the current 'read' subdevice */ if(flags&SDF_CMD_READ) comedi_set_read_subdevice(device,subdevice); if(!(flags&SDF_CMD) || (comedi_get_read_subdevice(device)!=subdevice)){ printf("not applicable\n"); return 0; } /* as if doing _one_ infinite loop wasn't slow enough, * we loop through with higher and higher multipliers, * in case the test fails because of latency problems */ for(mult=1;mult<1024;mult*=2){ do_continuous(mult); } return 0; } static int do_continuous(int multiplier) { comedi_cmd cmd; char buf[BUFSZ]; unsigned int chanlist[1]; int go; int total=0; int ret; int chunks=0; unsigned long total_secs = 0; struct timeval tv,start_tv; if(comedi_get_cmd_generic_timed(device,subdevice, &cmd, 1, 1)<0){ printf(" not supported\n"); return 0; } if(realtime)cmd.flags |= TRIG_RT; cmd.chanlist = chanlist; cmd.scan_end_arg = 1; cmd.stop_src = TRIG_NONE; cmd.stop_arg = 0; cmd.chanlist_len = 1; chanlist[0] = CR_PACK(0,0,0); // slow down a bit cmd.scan_begin_arg *= multiplier; printf("multiplier=%d, scan_begin_arg=%d\n", multiplier, cmd.scan_begin_arg); ret=comedi_command(device,&cmd); if(ret<0){ perror("comedi_command"); }else{ printf("ret==%d\n",ret); } gettimeofday(&start_tv,NULL); go=1; while(go){ ret = read(comedi_fileno(device),buf,BUFSZ); if(ret<0){ if(errno==EAGAIN){ usleep(10000); }else{ go = 0; perror("read"); } }else if(ret==0){ go = 0; }else{ total += ret; chunks++; gettimeofday(&tv,NULL); tv.tv_sec-=start_tv.tv_sec; tv.tv_usec-=start_tv.tv_usec; if(tv.tv_usec<0){ tv.tv_usec+=1000000; tv.tv_sec--; } if(tv.tv_sec>total_secs){ double t; t=tv.tv_sec+1e-6*tv.tv_usec; printf("%0.3f %d (%g) %d (%g)\n", t, chunks,chunks/t, total,total/t); total_secs++; } } } { double t; t=tv.tv_sec+1e-6*tv.tv_usec; printf("end: %0.3f %d (%g) %d (%g)\n", t, chunks,chunks/t, total,total/t); } return 0; } comedilib-0.11.0/testing/Makefile.am0000644000000000000000000000045012416542105014117 00000000000000 bin_PROGRAMS = comedi_test noinst_HEADERS = comedi_test.h comedi_test_SOURCES = \ bufconfig.c cmd_1.c cmd_2.c cmd_3.c info.c insn_read.c \ insn_read_time.c inttrig.c lib.c main.c mmap.c mode0_read.c \ select.c comedi_test_CFLAGS = $(COMEDILIB_CFLAGS) comedi_test_LDADD = $(COMEDILIB_LIBS) comedilib-0.11.0/testing/comedi_test.h0000644000000000000000000000032012416542105014527 00000000000000 #ifndef _COMEDI_TEST_H_ #define _COMEDI_TEST_H_ extern char *filename; extern comedi_t *device; extern int subdevice; extern int verbose; extern unsigned int capabilities; extern int realtime; #endif comedilib-0.11.0/testing/cmd_1.c0000644000000000000000000001647312715406005013226 00000000000000 #include #include #include #include #include #include #include #include #include #include #include #include "comedi_test.h" void probe_max_1chan(comedi_t *it,int s); char *tobinary(char *s,int bits,int n); char *cmd_src(int src,char *buf); int count_bits(unsigned int bits); int test_cmd_no_cmd(void) { int ret; comedi_cmd cmd; if(comedi_get_subdevice_flags(device,subdevice)&SDF_CMD){ printf("not applicable\n"); return 0; } ret = comedi_get_cmd_src_mask(device,subdevice,&cmd); if(ret<0){ if(errno == EIO){ printf("got EIO, good\n"); }else{ printf("E: comedi_get_cmd_src_mask: %s\n", strerror(errno)); } }else{ printf("E: comedi_get_cmd_src_mask returned %d\n",ret); } return 0; } int test_cmd_probe_src_mask(void) { comedi_cmd cmd; char buf[100]; int ret; if(!(comedi_get_subdevice_flags(device,subdevice)&SDF_CMD)){ printf("not applicable\n"); return 0; } printf("rev 1\n"); ret = comedi_get_cmd_src_mask(device,subdevice,&cmd); if(ret<0){ printf("E: comedi_get_cmd_src_mask failed %s\n", strerror(errno)); return 0; } printf("command source mask:\n"); printf(" start: %s\n",cmd_src(cmd.start_src,buf)); printf(" scan_begin: %s\n",cmd_src(cmd.scan_begin_src,buf)); printf(" convert: %s\n",cmd_src(cmd.convert_src,buf)); printf(" scan_end: %s\n",cmd_src(cmd.scan_end_src,buf)); printf(" stop: %s\n",cmd_src(cmd.stop_src,buf)); return 0; } int test_cmd_probe_fast_1chan(void) { comedi_cmd cmd; char buf[100]; if(!(comedi_get_subdevice_flags(device,subdevice)&SDF_CMD)){ printf("not applicable\n"); return 0; } printf("command fast 1chan:\n"); if(comedi_get_cmd_generic_timed(device,subdevice, &cmd, 1, 1)<0){ printf(" not supported\n"); return 0; } printf(" start: %s %d\n", cmd_src(cmd.start_src,buf),cmd.start_arg); printf(" scan_begin: %s %d\n", cmd_src(cmd.scan_begin_src,buf),cmd.scan_begin_arg); printf(" convert: %s %d\n", cmd_src(cmd.convert_src,buf),cmd.convert_arg); printf(" scan_end: %s %d\n", cmd_src(cmd.scan_end_src,buf),cmd.scan_end_arg); printf(" stop: %s %d\n", cmd_src(cmd.stop_src,buf),cmd.stop_arg); return 0; } #define BUFSZ 2000 int test_cmd_read_fast_1chan(void) { comedi_cmd cmd; char buf[BUFSZ]; unsigned int chanlist[1]; int go; int total=0; int ret; unsigned int flags = comedi_get_subdevice_flags(device,subdevice); /* attempt to make subdevice the current 'read' subdevice */ if(flags&SDF_CMD_READ) comedi_set_read_subdevice(device,subdevice); if(!(flags&SDF_CMD) || (comedi_get_read_subdevice(device)!=subdevice)){ printf("not applicable\n"); return 0; } if(comedi_get_cmd_generic_timed(device, subdevice, &cmd, 1, 1)<0){ printf(" not supported\n"); return 0; } if(realtime)cmd.flags |= TRIG_RT; cmd.chanlist = chanlist; cmd.scan_end_arg = 1; cmd.stop_arg = 100000; cmd.chanlist_len = 1; chanlist[0] = CR_PACK(0,0,0); comedi_command(device,&cmd); go=1; while(go){ ret = read(comedi_fileno(device),buf,BUFSZ); if(ret<0){ if(errno==EAGAIN){ usleep(10000); }else{ go = 0; perror("read"); } }else if(ret==0){ go = 0; }else{ total += ret; if(verbose)printf("read %d %d\n",ret,total); } } return 0; } int test_cmd_write_fast_1chan(void) { comedi_cmd cmd; char buf[BUFSZ]; unsigned int chanlist[1]; int go; int total=0; int ret; unsigned int flags = comedi_get_subdevice_flags(device,subdevice); static const int num_samples = 100000; int num_bytes; int wc; if((flags & SDF_LSAMPL)) { num_bytes = num_samples * sizeof(lsampl_t); }else { num_bytes = num_samples * sizeof(sampl_t); } /* attempt to make subdevice the current 'write' subdevice */ if(flags&SDF_CMD_WRITE) comedi_set_write_subdevice(device,subdevice); if(!(flags&SDF_CMD) || (comedi_get_write_subdevice(device)!=subdevice)){ printf("not applicable\n"); return 0; } if(comedi_get_cmd_generic_timed(device, subdevice, &cmd, 1, 1)<0){ printf(" not supported\n"); return 0; } cmd.flags |= CMDF_WRITE; if(realtime)cmd.flags |= TRIG_RT; cmd.chanlist = chanlist; cmd.scan_end_arg = 1; cmd.stop_arg = num_samples; cmd.chanlist_len = 1; chanlist[0] = CR_PACK(0,0,0); memset(buf,0,BUFSZ); ret = comedi_command(device,&cmd); if(ret<0){ perror("comedi_command"); } go = 1; while(go){ wc = num_bytes-total; if(wc>BUFSZ){ wc = BUFSZ; } ret = write(comedi_fileno(device), buf, wc); if(ret<0){ perror("write"); return 0; } if(ret= num_bytes){ go = 0; } if(verbose)printf("write %d %d\n",ret,total); } ret = comedi_internal_trigger(device, subdevice, 0); if(ret<0){ comedi_perror("E: comedi_internal_trigger"); comedi_cancel(device, subdevice); return 0; } if(verbose)printf("inttrig\n"); go=(totalBUFSZ){ wc = BUFSZ; } ret = write(comedi_fileno(device),buf,wc); if(ret<0){ if(errno==EAGAIN){ usleep(10000); }else{ go = 0; perror("write"); } }else if(ret==0){ go = 0; }else{ total += ret; if(verbose)printf("write %d %d\n",ret,total); //deal with case where output doesn't support stop_src=TRIG_COUNT if(total >= num_bytes) { go = 0; } } } // make sure all samples have been written out while(1) { int flags = comedi_get_subdevice_flags(device,subdevice); if(flags < 0) { printf("E: comedi_get_subdevice_flags returned %i\n", flags); break; } if((flags & SDF_RUNNING) == 0){ break; } usleep(10000); } // cancel needed in the case of stop_src==TRIG_NONE if(comedi_cancel(device, subdevice)) printf("E: comedi_cancel() failed"); return 0; } int test_cmd_logic_bug(void) { comedi_cmd cmd; int ret; int ok=0; if(!(comedi_get_subdevice_flags(device,subdevice)&SDF_CMD)){ printf("not applicable\n"); return 0; } printf("rev 1\n"); ret = comedi_get_cmd_src_mask(device,subdevice,&cmd); if(ret<0){ printf("E: comedi_get_cmd_src_mask failed\n"); return 0; } if(count_bits(cmd.start_src)>1){ cmd.start_src=0; ok=1; } if(count_bits(cmd.scan_begin_src)>1){ cmd.scan_begin_src=0; ok=1; } if(count_bits(cmd.convert_src)>1){ cmd.convert_src=0; ok=1; } if(count_bits(cmd.scan_end_src)>1){ cmd.scan_end_src=0; ok=1; } if(count_bits(cmd.stop_src)>1){ cmd.stop_src=0; ok=1; } if(ok==0){ printf("not applicable (no source choices)\n"); return 0; } ret = comedi_command_test(device,&cmd); if(ret!=1){ printf("E: command_test returned %d, expected 1, (allowed src==0)\n",ret); }else{ printf("command_test returned %d, good\n",ret); } return 0; } int count_bits(unsigned int bits) { int ret=0; while(bits){ if(bits&1)ret++; bits>>=1; } return ret; } char *tobinary(char *s,int bits,int n) { int bit=1<>=1) *t++=(bits&bit)?'1':'0'; *t=0; return s; } char *cmd_src(int src,char *buf) { buf[0]=0; if(src&TRIG_NONE)strcat(buf,"none|"); if(src&TRIG_NOW)strcat(buf,"now|"); if(src&TRIG_FOLLOW)strcat(buf,"follow|"); if(src&TRIG_TIME)strcat(buf,"time|"); if(src&TRIG_TIMER)strcat(buf,"timer|"); if(src&TRIG_COUNT)strcat(buf,"count|"); if(src&TRIG_EXT)strcat(buf,"ext|"); if(src&TRIG_INT)strcat(buf,"int|"); if(strlen(buf)==0){ sprintf(buf,"unknown(0x%02x)",src); }else{ buf[strlen(buf)-1]=0; } return buf; } comedilib-0.11.0/testing/info.c0000644000000000000000000000357712416542105013177 00000000000000 #include #include #include #include #include #include #include #include #include #include #include #include "comedi_test.h" static const char * const subdevice_types[]={ "unused", "analog input", "analog output", "digital input", "digital output", "digital I/O", "counter", "timer", "memory", "calibration", "processor", "serial", "pwm" }; int test_info(void) { int j; int type; const char *type_str; int chan,n_chans; int n_ranges; comedi_range *rng; printf("rev 1\n"); type = comedi_get_subdevice_type(device,subdevice); if(type < (int)(sizeof(subdevice_types) / sizeof(subdevice_types[0]))) { type_str = subdevice_types[type]; }else{ type_str = "UNKNOWN"; } printf("I: subdevice type: %d (%s)\n",type,type_str); if(type==COMEDI_SUBD_UNUSED) return 0; n_chans=comedi_get_n_channels(device,subdevice); printf(" number of channels: %d\n",n_chans); if(!comedi_maxdata_is_chan_specific(device,subdevice)){ printf(" max data value: %d\n",comedi_get_maxdata(device,subdevice,0)); }else{ printf(" max data value: (channel specific)\n"); for(chan=0;chanmin,rng->max); } printf("\n"); }else{ for(chan=0;chanmin,rng->max); } printf("\n"); } } return 0; } comedilib-0.11.0/testing/mmap.c0000644000000000000000000000620612715406005013166 00000000000000 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "comedi_test.h" /* XXX this should come from elsewhere */ #define PAGE_SIZE 4096 #define N_SAMPLES 10000 sigjmp_buf jump_env; void segv_handler(int num) { siglongjmp(jump_env,1); } int test_segfault(void *memptr) { int ret; struct sigaction act; struct sigaction oldact; memset(&act,0,sizeof(act)); act.sa_handler=&segv_handler; ret = sigaction(SIGSEGV,&act,&oldact); if(ret) { fprintf(stderr, "sigaction failed\n"); return 0; } ret=sigsetjmp(jump_env, 1); if(!ret) *((volatile char *)(memptr)); sigaction(SIGSEGV,&oldact,NULL); return ret; } int test_mmap(void) { comedi_cmd cmd; unsigned char *buf; unsigned int chanlist[1]; int go; int fails; int total=0; int ret; void *b; unsigned char *adr; unsigned char *map; unsigned int flags; int i; unsigned sample_size; unsigned map_len; flags = comedi_get_subdevice_flags(device,subdevice); /* attempt to make subdevice the current 'read' subdevice */ if(flags&SDF_CMD_READ) comedi_set_read_subdevice(device,subdevice); if(!(flags&SDF_CMD) || (comedi_get_read_subdevice(device)!=subdevice)){ printf("not applicable\n"); return 0; } if(flags & SDF_LSAMPL) sample_size = sizeof(lsampl_t); else sample_size = sizeof(sampl_t); map_len = sample_size * N_SAMPLES; if(comedi_get_cmd_generic_timed(device, subdevice, &cmd, 1, 1)<0){ printf("E: comedi_get_cmd_generic_timed failed\n"); return 0; } buf=malloc(sample_size * N_SAMPLES); map = mmap(NULL, map_len,PROT_READ, MAP_SHARED, comedi_fileno(device),0); if(!map){ printf("E: mmap() failed\n"); return 0; } /* test readability */ for(adr = map; adr < map + map_len; adr += PAGE_SIZE){ ret=test_segfault(adr); if(ret){ printf("E: %p failed\n",adr); }else{ printf("%p ok\n",adr); } } if(realtime)cmd.flags |= TRIG_RT; cmd.chanlist = chanlist; cmd.scan_end_arg = 1; cmd.stop_arg = N_SAMPLES; cmd.chanlist_len = 1; chanlist[0] = CR_PACK(0,0,0); comedi_command(device,&cmd); go=1; b=buf; while(go){ ret = read(comedi_fileno(device), b, (N_SAMPLES * sample_size) - total); if(ret<0){ if(errno==EAGAIN){ usleep(10000); }else{ go = 0; perror("read"); } }else if(ret==0){ go = 0; }else{ total += ret; b += ret; if(verbose) printf("read %d %d\n",ret,total); if(total >= (N_SAMPLES * sample_size)){ go = 0; } } } fails = 0; for(i=0;i10)break; } } if(fails==0) printf("compare ok\n"); munmap(map, map_len); /* test if area is really unmapped */ for(adr = map; adr < map + map_len; adr += PAGE_SIZE){ ret=test_segfault(adr); if(ret){ printf("%p segfaulted (ok)\n",adr); }else{ printf("E: %p still mapped\n",adr); } } free(buf); return 0; } comedilib-0.11.0/testing/insn_read_time.c0000644000000000000000000000265212731741521015220 00000000000000 #include #include #include #include #include #include #include #include #include #include #include #include "comedi_test.h" int test_insn_read_time(void) { comedi_insn insn[3]; comedi_insnlist il; lsampl_t t1[2],t2[2]; lsampl_t data; long diffus; int save_errno; int ret; printf("rev 1\n"); if(comedi_get_subdevice_type(device,subdevice)==COMEDI_SUBD_UNUSED){ printf("not applicable\n"); return 0; } memset(&il,0,sizeof(il)); memset(insn,0,sizeof(insn)); il.n_insns = 3; il.insns = insn; insn[0].insn = INSN_GTOD; insn[0].n=2; insn[0].data = t1; insn[1].subdev = subdevice; insn[1].insn = INSN_READ; insn[1].n = 1; insn[1].chanspec = CR_PACK(0,0,0); insn[1].data = &data; insn[2].insn = INSN_GTOD; insn[2].n=2; insn[2].data = t2; ret = comedi_do_insnlist(device,&il); save_errno = errno; printf("comedi_do_insn: %d\n",ret); if(ret<0){ printf("W: comedi_do_insn: errno=%d %s\n",save_errno,strerror(save_errno)); } if(ret<2){ printf("W: comedi_do_insn: returned %d (expected 3)\n",ret); } if (t2[0] >= t1[0]) { diffus = (long)(t2[0] - t1[0]); } else { diffus = -(long)(t1[0] - t2[0]); } diffus *= 1000000; if (t2[1] >= t1[1]) { diffus += (long)(t2[1] - t1[1]); } else { diffus -= (long)(t1[1] - t2[1]); } printf("read time: %ld us\n", diffus); return 0; } comedilib-0.11.0/testing/inttrig.c0000644000000000000000000000341312715406005013711 00000000000000 #include #include #include #include #include #include #include #include #include #include #include #include "comedi_test.h" #define BUFSZ 2000 int test_cmd_start_inttrig(void) { comedi_cmd cmd; char buf[BUFSZ]; unsigned int chanlist[1]; int go; int total=0; int ret; unsigned int flags; flags = comedi_get_subdevice_flags(device,subdevice); /* attempt to make subdevice the current 'read' subdevice */ if(flags&SDF_CMD_READ) comedi_set_read_subdevice(device,subdevice); if(!(flags&SDF_CMD) || (comedi_get_read_subdevice(device)!=subdevice)){ printf("not applicable\n"); return 0; } if(comedi_get_cmd_src_mask(device,subdevice,&cmd)<0){ printf(" not supported\n"); return 0; } if(!(cmd.start_src&TRIG_INT)){ printf(" not supported\n"); return 0; } if(comedi_get_cmd_generic_timed(device, subdevice, &cmd, 1, 1)<0){ printf(" not supported\n"); return 0; } if(realtime)cmd.flags |= TRIG_RT; cmd.chanlist = chanlist; cmd.start_src = TRIG_INT; cmd.start_arg = 0; cmd.scan_end_arg = 1; cmd.stop_arg = 100; cmd.chanlist_len = 1; chanlist[0] = CR_PACK(0,0,0); ret = comedi_command(device,&cmd); if(ret!=0){ printf("E: comedi_command() returned %d, expecting 0\n",ret); } ret = comedi_internal_trigger(device,subdevice,0); if(ret<0){ printf("E: comedi_internal_trigger(): %s\n",strerror(errno)); } go=1; while(go){ ret = read(comedi_fileno(device),buf,BUFSZ); if(ret<0){ if(errno==EAGAIN){ usleep(10000); }else{ go = 0; printf("E: read: %s\n",strerror(errno)); } }else if(ret==0){ go = 0; }else{ total += ret; if(verbose) printf("read %d %d\n",ret,total); } } return 0; } comedilib-0.11.0/testing/select.c0000644000000000000000000000337212715406005013514 00000000000000 #include #include #include #include #include #include #include #include #include #include #include #include "comedi_test.h" #define BUFSZ 10000 int test_read_select(void) { comedi_cmd cmd; char buf[BUFSZ]; unsigned int chanlist[1]; int go; int total=0; int ret; int chunks=0; int length=100000; fd_set rdset; struct timeval timeout; unsigned int flags; flags = comedi_get_subdevice_flags(device,subdevice); /* attempt to make subdevice the current 'read' subdevice */ if(flags&SDF_CMD_READ) comedi_set_read_subdevice(device,subdevice); if(!(flags&SDF_CMD) || (comedi_get_read_subdevice(device)!=subdevice)){ printf("not applicable\n"); return 0; } if(comedi_get_cmd_generic_timed(device, subdevice, &cmd, 1, 1)<0){ printf("E: comedi_get_cmd_generic_timed failed\n"); return 0; } if(realtime)cmd.flags |= TRIG_RT; cmd.chanlist = chanlist; cmd.scan_end_arg = 1; cmd.stop_arg = length; cmd.chanlist_len = 1; chanlist[0] = CR_PACK(0,0,0); //fcntl(comedi_fileno(device),F_SETFL,O_NONBLOCK); comedi_command(device,&cmd); go=1; while(go){ FD_ZERO(&rdset); FD_SET(comedi_fileno(device),&rdset); timeout.tv_sec = 0; timeout.tv_usec = 10000; ret = select(comedi_fileno(device)+1,&rdset,NULL,NULL,&timeout); if(ret<0){ perror("select"); }else if(ret==0){ if(verbose)printf("timeout\n"); }else{ ret = read(comedi_fileno(device),buf,BUFSZ); if(verbose)printf("read==%d\n",ret); if(ret<0){ if(errno==EAGAIN){ printf("E: got EAGAIN!\n"); }else{ go = 0; perror("read"); } }else if(ret==0){ go = 0; }else{ total += ret; chunks++; } } } return 0; } comedilib-0.11.0/testing/bufconfig.c0000644000000000000000000000477212416542105014204 00000000000000 #include #include #include #include #include #include #include #include #include #include #include #include "comedi_test.h" int test_bufconfig_without_cmd(void); int test_bufconfig_with_cmd(void); int test_bufconfig(void) { int flags; flags = comedi_get_subdevice_flags(device,subdevice); if(flags&SDF_CMD){ return test_bufconfig_with_cmd(); }else{ return test_bufconfig_without_cmd(); } } int test_bufconfig_without_cmd(void) { int ret; ret = comedi_get_buffer_size(device,subdevice); if(ret<0){ if(errno==ENODEV){ printf("got ENODEV, good\n"); }else{ printf("E: comedi_get_buffer_size: %s\n", strerror(errno)); } }else if(ret==0){ printf("buffer length is 0, good\n"); }else{ printf("E: comedi_get_buffer_size returned %d\n",ret); } return 0; } int test_bufconfig_with_cmd(void) { int ret; int len; int maxlen; ret = comedi_get_buffer_size(device,subdevice); if(ret<0){ printf("E: comedi_get_buffer_size: %s\n",strerror(errno)); }else{ printf("buffer size %d\n",ret); } maxlen = comedi_get_max_buffer_size(device,subdevice); if(maxlen<0){ printf("E: comedi_get_max_buffer_size: %s\n",strerror(errno)); }else{ printf("max buffer size %d\n",maxlen); } len=4096; printf("setting buffer size to %d\n",len); ret = comedi_set_buffer_size(device,subdevice,len); if(ret<0){ printf("E: comedi_set_buffer_size: %s\n",strerror(errno)); }else{ printf("buffer size set to %d\n",ret); } ret = comedi_get_buffer_size(device,subdevice); if(ret<0){ printf("E: comedi_get_buffer_size: %s\n",strerror(errno)); }else{ printf("buffer size now at %d\n",ret); if(ret != len){ printf("E: buffer size didn't get set: %d (expected %d)\n", ret,len); } } len=maxlen+4096; printf("setting buffer size past limit, %d\n",len); ret = comedi_set_buffer_size(device,subdevice,len); if(ret<0){ if(errno==EPERM){ printf("got EPERM, good\n"); }else{ printf("E: wrong error comedi_set_buffer_size: %s", strerror(errno)); } }else{ printf("E: comedi_set_buffer_size: didn't get error\n"); } len=maxlen; printf("setting buffer size to max, %d\n",len); ret = comedi_set_buffer_size(device,subdevice,len); if(ret<0){ printf("E: comedi_set_buffer_size: %s\n",strerror(errno)); }else{ printf("buffer size now at %d\n",ret); if(ret != len){ printf("E: buffer size didn't get set: %d (expected %d)\n", ret,len); } } return 0; } comedilib-0.11.0/testing/Makefile.in0000644000000000000000000013304413140064521014132 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ bin_PROGRAMS = comedi_test$(EXEEXT) subdir = testing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/am-check-python-headers.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/as-libtool.m4 $(top_srcdir)/m4/ax_tls.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_comedi_test_OBJECTS = comedi_test-bufconfig.$(OBJEXT) \ comedi_test-cmd_1.$(OBJEXT) comedi_test-cmd_2.$(OBJEXT) \ comedi_test-cmd_3.$(OBJEXT) comedi_test-info.$(OBJEXT) \ comedi_test-insn_read.$(OBJEXT) \ comedi_test-insn_read_time.$(OBJEXT) \ comedi_test-inttrig.$(OBJEXT) comedi_test-lib.$(OBJEXT) \ comedi_test-main.$(OBJEXT) comedi_test-mmap.$(OBJEXT) \ comedi_test-mode0_read.$(OBJEXT) comedi_test-select.$(OBJEXT) comedi_test_OBJECTS = $(am_comedi_test_OBJECTS) am__DEPENDENCIES_1 = comedi_test_DEPENDENCIES = $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = comedi_test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(comedi_test_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(comedi_test_SOURCES) DIST_SOURCES = $(comedi_test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COMEDILIB_AGE = @COMEDILIB_AGE@ COMEDILIB_CFLAGS = @COMEDILIB_CFLAGS@ COMEDILIB_CURRENT = @COMEDILIB_CURRENT@ COMEDILIB_LIBS = @COMEDILIB_LIBS@ COMEDILIB_LIBVERSION = @COMEDILIB_LIBVERSION@ COMEDILIB_LT_LDFLAGS = @COMEDILIB_LT_LDFLAGS@ COMEDILIB_REVISION = @COMEDILIB_REVISION@ COMEDILIB_VERSION_MAJOR = @COMEDILIB_VERSION_MAJOR@ COMEDILIB_VERSION_MICRO = @COMEDILIB_VERSION_MICRO@ COMEDILIB_VERSION_MINOR = @COMEDILIB_VERSION_MINOR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_BACKEND = @PDF_BACKEND@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_QUIET = @PYTHON_QUIET@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_CONFIG_OPTIONS = @RUBY_CONFIG_OPTIONS@ RUBY_PREFIX = @RUBY_PREFIX@ RUBY_SO_DIR = @RUBY_SO_DIR@ SCXI_SO_VERSION = @SCXI_SO_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ VERSION = @VERSION@ XMLTO = @XMLTO@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pcmciadir = @pcmciadir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ udevfirmwaredir = @udevfirmwaredir@ udevrulesdir = @udevrulesdir@ udevscriptsdir = @udevscriptsdir@ noinst_HEADERS = comedi_test.h comedi_test_SOURCES = \ bufconfig.c cmd_1.c cmd_2.c cmd_3.c info.c insn_read.c \ insn_read_time.c inttrig.c lib.c main.c mmap.c mode0_read.c \ select.c comedi_test_CFLAGS = $(COMEDILIB_CFLAGS) comedi_test_LDADD = $(COMEDILIB_LIBS) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu testing/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu testing/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list comedi_test$(EXEEXT): $(comedi_test_OBJECTS) $(comedi_test_DEPENDENCIES) $(EXTRA_comedi_test_DEPENDENCIES) @rm -f comedi_test$(EXEEXT) $(AM_V_CCLD)$(comedi_test_LINK) $(comedi_test_OBJECTS) $(comedi_test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comedi_test-bufconfig.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comedi_test-cmd_1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comedi_test-cmd_2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comedi_test-cmd_3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comedi_test-info.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comedi_test-insn_read.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comedi_test-insn_read_time.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comedi_test-inttrig.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comedi_test-lib.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comedi_test-main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comedi_test-mmap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comedi_test-mode0_read.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comedi_test-select.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< comedi_test-bufconfig.o: bufconfig.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -MT comedi_test-bufconfig.o -MD -MP -MF $(DEPDIR)/comedi_test-bufconfig.Tpo -c -o comedi_test-bufconfig.o `test -f 'bufconfig.c' || echo '$(srcdir)/'`bufconfig.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/comedi_test-bufconfig.Tpo $(DEPDIR)/comedi_test-bufconfig.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bufconfig.c' object='comedi_test-bufconfig.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -c -o comedi_test-bufconfig.o `test -f 'bufconfig.c' || echo '$(srcdir)/'`bufconfig.c comedi_test-bufconfig.obj: bufconfig.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -MT comedi_test-bufconfig.obj -MD -MP -MF $(DEPDIR)/comedi_test-bufconfig.Tpo -c -o comedi_test-bufconfig.obj `if test -f 'bufconfig.c'; then $(CYGPATH_W) 'bufconfig.c'; else $(CYGPATH_W) '$(srcdir)/bufconfig.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/comedi_test-bufconfig.Tpo $(DEPDIR)/comedi_test-bufconfig.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bufconfig.c' object='comedi_test-bufconfig.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -c -o comedi_test-bufconfig.obj `if test -f 'bufconfig.c'; then $(CYGPATH_W) 'bufconfig.c'; else $(CYGPATH_W) '$(srcdir)/bufconfig.c'; fi` comedi_test-cmd_1.o: cmd_1.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -MT comedi_test-cmd_1.o -MD -MP -MF $(DEPDIR)/comedi_test-cmd_1.Tpo -c -o comedi_test-cmd_1.o `test -f 'cmd_1.c' || echo '$(srcdir)/'`cmd_1.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/comedi_test-cmd_1.Tpo $(DEPDIR)/comedi_test-cmd_1.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cmd_1.c' object='comedi_test-cmd_1.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -c -o comedi_test-cmd_1.o `test -f 'cmd_1.c' || echo '$(srcdir)/'`cmd_1.c comedi_test-cmd_1.obj: cmd_1.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -MT comedi_test-cmd_1.obj -MD -MP -MF $(DEPDIR)/comedi_test-cmd_1.Tpo -c -o comedi_test-cmd_1.obj `if test -f 'cmd_1.c'; then $(CYGPATH_W) 'cmd_1.c'; else $(CYGPATH_W) '$(srcdir)/cmd_1.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/comedi_test-cmd_1.Tpo $(DEPDIR)/comedi_test-cmd_1.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cmd_1.c' object='comedi_test-cmd_1.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -c -o comedi_test-cmd_1.obj `if test -f 'cmd_1.c'; then $(CYGPATH_W) 'cmd_1.c'; else $(CYGPATH_W) '$(srcdir)/cmd_1.c'; fi` comedi_test-cmd_2.o: cmd_2.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -MT comedi_test-cmd_2.o -MD -MP -MF $(DEPDIR)/comedi_test-cmd_2.Tpo -c -o comedi_test-cmd_2.o `test -f 'cmd_2.c' || echo '$(srcdir)/'`cmd_2.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/comedi_test-cmd_2.Tpo $(DEPDIR)/comedi_test-cmd_2.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cmd_2.c' object='comedi_test-cmd_2.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -c -o comedi_test-cmd_2.o `test -f 'cmd_2.c' || echo '$(srcdir)/'`cmd_2.c comedi_test-cmd_2.obj: cmd_2.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -MT comedi_test-cmd_2.obj -MD -MP -MF $(DEPDIR)/comedi_test-cmd_2.Tpo -c -o comedi_test-cmd_2.obj `if test -f 'cmd_2.c'; then $(CYGPATH_W) 'cmd_2.c'; else $(CYGPATH_W) '$(srcdir)/cmd_2.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/comedi_test-cmd_2.Tpo $(DEPDIR)/comedi_test-cmd_2.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cmd_2.c' object='comedi_test-cmd_2.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -c -o comedi_test-cmd_2.obj `if test -f 'cmd_2.c'; then $(CYGPATH_W) 'cmd_2.c'; else $(CYGPATH_W) '$(srcdir)/cmd_2.c'; fi` comedi_test-cmd_3.o: cmd_3.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -MT comedi_test-cmd_3.o -MD -MP -MF $(DEPDIR)/comedi_test-cmd_3.Tpo -c -o comedi_test-cmd_3.o `test -f 'cmd_3.c' || echo '$(srcdir)/'`cmd_3.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/comedi_test-cmd_3.Tpo $(DEPDIR)/comedi_test-cmd_3.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cmd_3.c' object='comedi_test-cmd_3.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -c -o comedi_test-cmd_3.o `test -f 'cmd_3.c' || echo '$(srcdir)/'`cmd_3.c comedi_test-cmd_3.obj: cmd_3.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -MT comedi_test-cmd_3.obj -MD -MP -MF $(DEPDIR)/comedi_test-cmd_3.Tpo -c -o comedi_test-cmd_3.obj `if test -f 'cmd_3.c'; then $(CYGPATH_W) 'cmd_3.c'; else $(CYGPATH_W) '$(srcdir)/cmd_3.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/comedi_test-cmd_3.Tpo $(DEPDIR)/comedi_test-cmd_3.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cmd_3.c' object='comedi_test-cmd_3.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -c -o comedi_test-cmd_3.obj `if test -f 'cmd_3.c'; then $(CYGPATH_W) 'cmd_3.c'; else $(CYGPATH_W) '$(srcdir)/cmd_3.c'; fi` comedi_test-info.o: info.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -MT comedi_test-info.o -MD -MP -MF $(DEPDIR)/comedi_test-info.Tpo -c -o comedi_test-info.o `test -f 'info.c' || echo '$(srcdir)/'`info.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/comedi_test-info.Tpo $(DEPDIR)/comedi_test-info.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='info.c' object='comedi_test-info.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -c -o comedi_test-info.o `test -f 'info.c' || echo '$(srcdir)/'`info.c comedi_test-info.obj: info.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -MT comedi_test-info.obj -MD -MP -MF $(DEPDIR)/comedi_test-info.Tpo -c -o comedi_test-info.obj `if test -f 'info.c'; then $(CYGPATH_W) 'info.c'; else $(CYGPATH_W) '$(srcdir)/info.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/comedi_test-info.Tpo $(DEPDIR)/comedi_test-info.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='info.c' object='comedi_test-info.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -c -o comedi_test-info.obj `if test -f 'info.c'; then $(CYGPATH_W) 'info.c'; else $(CYGPATH_W) '$(srcdir)/info.c'; fi` comedi_test-insn_read.o: insn_read.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -MT comedi_test-insn_read.o -MD -MP -MF $(DEPDIR)/comedi_test-insn_read.Tpo -c -o comedi_test-insn_read.o `test -f 'insn_read.c' || echo '$(srcdir)/'`insn_read.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/comedi_test-insn_read.Tpo $(DEPDIR)/comedi_test-insn_read.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='insn_read.c' object='comedi_test-insn_read.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -c -o comedi_test-insn_read.o `test -f 'insn_read.c' || echo '$(srcdir)/'`insn_read.c comedi_test-insn_read.obj: insn_read.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -MT comedi_test-insn_read.obj -MD -MP -MF $(DEPDIR)/comedi_test-insn_read.Tpo -c -o comedi_test-insn_read.obj `if test -f 'insn_read.c'; then $(CYGPATH_W) 'insn_read.c'; else $(CYGPATH_W) '$(srcdir)/insn_read.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/comedi_test-insn_read.Tpo $(DEPDIR)/comedi_test-insn_read.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='insn_read.c' object='comedi_test-insn_read.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -c -o comedi_test-insn_read.obj `if test -f 'insn_read.c'; then $(CYGPATH_W) 'insn_read.c'; else $(CYGPATH_W) '$(srcdir)/insn_read.c'; fi` comedi_test-insn_read_time.o: insn_read_time.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -MT comedi_test-insn_read_time.o -MD -MP -MF $(DEPDIR)/comedi_test-insn_read_time.Tpo -c -o comedi_test-insn_read_time.o `test -f 'insn_read_time.c' || echo '$(srcdir)/'`insn_read_time.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/comedi_test-insn_read_time.Tpo $(DEPDIR)/comedi_test-insn_read_time.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='insn_read_time.c' object='comedi_test-insn_read_time.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -c -o comedi_test-insn_read_time.o `test -f 'insn_read_time.c' || echo '$(srcdir)/'`insn_read_time.c comedi_test-insn_read_time.obj: insn_read_time.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -MT comedi_test-insn_read_time.obj -MD -MP -MF $(DEPDIR)/comedi_test-insn_read_time.Tpo -c -o comedi_test-insn_read_time.obj `if test -f 'insn_read_time.c'; then $(CYGPATH_W) 'insn_read_time.c'; else $(CYGPATH_W) '$(srcdir)/insn_read_time.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/comedi_test-insn_read_time.Tpo $(DEPDIR)/comedi_test-insn_read_time.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='insn_read_time.c' object='comedi_test-insn_read_time.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -c -o comedi_test-insn_read_time.obj `if test -f 'insn_read_time.c'; then $(CYGPATH_W) 'insn_read_time.c'; else $(CYGPATH_W) '$(srcdir)/insn_read_time.c'; fi` comedi_test-inttrig.o: inttrig.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -MT comedi_test-inttrig.o -MD -MP -MF $(DEPDIR)/comedi_test-inttrig.Tpo -c -o comedi_test-inttrig.o `test -f 'inttrig.c' || echo '$(srcdir)/'`inttrig.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/comedi_test-inttrig.Tpo $(DEPDIR)/comedi_test-inttrig.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='inttrig.c' object='comedi_test-inttrig.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -c -o comedi_test-inttrig.o `test -f 'inttrig.c' || echo '$(srcdir)/'`inttrig.c comedi_test-inttrig.obj: inttrig.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -MT comedi_test-inttrig.obj -MD -MP -MF $(DEPDIR)/comedi_test-inttrig.Tpo -c -o comedi_test-inttrig.obj `if test -f 'inttrig.c'; then $(CYGPATH_W) 'inttrig.c'; else $(CYGPATH_W) '$(srcdir)/inttrig.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/comedi_test-inttrig.Tpo $(DEPDIR)/comedi_test-inttrig.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='inttrig.c' object='comedi_test-inttrig.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -c -o comedi_test-inttrig.obj `if test -f 'inttrig.c'; then $(CYGPATH_W) 'inttrig.c'; else $(CYGPATH_W) '$(srcdir)/inttrig.c'; fi` comedi_test-lib.o: lib.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -MT comedi_test-lib.o -MD -MP -MF $(DEPDIR)/comedi_test-lib.Tpo -c -o comedi_test-lib.o `test -f 'lib.c' || echo '$(srcdir)/'`lib.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/comedi_test-lib.Tpo $(DEPDIR)/comedi_test-lib.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib.c' object='comedi_test-lib.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -c -o comedi_test-lib.o `test -f 'lib.c' || echo '$(srcdir)/'`lib.c comedi_test-lib.obj: lib.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -MT comedi_test-lib.obj -MD -MP -MF $(DEPDIR)/comedi_test-lib.Tpo -c -o comedi_test-lib.obj `if test -f 'lib.c'; then $(CYGPATH_W) 'lib.c'; else $(CYGPATH_W) '$(srcdir)/lib.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/comedi_test-lib.Tpo $(DEPDIR)/comedi_test-lib.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib.c' object='comedi_test-lib.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -c -o comedi_test-lib.obj `if test -f 'lib.c'; then $(CYGPATH_W) 'lib.c'; else $(CYGPATH_W) '$(srcdir)/lib.c'; fi` comedi_test-main.o: main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -MT comedi_test-main.o -MD -MP -MF $(DEPDIR)/comedi_test-main.Tpo -c -o comedi_test-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/comedi_test-main.Tpo $(DEPDIR)/comedi_test-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='main.c' object='comedi_test-main.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -c -o comedi_test-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c comedi_test-main.obj: main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -MT comedi_test-main.obj -MD -MP -MF $(DEPDIR)/comedi_test-main.Tpo -c -o comedi_test-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/comedi_test-main.Tpo $(DEPDIR)/comedi_test-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='main.c' object='comedi_test-main.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -c -o comedi_test-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi` comedi_test-mmap.o: mmap.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -MT comedi_test-mmap.o -MD -MP -MF $(DEPDIR)/comedi_test-mmap.Tpo -c -o comedi_test-mmap.o `test -f 'mmap.c' || echo '$(srcdir)/'`mmap.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/comedi_test-mmap.Tpo $(DEPDIR)/comedi_test-mmap.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mmap.c' object='comedi_test-mmap.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -c -o comedi_test-mmap.o `test -f 'mmap.c' || echo '$(srcdir)/'`mmap.c comedi_test-mmap.obj: mmap.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -MT comedi_test-mmap.obj -MD -MP -MF $(DEPDIR)/comedi_test-mmap.Tpo -c -o comedi_test-mmap.obj `if test -f 'mmap.c'; then $(CYGPATH_W) 'mmap.c'; else $(CYGPATH_W) '$(srcdir)/mmap.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/comedi_test-mmap.Tpo $(DEPDIR)/comedi_test-mmap.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mmap.c' object='comedi_test-mmap.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -c -o comedi_test-mmap.obj `if test -f 'mmap.c'; then $(CYGPATH_W) 'mmap.c'; else $(CYGPATH_W) '$(srcdir)/mmap.c'; fi` comedi_test-mode0_read.o: mode0_read.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -MT comedi_test-mode0_read.o -MD -MP -MF $(DEPDIR)/comedi_test-mode0_read.Tpo -c -o comedi_test-mode0_read.o `test -f 'mode0_read.c' || echo '$(srcdir)/'`mode0_read.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/comedi_test-mode0_read.Tpo $(DEPDIR)/comedi_test-mode0_read.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mode0_read.c' object='comedi_test-mode0_read.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -c -o comedi_test-mode0_read.o `test -f 'mode0_read.c' || echo '$(srcdir)/'`mode0_read.c comedi_test-mode0_read.obj: mode0_read.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -MT comedi_test-mode0_read.obj -MD -MP -MF $(DEPDIR)/comedi_test-mode0_read.Tpo -c -o comedi_test-mode0_read.obj `if test -f 'mode0_read.c'; then $(CYGPATH_W) 'mode0_read.c'; else $(CYGPATH_W) '$(srcdir)/mode0_read.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/comedi_test-mode0_read.Tpo $(DEPDIR)/comedi_test-mode0_read.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mode0_read.c' object='comedi_test-mode0_read.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -c -o comedi_test-mode0_read.obj `if test -f 'mode0_read.c'; then $(CYGPATH_W) 'mode0_read.c'; else $(CYGPATH_W) '$(srcdir)/mode0_read.c'; fi` comedi_test-select.o: select.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -MT comedi_test-select.o -MD -MP -MF $(DEPDIR)/comedi_test-select.Tpo -c -o comedi_test-select.o `test -f 'select.c' || echo '$(srcdir)/'`select.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/comedi_test-select.Tpo $(DEPDIR)/comedi_test-select.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='select.c' object='comedi_test-select.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -c -o comedi_test-select.o `test -f 'select.c' || echo '$(srcdir)/'`select.c comedi_test-select.obj: select.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -MT comedi_test-select.obj -MD -MP -MF $(DEPDIR)/comedi_test-select.Tpo -c -o comedi_test-select.obj `if test -f 'select.c'; then $(CYGPATH_W) 'select.c'; else $(CYGPATH_W) '$(srcdir)/select.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/comedi_test-select.Tpo $(DEPDIR)/comedi_test-select.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='select.c' object='comedi_test-select.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_test_CFLAGS) $(CFLAGS) -c -o comedi_test-select.obj `if test -f 'select.c'; then $(CYGPATH_W) 'select.c'; else $(CYGPATH_W) '$(srcdir)/select.c'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: comedilib-0.11.0/testing/mode0_read.c0000644000000000000000000000143112416542105014226 00000000000000 #define _COMEDILIB_DEPRECATED #include #include #include #include #include #include #include #include #include #include #include #include "comedi_test.h" int test_mode0_read(void) { comedi_trig it; sampl_t data; unsigned int chanspec; int save_errno; int ret; printf("rev 1\n"); memset(&it,0,sizeof(it)); it.subdev = subdevice; it.mode = 0; it.n_chan = 1; it.chanlist = &chanspec; it.data = &data; it.n = 1; chanspec = CR_PACK(0,0,0); ret = comedi_trigger(device,&it); save_errno = errno; printf("comedi_trig_ioctl: %d\n",ret); if(ret<0){ printf("W: comedi_trig_ioctl: errno=%d %s\n",save_errno, strerror(save_errno)); } return 0; } comedilib-0.11.0/testing/cmd_2.c0000644000000000000000000000275712715406005013227 00000000000000 #include #include #include #include #include #include #include #include #include #include #include #include "comedi_test.h" static int get_chunks_per_length(int length); #define BUFSZ 10000 int test_cmd_fifo_depth_check(void) { int len; unsigned int flags = comedi_get_subdevice_flags(device,subdevice); /* attempt to make subdevice the current 'read' subdevice */ if(flags&SDF_CMD_READ) comedi_set_read_subdevice(device,subdevice); if(!(flags&SDF_CMD) || (comedi_get_read_subdevice(device)!=subdevice)){ printf("not applicable\n"); return 0; } for(len=64;len<65536;len<<=1){ printf("%d, %d\n",len,get_chunks_per_length(len)); } return 0; } static int get_chunks_per_length(int length) { comedi_cmd cmd; char buf[BUFSZ]; unsigned int chanlist[1]; int go; int total=0; int ret; int chunks=0; if(comedi_get_cmd_generic_timed(device, subdevice, &cmd, 1, 1)<0){ printf(" not supported\n"); return 0; } if(realtime)cmd.flags |= TRIG_RT; cmd.chanlist = chanlist; cmd.scan_end_arg = 1; cmd.stop_arg = length; cmd.chanlist_len = 1; chanlist[0] = CR_PACK(0,0,0); comedi_command(device,&cmd); go=1; while(go){ ret = read(comedi_fileno(device),buf,BUFSZ); if(ret<0){ if(errno==EAGAIN){ usleep(10000); }else{ go = 0; perror("read"); } }else if(ret==0){ go = 0; }else{ total += ret; chunks++; } } return chunks; } comedilib-0.11.0/testing/lib.c0000644000000000000000000000042112416542105012773 00000000000000 #include #include #include #include #include #include #include #include #include #include #include #include "comedi_test.h" /* nothing currently */ comedilib-0.11.0/testing/README0000644000000000000000000000160412416542105012745 00000000000000 The results directory contains last-known testing results that have been contributed by users. If your board is listed there, please compare it the output of comedi_test and if it differs significantly, send me a copy and/or diff. I'll either update the file, or it indicates that there is a bug. If your board is not listed here, send me a copy of the output so it can be included. comedi_test tends to create a lot of output. The important information has lines beginning with either I:, W:, or E:, indicating information, warning, or error, respectively. You can grep for this information using the regexp '^.:'. Errors are usually problems that need to be fixed, but are not necessarily significant bugs. Warnings need to be audited by ds to know whether or not they are significant, since comedi_test isn't very smart about some checks. (That's why they're warnings and not errors.) comedilib-0.11.0/testing/insn_read.c0000644000000000000000000000330412416542105014172 00000000000000 #include #include #include #include #include #include #include #include #include #include #include #include "comedi_test.h" int test_insn_read(void) { comedi_insn it; lsampl_t data = 0xffffffff; int ret; int type; printf("rev 1\n"); type = comedi_get_subdevice_type(device,subdevice); memset(&it,0,sizeof(it)); it.subdev = subdevice; it.insn = INSN_READ; it.n = 1; it.chanspec = CR_PACK(0,0,0); it.data = &data; ret = comedi_do_insn(device,&it); if(type==COMEDI_SUBD_UNUSED){ if(ret<0){ if(errno==EIO){ printf("comedi_do_insn: EIO, good\n"); }else{ printf("E: comedi_do_insn: %s\n", strerror(errno)); } }else{ printf("E: comedi_do_insn: returned %d, expected error\n", ret); } }else{ if(ret<0){ printf("E: comedi_do_insn: %s\n",strerror(errno)); }else if(ret==1){ printf("comedi_do_insn returned 1, good\n"); }else{ printf("E: comedi_do_insn returned %d\n",ret); } } return 0; } /* * This function tests reading with n=0. */ int test_insn_read_0(void) { comedi_insn it; lsampl_t data = 0xffffffff; int ret; int type; type = comedi_get_subdevice_type(device,subdevice); if(type==COMEDI_SUBD_UNUSED){ printf("not applicable\n"); return 0; } memset(&it,0,sizeof(it)); it.subdev = subdevice; it.insn = INSN_READ; it.n = 0; it.chanspec = CR_PACK(0,0,0); it.data = &data; ret = comedi_do_insn(device,&it); if(ret<0){ printf("E: comedi_do_insn: %s\n",strerror(errno)); }else if(ret==0){ printf("comedi_do_insn returned 0, good\n"); }else{ printf("E: comedi_do_insn returned %d\n",ret); } return 0; } comedilib-0.11.0/testing/main.c0000644000000000000000000001072612416542105013162 00000000000000/* */ #include #include #include #include #include #include #include #include #include #include #include #include "comedi_test.h" char *filename="/dev/comedi0"; int verbose_flag; comedi_t *device; int subdevice; int channel; int aref; int range; int test_info(void); int test_mode0_read(void); int test_insn_read(void); int test_insn_read_0(void); int test_insn_read_time(void); int test_cmd_no_cmd(void); int test_cmd_probe_src_mask(void); int test_cmd_probe_fast_1chan(void); int test_cmd_read_fast_1chan(void); int test_cmd_write_fast_1chan(void); int test_cmd_logic_bug(void); int test_cmd_fifo_depth_check(void); int test_cmd_start_inttrig(void); int test_mmap(void); int test_read_select(void); int test_cmd_continuous(void); int test_bufconfig(void); #define TEST_NEVER 0 #define TEST_STD 1 struct test_struct{ char *name; int (*do_test)(void); int flags; }; struct test_struct tests[]={ { "info", test_info, TEST_STD }, { "mode0_read", test_mode0_read, TEST_NEVER }, { "insn_read", test_insn_read, TEST_STD }, { "insn_read_0", test_insn_read_0, TEST_STD }, { "insn_read_time", test_insn_read_time, TEST_STD }, { "cmd_no_cmd", test_cmd_no_cmd, TEST_STD }, { "cmd_probe_src_mask", test_cmd_probe_src_mask, TEST_STD }, { "cmd_probe_fast_1chan", test_cmd_probe_fast_1chan, TEST_STD }, { "cmd_read_fast_1chan", test_cmd_read_fast_1chan, TEST_STD }, { "cmd_write_fast_1chan", test_cmd_write_fast_1chan, TEST_STD }, { "cmd_logic_bug", test_cmd_logic_bug, TEST_STD }, { "cmd_fifo_depth_check", test_cmd_fifo_depth_check, TEST_STD }, { "cmd_start_inttrig", test_cmd_start_inttrig, TEST_STD }, { "mmap", test_mmap, TEST_STD }, { "read_select", test_read_select, TEST_STD }, { "cmd_continuous", test_cmd_continuous, TEST_NEVER }, { "bufconfig", test_bufconfig, TEST_STD }, }; static int n_tests = sizeof(tests)/sizeof(tests[0]); int only_subdevice; int verbose; char *only_test; int realtime; static void get_capabilities(unsigned int subd); static void print_device_info(void); void help(int ret) { int i; fprintf(stderr, "comedi_test [options]\n" " --device, -f Use device \n" " --realtime, -r Use real-time interrupts, if available\n" " --subdevice, -s Only test subdevice \n" " --test, -t Only run test \n" " --verbose, -v Be verbose\n" " --help, -h Print this message\n" "Available tests: "); for(i=0;i>16)&0xff, (vers>>8)&0xff,vers&0xff); printf("I: Comedilib version: unknown =)\n"); printf("I: driver name: %s\n",comedi_get_driver_name(device)); printf("I: device name: %s\n",comedi_get_board_name(device)); } comedilib-0.11.0/AUTHORS0000644000000000000000000000152713162717655011501 00000000000000# People who have contributed code/documentation to comedilib (alphabetized by last name) Ian Abbott Terry Barnaby Tobias Blaser Anders Blomdell Herman Bruyninckx John Conner Joseph Timothy Foley Jan Gukelberger Steven Jenkins W. Trevor King Luc Lefebvre Spencer E. Olson Tim Ousley Éric Piel Bernd Porr Alan Woodland [ax_tls.m4] Bean ZAHND comedilib-0.11.0/lib/0000755000000000000000000000000013162722662011244 500000000000000comedilib-0.11.0/lib/Makefile.am0000644000000000000000000000200112416542105013202 00000000000000 lib_LTLIBRARIES = libcomedi.la noinst_HEADERS = calib_lex.h calib_yacc.h libinternal.h CLEANFILES = grammar.output EXTRA_DIST = calib_lex.l calib_yacc.y version_script BUILT_SOURCES = calib_lex.c calib_lex.h calib_yacc.c calib_yacc.h MAINTAINERCLEANFILES = calib_lex.c calib_lex.h calib_yacc.c calib_yacc.h libcomedi_la_SOURCES = \ buffer.c calib.c cmd.c comedi.c data.c dio.c error.c \ filler.c get.c ioctl.c range.c sv.c timed.c timer.c \ calib_lex.c calib_yacc.c insn_config_wrappers.c libcomedi_la_CFLAGS = $(COMEDILIB_CFLAGS) -D_REENTRANT -DLOCALSTATEDIR=\"\$(localstatedir)\" libcomedi_la_LDFLAGS = -soname libcomedi \ $(COMEDILIB_LT_LDFLAGS) \ -Wl,--version-script=$(srcdir)/version_script libcomedi_la_LIBADD = -lm $(srcdir)/calib_yacc.c $(srcdir)/calib_yacc.h: $(srcdir)/calib_yacc.y $(YACC) -d -p calib_yy -o $(srcdir)/calib_yacc.c $< $(srcdir)/calib_lex.c $(srcdir)/calib_lex.h: $(srcdir)/calib_lex.l $(LEX) --header-file=$(srcdir)/calib_lex.h -Pcalib_yy -o$(srcdir)/calib_lex.c $< comedilib-0.11.0/lib/calib.c0000644000000000000000000002255413072744665012421 00000000000000/* lib/calib.c functions for setting calibration Copyright (C) 2003 Frank Mori Hess #include #include #include #include #include #include #include #include #include "libinternal.h" static int set_calibration( comedi_t *dev, const comedi_calibration_t *parsed_file, unsigned int cal_index ); static int check_cal_file( comedi_t *dev, const comedi_calibration_t *parsed_file ) { if( strcmp( comedi_get_driver_name( dev ), parsed_file->driver_name ) ) { COMEDILIB_DEBUG( 3, "driver name does not match '%s' from calibration file\n", parsed_file->driver_name ); return -1; } if( strcmp( comedi_get_board_name( dev ), parsed_file->board_name ) ) { COMEDILIB_DEBUG( 3, "board name does not match '%s' from calibration file\n", parsed_file->board_name ); return -1; } return 0; } static inline int valid_channel( const comedi_calibration_t *parsed_file, unsigned int cal_index, unsigned int channel ) { int num_channels, i; num_channels = parsed_file->settings[ cal_index ].num_channels; if( num_channels == 0 ) return 1; for( i = 0; i < num_channels; i++ ) { if( parsed_file->settings[ cal_index ].channels[ i ] == channel ) return 1; } return 0; } static inline int valid_range( const comedi_calibration_t *parsed_file, unsigned int cal_index, unsigned int range ) { int num_ranges, i; num_ranges = parsed_file->settings[ cal_index ].num_ranges; if( num_ranges == 0 ) return 1; for( i = 0; i < num_ranges; i++ ) { if( parsed_file->settings[ cal_index ].ranges[ i ] == range ) return 1; } return 0; } static inline int valid_aref( const comedi_calibration_t *parsed_file, unsigned int cal_index, unsigned int aref ) { int num_arefs, i; num_arefs = parsed_file->settings[ cal_index ].num_arefs; if( num_arefs == 0 ) return 1; for( i = 0; i < num_arefs; i++ ) { if( parsed_file->settings[ cal_index ].arefs[ i ] == aref ) return 1; } return 0; } static int apply_calibration( comedi_t *dev, const comedi_calibration_t *parsed_file, unsigned int subdev, unsigned int channel, unsigned int range, unsigned int aref ) { int num_cals, i, retval; int found_cal = 0; num_cals = parsed_file->num_settings; for( i = 0; i < num_cals; i++ ) { if( parsed_file->settings[ i ].subdevice != subdev ) continue; if( valid_range( parsed_file, i, range ) == 0 ) continue; if( valid_channel( parsed_file, i, channel ) == 0 ) continue; if( valid_aref( parsed_file, i, aref ) == 0 ) continue; retval = set_calibration( dev, parsed_file, i ); if( retval < 0 ) return retval; found_cal = 1; } if( found_cal == 0 ) { COMEDILIB_DEBUG( 3, "failed to find matching calibration\n" ); return -1; } return 0; } static int set_calibration( comedi_t *dev, const comedi_calibration_t *parsed_file, unsigned int cal_index ) { int i, retval, num_caldacs; num_caldacs = parsed_file->settings[ cal_index ].num_caldacs; COMEDILIB_DEBUG( 4, "num_caldacs %i\n", num_caldacs ); for( i = 0; i < num_caldacs; i++ ) { comedi_caldac_t caldac; caldac = parsed_file->settings[ cal_index ].caldacs[ i ]; COMEDILIB_DEBUG( 4, "subdev %i, ch %i, val %i\n", caldac.subdevice, caldac.channel,caldac.value); retval = comedi_data_write( dev, caldac.subdevice, caldac.channel, 0, 0, caldac.value ); if( retval < 0 ) return retval; } return 0; } EXPORT_ALIAS_DEFAULT(_comedi_apply_parsed_calibration,comedi_apply_parsed_calibration,0.7.20); int _comedi_apply_parsed_calibration( comedi_t *dev, unsigned int subdev, unsigned int channel, unsigned int range, unsigned int aref, const comedi_calibration_t *calibration ) { int retval; if(!valid_dev(dev)) return -1; retval = check_cal_file( dev, calibration ); if( retval < 0 ) return retval; retval = apply_calibration( dev, calibration, subdev, channel, range, aref ); return retval; } /* munge characters in board name that will cause problems with file paths */ static void fixup_board_name( char *name ) { while( ( name = strchr( name, '/' ) ) ) { if( name ) { *name = '-'; name++; } } } EXPORT_ALIAS_DEFAULT(_comedi_get_default_calibration_path,comedi_get_default_calibration_path,0.7.20); char* _comedi_get_default_calibration_path( comedi_t *dev ) { struct stat file_stats; char *file_path; const char *temp; char *board_name; const char *driver_name; int err; if(!valid_dev(dev)) return NULL; if( fstat( comedi_fileno( dev ), &file_stats ) < 0 ) { COMEDILIB_DEBUG( 3, "failed to get file stats of comedi device file\n" ); return NULL; } driver_name = comedi_get_driver_name( dev ); if( driver_name == NULL ) { return NULL; } temp = comedi_get_board_name( dev ); if( temp == NULL ) { return NULL; } board_name = strdup( temp ); fixup_board_name( board_name ); err = asprintf( &file_path, LOCALSTATEDIR "/lib/comedi/calibrations/%s_%s_comedi%li", driver_name, board_name, ( unsigned long ) minor( file_stats.st_rdev ) ); free( board_name ); if( err < 0 ) { return NULL; } return file_path; } EXPORT_ALIAS_DEFAULT(_comedi_apply_calibration,comedi_apply_calibration,0.7.20); int _comedi_apply_calibration( comedi_t *dev, unsigned int subdev, unsigned int channel, unsigned int range, unsigned int aref, const char *cal_file_path ) { char file_path[ 1024 ]; int retval; comedi_calibration_t *parsed_file; if( cal_file_path ) { strncpy( file_path, cal_file_path, sizeof( file_path ) ); }else { char *temp; temp = comedi_get_default_calibration_path( dev ); if( temp == NULL ) return -1; strncpy( file_path, temp, sizeof( file_path ) ); free( temp ); } parsed_file = comedi_parse_calibration_file( file_path ); if( parsed_file == NULL ) { COMEDILIB_DEBUG( 3, "failed to parse calibration file\n" ); return -1; } retval = comedi_apply_parsed_calibration( dev, subdev, channel, range, aref, parsed_file ); comedi_cleanup_calibration( parsed_file ); return retval; } EXPORT_ALIAS_DEFAULT(_comedi_get_hardcal_converter, comedi_get_hardcal_converter, 0.8.0); int _comedi_get_hardcal_converter( comedi_t *dev, unsigned subdevice, unsigned channel, unsigned range, enum comedi_conversion_direction direction, comedi_polynomial_t* polynomial) { comedi_range *range_ptr = comedi_get_range(dev, subdevice, channel, range); lsampl_t maxdata; if(range_ptr == NULL) { return -1; } maxdata = comedi_get_maxdata(dev, subdevice, channel); if(maxdata == 0) { return -1; } polynomial->order = 1; switch(direction) { case COMEDI_TO_PHYSICAL: polynomial->expansion_origin = 0.; polynomial->coefficients[0] = range_ptr->min; polynomial->coefficients[1] = (range_ptr->max - range_ptr->min) / maxdata; break; case COMEDI_FROM_PHYSICAL: polynomial->expansion_origin = range_ptr->min; polynomial->coefficients[0] = 0.; polynomial->coefficients[1] = maxdata / (range_ptr->max - range_ptr->min); break; } return 0; } EXPORT_ALIAS_DEFAULT(_comedi_get_softcal_converter, comedi_get_softcal_converter, 0.8.0); int _comedi_get_softcal_converter( unsigned subdevice, unsigned channel, unsigned range, enum comedi_conversion_direction direction, const comedi_calibration_t *calibration, comedi_polynomial_t* polynomial) { unsigned i; for(i = 0; i < calibration->num_settings; ++i) { if(calibration->settings[i].subdevice != subdevice) continue; if(valid_channel(calibration, i, channel) == 0) continue; if(valid_range(calibration, i, range) == 0) continue; switch(direction) { case COMEDI_TO_PHYSICAL: if(calibration->settings[i].soft_calibration.to_phys == NULL) { continue; } *polynomial = *calibration->settings[i].soft_calibration.to_phys; break; case COMEDI_FROM_PHYSICAL: if(calibration->settings[i].soft_calibration.from_phys == NULL) { continue; } *polynomial = *calibration->settings[i].soft_calibration.from_phys; break; } return 0; } return -1; } static double apply_polynomial(const comedi_polynomial_t *polynomial, double input) { double value = 0.; double term = 1.; unsigned i; assert(polynomial->order < COMEDI_MAX_NUM_POLYNOMIAL_COEFFICIENTS); for(i = 0; i <= polynomial->order; ++i) { value += polynomial->coefficients[i] * term; term *= input - polynomial->expansion_origin; } return value; } EXPORT_ALIAS_DEFAULT(_comedi_to_physical, comedi_to_physical, 0.8.0); double _comedi_to_physical(lsampl_t data, const comedi_polynomial_t *conversion_polynomial) { return apply_polynomial(conversion_polynomial, data); } EXPORT_ALIAS_DEFAULT(_comedi_from_physical, comedi_from_physical, 0.8.0); lsampl_t _comedi_from_physical(double data, const comedi_polynomial_t *conversion_polynomial) { return nearbyint(apply_polynomial(conversion_polynomial, data)); } comedilib-0.11.0/lib/timer.c0000644000000000000000000000654212416542105012450 00000000000000/* lib/timer.c legacy timer crap COMEDILIB - Linux Control and Measurement Device Interface Library Copyright (C) 1997-2001 David A. Schleef This library 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, version 2.1 of the License. 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 #include #include #include "libinternal.h" /* dt282x timer */ static int dt282x_timer(double freq,unsigned int *trigvar,double *actual_freq) { int divider,prescaler; double basefreq=4e6; divider=floor(4e6/(freq)); prescaler=0; while(divider>255){ prescaler++; divider>>=1; basefreq/=2; } if(prescaler==1){ prescaler++; divider>>=1; basefreq/=2; } if(prescaler>=16)return -1; *trigvar=(prescaler<<8)|(255-divider); *actual_freq=basefreq/divider; return 0; } /* dt2814 timer */ static int dt2814_timer(double freq,unsigned int *trigvar,double *actual_freq) { double f; int i; f=1e5; for(i=0;i<8;i++){ if(f-freq32767){ prescaler*=2; divider>>=1; } *trigvar = (prescaler<<16) | divider; *actual_freq=basefreq/(divider*prescaler); return 0; } /* nanosec timer */ static int nanosec_timer(double freq,unsigned int *trigvar,double *actual_freq) { *trigvar=(1e9/freq); *actual_freq=1e9/(*trigvar); return 0; } typedef int (*timerfunc)(double freq,unsigned int *trigvar,double *actual_freq); static timerfunc timer_functions[]={ NULL, dt282x_timer, dt2814_timer, atmio_timer, acl8112_timer, nanosec_timer, }; #define N_TIMERTYPES 6 EXPORT_ALIAS_DEFAULT(_comedi_get_timer,comedi_get_timer,0.7.18); int _comedi_get_timer(comedi_t *it,unsigned int subdev,double freq, unsigned int *trigvar,double *actual_freq) { int timer_type; if(!valid_subd(it,subdev) || !trigvar || !actual_freq) return -1; timer_type=it->subdevices[subdev].timer_type; if(timer_type==0 || timer_type>=N_TIMERTYPES) return -1; return (timer_functions[timer_type])(freq,trigvar,actual_freq); } comedilib-0.11.0/lib/calib_yacc.y0000644000000000000000000003253512565341776013450 00000000000000%{ /* lib/calib_yacc.y code for parsing calibration file, generated by bison Copyright (C) 2003 Frank Mori Hess This library 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, version 2.1 of the License. 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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. */ #define _GNU_SOURCE #include #include "libinternal.h" #include #include #include #define YYERROR_VERBOSE #define LEX_PARAM parse_arg->yyscanner #include "calib_yacc.h" #include "calib_lex.h" enum polynomial_direction { POLYNOMIAL_TO_PHYS, POLYNOMIAL_FROM_PHYS }; struct calib_yyparse_private { yyscan_t yyscanner; comedi_calibration_t *parsed_file; comedi_caldac_t caldac; int cal_index; unsigned num_coefficients; comedi_polynomial_t polynomial; }; YY_DECL; static void free_calibration_setting( comedi_calibration_setting_t *setting ) { if( setting->channels ); { free( setting->channels ); setting->channels = NULL; setting->num_channels = 0; } if( setting->ranges ); { free( setting->ranges ); setting->ranges = NULL; setting->num_ranges = 0; } setting->num_arefs = 0; if( setting->caldacs ); { free( setting->caldacs ); setting->caldacs = NULL; setting->num_caldacs = 0; } if(setting->soft_calibration.to_phys) { free(setting->soft_calibration.to_phys); setting->soft_calibration.to_phys = NULL; } if(setting->soft_calibration.from_phys) { free(setting->soft_calibration.from_phys); setting->soft_calibration.from_phys = NULL; } } static void free_settings( comedi_calibration_t *file_contents ) { int i; if( file_contents->settings == NULL ) return; for( i = 0; i < file_contents->num_settings; i++ ) { free_calibration_setting( &file_contents->settings[ i ] ); } free(file_contents->settings); file_contents->settings = NULL; } static int add_calibration_setting( comedi_calibration_t *file_contents ) { comedi_calibration_setting_t *temp; temp = realloc( file_contents->settings, ( file_contents->num_settings + 1 ) * sizeof( comedi_calibration_setting_t ) ); if( temp == NULL ) { libc_error(); fprintf(stderr, "%s: realloc failed to allocate memory.\n", __FUNCTION__); return -1; } file_contents->settings = temp; memset( &file_contents->settings[ file_contents->num_settings ], 0, sizeof( comedi_calibration_setting_t ) ); file_contents->num_settings++; return 0; } static comedi_calibration_setting_t* current_setting( calib_yyparse_private_t *priv ) { int retval; while( priv->cal_index >= priv->parsed_file->num_settings ) { retval = add_calibration_setting( priv->parsed_file ); if( retval < 0 ) return NULL; } return &priv->parsed_file->settings[ priv->cal_index ]; } static int add_channel( calib_yyparse_private_t *priv, int channel ) { unsigned *temp; comedi_calibration_setting_t *setting; setting = current_setting( priv ); if( setting == NULL ) return -1; temp = realloc( setting->channels, ( setting->num_channels + 1 ) * sizeof(unsigned) ); if( temp == NULL ) { libc_error(); fprintf(stderr, "%s: realloc failed to allocate memory.\n", __FUNCTION__); return -1; } setting->channels = temp; setting->channels[ setting->num_channels++ ] = channel; return 0; } static int add_range( calib_yyparse_private_t *priv, int range ) { unsigned *temp; comedi_calibration_setting_t *setting; setting = current_setting( priv ); if( setting == NULL ) return -1; temp = realloc( setting->ranges, ( setting->num_ranges + 1 ) * sizeof(unsigned) ); if( temp == NULL ) { libc_error(); fprintf(stderr, "%s: realloc failed to allocate memory.\n", __FUNCTION__); return -1; } setting->ranges = temp; setting->ranges[ setting->num_ranges++ ] = range; return 0; } static int add_aref( calib_yyparse_private_t *priv, int aref ) { comedi_calibration_setting_t *setting; setting = current_setting( priv ); if( setting == NULL ) return -1; if( setting->num_arefs >= sizeof( setting->arefs ) / sizeof( setting->arefs[ 0 ] ) ) return -1; setting->arefs[ setting->num_arefs++ ] = aref; return 0; } static int add_caldac( calib_yyparse_private_t *priv, comedi_caldac_t caldac ) { comedi_caldac_t *temp; comedi_calibration_setting_t *setting; setting = current_setting( priv ); if( setting == NULL ) return -1; temp = realloc( setting->caldacs, ( setting->num_caldacs + 1 ) * sizeof( comedi_caldac_t ) ); if( temp == NULL ) { libc_error(); fprintf(stderr, "%s: realloc failed to allocate memory.\n", __FUNCTION__); return -1; } setting->caldacs = temp; setting->caldacs[ setting->num_caldacs++ ] = caldac; return 0; } static int add_polynomial(calib_yyparse_private_t *priv, enum polynomial_direction polynomial_direction) { comedi_calibration_setting_t *setting; setting = current_setting( priv ); if( setting == NULL ) { fprintf(stderr, "%s: current_setting returned NULL\n", __FUNCTION__); return -1; } if(priv->num_coefficients < 1) { fprintf(stderr, "%s: polynomial has no coefficients.\n", __FUNCTION__); return -1; } if(polynomial_direction == POLYNOMIAL_TO_PHYS) { if(setting->soft_calibration.to_phys) return -1; setting->soft_calibration.to_phys = malloc(sizeof(comedi_polynomial_t)); if(!setting->soft_calibration.to_phys){ libc_error(); fprintf(stderr, "%s: malloc failed to allocate memory.\n", __FUNCTION__); return -1; } *setting->soft_calibration.to_phys = priv->polynomial; }else { if(setting->soft_calibration.from_phys) return -1; setting->soft_calibration.from_phys = malloc(sizeof(comedi_polynomial_t)); if(!setting->soft_calibration.from_phys){ libc_error(); fprintf(stderr, "%s: malloc failed to allocate memory.\n", __FUNCTION__); return -1; } *setting->soft_calibration.from_phys = priv->polynomial; } return 0; } static int add_polynomial_coefficient(calib_yyparse_private_t *priv, double coefficient) { if(priv->num_coefficients >= COMEDI_MAX_NUM_POLYNOMIAL_COEFFICIENTS) { fprintf(stderr, "too many coefficients for polynomial,\n"); fprintf(stderr, "num_coefficients=%i, max is %i .\n", priv->num_coefficients, COMEDI_MAX_NUM_POLYNOMIAL_COEFFICIENTS); return -1; } priv->polynomial.order = priv->num_coefficients; priv->polynomial.coefficients[priv->num_coefficients++] = coefficient; return 0; } static comedi_calibration_t* alloc_calib_parse( void ) { comedi_calibration_t *file_contents; file_contents = malloc( sizeof( *file_contents ) ); if( file_contents == NULL ) return file_contents; memset( file_contents, 0, sizeof( *file_contents ) ); return file_contents; } EXPORT_ALIAS_DEFAULT(_comedi_cleanup_calibration,comedi_cleanup_calibration,0.7.20); extern void _comedi_cleanup_calibration( comedi_calibration_t *file_contents ) { if(file_contents == NULL) return; if( file_contents->driver_name ) { free( file_contents->driver_name ); file_contents->driver_name = NULL; } if( file_contents->board_name ) { free( file_contents->board_name ); file_contents->board_name = NULL; } free_settings( file_contents ); free( file_contents ); } static comedi_polynomial_t* alloc_inverse_linear_polynomial(const comedi_polynomial_t *polynomial) { comedi_polynomial_t *inverse; if(polynomial->order != 1) return NULL; inverse = malloc(sizeof(comedi_polynomial_t)); if(!inverse){ libc_error(); return NULL; } memset(inverse, 0, sizeof(comedi_polynomial_t)); inverse->order = 1; inverse->expansion_origin = polynomial->coefficients[0]; inverse->coefficients[0] = polynomial->expansion_origin; inverse->coefficients[1] = 1. / polynomial->coefficients[1]; if(isfinite(inverse->coefficients[1]) == 0) { free(inverse); return NULL; } return inverse; } static void fill_inverse_linear_polynomials(comedi_calibration_t *calibration) { unsigned i; for(i = 0; i < calibration->num_settings; ++i) { if(calibration->settings[i].soft_calibration.to_phys) { if(calibration->settings[i].soft_calibration.from_phys == NULL) { calibration->settings[i].soft_calibration.from_phys = alloc_inverse_linear_polynomial(calibration->settings[i].soft_calibration.to_phys); } }else if(calibration->settings[i].soft_calibration.from_phys) { calibration->settings[i].soft_calibration.to_phys = alloc_inverse_linear_polynomial(calibration->settings[i].soft_calibration.from_phys); } } } static void yyerror(calib_yyparse_private_t *parse_arg, const char *s) { fprintf(stderr, "%s\n", s); } %} %pure-parser %parse-param {calib_yyparse_private_t *parse_arg} %lex-param {LEX_PARAM} %union { int ival; double dval; char *sval; } %token T_DRIVER_NAME T_BOARD_NAME T_CALIBRATIONS T_SUBDEVICE T_CHANNELS %token T_RANGES T_AREFS T_CALDACS T_CHANNEL T_VALUE T_NUMBER T_STRING %token T_COEFFICIENTS T_EXPANSION_ORIGIN T_SOFTCAL_TO_PHYS T_SOFTCAL_FROM_PHYS %token T_ASSIGN T_FLOAT %type T_NUMBER %type T_STRING %type T_FLOAT %% input: '{' hash '}' | error { fprintf(stderr, "input error on line %i\n", calib_yyget_lineno(parse_arg->yyscanner)); // fprintf(stderr, "input error on line %i\n", @1.first_line ); YYABORT; } ; hash: /* empty */ | hash_element | hash_element ',' hash ; hash_element: T_DRIVER_NAME T_ASSIGN T_STRING { if( parse_arg->parsed_file->driver_name != NULL ) YYABORT; parse_arg->parsed_file->driver_name = strdup( $3 ); } | T_BOARD_NAME T_ASSIGN T_STRING { if( parse_arg->parsed_file->board_name != NULL ) YYABORT; parse_arg->parsed_file->board_name = strdup( $3 ); } | T_CALIBRATIONS T_ASSIGN '[' calibrations_array ']' ; calibrations_array: /* empty */ | '{' calibration_setting '}' | '{' calibration_setting '}' ',' calibrations_array ; calibration_setting: /* empty */ { parse_arg->cal_index++; } | calibration_setting_element { parse_arg->cal_index++; } | calibration_setting_element ',' calibration_setting ; calibration_setting_element: T_SUBDEVICE T_ASSIGN T_NUMBER { comedi_calibration_setting_t *setting; setting = current_setting( parse_arg ); if( setting == NULL ) YYABORT; setting->subdevice = $3; } | T_CHANNELS T_ASSIGN '[' channels_array ']' | T_RANGES T_ASSIGN '[' ranges_array ']' | T_AREFS T_ASSIGN '[' arefs_array ']' | T_CALDACS T_ASSIGN '[' caldacs_array ']' | T_SOFTCAL_TO_PHYS T_ASSIGN '{' polynomial '}' { if(add_polynomial(parse_arg, POLYNOMIAL_TO_PHYS) < 0) YYERROR; parse_arg->num_coefficients = 0; } | T_SOFTCAL_FROM_PHYS T_ASSIGN '{' polynomial '}' { if(add_polynomial(parse_arg, POLYNOMIAL_FROM_PHYS) < 0) YYERROR; parse_arg->num_coefficients = 0; } ; channels_array: /* empty */ | channel | channel ',' channels_array ; channel: T_NUMBER { if(add_channel( parse_arg, $1 ) < 0) YYERROR; } ; ranges_array: /* empty */ | range | range ',' ranges_array ; range: T_NUMBER { if(add_range( parse_arg, $1 ) < 0) YYERROR; } ; arefs_array: /* empty */ | aref | aref ',' arefs_array ; aref: T_NUMBER { if(add_aref( parse_arg, $1 ) < 0) YYERROR; } ; caldacs_array: /* empty */ | '{' caldac '}' | '{' caldac '}' ',' caldacs_array ; caldac: /* empty */ { if(add_caldac( parse_arg, parse_arg->caldac ) < 0) YYERROR; } | caldac_element { if(add_caldac( parse_arg, parse_arg->caldac ) < 0) YYERROR; } | caldac_element ',' caldac ; caldac_element: T_SUBDEVICE T_ASSIGN T_NUMBER { parse_arg->caldac.subdevice = $3; } | T_CHANNEL T_ASSIGN T_NUMBER { parse_arg->caldac.channel = $3; } | T_VALUE T_ASSIGN T_NUMBER { parse_arg->caldac.value = $3; } ; polynomial: /* empty */ | polynomial_element | polynomial_element ',' polynomial ; polynomial_element: T_COEFFICIENTS T_ASSIGN '[' coefficient_array ']' | T_EXPANSION_ORIGIN T_ASSIGN expansion_origin ; coefficient_array: /* empty */ | coefficient | coefficient ',' coefficient_array ; coefficient: T_FLOAT { if(add_polynomial_coefficient(parse_arg, $1) < 0) YYERROR; } | T_NUMBER { if(add_polynomial_coefficient(parse_arg, $1) < 0) YYERROR; } ; expansion_origin: T_FLOAT { parse_arg->polynomial.expansion_origin = $1; } | T_NUMBER { parse_arg->polynomial.expansion_origin = $1; } ; %% EXPORT_ALIAS_DEFAULT(_comedi_parse_calibration_file,comedi_parse_calibration_file,0.7.20); extern comedi_calibration_t* _comedi_parse_calibration_file( const char *cal_file_path ) { calib_yyparse_private_t priv; FILE *file; if( cal_file_path == NULL ) return NULL; memset(&priv, 0, sizeof(calib_yyparse_private_t)); priv.parsed_file = alloc_calib_parse(); if( priv.parsed_file == NULL ) return NULL; file = fopen( cal_file_path, "r" ); if( file == NULL ) { COMEDILIB_DEBUG( 3, "failed to open file\n" ); return NULL; } calib_yylex_init(&priv.yyscanner); calib_yyrestart(file, priv.yyscanner); if( calib_yyparse( &priv ) ) { comedi_cleanup_calibration( priv.parsed_file ); priv.parsed_file = NULL; } calib_yylex_destroy(priv.yyscanner); fclose( file ); if( priv.parsed_file ) { fill_inverse_linear_polynomials(priv.parsed_file); } return priv.parsed_file; } comedilib-0.11.0/lib/get.c0000644000000000000000000001234312416542105012103 00000000000000/* lib/get.c functions to return information about comedi devices COMEDILIB - Linux Control and Measurement Device Interface Library Copyright (C) 1997-2001 David A. Schleef This library 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, version 2.1 of the License. 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 #include #include #include "libinternal.h" EXPORT_ALIAS_DEFAULT(_comedi_get_n_subdevices,comedi_get_n_subdevices,0.7.18); int _comedi_get_n_subdevices(comedi_t *it) { if(!valid_dev(it)) return -1; return it->n_subdevices; } EXPORT_ALIAS_DEFAULT(_comedi_get_version_code,comedi_get_version_code,0.7.18); int _comedi_get_version_code(comedi_t *it) { if(!valid_dev(it)) return -1; return it->devinfo.version_code; } EXPORT_ALIAS_DEFAULT(_comedi_get_driver_name,comedi_get_driver_name,0.7.18); const char* _comedi_get_driver_name(comedi_t *it) { if(!valid_dev(it)) return NULL; return it->devinfo.driver_name; } EXPORT_ALIAS_DEFAULT(_comedi_get_board_name,comedi_get_board_name,0.7.18); const char* _comedi_get_board_name(comedi_t *it) { if(!valid_dev(it)) return NULL; return it->devinfo.board_name; } EXPORT_ALIAS_VER(_comedi_get_subdevice_flags_old, comedi_get_subdevice_flags,0.7.18); int _comedi_get_subdevice_flags_old(comedi_t *it,unsigned int subd) { if(!valid_subd(it,subd)) return 0; return it->subdevices[subd].subd_flags; } EXPORT_ALIAS_DEFAULT(_comedi_get_subdevice_flags,comedi_get_subdevice_flags,0.8.0); int _comedi_get_subdevice_flags(comedi_t *it,unsigned int subd) { comedi_subdinfo *s; int flags; int ret; if(!valid_subd(it,subd)) return -1; s = calloc(it->n_subdevices, sizeof(comedi_subdinfo)); if(s == NULL) { libc_error(); return -1; } ret = comedi_ioctl(it->fd, COMEDI_SUBDINFO, s); if(ret < 0) { free(s); return -1; } flags = s[subd].subd_flags; free(s); return flags; } EXPORT_ALIAS_DEFAULT(_comedi_get_subdevice_type,comedi_get_subdevice_type,0.7.18); int _comedi_get_subdevice_type(comedi_t *it,unsigned int subd) { if(!valid_subd(it,subd)) return -1; return it->subdevices[subd].type; } EXPORT_ALIAS_DEFAULT(_comedi_find_subdevice_by_type,comedi_find_subdevice_by_type,0.7.18); int _comedi_find_subdevice_by_type(comedi_t *it,int type,unsigned int subd) { if(!valid_subd(it,subd)) return -1; for(;subdn_subdevices;subd++){ if(it->subdevices[subd].type==type) return subd; } return -1; } EXPORT_ALIAS_DEFAULT(_comedi_get_read_subdevice,comedi_get_read_subdevice,0.7.19); int _comedi_get_read_subdevice(comedi_t *dev) { if(!valid_dev(dev)) return -1; return dev->devinfo.read_subdevice; } EXPORT_ALIAS_DEFAULT(_comedi_get_write_subdevice,comedi_get_write_subdevice,0.7.19); int _comedi_get_write_subdevice(comedi_t *dev) { if(!valid_dev(dev)) return -1; return dev->devinfo.write_subdevice; } EXPORT_ALIAS_DEFAULT(_comedi_get_n_channels,comedi_get_n_channels,0.7.18); int _comedi_get_n_channels(comedi_t *it,unsigned int subd) { if(!valid_subd(it,subd)) return -1; return it->subdevices[subd].n_chan; } /* */ EXPORT_ALIAS_DEFAULT(_comedi_get_maxdata,comedi_get_maxdata,0.7.18); lsampl_t _comedi_get_maxdata(comedi_t *it,unsigned int subdevice,unsigned int chan) { if(!valid_chan(it,subdevice,chan)) return 0; if(it->subdevices[subdevice].maxdata_list) return it->subdevices[subdevice].maxdata_list[chan]; return it->subdevices[subdevice].maxdata; } EXPORT_ALIAS_DEFAULT(_comedi_maxdata_is_chan_specific,comedi_maxdata_is_chan_specific,0.7.18); int _comedi_maxdata_is_chan_specific(comedi_t *it,unsigned int subdevice) { if(!valid_subd(it,subdevice)) return -1; if(it->subdevices[subdevice].maxdata_list) return 1; return 0; } EXPORT_ALIAS_DEFAULT(_comedi_get_rangetype,comedi_get_rangetype,0.7.18); int _comedi_get_rangetype(comedi_t *it,unsigned int subdevice,unsigned int chan) { if(!valid_chan(it,subdevice,chan)) return -1; if(it->subdevices[subdevice].range_type_list) return it->subdevices[subdevice].range_type_list[chan]; return it->subdevices[subdevice].range_type; } EXPORT_ALIAS_DEFAULT(_comedi_get_range,comedi_get_range,0.7.18); comedi_range * _comedi_get_range(comedi_t *it,unsigned int subdevice,unsigned int chan,unsigned int range) { int range_type; if(!valid_chan(it,subdevice,chan)) return NULL; range_type=comedi_get_rangetype(it,subdevice,chan); if(range>=RANGE_LENGTH(range_type)) return NULL; if(it->subdevices[subdevice].rangeinfo_list) return it->subdevices[subdevice].rangeinfo_list[chan]+range; return it->subdevices[subdevice].rangeinfo+range; } comedilib-0.11.0/lib/range.c0000644000000000000000000001167112566643440012435 00000000000000/* lib/range.c functions to manipulate physical unit conversion COMEDILIB - Linux Control and Measurement Device Interface Library Copyright (C) 1997-2001 David A. Schleef This library 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, version 2.1 of the License. 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 __USE_GNU #include #include #include #include #include #include #include #include #include #include "libinternal.h" /* sometimes we can't find a definition of NAN */ #ifndef NAN #define NAN \ (__extension__ ((union { unsigned char __c[8]; \ double __d; }) \ { { 0, 0, 0, 0, 0, 0, 0xf8, 0x7f } }).__d) #endif static enum comedi_oor_behavior comedi_oor_is_nan = COMEDI_OOR_NAN; EXPORT_ALIAS_DEFAULT(_comedi_set_global_oor_behavior,comedi_set_global_oor_behavior,0.7.18); enum comedi_oor_behavior _comedi_set_global_oor_behavior( enum comedi_oor_behavior behavior) { int old_behavior=comedi_oor_is_nan; comedi_oor_is_nan=behavior; return old_behavior; } EXPORT_ALIAS_DEFAULT(_comedi_to_phys,comedi_to_phys,0.7.18); double _comedi_to_phys(lsampl_t data,comedi_range *rng,lsampl_t maxdata) { double x; if(!rng)return NAN; if(!maxdata)return NAN; if(comedi_oor_is_nan==COMEDI_OOR_NAN && (data==0 || data>=maxdata)) return NAN; x=data; x/=maxdata; x*=(rng->max-rng->min); x+=rng->min; return x; } EXPORT_ALIAS_DEFAULT(_comedi_from_phys,comedi_from_phys,0.7.18); lsampl_t _comedi_from_phys(double data,comedi_range *rng,lsampl_t maxdata) { double s; if(!rng)return 0; if(!maxdata)return 0; s=(data-rng->min)/(rng->max-rng->min)*maxdata; if(s<0)return 0; if(s>maxdata)return maxdata; return (lsampl_t)(floor(s+0.5)); } EXPORT_ALIAS_DEFAULT(_comedi_find_range,comedi_find_range,0.7.18); int _comedi_find_range(comedi_t *it,unsigned int subd,unsigned int chan,unsigned int unit,double min,double max) { unsigned int range_type; int best; comedi_range *range_ptr,*best_ptr; int i; if(!valid_chan(it,subd,chan))return -1; range_type=comedi_get_rangetype(it,subd,chan); best=-1; best_ptr=NULL; for(i=0;iunit==unit && range_ptr->min<=min && range_ptr->max>=max){ if(best<0 || (range_ptr->max-range_ptr->min) < (best_ptr->max-best_ptr->min)){ best=i; best_ptr=range_ptr; } } } return best; } EXPORT_ALIAS_DEFAULT(_comedi_get_n_ranges,comedi_get_n_ranges,0.7.18); int _comedi_get_n_ranges(comedi_t *it,unsigned int subd,unsigned int chan) { unsigned int range_type; if(!valid_chan(it,subd,chan))return -1; range_type=comedi_get_rangetype(it,subd,chan); return RANGE_LENGTH(range_type); } EXPORT_ALIAS_DEFAULT(_comedi_range_is_chan_specific,comedi_range_is_chan_specific,0.7.18); int _comedi_range_is_chan_specific(comedi_t *it,unsigned int subd) { if(!valid_subd(it,subd)) return -1; return (it->subdevices[subd].subd_flags&SDF_RANGETYPE)?1:0; } EXPORT_ALIAS_DEFAULT(_comedi_sampl_to_phys,comedi_sampl_to_phys,0.7.18); int _comedi_sampl_to_phys(double *dest, int dst_stride, sampl_t *src, int src_stride, comedi_range *rng, lsampl_t maxdata, int n) { int oor = 0; int i; double mult; if(!rng)return -1; if(!maxdata)return -1; mult = (rng->max-rng->min)/maxdata; if(comedi_oor_is_nan==COMEDI_OOR_NAN){ for(i=0;i=maxdata){ oor++; *dest=NAN; }else{ *dest = rng->min + mult*(*src); } dest = ((void *)dest) + dst_stride; src = ((void *)src) + src_stride; } }else{ for(i=0;i=maxdata){ oor++; } *dest = rng->min + mult*(*src); dest = ((void *)dest) + dst_stride; src = ((void *)src) + src_stride; } } return oor; } EXPORT_ALIAS_DEFAULT(_comedi_sampl_from_phys,comedi_sampl_from_phys,0.7.18); int _comedi_sampl_from_phys(sampl_t *dest,int dst_stride,double *src, int src_stride, comedi_range *rng, lsampl_t maxdata, int n) { int oor = 0; double mult; int i; if(!rng)return -1; if(!maxdata)return -1; mult = (maxdata+1)/(rng->max-rng->min); for(i=0;imin); if(*srcmin){ *dest=0; oor++; } if(*src>rng->min){ *dest=maxdata; oor++; } dest = ((void *)dest) + dst_stride; src = ((void *)src) + src_stride; } return oor; } comedilib-0.11.0/lib/buffer.c0000644000000000000000000001365712715406005012606 00000000000000/* lib/buffer.c functions for manipulating buffers COMEDILIB - Linux Control and Measurement Device Interface Library Copyright (C) 1997-2001 David A. Schleef This library 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, version 2.1 of the License. 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 "libinternal.h" #include EXPORT_ALIAS_DEFAULT(_comedi_set_buffer_size,comedi_set_buffer_size,0.7.18); int _comedi_set_buffer_size(comedi_t *it, unsigned int subdev, unsigned int size) { int ret; comedi_bufconfig bc; if(!valid_subd(it,subdev)) return -1; memset(&bc, 0, sizeof(bc)); bc.subdevice = subdev; bc.size = size; ret = comedi_ioctl(it->fd, COMEDI_BUFCONFIG, &bc); if(ret < 0) return ret; return bc.size; } EXPORT_ALIAS_DEFAULT(_comedi_set_max_buffer_size,comedi_set_max_buffer_size,0.7.18); int _comedi_set_max_buffer_size(comedi_t *it, unsigned int subdev, unsigned int max_size) { int ret; comedi_bufconfig bc; if(!valid_subd(it,subdev)) return -1; memset(&bc, 0, sizeof(bc)); bc.subdevice = subdev; bc.maximum_size = max_size; ret = comedi_ioctl(it->fd, COMEDI_BUFCONFIG, &bc); if(ret < 0) return ret; return bc.maximum_size; } EXPORT_ALIAS_DEFAULT(_comedi_get_max_buffer_size,comedi_get_max_buffer_size,0.7.18); int _comedi_get_max_buffer_size(comedi_t *it, unsigned int subdevice) { return comedi_set_max_buffer_size(it, subdevice, 0); } EXPORT_ALIAS_DEFAULT(_comedi_get_buffer_size,comedi_get_buffer_size,0.7.18); int _comedi_get_buffer_size(comedi_t *it, unsigned int subdev) { return comedi_set_buffer_size(it, subdev, 0); } EXPORT_ALIAS_DEFAULT(_comedi_get_buffer_contents,comedi_get_buffer_contents,0.7.18); int _comedi_get_buffer_contents(comedi_t *it, unsigned int subdev) { int ret; comedi_bufinfo bi; if(!valid_subd(it,subdev)) return -1; memset(&bi, 0, sizeof(bi)); bi.subdevice = subdev; ret = comedi_ioctl(it->fd, COMEDI_BUFINFO, &bi); if(ret < 0) { if(__comedi_errno == EPIPE)__comedi_errno = EBUF_OVR; return ret; } return bi.buf_write_count - bi.buf_read_count; } EXPORT_ALIAS_DEFAULT(_comedi_mark_buffer_read,comedi_mark_buffer_read,0.7.18); int _comedi_mark_buffer_read(comedi_t *it, unsigned int subdev, unsigned int bytes) { int ret; comedi_bufinfo bi; if(!valid_subd(it,subdev)) return -1; memset(&bi, 0, sizeof(bi)); bi.subdevice = subdev; bi.bytes_read = bytes; ret = comedi_ioctl(it->fd, COMEDI_BUFINFO, &bi); if(ret < 0) { if(__comedi_errno == EPIPE)__comedi_errno = EBUF_OVR; return -1; } return bi.bytes_read; } EXPORT_ALIAS_DEFAULT(_comedi_mark_buffer_written,comedi_mark_buffer_written,0.8.0); int _comedi_mark_buffer_written(comedi_t *it, unsigned int subdev, unsigned int bytes) { int ret; comedi_bufinfo bi; if(!valid_subd(it,subdev)) return -1; memset(&bi, 0, sizeof(bi)); bi.subdevice = subdev; bi.bytes_written = bytes; ret = comedi_ioctl(it->fd, COMEDI_BUFINFO, &bi); if(ret < 0) { if(__comedi_errno == EPIPE)__comedi_errno = EBUF_UNDR; return -1; } return bi.bytes_written; } EXPORT_ALIAS_DEFAULT(_comedi_get_buffer_read_offset,comedi_get_buffer_read_offset,0.11.0); int _comedi_get_buffer_read_offset(comedi_t *it, unsigned int subdev) { int ret; comedi_bufinfo bi; if(!valid_subd(it,subdev)) return -1; memset(&bi, 0, sizeof(bi)); bi.subdevice = subdev; ret = comedi_ioctl(it->fd, COMEDI_BUFINFO, &bi); if(ret < 0) return ret; return bi.buf_read_ptr; } /* * Keep this for backwards compatibility as a synonym of * comedi_get_buffer_read_offset(). * TODO: mark this as deprecated. */ EXPORT_ALIAS_DEFAULT(_comedi_get_buffer_offset,comedi_get_buffer_offset,0.7.18); int _comedi_get_buffer_offset(comedi_t *it, unsigned int subdev) { return comedi_get_buffer_read_offset(it, subdev); } EXPORT_ALIAS_DEFAULT(_comedi_get_buffer_write_offset,comedi_get_buffer_write_offset,0.11.0); int _comedi_get_buffer_write_offset(comedi_t *it, unsigned int subdev) { int ret; comedi_bufinfo bi; if(!valid_subd(it,subdev)) return -1; memset(&bi, 0, sizeof(bi)); bi.subdevice = subdev; ret = comedi_ioctl(it->fd, COMEDI_BUFINFO, &bi); if(ret < 0) return ret; return bi.buf_write_ptr; } EXPORT_ALIAS_DEFAULT(_comedi_get_buffer_read_count,comedi_get_buffer_read_count,0.11.0); int _comedi_get_buffer_read_count(comedi_t *it, unsigned int subdev, unsigned int *read_count) { int ret; comedi_bufinfo bi; *read_count = 0; if(!valid_subd(it,subdev)) return -1; memset(&bi, 0, sizeof(bi)); bi.subdevice = subdev; ret = comedi_ioctl(it->fd, COMEDI_BUFINFO, &bi); if(ret < 0) return ret; *read_count = bi.buf_read_count; return 0; } EXPORT_ALIAS_DEFAULT(_comedi_get_buffer_write_count,comedi_get_buffer_write_count,0.11.0); int _comedi_get_buffer_write_count(comedi_t *it, unsigned int subdev, unsigned int *write_count) { int ret; comedi_bufinfo bi; *write_count = 0; if(!valid_subd(it,subdev)) return -1; memset(&bi, 0, sizeof(bi)); bi.subdevice = subdev; ret = comedi_ioctl(it->fd, COMEDI_BUFINFO, &bi); if(ret < 0) return ret; *write_count = bi.buf_write_count; return 0; } /* * Keep _comedi_get_front_count for backwards compatibility. * It is not in "comedilib.h" and is not documented. */ EXPORT_ALIAS_DEFAULT(_comedi_get_front_count,comedi_get_front_count,0.7.18); int _comedi_get_front_count(comedi_t *it, unsigned int subdev) { unsigned int write_count; int ret; ret = _comedi_get_buffer_write_count(it, subdev, &write_count); if (ret < 0) return ret; return write_count; } comedilib-0.11.0/lib/calib_lex.l0000644000000000000000000000434712416542105013264 00000000000000%option noyywrap %option nounput %option yylineno %option reentrant %{ /* lib/calib_lex.l code for parsing calibration file, generated by flex Copyright (C) 2003 Frank Mori Hess This library 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, version 2.1 of the License. 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 "libinternal.h" #include "calib_yacc.h" #define YY_NO_INPUT %} %x COMMENT %x STRING %% \n "#" { BEGIN(COMMENT); } \n {BEGIN(INITIAL); } . \" { BEGIN(STRING); } [^\"]*\" { if(strlen(calib_yyget_text(yyscanner)) > 0) calib_yyget_text(yyscanner)[strlen(calib_yyget_text(yyscanner)) - 1] = 0; calib_lvalp->sval = calib_yyget_text(yyscanner); BEGIN(INITIAL); return ( T_STRING ); } driver_name { return ( T_DRIVER_NAME ); } board_name { return ( T_BOARD_NAME ); } calibrations { return ( T_CALIBRATIONS ); } subdevice { return ( T_SUBDEVICE); } channels { return (T_CHANNELS); } ranges { return ( T_RANGES ); } arefs { return ( T_AREFS ); } caldacs { return ( T_CALDACS ); } channel { return ( T_CHANNEL ); } value { return ( T_VALUE ); } coefficients {return (T_COEFFICIENTS);} expansion_origin {return (T_EXPANSION_ORIGIN);} softcal_to_phys {return T_SOFTCAL_TO_PHYS;} softcal_from_phys {return T_SOFTCAL_FROM_PHYS;} => { return ( T_ASSIGN ); }; [+-]?(0[xX])?[0-9a-fA-F]+ {calib_lvalp->ival = strtol(calib_yyget_text(yyscanner), NULL, 0); return( T_NUMBER ); } [+-]?(([0-9]+\.?[0-9]*)|([0-9]*\.?[0-9]+))([eE][+-]?[0-9]+)? { calib_lvalp->dval = strtod(calib_yyget_text(yyscanner), 0); return( T_FLOAT ); } [ \t] . {return(calib_yyget_text(yyscanner)[0]);} %% comedilib-0.11.0/lib/version_script0000644000000000000000000000543312715406005014156 00000000000000 v0.7.18 { global: comedi_cancel; comedi_close; comedi_command_test; comedi_command; comedi_data_read; comedi_data_read_n; comedi_data_write; comedi_do_insn; comedi_do_insnlist; comedi_dio_bitfield; comedi_dio_config; comedi_dio_read; comedi_dio_write; comedi_errno; comedi_fileno; comedi_find_range; comedi_find_subdevice_by_type; comedi_from_phys; comedi_get_front_count; comedi_get_board_name; comedi_get_buffer_contents; comedi_get_buffer_offset; comedi_get_buffer_size; comedi_get_cmd_generic_timed; comedi_get_cmd_src_mask; comedi_get_driver_name; comedi_get_maxdata; comedi_get_max_buffer_size; comedi_get_n_channels; comedi_get_n_ranges; comedi_get_n_subdevices; comedi_get_range; comedi_get_rangetype; comedi_get_subdevice_flags; comedi_get_subdevice_type; comedi_get_timer; comedi_get_version_code; comedi_set_buffer_size; comedi_set_max_buffer_size; comedi_lock; comedi_loglevel; comedi_mark_buffer_read; comedi_maxdata_is_chan_specific; comedi_open; comedi_perror; comedi_poll; comedi_range_is_chan_specific; comedi_sampl_from_phys; comedi_sampl_to_phys; comedi_set_global_oor_behavior; comedi_strerror; comedi_sv_init; comedi_sv_measure; comedi_sv_update; comedi_timed_1chan; comedi_to_phys; comedi_trigger; comedi_unlock; local: *; }; v0.7.19 { global: comedi_data_read_delayed; comedi_data_read_hint; comedi_get_read_subdevice; comedi_get_write_subdevice; } v0.7.18; v0.7.20 { global: comedi_apply_calibration; comedi_cleanup_calibration; comedi_get_default_calibration_path; comedi_apply_parsed_calibration; comedi_parse_calibration_file; } v0.7.19; v0.8.0 { global: comedi_from_physical; comedi_dio_bitfield2; comedi_dio_get_config; comedi_get_hardcal_converter; comedi_get_softcal_converter; comedi_get_subdevice_flags; comedi_mark_buffer_written; comedi_to_physical; } v0.7.20; v0.9.0 { global: comedi_get_cmd_generic_timed; comedi_reset; comedi_arm; comedi_get_clock_source; comedi_get_gate_source; comedi_get_routing; comedi_set_counter_mode; comedi_set_clock_source; comedi_set_filter; comedi_set_gate_source; comedi_internal_trigger; comedi_set_other_source; comedi_set_routing; comedi_get_hardware_buffer_size; } v0.8.0; v0.10.0 { global: comedi_get_clock_source; comedi_set_clock_source; } v0.9.0; v0.11.0 { global: comedi_arm_channel; comedi_disarm; comedi_disarm_channel; comedi_reset_channel; comedi_digital_trigger_disable; comedi_digital_trigger_enable_edges; comedi_digital_trigger_enable_levels; comedi_set_read_subdevice; comedi_set_write_subdevice; comedi_get_buffer_read_offset; comedi_get_buffer_write_offset; comedi_get_buffer_read_count; comedi_get_buffer_write_count; } v0.10.0; comedilib-0.11.0/lib/dio.c0000644000000000000000000001411012726273472012105 00000000000000/* lib/dio.c digital I/O routines COMEDILIB - Linux Control and Measurement Device Interface Library Copyright (C) 1997-2001 David A. Schleef This library 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, version 2.1 of the License. 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 #include #include "libinternal.h" EXPORT_ALIAS_DEFAULT(_comedi_dio_config,comedi_dio_config,0.7.18); int _comedi_dio_config(comedi_t *it, unsigned int subdev, unsigned int chan, unsigned int io) { subdevice *s; enum configuration_ids config_id; if(!valid_chan(it,subdev,chan)) return -1; s=it->subdevices+subdev; if(s->type!=COMEDI_SUBD_DIO){ internal_error(EINVAL_SUBD); return -1; } switch(io) { case COMEDI_INPUT: config_id = INSN_CONFIG_DIO_INPUT; break; case COMEDI_OUTPUT: config_id = INSN_CONFIG_DIO_OUTPUT; break; default: internal_error(EINVAL); return -1; } if(it->has_insnlist_ioctl){ comedi_insn insn; lsampl_t data = config_id; memset(&insn,0,sizeof(insn)); insn.insn = INSN_CONFIG; insn.n = 1; insn.data = &data; insn.subdev = subdev; insn.chanspec = CR_PACK(chan,0,0); if(comedi_do_insn(it,&insn) < 0) return -1; else return 0; }else { comedi_trig trig; sampl_t data = config_id; memset(&trig,0,sizeof(trig)); trig.flags=TRIG_CONFIG|TRIG_WRITE; trig.n_chan=1; trig.n=1; trig.subdev=subdev; trig.chanlist=&chan; trig.data=&data; if(comedi_trigger(it,&trig) < 0) return -1; else return 0; } } EXPORT_ALIAS_DEFAULT(_comedi_dio_get_config, comedi_dio_get_config, 0.8.0); int _comedi_dio_get_config(comedi_t *it,unsigned int subdev, unsigned int chan, unsigned int *io) { subdevice *s; comedi_insn insn; lsampl_t data[2]; int retval; if(!valid_chan(it,subdev,chan)) return -1; s=it->subdevices+subdev; if(s->type!=COMEDI_SUBD_DIO){ internal_error(EINVAL_SUBD); return -1; } memset(&insn,0,sizeof(insn)); insn.insn = INSN_CONFIG; insn.n = sizeof(data) / sizeof(data[0]); insn.data = data; insn.subdev = subdev; insn.chanspec = CR_PACK(chan,0,0); memset(data, 0, insn.n * sizeof(*data)); data[0] = INSN_CONFIG_DIO_QUERY; retval = comedi_do_insn(it,&insn); if(retval < 0) return retval; *io = data[1]; return 0; } EXPORT_ALIAS_DEFAULT(_comedi_dio_read,comedi_dio_read,0.7.18); int _comedi_dio_read(comedi_t *it,unsigned int subdev,unsigned int chan, unsigned int *val) { subdevice *s; int ret; if(!valid_chan(it,subdev,chan)) return -1; s = it->subdevices+subdev; if(s->type!=COMEDI_SUBD_DIO && s->type!=COMEDI_SUBD_DO && s->type!=COMEDI_SUBD_DI){ internal_error(EINVAL_SUBD); return -1; } if(it->has_insnlist_ioctl){ comedi_insn insn; lsampl_t data = 0; memset(&insn,0,sizeof(insn)); insn.insn = INSN_READ; insn.n = 1; insn.data = &data; insn.subdev = subdev; insn.chanspec = CR_PACK(chan,0,0); ret = comedi_do_insn(it,&insn); *val = data; return ret; }else{ comedi_trig trig; sampl_t data; memset(&trig,0,sizeof(trig)); trig.n_chan=1; trig.n=1; trig.subdev=subdev; trig.chanlist=&chan; trig.data=&data; ret=comedi_trigger(it,&trig); if(ret>=0 && val)*val=data; return ret; } } EXPORT_ALIAS_DEFAULT(_comedi_dio_write,comedi_dio_write,0.7.18); int _comedi_dio_write(comedi_t *it,unsigned int subdev,unsigned int chan, unsigned int val) { subdevice *s; if(!valid_chan(it,subdev,chan)) return -1; s = it->subdevices+subdev; if(s->type!=COMEDI_SUBD_DIO && s->type!=COMEDI_SUBD_DO){ internal_error(EINVAL_SUBD); return -1; } if(it->has_insnlist_ioctl){ comedi_insn insn; lsampl_t data; memset(&insn,0,sizeof(insn)); insn.insn = INSN_WRITE; insn.n = 1; insn.data = &data; insn.subdev = subdev; insn.chanspec = CR_PACK(chan,0,0); data = val; return comedi_do_insn(it,&insn); }else{ comedi_trig trig; sampl_t data; data=val; memset(&trig,0,sizeof(trig)); trig.n_chan=1; trig.n=1; trig.flags=TRIG_WRITE; trig.subdev=subdev; trig.chanlist=&chan; trig.data=&data; return comedi_trigger(it,&trig); } } EXPORT_ALIAS_DEFAULT(_comedi_dio_bitfield2,comedi_dio_bitfield2,0.8.0); int _comedi_dio_bitfield2(comedi_t *it, unsigned int subdev, unsigned int mask, unsigned int *bits, unsigned base_channel) { int ret; unsigned int m,bit; subdevice *s; if(!valid_subd(it, subdev)) return -1; s = it->subdevices + subdev; if(s->type != COMEDI_SUBD_DIO && s->type != COMEDI_SUBD_DO && s->type != COMEDI_SUBD_DI){ internal_error(EINVAL_SUBD); return -1; } if(s->has_insn_bits) { comedi_insn insn; lsampl_t data[2]; memset(&insn,0,sizeof(insn)); insn.insn = INSN_BITS; insn.chanspec = base_channel; insn.n = 2; insn.data = data; insn.subdev = subdev; data[0] = mask; data[1] = *bits; ret = comedi_do_insn(it, &insn); if(ret < 0) return ret; *bits = data[1]; return 0; }else{ unsigned i; for(i = 0, m = 1; i < 32; ++i, m <<= 1) { if(mask & m) { bit = (*bits & m) ? 1 : 0; ret = comedi_dio_write(it, subdev, base_channel + i, bit); }else{ ret = comedi_dio_read(it, subdev, base_channel + i, &bit); if(bit) *bits |= m; else (*bits) &= ~m; } if(ret < 0) return ret; } return 0; } } EXPORT_ALIAS_DEFAULT(_comedi_dio_bitfield,comedi_dio_bitfield,0.7.18); int _comedi_dio_bitfield(comedi_t *it, unsigned int subdev, unsigned int mask, unsigned int *bits) { return _comedi_dio_bitfield2(it, subdev, mask, bits, 0); } comedilib-0.11.0/lib/insn_config_wrappers.c0000644000000000000000000002706712674013666015567 00000000000000/* lib/insn_config_wrappers.c wrappers for various INSN_CONFIG instructions COMEDILIB - Linux Control and Measurement Device Interface Library Copyright (C) 1997-2001 David A. Schleef Copyright (C) 2008 Frank Mori Hess This library 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 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 "libinternal.h" EXPORT_ALIAS_DEFAULT(_comedi_reset_channel,comedi_reset_channel,0.11.0); int _comedi_reset_channel(comedi_t *device, unsigned subdevice, unsigned channel) { comedi_insn insn; lsampl_t data[1]; memset(&insn, 0, sizeof(comedi_insn)); insn.insn = INSN_CONFIG; insn.subdev = subdevice; insn.chanspec = channel; insn.data = data; insn.n = sizeof(data) / sizeof(data[0]); data[0] = INSN_CONFIG_RESET; if(comedi_do_insn(device, &insn) >= 0) return 0; else return -1; } EXPORT_ALIAS_DEFAULT(_comedi_reset,comedi_reset,0.9.0); int _comedi_reset(comedi_t *device, unsigned subdevice) { return _comedi_reset_channel(device, subdevice, 0); } EXPORT_ALIAS_DEFAULT(_comedi_arm_channel,comedi_arm_channel,0.11.0); int _comedi_arm_channel(comedi_t *device, unsigned subdevice, unsigned channel, unsigned target) { comedi_insn insn; lsampl_t data[2]; memset(&insn, 0, sizeof(comedi_insn)); insn.insn = INSN_CONFIG; insn.subdev = subdevice; insn.chanspec = channel; insn.data = data; insn.n = sizeof(data) / sizeof(data[0]); data[0] = INSN_CONFIG_ARM; data[1] = target; if(comedi_do_insn(device, &insn) >= 0) return 0; else return -1; } EXPORT_ALIAS_DEFAULT(_comedi_arm,comedi_arm,0.9.0); int _comedi_arm(comedi_t *device, unsigned subdevice, unsigned target) { return _comedi_arm_channel(device, subdevice, 0, target); } EXPORT_ALIAS_DEFAULT(_comedi_disarm_channel,comedi_disarm_channel,0.11.0); int _comedi_disarm_channel(comedi_t *device, unsigned subdevice, unsigned channel) { comedi_insn insn; lsampl_t data[1]; memset(&insn, 0, sizeof(comedi_insn)); insn.insn = INSN_CONFIG; insn.subdev = subdevice; insn.chanspec = channel; insn.data = data; insn.n = sizeof(data) / sizeof(data[0]); data[0] = INSN_CONFIG_DISARM; if(comedi_do_insn(device, &insn) >= 0) return 0; else return -1; } EXPORT_ALIAS_DEFAULT(_comedi_disarm,comedi_disarm,0.11.0); int _comedi_disarm(comedi_t *device, unsigned subdevice) { return _comedi_disarm_channel(device, subdevice, 0); } EXPORT_ALIAS_DEFAULT(_comedi_get_clock_source,comedi_get_clock_source,0.10.0); int _comedi_get_clock_source(comedi_t *device, unsigned subdevice, unsigned channel, unsigned *clock, unsigned *period_ns) { comedi_insn insn; lsampl_t data[3]; int retval; memset(&insn, 0, sizeof(comedi_insn)); insn.insn = INSN_CONFIG; insn.subdev = subdevice; insn.chanspec = channel; insn.data = data; insn.n = sizeof(data) / sizeof(data[0]); memset(data, 0, insn.n * sizeof(data[0])); data[0] = INSN_CONFIG_GET_CLOCK_SRC; retval = comedi_do_insn(device, &insn); if(retval < 0) return -1; if(clock) *clock = insn.data[1]; if(period_ns) *period_ns = insn.data[2]; return 0; } EXPORT_ALIAS_VER(_comedi_get_clock_source_chan0,comedi_get_clock_source,0.9.0); int _comedi_get_clock_source_chan0(comedi_t *device, unsigned subdevice, unsigned *clock, unsigned *period_ns) { return _comedi_get_clock_source(device, subdevice, 0, clock, period_ns); } EXPORT_ALIAS_DEFAULT(_comedi_get_gate_source,comedi_get_gate_source,0.9.0); int _comedi_get_gate_source(comedi_t *device, unsigned subdevice, unsigned channel, unsigned gate, unsigned *source) { comedi_insn insn; lsampl_t data[3]; int retval; memset(&insn, 0, sizeof(comedi_insn)); insn.insn = INSN_CONFIG; insn.subdev = subdevice; insn.chanspec = channel; insn.data = data; insn.n = sizeof(data) / sizeof(data[0]); memset(insn.data, 0, insn.n * sizeof(insn.data[0])); data[0] = INSN_CONFIG_GET_GATE_SRC; data[1] = gate; retval = comedi_do_insn(device, &insn); if(retval < 0) return -1; if(source) *source = insn.data[2]; return 0; } EXPORT_ALIAS_DEFAULT(_comedi_get_routing,comedi_get_routing,0.9.0); int _comedi_get_routing(comedi_t *device, unsigned subdevice, unsigned channel, unsigned *routing) { comedi_insn insn; lsampl_t data[2]; int retval; memset(&insn, 0, sizeof(comedi_insn)); insn.insn = INSN_CONFIG; insn.subdev = subdevice; insn.chanspec = channel; insn.data = data; insn.n = sizeof(data) / sizeof(data[0]); memset(insn.data, 0, insn.n * sizeof(insn.data[0])); data[0] = INSN_CONFIG_GET_ROUTING; retval = comedi_do_insn(device, &insn); if(retval < 0) return -1; if(routing) *routing = insn.data[1]; return 0; } EXPORT_ALIAS_DEFAULT(_comedi_set_counter_mode,comedi_set_counter_mode,0.9.0); int _comedi_set_counter_mode(comedi_t *device, unsigned subdevice, unsigned channel, unsigned mode_bits) { comedi_insn insn; lsampl_t data[2]; memset(&insn, 0, sizeof(comedi_insn)); insn.insn = INSN_CONFIG; insn.subdev = subdevice; insn.chanspec = channel; insn.data = data; insn.n = sizeof(data) / sizeof(data[0]); data[0] = INSN_CONFIG_SET_COUNTER_MODE; data[1] = mode_bits; if(comedi_do_insn(device, &insn) >= 0) return 0; else return -1; } EXPORT_ALIAS_DEFAULT(_comedi_set_clock_source,comedi_set_clock_source,0.10.0); int _comedi_set_clock_source(comedi_t *device, unsigned subdevice, unsigned channel, unsigned clock, unsigned period_ns) { comedi_insn insn; lsampl_t data[3]; memset(&insn, 0, sizeof(comedi_insn)); insn.insn = INSN_CONFIG; insn.subdev = subdevice; insn.chanspec = channel; insn.data = data; insn.n = sizeof(data) / sizeof(data[0]); data[0] = INSN_CONFIG_SET_CLOCK_SRC; data[1] = clock; data[2] = period_ns; if(comedi_do_insn(device, &insn) >= 0) return 0; else return -1; } EXPORT_ALIAS_VER(_comedi_set_clock_source_chan0,comedi_set_clock_source,0.9.0); int _comedi_set_clock_source_chan0(comedi_t *device, unsigned subdevice, unsigned clock, unsigned period_ns) { return _comedi_set_clock_source(device, subdevice, 0, clock, period_ns); } EXPORT_ALIAS_DEFAULT(_comedi_set_filter,comedi_set_filter,0.9.0); int _comedi_set_filter(comedi_t *device, unsigned subdevice, unsigned channel, unsigned filter) { comedi_insn insn; lsampl_t data[2]; memset(&insn, 0, sizeof(comedi_insn)); insn.insn = INSN_CONFIG; insn.subdev = subdevice; insn.chanspec = channel; insn.data = data; insn.n = sizeof(data) / sizeof(data[0]); data[0] = INSN_CONFIG_FILTER; data[1] = filter; if(comedi_do_insn(device, &insn) >= 0) return 0; else return -1; } EXPORT_ALIAS_DEFAULT(_comedi_set_gate_source,comedi_set_gate_source,0.9.0); int _comedi_set_gate_source(comedi_t *device, unsigned subdevice, unsigned channel, unsigned gate_index, unsigned gate_source) { comedi_insn insn; lsampl_t data[3]; memset(&insn, 0, sizeof(comedi_insn)); insn.insn = INSN_CONFIG; insn.subdev = subdevice; insn.chanspec = channel; insn.data = data; insn.n = sizeof(data) / sizeof(data[0]); data[0] = INSN_CONFIG_SET_GATE_SRC; data[1] = gate_index; data[2] = gate_source; if(comedi_do_insn(device, &insn) >= 0) return 0; else return -1; } EXPORT_ALIAS_DEFAULT(_comedi_internal_trigger,comedi_internal_trigger,0.9.0); int comedi_internal_trigger(comedi_t *dev, unsigned subd, unsigned trignum) { comedi_insn insn; lsampl_t data[1]; memset(&insn, 0, sizeof(comedi_insn)); insn.insn = INSN_INTTRIG; insn.subdev = subd; insn.data = data; insn.n = 1; data[0] = trignum; if(comedi_do_insn(dev, &insn) >= 0) return 0; else return -1; } EXPORT_ALIAS_DEFAULT(_comedi_set_other_source,comedi_set_other_source,0.9.0); int _comedi_set_other_source(comedi_t *device, unsigned subdevice, unsigned channel, unsigned other, unsigned source) { comedi_insn insn; lsampl_t data[3]; int retval; memset(&insn, 0, sizeof(comedi_insn)); insn.insn = INSN_CONFIG; insn.subdev = subdevice; insn.chanspec = channel; insn.data = data; insn.n = sizeof(data) / sizeof(data[0]); data[0] = INSN_CONFIG_SET_OTHER_SRC; data[1] = other; data[2] = source; retval = comedi_do_insn(device, &insn); if(retval < 0) { fprintf(stderr, "%s: error:\n", __FUNCTION__); comedi_perror("comedi_do_insn"); return retval; } if(comedi_do_insn(device, &insn) >= 0) return 0; else return -1; } EXPORT_ALIAS_DEFAULT(_comedi_set_routing,comedi_set_routing,0.9.0); int _comedi_set_routing(comedi_t *device, unsigned subdevice, unsigned channel, unsigned routing) { comedi_insn insn; lsampl_t data[2]; memset(&insn, 0, sizeof(comedi_insn)); insn.insn = INSN_CONFIG; insn.subdev = subdevice; insn.chanspec = channel; insn.data = data; insn.n = sizeof(data) / sizeof(data[0]); data[0] = INSN_CONFIG_SET_ROUTING; data[1] = routing; if(comedi_do_insn(device, &insn) >= 0) return 0; else return -1; } EXPORT_ALIAS_DEFAULT(_comedi_get_hardware_buffer_size,comedi_get_hardware_buffer_size,0.9.0); int _comedi_get_hardware_buffer_size(comedi_t *device, unsigned subdevice, enum comedi_io_direction direction) { comedi_insn insn; lsampl_t data[3]; memset(&insn, 0, sizeof(comedi_insn)); insn.insn = INSN_CONFIG; insn.subdev = subdevice; insn.data = data; insn.n = sizeof(data) / sizeof(data[0]); memset(insn.data, 0, insn.n * sizeof(insn.data[0])); data[0] = INSN_CONFIG_GET_HARDWARE_BUFFER_SIZE; data[1] = direction; if(comedi_do_insn(device, &insn) >= 0) return data[2]; else return -1; } static int digital_trigger_config(comedi_t *device, unsigned subdevice, unsigned trigger_id, unsigned config_operation, unsigned config_param1, unsigned config_param2, unsigned config_param3) { comedi_insn insn; lsampl_t data[6]; memset(&insn, 0, sizeof(comedi_insn)); insn.insn = INSN_CONFIG; insn.subdev = subdevice; insn.chanspec = 0; insn.data = data; insn.n = sizeof(data) / sizeof(data[0]); data[0] = INSN_CONFIG_DIGITAL_TRIG; data[1] = trigger_id; data[2] = config_operation; data[3] = config_param1; data[4] = config_param2; data[5] = config_param3; if(comedi_do_insn(device, &insn) >= 0) return 0; else return -1; } EXPORT_ALIAS_DEFAULT(_comedi_digital_trigger_disable,comedi_digital_trigger_disable,0.11.0); int _comedi_digital_trigger_disable(comedi_t *device, unsigned subdevice, unsigned trigger_id) { return digital_trigger_config(device, subdevice, trigger_id, COMEDI_DIGITAL_TRIG_DISABLE, 0, 0, 0); } EXPORT_ALIAS_DEFAULT(_comedi_digital_trigger_enable_edges,comedi_digital_trigger_enable_edges,0.11.0); int _comedi_digital_trigger_enable_edges(comedi_t *device, unsigned subdevice, unsigned trigger_id, unsigned base_input, unsigned rising_edge_inputs, unsigned falling_edge_inputs) { return digital_trigger_config(device, subdevice, trigger_id, COMEDI_DIGITAL_TRIG_ENABLE_EDGES, base_input, rising_edge_inputs, falling_edge_inputs); } EXPORT_ALIAS_DEFAULT(_comedi_digital_trigger_enable_levels,comedi_digital_trigger_enable_levels,0.11.0); int _comedi_digital_trigger_enable_levels(comedi_t *device, unsigned subdevice, unsigned trigger_id, unsigned base_input, unsigned high_level_inputs, unsigned low_level_inputs) { return digital_trigger_config(device, subdevice, trigger_id, COMEDI_DIGITAL_TRIG_ENABLE_LEVELS, base_input, high_level_inputs, low_level_inputs); } comedilib-0.11.0/lib/calib_yacc.h0000644000000000000000000000615212565342011013402 00000000000000/* A Bison parser, made by GNU Bison 3.0.2. */ /* Bison interface for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ #ifndef YY_CALIB_YY_COMEDILIB_LIB_CALIB_YACC_H_INCLUDED # define YY_CALIB_YY_COMEDILIB_LIB_CALIB_YACC_H_INCLUDED /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif #if YYDEBUG extern int calib_yydebug; #endif /* Token type. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE enum yytokentype { T_DRIVER_NAME = 258, T_BOARD_NAME = 259, T_CALIBRATIONS = 260, T_SUBDEVICE = 261, T_CHANNELS = 262, T_RANGES = 263, T_AREFS = 264, T_CALDACS = 265, T_CHANNEL = 266, T_VALUE = 267, T_NUMBER = 268, T_STRING = 269, T_COEFFICIENTS = 270, T_EXPANSION_ORIGIN = 271, T_SOFTCAL_TO_PHYS = 272, T_SOFTCAL_FROM_PHYS = 273, T_ASSIGN = 274, T_FLOAT = 275 }; #endif /* Tokens. */ #define T_DRIVER_NAME 258 #define T_BOARD_NAME 259 #define T_CALIBRATIONS 260 #define T_SUBDEVICE 261 #define T_CHANNELS 262 #define T_RANGES 263 #define T_AREFS 264 #define T_CALDACS 265 #define T_CHANNEL 266 #define T_VALUE 267 #define T_NUMBER 268 #define T_STRING 269 #define T_COEFFICIENTS 270 #define T_EXPANSION_ORIGIN 271 #define T_SOFTCAL_TO_PHYS 272 #define T_SOFTCAL_FROM_PHYS 273 #define T_ASSIGN 274 #define T_FLOAT 275 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE YYSTYPE; union YYSTYPE { #line 347 "../../comedilib/lib/calib_yacc.y" /* yacc.c:1909 */ int ival; double dval; char *sval; #line 100 "../../comedilib/lib/calib_yacc.h" /* yacc.c:1909 */ }; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 #endif int calib_yyparse (calib_yyparse_private_t *parse_arg); #endif /* !YY_CALIB_YY_COMEDILIB_LIB_CALIB_YACC_H_INCLUDED */ comedilib-0.11.0/lib/Makefile.in0000644000000000000000000012246413140064520013226 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = lib ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/am-check-python-headers.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/as-libtool.m4 $(top_srcdir)/m4/ax_tls.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) libcomedi_la_DEPENDENCIES = am_libcomedi_la_OBJECTS = libcomedi_la-buffer.lo libcomedi_la-calib.lo \ libcomedi_la-cmd.lo libcomedi_la-comedi.lo \ libcomedi_la-data.lo libcomedi_la-dio.lo libcomedi_la-error.lo \ libcomedi_la-filler.lo libcomedi_la-get.lo \ libcomedi_la-ioctl.lo libcomedi_la-range.lo libcomedi_la-sv.lo \ libcomedi_la-timed.lo libcomedi_la-timer.lo \ libcomedi_la-calib_lex.lo libcomedi_la-calib_yacc.lo \ libcomedi_la-insn_config_wrappers.lo libcomedi_la_OBJECTS = $(am_libcomedi_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libcomedi_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libcomedi_la_CFLAGS) \ $(CFLAGS) $(libcomedi_la_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libcomedi_la_SOURCES) DIST_SOURCES = $(libcomedi_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COMEDILIB_AGE = @COMEDILIB_AGE@ COMEDILIB_CFLAGS = @COMEDILIB_CFLAGS@ COMEDILIB_CURRENT = @COMEDILIB_CURRENT@ COMEDILIB_LIBS = @COMEDILIB_LIBS@ COMEDILIB_LIBVERSION = @COMEDILIB_LIBVERSION@ COMEDILIB_LT_LDFLAGS = @COMEDILIB_LT_LDFLAGS@ COMEDILIB_REVISION = @COMEDILIB_REVISION@ COMEDILIB_VERSION_MAJOR = @COMEDILIB_VERSION_MAJOR@ COMEDILIB_VERSION_MICRO = @COMEDILIB_VERSION_MICRO@ COMEDILIB_VERSION_MINOR = @COMEDILIB_VERSION_MINOR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_BACKEND = @PDF_BACKEND@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_QUIET = @PYTHON_QUIET@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_CONFIG_OPTIONS = @RUBY_CONFIG_OPTIONS@ RUBY_PREFIX = @RUBY_PREFIX@ RUBY_SO_DIR = @RUBY_SO_DIR@ SCXI_SO_VERSION = @SCXI_SO_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ VERSION = @VERSION@ XMLTO = @XMLTO@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pcmciadir = @pcmciadir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ udevfirmwaredir = @udevfirmwaredir@ udevrulesdir = @udevrulesdir@ udevscriptsdir = @udevscriptsdir@ lib_LTLIBRARIES = libcomedi.la noinst_HEADERS = calib_lex.h calib_yacc.h libinternal.h CLEANFILES = grammar.output EXTRA_DIST = calib_lex.l calib_yacc.y version_script BUILT_SOURCES = calib_lex.c calib_lex.h calib_yacc.c calib_yacc.h MAINTAINERCLEANFILES = calib_lex.c calib_lex.h calib_yacc.c calib_yacc.h libcomedi_la_SOURCES = \ buffer.c calib.c cmd.c comedi.c data.c dio.c error.c \ filler.c get.c ioctl.c range.c sv.c timed.c timer.c \ calib_lex.c calib_yacc.c insn_config_wrappers.c libcomedi_la_CFLAGS = $(COMEDILIB_CFLAGS) -D_REENTRANT -DLOCALSTATEDIR=\"\$(localstatedir)\" libcomedi_la_LDFLAGS = -soname libcomedi \ $(COMEDILIB_LT_LDFLAGS) \ -Wl,--version-script=$(srcdir)/version_script libcomedi_la_LIBADD = -lm all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu lib/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libcomedi.la: $(libcomedi_la_OBJECTS) $(libcomedi_la_DEPENDENCIES) $(EXTRA_libcomedi_la_DEPENDENCIES) $(AM_V_CCLD)$(libcomedi_la_LINK) -rpath $(libdir) $(libcomedi_la_OBJECTS) $(libcomedi_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcomedi_la-buffer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcomedi_la-calib.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcomedi_la-calib_lex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcomedi_la-calib_yacc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcomedi_la-cmd.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcomedi_la-comedi.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcomedi_la-data.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcomedi_la-dio.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcomedi_la-error.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcomedi_la-filler.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcomedi_la-get.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcomedi_la-insn_config_wrappers.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcomedi_la-ioctl.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcomedi_la-range.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcomedi_la-sv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcomedi_la-timed.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcomedi_la-timer.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< libcomedi_la-buffer.lo: buffer.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -MT libcomedi_la-buffer.lo -MD -MP -MF $(DEPDIR)/libcomedi_la-buffer.Tpo -c -o libcomedi_la-buffer.lo `test -f 'buffer.c' || echo '$(srcdir)/'`buffer.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcomedi_la-buffer.Tpo $(DEPDIR)/libcomedi_la-buffer.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='buffer.c' object='libcomedi_la-buffer.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -c -o libcomedi_la-buffer.lo `test -f 'buffer.c' || echo '$(srcdir)/'`buffer.c libcomedi_la-calib.lo: calib.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -MT libcomedi_la-calib.lo -MD -MP -MF $(DEPDIR)/libcomedi_la-calib.Tpo -c -o libcomedi_la-calib.lo `test -f 'calib.c' || echo '$(srcdir)/'`calib.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcomedi_la-calib.Tpo $(DEPDIR)/libcomedi_la-calib.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='calib.c' object='libcomedi_la-calib.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -c -o libcomedi_la-calib.lo `test -f 'calib.c' || echo '$(srcdir)/'`calib.c libcomedi_la-cmd.lo: cmd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -MT libcomedi_la-cmd.lo -MD -MP -MF $(DEPDIR)/libcomedi_la-cmd.Tpo -c -o libcomedi_la-cmd.lo `test -f 'cmd.c' || echo '$(srcdir)/'`cmd.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcomedi_la-cmd.Tpo $(DEPDIR)/libcomedi_la-cmd.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cmd.c' object='libcomedi_la-cmd.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -c -o libcomedi_la-cmd.lo `test -f 'cmd.c' || echo '$(srcdir)/'`cmd.c libcomedi_la-comedi.lo: comedi.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -MT libcomedi_la-comedi.lo -MD -MP -MF $(DEPDIR)/libcomedi_la-comedi.Tpo -c -o libcomedi_la-comedi.lo `test -f 'comedi.c' || echo '$(srcdir)/'`comedi.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcomedi_la-comedi.Tpo $(DEPDIR)/libcomedi_la-comedi.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='comedi.c' object='libcomedi_la-comedi.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -c -o libcomedi_la-comedi.lo `test -f 'comedi.c' || echo '$(srcdir)/'`comedi.c libcomedi_la-data.lo: data.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -MT libcomedi_la-data.lo -MD -MP -MF $(DEPDIR)/libcomedi_la-data.Tpo -c -o libcomedi_la-data.lo `test -f 'data.c' || echo '$(srcdir)/'`data.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcomedi_la-data.Tpo $(DEPDIR)/libcomedi_la-data.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='data.c' object='libcomedi_la-data.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -c -o libcomedi_la-data.lo `test -f 'data.c' || echo '$(srcdir)/'`data.c libcomedi_la-dio.lo: dio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -MT libcomedi_la-dio.lo -MD -MP -MF $(DEPDIR)/libcomedi_la-dio.Tpo -c -o libcomedi_la-dio.lo `test -f 'dio.c' || echo '$(srcdir)/'`dio.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcomedi_la-dio.Tpo $(DEPDIR)/libcomedi_la-dio.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dio.c' object='libcomedi_la-dio.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -c -o libcomedi_la-dio.lo `test -f 'dio.c' || echo '$(srcdir)/'`dio.c libcomedi_la-error.lo: error.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -MT libcomedi_la-error.lo -MD -MP -MF $(DEPDIR)/libcomedi_la-error.Tpo -c -o libcomedi_la-error.lo `test -f 'error.c' || echo '$(srcdir)/'`error.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcomedi_la-error.Tpo $(DEPDIR)/libcomedi_la-error.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='error.c' object='libcomedi_la-error.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -c -o libcomedi_la-error.lo `test -f 'error.c' || echo '$(srcdir)/'`error.c libcomedi_la-filler.lo: filler.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -MT libcomedi_la-filler.lo -MD -MP -MF $(DEPDIR)/libcomedi_la-filler.Tpo -c -o libcomedi_la-filler.lo `test -f 'filler.c' || echo '$(srcdir)/'`filler.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcomedi_la-filler.Tpo $(DEPDIR)/libcomedi_la-filler.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='filler.c' object='libcomedi_la-filler.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -c -o libcomedi_la-filler.lo `test -f 'filler.c' || echo '$(srcdir)/'`filler.c libcomedi_la-get.lo: get.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -MT libcomedi_la-get.lo -MD -MP -MF $(DEPDIR)/libcomedi_la-get.Tpo -c -o libcomedi_la-get.lo `test -f 'get.c' || echo '$(srcdir)/'`get.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcomedi_la-get.Tpo $(DEPDIR)/libcomedi_la-get.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='get.c' object='libcomedi_la-get.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -c -o libcomedi_la-get.lo `test -f 'get.c' || echo '$(srcdir)/'`get.c libcomedi_la-ioctl.lo: ioctl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -MT libcomedi_la-ioctl.lo -MD -MP -MF $(DEPDIR)/libcomedi_la-ioctl.Tpo -c -o libcomedi_la-ioctl.lo `test -f 'ioctl.c' || echo '$(srcdir)/'`ioctl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcomedi_la-ioctl.Tpo $(DEPDIR)/libcomedi_la-ioctl.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ioctl.c' object='libcomedi_la-ioctl.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -c -o libcomedi_la-ioctl.lo `test -f 'ioctl.c' || echo '$(srcdir)/'`ioctl.c libcomedi_la-range.lo: range.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -MT libcomedi_la-range.lo -MD -MP -MF $(DEPDIR)/libcomedi_la-range.Tpo -c -o libcomedi_la-range.lo `test -f 'range.c' || echo '$(srcdir)/'`range.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcomedi_la-range.Tpo $(DEPDIR)/libcomedi_la-range.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='range.c' object='libcomedi_la-range.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -c -o libcomedi_la-range.lo `test -f 'range.c' || echo '$(srcdir)/'`range.c libcomedi_la-sv.lo: sv.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -MT libcomedi_la-sv.lo -MD -MP -MF $(DEPDIR)/libcomedi_la-sv.Tpo -c -o libcomedi_la-sv.lo `test -f 'sv.c' || echo '$(srcdir)/'`sv.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcomedi_la-sv.Tpo $(DEPDIR)/libcomedi_la-sv.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sv.c' object='libcomedi_la-sv.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -c -o libcomedi_la-sv.lo `test -f 'sv.c' || echo '$(srcdir)/'`sv.c libcomedi_la-timed.lo: timed.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -MT libcomedi_la-timed.lo -MD -MP -MF $(DEPDIR)/libcomedi_la-timed.Tpo -c -o libcomedi_la-timed.lo `test -f 'timed.c' || echo '$(srcdir)/'`timed.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcomedi_la-timed.Tpo $(DEPDIR)/libcomedi_la-timed.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='timed.c' object='libcomedi_la-timed.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -c -o libcomedi_la-timed.lo `test -f 'timed.c' || echo '$(srcdir)/'`timed.c libcomedi_la-timer.lo: timer.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -MT libcomedi_la-timer.lo -MD -MP -MF $(DEPDIR)/libcomedi_la-timer.Tpo -c -o libcomedi_la-timer.lo `test -f 'timer.c' || echo '$(srcdir)/'`timer.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcomedi_la-timer.Tpo $(DEPDIR)/libcomedi_la-timer.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='timer.c' object='libcomedi_la-timer.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -c -o libcomedi_la-timer.lo `test -f 'timer.c' || echo '$(srcdir)/'`timer.c libcomedi_la-calib_lex.lo: calib_lex.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -MT libcomedi_la-calib_lex.lo -MD -MP -MF $(DEPDIR)/libcomedi_la-calib_lex.Tpo -c -o libcomedi_la-calib_lex.lo `test -f 'calib_lex.c' || echo '$(srcdir)/'`calib_lex.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcomedi_la-calib_lex.Tpo $(DEPDIR)/libcomedi_la-calib_lex.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='calib_lex.c' object='libcomedi_la-calib_lex.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -c -o libcomedi_la-calib_lex.lo `test -f 'calib_lex.c' || echo '$(srcdir)/'`calib_lex.c libcomedi_la-calib_yacc.lo: calib_yacc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -MT libcomedi_la-calib_yacc.lo -MD -MP -MF $(DEPDIR)/libcomedi_la-calib_yacc.Tpo -c -o libcomedi_la-calib_yacc.lo `test -f 'calib_yacc.c' || echo '$(srcdir)/'`calib_yacc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcomedi_la-calib_yacc.Tpo $(DEPDIR)/libcomedi_la-calib_yacc.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='calib_yacc.c' object='libcomedi_la-calib_yacc.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -c -o libcomedi_la-calib_yacc.lo `test -f 'calib_yacc.c' || echo '$(srcdir)/'`calib_yacc.c libcomedi_la-insn_config_wrappers.lo: insn_config_wrappers.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -MT libcomedi_la-insn_config_wrappers.lo -MD -MP -MF $(DEPDIR)/libcomedi_la-insn_config_wrappers.Tpo -c -o libcomedi_la-insn_config_wrappers.lo `test -f 'insn_config_wrappers.c' || echo '$(srcdir)/'`insn_config_wrappers.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcomedi_la-insn_config_wrappers.Tpo $(DEPDIR)/libcomedi_la-insn_config_wrappers.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='insn_config_wrappers.c' object='libcomedi_la-insn_config_wrappers.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcomedi_la_CFLAGS) $(CFLAGS) -c -o libcomedi_la-insn_config_wrappers.lo `test -f 'insn_config_wrappers.c' || echo '$(srcdir)/'`insn_config_wrappers.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) 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-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libLTLIBRARIES .MAKE: all check install install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-libLTLIBRARIES install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES .PRECIOUS: Makefile $(srcdir)/calib_yacc.c $(srcdir)/calib_yacc.h: $(srcdir)/calib_yacc.y $(YACC) -d -p calib_yy -o $(srcdir)/calib_yacc.c $< $(srcdir)/calib_lex.c $(srcdir)/calib_lex.h: $(srcdir)/calib_lex.l $(LEX) --header-file=$(srcdir)/calib_lex.h -Pcalib_yy -o$(srcdir)/calib_lex.c $< # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: comedilib-0.11.0/lib/comedi.c0000644000000000000000000001414412715406005012565 00000000000000/* lib/comedi.c generic functions COMEDILIB - Linux Control and Measurement Device Interface Library Copyright (C) 1997-2001 David A. Schleef This library 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, version 2.1 of the License. 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 #include #include #include "libinternal.h" INTERNAL int __comedi_init=0; INTERNAL void initialize(void) { char *s; __comedi_init=1; if( (s=getenv("COMEDILIB_LOGLEVEL")) ){ __comedi_loglevel=strtol(s,NULL,0); COMEDILIB_DEBUG(3,"setting loglevel to %d\n",__comedi_loglevel); } } EXPORT_ALIAS_DEFAULT(_comedi_open,comedi_open,0.7.18); comedi_t* _comedi_open(const char *fn) { comedi_t *it; if(!__comedi_init) initialize(); if(!(it=malloc(sizeof(comedi_t)))) goto cleanup; memset(it,0,sizeof(comedi_t)); if((it->fd=open(fn,O_RDWR))<0){ libc_error(); goto cleanup; } if(comedi_ioctl(it->fd, COMEDI_DEVINFO, &it->devinfo) < 0) goto cleanup; it->n_subdevices=it->devinfo.n_subdevs; if(get_subdevices(it) < 0) goto cleanup; it->magic=COMEDILIB_MAGIC; return it; cleanup: if(it) { /* As long as get_subdevices is the last action above, it->subdevices should not need any cleanup, since get_subdevices should have done the cleanup already */ if (it->fd >= 0) close(it->fd); free(it); } return NULL; } EXPORT_ALIAS_DEFAULT(_comedi_close,comedi_close,0.7.18); int _comedi_close(comedi_t *it) { subdevice *s; int i,j; if(!valid_dev(it)) return -1; it->magic=0; for(i=0;in_subdevices;i++){ s=it->subdevices+i; if(s->type==COMEDI_SUBD_UNUSED) continue; if(s->subd_flags&SDF_FLAGS){ free(s->flags_list); } if(s->subd_flags&SDF_MAXDATA){ free(s->maxdata_list); } if(s->subd_flags&SDF_RANGETYPE){ free(s->range_type_list); for(j=0;jn_chan;j++) free(s->rangeinfo_list[j]); free(s->rangeinfo_list); }else{ free(s->rangeinfo); } if(s->cmd_mask)free(s->cmd_mask); } if(it->subdevices){ free(it->subdevices); } close(it->fd); free(it); return 0; } EXPORT_ALIAS_DEFAULT(_comedi_cancel,comedi_cancel,0.7.18); int _comedi_cancel(comedi_t *it,unsigned int subdevice) { if(!valid_dev(it)) return -1; return comedi_ioctl(it->fd, COMEDI_CANCEL, (void*)(unsigned long)subdevice); } EXPORT_ALIAS_DEFAULT(_comedi_poll,comedi_poll,0.7.18); int _comedi_poll(comedi_t *it,unsigned int subdevice) { if(!valid_dev(it)) return -1; return comedi_ioctl(it->fd, COMEDI_POLL, (void*)(unsigned long)subdevice); } EXPORT_ALIAS_DEFAULT(_comedi_fileno,comedi_fileno,0.7.18); int _comedi_fileno(comedi_t *it) { if(!valid_dev(it)) return -1; return it->fd; } EXPORT_ALIAS_DEFAULT(_comedi_trigger,comedi_trigger,0.7.18); int _comedi_trigger(comedi_t *it,comedi_trig *t) { if(!valid_dev(it) || !t) return -1; return comedi_ioctl(it->fd, COMEDI_TRIG, t); } EXPORT_ALIAS_DEFAULT(_comedi_command,comedi_command,0.7.18); int _comedi_command(comedi_t *it,comedi_cmd *t) { int ret; if(!valid_dev(it)) return -1; ret = comedi_ioctl(it->fd, COMEDI_CMD, t); if(ret<0){ switch(__comedi_errno){ case EIO: __comedi_errno = ECMDNOTSUPP; break; } } return ret; } EXPORT_ALIAS_DEFAULT(_comedi_command_test,comedi_command_test,0.7.18); int _comedi_command_test(comedi_t *it,comedi_cmd *t) { int ret; if(!valid_dev(it)) return -1; ret = comedi_ioctl(it->fd, COMEDI_CMDTEST, t); if(ret<0){ switch(__comedi_errno){ case EIO: __comedi_errno = ECMDNOTSUPP; break; } } return ret; } EXPORT_ALIAS_DEFAULT(_comedi_do_insnlist,comedi_do_insnlist,0.7.18); int _comedi_do_insnlist(comedi_t *it,comedi_insnlist *il) { if(!valid_dev(it)) return -1; return comedi_ioctl(it->fd, COMEDI_INSNLIST, il); } EXPORT_ALIAS_DEFAULT(_comedi_do_insn,comedi_do_insn,0.7.18); int _comedi_do_insn(comedi_t *it,comedi_insn *insn) { if(!valid_dev(it)) return -1; if(it->has_insn_ioctl){ return comedi_ioctl(it->fd, COMEDI_INSN, insn); }else{ comedi_insnlist il; int ret; il.n_insns = 1; il.insns = insn; ret = comedi_ioctl(it->fd, COMEDI_INSNLIST, &il); if(ret<0)return ret; return insn->n; } } EXPORT_ALIAS_DEFAULT(_comedi_lock,comedi_lock,0.7.18); int _comedi_lock(comedi_t *it,unsigned int subdevice) { if(!valid_dev(it)) return -1; return comedi_ioctl(it->fd, COMEDI_LOCK, (void*)(unsigned long)subdevice); } EXPORT_ALIAS_DEFAULT(_comedi_unlock,comedi_unlock,0.7.18); int _comedi_unlock(comedi_t *it,unsigned int subdevice) { if(!valid_dev(it)) return -1; return comedi_ioctl(it->fd, COMEDI_UNLOCK, (void*)(unsigned long)subdevice); } EXPORT_ALIAS_DEFAULT(_comedi_set_read_subdevice,comedi_set_read_subdevice,0.11.0); int _comedi_set_read_subdevice(comedi_t *it,unsigned int subdevice) { int ret; if(!valid_dev(it)) return -1; if(it->devinfo.read_subdevice >= 0 && it->devinfo.read_subdevice == subdevice){ return 0; } ret = comedi_ioctl(it->fd, COMEDI_SETRSUBD, (void*)(unsigned long)subdevice); if(ret == 0){ it->devinfo.read_subdevice = subdevice; } return ret; } EXPORT_ALIAS_DEFAULT(_comedi_set_write_subdevice,comedi_set_write_subdevice,0.11.0); int _comedi_set_write_subdevice(comedi_t *it,unsigned int subdevice) { int ret; if(!valid_dev(it)) return -1; if(it->devinfo.write_subdevice >= 0 && it->devinfo.write_subdevice == subdevice){ return 0; } ret = comedi_ioctl(it->fd, COMEDI_SETWSUBD, (void*)(unsigned long)subdevice); if(ret == 0){ it->devinfo.write_subdevice = subdevice; } return ret; } comedilib-0.11.0/lib/calib_lex.c0000644000000000000000000017627612426145427013275 00000000000000#line 2 "../../comedilib/lib/calib_lex.c" #line 4 "../../comedilib/lib/calib_lex.c" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 39 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ #include #include #include #include /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! C99 */ #endif /* ! FLEXINT_H */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* An opaque pointer. */ #ifndef YY_TYPEDEF_YY_SCANNER_T #define YY_TYPEDEF_YY_SCANNER_T typedef void* yyscan_t; #endif /* For convenience, these vars (plus the bison vars far below) are macros in the reentrant scanner. */ #define yyin yyg->yyin_r #define yyout yyg->yyout_r #define yyextra yyg->yyextra_r #define yyleng yyg->yyleng_r #define yytext yyg->yytext_r #define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) #define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) #define yy_flex_debug yyg->yy_flex_debug_r /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN yyg->yy_start = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START ((yyg->yy_start - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE calib_yyrestart(yyin ,yyscanner ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k. * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. * Ditto for the __ia64__ case accordingly. */ #define YY_BUF_SIZE 32768 #else #define YY_BUF_SIZE 16384 #endif /* __ia64__ */ #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires * access to the local variable yy_act. Since yyless() is a macro, it would break * existing scanners that call yyless() from OUTSIDE calib_yylex. * One obvious solution it to make yy_act a global. I tried that, and saw * a 5% performance hit in a non-yylineno scanner, because yy_act is * normally declared as a register variable-- so it is not worth it. */ #define YY_LESS_LINENO(n) \ do { \ int yyl;\ for ( yyl = n; yyl < yyleng; ++yyl )\ if ( yytext[yyl] == '\n' )\ --yylineno;\ }while(0) #define YY_LINENO_REWIND_TO(dst) \ do {\ const char *p;\ for ( p = yy_cp-1; p >= (dst); --p)\ if ( *p == '\n' )\ --yylineno;\ }while(0) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = yyg->yy_hold_char; \ YY_RESTORE_YY_MORE_OFFSET \ yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner ) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { FILE *yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via calib_yyrestart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \ ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] void calib_yyrestart (FILE *input_file ,yyscan_t yyscanner ); void calib_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); YY_BUFFER_STATE calib_yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner ); void calib_yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); void calib_yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); void calib_yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); void calib_yypop_buffer_state (yyscan_t yyscanner ); static void calib_yyensure_buffer_stack (yyscan_t yyscanner ); static void calib_yy_load_buffer_state (yyscan_t yyscanner ); static void calib_yy_init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner ); #define YY_FLUSH_BUFFER calib_yy_flush_buffer(YY_CURRENT_BUFFER ,yyscanner) YY_BUFFER_STATE calib_yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner ); YY_BUFFER_STATE calib_yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner ); YY_BUFFER_STATE calib_yy_scan_bytes (yyconst char *bytes,yy_size_t len ,yyscan_t yyscanner ); void *calib_yyalloc (yy_size_t ,yyscan_t yyscanner ); void *calib_yyrealloc (void *,yy_size_t ,yyscan_t yyscanner ); void calib_yyfree (void * ,yyscan_t yyscanner ); #define yy_new_buffer calib_yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ calib_yyensure_buffer_stack (yyscanner); \ YY_CURRENT_BUFFER_LVALUE = \ calib_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ calib_yyensure_buffer_stack (yyscanner); \ YY_CURRENT_BUFFER_LVALUE = \ calib_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ #define calib_yywrap(yyscanner) 1 #define YY_SKIP_YYWRAP typedef unsigned char YY_CHAR; typedef int yy_state_type; #define yytext_ptr yytext_r static yy_state_type yy_get_previous_state (yyscan_t yyscanner ); static yy_state_type yy_try_NUL_trans (yy_state_type current_state ,yyscan_t yyscanner); static int yy_get_next_buffer (yyscan_t yyscanner ); static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner ); /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ yyg->yytext_ptr = yy_bp; \ yyleng = (size_t) (yy_cp - yy_bp); \ yyg->yy_hold_char = *yy_cp; \ *yy_cp = '\0'; \ yyg->yy_c_buf_p = yy_cp; #define YY_NUM_RULES 26 #define YY_END_OF_BUFFER 27 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[161] = { 0, 0, 0, 0, 0, 0, 0, 27, 25, 24, 1, 5, 2, 25, 25, 22, 22, 25, 22, 22, 22, 22, 22, 22, 25, 25, 25, 4, 3, 26, 1, 6, 0, 22, 22, 22, 23, 23, 22, 22, 0, 21, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 23, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 14, 0, 15, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 8, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 9, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 18, 0, 20, 0 } ; static yyconst flex_int32_t yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 4, 5, 1, 1, 1, 1, 1, 1, 1, 6, 1, 6, 7, 1, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 10, 11, 1, 1, 12, 12, 12, 12, 13, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 1, 1, 1, 1, 1, 1, 15, 1, 16, 17, 18, 19, 20, 21, 22, 23, 24, 1, 1, 25, 26, 27, 28, 29, 1, 30, 31, 32, 33, 34, 1, 35, 36, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int32_t yy_meta[37] = { 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int16_t yy_base[165] = { 0, 0, 0, 220, 219, 34, 36, 221, 224, 224, 224, 224, 224, 34, 36, 39, 55, 209, 212, 42, 43, 54, 58, 59, 202, 45, 201, 224, 224, 212, 211, 224, 71, 0, 0, 207, 76, 78, 0, 93, 206, 224, 192, 195, 83, 194, 189, 184, 178, 179, 184, 187, 178, 198, 224, 97, 84, 101, 195, 179, 169, 57, 171, 176, 162, 179, 172, 161, 173, 158, 103, 159, 170, 172, 170, 159, 164, 164, 156, 162, 163, 160, 159, 224, 163, 159, 146, 155, 150, 143, 141, 140, 154, 135, 224, 141, 136, 150, 140, 146, 148, 138, 224, 136, 136, 143, 224, 126, 126, 132, 128, 126, 138, 134, 125, 126, 224, 129, 132, 120, 86, 126, 125, 116, 116, 116, 126, 110, 111, 224, 224, 111, 105, 116, 107, 106, 118, 101, 100, 224, 100, 103, 99, 224, 224, 103, 111, 102, 95, 87, 79, 90, 90, 64, 56, 33, 224, 224, 36, 224, 224, 118, 120, 52, 122 } ; static yyconst flex_int16_t yy_def[165] = { 0, 160, 1, 161, 161, 162, 162, 160, 160, 160, 160, 160, 160, 163, 160, 160, 163, 160, 163, 163, 163, 163, 163, 163, 160, 160, 160, 160, 160, 164, 164, 160, 160, 15, 16, 163, 160, 160, 16, 163, 163, 160, 160, 160, 163, 160, 160, 160, 160, 160, 160, 160, 160, 164, 160, 160, 160, 160, 39, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 0, 160, 160, 160, 160 } ; static yyconst flex_int16_t yy_nxt[261] = { 0, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 8, 18, 18, 8, 8, 19, 20, 21, 22, 23, 18, 8, 8, 8, 8, 8, 8, 8, 8, 24, 25, 8, 8, 26, 8, 8, 30, 31, 30, 31, 32, 33, 34, 36, 36, 37, 38, 38, 160, 160, 35, 39, 40, 35, 35, 35, 35, 35, 39, 35, 160, 37, 38, 38, 160, 160, 159, 39, 158, 44, 43, 42, 50, 40, 39, 73, 45, 51, 36, 36, 74, 46, 157, 36, 36, 56, 56, 47, 55, 160, 55, 56, 56, 48, 156, 55, 55, 55, 57, 160, 58, 58, 57, 55, 70, 70, 127, 61, 70, 70, 70, 70, 155, 154, 153, 152, 151, 128, 27, 27, 29, 29, 53, 53, 150, 149, 148, 147, 146, 145, 144, 143, 142, 141, 140, 139, 138, 137, 136, 135, 134, 133, 132, 131, 130, 129, 126, 125, 124, 123, 122, 121, 120, 119, 118, 117, 116, 115, 114, 113, 112, 111, 110, 109, 108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, 88, 87, 86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 72, 71, 160, 54, 69, 68, 67, 66, 65, 64, 63, 62, 60, 59, 160, 160, 54, 54, 52, 49, 160, 41, 160, 28, 28, 7, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160 } ; static yyconst flex_int16_t yy_chk[261] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 6, 6, 13, 13, 13, 14, 14, 15, 15, 15, 19, 20, 15, 15, 15, 163, 15, 15, 15, 15, 15, 15, 21, 16, 16, 16, 22, 23, 158, 16, 155, 21, 20, 19, 25, 15, 16, 61, 21, 25, 32, 32, 61, 21, 154, 36, 36, 37, 37, 22, 36, 44, 37, 56, 56, 23, 153, 36, 56, 37, 39, 39, 39, 39, 55, 56, 55, 55, 120, 44, 57, 57, 70, 70, 152, 151, 150, 149, 148, 120, 161, 161, 162, 162, 164, 164, 147, 146, 145, 142, 141, 140, 138, 137, 136, 135, 134, 133, 132, 131, 128, 127, 126, 125, 124, 123, 122, 121, 119, 118, 117, 115, 114, 113, 112, 111, 110, 109, 108, 107, 105, 104, 103, 101, 100, 99, 98, 97, 96, 95, 93, 92, 91, 90, 89, 88, 87, 86, 85, 84, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 69, 68, 67, 66, 65, 64, 63, 62, 60, 59, 58, 53, 52, 51, 50, 49, 48, 47, 46, 45, 43, 42, 40, 35, 30, 29, 26, 24, 18, 17, 7, 4, 3, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160 } ; /* Table of booleans, true if rule could match eol. */ static yyconst flex_int32_t yy_rule_can_match_eol[27] = { 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET #line 1 "../../comedilib/lib/calib_lex.l" #line 7 "../../comedilib/lib/calib_lex.l" /* lib/calib_lex.l code for parsing calibration file, generated by flex Copyright (C) 2003 Frank Mori Hess This library 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, version 2.1 of the License. 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 "libinternal.h" #include "calib_yacc.h" #define YY_NO_INPUT #line 606 "../../comedilib/lib/calib_lex.c" #define INITIAL 0 #define COMMENT 1 #define STRING 2 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif /* Holds the entire state of the reentrant scanner. */ struct yyguts_t { /* User-defined. Not touched by flex. */ YY_EXTRA_TYPE yyextra_r; /* The rest are the same as the globals declared in the non-reentrant scanner. */ FILE *yyin_r, *yyout_r; size_t yy_buffer_stack_top; /**< index of top of stack. */ size_t yy_buffer_stack_max; /**< capacity of stack. */ YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ char yy_hold_char; yy_size_t yy_n_chars; yy_size_t yyleng_r; char *yy_c_buf_p; int yy_init; int yy_start; int yy_did_buffer_switch_on_eof; int yy_start_stack_ptr; int yy_start_stack_depth; int *yy_start_stack; yy_state_type yy_last_accepting_state; char* yy_last_accepting_cpos; int yylineno_r; int yy_flex_debug_r; char *yytext_r; int yy_more_flag; int yy_more_len; }; /* end struct yyguts_t */ static int yy_init_globals (yyscan_t yyscanner ); int calib_yylex_init (yyscan_t* scanner); int calib_yylex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int calib_yylex_destroy (yyscan_t yyscanner ); int calib_yyget_debug (yyscan_t yyscanner ); void calib_yyset_debug (int debug_flag ,yyscan_t yyscanner ); YY_EXTRA_TYPE calib_yyget_extra (yyscan_t yyscanner ); void calib_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner ); FILE *calib_yyget_in (yyscan_t yyscanner ); void calib_yyset_in (FILE * in_str ,yyscan_t yyscanner ); FILE *calib_yyget_out (yyscan_t yyscanner ); void calib_yyset_out (FILE * out_str ,yyscan_t yyscanner ); yy_size_t calib_yyget_leng (yyscan_t yyscanner ); char *calib_yyget_text (yyscan_t yyscanner ); int calib_yyget_lineno (yyscan_t yyscanner ); void calib_yyset_lineno (int line_number ,yyscan_t yyscanner ); int calib_yyget_column (yyscan_t yyscanner ); void calib_yyset_column (int column_no ,yyscan_t yyscanner ); /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int calib_yywrap (yyscan_t yyscanner ); #else extern int calib_yywrap (yyscan_t yyscanner ); #endif #endif #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner); #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (yyscan_t yyscanner ); #else static int input (yyscan_t yyscanner ); #endif #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k */ #define YY_READ_BUF_SIZE 16384 #else #define YY_READ_BUF_SIZE 8192 #endif /* __ia64__ */ #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ #define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ size_t n; \ for ( n = 0; n < max_size && \ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ if ( c == '\n' ) \ buf[n++] = (char) c; \ if ( c == EOF && ferror( yyin ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ result = n; \ } \ else \ { \ errno=0; \ while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ { \ if( errno != EINTR) \ { \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ break; \ } \ errno=0; \ clearerr(yyin); \ } \ }\ \ #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 extern int calib_yylex (yyscan_t yyscanner); #define YY_DECL int calib_yylex (yyscan_t yyscanner) #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif #define YY_RULE_SETUP \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if ( !yyg->yy_init ) { yyg->yy_init = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! yyg->yy_start ) yyg->yy_start = 1; /* first start state */ if ( ! yyin ) yyin = stdin; if ( ! yyout ) yyout = stdout; if ( ! YY_CURRENT_BUFFER ) { calib_yyensure_buffer_stack (yyscanner); YY_CURRENT_BUFFER_LVALUE = calib_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); } calib_yy_load_buffer_state(yyscanner ); } { #line 41 "../../comedilib/lib/calib_lex.l" #line 866 "../../comedilib/lib/calib_lex.c" while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = yyg->yy_c_buf_p; /* Support of yytext. */ *yy_cp = yyg->yy_hold_char; /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = yyg->yy_start; yy_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ; if ( yy_accept[yy_current_state] ) { yyg->yy_last_accepting_state = yy_current_state; yyg->yy_last_accepting_cpos = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 161 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_base[yy_current_state] != 224 ); yy_find_action: yy_act = yy_accept[yy_current_state]; if ( yy_act == 0 ) { /* have to back up */ yy_cp = yyg->yy_last_accepting_cpos; yy_current_state = yyg->yy_last_accepting_state; yy_act = yy_accept[yy_current_state]; } YY_DO_BEFORE_ACTION; if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] ) { yy_size_t yyl; for ( yyl = 0; yyl < yyleng; ++yyl ) if ( yytext[yyl] == '\n' ) do{ yylineno++; yycolumn=0; }while(0) ; } do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = yyg->yy_hold_char; yy_cp = yyg->yy_last_accepting_cpos; yy_current_state = yyg->yy_last_accepting_state; goto yy_find_action; case 1: /* rule 1 can match eol */ YY_RULE_SETUP #line 43 "../../comedilib/lib/calib_lex.l" YY_BREAK case 2: YY_RULE_SETUP #line 45 "../../comedilib/lib/calib_lex.l" { BEGIN(COMMENT); } YY_BREAK case 3: /* rule 3 can match eol */ YY_RULE_SETUP #line 46 "../../comedilib/lib/calib_lex.l" {BEGIN(INITIAL); } YY_BREAK case 4: YY_RULE_SETUP #line 47 "../../comedilib/lib/calib_lex.l" YY_BREAK case 5: YY_RULE_SETUP #line 49 "../../comedilib/lib/calib_lex.l" { BEGIN(STRING); } YY_BREAK case 6: /* rule 6 can match eol */ YY_RULE_SETUP #line 50 "../../comedilib/lib/calib_lex.l" { if(strlen(calib_yyget_text(yyscanner)) > 0) calib_yyget_text(yyscanner)[strlen(calib_yyget_text(yyscanner)) - 1] = 0; calib_lvalp->sval = calib_yyget_text(yyscanner); BEGIN(INITIAL); return ( T_STRING ); } YY_BREAK case 7: YY_RULE_SETUP #line 58 "../../comedilib/lib/calib_lex.l" { return ( T_DRIVER_NAME ); } YY_BREAK case 8: YY_RULE_SETUP #line 59 "../../comedilib/lib/calib_lex.l" { return ( T_BOARD_NAME ); } YY_BREAK case 9: YY_RULE_SETUP #line 60 "../../comedilib/lib/calib_lex.l" { return ( T_CALIBRATIONS ); } YY_BREAK case 10: YY_RULE_SETUP #line 61 "../../comedilib/lib/calib_lex.l" { return ( T_SUBDEVICE); } YY_BREAK case 11: YY_RULE_SETUP #line 62 "../../comedilib/lib/calib_lex.l" { return (T_CHANNELS); } YY_BREAK case 12: YY_RULE_SETUP #line 63 "../../comedilib/lib/calib_lex.l" { return ( T_RANGES ); } YY_BREAK case 13: YY_RULE_SETUP #line 64 "../../comedilib/lib/calib_lex.l" { return ( T_AREFS ); } YY_BREAK case 14: YY_RULE_SETUP #line 65 "../../comedilib/lib/calib_lex.l" { return ( T_CALDACS ); } YY_BREAK case 15: YY_RULE_SETUP #line 66 "../../comedilib/lib/calib_lex.l" { return ( T_CHANNEL ); } YY_BREAK case 16: YY_RULE_SETUP #line 67 "../../comedilib/lib/calib_lex.l" { return ( T_VALUE ); } YY_BREAK case 17: YY_RULE_SETUP #line 68 "../../comedilib/lib/calib_lex.l" {return (T_COEFFICIENTS);} YY_BREAK case 18: YY_RULE_SETUP #line 69 "../../comedilib/lib/calib_lex.l" {return (T_EXPANSION_ORIGIN);} YY_BREAK case 19: YY_RULE_SETUP #line 70 "../../comedilib/lib/calib_lex.l" {return T_SOFTCAL_TO_PHYS;} YY_BREAK case 20: YY_RULE_SETUP #line 71 "../../comedilib/lib/calib_lex.l" {return T_SOFTCAL_FROM_PHYS;} YY_BREAK case 21: YY_RULE_SETUP #line 72 "../../comedilib/lib/calib_lex.l" { return ( T_ASSIGN ); }; YY_BREAK case 22: YY_RULE_SETUP #line 74 "../../comedilib/lib/calib_lex.l" {calib_lvalp->ival = strtol(calib_yyget_text(yyscanner), NULL, 0); return( T_NUMBER ); } YY_BREAK case 23: YY_RULE_SETUP #line 77 "../../comedilib/lib/calib_lex.l" { calib_lvalp->dval = strtod(calib_yyget_text(yyscanner), 0); return( T_FLOAT ); } YY_BREAK case 24: YY_RULE_SETUP #line 80 "../../comedilib/lib/calib_lex.l" YY_BREAK case 25: YY_RULE_SETUP #line 82 "../../comedilib/lib/calib_lex.l" {return(calib_yyget_text(yyscanner)[0]);} YY_BREAK case 26: YY_RULE_SETUP #line 85 "../../comedilib/lib/calib_lex.l" ECHO; YY_BREAK #line 1076 "../../comedilib/lib/calib_lex.c" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(COMMENT): case YY_STATE_EOF(STRING): yyterminate(); case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = yyg->yy_hold_char; YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * calib_yylex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) { /* This was really a NUL. */ yy_state_type yy_next_state; yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( yyscanner ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner); yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++yyg->yy_c_buf_p; yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = yyg->yy_c_buf_p; goto yy_find_action; } } else switch ( yy_get_next_buffer( yyscanner ) ) { case EOB_ACT_END_OF_FILE: { yyg->yy_did_buffer_switch_on_eof = 0; if ( calib_yywrap(yyscanner ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! yyg->yy_did_buffer_switch_on_eof ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( yyscanner ); yy_cp = yyg->yy_c_buf_p; yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: yyg->yy_c_buf_p = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]; yy_current_state = yy_get_previous_state( yyscanner ); yy_cp = yyg->yy_c_buf_p; yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of user's declarations */ } /* end of calib_yylex */ /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ static int yy_get_next_buffer (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = yyg->yytext_ptr; register int number_to_move, i; int ret_val; if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; else { yy_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; int yy_c_buf_p_offset = (int) (yyg->yy_c_buf_p - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { yy_size_t new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ calib_yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ,yyscanner ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), yyg->yy_n_chars, num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; } if ( yyg->yy_n_chars == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; calib_yyrestart(yyin ,yyscanner); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) calib_yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ,yyscanner ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } yyg->yy_n_chars += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ static yy_state_type yy_get_previous_state (yyscan_t yyscanner) { register yy_state_type yy_current_state; register char *yy_cp; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yy_current_state = yyg->yy_start; for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) { register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { yyg->yy_last_accepting_state = yy_current_state; yyg->yy_last_accepting_cpos = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 161 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner) { register int yy_is_jam; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */ register char *yy_cp = yyg->yy_c_buf_p; register YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { yyg->yy_last_accepting_state = yy_current_state; yyg->yy_last_accepting_cpos = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 161 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 160); (void)yyg; return yy_is_jam ? 0 : yy_current_state; } #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (yyscan_t yyscanner) #else static int input (yyscan_t yyscanner) #endif { int c; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; *yyg->yy_c_buf_p = yyg->yy_hold_char; if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) /* This was really a NUL. */ *yyg->yy_c_buf_p = '\0'; else { /* need more input */ yy_size_t offset = yyg->yy_c_buf_p - yyg->yytext_ptr; ++yyg->yy_c_buf_p; switch ( yy_get_next_buffer( yyscanner ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ calib_yyrestart(yyin ,yyscanner); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( calib_yywrap(yyscanner ) ) return EOF; if ( ! yyg->yy_did_buffer_switch_on_eof ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(yyscanner); #else return input(yyscanner); #endif } case EOB_ACT_CONTINUE_SCAN: yyg->yy_c_buf_p = yyg->yytext_ptr + offset; break; } } } c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */ *yyg->yy_c_buf_p = '\0'; /* preserve yytext */ yyg->yy_hold_char = *++yyg->yy_c_buf_p; if ( c == '\n' ) do{ yylineno++; yycolumn=0; }while(0) ; return c; } #endif /* ifndef YY_NO_INPUT */ /** Immediately switch to a different input stream. * @param input_file A readable stream. * @param yyscanner The scanner object. * @note This function does not reset the start condition to @c INITIAL . */ void calib_yyrestart (FILE * input_file , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if ( ! YY_CURRENT_BUFFER ){ calib_yyensure_buffer_stack (yyscanner); YY_CURRENT_BUFFER_LVALUE = calib_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); } calib_yy_init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner); calib_yy_load_buffer_state(yyscanner ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * @param yyscanner The scanner object. */ void calib_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* TODO. We should be able to replace this entire function body * with * calib_yypop_buffer_state(); * calib_yypush_buffer_state(new_buffer); */ calib_yyensure_buffer_stack (yyscanner); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *yyg->yy_c_buf_p = yyg->yy_hold_char; YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; } YY_CURRENT_BUFFER_LVALUE = new_buffer; calib_yy_load_buffer_state(yyscanner ); /* We don't actually know whether we did this switch during * EOF (calib_yywrap()) processing, but the only time this flag * is looked at is after calib_yywrap() is called, so it's safe * to go ahead and always set it. */ yyg->yy_did_buffer_switch_on_eof = 1; } static void calib_yy_load_buffer_state (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; yyg->yy_hold_char = *yyg->yy_c_buf_p; } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * @param yyscanner The scanner object. * @return the allocated buffer state. */ YY_BUFFER_STATE calib_yy_create_buffer (FILE * file, int size , yyscan_t yyscanner) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) calib_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in calib_yy_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) calib_yyalloc(b->yy_buf_size + 2 ,yyscanner ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in calib_yy_create_buffer()" ); b->yy_is_our_buffer = 1; calib_yy_init_buffer(b,file ,yyscanner); return b; } /** Destroy the buffer. * @param b a buffer created with calib_yy_create_buffer() * @param yyscanner The scanner object. */ void calib_yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) calib_yyfree((void *) b->yy_ch_buf ,yyscanner ); calib_yyfree((void *) b ,yyscanner ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a calib_yyrestart() or at EOF. */ static void calib_yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner) { int oerrno = errno; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; calib_yy_flush_buffer(b ,yyscanner); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then calib_yy_init_buffer was _probably_ * called from calib_yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * @param yyscanner The scanner object. */ void calib_yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) calib_yy_load_buffer_state(yyscanner ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * @param yyscanner The scanner object. */ void calib_yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if (new_buffer == NULL) return; calib_yyensure_buffer_stack(yyscanner); /* This block is copied from calib_yy_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *yyg->yy_c_buf_p = yyg->yy_hold_char; YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) yyg->yy_buffer_stack_top++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from calib_yy_switch_to_buffer. */ calib_yy_load_buffer_state(yyscanner ); yyg->yy_did_buffer_switch_on_eof = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * @param yyscanner The scanner object. */ void calib_yypop_buffer_state (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if (!YY_CURRENT_BUFFER) return; calib_yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner); YY_CURRENT_BUFFER_LVALUE = NULL; if (yyg->yy_buffer_stack_top > 0) --yyg->yy_buffer_stack_top; if (YY_CURRENT_BUFFER) { calib_yy_load_buffer_state(yyscanner ); yyg->yy_did_buffer_switch_on_eof = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ static void calib_yyensure_buffer_stack (yyscan_t yyscanner) { yy_size_t num_to_alloc; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if (!yyg->yy_buffer_stack) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; yyg->yy_buffer_stack = (struct yy_buffer_state**)calib_yyalloc (num_to_alloc * sizeof(struct yy_buffer_state*) , yyscanner); if ( ! yyg->yy_buffer_stack ) YY_FATAL_ERROR( "out of dynamic memory in calib_yyensure_buffer_stack()" ); memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*)); yyg->yy_buffer_stack_max = num_to_alloc; yyg->yy_buffer_stack_top = 0; return; } if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = yyg->yy_buffer_stack_max + grow_size; yyg->yy_buffer_stack = (struct yy_buffer_state**)calib_yyrealloc (yyg->yy_buffer_stack, num_to_alloc * sizeof(struct yy_buffer_state*) , yyscanner); if ( ! yyg->yy_buffer_stack ) YY_FATAL_ERROR( "out of dynamic memory in calib_yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*)); yyg->yy_buffer_stack_max = num_to_alloc; } } /** Setup the input buffer state to scan directly from a user-specified character buffer. * @param base the character buffer * @param size the size in bytes of the character buffer * @param yyscanner The scanner object. * @return the newly allocated buffer state object. */ YY_BUFFER_STATE calib_yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner) { YY_BUFFER_STATE b; if ( size < 2 || base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-1] != YY_END_OF_BUFFER_CHAR ) /* They forgot to leave room for the EOB's. */ return 0; b = (YY_BUFFER_STATE) calib_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in calib_yy_scan_buffer()" ); b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ b->yy_buf_pos = b->yy_ch_buf = base; b->yy_is_our_buffer = 0; b->yy_input_file = 0; b->yy_n_chars = b->yy_buf_size; b->yy_is_interactive = 0; b->yy_at_bol = 1; b->yy_fill_buffer = 0; b->yy_buffer_status = YY_BUFFER_NEW; calib_yy_switch_to_buffer(b ,yyscanner ); return b; } /** Setup the input buffer state to scan a string. The next call to calib_yylex() will * scan from a @e copy of @a str. * @param yystr a NUL-terminated string to scan * @param yyscanner The scanner object. * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use * calib_yy_scan_bytes() instead. */ YY_BUFFER_STATE calib_yy_scan_string (yyconst char * yystr , yyscan_t yyscanner) { return calib_yy_scan_bytes(yystr,strlen(yystr) ,yyscanner); } /** Setup the input buffer state to scan the given bytes. The next call to calib_yylex() will * scan from a @e copy of @a bytes. * @param yybytes the byte buffer to scan * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. * @param yyscanner The scanner object. * @return the newly allocated buffer state object. */ YY_BUFFER_STATE calib_yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len , yyscan_t yyscanner) { YY_BUFFER_STATE b; char *buf; yy_size_t n; yy_size_t i; /* Get memory for full buffer, including space for trailing EOB's. */ n = _yybytes_len + 2; buf = (char *) calib_yyalloc(n ,yyscanner ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in calib_yy_scan_bytes()" ); for ( i = 0; i < _yybytes_len; ++i ) buf[i] = yybytes[i]; buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; b = calib_yy_scan_buffer(buf,n ,yyscanner); if ( ! b ) YY_FATAL_ERROR( "bad buffer in calib_yy_scan_bytes()" ); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. */ b->yy_is_our_buffer = 1; return b; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner) { (void) fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = yyg->yy_hold_char; \ yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ yyg->yy_hold_char = *yyg->yy_c_buf_p; \ *yyg->yy_c_buf_p = '\0'; \ yyleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /** Get the user-defined data for this scanner. * @param yyscanner The scanner object. */ YY_EXTRA_TYPE calib_yyget_extra (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return yyextra; } /** Get the current line number. * @param yyscanner The scanner object. */ int calib_yyget_lineno (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if (! YY_CURRENT_BUFFER) return 0; return yylineno; } /** Get the current column number. * @param yyscanner The scanner object. */ int calib_yyget_column (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if (! YY_CURRENT_BUFFER) return 0; return yycolumn; } /** Get the input stream. * @param yyscanner The scanner object. */ FILE *calib_yyget_in (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return yyin; } /** Get the output stream. * @param yyscanner The scanner object. */ FILE *calib_yyget_out (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return yyout; } /** Get the length of the current token. * @param yyscanner The scanner object. */ yy_size_t calib_yyget_leng (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return yyleng; } /** Get the current token. * @param yyscanner The scanner object. */ char *calib_yyget_text (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return yytext; } /** Set the user-defined data. This data is never touched by the scanner. * @param user_defined The data to be associated with this scanner. * @param yyscanner The scanner object. */ void calib_yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yyextra = user_defined ; } /** Set the current line number. * @param line_number * @param yyscanner The scanner object. */ void calib_yyset_lineno (int line_number , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* lineno is only valid if an input buffer exists. */ if (! YY_CURRENT_BUFFER ) YY_FATAL_ERROR( "calib_yyset_lineno called with no buffer" ); yylineno = line_number; } /** Set the current column. * @param line_number * @param yyscanner The scanner object. */ void calib_yyset_column (int column_no , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* column is only valid if an input buffer exists. */ if (! YY_CURRENT_BUFFER ) YY_FATAL_ERROR( "calib_yyset_column called with no buffer" ); yycolumn = column_no; } /** Set the input stream. This does not discard the current * input buffer. * @param in_str A readable stream. * @param yyscanner The scanner object. * @see calib_yy_switch_to_buffer */ void calib_yyset_in (FILE * in_str , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yyin = in_str ; } void calib_yyset_out (FILE * out_str , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yyout = out_str ; } int calib_yyget_debug (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return yy_flex_debug; } void calib_yyset_debug (int bdebug , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yy_flex_debug = bdebug ; } /* Accessor methods for yylval and yylloc */ /* User-visible API */ /* calib_yylex_init is special because it creates the scanner itself, so it is * the ONLY reentrant function that doesn't take the scanner as the last argument. * That's why we explicitly handle the declaration, instead of using our macros. */ int calib_yylex_init(yyscan_t* ptr_yy_globals) { if (ptr_yy_globals == NULL){ errno = EINVAL; return 1; } *ptr_yy_globals = (yyscan_t) calib_yyalloc ( sizeof( struct yyguts_t ), NULL ); if (*ptr_yy_globals == NULL){ errno = ENOMEM; return 1; } /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); return yy_init_globals ( *ptr_yy_globals ); } /* calib_yylex_init_extra has the same functionality as calib_yylex_init, but follows the * convention of taking the scanner as the last argument. Note however, that * this is a *pointer* to a scanner, as it will be allocated by this call (and * is the reason, too, why this function also must handle its own declaration). * The user defined value in the first argument will be available to calib_yyalloc in * the yyextra field. */ int calib_yylex_init_extra(YY_EXTRA_TYPE yy_user_defined,yyscan_t* ptr_yy_globals ) { struct yyguts_t dummy_yyguts; calib_yyset_extra (yy_user_defined, &dummy_yyguts); if (ptr_yy_globals == NULL){ errno = EINVAL; return 1; } *ptr_yy_globals = (yyscan_t) calib_yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts ); if (*ptr_yy_globals == NULL){ errno = ENOMEM; return 1; } /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); calib_yyset_extra (yy_user_defined, *ptr_yy_globals); return yy_init_globals ( *ptr_yy_globals ); } static int yy_init_globals (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* Initialization is the same as for the non-reentrant scanner. * This function is called from calib_yylex_destroy(), so don't allocate here. */ yyg->yy_buffer_stack = 0; yyg->yy_buffer_stack_top = 0; yyg->yy_buffer_stack_max = 0; yyg->yy_c_buf_p = (char *) 0; yyg->yy_init = 0; yyg->yy_start = 0; yyg->yy_start_stack_ptr = 0; yyg->yy_start_stack_depth = 0; yyg->yy_start_stack = NULL; /* Defined in main.c */ #ifdef YY_STDINIT yyin = stdin; yyout = stdout; #else yyin = (FILE *) 0; yyout = (FILE *) 0; #endif /* For future reference: Set errno on error, since we are called by * calib_yylex_init() */ return 0; } /* calib_yylex_destroy is for both reentrant and non-reentrant scanners. */ int calib_yylex_destroy (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ calib_yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner ); YY_CURRENT_BUFFER_LVALUE = NULL; calib_yypop_buffer_state(yyscanner); } /* Destroy the stack itself. */ calib_yyfree(yyg->yy_buffer_stack ,yyscanner); yyg->yy_buffer_stack = NULL; /* Destroy the start condition stack. */ calib_yyfree(yyg->yy_start_stack ,yyscanner ); yyg->yy_start_stack = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next time * calib_yylex() is called, initialization will occur. */ yy_init_globals( yyscanner); /* Destroy the main struct (reentrant only). */ calib_yyfree ( yyscanner , yyscanner ); yyscanner = NULL; return 0; } /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *calib_yyalloc (yy_size_t size , yyscan_t yyscanner) { return (void *) malloc( size ); } void *calib_yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void calib_yyfree (void * ptr , yyscan_t yyscanner) { free( (char *) ptr ); /* see calib_yyrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 84 "../../comedilib/lib/calib_lex.l" comedilib-0.11.0/lib/filler.c0000644000000000000000000001716312416542105012606 00000000000000/* lib/filler.c functions to retrieve kernel data COMEDILIB - Linux Control and Measurement Device Interface Library Copyright (C) 1997-2001 David A. Schleef This library 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, version 2.1 of the License. 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 #include #include #include #include "libinternal.h" /* these functions download information from the comedi module. */ static int do_test_for_cmd(comedi_t *dev,unsigned int subdevice); static int do_test_for_insn(comedi_t *dev); static int do_test_for_insnlist(comedi_t *dev); static int do_test_for_insn_bits(comedi_t *dev,unsigned int subdevice); int get_subdevices(comedi_t *it) { int i,j; int ret; comedi_subdinfo *s; comedi_chaninfo ci; subdevice *r = NULL; s = calloc(it->n_subdevices, sizeof(comedi_subdinfo)); if(s == NULL) { debug_ptr(s); libc_error(); goto cleanup; } ret = comedi_ioctl(it->fd, COMEDI_SUBDINFO, s); if(ret < 0) { debug_int(ret); goto cleanup; } assert(it->subdevices == NULL); r = it->subdevices = calloc(it->n_subdevices, sizeof(subdevice)); if(r == NULL) { debug_ptr(r); libc_error(); goto cleanup; } it->has_insnlist_ioctl = do_test_for_insnlist(it); it->has_insn_ioctl = do_test_for_insn(it); for(i=0;in_subdevices;i++){ r[i].type = s[i].type; if(r[i].type==COMEDI_SUBD_UNUSED)continue; r[i].n_chan = s[i].n_chan; r[i].subd_flags = s[i].subd_flags; r[i].timer_type = s[i].timer_type; r[i].len_chanlist = s[i].len_chanlist; r[i].maxdata = s[i].maxdata; r[i].flags = s[i].flags; r[i].range_type = s[i].range_type; if(r[i].subd_flags&SDF_FLAGS){ r[i].flags_list = calloc(r[i].n_chan, sizeof(*r[i].flags_list)); if(r[i].flags_list == NULL){ debug_ptr(r[i].flags_list); libc_error(); goto cleanup; } } if(r[i].subd_flags&SDF_MAXDATA){ r[i].maxdata_list = calloc(r[i].n_chan, sizeof(*r[i].maxdata_list)); if(r[i].maxdata_list == NULL){ debug_ptr(r[i].maxdata_list); libc_error(); goto cleanup; } } if(r[i].subd_flags&SDF_RANGETYPE){ r[i].range_type_list = calloc(r[i].n_chan, sizeof(*r[i].range_type_list)); if(r[i].range_type_list == NULL){ debug_ptr(r[i].range_type_list); libc_error(); goto cleanup; } } ci.subdev = i; ci.flaglist = r[i].flags_list; ci.rangelist = r[i].range_type_list; ci.maxdata_list = r[i].maxdata_list; ret = comedi_ioctl(it->fd, COMEDI_CHANINFO, &ci); if(ret < 0){ debug_int(ret); goto cleanup; } if(r[i].subd_flags&SDF_RANGETYPE){ r[i].rangeinfo_list=calloc(r[i].n_chan, sizeof(*r[i].rangeinfo_list)); if(r[i].rangeinfo_list == NULL){ debug_ptr(r[i].rangeinfo_list); libc_error(); goto cleanup; } for(j=0;jfd,r[i].range_type_list[j]); if(r[i].rangeinfo_list[j] == NULL) goto cleanup; } }else{ r[i].rangeinfo=get_rangeinfo(it->fd,r[i].range_type); if(r[i].rangeinfo == NULL) goto cleanup; } r[i].has_cmd = do_test_for_cmd(it,i); switch(s[i].insn_bits_support) { case COMEDI_UNKNOWN_SUPPORT: if(it->has_insnlist_ioctl){ r[i].has_insn_bits = do_test_for_insn_bits(it,i); }else{ r[i].has_insn_bits = 0; } break; case COMEDI_SUPPORTED: r[i].has_insn_bits = 1; break; case COMEDI_UNSUPPORTED: r[i].has_insn_bits = 0; break; default: assert(0); } } free(s); return 0; cleanup: if(s) free(s); if(r){ for(i=0;in_subdevices;i++){ if(r[i].flags_list) free(r[i].flags_list); if(r[i].maxdata_list) free(r[i].maxdata_list); if(r[i].range_type_list) free(r[i].range_type_list); if(r[i].rangeinfo_list){ for(j=0;jsubdevices = NULL; } return -1; } comedi_range *get_rangeinfo(int fd,unsigned int range_type) { comedi_krange *kr; comedi_range *r; comedi_rangeinfo ri; int ret; int i; kr = calloc(RANGE_LENGTH(range_type), sizeof(comedi_krange)); if(kr == NULL) { debug_ptr(kr); libc_error(); return NULL; } r = calloc(RANGE_LENGTH(range_type), sizeof(comedi_range)); if(r == NULL) { debug_ptr(r); libc_error(); free(kr); return NULL; } memset(&ri, 0, sizeof(ri)); ri.range_type = range_type; ri.range_ptr = kr; ret = comedi_ioctl(fd, COMEDI_RANGEINFO, &ri); if(ret<0){ fprintf(stderr,"ioctl(%d,COMEDI_RANGEINFO,0x%08x,%p)\n",fd,range_type,kr); free(r); free(kr); return NULL; } for(i=0;idevinfo.version_code >= COMEDI_VERSION_CODE(0,7,57)){ if(dev->subdevices[subdevice].subd_flags & SDF_CMD) return 1; return 0; }else{ comedi_cmd it; int ret; memset(&it,0,sizeof(it)); it.subdev = subdevice; it.start_src = TRIG_ANY; it.scan_begin_src = TRIG_ANY; it.convert_src = TRIG_ANY; it.scan_end_src = TRIG_ANY; it.stop_src = TRIG_ANY; ret = comedi_ioctl(dev->fd, COMEDI_CMDTEST, &it); if(ret<0 && errno==EIO){ return 0; } if(ret<0){ fprintf(stderr,"BUG in do_test_for_cmd()\n"); return 0; } return 1; } } static int do_test_for_insnlist(comedi_t *dev) { comedi_insn insn; comedi_insnlist il; lsampl_t data[2]; int ret; il.n_insns = 1; il.insns = &insn; memset(&insn,0,sizeof(insn)); insn.insn = INSN_GTOD; insn.n = 2; insn.data = data; memset(insn.data, 0, insn.n * sizeof(insn.data[0])); ret = comedi_ioctl(dev->fd, COMEDI_INSNLIST, &il); if(ret<0){ if(errno!=EIO){ fprintf(stderr,"BUG in do_test_for_insnlist()\n"); } return 0; } return 1; } /* the COMEID_INSN ioctl was introduced in comedi-0.7.60 */ static int do_test_for_insn(comedi_t *dev) { comedi_insn insn; lsampl_t data[2]; int ret; memset(&insn,0,sizeof(insn)); insn.insn = INSN_GTOD; insn.n = 2; insn.data = data; memset(insn.data, 0, insn.n * sizeof(insn.data[0])); ret = comedi_ioctl(dev->fd, COMEDI_INSN, &insn); if(ret<0){ if(errno!=EIO){ fprintf(stderr,"BUG in do_test_for_insn()\n"); } return 0; } return 1; } static int do_test_for_insn_bits(comedi_t *dev,unsigned int subdevice) { comedi_insn insn; comedi_insnlist il; lsampl_t data[2]; int ret; if(dev->subdevices[subdevice].maxdata != 1) return 0; memset(&insn,0,sizeof(insn)); il.n_insns = 1; il.insns = &insn; insn.insn = INSN_BITS; insn.n = 2; insn.data = data; insn.subdev = subdevice; memset(data, 0, insn.n * sizeof(data[0])); ret = comedi_ioctl(dev->fd, COMEDI_INSNLIST, &il); if(ret<0 && (errno==EINVAL || errno==EIO)){ return 0; } if(ret<0){ perror("BUG in do_test_for_insn_bits()\n"); return 0; } return 1; } comedilib-0.11.0/lib/libinternal.h0000644000000000000000000000740112416542105013633 00000000000000/* lib/libinternal.h internal definitions for comedilib COMEDILIB - Linux Control and Measurement Device Interface Library Copyright (C) 1997-2001 David A. Schleef This library 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, version 2.1 of the License. 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 _LIBINTERNAL_H #define _LIBINTERNAL_H #define _COMEDILIB_DEPRECATED #include "config.h" #include "comedilib.h" #include "comedi.h" #include "comedi_errno.h" #include #include #include #ifdef I18N #include #endif /* This indicates a symbol that should not be exported as part of * the library. But I don't know how to make it useful yet. */ #define INTERNAL /* gettext()ization */ #ifdef I18N #define GETTEXT(a) gettext((a)) #else #define GETTEXT(a) (a) #endif #define _s(a) (a) #define debug_ptr(a) if(!(a))fprintf(stderr," ** NULL pointer: " __FILE__ ", line %d\n",__LINE__); #define debug_int(a) if((a)<0)fprintf(stderr," ** error: " __FILE__ ", line %d\n",__LINE__); #define COMEDILIB_DEBUG(level,format,args...) do{if(__comedi_loglevel>=(level))fprintf(stderr,"%s: " format, __FUNCTION__ , ##args);}while(0) #define COMEDILIB_MAGIC 0xc001dafe /* handle versioning */ #define EXPORT_SYMBOL(a,b) __asm__(".symver " #a "," #a "@v" #b ) #define EXPORT_ALIAS_VER(a,b,c) __asm__(".symver " #a "," #b "@v" #c ) #define EXPORT_ALIAS_DEFAULT(a,b,c) __asm__(".symver " #a "," #b "@@v" #c ) extern int __comedi_init; extern int __comedi_loglevel; extern TLS int __comedi_errno; #if 0 #define libc_error() (__comedi_errno=errno) #define internal_error(a) (__comedi_errno=(a)) #else void libc_error(void); void internal_error(int error_number); #endif typedef struct subdevice_struct subdevice; typedef struct device_struct device; typedef struct calib_yyparse_private calib_yyparse_private_t; struct comedi_t_struct{ int magic; int fd; int n_subdevices; comedi_devinfo devinfo; subdevice *subdevices; unsigned int has_insnlist_ioctl; unsigned int has_insn_ioctl; }; struct subdevice_struct{ unsigned int type; unsigned int n_chan; unsigned int subd_flags; unsigned int timer_type; unsigned int len_chanlist; lsampl_t maxdata; unsigned int flags; unsigned int range_type; lsampl_t *maxdata_list; unsigned int *range_type_list; unsigned int *flags_list; comedi_range *rangeinfo; comedi_range **rangeinfo_list; unsigned int has_cmd; unsigned int has_insn_bits; int cmd_mask_errno; comedi_cmd *cmd_mask; }; #define comedi_ioctl _comedi_ioctl //#define comedi_ioctl _comedi_ioctl_debug int _comedi_ioctl(int fd, int request, void *arg); int _comedi_ioctl_debug(int, int, void*); /* filler routines */ int get_subdevices(comedi_t *it); comedi_range *get_rangeinfo(int fd,unsigned int range_type); /* validators */ int valid_dev(comedi_t *it); int valid_subd(comedi_t *it,unsigned int subdevice); int valid_chan(comedi_t *it,unsigned int subdevice,unsigned int chan); /* used by range.c, was in comedilib.h but apparently deprecated so I put it here - fmhess */ int comedi_get_rangetype(comedi_t *it,unsigned int subdevice,unsigned int chan); #define YY_DECL int calib_yylex(YYSTYPE *calib_lvalp, yyscan_t yyscanner) #endif comedilib-0.11.0/lib/sv.c0000644000000000000000000000741612416542105011761 00000000000000/* lib/sv.c functions for slowly varying inputs COMEDILIB - Linux Control and Measurement Device Interface Library Copyright (C) 1997-2001 David A. Schleef This library 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, version 2.1 of the License. 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 #include #include #include "libinternal.h" int sv_measure_l(comedi_sv_t *it,double *data); int sv_measure_s(comedi_sv_t *it,double *data); EXPORT_ALIAS_DEFAULT(_comedi_sv_init,comedi_sv_init,0.7.18); int _comedi_sv_init(comedi_sv_t *it,comedi_t *dev,unsigned int subd,unsigned int chan) { if(!valid_chan(dev,subd,chan))return -1; if(!it)return -1; memset(it,0,sizeof(*it)); it->dev=dev; it->subdevice=subd; it->chan=chan; it->n=100; return comedi_sv_update(it); } EXPORT_ALIAS_DEFAULT(_comedi_sv_update,comedi_sv_update,0.7.18); int _comedi_sv_update(comedi_sv_t *it) { if(!it)return -1; if(!valid_chan(it->dev,it->subdevice,it->chan))return -1; it->maxdata=comedi_get_maxdata(it->dev,it->subdevice,it->chan); /* check current range policy */ /* check n */ return 0; } EXPORT_ALIAS_DEFAULT(_comedi_sv_measure,comedi_sv_measure,0.7.18); int _comedi_sv_measure(comedi_sv_t *it,double *data) { if(!it)return -1; if(!valid_subd(it->dev,it->subdevice))return -1; if(it->dev->subdevices[it->subdevice].subd_flags & SDF_LSAMPL){ return sv_measure_l(it,data); }else{ return sv_measure_s(it,data); } } int sv_measure_l(comedi_sv_t *it,double *data) { comedi_trig t; int ret=0; lsampl_t *val; unsigned int chan; comedi_range *rng; double sum; int i; int n; val=malloc(sizeof(*val)*it->n); if(!val){ libc_error(); return -1; } chan=CR_PACK(it->chan,it->range,it->aref); t.subdev=it->subdevice; t.mode=0; t.flags=TRIG_DITHER; t.n_chan=1; t.chanlist=&chan; t.trigsrc=0; t.trigvar=0; t.trigvar1=0; rng=comedi_get_range(it->dev,it->subdevice,it->chan,it->range); for(n=0;nn;){ t.data=(void *)(val+n); t.n=it->n-n; i = comedi_ioctl(it->dev->fd, COMEDI_TRIG, &t); if(i<=0){ ret=i; goto out; } n+=i; } sum=0; for(i=0;in;i++){ sum+=comedi_to_phys(val[i],rng,it->maxdata); } *data=sum/it->n; out: free(val); return ret; } /* yes, these functions are _almost_ exactly the same... */ int sv_measure_s(comedi_sv_t *it,double *data) { comedi_trig t; int ret=0; sampl_t *val; unsigned int chan; comedi_range *rng; double sum; int i; int n; val=malloc(sizeof(*val)*it->n); if(!val){ libc_error(); return -1; } chan=CR_PACK(it->chan,it->range,it->aref); t.subdev=it->subdevice; t.mode=0; t.flags=TRIG_DITHER; t.n_chan=1; t.chanlist=&chan; t.data=val; t.n=it->n; t.trigsrc=0; t.trigvar=0; t.trigvar1=0; rng=comedi_get_range(it->dev,it->subdevice,it->chan,it->range); for(n=0;nn;){ t.data=val+n; t.n=it->n-n; i = comedi_ioctl(it->dev->fd, COMEDI_TRIG, &t); if(i<=0){ ret=i; goto out; } n+=i; } sum=0; for(i=0;in;i++){ sum+=comedi_to_phys(val[i],rng,it->maxdata); } *data=sum/it->n; out: free(val); return ret; } comedilib-0.11.0/lib/cmd.c0000644000000000000000000001107612416542105012071 00000000000000/* lib/cmd.c support functions for commands COMEDILIB - Linux Control and Measurement Device Interface Library Copyright (C) 1997-2001 David A. Schleef This library 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, version 2.1 of the License. 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 #include #include #include #include "libinternal.h" EXPORT_ALIAS_DEFAULT(_comedi_get_cmd_src_mask,comedi_get_cmd_src_mask,0.7.18); int _comedi_get_cmd_src_mask(comedi_t *it,unsigned int subd,comedi_cmd *cmd) { subdevice *s; int ret; if(!valid_subd(it,subd))return -1; s=it->subdevices+subd; if(s->cmd_mask_errno){ errno = s->cmd_mask_errno; return -1; } if(!s->cmd_mask){ comedi_cmd *mask; mask = malloc(sizeof(comedi_cmd)); if(!mask){ libc_error(); return -1; } memset(mask,0,sizeof(*cmd)); mask->subdev = subd; mask->flags = 0; mask->start_src = TRIG_ANY; mask->scan_begin_src = TRIG_ANY; mask->convert_src = TRIG_ANY; mask->scan_end_src = TRIG_ANY; mask->stop_src = TRIG_ANY; s->cmd_mask = mask; ret = comedi_command_test(it,mask); if(ret<0){ s->cmd_mask_errno = errno; return -1; } } *cmd=*s->cmd_mask; return 0; } static int __generic_timed(comedi_t *it, unsigned s, comedi_cmd *cmd, unsigned chanlist_len, unsigned scan_period_ns) { int ret; unsigned convert_period_ns; if(chanlist_len < 1) return -EINVAL; ret = comedi_get_cmd_src_mask(it,s,cmd); if(ret<0)return ret; __comedi_errno = ENOTSUPPORTED; if(cmd->start_src&TRIG_NOW){ cmd->start_src=TRIG_NOW; cmd->start_arg=0; }else if(cmd->start_src&TRIG_INT){ cmd->start_src=TRIG_INT; cmd->start_arg=0; }else{ COMEDILIB_DEBUG(3,"can't find good start_src\n"); return -1; } convert_period_ns = (scan_period_ns + chanlist_len / 2) / chanlist_len; if((cmd->convert_src & TRIG_TIMER) && (cmd->scan_begin_src & TRIG_FOLLOW)) { cmd->convert_src = TRIG_TIMER; cmd->convert_arg = convert_period_ns; cmd->scan_begin_src = TRIG_FOLLOW; cmd->scan_begin_arg = 0; }else if((cmd->convert_src & TRIG_NOW) && (cmd->scan_begin_src & TRIG_TIMER)) { cmd->convert_src = TRIG_NOW; cmd->convert_arg = 0; cmd->scan_begin_src = TRIG_TIMER; cmd->scan_begin_arg = scan_period_ns; }else if((cmd->convert_src & TRIG_TIMER) && (cmd->scan_begin_src & TRIG_TIMER)) { cmd->convert_src = TRIG_TIMER; cmd->convert_arg = convert_period_ns; cmd->scan_begin_src = TRIG_TIMER; cmd->scan_begin_arg = scan_period_ns; }else{ COMEDILIB_DEBUG(3,"comedi_get_cmd_generic_timed: can't do timed?\n"); return -1; } cmd->scan_end_src = TRIG_COUNT; cmd->scan_end_arg = chanlist_len; if(cmd->stop_src&TRIG_COUNT){ cmd->stop_src=TRIG_COUNT; cmd->stop_arg=2; }else if(cmd->stop_src&TRIG_NONE){ cmd->stop_src=TRIG_NONE; cmd->stop_arg=0; }else{ COMEDILIB_DEBUG(3,"comedi_get_cmd_generic_timed: can't find a good stop_src\n"); return -1; } cmd->chanlist_len = chanlist_len; ret=comedi_command_test(it,cmd); COMEDILIB_DEBUG(3,"comedi_get_cmd_generic_timed: test 1 returned %d\n",ret); if(ret==3){ /* good */ ret=comedi_command_test(it,cmd); COMEDILIB_DEBUG(3,"comedi_get_cmd_generic_timed: test 2 returned %d\n",ret); } if(ret==4 || ret==0){ __comedi_errno = 0; return 0; } return -1; } EXPORT_ALIAS_VER(_comedi_get_cmd_generic_timed_obsolete,comedi_get_cmd_generic_timed,0.7.18); int _comedi_get_cmd_generic_timed_obsolete(comedi_t *it,unsigned int subd,comedi_cmd *cmd, unsigned int ns) { if(!valid_subd(it,subd))return -1; return __generic_timed(it, subd, cmd, 1, ns); } EXPORT_ALIAS_DEFAULT(_comedi_get_cmd_generic_timed,comedi_get_cmd_generic_timed,0.9.0); int _comedi_get_cmd_generic_timed(comedi_t *it, unsigned subd, comedi_cmd *cmd, unsigned chanlist_len, unsigned scan_period_ns) { if(!valid_subd(it,subd)) return -1; return __generic_timed(it, subd, cmd, chanlist_len, scan_period_ns); } comedilib-0.11.0/lib/error.c0000644000000000000000000000556012416542105012460 00000000000000/* lib/error.c error functions and data COMEDILIB - Linux Control and Measurement Device Interface Library Copyright (C) 1997-2001 David A. Schleef This library 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, version 2.1 of the License. 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 "libinternal.h" #include #include char *__comedilib_error_strings[]={ _s("No error"), _s("Unknown error"), _s("Bad comedi_t structure"), _s("Invalid subdevice"), _s("Invalid channel"), _s("Buffer overflow"), _s("Buffer underflow"), _s("Command not supported"), _s("Not supported"), }; #define n_errors (sizeof(__comedilib_error_strings)/sizeof(void *)) int __comedi_loglevel=1; TLS int __comedi_errno=0; EXPORT_ALIAS_DEFAULT(_comedi_loglevel,comedi_loglevel,0.7.18); int _comedi_loglevel(int loglevel) { int old_loglevel=__comedi_loglevel; __comedi_loglevel=loglevel; return old_loglevel; } EXPORT_ALIAS_DEFAULT(_comedi_errno,comedi_errno,0.7.18); int _comedi_errno(void) { return __comedi_errno; } EXPORT_ALIAS_DEFAULT(_comedi_strerror,comedi_strerror,0.7.18); const char* _comedi_strerror(int errnum) { if(errnum=COMEDI_NOERROR+n_errors) return strerror(errnum); return GETTEXT(__comedilib_error_strings[errnum-COMEDI_NOERROR]); } EXPORT_ALIAS_DEFAULT(_comedi_perror,comedi_perror,0.7.18); void _comedi_perror(const char *s) { if(__comedi_loglevel>=3){ fprintf(stderr,"comedi_perror(): __comedi_errno=%d\n",__comedi_errno); } if(!s)s="comedilib"; fprintf(stderr,"%s: %s\n",s,comedi_strerror(__comedi_errno)); } void libc_error(void) { __comedi_errno=errno; if(__comedi_loglevel>=2){ comedi_perror("libc error"); } } void internal_error(int err) { __comedi_errno=err; if(__comedi_loglevel>=2){ comedi_perror("internal error"); } } int valid_dev(comedi_t *it) { if(!it || it->magic!=COMEDILIB_MAGIC){ internal_error(EBAD_CT); return 0; } return 1; } int valid_subd(comedi_t *it,unsigned int subd) { if(!valid_dev(it))return 0; if(subd>=it->n_subdevices){ internal_error(EINVAL_SUBD); return 0; } return 1; } int valid_chan(comedi_t *it,unsigned int subd,unsigned int chan) { if(!valid_subd(it,subd))return 0; if(chan>=it->subdevices[subd].n_chan){ internal_error(EINVAL_CHAN); return 0; } return 1; } comedilib-0.11.0/lib/calib_yacc.c0000644000000000000000000017674112565342011013411 00000000000000/* A Bison parser, made by GNU Bison 3.0.2. */ /* Bison implementation for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "3.0.2" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 1 /* Push parsers. */ #define YYPUSH 0 /* Pull parsers. */ #define YYPULL 1 /* Substitute the variable and function names. */ #define yyparse calib_yyparse #define yylex calib_yylex #define yyerror calib_yyerror #define yydebug calib_yydebug #define yynerrs calib_yynerrs /* Copy the first part of user declarations. */ #line 1 "../../comedilib/lib/calib_yacc.y" /* yacc.c:339 */ /* lib/calib_yacc.y code for parsing calibration file, generated by bison Copyright (C) 2003 Frank Mori Hess This library 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, version 2.1 of the License. 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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. */ #define _GNU_SOURCE #include #include "libinternal.h" #include #include #include #define YYERROR_VERBOSE #define LEX_PARAM parse_arg->yyscanner #include "calib_yacc.h" #include "calib_lex.h" enum polynomial_direction { POLYNOMIAL_TO_PHYS, POLYNOMIAL_FROM_PHYS }; struct calib_yyparse_private { yyscan_t yyscanner; comedi_calibration_t *parsed_file; comedi_caldac_t caldac; int cal_index; unsigned num_coefficients; comedi_polynomial_t polynomial; }; YY_DECL; static void free_calibration_setting( comedi_calibration_setting_t *setting ) { if( setting->channels ); { free( setting->channels ); setting->channels = NULL; setting->num_channels = 0; } if( setting->ranges ); { free( setting->ranges ); setting->ranges = NULL; setting->num_ranges = 0; } setting->num_arefs = 0; if( setting->caldacs ); { free( setting->caldacs ); setting->caldacs = NULL; setting->num_caldacs = 0; } if(setting->soft_calibration.to_phys) { free(setting->soft_calibration.to_phys); setting->soft_calibration.to_phys = NULL; } if(setting->soft_calibration.from_phys) { free(setting->soft_calibration.from_phys); setting->soft_calibration.from_phys = NULL; } } static void free_settings( comedi_calibration_t *file_contents ) { int i; if( file_contents->settings == NULL ) return; for( i = 0; i < file_contents->num_settings; i++ ) { free_calibration_setting( &file_contents->settings[ i ] ); } free(file_contents->settings); file_contents->settings = NULL; } static int add_calibration_setting( comedi_calibration_t *file_contents ) { comedi_calibration_setting_t *temp; temp = realloc( file_contents->settings, ( file_contents->num_settings + 1 ) * sizeof( comedi_calibration_setting_t ) ); if( temp == NULL ) { libc_error(); fprintf(stderr, "%s: realloc failed to allocate memory.\n", __FUNCTION__); return -1; } file_contents->settings = temp; memset( &file_contents->settings[ file_contents->num_settings ], 0, sizeof( comedi_calibration_setting_t ) ); file_contents->num_settings++; return 0; } static comedi_calibration_setting_t* current_setting( calib_yyparse_private_t *priv ) { int retval; while( priv->cal_index >= priv->parsed_file->num_settings ) { retval = add_calibration_setting( priv->parsed_file ); if( retval < 0 ) return NULL; } return &priv->parsed_file->settings[ priv->cal_index ]; } static int add_channel( calib_yyparse_private_t *priv, int channel ) { unsigned *temp; comedi_calibration_setting_t *setting; setting = current_setting( priv ); if( setting == NULL ) return -1; temp = realloc( setting->channels, ( setting->num_channels + 1 ) * sizeof(unsigned) ); if( temp == NULL ) { libc_error(); fprintf(stderr, "%s: realloc failed to allocate memory.\n", __FUNCTION__); return -1; } setting->channels = temp; setting->channels[ setting->num_channels++ ] = channel; return 0; } static int add_range( calib_yyparse_private_t *priv, int range ) { unsigned *temp; comedi_calibration_setting_t *setting; setting = current_setting( priv ); if( setting == NULL ) return -1; temp = realloc( setting->ranges, ( setting->num_ranges + 1 ) * sizeof(unsigned) ); if( temp == NULL ) { libc_error(); fprintf(stderr, "%s: realloc failed to allocate memory.\n", __FUNCTION__); return -1; } setting->ranges = temp; setting->ranges[ setting->num_ranges++ ] = range; return 0; } static int add_aref( calib_yyparse_private_t *priv, int aref ) { comedi_calibration_setting_t *setting; setting = current_setting( priv ); if( setting == NULL ) return -1; if( setting->num_arefs >= sizeof( setting->arefs ) / sizeof( setting->arefs[ 0 ] ) ) return -1; setting->arefs[ setting->num_arefs++ ] = aref; return 0; } static int add_caldac( calib_yyparse_private_t *priv, comedi_caldac_t caldac ) { comedi_caldac_t *temp; comedi_calibration_setting_t *setting; setting = current_setting( priv ); if( setting == NULL ) return -1; temp = realloc( setting->caldacs, ( setting->num_caldacs + 1 ) * sizeof( comedi_caldac_t ) ); if( temp == NULL ) { libc_error(); fprintf(stderr, "%s: realloc failed to allocate memory.\n", __FUNCTION__); return -1; } setting->caldacs = temp; setting->caldacs[ setting->num_caldacs++ ] = caldac; return 0; } static int add_polynomial(calib_yyparse_private_t *priv, enum polynomial_direction polynomial_direction) { comedi_calibration_setting_t *setting; setting = current_setting( priv ); if( setting == NULL ) { fprintf(stderr, "%s: current_setting returned NULL\n", __FUNCTION__); return -1; } if(priv->num_coefficients < 1) { fprintf(stderr, "%s: polynomial has no coefficients.\n", __FUNCTION__); return -1; } if(polynomial_direction == POLYNOMIAL_TO_PHYS) { if(setting->soft_calibration.to_phys) return -1; setting->soft_calibration.to_phys = malloc(sizeof(comedi_polynomial_t)); if(!setting->soft_calibration.to_phys){ libc_error(); fprintf(stderr, "%s: malloc failed to allocate memory.\n", __FUNCTION__); return -1; } *setting->soft_calibration.to_phys = priv->polynomial; }else { if(setting->soft_calibration.from_phys) return -1; setting->soft_calibration.from_phys = malloc(sizeof(comedi_polynomial_t)); if(!setting->soft_calibration.from_phys){ libc_error(); fprintf(stderr, "%s: malloc failed to allocate memory.\n", __FUNCTION__); return -1; } *setting->soft_calibration.from_phys = priv->polynomial; } return 0; } static int add_polynomial_coefficient(calib_yyparse_private_t *priv, double coefficient) { if(priv->num_coefficients >= COMEDI_MAX_NUM_POLYNOMIAL_COEFFICIENTS) { fprintf(stderr, "too many coefficients for polynomial,\n"); fprintf(stderr, "num_coefficients=%i, max is %i .\n", priv->num_coefficients, COMEDI_MAX_NUM_POLYNOMIAL_COEFFICIENTS); return -1; } priv->polynomial.order = priv->num_coefficients; priv->polynomial.coefficients[priv->num_coefficients++] = coefficient; return 0; } static comedi_calibration_t* alloc_calib_parse( void ) { comedi_calibration_t *file_contents; file_contents = malloc( sizeof( *file_contents ) ); if( file_contents == NULL ) return file_contents; memset( file_contents, 0, sizeof( *file_contents ) ); return file_contents; } EXPORT_ALIAS_DEFAULT(_comedi_cleanup_calibration,comedi_cleanup_calibration,0.7.20); extern void _comedi_cleanup_calibration( comedi_calibration_t *file_contents ) { if(file_contents == NULL) return; if( file_contents->driver_name ) { free( file_contents->driver_name ); file_contents->driver_name = NULL; } if( file_contents->board_name ) { free( file_contents->board_name ); file_contents->board_name = NULL; } free_settings( file_contents ); free( file_contents ); } static comedi_polynomial_t* alloc_inverse_linear_polynomial(const comedi_polynomial_t *polynomial) { comedi_polynomial_t *inverse; if(polynomial->order != 1) return NULL; inverse = malloc(sizeof(comedi_polynomial_t)); if(!inverse){ libc_error(); return NULL; } memset(inverse, 0, sizeof(comedi_polynomial_t)); inverse->order = 1; inverse->expansion_origin = polynomial->coefficients[0]; inverse->coefficients[0] = polynomial->expansion_origin; inverse->coefficients[1] = 1. / polynomial->coefficients[1]; if(isfinite(inverse->coefficients[1]) == 0) { free(inverse); return NULL; } return inverse; } static void fill_inverse_linear_polynomials(comedi_calibration_t *calibration) { unsigned i; for(i = 0; i < calibration->num_settings; ++i) { if(calibration->settings[i].soft_calibration.to_phys) { if(calibration->settings[i].soft_calibration.from_phys == NULL) { calibration->settings[i].soft_calibration.from_phys = alloc_inverse_linear_polynomial(calibration->settings[i].soft_calibration.to_phys); } }else if(calibration->settings[i].soft_calibration.from_phys) { calibration->settings[i].soft_calibration.to_phys = alloc_inverse_linear_polynomial(calibration->settings[i].soft_calibration.from_phys); } } } static void yyerror(calib_yyparse_private_t *parse_arg, const char *s) { fprintf(stderr, "%s\n", s); } #line 411 "../../comedilib/lib/calib_yacc.c" /* yacc.c:339 */ # ifndef YY_NULLPTR # if defined __cplusplus && 201103L <= __cplusplus # define YY_NULLPTR nullptr # else # define YY_NULLPTR 0 # endif # endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 0 #endif /* In a future release of Bison, this section will be replaced by #include "calib_yacc.h". */ #ifndef YY_CALIB_YY_COMEDILIB_LIB_CALIB_YACC_H_INCLUDED # define YY_CALIB_YY_COMEDILIB_LIB_CALIB_YACC_H_INCLUDED /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif #if YYDEBUG extern int calib_yydebug; #endif /* Token type. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE enum yytokentype { T_DRIVER_NAME = 258, T_BOARD_NAME = 259, T_CALIBRATIONS = 260, T_SUBDEVICE = 261, T_CHANNELS = 262, T_RANGES = 263, T_AREFS = 264, T_CALDACS = 265, T_CHANNEL = 266, T_VALUE = 267, T_NUMBER = 268, T_STRING = 269, T_COEFFICIENTS = 270, T_EXPANSION_ORIGIN = 271, T_SOFTCAL_TO_PHYS = 272, T_SOFTCAL_FROM_PHYS = 273, T_ASSIGN = 274, T_FLOAT = 275 }; #endif /* Tokens. */ #define T_DRIVER_NAME 258 #define T_BOARD_NAME 259 #define T_CALIBRATIONS 260 #define T_SUBDEVICE 261 #define T_CHANNELS 262 #define T_RANGES 263 #define T_AREFS 264 #define T_CALDACS 265 #define T_CHANNEL 266 #define T_VALUE 267 #define T_NUMBER 268 #define T_STRING 269 #define T_COEFFICIENTS 270 #define T_EXPANSION_ORIGIN 271 #define T_SOFTCAL_TO_PHYS 272 #define T_SOFTCAL_FROM_PHYS 273 #define T_ASSIGN 274 #define T_FLOAT 275 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE YYSTYPE; union YYSTYPE { #line 347 "../../comedilib/lib/calib_yacc.y" /* yacc.c:355 */ int ival; double dval; char *sval; #line 497 "../../comedilib/lib/calib_yacc.c" /* yacc.c:355 */ }; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 #endif int calib_yyparse (calib_yyparse_private_t *parse_arg); #endif /* !YY_CALIB_YY_COMEDILIB_LIB_CALIB_YACC_H_INCLUDED */ /* Copy the second part of user declarations. */ #line 511 "../../comedilib/lib/calib_yacc.c" /* yacc.c:358 */ #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #else typedef signed char yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(Msgid) dgettext ("bison-runtime", Msgid) # endif # endif # ifndef YY_ # define YY_(Msgid) Msgid # endif #endif #ifndef YY_ATTRIBUTE # if (defined __GNUC__ \ && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C # define YY_ATTRIBUTE(Spec) __attribute__(Spec) # else # define YY_ATTRIBUTE(Spec) /* empty */ # endif #endif #ifndef YY_ATTRIBUTE_PURE # define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) #endif #ifndef YY_ATTRIBUTE_UNUSED # define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) #endif #if !defined _Noreturn \ && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) # if defined _MSC_VER && 1200 <= _MSC_VER # define _Noreturn __declspec (noreturn) # else # define _Noreturn YY_ATTRIBUTE ((__noreturn__)) # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(E) ((void) (E)) #else # define YYUSE(E) /* empty */ #endif #if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") # define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else # define YY_INITIAL_VALUE(Value) Value #endif #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_END #endif #ifndef YY_INITIAL_VALUE # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS # include /* INFRINGES ON USER NAME SPACE */ /* Use EXIT_SUCCESS as a witness for stdlib.h. */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's 'empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined EXIT_SUCCESS \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined EXIT_SUCCESS void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined EXIT_SUCCESS void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss_alloc; YYSTYPE yyvs_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (0) #endif #if defined YYCOPY_NEEDED && YYCOPY_NEEDED /* Copy COUNT objects from SRC to DST. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(Dst, Src, Count) \ __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) # else # define YYCOPY(Dst, Src, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (Dst)[yyi] = (Src)[yyi]; \ } \ while (0) # endif # endif #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ #define YYFINAL 9 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 91 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 26 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 21 /* YYNRULES -- Number of rules. */ #define YYNRULES 55 /* YYNSTATES -- Number of states. */ #define YYNSTATES 109 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 275 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM as returned by yylex, without out-of-bounds checking. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 23, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 24, 2, 25, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 21, 2, 22, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { 0, 364, 364, 365, 373, 374, 375, 378, 383, 388, 391, 392, 393, 396, 397, 398, 401, 408, 409, 410, 411, 412, 417, 424, 425, 426, 429, 432, 433, 434, 437, 440, 441, 442, 445, 448, 449, 450, 453, 454, 455, 458, 459, 460, 463, 464, 465, 468, 469, 472, 473, 474, 477, 481, 487, 491 }; #endif #if YYDEBUG || YYERROR_VERBOSE || 0 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "T_DRIVER_NAME", "T_BOARD_NAME", "T_CALIBRATIONS", "T_SUBDEVICE", "T_CHANNELS", "T_RANGES", "T_AREFS", "T_CALDACS", "T_CHANNEL", "T_VALUE", "T_NUMBER", "T_STRING", "T_COEFFICIENTS", "T_EXPANSION_ORIGIN", "T_SOFTCAL_TO_PHYS", "T_SOFTCAL_FROM_PHYS", "T_ASSIGN", "T_FLOAT", "'{'", "'}'", "','", "'['", "']'", "$accept", "input", "hash", "hash_element", "calibrations_array", "calibration_setting", "calibration_setting_element", "channels_array", "channel", "ranges_array", "range", "arefs_array", "aref", "caldacs_array", "caldac", "caldac_element", "polynomial", "polynomial_element", "coefficient_array", "coefficient", "expansion_origin", YY_NULLPTR }; #endif # ifdef YYPRINT /* YYTOKNUM[NUM] -- (External) token number corresponding to the (internal) symbol number NUM (which must be that of a token). */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 123, 125, 44, 91, 93 }; # endif #define YYPACT_NINF -47 #define yypact_value_is_default(Yystate) \ (!!((Yystate) == (-47))) #define YYTABLE_NINF -1 #define yytable_value_is_error(Yytable_value) \ 0 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ static const yytype_int8 yypact[] = { 0, -47, 22, 7, -10, -8, -7, -6, -1, -47, 14, 15, 6, -47, 22, -47, -47, 10, -47, -4, 8, 13, 17, 18, 19, 20, 21, 23, 24, 11, -47, 28, 25, 26, 27, 29, 31, 33, 32, -4, -47, 30, 34, 35, 36, 4, 4, 10, -47, -47, 37, 38, -47, 39, 40, -47, 41, 42, 12, 43, 48, 50, 49, 47, 51, -47, -47, 30, -47, 34, -47, 35, 53, 55, 56, 54, 57, -47, 58, -5, -47, 4, -47, -47, -47, -47, 45, 46, 64, 60, 12, -3, -47, -47, -47, -47, -47, -47, -47, 36, -47, -47, -47, 59, 62, -47, -47, -3, -47 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. Performed when YYTABLE does not specify something else to do. Zero means the default is an error. */ static const yytype_uint8 yydefact[] = { 0, 3, 4, 0, 0, 0, 0, 0, 5, 1, 0, 0, 0, 2, 4, 7, 8, 10, 6, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 9, 0, 0, 0, 0, 0, 0, 0, 11, 13, 16, 23, 27, 31, 35, 44, 44, 10, 15, 26, 0, 24, 30, 0, 28, 34, 0, 32, 38, 0, 0, 0, 0, 45, 0, 12, 17, 23, 18, 27, 19, 31, 0, 0, 0, 0, 39, 20, 0, 0, 21, 44, 22, 25, 29, 33, 0, 0, 0, 36, 38, 49, 55, 54, 48, 46, 41, 42, 43, 35, 40, 53, 52, 0, 50, 37, 47, 49, 51 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { -47, -47, 65, -47, -2, 5, -47, -11, -47, -9, -47, 16, -47, -21, 1, -47, -46, -47, -26, -47, -47 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { -1, 3, 7, 8, 20, 28, 29, 50, 51, 53, 54, 56, 57, 59, 75, 76, 62, 63, 103, 104, 94 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule whose number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_uint8 yytable[] = { 64, 1, 21, 22, 23, 24, 25, 9, 92, 10, 101, 11, 12, 26, 27, 93, 13, 102, 72, 60, 61, 2, 14, 73, 74, 4, 5, 6, 15, 16, 17, 19, 31, 30, 39, 95, 32, 33, 34, 35, 36, 40, 37, 49, 48, 65, 38, 52, 55, 41, 42, 43, 45, 44, 46, 47, 83, 58, 96, 97, 84, 67, 66, 69, 68, 71, 70, 78, 77, 79, 81, 80, 86, 82, 87, 88, 89, 98, 105, 18, 90, 108, 91, 99, 106, 107, 0, 85, 0, 0, 0, 100 }; static const yytype_int8 yycheck[] = { 46, 1, 6, 7, 8, 9, 10, 0, 13, 19, 13, 19, 19, 17, 18, 20, 22, 20, 6, 15, 16, 21, 23, 11, 12, 3, 4, 5, 14, 14, 24, 21, 19, 25, 23, 81, 19, 19, 19, 19, 19, 13, 19, 13, 39, 47, 22, 13, 13, 24, 24, 24, 21, 24, 21, 23, 67, 21, 13, 13, 69, 23, 25, 23, 25, 23, 25, 19, 25, 19, 23, 22, 19, 22, 19, 19, 22, 13, 99, 14, 23, 107, 24, 23, 25, 23, -1, 71, -1, -1, -1, 90 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 1, 21, 27, 3, 4, 5, 28, 29, 0, 19, 19, 19, 22, 23, 14, 14, 24, 28, 21, 30, 6, 7, 8, 9, 10, 17, 18, 31, 32, 25, 19, 19, 19, 19, 19, 19, 19, 22, 23, 13, 24, 24, 24, 24, 21, 21, 23, 31, 13, 33, 34, 13, 35, 36, 13, 37, 38, 21, 39, 15, 16, 42, 43, 42, 30, 25, 23, 25, 23, 25, 23, 6, 11, 12, 40, 41, 25, 19, 19, 22, 23, 22, 33, 35, 37, 19, 19, 19, 22, 23, 24, 13, 20, 46, 42, 13, 13, 13, 23, 40, 13, 20, 44, 45, 39, 25, 23, 44 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { 0, 26, 27, 27, 28, 28, 28, 29, 29, 29, 30, 30, 30, 31, 31, 31, 32, 32, 32, 32, 32, 32, 32, 33, 33, 33, 34, 35, 35, 35, 36, 37, 37, 37, 38, 39, 39, 39, 40, 40, 40, 41, 41, 41, 42, 42, 42, 43, 43, 44, 44, 44, 45, 45, 46, 46 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 3, 1, 0, 1, 3, 3, 3, 5, 0, 3, 5, 0, 1, 3, 3, 5, 5, 5, 5, 5, 5, 0, 1, 3, 1, 0, 1, 3, 1, 0, 1, 3, 1, 0, 3, 5, 0, 1, 3, 3, 3, 3, 0, 1, 3, 5, 3, 0, 1, 3, 1, 1, 1, 1 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY) \ { \ yychar = (Token); \ yylval = (Value); \ YYPOPSTACK (yylen); \ yystate = *yyssp; \ goto yybackup; \ } \ else \ { \ yyerror (parse_arg, YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (0) /* Error token number */ #define YYTERROR 1 #define YYERRCODE 256 /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (0) /* This macro is provided for backward compatibility. */ #ifndef YY_LOCATION_PRINT # define YY_LOCATION_PRINT(File, Loc) ((void) 0) #endif # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value, parse_arg); \ YYFPRINTF (stderr, "\n"); \ } \ } while (0) /*----------------------------------------. | Print this symbol's value on YYOUTPUT. | `----------------------------------------*/ static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, calib_yyparse_private_t *parse_arg) { FILE *yyo = yyoutput; YYUSE (yyo); YYUSE (parse_arg); if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # endif YYUSE (yytype); } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, calib_yyparse_private_t *parse_arg) { YYFPRINTF (yyoutput, "%s %s (", yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep, parse_arg); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ static void yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) { int yybot = *yybottom; YYFPRINTF (stderr, " %d", yybot); } YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (0) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ static void yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule, calib_yyparse_private_t *parse_arg) { unsigned long int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yystos[yyssp[yyi + 1 - yynrhs]], &(yyvsp[(yyi + 1) - (yynrhs)]) , parse_arg); YYFPRINTF (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyssp, yyvsp, Rule, parse_arg); \ } while (0) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ static YYSIZE_T yystrlen (const char *yystr) { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ static char * yystpcpy (char *yydest, const char *yysrc) { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message about the unexpected token YYTOKEN for the state stack whose top is YYSSP. Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is not large enough to hold the message. In that case, also set *YYMSG_ALLOC to the required number of bytes. Return 2 if the required number of bytes is too large to store. */ static int yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, yytype_int16 *yyssp, int yytoken) { YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); YYSIZE_T yysize = yysize0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ const char *yyformat = YY_NULLPTR; /* Arguments of yyformat. */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; /* Number of reported tokens (one for the "unexpected", one per "expected"). */ int yycount = 0; /* There are many possibilities here to consider: - If this state is a consistent state with a default action, then the only way this function was invoked is if the default action is an error action. In that case, don't check for expected tokens because there are none. - The only way there can be no lookahead present (in yychar) is if this state is a consistent state with a default action. Thus, detecting the absence of a lookahead is sufficient to determine that there is no unexpected or expected token to report. In that case, just report a simple "syntax error". - Don't assume there isn't a lookahead just because this state is a consistent state with a default action. There might have been a previous inconsistent state, consistent state with a non-default action, or user semantic action that manipulated yychar. - Of course, the expected token list depends on states to have correct lookahead information, and it depends on the parser not to perform extra reductions after fetching a lookahead from the scanner and before detecting a syntax error. Thus, state merging (from LALR or IELR) and default reductions corrupt the expected token list. However, the list is correct for canonical LR with one exception: it will still contain any token that will not be accepted due to an error action in a later state. */ if (yytoken != YYEMPTY) { int yyn = yypact[*yyssp]; yyarg[yycount++] = yytname[yytoken]; if (!yypact_value_is_default (yyn)) { /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. In other words, skip the first -YYN actions for this state because they are default actions. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yyx; for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR && !yytable_value_is_error (yytable[yyx + yyn])) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; break; } yyarg[yycount++] = yytname[yyx]; { YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; yysize = yysize1; } } } } switch (yycount) { # define YYCASE_(N, S) \ case N: \ yyformat = S; \ break YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); # undef YYCASE_ } { YYSIZE_T yysize1 = yysize + yystrlen (yyformat); if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; yysize = yysize1; } if (*yymsg_alloc < yysize) { *yymsg_alloc = 2 * yysize; if (! (yysize <= *yymsg_alloc && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; return 1; } /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ { char *yyp = *yymsg; int yyi = 0; while ((*yyp = *yyformat) != '\0') if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyformat += 2; } else { yyp++; yyformat++; } } return 0; } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, calib_yyparse_private_t *parse_arg) { YYUSE (yyvaluep); YYUSE (parse_arg); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YYUSE (yytype); YY_IGNORE_MAYBE_UNINITIALIZED_END } /*----------. | yyparse. | `----------*/ int yyparse (calib_yyparse_private_t *parse_arg) { /* The lookahead symbol. */ int yychar; /* The semantic value of the lookahead symbol. */ /* Default value used for initialization, for pacifying older GCCs or non-GCC compilers. */ YY_INITIAL_VALUE (static YYSTYPE yyval_default;) YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); /* Number of syntax errors so far. */ int yynerrs; int yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* The stacks and their tools: 'yyss': related to states. 'yyvs': related to semantic values. Refer to the stacks through separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs; YYSTYPE *yyvsp; YYSIZE_T yystacksize; int yyn; int yyresult; /* Lookahead token as an internal (translated) token number. */ int yytoken = 0; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; yyssp = yyss = yyssa; yyvsp = yyvs = yyvsa; yystacksize = YYINITDEPTH; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); if (yystate == YYFINAL) YYACCEPT; goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yypact_value_is_default (yyn)) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = yylex (&yylval, LEX_PARAM); } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yytable_value_is_error (yyn)) goto yyerrlab; yyn = -yyn; goto yyreduce; } /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token. */ yychar = YYEMPTY; yystate = yyn; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: '$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 3: #line 366 "../../comedilib/lib/calib_yacc.y" /* yacc.c:1646 */ { fprintf(stderr, "input error on line %i\n", calib_yyget_lineno(parse_arg->yyscanner)); // fprintf(stderr, "input error on line %i\n", @1.first_line ); YYABORT; } #line 1666 "../../comedilib/lib/calib_yacc.c" /* yacc.c:1646 */ break; case 7: #line 379 "../../comedilib/lib/calib_yacc.y" /* yacc.c:1646 */ { if( parse_arg->parsed_file->driver_name != NULL ) YYABORT; parse_arg->parsed_file->driver_name = strdup( (yyvsp[0].sval) ); } #line 1675 "../../comedilib/lib/calib_yacc.c" /* yacc.c:1646 */ break; case 8: #line 384 "../../comedilib/lib/calib_yacc.y" /* yacc.c:1646 */ { if( parse_arg->parsed_file->board_name != NULL ) YYABORT; parse_arg->parsed_file->board_name = strdup( (yyvsp[0].sval) ); } #line 1684 "../../comedilib/lib/calib_yacc.c" /* yacc.c:1646 */ break; case 13: #line 396 "../../comedilib/lib/calib_yacc.y" /* yacc.c:1646 */ { parse_arg->cal_index++; } #line 1690 "../../comedilib/lib/calib_yacc.c" /* yacc.c:1646 */ break; case 14: #line 397 "../../comedilib/lib/calib_yacc.y" /* yacc.c:1646 */ { parse_arg->cal_index++; } #line 1696 "../../comedilib/lib/calib_yacc.c" /* yacc.c:1646 */ break; case 16: #line 402 "../../comedilib/lib/calib_yacc.y" /* yacc.c:1646 */ { comedi_calibration_setting_t *setting; setting = current_setting( parse_arg ); if( setting == NULL ) YYABORT; setting->subdevice = (yyvsp[0].ival); } #line 1707 "../../comedilib/lib/calib_yacc.c" /* yacc.c:1646 */ break; case 21: #line 413 "../../comedilib/lib/calib_yacc.y" /* yacc.c:1646 */ { if(add_polynomial(parse_arg, POLYNOMIAL_TO_PHYS) < 0) YYERROR; parse_arg->num_coefficients = 0; } #line 1716 "../../comedilib/lib/calib_yacc.c" /* yacc.c:1646 */ break; case 22: #line 418 "../../comedilib/lib/calib_yacc.y" /* yacc.c:1646 */ { if(add_polynomial(parse_arg, POLYNOMIAL_FROM_PHYS) < 0) YYERROR; parse_arg->num_coefficients = 0; } #line 1725 "../../comedilib/lib/calib_yacc.c" /* yacc.c:1646 */ break; case 26: #line 429 "../../comedilib/lib/calib_yacc.y" /* yacc.c:1646 */ { if(add_channel( parse_arg, (yyvsp[0].ival) ) < 0) YYERROR; } #line 1731 "../../comedilib/lib/calib_yacc.c" /* yacc.c:1646 */ break; case 30: #line 437 "../../comedilib/lib/calib_yacc.y" /* yacc.c:1646 */ { if(add_range( parse_arg, (yyvsp[0].ival) ) < 0) YYERROR; } #line 1737 "../../comedilib/lib/calib_yacc.c" /* yacc.c:1646 */ break; case 34: #line 445 "../../comedilib/lib/calib_yacc.y" /* yacc.c:1646 */ { if(add_aref( parse_arg, (yyvsp[0].ival) ) < 0) YYERROR; } #line 1743 "../../comedilib/lib/calib_yacc.c" /* yacc.c:1646 */ break; case 38: #line 453 "../../comedilib/lib/calib_yacc.y" /* yacc.c:1646 */ { if(add_caldac( parse_arg, parse_arg->caldac ) < 0) YYERROR; } #line 1749 "../../comedilib/lib/calib_yacc.c" /* yacc.c:1646 */ break; case 39: #line 454 "../../comedilib/lib/calib_yacc.y" /* yacc.c:1646 */ { if(add_caldac( parse_arg, parse_arg->caldac ) < 0) YYERROR; } #line 1755 "../../comedilib/lib/calib_yacc.c" /* yacc.c:1646 */ break; case 41: #line 458 "../../comedilib/lib/calib_yacc.y" /* yacc.c:1646 */ { parse_arg->caldac.subdevice = (yyvsp[0].ival); } #line 1761 "../../comedilib/lib/calib_yacc.c" /* yacc.c:1646 */ break; case 42: #line 459 "../../comedilib/lib/calib_yacc.y" /* yacc.c:1646 */ { parse_arg->caldac.channel = (yyvsp[0].ival); } #line 1767 "../../comedilib/lib/calib_yacc.c" /* yacc.c:1646 */ break; case 43: #line 460 "../../comedilib/lib/calib_yacc.y" /* yacc.c:1646 */ { parse_arg->caldac.value = (yyvsp[0].ival); } #line 1773 "../../comedilib/lib/calib_yacc.c" /* yacc.c:1646 */ break; case 52: #line 478 "../../comedilib/lib/calib_yacc.y" /* yacc.c:1646 */ { if(add_polynomial_coefficient(parse_arg, (yyvsp[0].dval)) < 0) YYERROR; } #line 1781 "../../comedilib/lib/calib_yacc.c" /* yacc.c:1646 */ break; case 53: #line 482 "../../comedilib/lib/calib_yacc.y" /* yacc.c:1646 */ { if(add_polynomial_coefficient(parse_arg, (yyvsp[0].ival)) < 0) YYERROR; } #line 1789 "../../comedilib/lib/calib_yacc.c" /* yacc.c:1646 */ break; case 54: #line 488 "../../comedilib/lib/calib_yacc.y" /* yacc.c:1646 */ { parse_arg->polynomial.expansion_origin = (yyvsp[0].dval); } #line 1797 "../../comedilib/lib/calib_yacc.c" /* yacc.c:1646 */ break; case 55: #line 492 "../../comedilib/lib/calib_yacc.y" /* yacc.c:1646 */ { parse_arg->polynomial.expansion_origin = (yyvsp[0].ival); } #line 1805 "../../comedilib/lib/calib_yacc.c" /* yacc.c:1646 */ break; #line 1809 "../../comedilib/lib/calib_yacc.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires that yytoken be updated with the new translation. We take the approach of translating immediately before every use of yytoken. One alternative is translating here after every semantic action, but that translation would be missed if the semantic action invokes YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an incorrect destructor might then be invoked immediately. In the case of YYERROR or YYBACKUP, subsequent parser actions might lead to an incorrect destructor call or verbose syntax error message before the lookahead is translated. */ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*--------------------------------------. | yyerrlab -- here on detecting error. | `--------------------------------------*/ yyerrlab: /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (parse_arg, YY_("syntax error")); #else # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ yyssp, yytoken) { char const *yymsgp = YY_("syntax error"); int yysyntax_error_status; yysyntax_error_status = YYSYNTAX_ERROR; if (yysyntax_error_status == 0) yymsgp = yymsg; else if (yysyntax_error_status == 1) { if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); if (!yymsg) { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; yysyntax_error_status = 2; } else { yysyntax_error_status = YYSYNTAX_ERROR; yymsgp = yymsg; } } yyerror (parse_arg, yymsgp); if (yysyntax_error_status == 2) goto yyexhaustedlab; } # undef YYSYNTAX_ERROR #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval, parse_arg); yychar = YYEMPTY; } } /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (!yypact_value_is_default (yyn)) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", yystos[yystate], yyvsp, parse_arg); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (parse_arg, YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEMPTY) { /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = YYTRANSLATE (yychar); yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval, parse_arg); } /* Do not reclaim the symbols of the rule whose action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp, parse_arg); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif return yyresult; } #line 497 "../../comedilib/lib/calib_yacc.y" /* yacc.c:1906 */ EXPORT_ALIAS_DEFAULT(_comedi_parse_calibration_file,comedi_parse_calibration_file,0.7.20); extern comedi_calibration_t* _comedi_parse_calibration_file( const char *cal_file_path ) { calib_yyparse_private_t priv; FILE *file; if( cal_file_path == NULL ) return NULL; memset(&priv, 0, sizeof(calib_yyparse_private_t)); priv.parsed_file = alloc_calib_parse(); if( priv.parsed_file == NULL ) return NULL; file = fopen( cal_file_path, "r" ); if( file == NULL ) { COMEDILIB_DEBUG( 3, "failed to open file\n" ); return NULL; } calib_yylex_init(&priv.yyscanner); calib_yyrestart(file, priv.yyscanner); if( calib_yyparse( &priv ) ) { comedi_cleanup_calibration( priv.parsed_file ); priv.parsed_file = NULL; } calib_yylex_destroy(priv.yyscanner); fclose( file ); if( priv.parsed_file ) { fill_inverse_linear_polynomials(priv.parsed_file); } return priv.parsed_file; } comedilib-0.11.0/lib/ioctl.c0000644000000000000000000000272512416542105012441 00000000000000/* lib/ioctl.c low-level functions COMEDILIB - Linux Control and Measurement Device Interface Library Copyright (C) 1997-2001 David A. Schleef This library 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, version 2.1 of the License. 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 #include #include #include "libinternal.h" /* ioctl wrappers */ int _comedi_ioctl(int fd, int request, void *arg) { int ret; ret = ioctl(fd, request, arg); if(ret < 0) libc_error(); return ret; } int _comedi_ioctl_debug(int fd, int request, void *arg) { int ret; fprintf(stderr,"ioctl(%d,0x%08x,%p) = ",fd, request, arg); ret = _comedi_ioctl(fd, request, arg); fprintf(stderr,"%d\n", ret); return ret; } comedilib-0.11.0/lib/timed.c0000644000000000000000000000430412416542105012424 00000000000000/* lib/timed.c description COMEDILIB - Linux Control and Measurement Device Interface Library Copyright (C) 1997-2001 David A. Schleef This library 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, version 2.1 of the License. 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 "libinternal.h" #include #include #include #include #include #include #include #include #include #include #define BUFSZ 100 EXPORT_ALIAS_DEFAULT(_comedi_timed_1chan,comedi_timed_1chan,0.7.18); int _comedi_timed_1chan(comedi_t *dev,unsigned int subd,unsigned int chan,unsigned int range, unsigned int aref,double freq,unsigned int n_samples,double *data) { comedi_trig t; double act_freq; sampl_t *buffer; comedi_range *the_range; unsigned int maxdata; int i,n,m; if(!valid_chan(dev,subd,chan))return -1; if(!data)return -1; memset(&t,0,sizeof(t)); /* check range */ the_range=comedi_get_range(dev,subd,chan,range); maxdata=comedi_get_maxdata(dev,subd,chan); chan=CR_PACK(chan,range,aref); t.subdev=subd; t.mode=2; t.n_chan=1; t.chanlist=&chan; t.n=n_samples; comedi_get_timer(dev,subd,freq,&t.trigvar,&act_freq); t.trigvar1=1; buffer=malloc(sizeof(sampl_t)*BUFSZ); if(!buffer)return -1; comedi_trigger(dev,&t); n=0; while(nBUFSZ)m=BUFSZ; if((m=read(dev->fd,buffer,m*sizeof(sampl_t)))<0){ /* ack! */ return -1; } m/=sizeof(sampl_t); for(i=0;i This library 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, version 2.1 of the License. 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 #include #include #include "libinternal.h" EXPORT_ALIAS_DEFAULT(_comedi_data_write,comedi_data_write,0.7.18); int _comedi_data_write(comedi_t *it,unsigned int subdev,unsigned int chan,unsigned int range, unsigned int aref,lsampl_t data) { if(!valid_chan(it,subdev,chan)) return -1; if(it->has_insnlist_ioctl){ comedi_insn insn; memset(&insn,0,sizeof(insn)); insn.insn = INSN_WRITE; insn.n = 1; insn.data = &data; insn.subdev = subdev; insn.chanspec = CR_PACK(chan,range,aref); return comedi_do_insn(it,&insn); }else{ comedi_trig cmd={ mode: 0, flags: TRIG_WRITE, n_chan: 1, n: 1, trigsrc: 0, trigvar: 0, trigvar1: 0, }; sampl_t sdata[2]; sdata[0]=data & 0xffff; sdata[1]=(data >> 16) & 0xffff; chan=CR_PACK(chan,range,aref); cmd.subdev=subdev; if(it->subdevices[subdev].subd_flags & SDF_LSAMPL){ cmd.data=sdata; }else{ cmd.data=sdata; } cmd.chanlist=&chan; return comedi_ioctl(it->fd, COMEDI_TRIG, &cmd); } } static int comedi_internal_data_read_n(comedi_t *it, unsigned int subdev, unsigned int chanspec, lsampl_t *data, unsigned int n) { subdevice *s; if(!valid_subd(it,subdev)) return -1; if(n == 0) return 0; s = it->subdevices + subdev; if(it->has_insnlist_ioctl){ comedi_insn insn; memset(&insn,0,sizeof(insn)); insn.insn = INSN_READ; insn.n = n; insn.data = data; insn.subdev = subdev; insn.chanspec = chanspec; memset(insn.data, 0, n * sizeof(data[0])); // for valgrind return comedi_do_insn(it,&insn); }else{ comedi_trig cmd={ mode: 0, flags: 0, n_chan: 1, n: n, trigsrc: 0, trigvar: 0, trigvar1: 0, }; int ret; sampl_t sdata[n]; unsigned int i; cmd.subdev=subdev; cmd.chanlist=&chanspec; if(s->subd_flags & SDF_LSAMPL){ cmd.data=(sampl_t *)data; }else{ cmd.data=sdata; } ret = comedi_ioctl(it->fd, COMEDI_TRIG, &cmd); if(ret<0) return ret; if(!(s->subd_flags & SDF_LSAMPL)){ for( i = 0; i < n; i++) data[i] = sdata[i]; } return 0; } } EXPORT_ALIAS_DEFAULT(_comedi_data_read_n,comedi_data_read_n,0.7.18); int _comedi_data_read_n(comedi_t *it, unsigned int subdev, unsigned int chan, unsigned int range, unsigned int aref, lsampl_t *data, unsigned int n) { static const int max_chunk_size = 100; unsigned int chunk_size; unsigned int sample_count = 0; int retval; while( n ) { if( n > max_chunk_size) chunk_size = max_chunk_size; else chunk_size = n; retval = comedi_internal_data_read_n(it, subdev, CR_PACK(chan, range, aref), data+sample_count, chunk_size); if( retval < 0 ) return retval; n -= chunk_size; sample_count += chunk_size; } return 0; } EXPORT_ALIAS_DEFAULT(_comedi_data_read,comedi_data_read,0.7.18); int _comedi_data_read(comedi_t *it, unsigned int subdev, unsigned int chan, unsigned int range, unsigned int aref, lsampl_t *data) { return comedi_internal_data_read_n(it, subdev, CR_PACK(chan, range, aref), data, 1); } EXPORT_ALIAS_DEFAULT(_comedi_data_read_hint,comedi_data_read_hint,0.7.19); int _comedi_data_read_hint(comedi_t *it, unsigned int subdev, unsigned int chan, unsigned int range, unsigned int aref) { lsampl_t dummy_data; return comedi_internal_data_read_n(it, subdev, CR_PACK(chan, range, aref), &dummy_data, 0); } EXPORT_ALIAS_DEFAULT(_comedi_data_read_delayed,comedi_data_read_delayed,0.7.19); int _comedi_data_read_delayed( comedi_t *it, unsigned int subdev, unsigned int chan, unsigned int range, unsigned int aref, lsampl_t *data, unsigned int nano_sec) { comedi_insnlist ilist; comedi_insn insn[3]; lsampl_t delay = nano_sec; if( !valid_chan( it, subdev, chan ) ) return -1; memset( insn, 0, sizeof(insn) ); memset( &ilist, 0, sizeof(ilist) ); memset(data, 0, sizeof(*data)); // for valgrind // setup, no conversions insn[0].insn = INSN_READ; insn[0].n = 0; insn[0].data = data; insn[0].subdev = subdev; insn[0].chanspec = CR_PACK( chan, range, aref ); // delay insn[1].insn = INSN_WAIT; insn[1].n = 1; insn[1].data = &delay; // take conversion insn[2].insn = INSN_READ; insn[2].n = 1; insn[2].data = data; insn[2].subdev = subdev; insn[2].chanspec = CR_PACK( chan, range, aref ); ilist.insns = insn; ilist.n_insns = sizeof(insn) / sizeof(insn[0]); return comedi_do_insnlist(it, &ilist); } comedilib-0.11.0/lib/calib_lex.h0000644000000000000000000002125112426145427013260 00000000000000#ifndef calib_yyHEADER_H #define calib_yyHEADER_H 1 #define calib_yyIN_HEADER 1 #line 6 "../../comedilib/lib/calib_lex.h" #line 8 "../../comedilib/lib/calib_lex.h" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 39 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ #include #include #include #include /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! C99 */ #endif /* ! FLEXINT_H */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif /* An opaque pointer. */ #ifndef YY_TYPEDEF_YY_SCANNER_T #define YY_TYPEDEF_YY_SCANNER_T typedef void* yyscan_t; #endif /* For convenience, these vars (plus the bison vars far below) are macros in the reentrant scanner. */ #define yyin yyg->yyin_r #define yyout yyg->yyout_r #define yyextra yyg->yyextra_r #define yyleng yyg->yyleng_r #define yytext yyg->yytext_r #define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) #define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) #define yy_flex_debug yyg->yy_flex_debug_r /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k. * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. * Ditto for the __ia64__ case accordingly. */ #define YY_BUF_SIZE 32768 #else #define YY_BUF_SIZE 16384 #endif /* __ia64__ */ #endif #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { FILE *yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ void calib_yyrestart (FILE *input_file ,yyscan_t yyscanner ); void calib_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); YY_BUFFER_STATE calib_yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner ); void calib_yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); void calib_yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); void calib_yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); void calib_yypop_buffer_state (yyscan_t yyscanner ); YY_BUFFER_STATE calib_yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner ); YY_BUFFER_STATE calib_yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner ); YY_BUFFER_STATE calib_yy_scan_bytes (yyconst char *bytes,yy_size_t len ,yyscan_t yyscanner ); void *calib_yyalloc (yy_size_t ,yyscan_t yyscanner ); void *calib_yyrealloc (void *,yy_size_t ,yyscan_t yyscanner ); void calib_yyfree (void * ,yyscan_t yyscanner ); /* Begin user sect3 */ #define calib_yywrap(yyscanner) 1 #define YY_SKIP_YYWRAP #define yytext_ptr yytext_r #ifdef YY_HEADER_EXPORT_START_CONDITIONS #define INITIAL 0 #define COMMENT 1 #define STRING 2 #endif #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif int calib_yylex_init (yyscan_t* scanner); int calib_yylex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int calib_yylex_destroy (yyscan_t yyscanner ); int calib_yyget_debug (yyscan_t yyscanner ); void calib_yyset_debug (int debug_flag ,yyscan_t yyscanner ); YY_EXTRA_TYPE calib_yyget_extra (yyscan_t yyscanner ); void calib_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner ); FILE *calib_yyget_in (yyscan_t yyscanner ); void calib_yyset_in (FILE * in_str ,yyscan_t yyscanner ); FILE *calib_yyget_out (yyscan_t yyscanner ); void calib_yyset_out (FILE * out_str ,yyscan_t yyscanner ); yy_size_t calib_yyget_leng (yyscan_t yyscanner ); char *calib_yyget_text (yyscan_t yyscanner ); int calib_yyget_lineno (yyscan_t yyscanner ); void calib_yyset_lineno (int line_number ,yyscan_t yyscanner ); int calib_yyget_column (yyscan_t yyscanner ); void calib_yyset_column (int column_no ,yyscan_t yyscanner ); /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int calib_yywrap (yyscan_t yyscanner ); #else extern int calib_yywrap (yyscan_t yyscanner ); #endif #endif #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner); #endif #ifndef YY_NO_INPUT #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k */ #define YY_READ_BUF_SIZE 16384 #else #define YY_READ_BUF_SIZE 8192 #endif /* __ia64__ */ #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 extern int calib_yylex (yyscan_t yyscanner); #define YY_DECL int calib_yylex (yyscan_t yyscanner) #endif /* !YY_DECL */ /* yy_get_previous_state - get the state just before the EOB char was reached */ #undef YY_NEW_FILE #undef YY_FLUSH_BUFFER #undef yy_set_bol #undef yy_new_buffer #undef yy_set_interactive #undef YY_DO_BEFORE_ACTION #ifdef YY_DECL_IS_OURS #undef YY_DECL_IS_OURS #undef YY_DECL #endif #line 84 "../../comedilib/lib/calib_lex.l" #line 354 "../../comedilib/lib/calib_lex.h" #undef calib_yyIN_HEADER #endif /* calib_yyHEADER_H */ comedilib-0.11.0/COPYING0000644000000000000000000006364412416542105011457 00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 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 Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] 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 Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, 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 and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these 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 other code 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. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. ^L Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. 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, whereas the latter must be combined with the library in order to run. ^L GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser 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. ^L 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. ^L 6. As an exception to the Sections above, you may also combine 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) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) 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. d) 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. e) 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 materials to be 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. ^L 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 with this License. ^L 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 Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library 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. ^L 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 ^L 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 Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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! comedilib-0.11.0/perl/0000755000000000000000000000000012416542105011431 500000000000000comedilib-0.11.0/perl/Changes0000644000000000000000000000032712416542105012646 00000000000000Revision history for Perl extension Comedi. 0.01 Tue Nov 9 01:17:02 1999 - original version; created by h2xs 1.18 0.02 Tue Nov 16 11:49:11 EST 1999 - (Comedi::Lib only) track changes to comedilib 0.7.6 (jes) comedilib-0.11.0/perl/Makefile.PL0000644000000000000000000000052112416542105013321 00000000000000use ExtUtils::MakeMaker; # See lib/ExtUtils/MakeMaker.pm for details of how to influence # the contents of the Makefile that is written. WriteMakefile( 'NAME' => 'Comedi', 'VERSION_FROM' => 'Comedi.pm', 'LIBS' => [], 'DEFINE' => '', 'INC' => '', 'dist' => { COMPRESS=>"gzip", SUFFIX=>"gz" }, ); comedilib-0.11.0/perl/INSTALL0000644000000000000000000000032412416542105012401 00000000000000 perl Makefile.PL make make install Yow! Who'da guessed? You can add '-DLIB_DEBUG' to Makefile.PL for a little extra verbosity. You can run the examples before 'make install' using the 'lperl' script. comedilib-0.11.0/perl/Trigger/0000755000000000000000000000000012416542105013034 500000000000000comedilib-0.11.0/perl/Trigger/Changes0000644000000000000000000000020012416542105014237 00000000000000Revision history for Perl extension Comedi::Trigger. 0.01 Tue Nov 9 10:18:34 1999 - original version; created by h2xs 1.18 comedilib-0.11.0/perl/Trigger/Makefile.PL0000644000000000000000000000034512416542105014730 00000000000000use ExtUtils::MakeMaker; # See lib/ExtUtils/MakeMaker.pm for details of how to influence # the contents of the Makefile that is written. WriteMakefile( 'NAME' => 'Comedi::Trigger', 'VERSION_FROM' => 'Trigger.pm', ); comedilib-0.11.0/perl/Trigger/test.pl0000644000000000000000000000122412416542105014267 00000000000000# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl test.pl' ######################### We start with some black magic to print on failure. # Change 1..1 below to 1..last_test_to_print . # (It may become useful if the test is moved to ./t subdirectory.) BEGIN { $| = 1; print "1..1\n"; } END {print "not ok 1\n" unless $loaded;} use Comedi::Trigger; $loaded = 1; print "ok 1\n"; ######################### End of black magic. # Insert your test code below (better if it prints "ok 13" # (correspondingly "not ok 13") depending on the success of chunk 13 # of the test code): comedilib-0.11.0/perl/Trigger/Trigger.pm0000644000000000000000000001145712416542105014725 00000000000000# Copyright (c) 1999 Joseph E. Smith # # See the 'COPYRIGHT' section below for complete copyright information. package Comedi::Trigger; use strict; use vars qw($VERSION $AUTOLOAD @ISA @EXPORT @EXPORT_OK); use Carp; require Exporter; require AutoLoader; @ISA = qw(Exporter AutoLoader); # Nothing exported by default; all access through Trigger object @EXPORT; $VERSION = '0.01'; # Preloaded methods go here. sub new { my $class = shift; my $self = bless {}; while (@_) { my ($member, $value) = (shift, shift); $self->$member($value); } return $self->pack; } sub pack { my $self = shift; my $struct = $self->_pack; $self->{'struct'} = $struct; return $struct ? $self : undef; } sub _pack { my $self = shift; my $chl = $self->{'chanlist'} || return undef; my $n_chan = (exists($self->{'n_chan'}) ? $self->{'n_chan'} : @$chl) || return undef; # keep these buffers in the object so they don't go away # $self->{'_chanlist'} = pack('L*', @{$self->{'chanlist'}}); my ($n, $buf); # n can be zero # if (exists($self->{'n'}) && exists($self->{'data'})) { $n = $self->{'n'}; $buf = $self->{'data'}; } elsif (exists($self->{'n'})) { $n = $self->{'n'}; $self->{'_data'} = "\0" x ($n * $n_chan * 2); $buf = $self->{'data'} = \$self->{'_data'}; } elsif (exists($self->{'data'})) { $buf = $self->{'data'}; $n = length($$buf)/(2*$n_chan); } else { return undef; } # TODO: more error-checking (return undef) # # minimal sanity checks # croak("Data buffer is not a scalar reference") unless ref($buf) eq 'SCALAR'; croak("Sample count (2*$n) too large for buffer (" . length($$buf) . ")") unless ((2*$n) <= length $$buf); return pack('L4 p2 L5 L3', $self->{'subdev'} || 0, $self->{'mode'} || 0, $self->{'flags'} || 0, $n_chan, $self->{'_chanlist'}, $$buf, $n, $self->{'trigsrc'} || $self->{'source'}, $self->{'trigvar'} || $self->{'major'}, $self->{'trigvar1'} || $self->{'minor'}, length $$buf, 0, 0, 0); } sub AUTOLOAD { my $self = shift; ref($self) || croak "$self is not an object"; (my $name = $AUTOLOAD) =~ s/.*://; # strip leading class name(s) return @_ ? $self->{$name} = shift : $self->{$name}; } # Autoload methods go after =cut, and are processed by the autosplit program. 1; __END__ # Below is the stub of documentation for your module. You better edit it! =head1 NAME Comedi::Trigger - Object oriented interface to comedi trigger struct =head1 SYNOPSIS use Comedi::Trigger; $t = new Comedi::Trigger; $t->mode(2); $t->chanlist([ CR_PACK(0,0,AREF_GROUND), CR_PACK(1,0,AREF_GROUND) ]); $t->n(100); $t->major(1999); $t->minor(20); $ret = comedi_trigger($dev, $t); =head1 DESCRIPTION This module provides an object oriented interface to B trigger structures. It provides some convenience over Cing one by hand: you need only specify a minimum of information, the rest will be calculated if possible. =head1 METHODS Each element of the B trigger structure is available as a method which either retrieves or sets the value of that element. In addition, some of the elements have aliases which may be used to make the programmer's intention clear. The following methods function analogously to the C struct elements: =over 4 =item subdev =item mode =item flags =item n_chan =item n =back These elements function analogously, but have aliases: =over 4 =item trigsrc or source =item trigvar or major =item trigvar1 or minor =back These elements function somewhat differently than the C implementation: =over 4 =item chanlist This should be a reference to a Perl list of channel descriptors packed using B (see the example above). If the number of channels (B)is not specified, it will be set to the number of elements in this list. =item data This should be a scalar, pre-allocated to a length large enough to hold the requested data. If no value is set, a scalar will be created of the appropriate size. =item data_len This element should be set to the size of the data buffer (in bytes). If not specified, it will be set automatically. =back This method is specific to the Perl module. =item pack This method packs the current state of the trigger elements into a binary form compatible with the C C. This method is normally called automatically by B functions that take trigger arguments. =head1 VERSION Version 0.01 09-Nov-1999 =head1 AUTHOR Joe Smith >. =head1 COPYRIGHT Copyright (c) 1999 Joseph E. Smith. All rights reserved. This program is free software. You may redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO Comedi(1), Comedi::Lib(1). =cut comedilib-0.11.0/perl/test.pl0000644000000000000000000000121312416542105012662 00000000000000# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl test.pl' ######################### We start with some black magic to print on failure. # Change 1..1 below to 1..last_test_to_print . # (It may become useful if the test is moved to ./t subdirectory.) BEGIN { $| = 1; print "1..1\n"; } END {print "not ok 1\n" unless $loaded;} use Comedi; $loaded = 1; print "ok 1\n"; ######################### End of black magic. # Insert your test code below (better if it prints "ok 13" # (correspondingly "not ok 13") depending on the success of chunk 13 # of the test code): comedilib-0.11.0/perl/example.perl0000644000000000000000000000113112416542105013664 00000000000000 # A little input demo use constant N_SAMPLES => 64; use Comedi qw( :Functions :Constants :Ioctls ) ; # allocate a data buffer # create a channel list $ch = pack('L*', CR_PACK(0, 0, AREF_GROUND)); # create a data buffer $buf = pack('S' . N_SAMPLES); # create a trigger object # $it = pack('L4 p2 L5 L3', 0, 0, 0, 1, $ch, $buf, N_SAMPLES, 0, 0, 0 ); $fn = '/dev/comedi0'; sysopen(FILE, $fn, O_RDWR) || die "Can't open '$fn': $!"; ioctl(FILE, COMEDI_TRIG, $it) || die "ioctl failed: $!"; foreach (unpack('S*', $buf)) { printf("%d\n", $_); } comedilib-0.11.0/perl/lperl0000755000000000000000000000020012416542105012405 00000000000000#!/bin/sh PERL_DL_NONLAZY=1 /usr/bin/perl -I./blib/arch -I./blib/lib -I/usr/lib/perl5/i386-linux/5.00404 -I/usr/lib/perl5 "$@" comedilib-0.11.0/perl/MANIFEST0000644000000000000000000000041312416542105012500 00000000000000README INSTALL MANIFEST Changes Makefile.PL Comedi.pm Comedi.xs test.pl typemap lperl info.perl example.perl mode1.perl mode2.perl mode2lib.perl Trigger/Makefile.PL Trigger/Trigger.pm Trigger/test.pl Trigger/Changes Lib/Makefile.PL Lib/Lib.pm Lib/Lib.xs Lib/Changes comedilib-0.11.0/perl/Comedi.xs0000644000000000000000000002540212416542105013130 00000000000000/* * Copyright (c) 1999 Joseph E. Smith * * All rights reserved. This program is free software. You may * redistribute it and/or modify it under the same terms as Perl itself. */ #ifdef __cplusplus extern "C" { #endif #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #ifdef __cplusplus } #endif #include static int not_here(s) char *s; { croak("%s not implemented on this architecture", s); return -1; } static double constant(name, arg) char *name; int arg; { errno = 0; switch (*name) { case 'A': if (strEQ(name, "AREF_COMMON")) #ifdef AREF_COMMON return AREF_COMMON; #else goto not_there; #endif if (strEQ(name, "AREF_DIFF")) #ifdef AREF_DIFF return AREF_DIFF; #else goto not_there; #endif if (strEQ(name, "AREF_GROUND")) #ifdef AREF_GROUND return AREF_GROUND; #else goto not_there; #endif if (strEQ(name, "AREF_OTHER")) #ifdef AREF_OTHER return AREF_OTHER; #else goto not_there; #endif break; case 'B': break; case 'C': if (strEQ(name, "CIO")) #ifdef CIO return CIO; #else goto not_there; #endif if (strEQ(name, "COMEDI_CANCEL")) #ifdef COMEDI_CANCEL return COMEDI_CANCEL; #else goto not_there; #endif if (strEQ(name, "COMEDI_CB_BLOCK")) #ifdef COMEDI_CB_BLOCK return COMEDI_CB_BLOCK; #else goto not_there; #endif if (strEQ(name, "COMEDI_CB_EOA")) #ifdef COMEDI_CB_EOA return COMEDI_CB_EOA; #else goto not_there; #endif if (strEQ(name, "COMEDI_CB_EOBUF")) #ifdef COMEDI_CB_EOBUF return COMEDI_CB_EOBUF; #else goto not_there; #endif if (strEQ(name, "COMEDI_CB_EOS")) #ifdef COMEDI_CB_EOS return COMEDI_CB_EOS; #else goto not_there; #endif if (strEQ(name, "COMEDI_CHANINFO")) #ifdef COMEDI_CHANINFO return COMEDI_CHANINFO; #else goto not_there; #endif if (strEQ(name, "COMEDI_CMD")) #ifdef COMEDI_CMD return COMEDI_CMD; #else goto not_there; #endif if (strEQ(name, "COMEDI_DEVCONFIG")) #ifdef COMEDI_DEVCONFIG return COMEDI_DEVCONFIG; #else goto not_there; #endif if (strEQ(name, "COMEDI_DEVINFO")) #ifdef COMEDI_DEVINFO return COMEDI_DEVINFO; #else goto not_there; #endif if (strEQ(name, "COMEDI_INPUT")) #ifdef COMEDI_INPUT return COMEDI_INPUT; #else goto not_there; #endif if (strEQ(name, "COMEDI_LOCK")) #ifdef COMEDI_LOCK return COMEDI_LOCK; #else goto not_there; #endif if (strEQ(name, "COMEDI_MAJOR")) #ifdef COMEDI_MAJOR return COMEDI_MAJOR; #else goto not_there; #endif if (strEQ(name, "COMEDI_NAMELEN")) #ifdef COMEDI_NAMELEN return COMEDI_NAMELEN; #else goto not_there; #endif if (strEQ(name, "COMEDI_NDEVCONFOPTS")) #ifdef COMEDI_NDEVCONFOPTS return COMEDI_NDEVCONFOPTS; #else goto not_there; #endif if (strEQ(name, "COMEDI_NDEVICES")) #ifdef COMEDI_NDEVICES return COMEDI_NDEVICES; #else goto not_there; #endif if (strEQ(name, "COMEDI_OUTPUT")) #ifdef COMEDI_OUTPUT return COMEDI_OUTPUT; #else goto not_there; #endif if (strEQ(name, "COMEDI_RANGEINFO")) #ifdef COMEDI_RANGEINFO return COMEDI_RANGEINFO; #else goto not_there; #endif if (strEQ(name, "COMEDI_SUBDINFO")) #ifdef COMEDI_SUBDINFO return COMEDI_SUBDINFO; #else goto not_there; #endif if (strEQ(name, "COMEDI_SUBD_AI")) #ifdef COMEDI_SUBD_AI return COMEDI_SUBD_AI; #else goto not_there; #endif if (strEQ(name, "COMEDI_SUBD_AO")) #ifdef COMEDI_SUBD_AO return COMEDI_SUBD_AO; #else goto not_there; #endif if (strEQ(name, "COMEDI_SUBD_CALIB")) #ifdef COMEDI_SUBD_CALIB return COMEDI_SUBD_CALIB; #else goto not_there; #endif if (strEQ(name, "COMEDI_SUBD_COUNTER")) #ifdef COMEDI_SUBD_COUNTER return COMEDI_SUBD_COUNTER; #else goto not_there; #endif if (strEQ(name, "COMEDI_SUBD_DI")) #ifdef COMEDI_SUBD_DI return COMEDI_SUBD_DI; #else goto not_there; #endif if (strEQ(name, "COMEDI_SUBD_DIO")) #ifdef COMEDI_SUBD_DIO return COMEDI_SUBD_DIO; #else goto not_there; #endif if (strEQ(name, "COMEDI_SUBD_DO")) #ifdef COMEDI_SUBD_DO return COMEDI_SUBD_DO; #else goto not_there; #endif if (strEQ(name, "COMEDI_SUBD_MEMORY")) #ifdef COMEDI_SUBD_MEMORY return COMEDI_SUBD_MEMORY; #else goto not_there; #endif if (strEQ(name, "COMEDI_SUBD_PROC")) #ifdef COMEDI_SUBD_PROC return COMEDI_SUBD_PROC; #else goto not_there; #endif if (strEQ(name, "COMEDI_SUBD_TIMER")) #ifdef COMEDI_SUBD_TIMER return COMEDI_SUBD_TIMER; #else goto not_there; #endif if (strEQ(name, "COMEDI_SUBD_UNUSED")) #ifdef COMEDI_SUBD_UNUSED return COMEDI_SUBD_UNUSED; #else goto not_there; #endif if (strEQ(name, "COMEDI_TRIG")) #ifdef COMEDI_TRIG return COMEDI_TRIG; #else goto not_there; #endif if (strEQ(name, "COMEDI_UNLOCK")) #ifdef COMEDI_UNLOCK return COMEDI_UNLOCK; #else goto not_there; #endif break; case 'D': break; case 'E': break; case 'F': break; case 'G': break; case 'H': break; case 'I': break; case 'J': break; case 'K': break; case 'L': break; case 'M': break; case 'N': break; case 'O': break; case 'P': break; case 'Q': break; case 'R': if (strEQ(name, "RF_EXTERNAL")) #ifdef RF_EXTERNAL return RF_EXTERNAL; #else goto not_there; #endif break; case 'S': if (strEQ(name, "SDF_BUSY")) #ifdef SDF_BUSY return SDF_BUSY; #else goto not_there; #endif if (strEQ(name, "SDF_BUSY_OWNER")) #ifdef SDF_BUSY_OWNER return SDF_BUSY_OWNER; #else goto not_there; #endif if (strEQ(name, "SDF_COMMON")) #ifdef SDF_COMMON return SDF_COMMON; #else goto not_there; #endif if (strEQ(name, "SDF_DEGLITCH")) #ifdef SDF_DEGLITCH return SDF_DEGLITCH; #else goto not_there; #endif if (strEQ(name, "SDF_DIFF")) #ifdef SDF_DIFF return SDF_DIFF; #else goto not_there; #endif if (strEQ(name, "SDF_DITHER")) #ifdef SDF_DITHER return SDF_DITHER; #else goto not_there; #endif if (strEQ(name, "SDF_FLAGS")) #ifdef SDF_FLAGS return SDF_FLAGS; #else goto not_there; #endif if (strEQ(name, "SDF_GROUND")) #ifdef SDF_GROUND return SDF_GROUND; #else goto not_there; #endif if (strEQ(name, "SDF_INTERNAL")) #ifdef SDF_INTERNAL return SDF_INTERNAL; #else goto not_there; #endif if (strEQ(name, "SDF_LOCKED")) #ifdef SDF_LOCKED return SDF_LOCKED; #else goto not_there; #endif if (strEQ(name, "SDF_LOCK_OWNER")) #ifdef SDF_LOCK_OWNER return SDF_LOCK_OWNER; #else goto not_there; #endif if (strEQ(name, "SDF_LSAMPL")) #ifdef SDF_LSAMPL return SDF_LSAMPL; #else goto not_there; #endif if (strEQ(name, "SDF_MAXDATA")) #ifdef SDF_MAXDATA return SDF_MAXDATA; #else goto not_there; #endif if (strEQ(name, "SDF_MMAP")) #ifdef SDF_MMAP return SDF_MMAP; #else goto not_there; #endif if (strEQ(name, "SDF_MODE0")) #ifdef SDF_MODE0 return SDF_MODE0; #else goto not_there; #endif if (strEQ(name, "SDF_MODE1")) #ifdef SDF_MODE1 return SDF_MODE1; #else goto not_there; #endif if (strEQ(name, "SDF_MODE2")) #ifdef SDF_MODE2 return SDF_MODE2; #else goto not_there; #endif if (strEQ(name, "SDF_MODE3")) #ifdef SDF_MODE3 return SDF_MODE3; #else goto not_there; #endif if (strEQ(name, "SDF_MODE4")) #ifdef SDF_MODE4 return SDF_MODE4; #else goto not_there; #endif if (strEQ(name, "SDF_OTHER")) #ifdef SDF_OTHER return SDF_OTHER; #else goto not_there; #endif if (strEQ(name, "SDF_RANGETYPE")) #ifdef SDF_RANGETYPE return SDF_RANGETYPE; #else goto not_there; #endif if (strEQ(name, "SDF_READABLE")) #ifdef SDF_READABLE return SDF_READABLE; #else goto not_there; #endif if (strEQ(name, "SDF_RT")) #ifdef SDF_RT return SDF_RT; #else goto not_there; #endif if (strEQ(name, "SDF_RUNNING")) #ifdef SDF_RUNNING return SDF_RUNNING; #else goto not_there; #endif if (strEQ(name, "SDF_WRITEABLE")) #ifdef SDF_WRITEABLE return SDF_WRITEABLE; #else goto not_there; #endif break; case 'T': if (strEQ(name, "TRIG_ANY")) #ifdef TRIG_ANY return TRIG_ANY; #else goto not_there; #endif if (strEQ(name, "TRIG_BOGUS")) #ifdef TRIG_BOGUS return TRIG_BOGUS; #else goto not_there; #endif if (strEQ(name, "TRIG_CONFIG")) #ifdef TRIG_CONFIG return TRIG_CONFIG; #else goto not_there; #endif if (strEQ(name, "TRIG_COUNT")) #ifdef TRIG_COUNT return TRIG_COUNT; #else goto not_there; #endif if (strEQ(name, "TRIG_DEGLITCH")) #ifdef TRIG_DEGLITCH return TRIG_DEGLITCH; #else goto not_there; #endif if (strEQ(name, "TRIG_DITHER")) #ifdef TRIG_DITHER return TRIG_DITHER; #else goto not_there; #endif if (strEQ(name, "TRIG_EXT")) #ifdef TRIG_EXT return TRIG_EXT; #else goto not_there; #endif if (strEQ(name, "TRIG_FOLLOW")) #ifdef TRIG_FOLLOW return TRIG_FOLLOW; #else goto not_there; #endif if (strEQ(name, "TRIG_INT")) #ifdef TRIG_INT return TRIG_INT; #else goto not_there; #endif if (strEQ(name, "TRIG_NONE")) #ifdef TRIG_NONE return TRIG_NONE; #else goto not_there; #endif if (strEQ(name, "TRIG_NOW")) #ifdef TRIG_NOW return TRIG_NOW; #else goto not_there; #endif if (strEQ(name, "TRIG_RT")) #ifdef TRIG_RT return TRIG_RT; #else goto not_there; #endif if (strEQ(name, "TRIG_TIME")) #ifdef TRIG_TIME return TRIG_TIME; #else goto not_there; #endif if (strEQ(name, "TRIG_TIMER")) #ifdef TRIG_TIMER return TRIG_TIMER; #else goto not_there; #endif if (strEQ(name, "TRIG_WAKE_EOS")) #ifdef TRIG_WAKE_EOS return TRIG_WAKE_EOS; #else goto not_there; #endif if (strEQ(name, "TRIG_WRITE")) #ifdef TRIG_WRITE return TRIG_WRITE; #else goto not_there; #endif break; case 'U': if (strEQ(name, "UNIT_mA")) #ifdef UNIT_mA return UNIT_mA; #else goto not_there; #endif if (strEQ(name, "UNIT_none")) #ifdef UNIT_none return UNIT_none; #else goto not_there; #endif if (strEQ(name, "UNIT_volt")) #ifdef UNIT_volt return UNIT_volt; #else goto not_there; #endif break; case 'V': break; case 'W': break; case 'X': break; case 'Y': break; case 'Z': break; } errno = EINVAL; return 0; not_there: errno = ENOENT; return 0; } typedef struct comedi_trig_struct Trigger; MODULE = Comedi PACKAGE = Comedi double constant(name,arg) char * name int arg MODULE = Comedi PACKAGE = TriggerPtr PREFIX = tptr_ # create a new trigger # Trigger * tptr_new(CLASS, subd, n) char *CLASS int subd int n CODE: RETVAL = (Trigger *) malloc(sizeof(Trigger)); RETVAL->subdev = subd; RETVAL->n = n; fprintf(stderr, "new Trigger at 0x%08x: sub=%d, n=%d\n", RETVAL, RETVAL->subdev, RETVAL->n); OUTPUT: RETVAL # destruct a trigger # void tptr_DESTROY(self) Trigger *self CODE: fprintf(stderr, "destroy Trigger at 0x%08x\n", self); free((void *) self); comedilib-0.11.0/perl/mode2.perl0000644000000000000000000000234112416542105013243 00000000000000 # A little input demo use Comedi qw( :Functions :Constants :Ioctls ) ; use Comedi::Trigger; use Comedi::Lib; use constant AI_DEV => 0; use constant AI_SUB => 0; use constant AO_DEV => 0; use constant AO_SUB => 1; use constant N_SAMPLES => 100; $fn = '/dev/comedi0'; # create a channel list # @ch = ( CR_PACK(0, 0, AREF_GROUND), CR_PACK(1, 0, AREF_GROUND) ); $d = comedi_open($fn) || die "Can't open '$fn': " . comedi_error(); $fd = comedi_fileno($d); open(COMDEV, "<&$fd") || die "Can't get filehandle from fd $fd: $!"; $freq = $opt_f || 1000; comedi_loglevel(4); # convert the requested frequency into a timer value # ($ret = comedi_get_timer($d, AI_SUB, $freq, $ticks, $actual_freq)) == 0 || die "Can't get timer: " . comedi_strerror($ret); $buf = pack('S*', 100..(100+N_SAMPLES-1)); # create a trigger object # $it = new Comedi::Trigger( mode => 2, chanlist => \@ch, n => 20, data => \$buf, major => $ticks, minor => 20); die "Analog input trigger error ($ret): " . comedi_strerror(comedi_errno()) if (($ret = comedi_trigger($d, $it)) < 0); ($ret = sysread(COMDEV, $buf, 2*N_SAMPLES)) || die "Read error ($ret): $!"; foreach (unpack('s*', $buf)) { printf("%d\n", $_); } comedilib-0.11.0/perl/Lib/0000755000000000000000000000000012416542105012137 500000000000000comedilib-0.11.0/perl/Lib/Lib.xs0000644000000000000000000001212512416542105013142 00000000000000/* * Copyright (c) 1999 Joseph E. Smith * * All rights reserved. This program is free software. You may * redistribute it and/or modify it under the same terms as Perl itself. */ #ifdef __cplusplus extern "C" { #endif #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #ifdef __cplusplus } #endif #include #include static int not_here(s) char *s; { croak("%s not implemented on this architecture", s); return -1; } static double constant(name, arg) char *name; int arg; { errno = 0; switch (*name) { } errno = EINVAL; return 0; not_there: errno = ENOENT; return 0; } typedef struct comedi_trig_struct Trigger; MODULE = Comedi::Lib PACKAGE = Comedi::Lib double constant(name,arg) char * name int arg comedi_t * comedi_open(fn) const char * fn void comedi_close(it) comedi_t * it int comedi_loglevel(level) int level void comedi_perror(s) const char * s char * comedi_strerror(n) int n int comedi_errno() int comedi_fileno(it) comedi_t * it #/* queries */ int comedi_get_n_subdevices(it) comedi_t * it int comedi_get_version_code(it) comedi_t * it char * comedi_get_driver_name(it) comedi_t * it char * comedi_get_board_name(it) comedi_t * it int comedi_get_subdevice_type(it, subdevice) comedi_t * it unsigned int subdevice int comedi_find_subdevice_by_type(it, type, subd) comedi_t * it int type unsigned int subd int comedi_get_n_channels(it, subdevice) comedi_t * it unsigned int subdevice lsampl_t comedi_get_maxdata(it, subdevice, chan) comedi_t * it unsigned int subdevice unsigned int chan int comedi_get_rangetype(it, subdevice, chan) comedi_t * it unsigned int subdevice unsigned int chan int comedi_find_range(it, subd, chan, unit, min, max) comedi_t * it unsigned int subd unsigned int chan unsigned int unit double min double max #/* triggers and commands */ int comedi_cancel(it, subd) comedi_t * it unsigned int subd #/* # * This function takes a scalar holding a packed comedi trigger structure. # * The 'comedi_trigger' function (found in Lib.pm) takes a Perl trigger # * object and passes a packed structure to this function. # */ int _comedi_trigger(it, trig) comedi_t * it comedi_trig * trig PREINIT: int i; CODE: #ifdef LIB_DEBUG fprintf(stderr, "trigger: it=%08x, trig=%08x\n", it, trig); fprintf(stderr, "trigger: mode=%d, n=%d, tv=(%d,%d), nch=%d\n", trig->mode, trig->n, trig->trigvar, trig->trigvar1, trig->n_chan); fprintf(stderr, "chan list @%08x:", trig->chanlist); for(i = 0; i < trig->n_chan; ++i) { fprintf(stderr, " %08x", trig->chanlist[i]); } fprintf(stderr, "\n"); fprintf(stderr, "data buffer @%08x:", trig->data); for(i = 0; i < 6; ++i) { fprintf(stderr, " %04x", trig->data[i]); } fprintf(stderr, "\n"); #endif RETVAL = comedi_trigger(it, trig); OUTPUT: RETVAL int comedi_command(it, cmd) comedi_t * it comedi_cmd * cmd #/* physical units */ double comedi_to_phys(data, rng, maxdata) lsampl_t data comedi_range * rng lsampl_t maxdata lsampl_t comedi_from_phys(data, rng, maxdata) double data comedi_range * rng lsampl_t maxdata #/* synchronous stuff */ int comedi_data_read(it, subd, chan, range, aref, data) comedi_t * it unsigned int subd unsigned int chan unsigned int range unsigned int aref lsampl_t * data int comedi_data_write(it, subd, chan, range, aref, data) comedi_t * it unsigned int subd unsigned int chan unsigned int range unsigned int aref lsampl_t data #/* slowly varying stuff */ int comedi_sv_init(it, dev, subd, chan) comedi_sv_t * it comedi_t * dev unsigned int subd unsigned int chan OUTPUT: it int comedi_sv_update(it) comedi_sv_t * it int comedi_sv_measure(it, data) comedi_sv_t * it double * data #/* dio config */ int comedi_dio_config(it, subd, chan, dir) comedi_t * it unsigned int subd unsigned int chan unsigned int dir int comedi_dio_read(it, subd, chan, bit) comedi_t * it unsigned int subd unsigned int chan unsigned int &bit OUTPUT: bit int comedi_dio_write(it, subd, chan, bit) comedi_t * it unsigned int subd unsigned int chan unsigned int bit int comedi_dio_bitfield(it, subd, write_mask, bits) comedi_t * it unsigned int subd unsigned int write_mask unsigned int &bits OUTPUT: bits #/* timer stuff */ int comedi_get_timer(it, subdev, freq, trigvar, actual_freq) comedi_t * it unsigned int subdev double freq unsigned int &trigvar double &actual_freq OUTPUT: trigvar actual_freq int comedi_timed_1chan(it, subdev, chan, range, aref, freq, n_samples, data) comedi_t * it unsigned int subdev unsigned int chan unsigned int range unsigned int aref double freq unsigned int n_samples double * data CODE: #ifdef LIB_DEBUG fprintf(stderr, "timed_1chan: CR=(%d,%d,%d), f=%g, n=%d, data->0x%08x\n", chan, range, aref, freq, n_samples, data); #endif RETVAL = comedi_timed_1chan(it, subdev, chan, range, aref, freq, n_samples, data); OUTPUT: RETVAL #/* range stuff */ comedi_range * comedi_get_range(it, subdevice, chan, range) comedi_t * it unsigned int subdevice unsigned int chan unsigned int range comedilib-0.11.0/perl/Lib/Changes0000644000000000000000000000032212416542105013347 00000000000000Revision history for Perl extension Comedi::Lib. 0.01 Tue Nov 9 01:17:02 1999 - original version; created by h2xs 1.18 0.02 Tue Nov 16 11:49:11 EST 1999 - (Lib.xs) track changes to comedilib 0.7.6 (jes) comedilib-0.11.0/perl/Lib/Makefile.PL0000644000000000000000000000051512416542105014032 00000000000000use ExtUtils::MakeMaker; # See lib/ExtUtils/MakeMaker.pm for details of how to influence # the contents of the Makefile that is written. WriteMakefile( 'NAME' => 'Comedi::Lib', 'VERSION_FROM' => 'Lib.pm', 'LIBS' => ['-lcomedi'], 'DEFINE' => '', 'INC' => '', 'TYPEMAPS' => ['../typemap'], ); comedilib-0.11.0/perl/Lib/Lib.pm0000644000000000000000000001400512416542105013123 00000000000000# Copyright (c) 1999 Joseph E. Smith # # See the 'COPYRIGHT' section below for complete copyright information. package Comedi::Lib; use strict; use Carp; use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $AUTOLOAD); require Exporter; require DynaLoader; require AutoLoader; @ISA = qw(Exporter DynaLoader); %EXPORT_TAGS = ( Functions => [ qw( comedi_open comedi_close comedi_loglevel comedi_error comedi_perror comedi_strerror comedi_errno comedi_fileno comedi_get_n_subdevices comedi_get_version comedi_get_version_code comedi_get_driver_name comedi_get_board_name comedi_get_subdevice_type comedi_find_subdevice_by_type comedi_get_n_channels comedi_get_maxdata comedi_get_rangetype comedi_get_range comedi_find_range comedi_trigger comedi_to_phys comedi_from_phys comedi_data_read comedi_data_write comedi_sv_init comedi_sv_update comedi_sv_measure comedi_get_timer comedi_timed_1chan ) ], ); # Items to export into callers namespace by default. Note: do not export # names by default without a very good reason. Use EXPORT_OK instead. # Do not simply export all your public functions/methods/constants. @EXPORT = ( @{$EXPORT_TAGS{'Functions'}}); $VERSION = '0.02'; sub AUTOLOAD { # This AUTOLOAD is used to 'autoload' constants from the constant() # XS function. If a constant is not found then control is passed # to the AUTOLOAD in AutoLoader. my $constname; ($constname = $AUTOLOAD) =~ s/.*:://; my $val = constant($constname, @_ ? $_[0] : 0); if ($! != 0) { if ($! =~ /Invalid/) { $AutoLoader::AUTOLOAD = $AUTOLOAD; goto &AutoLoader::AUTOLOAD; } else { croak "Your vendor has not defined Comedilib macro $constname"; } } eval "sub $AUTOLOAD { $val }"; goto &$AUTOLOAD; } bootstrap Comedi::Lib $VERSION; # Preloaded methods go here. sub comedi_get_version { my $it = shift || return (); my $code = comedi_get_version_code($it); return (($code & 0xff0000) >> 16, ($code & 0x00ff00) >> 8, ($code & 0x0000ff)); } sub comedi_error { my $err = shift || comedi_errno(); return comedi_strerror($err); } sub comedi_trigger { my ($d, $t) = @_; if (ref($t) eq 'Comedi::Trigger') { _comedi_trigger($d, $t->{struct}); } else { _comedi_trigger($d, $t); } } # Autoload methods go after =cut, and are processed by the autosplit program. 1; __END__ # Below is the stub of documentation for your module. You better edit it! =head1 NAME Comedi::Lib - Perl API for B =head1 SYNOPSIS use Comedi::Lib; =head1 DESCRIPTION =head2 Core functions =item comedi_open $dev = comedi_open('/dev/comedi0'); =item comedi_close comedi_close($dev); =item comedi_loglevel $l = comedi_loglevel(4); =item comedi_perror comedi_perror('Oops!'); =item comedi_strerror $s = comedi_strerror($errno); =item comedi_errno $errno = comedi_errno(); =item comedi_error $s = comedi_error(); # get current error string $s = comedi_error($errno); # same as comedi_strerror =item comedi_fileno $fd = comedi_fileno($dev); =head2 Query functions =item comedi_get_n_subdevices $n = comedi_get_n_subdevices($dev); =item comedi_get_version_code $n = comedi_get_version_code($dev); =item comedi_get_version ($major, $minor, $rev) = comedi_get_version(); =item comedi_get_driver_name $s = comedi_get_driver_name($dev); =item comedi_get_board_name $s = comedi_get_board_name($dev); =item comedi_get_subdevice_type $n = comedi_get_subdevice_type($dev, $subd); =item comedi_find_subdevice_by_type $n = comedi_find_subdevice_by_type($dev, $type, $subd) =item comedi_get_n_channels $n = comedi_get_n_channels($dev, $subd); =item comedi_get_maxdata $n = comedi_get_maxdata($dev, $subd, $channel); =item comedi_get_rangetype $n = comedi_get_rangetype($dev, $subd, $channel); =item comedi_find_range $n = comedi_find_range($dev, $subd, $unit, $min, $max); =head2 Trigger and command functions =item comedi_cancel $n = comedi_cancel($dev, $subd) =item comedi_trigger =item _comedi_trigger $t_obj = new Comedi::Trigger(mode => 2, n => 100, ...); $ret = comedi_trigger($dev, $t_obj); # or equivalently... $ret = _comedi_trigger($dev, $t_obj->struct); =item comedi_command $n = comedi_command($dev, $cmd) This function is untested. B<$cmd> is a scalar holding a packed C structure. =head2 Functions dealing with physical units =item comedi_to_phys $v = comedi_to_phys($sample, $range, $maxdata); =item comedi_from_phys $n = comedi_from_phys($v, $range, $maxdata); =head2 Synchronous i/o functions =item comedi_data_read $n = comedi_data_read($dev, $subd, $range, $aref, $data); =item comedi_data_write $n = comedi_data_write($dev, $subd, $chan, $range, $aref, $data) =head2 Slowly-varying i/o functions =item comedi_sv_init $n = comedi_sv_init($svdev, $dev, $subd, $chan); =item comedi_sv_update $n = comedi_sv_update($svdev); =item comedi_sv_measure $n = comedi_sv_measure($svdev, $v); =head2 Digital i/o functions =item comedi_dio_config $n = comedi_dio_config($dev, $subd, $chan, $dir) =item comedi_dio_read $n = comedi_dio_read($dev, $subd, $chan, $bit) =item comedi_dio_write $n = comedi_dio_write($dev, $subd, $chan, $bit) =item comedi_dio_bitfield $n = comedi_dio_bitfield($dev, $subd, $mask, $bits) =head2 Timer functions =item comedi_get_timer $n = comedi_get_timer($dev, $subd, $freq, $ticks, $actual_freq); =item comedi_timed_1chan $n = comedi_timed_1chan($dev, $subd, $chan, $range, $aref, $freq, $n, $vdata); =head2 Range functions =item comedi_get_range $range = comedi_get_range($dev, $subd, $channel, $range_num); =head1 VERSION Version 0.01 09-Nov-1999 =head1 AUTHOR Joe Smith >. =head1 COPYRIGHT Copyright (c) 1999 Joseph E. Smith. All rights reserved. This program is free software. You may redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO Comedi(1), Comedi::Trigger(1). =cut comedilib-0.11.0/perl/Comedi.pm0000644000000000000000000001140112416542105013104 00000000000000#!/usr/bin/perl -w # Copyright (c) 1999 Joseph E. Smith # # See the 'COPYRIGHT' section below for complete copyright information. package Comedi; use strict; use Carp; use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $AUTOLOAD); require Exporter; require DynaLoader; require AutoLoader; @ISA = qw(Exporter DynaLoader); %EXPORT_TAGS = ( Constants => [ qw( AREF_COMMON AREF_DIFF AREF_GROUND AREF_OTHER COMEDI_INPUT COMEDI_MAJOR COMEDI_NAMELEN COMEDI_NDEVCONFOPTS COMEDI_NDEVICES COMEDI_OUTPUT ) ], Ioctls => [ qw( COMEDI_CANCEL COMEDI_CHANINFO COMEDI_DEVCONFIG COMEDI_DEVINFO COMEDI_LOCK COMEDI_RANGEINFO COMEDI_SUBDINFO COMEDI_TRIG COMEDI_UNLOCK ) ], SubdeviceTypes => [ qw( COMEDI_SUBD_AI COMEDI_SUBD_AO COMEDI_SUBD_CALIB COMEDI_SUBD_COUNTER COMEDI_SUBD_DI COMEDI_SUBD_DIO COMEDI_SUBD_DO COMEDI_SUBD_MEMORY COMEDI_SUBD_PROC COMEDI_SUBD_TIMER COMEDI_SUBD_UNUSED ) ], SubdeviceFlags => [ qw( SDF_BUSY SDF_BUSY_OWNER SDF_COMMON SDF_DEGLITCH SDF_DIFF SDF_DITHER SDF_FLAGS SDF_GROUND SDF_INTERNAL SDF_LOCKED SDF_LOCK_OWNER SDF_LSAMPL SDF_MAXDATA SDF_MMAP SDF_MODE0 SDF_MODE1 SDF_MODE2 SDF_MODE3 SDF_MODE4 SDF_OTHER SDF_RANGETYPE SDF_READABLE SDF_RT SDF_RUNNING SDF_WRITEABLE ) ], TriggerFlags => [ qw ( TRIG_BOGUS TRIG_CONFIG TRIG_DEGLITCH TRIG_DITHER TRIG_RT TRIG_WAKE_EOS TRIG_WRITE ) ], Units => [ qw ( UNIT_mA UNIT_none UNIT_volt ) ], Functions => [ qw( CR_PACK ) ], ); # Items to export into callers namespace by default. Note: do not export # names by default without a very good reason. Use EXPORT_OK instead. # Do not simply export all your public functions/methods/constants. @EXPORT = (); @EXPORT_OK = ( @{$EXPORT_TAGS{'Functions'}}, @{$EXPORT_TAGS{'Constants'}}, @{$EXPORT_TAGS{'Ioctls'}}, @{$EXPORT_TAGS{'SubdeviceTypes'}}, @{$EXPORT_TAGS{'SubdeviceFlags'}}, @{$EXPORT_TAGS{'TriggerFlags'}}, @{$EXPORT_TAGS{'Units'}}, ); $VERSION = '0.02'; sub AUTOLOAD { # This AUTOLOAD is used to 'autoload' constants from the constant() # XS function. If a constant is not found then control is passed # to the AUTOLOAD in AutoLoader. my $constname; ($constname = $AUTOLOAD) =~ s/.*:://; my $val = constant($constname, @_ ? $_[0] : 0); if ($! != 0) { if ($! =~ /Invalid/) { $AutoLoader::AUTOLOAD = $AUTOLOAD; goto &AutoLoader::AUTOLOAD; } else { croak "Your vendor has not defined Comedi macro $constname"; } } eval "sub $AUTOLOAD { $val }"; goto &$AUTOLOAD; } bootstrap Comedi $VERSION; # Preloaded methods go here. sub CR_PACK { my ($chan, $rng, $aref) = @_; return ( ((($aref)&0x3)<<24) | ((($rng)&0xff)<<16) | (($chan)&0xffff) ); } # Autoload methods go after =cut, and are processed by the autosplit program. 1; __END__ =head1 NAME Comedi - Perl extension for data acquisition using comedi =head1 SYNOPSIS use Comedi qw( :Functions :Constants :Ioctls :SubdeviceTypes :SubdeviceFlags :TriggerFlags :Units ); =head1 DESCRIPTION The B module provides constants and data types for using the comedi data acquisition module. By itself, this module will allow you to access the B module using standard I/O functions and ioctls. For more robust access to B, see the B module. =head1 Exported constants The large number of constants defined in C are divided into several functional categories for export. No constants are exported by default. =item Constants AREF_COMMON AREF_DIFF AREF_GROUND AREF_OTHER COMEDI_INPUT COMEDI_MAJOR COMEDI_NAMELEN COMEDI_NDEVCONFOPTS COMEDI_NDEVICES COMEDI_OUTPUT =item Ioctls COMEDI_CANCEL COMEDI_CHANINFO COMEDI_DEVCONFIG COMEDI_DEVINFO COMEDI_LOCK COMEDI_RANGEINFO COMEDI_SUBDINFO COMEDI_TRIG COMEDI_UNLOCK =item SubdeviceTypes COMEDI_SUBD_AI COMEDI_SUBD_AO COMEDI_SUBD_CALIB COMEDI_SUBD_COUNTER COMEDI_SUBD_DI COMEDI_SUBD_DIO COMEDI_SUBD_DO COMEDI_SUBD_MEMORY COMEDI_SUBD_PROC COMEDI_SUBD_TIMER COMEDI_SUBD_UNUSED =item SubdeviceFlags SDF_BUSY SDF_BUSY_OWNER SDF_COMMON SDF_DEGLITCH SDF_DIFF SDF_DITHER SDF_FLAGS SDF_GROUND SDF_INTERNAL SDF_LOCKED SDF_LOCK_OWNER SDF_LSAMPL SDF_MAXDATA SDF_MMAP SDF_MODE0 SDF_MODE1 SDF_MODE2 SDF_MODE3 SDF_MODE4 SDF_OTHER SDF_RANGETYPE SDF_READABLE SDF_RT SDF_RUNNING SDF_WRITEABLE =item TriggerFlags TRIG_BOGUS TRIG_CONFIG TRIG_DEGLITCH TRIG_DITHER TRIG_RT TRIG_WAKE_EOS TRIG_WRITE =item Units UNIT_mA UNIT_none UNIT_volt =item Functions CR_PACK =head1 VERSION Version 0.01 09-Nov-1999 =head1 AUTHOR Joe Smith >. =head1 COPYRIGHT Copyright (c) 1999 Joseph E. Smith. All rights reserved. This program is free software. You may redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO Comedi::Trigger(1), Comedi::Lib(1). =cut comedilib-0.11.0/perl/README0000644000000000000000000000212212416542105012226 00000000000000 Comedi and Comedi::Lib: A Perl API for comedi and comedilib Version 0.02 16-Nov-1999 This is a first pass at a Perl extension for using comedi and comedilib (http://www.comedi.org/comedi). This is also my first attempt at a Perl extension, so be warned! I started with h2xs and hacked away at it from there. Please pass the clues if you're an XS wizard. There are some example scripts but no tests (yet). You can run the examples before actually installing the modules (make install) using the little script 'lperl', e.g., [jes@rtc Comedi]$ ./lperl example.perl The modules and examples were tested with comedi 0.7.{19,26} and comedilib 0.7.{3,5,6}, using an NI-MIO-16e. There should be no board-specific stuff here (except possibly the subdevice codes); please let me know if it (does|doesn't) work with other boards. There is very little object oriented code here, and what is here (a Trigger object) need not be used. Right now, I'm not anxious to add another layer over comedi, which is still alpha. Any ideas or suggestions are welcome, however. Joe Smith comedilib-0.11.0/perl/info.perl0000644000000000000000000000250712416542105013174 00000000000000 use Comedi qw( :SubdeviceTypes ); use Comedi::Lib; sub help { print STDERR "info \n"; exit(0); } %subdevice_types = ( COMEDI_SUBD_UNUSED, 'unused', COMEDI_SUBD_AI, 'analog input', COMEDI_SUBD_AO, 'analog output', COMEDI_SUBD_DI, 'digital input', COMEDI_SUBD_DO, 'digital output', COMEDI_SUBD_DIO, 'digital I/O', COMEDI_SUBD_COUNTER, 'counter', COMEDI_SUBD_TIMER, 'timer', COMEDI_SUBD_MEMORY, 'memory', COMEDI_SUBD_CALIB, 'calibration', COMEDI_SUBD_PROC, 'processor', ); # # Main Program # help() if (@ARGV != 1); $it = comedi_open($ARGV[0]) || die "cannot open $ARGV[0]: $!"; printf("overall info:\n"); printf(" version code: %d.%d.%d (0x%06x)\n", comedi_get_version($it), comedi_get_version_code($it)); printf(" driver name: %s\n", comedi_get_driver_name($it)); printf(" board name: %s\n", comedi_get_board_name($it)); printf(" number of subdevices: %d\n", $n_subdevices = comedi_get_n_subdevices($it)); for ($i = 0; $i < $n_subdevices; $i++) { printf("subdevice %d:\n", $i); $type = comedi_get_subdevice_type($it, $i); printf(" type: %d (%s)\n", $type, $subdevice_types{$type}); printf(" number of channels: %d\n", comedi_get_n_channels($it, $i)); printf(" max data value: %d\n", comedi_get_maxdata($it, $i, 0)); } comedilib-0.11.0/perl/typemap0000644000000000000000000000046112416542105012754 00000000000000TYPEMAP const char * T_PV lsampl_t T_U_INT sampl_t T_U_SHORT comedi_t * T_PTRREF comedi_sv_t * T_PTRREF comedi_range * T_PTRREF # these are buffers: perl scalar holding binary data # comedi_trig * T_PV comedi_cmd * T_PV sampl_t * T_PV lsampl_t * T_PV double * T_PV buffer_t * T_PV Trigger * T_PTROBJ comedilib-0.11.0/perl/mode1.perl0000644000000000000000000000172112416542105013243 00000000000000 # A little input demo use Comedi::Trigger; use Comedilib qw( :DEFAULT :Constants :Ioctls ) ; use constant ( AI_DEV => 0, AI_SUB => 0, AO_DEV => 0, AO_SUB => 1, ); $fn = '/dev/comedi0'; # create a channel list # @ch = ( CR_PACK(0, 0, AREF_GROUND), CR_PACK(1, 0, AREF_GROUND) ); $d = comedi_open($fn) || die "Can't open '$fn': " . comedi_error(); $freq = $opt_f || 1000; comedi_loglevel(4); # convert the requested frequency into a timer value # ($ret = comedi_get_timer($d, AI_SUB, $freq, $ticks, $actual_freq)) == 0 || die "Can't get timer: " . comedi_strerror($ret); $buf = pack('S*', 100..119); # create a trigger object # $it = new Comedi::Trigger( mode => 1, chanlist => \@ch, n => 20, data => \$buf, major => $ticks); die "Mode 1 doesn't work yet..."; ($ret = comedi_trigger($d, $it)) > 0 || die "Analog input error: " . comedi_strerror(comedi_errno()) ; foreach (unpack('S*', ${$it->data})) { printf("%d\n", $_); } comedilib-0.11.0/perl/mode2lib.perl0000644000000000000000000000152612416542105013736 00000000000000 # A little input demo use Comedi qw( :Functions :Constants ); use Comedi::Lib; use constant AI_DEV => 0; use constant AI_SUB => 0; use constant AO_DEV => 0; use constant AO_SUB => 1; use constant N_SAMPLES => 100; $fn = '/dev/comedi0'; # create a channel list # @ch = ( CR_PACK(0, 0, AREF_GROUND)); $d = comedi_open($fn) || die "Can't open '$fn': " . comedi_error(); $freq = $opt_f || 1000; # convert the requested frequency into a timer value # ($ret = comedi_get_timer($d, AI_SUB, $freq, $ticks, $actual_freq)) == 0 || die "Can't get timer: " . comedi_strerror($ret); $buf = pack('d*', 100..(100+N_SAMPLES-1)); ($ret = comedi_timed_1chan($d, AI_SUB, 0, 0, AREF_GROUND, 1000, N_SAMPLES, $buf)) == 0 || die "Analog input error ($ret): " . comedi_strerror(comedi_errno()) ; foreach (unpack('d*', $buf)) { printf("%g\n", $_); } comedilib-0.11.0/Makefile.in0000644000000000000000000007356613140064520012470 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/am-check-python-headers.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/as-libtool.m4 $(top_srcdir)/m4/ax_tls.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = comedilib.spec comedilib.pc CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgconfigdir)" DATA = $(pkgconfig_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/comedilib.pc.in \ $(srcdir)/comedilib.spec.in $(srcdir)/config.h.in AUTHORS \ COPYING ChangeLog INSTALL NEWS README ar-lib compile \ config.guess config.sub depcomp install-sh ltmain.sh missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COMEDILIB_AGE = @COMEDILIB_AGE@ COMEDILIB_CFLAGS = @COMEDILIB_CFLAGS@ COMEDILIB_CURRENT = @COMEDILIB_CURRENT@ COMEDILIB_LIBS = @COMEDILIB_LIBS@ COMEDILIB_LIBVERSION = @COMEDILIB_LIBVERSION@ COMEDILIB_LT_LDFLAGS = @COMEDILIB_LT_LDFLAGS@ COMEDILIB_REVISION = @COMEDILIB_REVISION@ COMEDILIB_VERSION_MAJOR = @COMEDILIB_VERSION_MAJOR@ COMEDILIB_VERSION_MICRO = @COMEDILIB_VERSION_MICRO@ COMEDILIB_VERSION_MINOR = @COMEDILIB_VERSION_MINOR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_BACKEND = @PDF_BACKEND@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_QUIET = @PYTHON_QUIET@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_CONFIG_OPTIONS = @RUBY_CONFIG_OPTIONS@ RUBY_PREFIX = @RUBY_PREFIX@ RUBY_SO_DIR = @RUBY_SO_DIR@ SCXI_SO_VERSION = @SCXI_SO_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ VERSION = @VERSION@ XMLTO = @XMLTO@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pcmciadir = @pcmciadir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ udevfirmwaredir = @udevfirmwaredir@ udevrulesdir = @udevrulesdir@ udevscriptsdir = @udevscriptsdir@ SUBDIRS = lib comedi_config man testing demo comedi_board_info doc swig \ include etc scxi c++ pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = comedilib.pc EXTRA_DIST = comedilib.spec autogen.sh perl ACLOCAL_AMFLAGS = -I m4 DISTCHECK_CONFIGURE_FLAGS = RUBY_PREFIX='$${prefix}' --disable-ruby-binding all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 comedilib.spec: $(top_builddir)/config.status $(srcdir)/comedilib.spec.in cd $(top_builddir) && $(SHELL) ./config.status $@ comedilib.pc: $(top_builddir)/config.status $(srcdir)/comedilib.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(DATA) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(pkgconfigdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr \ distclean-libtool distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-data-local install-pkgconfigDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-pkgconfigDATA .MAKE: $(am__recursive_targets) all install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ clean-libtool cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-hook dist-lzip dist-shar \ dist-tarZ dist-xz dist-zip distcheck distclean \ distclean-generic distclean-hdr distclean-libtool \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-data-local install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgconfigDATA install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-pkgconfigDATA .PRECIOUS: Makefile install-data-local: $(MKDIR_P) "$(DESTDIR)$(localstatedir)/lib/comedi/calibrations" dist-hook: @if test -d "$(srcdir)/.git"; \ then \ echo Creating ChangeLog && \ ( cd "$(top_srcdir)" && \ echo '# Generated by Makefile. Do not edit.'; echo; \ $(top_srcdir)/missing --run \ git log --stat --name-only --date=iso ) \ > ChangeLog.tmp \ && mv -f ChangeLog.tmp $(distdir)/ChangeLog \ || ( rm -f ChangeLog.tmp ; \ echo Failed to generate ChangeLog >&2 ); \ else \ echo A git clone is required to generate a ChangeLog >&2; \ fi dev: -for i in `seq 0 15`; do \ mknod -m 666 /dev/comedi$$i c 98 $$i \ ; \ done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: comedilib-0.11.0/missing0000755000000000000000000001533012426145301012006 00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2013-10-28.13; # UTC # Copyright (C) 1996-2013 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: comedilib-0.11.0/ltmain.sh0000644000000000000000000117146412665545466012270 00000000000000#! /bin/sh ## DO NOT EDIT - This file generated from ./build-aux/ltmain.in ## by inline-source v2014-01-03.01 # libtool (GNU libtool) 2.4.6 # Provide generalized library-building support services. # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . PROGRAM=libtool PACKAGE=libtool VERSION="2.4.6 Debian-2.4.6-0.1" package_revision=2.4.6 ## ------ ## ## Usage. ## ## ------ ## # Run './libtool --help' for help with using this script from the # command line. ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # After configure completes, it has a better idea of some of the # shell tools we need than the defaults used by the functions shared # with bootstrap, so set those here where they can still be over- # ridden by the user, but otherwise take precedence. : ${AUTOCONF="autoconf"} : ${AUTOMAKE="automake"} ## -------------------------- ## ## Source external libraries. ## ## -------------------------- ## # Much of our low-level functionality needs to be sourced from external # libraries, which are installed to $pkgauxdir. # Set a version string for this script. scriptversion=2015-01-20.17; # UTC # General shell script boiler plate, and helper functions. # Written by Gary V. Vaughan, 2004 # Copyright (C) 2004-2015 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. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # As a special exception to the GNU General Public License, if you distribute # this file as part of a program or library that is built using GNU Libtool, # you may include this file under the same distribution terms that you use # for the rest of that program. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Please report bugs or propose patches to gary@gnu.org. ## ------ ## ## Usage. ## ## ------ ## # Evaluate this file near the top of your script to gain access to # the functions and variables defined here: # # . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh # # If you need to override any of the default environment variable # settings, do that before evaluating this file. ## -------------------- ## ## Shell normalisation. ## ## -------------------- ## # Some shells need a little help to be as Bourne compatible as possible. # Before doing anything else, make sure all that help has been provided! DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # NLS nuisances: We save the old values in case they are required later. _G_user_locale= _G_safe_locale= for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test set = \"\${$_G_var+set}\"; then save_$_G_var=\$$_G_var $_G_var=C export $_G_var _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" fi" done # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Make sure IFS has a sensible default sp=' ' nl=' ' IFS="$sp $nl" # There are apparently some retarded systems that use ';' as a PATH separator! if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi ## ------------------------- ## ## Locate command utilities. ## ## ------------------------- ## # func_executable_p FILE # ---------------------- # Check that FILE is an executable regular file. func_executable_p () { test -f "$1" && test -x "$1" } # func_path_progs PROGS_LIST CHECK_FUNC [PATH] # -------------------------------------------- # Search for either a program that responds to --version with output # containing "GNU", or else returned by CHECK_FUNC otherwise, by # trying all the directories in PATH with each of the elements of # PROGS_LIST. # # CHECK_FUNC should accept the path to a candidate program, and # set $func_check_prog_result if it truncates its output less than # $_G_path_prog_max characters. func_path_progs () { _G_progs_list=$1 _G_check_func=$2 _G_PATH=${3-"$PATH"} _G_path_prog_max=0 _G_path_prog_found=false _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} for _G_dir in $_G_PATH; do IFS=$_G_save_IFS test -z "$_G_dir" && _G_dir=. for _G_prog_name in $_G_progs_list; do for _exeext in '' .EXE; do _G_path_prog=$_G_dir/$_G_prog_name$_exeext func_executable_p "$_G_path_prog" || continue case `"$_G_path_prog" --version 2>&1` in *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; *) $_G_check_func $_G_path_prog func_path_progs_result=$func_check_prog_result ;; esac $_G_path_prog_found && break 3 done done done IFS=$_G_save_IFS test -z "$func_path_progs_result" && { echo "no acceptable sed could be found in \$PATH" >&2 exit 1 } } # We want to be able to use the functions in this file before configure # has figured out where the best binaries are kept, which means we have # to search for them ourselves - except when the results are already set # where we skip the searches. # Unless the user overrides by setting SED, search the path for either GNU # sed, or the sed that truncates its output the least. test -z "$SED" && { _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for _G_i in 1 2 3 4 5 6 7; do _G_sed_script=$_G_sed_script$nl$_G_sed_script done echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed _G_sed_script= func_check_prog_sed () { _G_path_prog=$1 _G_count=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo '' >> conftest.nl "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin rm -f conftest.sed SED=$func_path_progs_result } # Unless the user overrides by setting GREP, search the path for either GNU # grep, or the grep that truncates its output the least. test -z "$GREP" && { func_check_prog_grep () { _G_path_prog=$1 _G_count=0 _G_path_prog_max=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo 'GREP' >> conftest.nl "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin GREP=$func_path_progs_result } ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # All uppercase variable names are used for environment variables. These # variables can be overridden by the user before calling a script that # uses them if a suitable command of that name is not already available # in the command search PATH. : ${CP="cp -f"} : ${ECHO="printf %s\n"} : ${EGREP="$GREP -E"} : ${FGREP="$GREP -F"} : ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} ## -------------------- ## ## Useful sed snippets. ## ## -------------------- ## sed_dirname='s|/[^/]*$||' sed_basename='s|^.*/||' # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='s|\([`"$\\]\)|\\\1|g' # Same as above, but do not quote variable references. sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' # Sed substitution that converts a w32 file name or path # that contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-'\' parameter expansions in output of sed_double_quote_subst that # were '\'-ed in input to the same. If an odd number of '\' preceded a # '$' in input to sed_double_quote_subst, that '$' was protected from # expansion. Since each input '\' is now two '\'s, look for any number # of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. _G_bs='\\' _G_bs2='\\\\' _G_bs4='\\\\\\\\' _G_dollar='\$' sed_double_backslash="\ s/$_G_bs4/&\\ /g s/^$_G_bs2$_G_dollar/$_G_bs&/ s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g s/\n//g" ## ----------------- ## ## Global variables. ## ## ----------------- ## # Except for the global variables explicitly listed below, the following # functions in the '^func_' namespace, and the '^require_' namespace # variables initialised in the 'Resource management' section, sourcing # this file will not pollute your global namespace with anything # else. There's no portable way to scope variables in Bourne shell # though, so actually running these functions will sometimes place # results into a variable named after the function, and often use # temporary variables in the '^_G_' namespace. If you are careful to # avoid using those namespaces casually in your sourcing script, things # should continue to work as you expect. And, of course, you can freely # overwrite any of the functions or variables defined here before # calling anything to customize them. EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. # Allow overriding, eg assuming that you follow the convention of # putting '$debug_cmd' at the start of all your functions, you can get # bash to show function call trace with: # # debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name debug_cmd=${debug_cmd-":"} exit_cmd=: # By convention, finish your script with: # # exit $exit_status # # so that you can set exit_status to non-zero if you want to indicate # something went wrong during execution without actually bailing out at # the point of failure. exit_status=$EXIT_SUCCESS # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath=$0 # The name of this program. progname=`$ECHO "$progpath" |$SED "$sed_basename"` # Make sure we have an absolute progpath for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` progdir=`cd "$progdir" && pwd` progpath=$progdir/$progname ;; *) _G_IFS=$IFS IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS=$_G_IFS test -x "$progdir/$progname" && break done IFS=$_G_IFS test -n "$progdir" || progdir=`pwd` progpath=$progdir/$progname ;; esac ## ----------------- ## ## Standard options. ## ## ----------------- ## # The following options affect the operation of the functions defined # below, and should be set appropriately depending on run-time para- # meters passed on the command line. opt_dry_run=false opt_quiet=false opt_verbose=false # Categories 'all' and 'none' are always available. Append any others # you will pass as the first argument to func_warning from your own # code. warning_categories= # By default, display warnings according to 'opt_warning_types'. Set # 'warning_func' to ':' to elide all warnings, or func_fatal_error to # treat the next displayed warning as a fatal error. warning_func=func_warn_and_continue # Set to 'all' to display all warnings, 'none' to suppress all # warnings, or a space delimited list of some subset of # 'warning_categories' to display only the listed warnings. opt_warning_types=all ## -------------------- ## ## Resource management. ## ## -------------------- ## # This section contains definitions for functions that each ensure a # particular resource (a file, or a non-empty configuration variable for # example) is available, and if appropriate to extract default values # from pertinent package files. Call them using their associated # 'require_*' variable to ensure that they are executed, at most, once. # # It's entirely deliberate that calling these functions can set # variables that don't obey the namespace limitations obeyed by the rest # of this file, in order that that they be as useful as possible to # callers. # require_term_colors # ------------------- # Allow display of bold text on terminals that support it. require_term_colors=func_require_term_colors func_require_term_colors () { $debug_cmd test -t 1 && { # COLORTERM and USE_ANSI_COLORS environment variables take # precedence, because most terminfo databases neglect to describe # whether color sequences are supported. test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} if test 1 = "$USE_ANSI_COLORS"; then # Standard ANSI escape sequences tc_reset='' tc_bold=''; tc_standout='' tc_red=''; tc_green='' tc_blue=''; tc_cyan='' else # Otherwise trust the terminfo database after all. test -n "`tput sgr0 2>/dev/null`" && { tc_reset=`tput sgr0` test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` tc_standout=$tc_bold test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` } fi } require_term_colors=: } ## ----------------- ## ## Function library. ## ## ----------------- ## # This section contains a variety of useful functions to call in your # scripts. Take note of the portable wrappers for features provided by # some modern shells, which will fall back to slower equivalents on # less featureful shells. # func_append VAR VALUE # --------------------- # Append VALUE onto the existing contents of VAR. # We should try to minimise forks, especially on Windows where they are # unreasonably slow, so skip the feature probes when bash or zsh are # being used: if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then : ${_G_HAVE_ARITH_OP="yes"} : ${_G_HAVE_XSI_OPS="yes"} # The += operator was introduced in bash 3.1 case $BASH_VERSION in [12].* | 3.0 | 3.0*) ;; *) : ${_G_HAVE_PLUSEQ_OP="yes"} ;; esac fi # _G_HAVE_PLUSEQ_OP # Can be empty, in which case the shell is probed, "yes" if += is # useable or anything else if it does not work. test -z "$_G_HAVE_PLUSEQ_OP" \ && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ && _G_HAVE_PLUSEQ_OP=yes if test yes = "$_G_HAVE_PLUSEQ_OP" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_append () { $debug_cmd eval "$1+=\$2" }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_append () { $debug_cmd eval "$1=\$$1\$2" } fi # func_append_quoted VAR VALUE # ---------------------------- # Quote VALUE and append to the end of shell variable VAR, separated # by a space. if test yes = "$_G_HAVE_PLUSEQ_OP"; then eval 'func_append_quoted () { $debug_cmd func_quote_for_eval "$2" eval "$1+=\\ \$func_quote_for_eval_result" }' else func_append_quoted () { $debug_cmd func_quote_for_eval "$2" eval "$1=\$$1\\ \$func_quote_for_eval_result" } fi # func_append_uniq VAR VALUE # -------------------------- # Append unique VALUE onto the existing contents of VAR, assuming # entries are delimited by the first character of VALUE. For example: # # func_append_uniq options " --another-option option-argument" # # will only append to $options if " --another-option option-argument " # is not already present somewhere in $options already (note spaces at # each end implied by leading space in second argument). func_append_uniq () { $debug_cmd eval _G_current_value='`$ECHO $'$1'`' _G_delim=`expr "$2" : '\(.\)'` case $_G_delim$_G_current_value$_G_delim in *"$2$_G_delim"*) ;; *) func_append "$@" ;; esac } # func_arith TERM... # ------------------ # Set func_arith_result to the result of evaluating TERMs. test -z "$_G_HAVE_ARITH_OP" \ && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ && _G_HAVE_ARITH_OP=yes if test yes = "$_G_HAVE_ARITH_OP"; then eval 'func_arith () { $debug_cmd func_arith_result=$(( $* )) }' else func_arith () { $debug_cmd func_arith_result=`expr "$@"` } fi # func_basename FILE # ------------------ # Set func_basename_result to FILE with everything up to and including # the last / stripped. if test yes = "$_G_HAVE_XSI_OPS"; then # If this shell supports suffix pattern removal, then use it to avoid # forking. Hide the definitions single quotes in case the shell chokes # on unsupported syntax... _b='func_basename_result=${1##*/}' _d='case $1 in */*) func_dirname_result=${1%/*}$2 ;; * ) func_dirname_result=$3 ;; esac' else # ...otherwise fall back to using sed. _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` if test "X$func_dirname_result" = "X$1"; then func_dirname_result=$3 else func_append func_dirname_result "$2" fi' fi eval 'func_basename () { $debug_cmd '"$_b"' }' # func_dirname FILE APPEND NONDIR_REPLACEMENT # ------------------------------------------- # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. eval 'func_dirname () { $debug_cmd '"$_d"' }' # func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT # -------------------------------------------------------- # Perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # For efficiency, we do not delegate to the functions above but instead # duplicate the functionality here. eval 'func_dirname_and_basename () { $debug_cmd '"$_b"' '"$_d"' }' # func_echo ARG... # ---------------- # Echo program name prefixed message. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname: $_G_line" done IFS=$func_echo_IFS } # func_echo_all ARG... # -------------------- # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_echo_infix_1 INFIX ARG... # ------------------------------ # Echo program name, followed by INFIX on the first line, with any # additional lines not showing INFIX. func_echo_infix_1 () { $debug_cmd $require_term_colors _G_infix=$1; shift _G_indent=$_G_infix _G_prefix="$progname: $_G_infix: " _G_message=$* # Strip color escape sequences before counting printable length for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" do test -n "$_G_tc" && { _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` } done _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes func_echo_infix_1_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_infix_1_IFS $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 _G_prefix=$_G_indent done IFS=$func_echo_infix_1_IFS } # func_error ARG... # ----------------- # Echo program name prefixed message to standard error. func_error () { $debug_cmd $require_term_colors func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 } # func_fatal_error ARG... # ----------------------- # Echo program name prefixed message to standard error, and exit. func_fatal_error () { $debug_cmd func_error "$*" exit $EXIT_FAILURE } # func_grep EXPRESSION FILENAME # ----------------------------- # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $debug_cmd $GREP "$1" "$2" >/dev/null 2>&1 } # func_len STRING # --------------- # Set func_len_result to the length of STRING. STRING may not # start with a hyphen. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_len () { $debug_cmd func_len_result=${#1} }' else func_len () { $debug_cmd func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` } fi # func_mkdir_p DIRECTORY-PATH # --------------------------- # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { $debug_cmd _G_directory_path=$1 _G_dir_list= if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then # Protect directory names starting with '-' case $_G_directory_path in -*) _G_directory_path=./$_G_directory_path ;; esac # While some portion of DIR does not yet exist... while test ! -d "$_G_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. _G_dir_list=$_G_directory_path:$_G_dir_list # If the last portion added has no slash in it, the list is done case $_G_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` done _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` func_mkdir_p_IFS=$IFS; IFS=: for _G_dir in $_G_dir_list; do IFS=$func_mkdir_p_IFS # mkdir can fail with a 'File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$_G_dir" 2>/dev/null || : done IFS=$func_mkdir_p_IFS # Bail out if we (or some other process) failed to create a directory. test -d "$_G_directory_path" || \ func_fatal_error "Failed to create '$1'" fi } # func_mktempdir [BASENAME] # ------------------------- # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, BASENAME is the basename for that directory. func_mktempdir () { $debug_cmd _G_template=${TMPDIR-/tmp}/${1-$progname} if test : = "$opt_dry_run"; then # Return a directory name, but don't create it in dry-run mode _G_tmpdir=$_G_template-$$ else # If mktemp works, use that first and foremost _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` if test ! -d "$_G_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race _G_tmpdir=$_G_template-${RANDOM-0}$$ func_mktempdir_umask=`umask` umask 0077 $MKDIR "$_G_tmpdir" umask $func_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$_G_tmpdir" || \ func_fatal_error "cannot create temporary directory '$_G_tmpdir'" fi $ECHO "$_G_tmpdir" } # func_normal_abspath PATH # ------------------------ # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. func_normal_abspath () { $debug_cmd # These SED scripts presuppose an absolute path with a trailing slash. _G_pathcar='s|^/\([^/]*\).*$|\1|' _G_pathcdr='s|^/[^/]*||' _G_removedotparts=':dotsl s|/\./|/|g t dotsl s|/\.$|/|' _G_collapseslashes='s|/\{1,\}|/|g' _G_finalslash='s|/*$|/|' # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` while :; do # Processed it all yet? if test / = "$func_normal_abspath_tpath"; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result"; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_notquiet ARG... # -------------------- # Echo program name prefixed message only when not in quiet mode. func_notquiet () { $debug_cmd $opt_quiet || func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_relative_path SRCDIR DSTDIR # -------------------------------- # Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. func_relative_path () { $debug_cmd func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=$func_dirname_result if test -z "$func_relative_path_tlibdir"; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test -n "$func_stripname_result"; then func_append func_relative_path_result "/$func_stripname_result" fi # Normalisation. If bindir is libdir, return '.' else relative path. if test -n "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result" func_relative_path_result=$func_stripname_result fi test -n "$func_relative_path_result" || func_relative_path_result=. : } # func_quote_for_eval ARG... # -------------------------- # Aesthetically quote ARGs to be evaled later. # This function returns two values: # i) func_quote_for_eval_result # double-quoted, suitable for a subsequent eval # ii) func_quote_for_eval_unquoted_result # has all characters that are still active within double # quotes backslashified. func_quote_for_eval () { $debug_cmd func_quote_for_eval_unquoted_result= func_quote_for_eval_result= while test 0 -lt $#; do case $1 in *[\\\`\"\$]*) _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; *) _G_unquoted_arg=$1 ;; esac if test -n "$func_quote_for_eval_unquoted_result"; then func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" else func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" fi case $_G_unquoted_arg in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and variable expansion # for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") _G_quoted_arg=\"$_G_unquoted_arg\" ;; *) _G_quoted_arg=$_G_unquoted_arg ;; esac if test -n "$func_quote_for_eval_result"; then func_append func_quote_for_eval_result " $_G_quoted_arg" else func_append func_quote_for_eval_result "$_G_quoted_arg" fi shift done } # func_quote_for_expand ARG # ------------------------- # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { $debug_cmd case $1 in *[\\\`\"]*) _G_arg=`$ECHO "$1" | $SED \ -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; *) _G_arg=$1 ;; esac case $_G_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") _G_arg=\"$_G_arg\" ;; esac func_quote_for_expand_result=$_G_arg } # func_stripname PREFIX SUFFIX NAME # --------------------------------- # strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_stripname () { $debug_cmd # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary variable first. func_stripname_result=$3 func_stripname_result=${func_stripname_result#"$1"} func_stripname_result=${func_stripname_result%"$2"} }' else func_stripname () { $debug_cmd case $2 in .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; esac } fi # func_show_eval CMD [FAIL_EXP] # ----------------------------- # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} func_quote_for_expand "$_G_cmd" eval "func_notquiet $func_quote_for_expand_result" $opt_dry_run || { eval "$_G_cmd" _G_status=$? if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_show_eval_locale CMD [FAIL_EXP] # ------------------------------------ # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} $opt_quiet || { func_quote_for_expand "$_G_cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || { eval "$_G_user_locale $_G_cmd" _G_status=$? eval "$_G_safe_locale" if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_tr_sh # ---------- # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { $debug_cmd case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_verbose ARG... # ------------------- # Echo program name prefixed message in verbose mode only. func_verbose () { $debug_cmd $opt_verbose && func_echo "$*" : } # func_warn_and_continue ARG... # ----------------------------- # Echo program name prefixed warning message to standard error. func_warn_and_continue () { $debug_cmd $require_term_colors func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 } # func_warning CATEGORY ARG... # ---------------------------- # Echo program name prefixed warning message to standard error. Warning # messages can be filtered according to CATEGORY, where this function # elides messages where CATEGORY is not listed in the global variable # 'opt_warning_types'. func_warning () { $debug_cmd # CATEGORY must be in the warning_categories list! case " $warning_categories " in *" $1 "*) ;; *) func_internal_error "invalid warning category '$1'" ;; esac _G_category=$1 shift case " $opt_warning_types " in *" $_G_category "*) $warning_func ${1+"$@"} ;; esac } # func_sort_ver VER1 VER2 # ----------------------- # 'sort -V' is not generally available. # Note this deviates from the version comparison in automake # in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a # but this should suffice as we won't be specifying old # version formats or redundant trailing .0 in bootstrap.conf. # If we did want full compatibility then we should probably # use m4_version_compare from autoconf. func_sort_ver () { $debug_cmd printf '%s\n%s\n' "$1" "$2" \ | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n } # func_lt_ver PREV CURR # --------------------- # Return true if PREV and CURR are in the correct order according to # func_sort_ver, otherwise false. Use it like this: # # func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." func_lt_ver () { $debug_cmd test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: #! /bin/sh # Set a version string for this script. scriptversion=2014-01-07.03; # UTC # A portable, pluggable option parser for Bourne shell. # Written by Gary V. Vaughan, 2010 # Copyright (C) 2010-2015 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. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Please report bugs or propose patches to gary@gnu.org. ## ------ ## ## Usage. ## ## ------ ## # This file is a library for parsing options in your shell scripts along # with assorted other useful supporting features that you can make use # of too. # # For the simplest scripts you might need only: # # #!/bin/sh # . relative/path/to/funclib.sh # . relative/path/to/options-parser # scriptversion=1.0 # func_options ${1+"$@"} # eval set dummy "$func_options_result"; shift # ...rest of your script... # # In order for the '--version' option to work, you will need to have a # suitably formatted comment like the one at the top of this file # starting with '# Written by ' and ending with '# warranty; '. # # For '-h' and '--help' to work, you will also need a one line # description of your script's purpose in a comment directly above the # '# Written by ' line, like the one at the top of this file. # # The default options also support '--debug', which will turn on shell # execution tracing (see the comment above debug_cmd below for another # use), and '--verbose' and the func_verbose function to allow your script # to display verbose messages only when your user has specified # '--verbose'. # # After sourcing this file, you can plug processing for additional # options by amending the variables from the 'Configuration' section # below, and following the instructions in the 'Option parsing' # section further down. ## -------------- ## ## Configuration. ## ## -------------- ## # You should override these variables in your script after sourcing this # file so that they reflect the customisations you have added to the # option parser. # The usage line for option parsing errors and the start of '-h' and # '--help' output messages. You can embed shell variables for delayed # expansion at the time the message is displayed, but you will need to # quote other shell meta-characters carefully to prevent them being # expanded when the contents are evaled. usage='$progpath [OPTION]...' # Short help message in response to '-h' and '--help'. Add to this or # override it after sourcing this library to reflect the full set of # options your script accepts. usage_message="\ --debug enable verbose shell tracing -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -v, --verbose verbosely report processing --version print version information and exit -h, --help print short or long help message and exit " # Additional text appended to 'usage_message' in response to '--help'. long_help_message=" Warning categories include: 'all' show all warnings 'none' turn off all the warnings 'error' warnings are treated as fatal errors" # Help message printed before fatal option parsing errors. fatal_help="Try '\$progname --help' for more information." ## ------------------------- ## ## Hook function management. ## ## ------------------------- ## # This section contains functions for adding, removing, and running hooks # to the main code. A hook is just a named list of of function, that can # be run in order later on. # func_hookable FUNC_NAME # ----------------------- # Declare that FUNC_NAME will run hooks added with # 'func_add_hook FUNC_NAME ...'. func_hookable () { $debug_cmd func_append hookable_fns " $1" } # func_add_hook FUNC_NAME HOOK_FUNC # --------------------------------- # Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must # first have been declared "hookable" by a call to 'func_hookable'. func_add_hook () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not accept hook functions." ;; esac eval func_append ${1}_hooks '" $2"' } # func_remove_hook FUNC_NAME HOOK_FUNC # ------------------------------------ # Remove HOOK_FUNC from the list of functions called by FUNC_NAME. func_remove_hook () { $debug_cmd eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' } # func_run_hooks FUNC_NAME [ARG]... # --------------------------------- # Run all hook functions registered to FUNC_NAME. # It is assumed that the list of hook functions contains nothing more # than a whitespace-delimited list of legal shell function names, and # no effort is wasted trying to catch shell meta-characters or preserve # whitespace. func_run_hooks () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not support hook funcions.n" ;; esac eval _G_hook_fns=\$$1_hooks; shift for _G_hook in $_G_hook_fns; do eval $_G_hook '"$@"' # store returned options list back into positional # parameters for next 'cmd' execution. eval _G_hook_result=\$${_G_hook}_result eval set dummy "$_G_hook_result"; shift done func_quote_for_eval ${1+"$@"} func_run_hooks_result=$func_quote_for_eval_result } ## --------------- ## ## Option parsing. ## ## --------------- ## # In order to add your own option parsing hooks, you must accept the # full positional parameter list in your hook function, remove any # options that you action, and then pass back the remaining unprocessed # options in '_result', escaped suitably for # 'eval'. Like this: # # my_options_prep () # { # $debug_cmd # # # Extend the existing usage message. # usage_message=$usage_message' # -s, --silent don'\''t print informational messages # ' # # func_quote_for_eval ${1+"$@"} # my_options_prep_result=$func_quote_for_eval_result # } # func_add_hook func_options_prep my_options_prep # # # my_silent_option () # { # $debug_cmd # # # Note that for efficiency, we parse as many options as we can # # recognise in a loop before passing the remainder back to the # # caller on the first unrecognised argument we encounter. # while test $# -gt 0; do # opt=$1; shift # case $opt in # --silent|-s) opt_silent=: ;; # # Separate non-argument short options: # -s*) func_split_short_opt "$_G_opt" # set dummy "$func_split_short_opt_name" \ # "-$func_split_short_opt_arg" ${1+"$@"} # shift # ;; # *) set dummy "$_G_opt" "$*"; shift; break ;; # esac # done # # func_quote_for_eval ${1+"$@"} # my_silent_option_result=$func_quote_for_eval_result # } # func_add_hook func_parse_options my_silent_option # # # my_option_validation () # { # $debug_cmd # # $opt_silent && $opt_verbose && func_fatal_help "\ # '--silent' and '--verbose' options are mutually exclusive." # # func_quote_for_eval ${1+"$@"} # my_option_validation_result=$func_quote_for_eval_result # } # func_add_hook func_validate_options my_option_validation # # You'll alse need to manually amend $usage_message to reflect the extra # options you parse. It's preferable to append if you can, so that # multiple option parsing hooks can be added safely. # func_options [ARG]... # --------------------- # All the functions called inside func_options are hookable. See the # individual implementations for details. func_hookable func_options func_options () { $debug_cmd func_options_prep ${1+"$@"} eval func_parse_options \ ${func_options_prep_result+"$func_options_prep_result"} eval func_validate_options \ ${func_parse_options_result+"$func_parse_options_result"} eval func_run_hooks func_options \ ${func_validate_options_result+"$func_validate_options_result"} # save modified positional parameters for caller func_options_result=$func_run_hooks_result } # func_options_prep [ARG]... # -------------------------- # All initialisations required before starting the option parse loop. # Note that when calling hook functions, we pass through the list of # positional parameters. If a hook function modifies that list, and # needs to propogate that back to rest of this script, then the complete # modified list must be put in 'func_run_hooks_result' before # returning. func_hookable func_options_prep func_options_prep () { $debug_cmd # Option defaults: opt_verbose=false opt_warning_types= func_run_hooks func_options_prep ${1+"$@"} # save modified positional parameters for caller func_options_prep_result=$func_run_hooks_result } # func_parse_options [ARG]... # --------------------------- # The main option parsing loop. func_hookable func_parse_options func_parse_options () { $debug_cmd func_parse_options_result= # this just eases exit handling while test $# -gt 0; do # Defer to hook functions for initial option parsing, so they # get priority in the event of reusing an option name. func_run_hooks func_parse_options ${1+"$@"} # Adjust func_parse_options positional parameters to match eval set dummy "$func_run_hooks_result"; shift # Break out of the loop if we already parsed every option. test $# -gt 0 || break _G_opt=$1 shift case $_G_opt in --debug|-x) debug_cmd='set -x' func_echo "enabling shell trace mode" $debug_cmd ;; --no-warnings|--no-warning|--no-warn) set dummy --warnings none ${1+"$@"} shift ;; --warnings|--warning|-W) test $# = 0 && func_missing_arg $_G_opt && break case " $warning_categories $1" in *" $1 "*) # trailing space prevents matching last $1 above func_append_uniq opt_warning_types " $1" ;; *all) opt_warning_types=$warning_categories ;; *none) opt_warning_types=none warning_func=: ;; *error) opt_warning_types=$warning_categories warning_func=func_fatal_error ;; *) func_fatal_error \ "unsupported warning category: '$1'" ;; esac shift ;; --verbose|-v) opt_verbose=: ;; --version) func_version ;; -\?|-h) func_usage ;; --help) func_help ;; # Separate optargs to long options (plugins may need this): --*=*) func_split_equals "$_G_opt" set dummy "$func_split_equals_lhs" \ "$func_split_equals_rhs" ${1+"$@"} shift ;; # Separate optargs to short options: -W*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "$func_split_short_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-v*|-x*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; esac done # save modified positional parameters for caller func_quote_for_eval ${1+"$@"} func_parse_options_result=$func_quote_for_eval_result } # func_validate_options [ARG]... # ------------------------------ # Perform any sanity checks on option settings and/or unconsumed # arguments. func_hookable func_validate_options func_validate_options () { $debug_cmd # Display all warnings if -W was not given. test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" func_run_hooks func_validate_options ${1+"$@"} # Bail if the options were screwed! $exit_cmd $EXIT_FAILURE # save modified positional parameters for caller func_validate_options_result=$func_run_hooks_result } ## ----------------- ## ## Helper functions. ## ## ----------------- ## # This section contains the helper functions used by the rest of the # hookable option parser framework in ascii-betical order. # func_fatal_help ARG... # ---------------------- # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { $debug_cmd eval \$ECHO \""Usage: $usage"\" eval \$ECHO \""$fatal_help"\" func_error ${1+"$@"} exit $EXIT_FAILURE } # func_help # --------- # Echo long help message to standard output and exit. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message" exit 0 } # func_missing_arg ARGNAME # ------------------------ # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $debug_cmd func_error "Missing argument for '$1'." exit_cmd=exit } # func_split_equals STRING # ------------------------ # Set func_split_equals_lhs and func_split_equals_rhs shell variables after # splitting STRING at the '=' sign. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_equals () { $debug_cmd func_split_equals_lhs=${1%%=*} func_split_equals_rhs=${1#*=} test "x$func_split_equals_lhs" = "x$1" \ && func_split_equals_rhs= }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_equals () { $debug_cmd func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` func_split_equals_rhs= test "x$func_split_equals_lhs" = "x$1" \ || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` } fi #func_split_equals # func_split_short_opt SHORTOPT # ----------------------------- # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_short_opt () { $debug_cmd func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"} }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_short_opt () { $debug_cmd func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` } fi #func_split_short_opt # func_usage # ---------- # Echo short help message to standard output and exit. func_usage () { $debug_cmd func_usage_message $ECHO "Run '$progname --help |${PAGER-more}' for full usage" exit 0 } # func_usage_message # ------------------ # Echo short help message to standard output. func_usage_message () { $debug_cmd eval \$ECHO \""Usage: $usage"\" echo $SED -n 's|^# || /^Written by/{ x;p;x } h /^Written by/q' < "$progpath" echo eval \$ECHO \""$usage_message"\" } # func_version # ------------ # Echo version message to standard output and exit. func_version () { $debug_cmd printf '%s\n' "$progname $scriptversion" $SED -n ' /(C)/!b go :more /\./!{ N s|\n# | | b more } :go /^# Written by /,/# warranty; / { s|^# || s|^# *$|| s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| p } /^# Written by / { s|^# || p } /^warranty; /q' < "$progpath" exit $? } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: # Set a version string. scriptversion='(GNU libtool) 2.4.6' # func_echo ARG... # ---------------- # Libtool also displays the current mode in messages, so override # funclib.sh func_echo with this custom definition. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" done IFS=$func_echo_IFS } # func_warning ARG... # ------------------- # Libtool warnings are not categorized, so override funclib.sh # func_warning with this simpler definition. func_warning () { $debug_cmd $warning_func ${1+"$@"} } ## ---------------- ## ## Options parsing. ## ## ---------------- ## # Hook in the functions to make sure our own options are parsed during # the option parsing loop. usage='$progpath [OPTION]... [MODE-ARG]...' # Short help message in response to '-h'. usage_message="Options: --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --mode=MODE use operation mode MODE --no-warnings equivalent to '-Wnone' --preserve-dup-deps don't remove duplicate dependency libraries --quiet, --silent don't print informational messages --tag=TAG use configuration variables from tag TAG -v, --verbose print more informational messages than default --version print version information -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -h, --help, --help-all print short, long, or detailed help message " # Additional text appended to 'usage_message' in response to '--help'. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. When passed as first option, '--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. Try '$progname --help --mode=MODE' for a more detailed description of MODE. When reporting a bug, please describe a test case to reproduce it and include the following information: host-triplet: $host shell: $SHELL compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) version: $progname (GNU libtool) 2.4.6 automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` Report bugs to . GNU libtool home page: . General help using GNU software: ." exit 0 } # func_lo2o OBJECT-NAME # --------------------- # Transform OBJECT-NAME from a '.lo' suffix to the platform specific # object suffix. lo2o=s/\\.lo\$/.$objext/ o2lo=s/\\.$objext\$/.lo/ if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_lo2o () { case $1 in *.lo) func_lo2o_result=${1%.lo}.$objext ;; * ) func_lo2o_result=$1 ;; esac }' # func_xform LIBOBJ-OR-SOURCE # --------------------------- # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) # suffix to a '.lo' libtool-object suffix. eval 'func_xform () { func_xform_result=${1%.*}.lo }' else # ...otherwise fall back to using sed. func_lo2o () { func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` } func_xform () { func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` } fi # func_fatal_configuration ARG... # ------------------------------- # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func__fatal_error ${1+"$@"} \ "See the $PACKAGE documentation for more information." \ "Fatal configuration error." } # func_config # ----------- # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # ------------- # Display the features supported by this script. func_features () { echo "host: $host" if test yes = "$build_libtool_libs"; then echo "enable shared libraries" else echo "disable shared libraries" fi if test yes = "$build_old_libs"; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag TAGNAME # ----------------------- # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname=$1 re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf=/$re_begincf/,/$re_endcf/p # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # ------------------------ # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # libtool_options_prep [ARG]... # ----------------------------- # Preparation for options parsed by libtool. libtool_options_prep () { $debug_mode # Option defaults: opt_config=false opt_dlopen= opt_dry_run=false opt_help=false opt_mode= opt_preserve_dup_deps=false opt_quiet=false nonopt= preserve_args= # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Pass back the list of options. func_quote_for_eval ${1+"$@"} libtool_options_prep_result=$func_quote_for_eval_result } func_add_hook func_options_prep libtool_options_prep # libtool_parse_options [ARG]... # --------------------------------- # Provide handling for libtool specific options. libtool_parse_options () { $debug_cmd # Perform our own loop to consume as many options as possible in # each iteration. while test $# -gt 0; do _G_opt=$1 shift case $_G_opt in --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) func_config ;; --dlopen|-dlopen) opt_dlopen="${opt_dlopen+$opt_dlopen }$1" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) func_features ;; --finish) set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $_G_opt && break opt_mode=$1 case $1 in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $_G_opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_quiet=false func_append preserve_args " $_G_opt" ;; --no-warnings|--no-warning|--no-warn) opt_warning=false func_append preserve_args " $_G_opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $_G_opt" ;; --silent|--quiet) opt_quiet=: opt_verbose=false func_append preserve_args " $_G_opt" ;; --tag) test $# = 0 && func_missing_arg $_G_opt && break opt_tag=$1 func_append preserve_args " $_G_opt $1" func_enable_tag "$1" shift ;; --verbose|-v) opt_quiet=false opt_verbose=: func_append preserve_args " $_G_opt" ;; # An option not handled by this hook function: *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; esac done # save modified positional parameters for caller func_quote_for_eval ${1+"$@"} libtool_parse_options_result=$func_quote_for_eval_result } func_add_hook func_parse_options libtool_parse_options # libtool_validate_options [ARG]... # --------------------------------- # Perform any sanity checks on option settings and/or unconsumed # arguments. libtool_validate_options () { # save first non-option argument if test 0 -lt $#; then nonopt=$1 shift fi # preserve --debug test : = "$debug_cmd" || func_append preserve_args " --debug" case $host in # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match test yes != "$build_libtool_libs" \ && test yes != "$build_old_libs" \ && func_fatal_configuration "not configured to build any kind of library" # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test execute != "$opt_mode"; then func_error "unrecognized option '-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help=$help help="Try '$progname --help --mode=$opt_mode' for more information." } # Pass back the unparsed argument list func_quote_for_eval ${1+"$@"} libtool_validate_options_result=$func_quote_for_eval_result } func_add_hook func_validate_options libtool_validate_options # Process options as early as possible so that --help and --version # can return quickly. func_options ${1+"$@"} eval set dummy "$func_options_result"; shift ## ----------- ## ## Main. ## ## ----------- ## magic='%%%MAGIC variable%%%' magic_exe='%%%MAGIC EXE variable%%%' # Global variables. extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # func_generated_by_libtool # True iff stdin has been generated by Libtool. This function is only # a basic sanity check; it will hardly flush out determined imposters. func_generated_by_libtool_p () { $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p } # func_lalib_unsafe_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if 'file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case $lalib_p_line in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test yes = "$lalib_p" } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { test -f "$1" && $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $debug_cmd save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # 'FILE.' does not work on cygwin managed mounts. func_source () { $debug_cmd case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case $lt_sysroot:$1 in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result='='$func_stripname_result ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $debug_cmd if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with '--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=$1 if test yes = "$build_libtool_libs"; then write_lobj=\'$2\' else write_lobj=none fi if test yes = "$build_old_libs"; then write_oldobj=\'$3\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $debug_cmd # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result= if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result"; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $debug_cmd if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $debug_cmd # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $debug_cmd if test -z "$2" && test -n "$1"; then func_error "Could not determine host file name corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result=$1 fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $debug_cmd if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " '$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result=$3 fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $debug_cmd case $4 in $1 ) func_to_host_path_result=$3$func_to_host_path_result ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via '$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $debug_cmd $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $debug_cmd case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result=$1 } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result=$func_convert_core_msys_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result=$func_convert_core_file_wine_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via '$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $debug_cmd if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd=func_convert_path_$func_stripname_result fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $debug_cmd func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result=$1 } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_msys_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_path_wine_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_dll_def_p FILE # True iff FILE is a Windows DLL '.def' file. # Keep in sync with _LT_DLL_DEF_P in libtool.m4 func_dll_def_p () { $debug_cmd func_dll_def_p_tmp=`$SED -n \ -e 's/^[ ]*//' \ -e '/^\(;.*\)*$/d' \ -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ -e q \ "$1"` test DEF = "$func_dll_def_p_tmp" } # func_mode_compile arg... func_mode_compile () { $debug_cmd # Get the compilation command and the source file. base_compile= srcfile=$nonopt # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg=$arg arg_mode=normal ;; target ) libobj=$arg arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify '-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs=$IFS; IFS=, for arg in $args; do IFS=$save_ifs func_append_quoted lastarg "$arg" done IFS=$save_ifs func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg=$srcfile srcfile=$arg ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with '-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj=$func_basename_result } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from '$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test yes = "$build_libtool_libs" \ || func_fatal_configuration "cannot build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name '$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname=$func_basename_result xdir=$func_dirname_result lobj=$xdir$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test yes = "$build_old_libs"; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; 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 no = "$compiler_c_o"; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext lockfile=$output_obj.lock else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test yes = "$need_locks"; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test warn = "$need_locks"; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test yes = "$build_libtool_libs"; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test no != "$pic_mode"; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test yes = "$suppress_opt"; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test yes = "$build_old_libs"; then if test yes != "$pic_mode"; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test yes = "$compiler_c_o"; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test no != "$need_locks"; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test compile = "$opt_mode" && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a '.o' file suitable for static linking -static only build a '.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a 'standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix '.c' with the library object suffix, '.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to '-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the '--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the 'install' or 'cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE use a list of object files found in FILE to specify objects -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with '-') are ignored. Every other argument is treated as a filename. Files ending in '.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in '.la', then a libtool library is created, only library objects ('.lo' files) may be specified, and '-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created using 'ar' and 'ranlib', or on Windows using 'lib'. If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode '$opt_mode'" ;; esac echo $ECHO "Try '$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test : = "$opt_help"; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | $SED -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | $SED '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $debug_cmd # The first argument is the command name. cmd=$nonopt test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "'$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "'$file' was not linked with '-export-dynamic'" continue fi func_dirname "$file" "" "." dir=$func_dirname_result if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir=$func_dirname_result ;; *) func_warning "'-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir=$absdir # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic=$magic # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file=$progdir/$program elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file=$progdir/$program fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if $opt_dry_run; then # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS else if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd=\$cmd$args fi } test execute = "$opt_mode" && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $debug_cmd libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "'$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument '$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and '=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_quiet && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the '-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the '$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the '$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the '$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test finish = "$opt_mode" && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $debug_cmd # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=false stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=: ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test X-m = "X$prev" && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the '$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=: if $isdir; then destdir=$dest destname= else func_dirname_and_basename "$dest" "" "." destdir=$func_dirname_result destname=$func_basename_result # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "'$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "'$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir=$func_dirname_result func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking '$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname=$1 shift srcname=$realname test -n "$relink_command" && srcname=${realname}T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme=$stripme case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme= ;; esac ;; os2*) case $realname in *_dll.a) tstripme= ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try 'ln -sf' first, because the 'ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib=$destdir/$realname func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name=$func_basename_result instname=$dir/${name}i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest=$destfile destfile= ;; *) func_fatal_help "cannot copy a libtool object to '$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test yes = "$build_old_libs"; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext= case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=.exe fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script '$wrapper'" finalize=: for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` if test -n "$libdir" && test ! -f "$libfile"; then func_warning "'$lib' has not been installed in '$libdir'" finalize=false fi done relink_command= func_source "$wrapper" outputname= if test no = "$fast_install" && test -n "$relink_command"; then $opt_dry_run || { if $finalize; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file=$func_basename_result outputname=$tmpdir/$file # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_quiet || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink '$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file=$outputname else func_warning "cannot relink '$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name=$func_basename_result # Set up the ranlib parameters. oldlib=$destdir/$name func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run '$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test install = "$opt_mode" && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $debug_cmd my_outputname=$1 my_originator=$2 my_pic_p=${3-false} my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms=${my_outputname}S.c else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist=$output_objdir/$my_outputname.nm func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* External symbol declarations for the compiler. */\ " if test yes = "$dlself"; then func_verbose "generating symbol list for '$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from '$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols=$output_objdir/$outputname.exp $opt_dry_run || { $RM $export_symbols eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from '$dlprefile'" func_basename "$dlprefile" name=$func_basename_result case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename= if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname"; then func_basename "$dlprefile_dlname" dlprefile_dlbasename=$func_basename_result else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename"; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi func_show_eval '$RM "${nlist}I"' if test -n "$global_symbol_to_import"; then eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[];\ " if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ static void lt_syminit(void) { LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; for (; symbol->name; ++symbol) {" $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" echo >> "$output_objdir/$my_dlsyms" "\ } }" fi echo >> "$output_objdir/$my_dlsyms" "\ LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = { {\"$my_originator\", (void *) 0}," if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ {\"@INIT@\", (void *) <_syminit}," fi case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) $my_pic_p && pic_flag_for_symtable=" $pic_flag" ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' # Transform the symbol file into the correct name. symfileobj=$output_objdir/${my_outputname}S.$objext case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for '$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $debug_cmd win32_libid_type=unknown win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then case $nm_interface in "MS dumpbin") if func_cygming_ms_implib_p "$1" || func_cygming_gnu_implib_p "$1" then win32_nmres=import else win32_nmres= fi ;; *) func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s|.*|import| p q } }'` ;; esac case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $debug_cmd sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $debug_cmd match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive that possess that section. Heuristic: eliminate # all those that have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $debug_cmd if func_cygming_gnu_implib_p "$1"; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1"; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result= fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $debug_cmd f_ex_an_ar_dir=$1; shift f_ex_an_ar_oldlib=$1 if test yes = "$lock_old_archive_extraction"; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test yes = "$lock_old_archive_extraction"; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $debug_cmd my_gentop=$1; shift my_oldlibs=${1+"$@"} my_oldobjs= my_xlib= my_xabs= my_xdir= for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib=$func_basename_result my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir=$my_gentop/$my_xlib_u func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` func_basename "$darwin_archive" darwin_base_archive=$func_basename_result darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches; do func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" cd "unfat-$$/$darwin_base_archive-$darwin_arch" func_extract_an_archive "`pwd`" "$darwin_base_archive" cd "$darwin_curdir" $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result=$my_oldobjs } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory where it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ that is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options that match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test yes = "$fast_install"; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else \$ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* declarations of non-ANSI functions */ #if defined __MINGW32__ # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined __CYGWIN__ # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined other_platform || defined ... */ #endif /* portability defines, excluding path handling macros */ #if defined _MSC_VER # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC #elif defined __MINGW32__ # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined __CYGWIN__ # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined other platforms ... */ #endif #if defined PATH_MAX # define LT_PATHMAX PATH_MAX #elif defined MAXPATHLEN # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ defined __OS2__ # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free (stale); stale = 0; } \ } while (0) #if defined LT_DEBUGWRAPPER static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; size_t tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined HAVE_DOS_BASED_FILE_SYSTEM if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined HAVE_DOS_BASED_FILE_SYSTEM } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = (size_t) (q - p); p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (STREQ (str, pat)) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else size_t len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { size_t orig_value_len = strlen (orig_value); size_t add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ size_t len = strlen (new_value); while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[--len] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $debug_cmd case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_suncc_cstd_abi # !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! # Several compiler flags select an ABI that is incompatible with the # Cstd library. Avoid specifying it if any are in CXXFLAGS. func_suncc_cstd_abi () { $debug_cmd case " $compile_command " in *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) suncc_use_cstd_abi=no ;; *) suncc_use_cstd_abi=yes ;; esac } # func_mode_link arg... func_mode_link () { $debug_cmd case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # what system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll that has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= os2dllname= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=false prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module=$wl-single_module func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test yes != "$build_libtool_libs" \ && func_fatal_configuration "cannot build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg=$1 shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir=$arg prev= continue ;; dlfiles|dlprefiles) $preload || { # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=: } case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test no = "$dlself"; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test dlprefiles = "$prev"; then dlself=yes elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test dlfiles = "$prev"; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols=$arg test -f "$arg" \ || func_fatal_error "symbol file '$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex=$arg prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir=$arg prev= continue ;; mllvm) # Clang does not use LLVM to link, so we can simply discard any # '-mllvm $arg' options when doing the link step. prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result if test none != "$pic_object"; then # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object fi # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file '$arg' does not exist" fi arg=$save_arg prev= continue ;; os2dllname) os2dllname=$arg prev= continue ;; precious_regex) precious_files_regex=$arg prev= continue ;; release) release=-$arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test rpath = "$prev"; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds=$arg prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg=$arg case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "'-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test X-export-symbols = "X$arg"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between '-L' and '$1'" else func_fatal_error "need path for '-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of '$dir'" dir=$absdir ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test X-lc = "X$arg" || test X-lm = "X$arg"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test X-lc = "X$arg" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc due to us having libc/libc_r. test X-lc = "X$arg" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test X-lc = "X$arg" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test X-lc = "X$arg" && continue ;; esac elif test X-lc_r = "X$arg"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -mllvm) prev=mllvm continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module=$wl-multi_module continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "'-no-install' is ignored for $host" func_warning "assuming '-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -os2dllname) prev=os2dllname continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # -fstack-protector* stack protector flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization # -specs=* GCC specs files # -stdlib=* select c++ std lib with clang # -fsanitize=* Clang/GCC memory and address sanitizer -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ -specs=*|-fsanitize=*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; -Z*) if test os2 = "`expr $host : '.*\(os2\)'`"; then # OS/2 uses -Zxxx to specify OS/2-specific options compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case $arg in -Zlinker | -Zstack) prev=xcompiler ;; esac continue else # Otherwise treat like 'Some other compiler flag' below func_quote_for_eval "$arg" arg=$func_quote_for_eval_result fi ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result test none = "$pic_object" || { # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object } # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test dlfiles = "$prev"; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test dlprefiles = "$prev"; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the '$prevarg' option requires an argument" if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname=$func_basename_result libobjs_save=$libobjs if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" # Definition is injected by LT_CONFIG during libtool generation. func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" func_dirname "$output" "/" "" output_objdir=$func_dirname_result$objdir func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test lib = "$linkmode"; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=false newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test lib,link = "$linkmode,$pass"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs=$tmp_deplibs fi if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass"; then libs=$deplibs deplibs= fi if test prog = "$linkmode"; then case $pass in dlopen) libs=$dlfiles ;; dlpreopen) libs=$dlprefiles ;; link) libs="$deplibs %DEPLIBS%" test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" ;; esac fi if test lib,dlpreopen = "$linkmode,$pass"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs=$dlprefiles fi if test dlopen = "$pass"; then # Collect dlpreopened libraries save_deplibs=$deplibs deplibs= fi for deplib in $libs; do lib= found=false case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test lib != "$linkmode" && test prog != "$linkmode"; then func_warning "'-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test lib = "$linkmode"; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib=$searchdir/lib$name$search_ext if test -f "$lib"; then if test .la = "$search_ext"; then found=: else found=false fi break 2 fi done done if $found; then # 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 yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll=$l done if test "X$ll" = "X$old_library"; then # only static version available found=false func_dirname "$lib" "" "." ladir=$func_dirname_result lib=$ladir/$old_library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi else # deplib doesn't seem to be a libtool library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi ;; # -l *.ltframework) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test conv = "$pass" && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi if test scan = "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "'-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test link = "$pass"; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=false case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=: fi ;; pass_all) valid_a_lib=: ;; esac if $valid_a_lib; then echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" else echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." fi ;; esac continue ;; prog) if test link != "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test conv = "$pass"; then deplibs="$deplib $deplibs" elif test prog = "$linkmode"; then if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=: continue ;; esac # case $deplib $found || test -f "$lib" \ || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "'$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir=$func_dirname_result dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass" || { test prog != "$linkmode" && test lib != "$linkmode"; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test conv = "$pass"; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for '$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done elif test prog != "$linkmode" && test lib != "$linkmode"; then func_fatal_error "'$lib' is not a convenience library" fi continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test yes = "$prefer_static_libs" || test built,no = "$prefer_static_libs,$installed"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib=$l done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for '$lib'" fi # This library was specified with -dlopen. if test dlopen = "$pass"; then test -z "$libdir" \ && func_fatal_error "cannot -dlopen a convenience library: '$lib'" if test -z "$dlname" || test yes != "$dlopen_support" || test no = "$build_libtool_libs" then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of '$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir=$ladir fi ;; esac func_basename "$lib" laname=$func_basename_result # Find the relevant object directory and library name. if test yes = "$installed"; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library '$lib' was moved." dir=$ladir absdir=$abs_ladir libdir=$abs_ladir else dir=$lt_sysroot$libdir absdir=$lt_sysroot$libdir fi test yes = "$hardcode_automatic" && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir=$ladir absdir=$abs_ladir # Remove this search path later func_append notinst_path " $abs_ladir" else dir=$ladir/$objdir absdir=$abs_ladir/$objdir # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test dlpreopen = "$pass"; then if test -z "$libdir" && test prog = "$linkmode"; then func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" fi case $host in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test lib = "$linkmode"; then deplibs="$dir/$old_library $deplibs" elif test prog,link = "$linkmode,$pass"; 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 prog = "$linkmode" && test link != "$pass"; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=false if test no != "$link_all_deplibs" || test -z "$library_names" || test no = "$build_libtool_libs"; then linkalldeplibs=: fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if $linkalldeplibs; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test prog,link = "$linkmode,$pass"; then if test -n "$library_names" && { { test no = "$prefer_static_libs" || test built,yes = "$prefer_static_libs,$installed"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then # Make sure the rpath contains only unique directories. case $temp_rpath: in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if $alldeplibs && { test pass_all = "$deplibs_check_method" || { test yes = "$build_libtool_libs" && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test built = "$use_static_libs" && test yes = "$installed"; then use_static_libs=no fi if test -n "$library_names" && { test no = "$use_static_libs" || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc* | *os2*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test no = "$installed"; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule= for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule=$dlpremoduletest break fi done if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then echo if test prog = "$linkmode"; 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 lib = "$linkmode" && test yes = "$hardcode_into_libs"; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname=$1 shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname=$dlname elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc* | *os2*) func_arith $current - $age major=$func_arith_result versuffix=-$major ;; esac eval soname=\"$soname_spec\" else soname=$realname fi # Make a new name for the extract_expsyms_cmds to use soroot=$soname func_basename "$soroot" soname=$func_basename_result func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from '$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for '$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test prog = "$linkmode" || test relink != "$opt_mode"; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test no = "$hardcode_direct"; then add=$dir/$linklib case $host in *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; *-*-sysv4*uw2*) add_dir=-L$dir ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir=-L$dir ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we cannot # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library"; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add=$dir/$old_library fi elif test -n "$old_library"; then add=$dir/$old_library fi fi esac elif test no = "$hardcode_minus_L"; then case $host in *-*-sunos*) add_shlibpath=$dir ;; esac add_dir=-L$dir add=-l$name elif test no = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; relink) if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$dir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$absdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name elif test yes = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; *) lib_linked=no ;; esac if test yes != "$lib_linked"; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test prog = "$linkmode"; 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 yes != "$hardcode_direct" && test yes != "$hardcode_minus_L" && test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test prog = "$linkmode" || test relink = "$opt_mode"; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$libdir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$libdir add=-l$name elif test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add=-l$name elif test yes = "$hardcode_automatic"; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib"; then add=$inst_prefix_dir$libdir/$linklib else add=$libdir/$linklib fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir=-L$libdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name fi if test prog = "$linkmode"; 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 prog = "$linkmode"; 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 unsupported != "$hardcode_direct"; 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 yes = "$build_libtool_libs"; then # Not a shared library if test pass_all != "$deplibs_check_method"; 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 cannot 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 yes = "$module"; 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 no = "$build_old_libs"; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test lib = "$linkmode"; then if test -n "$dependency_libs" && { test yes != "$hardcode_into_libs" || test yes = "$build_old_libs" || test yes = "$link_static"; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs=$temp_deplibs fi func_append newlib_search_path " $absdir" # Link against this library test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test no != "$link_all_deplibs"; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path=$deplib ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of '$dir'" absdir=$dir fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names"; then for tmp in $deplibrary_names; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl"; then depdepl=$absdir/$objdir/$depdepl darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" path= fi fi ;; *) path=-L$absdir/$objdir ;; esac else eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "'$deplib' seems to be moved" path=-L$absdir fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test link = "$pass"; then if test prog = "$linkmode"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs=$newdependency_libs if test dlpreopen = "$pass"; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test dlopen != "$pass"; then test conv = "$pass" || { # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= } if test prog,link = "$linkmode,$pass"; then vars="compile_deplibs finalize_deplibs" else vars=deplibs fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Add Sun CC postdeps if required: test CXX = "$tagname" && { case $host_os in linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; solaris*) func_cc_basename "$CC" case $func_cc_basename_result in CC* | sunCC*) func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; esac } # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i= ;; esac if test -n "$i"; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test prog = "$linkmode"; then dlfiles=$newdlfiles fi if test prog = "$linkmode" || test lib = "$linkmode"; then dlprefiles=$newdlprefiles fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "'-R' is ignored for archives" test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "'-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "'-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs=$output func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form 'libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test no = "$module" \ && func_fatal_help "libtool library '$output' must begin with 'lib'" if test no != "$need_lib_prefix"; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test pass_all != "$deplibs_check_method"; then func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test no = "$dlself" \ || func_warning "'-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test 1 -lt "$#" \ && func_warning "ignoring multiple '-rpath's for a libtool library" install_libdir=$1 oldlibs= if test -z "$rpath"; then if test yes = "$build_libtool_libs"; then # Building a libtool convenience library. # Some compilers have problems with a '.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "'-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs=$IFS; IFS=: set dummy $vinfo 0 0 0 shift IFS=$save_ifs test -n "$7" && \ func_fatal_help "too many parameters to '-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major=$1 number_minor=$2 number_revision=$3 # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # that has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|freebsd-elf|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_revision ;; freebsd-aout|qnx|sunos) current=$number_major revision=$number_minor age=0 ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_minor lt_irix_increment=no ;; *) func_fatal_configuration "$modename: unknown library version type '$version_type'" ;; esac ;; no) current=$1 revision=$2 age=$3 ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT '$current' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION '$revision' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE '$age' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE '$age' is greater than the current interface number '$current'" func_fatal_error "'$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" # On Darwin other compilers case $CC in nagfor*) verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" ;; *) verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; esac ;; freebsd-aout) major=.$current versuffix=.$current.$revision ;; freebsd-elf) func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; irix | nonstopux) if test no = "$lt_irix_increment"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring=$verstring_prefix$major.$revision # Add in all the interfaces that we are compatible with. loop=$revision while test 0 -ne "$loop"; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring_prefix$major.$iface:$verstring done # Before this point, $major must not contain '.'. major=.$major versuffix=$major.$revision ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=.$current.$age.$revision verstring=$current.$age.$revision # Add in all the interfaces that we are compatible with. loop=$age while test 0 -ne "$loop"; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring:$iface.0 done # Make executables depend on our current version. func_append verstring ":$current.0" ;; qnx) major=.$current versuffix=.$current ;; sco) major=.$current versuffix=.$current ;; sunos) major=.$current versuffix=.$current.$revision ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 file systems. func_arith $current - $age major=$func_arith_result versuffix=-$major ;; *) func_fatal_configuration "unknown library version type '$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring=0.0 ;; esac if test no = "$need_version"; then versuffix= else versuffix=.0.0 fi fi # Remove version info from name if versioning should be avoided if test yes,no = "$avoid_version,$need_version"; then major= versuffix= verstring= fi # Check to see if the archive will have undefined symbols. if test yes = "$allow_undefined"; then if test unsupported = "$allow_undefined_flag"; then if test yes = "$build_old_libs"; then func_warning "undefined symbols not allowed in $host shared libraries; building static only" build_libtool_libs=no else func_fatal_error "can't build $host shared library unless -no-undefined is specified" fi fi else # Don't allow undefined symbols. allow_undefined_flag=$no_undefined_flag fi fi func_generate_dlsyms "$libname" "$libname" : func_append libobjs " $symfileobj" test " " = "$libobjs" && libobjs= if test relink != "$opt_mode"; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) if test -n "$precious_files_regex"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles=$dlfiles dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles=$dlprefiles dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test yes = "$build_libtool_libs"; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test yes = "$build_libtool_need_lc"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release= versuffix= major= newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib=$potent_lib while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | $SED 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib= ;; esac fi if test -n "$a_deplib"; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib=$potent_lib # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs= tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test yes = "$allow_libtool_libs_with_static_runtimes"; then for i in $predeps $postdeps; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test none = "$deplibs_check_method"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test yes = "$droppeddeps"; then if test yes = "$module"; 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 no = "$build_old_libs"; 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 no = "$allow_undefined"; 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 no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs=$new_libs # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test yes = "$build_libtool_libs"; then # Remove $wl instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test yes = "$hardcode_into_libs"; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath=$finalize_rpath test relink = "$opt_mode" || rpath=$compile_rpath$rpath for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath=$finalize_shlibpath test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname=$1 shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname=$realname fi if test -z "$dlname"; then dlname=$soname fi lib=$output_objdir/$realname linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols=$output_objdir/$libname.uexp func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile func_dll_def_p "$export_symbols" || { # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols=$export_symbols export_symbols= always_export_symbols=yes } fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs=$IFS; IFS='~' for cmd1 in $cmds; do IFS=$save_ifs # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test yes = "$try_normal_branch" \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=$output_objdir/$output_la.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS=$save_ifs if test -n "$export_symbols_regex" && test : != "$skipped_export"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test : != "$skipped_export" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs=$tmp_deplibs if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test yes = "$compiler_needs_object" && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test : != "$skipped_export" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then output=$output_objdir/$output_la.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then output=$output_objdir/$output_la.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test yes = "$compiler_needs_object"; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-$k.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test -z "$objlist" || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test 1 -eq "$k"; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-$k.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-$k.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi ${skipped_export-false} && { func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi } test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs=$IFS; IFS='~' for cmd in $concat_cmds; do IFS=$save_ifs $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi ${skipped_export-false} && { if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi } libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs=$IFS; IFS='~' for cmd in $cmds; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs # Restore the uninstalled library and exit if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test yes = "$module" || test yes = "$export_dynamic"; then # On all known operating systems, these are identical. dlname=$soname fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "'-R' is ignored for objects" test -n "$vinfo" && \ func_warning "'-version-info' is ignored for objects" test -n "$release" && \ func_warning "'-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object '$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj=$output ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # if reload_cmds runs $LD directly, get rid of -Wl from # whole_archive_flag_spec and hope we can get by with turning comma # into space. case $reload_cmds in *\$LD[\ \$]*) wl= ;; esac if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags else gentop=$output_objdir/${obj}x func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test yes = "$build_libtool_libs" || libobjs=$non_pic_objects # Create the old-style object. reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs output=$obj func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi test yes = "$build_libtool_libs" || { if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS } if test -n "$pic_flag" || test default != "$pic_mode"; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output=$libobj func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "'-version-info' is ignored for programs" test -n "$release" && \ func_warning "'-release' is ignored for programs" $preload \ && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test CXX = "$tagname"; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " $wl-bind_at_load" func_append finalize_command " $wl-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs=$new_libs func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath=$rpath rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath=$rpath if test -n "$libobjs" && test yes = "$build_old_libs"; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" false # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=: case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=false ;; *cygwin* | *mingw* ) test yes = "$build_libtool_libs" || wrappers_required=false ;; *) if test no = "$need_relink" || test yes != "$build_libtool_libs"; then wrappers_required=false fi ;; esac $wrappers_required || { # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command=$compile_command$compile_rpath # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.$objext"; then func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' fi exit $exit_status } if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test yes = "$no_install"; then # We don't need to create a wrapper script. link_command=$compile_var$compile_command$compile_rpath # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi case $hardcode_action,$fast_install in relink,*) # Fast installation is not supported link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath func_warning "this platform does not like uninstalled shared libraries" func_warning "'$output' will be relinked during installation" ;; *,yes) link_command=$finalize_var$compile_command$finalize_rpath relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` ;; *,no) link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath ;; *,needless) link_command=$finalize_var$compile_command$finalize_rpath relink_command= ;; esac # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource=$output_path/$objdir/lt-$output_name.c cwrapper=$output_path/$output_name.exe $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host"; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do case $build_libtool_libs in convenience) oldobjs="$libobjs_save $symfileobj" addlibs=$convenience build_libtool_libs=no ;; module) oldobjs=$libobjs_save addlibs=$old_convenience build_libtool_libs=no ;; *) oldobjs="$old_deplibs $non_pic_objects" $preload && test -f "$symfileobj" \ && func_append oldobjs " $symfileobj" addlibs=$old_convenience ;; esac if test -n "$addlibs"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase=$func_basename_result case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj"; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test -z "$oldobjs"; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test yes = "$build_old_libs" && old_library=$libname.$libext func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test yes = "$hardcode_automatic"; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test yes = "$installed"; then if test -z "$install_libdir"; then break fi output=$output_objdir/${outputname}i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name=$func_basename_result func_resolve_sysroot "$deplib" eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs=$newdependency_libs newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles=$newdlprefiles else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles=$newdlprefiles fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test -n "$bindir"; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result/$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that cannot go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test no,yes = "$installed,$need_relink"; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } if test link = "$opt_mode" || test relink = "$opt_mode"; then func_mode_link ${1+"$@"} fi # func_mode_uninstall arg... func_mode_uninstall () { $debug_cmd RM=$nonopt files= rmforce=false exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic for arg do case $arg in -f) func_append RM " $arg"; rmforce=: ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir=$func_dirname_result if test . = "$dir"; then odir=$objdir else odir=$dir/$objdir fi func_basename "$file" name=$func_basename_result test uninstall = "$opt_mode" && odir=$dir # Remember odir for removal later, being careful to avoid duplicates if test clean = "$opt_mode"; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif $rmforce; then continue fi rmfiles=$file case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case $opt_mode in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test none != "$pic_object"; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test none != "$non_pic_object"; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test clean = "$opt_mode"; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.$objext" if test yes = "$fast_install" && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name"; then func_append rmfiles " $odir/lt-$noexename.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the $objdir's in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then func_mode_uninstall ${1+"$@"} fi test -z "$opt_mode" && { help=$generic_help func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode '$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # where 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: comedilib-0.11.0/comedilib.spec.in0000644000000000000000000000413712416542105013624 00000000000000Summary: Data Acquisition library for the Comedi DAQ driver. Name: comedilib Version: @VERSION@ Release: 1 License: LGPL Group: System Environment/Kernel URL: http://www.comedi.org/ Source: http://www.comedi.org/comedi/download/comedilib-@VERSION@.tar.gz BuildRoot: /var/tmp/%{name}-buildroot Prereq: /sbin/ldconfig BuildRequires: python provides: comedilib %description Comedilib is the library for the Comedi data acquisition driver for Linux. It allows Linux processes to acquire data from supported DAQ cards, such as those from National Instruments. %package devel Summary: Libraries/include files for Comedi Group: Development/Libraries %description devel Comedilib is a library for using Comedi, a driver interface for data acquisition hardware. %prep %setup -q %build #called when the rpm is built CFLAGS="${CFLAGS:-%optflags}" ; export CFLAGS ; \ ./configure \ --prefix=%{_prefix} \ --mandir=%{_mandir} \ --datadir=%{_datadir} \ --sysconfdir=%{_sysconfdir} \ --disable-dependency-tracking make %install [ -n "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != / ] && rm -rf $RPM_BUILD_ROOT %makeinstall # Clean out files that should not be part of the rpm. # This is the recommended way of dealing with it for RH8 #rm -f $RPM_BUILD_ROOT%{_libdir}/*.a rm -f $RPM_BUILD_ROOT%{_libdir}/*.la # Move files mv $RPM_BUILD_ROOT%{_datadir}/comedilib $RPM_BUILD_ROOT%{_datadir}/comedilib-devel %post /sbin/ldconfig %postun /sbin/ldconfig %clean [ -n "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != / ] && rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root,-) %doc AUTHORS COPYING README TODO ChangeLog NEWS %{_libdir}/libcomedi.so %{_libdir}/libcomedi.so.* %{_libdir}/python2.2/site-packages/*.so %{_libdir}/python2.2/site-packages/comedi.py %{_sbindir}/comedi_* %{_bindir}/comedi_* %{_mandir}/man7/* %{_mandir}/man8/* %files devel %defattr(-,root,root,-) %{_libdir}/libcomedi.a %{_includedir}/comedi*.h %{_mandir}/man3/* %{_datadir}/comedilib-devel/html/* %changelog * Tue Jun 03 2002 David Schleef - update for new build system * Wed Feb 21 2002 Tim Ousley - initial build of comedilib RPM comedilib-0.11.0/config.guess0000755000000000000000000012355012426145301012733 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2014 Free Software Foundation, Inc. timestamp='2014-03-23' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches with a ChangeLog entry to config-patches@gnu.org. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-${LIBC} exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac 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: comedilib-0.11.0/comedi_config/0000755000000000000000000000000013162722662013263 500000000000000comedilib-0.11.0/comedi_config/Makefile.am0000644000000000000000000000023612416542105015231 00000000000000 sbin_PROGRAMS = comedi_config comedi_config_SOURCES = \ comedi_config.c comedi_config_CFLAGS = $(COMEDILIB_CFLAGS) comedi_config_LIBS = $(COMEDILIB_LIBS) comedilib-0.11.0/comedi_config/comedi_config.c0000644000000000000000000002723613076426033016143 00000000000000/* comedi_config/comedi_config.c configuration program for comedi kernel module COMEDI - Linux Control and Measurement Device Interface Copyright (C) 1998,2000 David A. Schleef 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. */ #define CC_VERSION "0.11.0" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef I18N #include #define _(a) gettext(a) #else #define _(a) (a) #endif int quiet=0,verbose=0; #define MAX_NUM_INIT_FILES 4 char *init_file[MAX_NUM_INIT_FILES] = {NULL,NULL,NULL,NULL}; enum option_ids { READ_BUFFER_OPT_ID = 0x1000, WRITE_BUFFER_OPT_ID, SUBDEVICE_BUFFER_OPT_ID, INIT_DATA1_OPT_ID, INIT_DATA2_OPT_ID, INIT_DATA3_OPT_ID }; struct option options[] = { { "verbose", 0, NULL, 'v' }, { "quiet", 0, NULL, 'q' }, { "version", 0, NULL, 'V' }, { "init-data", 1, NULL, 'i' }, { "init-data0", 1, NULL, 'i' }, { "remove", 0, NULL, 'r' }, { "read-buffer", 1, NULL, READ_BUFFER_OPT_ID}, { "write-buffer", 1, NULL, WRITE_BUFFER_OPT_ID}, { "subdevice-buffer", 1, NULL, SUBDEVICE_BUFFER_OPT_ID}, { "init-data1", 1, NULL, INIT_DATA1_OPT_ID }, { "init-data2", 1, NULL, INIT_DATA2_OPT_ID }, { "init-data3", 1, NULL, INIT_DATA3_OPT_ID }, { 0 }, }; void do_help(int i) { fputs("comedi_config version " CC_VERSION "\n",stderr); fputs( _("usage: comedi_config [OPTIONS] [ ,,...]\n" "\n" "OPTIONS:\n" " -v, --verbose\n" " Verbose output.\n" " -q, --quiet\n" " Quiet output.\n" " -V, --version\n" " Print program version.\n" " -i, --init-data, --init-data0 \n" " Use file for driver initialization data, typically firmware code.\n" " --init-data1 \n" " --init-data2 \n" " --init-data3 \n" " Some drivers require multiple files of initialization data. Use these\n" " options to specify them. See the driver-specific documentation for further details.\n" " -r, --remove\n" " Remove previously configured driver.\n" " --read-buffer \n" " Set buffer size in kilobytes used for reading.\n" " --write-buffer \n" " Set buffer size in kilobytes used for writing.\n" " --subdevice-buffer ,[,,]...\n" " Set buffer size in kilobytes for subdevice .\n" " Option may be repeated.\n" "\n" " are integers whose interpretation is driver dependent.\n" " In general, for PCI boards, and refer to the bus/slot\n" " indices of the board. If not specified, a board will automatically\n" " be chosen. For non-PCI boards, specifies the I/O port base\n" " address and, if applicable, specifies the IRQ. Additional\n" " options may be useful, see the Comedi documentation for details.\n") ,stderr); exit(i); } void read_init_files(char* file_names[], int num_files, int *options) { int i; int offset; FILE* files[num_files]; int sizes[num_files]; uintptr_t data_address; int data_length = 0; void *data = NULL; for(i = 0; i < num_files; ++i) { struct stat buf; if(file_names[i] == NULL) { sizes[i] = 0; continue; } files[i] = fopen(file_names[i],"r"); if(files[i] == NULL) { perror(file_names[i]); exit(1); } fstat(fileno(files[i]), &buf); sizes[i] = buf.st_size; data_length += sizes[i]; } options[COMEDI_DEVCONF_AUX_DATA0_LENGTH] = sizes[0]; options[COMEDI_DEVCONF_AUX_DATA1_LENGTH] = sizes[1]; options[COMEDI_DEVCONF_AUX_DATA2_LENGTH] = sizes[2]; options[COMEDI_DEVCONF_AUX_DATA3_LENGTH] = sizes[3]; options[COMEDI_DEVCONF_AUX_DATA_LENGTH] = data_length; if(data_length == 0) { return; } data = malloc(data_length); if(data==NULL) { perror(_("allocating initialization data\n")); exit(1); } data_address = (uintptr_t)data; options[COMEDI_DEVCONF_AUX_DATA_LO] = data_address; options[COMEDI_DEVCONF_AUX_DATA_HI] = 0; if(sizeof(void*) > sizeof(int)) { int bit_shift = sizeof(int) * 8; options[COMEDI_DEVCONF_AUX_DATA_HI] = data_address >> bit_shift; } offset = 0; for(i = 0; i < num_files; ++i) { size_t ret; if(file_names[i] == NULL) { continue; } ret = fread(data + offset, 1, sizes[i], files[i]); if(ret < sizes[i]) { perror(_("reading initialization data\n")); exit(1); } offset += sizes[i]; fclose(files[i]); } return; } int main(int argc,char *argv[]) { comedi_devconfig it; comedi_bufconfig bc; comedi_devinfo devinfo; int fd; int c,i,num,k; char *opts; char *fn,*driver; struct stat statbuf; int ret; int remove=0; int index; int read_buf_size=0; int write_buf_size=0; int *sub_buf_list=NULL; int sub_buf_len=0; #ifdef I18N setlocale(LC_ALL, ""); bindtextdomain("comedilib", "/usr/share/locale"); textdomain("comedilib"); #endif if(geteuid() != 0) fprintf(stderr,_("comedi_config should be run as root. Attempting to continue anyway.\n")); while(1){ c=getopt_long(argc, argv, "rvVqi:", options, &index); if(c==-1)break; switch(c){ case 'v': verbose=1; break; case 'V': fputs("comedi_config version " CC_VERSION "\n",stderr); exit(0); break; case 'q': quiet=1; break; case 'r': remove=1; break; case 'i': init_file[0]=optarg; break; case INIT_DATA1_OPT_ID: init_file[1]=optarg; break; case INIT_DATA2_OPT_ID: init_file[2]=optarg; break; case INIT_DATA3_OPT_ID: init_file[3]=optarg; break; case READ_BUFFER_OPT_ID: read_buf_size = strtol(optarg, NULL, 0); if(read_buf_size < 0) { fprintf(stderr, _("invalid buffer size\n")); exit(-1); } break; case WRITE_BUFFER_OPT_ID: write_buf_size = strtol(optarg, NULL, 0); if(write_buf_size < 0) { fprintf(stderr, _("invalid buffer size\n")); exit(-1); } break; case SUBDEVICE_BUFFER_OPT_ID: { char *s, *e; int subd, size; s = optarg; do { subd = strtol(s, &e, 0); if(s == e || subd < 0) { fprintf(stderr, _("invalid subdevice\n")); exit(-1); } if(*e && *e != ',') { fprintf(stderr, _("invalid separator\n")); exit(-1); } if(*e) { e++; } s = e; size = strtol(s, &e, 0); if(s == e || size < 0) { fprintf(stderr, _("invalid buffer size\n")); exit(-1); } if(*e && *e != ',') { fprintf(stderr, _("invalid separator\n")); exit(-1); } if(*e) { e++; } s = e; sub_buf_list = realloc(sub_buf_list, sizeof(*sub_buf_list) * (sub_buf_len + 2)); if(!sub_buf_list) { perror(_("allocating subdevice buffer list\n")); exit(-1); } sub_buf_list[sub_buf_len++] = subd; sub_buf_list[sub_buf_len++] = size; } while(*s); } break; default: do_help(1); } } if((argc-optind) < 1 || (argc-optind) > 3 || ((argc-optind) == 1 && read_buf_size == 0 && write_buf_size == 0 && remove == 0 && sub_buf_len == 0)){ do_help(1); } fn=argv[optind]; fd=open(fn,O_RDWR); if(fd<0){ switch(errno){ case ENODEV: fprintf(stderr,_("comedi.o not loaded\n")); break; case ENXIO: fprintf(stderr,_("device not configured\n")); break; case EPERM: fprintf(stderr,_("modprobe problem\n")); break; default: perror(fn); break; } exit(1); } // if we are attaching or detaching a device if((argc-optind) > 1 || ((argc-optind) == 1 && remove)) { if(argc - optind > 1) driver=argv[optind+1]; else driver = "none"; strncpy(it.board_name,driver,COMEDI_NAMELEN-1); for(i=0;i=COMEDI_NDEVCONFOPTS) do_help(1); continue; } if(sscanf(opts,"%i%n",&num,&k)>0){ it.options[i]=num; opts+=k; continue; } do_help(1); } } ret=stat(fn,&statbuf); if(ret<0){ perror(fn); exit(1); } #if 0 /* this appears to be broken */ if( !(S_ISCHR(statbuf.st_mode)) || major(statbuf.st_dev)!=COMEDI_MAJOR){ if(!quiet) fprintf(stderr,"warning: %s might not be a comedi device\n",fn); } #endif read_init_files(init_file, MAX_NUM_INIT_FILES, it.options); /* add: sanity check for device */ if(verbose){ printf(_("configuring driver=%s "),it.board_name); for(i=0;i= 0.7.57\n")); exit(1); } } // do buffer resizing if(read_buf_size) { if(devinfo.read_subdevice < 0){ fprintf(stderr,_("warning: no read subdevice, resize ignored\n")); }else{ memset(&bc, 0, sizeof(bc)); bc.subdevice = devinfo.read_subdevice; bc.maximum_size = read_buf_size * 1024; bc.size = read_buf_size * 1024; if(ioctl(fd, COMEDI_BUFCONFIG, &bc) < 0) { perror(_("buffer resize error")); exit(1); } if(verbose) { printf(_("%s read buffer resized to %i kilobytes\n"), fn, bc.size / 1024); } } } if(write_buf_size) { if(devinfo.write_subdevice < 0){ fprintf(stderr,_("warning: no write subdevice, resize ignored\n")); }else{ memset(&bc, 0, sizeof(bc)); bc.subdevice = devinfo.write_subdevice; bc.maximum_size = write_buf_size * 1024; bc.size = write_buf_size * 1024; if(ioctl(fd, COMEDI_BUFCONFIG, &bc) < 0) { perror(_("buffer resize error")); exit(1); } if(verbose) { printf(_("%s write buffer resized to %i kilobytes\n"), fn, bc.size / 1024); } } } for(index=0; index + 1 < sub_buf_len; index += 2) { memset(&bc, 0, sizeof(bc)); bc.subdevice = sub_buf_list[index + 0]; bc.maximum_size = sub_buf_list[index + 1] * 1024; bc.size = bc.maximum_size; if(ioctl(fd, COMEDI_BUFCONFIG, &bc) < 0) { perror(_("buffer resize error")); exit(1); } if(verbose) { printf(_("%s subdevice %u buffer resized to %u kilobytes\n"), fn, bc.subdevice, bc.size / 1024); } } } exit(0); } comedilib-0.11.0/comedi_config/Makefile.in0000644000000000000000000005536613140064520015253 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ sbin_PROGRAMS = comedi_config$(EXEEXT) subdir = comedi_config ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/am-check-python-headers.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/as-libtool.m4 $(top_srcdir)/m4/ax_tls.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(sbindir)" PROGRAMS = $(sbin_PROGRAMS) am_comedi_config_OBJECTS = comedi_config-comedi_config.$(OBJEXT) comedi_config_OBJECTS = $(am_comedi_config_OBJECTS) comedi_config_LDADD = $(LDADD) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = comedi_config_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(comedi_config_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(comedi_config_SOURCES) DIST_SOURCES = $(comedi_config_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COMEDILIB_AGE = @COMEDILIB_AGE@ COMEDILIB_CFLAGS = @COMEDILIB_CFLAGS@ COMEDILIB_CURRENT = @COMEDILIB_CURRENT@ COMEDILIB_LIBS = @COMEDILIB_LIBS@ COMEDILIB_LIBVERSION = @COMEDILIB_LIBVERSION@ COMEDILIB_LT_LDFLAGS = @COMEDILIB_LT_LDFLAGS@ COMEDILIB_REVISION = @COMEDILIB_REVISION@ COMEDILIB_VERSION_MAJOR = @COMEDILIB_VERSION_MAJOR@ COMEDILIB_VERSION_MICRO = @COMEDILIB_VERSION_MICRO@ COMEDILIB_VERSION_MINOR = @COMEDILIB_VERSION_MINOR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_BACKEND = @PDF_BACKEND@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_QUIET = @PYTHON_QUIET@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_CONFIG_OPTIONS = @RUBY_CONFIG_OPTIONS@ RUBY_PREFIX = @RUBY_PREFIX@ RUBY_SO_DIR = @RUBY_SO_DIR@ SCXI_SO_VERSION = @SCXI_SO_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ VERSION = @VERSION@ XMLTO = @XMLTO@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pcmciadir = @pcmciadir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ udevfirmwaredir = @udevfirmwaredir@ udevrulesdir = @udevrulesdir@ udevscriptsdir = @udevscriptsdir@ comedi_config_SOURCES = \ comedi_config.c comedi_config_CFLAGS = $(COMEDILIB_CFLAGS) comedi_config_LIBS = $(COMEDILIB_LIBS) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu comedi_config/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu comedi_config/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-sbinPROGRAMS: $(sbin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \ } \ ; done uninstall-sbinPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(sbindir)" && rm -f $$files clean-sbinPROGRAMS: @list='$(sbin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list comedi_config$(EXEEXT): $(comedi_config_OBJECTS) $(comedi_config_DEPENDENCIES) $(EXTRA_comedi_config_DEPENDENCIES) @rm -f comedi_config$(EXEEXT) $(AM_V_CCLD)$(comedi_config_LINK) $(comedi_config_OBJECTS) $(comedi_config_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comedi_config-comedi_config.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< comedi_config-comedi_config.o: comedi_config.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_config_CFLAGS) $(CFLAGS) -MT comedi_config-comedi_config.o -MD -MP -MF $(DEPDIR)/comedi_config-comedi_config.Tpo -c -o comedi_config-comedi_config.o `test -f 'comedi_config.c' || echo '$(srcdir)/'`comedi_config.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/comedi_config-comedi_config.Tpo $(DEPDIR)/comedi_config-comedi_config.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='comedi_config.c' object='comedi_config-comedi_config.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_config_CFLAGS) $(CFLAGS) -c -o comedi_config-comedi_config.o `test -f 'comedi_config.c' || echo '$(srcdir)/'`comedi_config.c comedi_config-comedi_config.obj: comedi_config.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_config_CFLAGS) $(CFLAGS) -MT comedi_config-comedi_config.obj -MD -MP -MF $(DEPDIR)/comedi_config-comedi_config.Tpo -c -o comedi_config-comedi_config.obj `if test -f 'comedi_config.c'; then $(CYGPATH_W) 'comedi_config.c'; else $(CYGPATH_W) '$(srcdir)/comedi_config.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/comedi_config-comedi_config.Tpo $(DEPDIR)/comedi_config-comedi_config.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='comedi_config.c' object='comedi_config-comedi_config.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_config_CFLAGS) $(CFLAGS) -c -o comedi_config-comedi_config.obj `if test -f 'comedi_config.c'; then $(CYGPATH_W) 'comedi_config.c'; else $(CYGPATH_W) '$(srcdir)/comedi_config.c'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(sbindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-sbinPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-sbinPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-sbinPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-sbinPROGRAMS cscopelist-am ctags ctags-am \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-sbinPROGRAMS install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-sbinPROGRAMS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: comedilib-0.11.0/comedilib.spec0000644000000000000000000000413113162422453013213 00000000000000Summary: Data Acquisition library for the Comedi DAQ driver. Name: comedilib Version: 0.11.0 Release: 1 License: LGPL Group: System Environment/Kernel URL: http://www.comedi.org/ Source: http://www.comedi.org/comedi/download/comedilib-0.11.0.tar.gz BuildRoot: /var/tmp/%{name}-buildroot Prereq: /sbin/ldconfig BuildRequires: python provides: comedilib %description Comedilib is the library for the Comedi data acquisition driver for Linux. It allows Linux processes to acquire data from supported DAQ cards, such as those from National Instruments. %package devel Summary: Libraries/include files for Comedi Group: Development/Libraries %description devel Comedilib is a library for using Comedi, a driver interface for data acquisition hardware. %prep %setup -q %build #called when the rpm is built CFLAGS="${CFLAGS:-%optflags}" ; export CFLAGS ; \ ./configure \ --prefix=%{_prefix} \ --mandir=%{_mandir} \ --datadir=%{_datadir} \ --sysconfdir=%{_sysconfdir} \ --disable-dependency-tracking make %install [ -n "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != / ] && rm -rf $RPM_BUILD_ROOT %makeinstall # Clean out files that should not be part of the rpm. # This is the recommended way of dealing with it for RH8 #rm -f $RPM_BUILD_ROOT%{_libdir}/*.a rm -f $RPM_BUILD_ROOT%{_libdir}/*.la # Move files mv $RPM_BUILD_ROOT%{_datadir}/comedilib $RPM_BUILD_ROOT%{_datadir}/comedilib-devel %post /sbin/ldconfig %postun /sbin/ldconfig %clean [ -n "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != / ] && rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root,-) %doc AUTHORS COPYING README TODO ChangeLog NEWS %{_libdir}/libcomedi.so %{_libdir}/libcomedi.so.* %{_libdir}/python2.2/site-packages/*.so %{_libdir}/python2.2/site-packages/comedi.py %{_sbindir}/comedi_* %{_bindir}/comedi_* %{_mandir}/man7/* %{_mandir}/man8/* %files devel %defattr(-,root,root,-) %{_libdir}/libcomedi.a %{_includedir}/comedi*.h %{_mandir}/man3/* %{_datadir}/comedilib-devel/html/* %changelog * Tue Jun 03 2002 David Schleef - update for new build system * Wed Feb 21 2002 Tim Ousley - initial build of comedilib RPM comedilib-0.11.0/NEWS0000644000000000000000000000000012416542105011074 00000000000000comedilib-0.11.0/scxi/0000755000000000000000000000000013162722665011447 500000000000000comedilib-0.11.0/scxi/Makefile.am0000644000000000000000000000034512416542105013413 00000000000000 EXTRA_DIST = README if BUILD_SCXI lib_LTLIBRARIES = libscxi.la else lib_LTLIBRARIES = endif libscxi_la_SOURCES = scxi.c libscxi_la_CFLAGS = $(COMEDILIB_CFLAGS) -D_REENTRANT libscxi_la_LDFLAGS = -version-info @SCXI_SO_VERSION@ comedilib-0.11.0/scxi/scxi.c0000644000000000000000000001525212416542105012474 00000000000000/* Copyright (C) 2004 Caleb Tennis 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 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. */ #include "comedilib_scxi.h" #include #include #include const scxi_board_t scxi_boards[] = { { 0, "unknown\0", 2, SLOW_INTERVAL, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0xffffffff, "empty\0", 2, SLOW_INTERVAL, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0x06, "SCXI-1100\0", 1, FAST_INTERVAL, SCXI_DIO_NONE, SCXI_AIO_AI, 32, 0x00, 0x00, 0x00, 0x00, 0x00 }, { 0x1e, "SCXI-1102\0", 2, FAST_INTERVAL, SCXI_DIO_NONE, SCXI_AIO_AI, 32, 0x02, 0x05, 0x01, 0x03, 0x04 }, { 0x0a, "SCXI-1122\0", 2, FAST_INTERVAL, SCXI_DIO_NONE, SCXI_AIO_AI, 16, 0x02, 0x01, 0x00, 0x03, 0x00 }, //{ 0x14, "SCXI-1124\0", 2, SLOW_INTERVAL, SCXI_DIO_NONE, SCXI_AIO_AO, 6, // 0x02, 0x08, 0x00, 0x03, 0x00 }, }; static int scxi_identify(scxi_mod_t *mod); static int scxi_serial_config(comedi_t *it, unsigned int clock_interval) { comedi_insn insn; lsampl_t data[2]; memset(&insn,0,sizeof(insn)); insn.insn = INSN_CONFIG; insn.n = 2; insn.data = &data[0]; insn.subdev = comedi_find_subdevice_by_type(it, COMEDI_SUBD_SERIAL, 0); data[0]=INSN_CONFIG_SERIAL_CLOCK; data[1]=clock_interval; return comedi_do_insn(it,&insn); } static int scxi_serial_readwrite(comedi_t *it, unsigned char out_bits, unsigned char *in_bits) { int ret; comedi_insn insn; lsampl_t data[2]; memset(&insn,0,sizeof(insn)); insn.insn = INSN_CONFIG; insn.n = 2; insn.data = data; insn.subdev = comedi_find_subdevice_by_type(it, COMEDI_SUBD_SERIAL, 0); data[0]=INSN_CONFIG_BIDIRECTIONAL_DATA; data[1]=out_bits; ret = comedi_do_insn(it,&insn); if(ret<0) return ret; if(in_bits) *in_bits = data[1]; return 0; } static int local_serial_readwrite(comedi_t *it, unsigned int subdev, unsigned int num_bits, unsigned int out_bits, unsigned int *in_bits) { unsigned char byte_out, byte_in; while(num_bits > 0) { if(in_bits != NULL) (*in_bits) <<= 8; byte_out = (out_bits >> (num_bits - 8)) & 0xFF; scxi_serial_readwrite(it,byte_out, &byte_in); if(in_bits != NULL) *in_bits |= byte_in; num_bits -= 8; } return 0; } static int scxi_slot_select(comedi_t *dev, unsigned int dio_subdev, unsigned int serial_subdev, unsigned short chassis_address, unsigned short module_slot) { const unsigned int ssreg = ((chassis_address & 0x1f) << 4) | (module_slot & 0x0f); comedi_dio_write(dev, dio_subdev, SCXI_LINE_SS, 0); scxi_serial_config(dev, SLOT0_INTERVAL); local_serial_readwrite(dev, serial_subdev, 16, ssreg, NULL); comedi_dio_write(dev, dio_subdev, SCXI_LINE_SS, 1); return 0; } void comedi_scxi_close(scxi_mod_t *mod) { free(mod); } scxi_mod_t *comedi_scxi_open(comedi_t *dev, unsigned short chassis_address, unsigned short mod_slot) { scxi_mod_t *mod = NULL; mod = (scxi_mod_t *) malloc(sizeof(*mod)); if(mod == NULL) goto Error; memset(mod, 0, sizeof(*mod)); mod->chassis = chassis_address; mod->slot = mod_slot; mod->dev = dev; if(mod->dev == NULL) goto Error; mod->dio_subdev = comedi_find_subdevice_by_type(mod->dev, COMEDI_SUBD_DIO, 0); mod->ser_subdev = comedi_find_subdevice_by_type(mod->dev, COMEDI_SUBD_SERIAL, 0); comedi_dio_config(mod->dev, mod->dio_subdev, SCXI_LINE_MISO, COMEDI_INPUT); comedi_dio_config(mod->dev, mod->dio_subdev, SCXI_LINE_DA, COMEDI_OUTPUT); comedi_dio_config(mod->dev, mod->dio_subdev, SCXI_LINE_SS, COMEDI_OUTPUT); comedi_dio_config(mod->dev, mod->dio_subdev, SCXI_LINE_MOSI, COMEDI_OUTPUT); comedi_dio_write(mod->dev, mod->dio_subdev, SCXI_LINE_DA, 1); comedi_dio_write(mod->dev, mod->dio_subdev, SCXI_LINE_SS, 1); scxi_identify(mod); return mod; Error: comedi_scxi_close(mod); return NULL; } static int scxi_module_select(scxi_mod_t *mod, unsigned short address) { scxi_slot_select(mod->dev, mod->dio_subdev, mod->ser_subdev, mod->chassis, mod->slot); if(scxi_serial_config(mod->dev, scxi_boards[mod->board].clock_interval) < 0) return -1; if(scxi_boards[mod->board].modclass == 2) if(local_serial_readwrite(mod->dev, mod->ser_subdev, 16, address, NULL) < 0) return -1; if(comedi_dio_write(mod->dev, mod->dio_subdev, SCXI_LINE_DA, 0) < 0) return -1; return 0; } static int scxi_module_deselect(scxi_mod_t *mod) { if(comedi_dio_write(mod->dev, mod->dio_subdev, SCXI_LINE_DA, 1) < 0) return -1; if(scxi_boards[mod->board].modclass == 2) { if(local_serial_readwrite(mod->dev, mod->ser_subdev, 16, REG_PARK, NULL) < 0) return -1; } scxi_slot_select(mod->dev, mod->dio_subdev, mod->ser_subdev, mod->chassis, 0); return 0; } static int scxi_identify(scxi_mod_t *mod) { unsigned int id, i; if(mod == NULL || mod->dev == NULL) return -1; scxi_slot_select(mod->dev, mod->dio_subdev, mod->ser_subdev, mod->chassis, mod->slot); scxi_serial_config(mod->dev, SLOW_INTERVAL); local_serial_readwrite(mod->dev, mod->ser_subdev, 32, 0, &id); if(id == 0xffffffff) { comedi_dio_write(mod->dev, mod->dio_subdev, SCXI_LINE_DA, 0); local_serial_readwrite(mod->dev, mod->ser_subdev, 32, 0, &id); comedi_dio_write(mod->dev, mod->dio_subdev, SCXI_LINE_DA, 1); } id = bswap_32(id); scxi_module_deselect(mod); for (i=0;iboard = i; break; } } fprintf(stderr, "name=%s, device_id = 0x%x, chassis_ad = %d, mod = %d\n", scxi_boards[mod->board].name, scxi_boards[mod->board].device_id, mod->chassis, mod->slot); return 0; } int comedi_scxi_register_readwrite(scxi_mod_t *mod, unsigned short reg_address, unsigned int num_bytes, unsigned char *data_out, unsigned char *data_in) { unsigned int i; unsigned int tmp_in, tmp_out = 0; if(mod == NULL || mod->dev == NULL) return -1; scxi_module_select(mod, reg_address); for(i = 0; i < num_bytes; ++i) { if(data_out) tmp_out = data_out[i]; local_serial_readwrite(mod->dev, mod->ser_subdev, 8, tmp_out, &tmp_in); if(data_in) data_in[i] = tmp_in; } if(scxi_boards[mod->board].modclass == 1 && reg_address == 0) { comedi_dio_write(mod->dev, mod->dio_subdev, SCXI_LINE_SS, 1); } scxi_module_deselect(mod); return 0; } comedilib-0.11.0/scxi/Makefile.in0000644000000000000000000005440213140064520013422 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = scxi ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/am-check-python-headers.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/as-libtool.m4 $(top_srcdir)/m4/ax_tls.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) libscxi_la_LIBADD = am_libscxi_la_OBJECTS = libscxi_la-scxi.lo libscxi_la_OBJECTS = $(am_libscxi_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libscxi_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libscxi_la_CFLAGS) \ $(CFLAGS) $(libscxi_la_LDFLAGS) $(LDFLAGS) -o $@ @BUILD_SCXI_TRUE@am_libscxi_la_rpath = -rpath $(libdir) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libscxi_la_SOURCES) DIST_SOURCES = $(libscxi_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COMEDILIB_AGE = @COMEDILIB_AGE@ COMEDILIB_CFLAGS = @COMEDILIB_CFLAGS@ COMEDILIB_CURRENT = @COMEDILIB_CURRENT@ COMEDILIB_LIBS = @COMEDILIB_LIBS@ COMEDILIB_LIBVERSION = @COMEDILIB_LIBVERSION@ COMEDILIB_LT_LDFLAGS = @COMEDILIB_LT_LDFLAGS@ COMEDILIB_REVISION = @COMEDILIB_REVISION@ COMEDILIB_VERSION_MAJOR = @COMEDILIB_VERSION_MAJOR@ COMEDILIB_VERSION_MICRO = @COMEDILIB_VERSION_MICRO@ COMEDILIB_VERSION_MINOR = @COMEDILIB_VERSION_MINOR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_BACKEND = @PDF_BACKEND@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_QUIET = @PYTHON_QUIET@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_CONFIG_OPTIONS = @RUBY_CONFIG_OPTIONS@ RUBY_PREFIX = @RUBY_PREFIX@ RUBY_SO_DIR = @RUBY_SO_DIR@ SCXI_SO_VERSION = @SCXI_SO_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ VERSION = @VERSION@ XMLTO = @XMLTO@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pcmciadir = @pcmciadir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ udevfirmwaredir = @udevfirmwaredir@ udevrulesdir = @udevrulesdir@ udevscriptsdir = @udevscriptsdir@ EXTRA_DIST = README @BUILD_SCXI_FALSE@lib_LTLIBRARIES = @BUILD_SCXI_TRUE@lib_LTLIBRARIES = libscxi.la libscxi_la_SOURCES = scxi.c libscxi_la_CFLAGS = $(COMEDILIB_CFLAGS) -D_REENTRANT libscxi_la_LDFLAGS = -version-info @SCXI_SO_VERSION@ all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu scxi/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu scxi/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libscxi.la: $(libscxi_la_OBJECTS) $(libscxi_la_DEPENDENCIES) $(EXTRA_libscxi_la_DEPENDENCIES) $(AM_V_CCLD)$(libscxi_la_LINK) $(am_libscxi_la_rpath) $(libscxi_la_OBJECTS) $(libscxi_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscxi_la-scxi.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< libscxi_la-scxi.lo: scxi.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libscxi_la_CFLAGS) $(CFLAGS) -MT libscxi_la-scxi.lo -MD -MP -MF $(DEPDIR)/libscxi_la-scxi.Tpo -c -o libscxi_la-scxi.lo `test -f 'scxi.c' || echo '$(srcdir)/'`scxi.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libscxi_la-scxi.Tpo $(DEPDIR)/libscxi_la-scxi.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='scxi.c' object='libscxi_la-scxi.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libscxi_la_CFLAGS) $(CFLAGS) -c -o libscxi_la-scxi.lo `test -f 'scxi.c' || echo '$(srcdir)/'`scxi.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(libdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-libLTLIBRARIES install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: comedilib-0.11.0/scxi/README0000644000000000000000000000263012416542105012236 00000000000000Comedi SCXI Documentation - Caleb Tennis (caleb@aei-tech.com) SCXI is a National Instruments standard for signal conditioning. It encompasses a set of hardware that has the capability of reading and writing multiple types of channels via a regular data acqusition card. A SCXI system consists of a chassis with one or more SCXI modules located inside. The system is connected via a cable to the data acquisition system, which communicates with the modules. Comedi's SCXI support is available in a library, which will be built alongside the regular comedilib if the --enable-scxi option is passed during ./configure time The following functions are available: scxi_mod_t *comedi_scxi_open(comedi_t *dev, unsigned short chassis_address, unsigned short mod_slot) This function initializes the scxi module within a certain chassis and slot. Returns a pointer to a scxi_module_struct which contains all of the pertinent information about the SCXI module. It also attempts to figure out which module is located in the slot based on the information returned from the module. void comedi_scxi_close(scxi_mod_t *) Closes the SCXI module int comedi_scxi_register_readwrite(scxi_mod_t *mod, unsigned short reg_address, unsigned int num_bytes, unsigned char *data_out, unsigned char *data_in) This is the low level function for communicating with the SCXI module. It reads/writes the data in/out of the register. comedilib-0.11.0/README0000644000000000000000000000613112767772626011316 00000000000000 COMEDILIB The Linux Control and Measurement Device Interface Library David Schleef * About Comedi: Comedi is a collection of drivers for data acquisition hardware. These drivers work with Linux, and also with Linux combined with the real-time extensions RTAI and RTLinux. The Comedi core, which ties all the driver together, allows applications to be written that are completely hardware independent. Comedi supports a variety of data acquisition hardware; an incomplete list can be found in the Comedi source. This distribution contains only the user-space library. You will almost certainly also want to download the Comedi kernel modules found in the "comedi" tarball. Also, the calibration programs comedi_calibrate and comedi_soft_calibrate can be found in the "comedi_calibrate" tarball. A few boards also need firmware found in the "comedi-nonfree-firmware" tarball. * Installation: Installation instructions are found in INSTALL. * Mailing List: Questions about Comedi and Comedilib should be sent to the Comedi mailing list, . It is necessary to join the group before posting (see below). It is also possible to post to the list using the web interface (see below). Mailing the maintainer directly is always acceptable, but since the mailing list is archived and questions are often answered more quickly by others, the mailing list is preferred. To subscribe to and unsubscribe from the mailing list, or to read or post messages via the web interface, go to . Alternatively, you can send a blank email to to subscribe, or to to unsubscribe (making sure the "From:" email address matches the address you originally subscribed with!). Traffic on the list is light, and mainly questions/answers about comedi installation, bugs, and programming. General questions about data acquisition are also welcome. * More Information: Comedi also has a web page at from where updated versions may be downloaded. Often bugfixes and new features that are not in the current release can be found in the Git repository. Instructions for access to the Comedi and Comedilib repositories can be found at . Git snapshots for Comedilib can be created automatically at . The Git repository can be cloned locally using: git clone https://github.com/Linux-Comedi/comedilib.git The Git repository was previously hosted at comedi.org. A previously cloned repository may need its URL updating to the current repository on github.com as follows: cd /path/to/comedilib git remote set-url origin https://github.com/Linux-Comedi/comedilib.git Comedilib may be freely distibuted and modified in accordance with the GNU Lesser General Public License. Portions of the Comedilib distribution fall under different licenses; see the individual files for details. The person behind all this misspelled humor is David Schleef . comedilib-0.11.0/etc/0000755000000000000000000000000013162722665011254 500000000000000comedilib-0.11.0/etc/Makefile.am0000644000000000000000000000020512416542105013213 00000000000000 SUBDIRS = pcmcia hotplug udev doc_DATA = das1600.conf dt282x.conf modules.conf EXTRA_DIST = das1600.conf dt282x.conf modules.conf comedilib-0.11.0/etc/hotplug/0000755000000000000000000000000013162722664012735 500000000000000comedilib-0.11.0/etc/hotplug/Makefile.am0000644000000000000000000000001612416542105014675 00000000000000SUBDIRS = usb comedilib-0.11.0/etc/hotplug/Makefile.in0000644000000000000000000004664413140064520014722 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = etc/hotplug ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/am-check-python-headers.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/as-libtool.m4 $(top_srcdir)/m4/ax_tls.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COMEDILIB_AGE = @COMEDILIB_AGE@ COMEDILIB_CFLAGS = @COMEDILIB_CFLAGS@ COMEDILIB_CURRENT = @COMEDILIB_CURRENT@ COMEDILIB_LIBS = @COMEDILIB_LIBS@ COMEDILIB_LIBVERSION = @COMEDILIB_LIBVERSION@ COMEDILIB_LT_LDFLAGS = @COMEDILIB_LT_LDFLAGS@ COMEDILIB_REVISION = @COMEDILIB_REVISION@ COMEDILIB_VERSION_MAJOR = @COMEDILIB_VERSION_MAJOR@ COMEDILIB_VERSION_MICRO = @COMEDILIB_VERSION_MICRO@ COMEDILIB_VERSION_MINOR = @COMEDILIB_VERSION_MINOR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_BACKEND = @PDF_BACKEND@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_QUIET = @PYTHON_QUIET@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_CONFIG_OPTIONS = @RUBY_CONFIG_OPTIONS@ RUBY_PREFIX = @RUBY_PREFIX@ RUBY_SO_DIR = @RUBY_SO_DIR@ SCXI_SO_VERSION = @SCXI_SO_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ VERSION = @VERSION@ XMLTO = @XMLTO@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pcmciadir = @pcmciadir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ udevfirmwaredir = @udevfirmwaredir@ udevrulesdir = @udevrulesdir@ udevscriptsdir = @udevscriptsdir@ SUBDIRS = usb all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu etc/hotplug/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu etc/hotplug/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: comedilib-0.11.0/etc/hotplug/usb/0000755000000000000000000000000013162722664013526 500000000000000comedilib-0.11.0/etc/hotplug/usb/Makefile.am0000644000000000000000000000005012416542105015464 00000000000000SUBDIRS = usbdux usbduxfast usbduxsigma comedilib-0.11.0/etc/hotplug/usb/usbduxfast/0000755000000000000000000000000013162722664015716 500000000000000comedilib-0.11.0/etc/hotplug/usb/usbduxfast/usbduxfast_firmware.hex0000644000000000000000000000406212416542105022421 00000000000000:030000000201A258 :03004300020100B7 :1001000002017F0002017F0002017F0002017F00E7 :1001100002017F0002017F0002017F0002017F00D7 :1001200002017F0002017F0002017F0002017F00C7 :1001300002017F000202C20002017F0002017F0073 :1001400002017F0002017F0002017F0002017F00A7 :1001500002017F0002017F0002017F0002017F0097 :1001600002017F0002017F0002017F0002017F0087 :1001700002017F0002017F0002017F0002017FC0B7 :1001800086C082C083C084C085C0E0C0D0E591C273 :10019000E4F591D0D0D0E0D085D084D083D082D087 :1001A000863290E60B74031203E290E6007410129C :1001B00003E290E60174A21203E290E60474801256 :1001C00003E274081203E274021203E274041203DD :1001D000E274061203E274001203E290E668740807 :1001E0001203E21202831201FD1201EE80FBE570A0 :1001F000600AE5BB548060047406F5BB2290E614E7 :1002000074E01203E290E61A74091203E290E62405 :1002100074021203E290E62574001203E290E6C035 :1002200074FC1203E290E6C374801203E290E6C20B :1002300074FF1203E274FD1203E274FF1203E2740E :100240000290E6E21203E2740190E6E31203E27424 :100250000090E6F31203E2740090E6C11203E2900C :10026000E420743F1203E290E42874011203E29048 :10027000E43074FF1203E290E43874FF1203E27575 :1002800070002290E61374A01203E290E6957400C9 :100290001203E21203E21203E290E6157400120365 :1002A000E290E65E74201203E290E65F7424F09020 :1002B000E65C7400F090E6607400F075E80175A8E3 :1002C0008022C086C082C083C084C085C0E0C0D008 :1002D000C000C001C002C003C004C005C006C00702 :1002E00090F400E09002E92373800580000203A0EF :1002F00075700090E61A74001203E290E6F574FF40 :100300001203E2E5BB548060FA90E6C074FDF0127F :1003100003D890E60474801203E274061203E274B8 :10032000001203E27406F5BBAAFFDAFE90E6F5744C :10033000FF1203E2AAFFDAFEE5BB548060FA759D66 :10034000E41203D8759E001203D8759AF41203D8EC :10035000759B011203D875AF071203D87A2090E677 :100360007BE01203D890E67CF01203D8DAF090E636 :100370001A74091203E290E6C074FCF01203D890DC :10038000E60474801203E274061203E2740012039E :10039000E290E410E044FB90E6C21203E2757001C3 :1003A00090E6957400F01203D8F01203D8E591C2DC :1003B000E4F59190E65F7420F0D007D006D005D028 :1003C00004D003D002D001D000D0D0D0E0D085D06E :1003D00084D083D082D0863200000000000000006C :0703E00000221203D8F022F5 :00000001FF comedilib-0.11.0/etc/hotplug/usb/usbduxfast/Makefile.am0000644000000000000000000000022212416542105017655 00000000000000EXTRA_DIST = usbduxfast usbduxfast_firmware.hex usbduxfast_firmware.bin if INSTALL_UDEVHOTPLUG udevfirmware_DATA = usbduxfast_firmware.bin endif comedilib-0.11.0/etc/hotplug/usb/usbduxfast/usbduxfast_firmware.bin0000644000000000000000000000174712416542105022414 00000000000000¢ÂÀ†À‚ÀƒÀ„À…ÀàÀÐå‘Âäõ‘ÐÐÐàЅЄЃЂІ2æ tâætâæt¢âæt€âtâtâtâtâtâæhtâƒýî€ûåp` å»T€`tõ»"ætàâæt âæ$tâæ%tâæÀtüâæÃt€âæÂtÿâtýâtÿâtæââtæãâtæóâtæÁâä t?âä(tâä0tÿâä8tÿâup"æt âæ•tâââætâæ^t âæ_t$ðæ\tðæ`tðuèu¨€"À†À‚ÀƒÀ„À…ÀàÀÐÀÀÀÀÀÀÀÀôàé#s€€ upætâæõtÿâå»T€`úæÀtýðØæt€âtâtâtõ»ªÿÚþæõtÿâªÿÚþå»T€`úuäØužØušôØu›Øu¯Øz æ{àØæ|ðØÚðæt âæÀtüðØæt€âtâtâäàDûæÂâupæ•tðØðØå‘Âäõ‘æ_t ðÐÐÐÐÐÐÐÐÐÐÐàЅЄЃЂІ2"Øð"comedilib-0.11.0/etc/hotplug/usb/usbduxfast/usbduxfast0000755000000000000000000000206412416542105017745 00000000000000#!/bin/sh # # hotplug script for USBDUX. Mon Oct 20 10:08:09 BST 2003. # Bernd.Porr@cn.stir.ac.uk # # # #look for comedi config COMEDI_CONFIG= # if [ -e /usr/local/sbin/comedi_config ]; then COMEDI_CONFIG=/usr/local/sbin/comedi_config fi if [ -e /usr/sbin/comedi_config ]; then COMEDI_CONFIG=/usr/sbin/comedi_config fi if [ -e /sbin/comedi_config ]; then COMEDI_CONFIG=/sbin/comedi_config fi # # #look for the firmware USBDUX_FIRMWARE= if [ -e /usr/share/usb/usbduxfast_firmware.hex ]; then USBDUX_FIRMWARE=/usr/share/usb/usbduxfast_firmware.hex fi if [ -e /usr/local/share/usb/usbduxfast_firmware.hex ]; then USBDUX_FIRMWARE=/usr/local/share/usb/usbduxfast_firmware.hex fi # # # # # If you have more than one device please add/uncomment # # just to make sure we remove the comedi device $COMEDI_CONFIG -r /dev/comedi0 # $COMEDI_CONFIG -r /dev/comedi1 # # connecting the comedi device comedi0 with the module usbdux $COMEDI_CONFIG --read-buffer 512 -i $USBDUX_FIRMWARE /dev/comedi0 usbduxfast # $COMEDI_CONFIG /dev/comedi1 usbduxfast # # comedilib-0.11.0/etc/hotplug/usb/usbduxfast/Makefile.in0000644000000000000000000003721413140064520017674 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = etc/hotplug/usb/usbduxfast ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/am-check-python-headers.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/as-libtool.m4 $(top_srcdir)/m4/ax_tls.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(udevfirmwaredir)" DATA = $(udevfirmware_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COMEDILIB_AGE = @COMEDILIB_AGE@ COMEDILIB_CFLAGS = @COMEDILIB_CFLAGS@ COMEDILIB_CURRENT = @COMEDILIB_CURRENT@ COMEDILIB_LIBS = @COMEDILIB_LIBS@ COMEDILIB_LIBVERSION = @COMEDILIB_LIBVERSION@ COMEDILIB_LT_LDFLAGS = @COMEDILIB_LT_LDFLAGS@ COMEDILIB_REVISION = @COMEDILIB_REVISION@ COMEDILIB_VERSION_MAJOR = @COMEDILIB_VERSION_MAJOR@ COMEDILIB_VERSION_MICRO = @COMEDILIB_VERSION_MICRO@ COMEDILIB_VERSION_MINOR = @COMEDILIB_VERSION_MINOR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_BACKEND = @PDF_BACKEND@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_QUIET = @PYTHON_QUIET@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_CONFIG_OPTIONS = @RUBY_CONFIG_OPTIONS@ RUBY_PREFIX = @RUBY_PREFIX@ RUBY_SO_DIR = @RUBY_SO_DIR@ SCXI_SO_VERSION = @SCXI_SO_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ VERSION = @VERSION@ XMLTO = @XMLTO@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pcmciadir = @pcmciadir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ udevfirmwaredir = @udevfirmwaredir@ udevrulesdir = @udevrulesdir@ udevscriptsdir = @udevscriptsdir@ EXTRA_DIST = usbduxfast usbduxfast_firmware.hex usbduxfast_firmware.bin @INSTALL_UDEVHOTPLUG_TRUE@udevfirmware_DATA = usbduxfast_firmware.bin all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu etc/hotplug/usb/usbduxfast/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu etc/hotplug/usb/usbduxfast/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-udevfirmwareDATA: $(udevfirmware_DATA) @$(NORMAL_INSTALL) @list='$(udevfirmware_DATA)'; test -n "$(udevfirmwaredir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(udevfirmwaredir)'"; \ $(MKDIR_P) "$(DESTDIR)$(udevfirmwaredir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(udevfirmwaredir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(udevfirmwaredir)" || exit $$?; \ done uninstall-udevfirmwareDATA: @$(NORMAL_UNINSTALL) @list='$(udevfirmware_DATA)'; test -n "$(udevfirmwaredir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(udevfirmwaredir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(udevfirmwaredir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-udevfirmwareDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-udevfirmwareDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip install-udevfirmwareDATA installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-udevfirmwareDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: comedilib-0.11.0/etc/hotplug/usb/usbduxfast/README0000644000000000000000000000123412416542105016505 00000000000000Remarks to the hotplug script "usbduxfast": --------------------------------------- The script /etc/hotplug/usb/usbduxfast uploads the firmware into the usb device after it has been plugged in. It assumes that you have installed the firmware under /usr/share/usb (recommended by the usb hotplug team) and that usbdux shall be connected to comedi0. Please modify the script if needed. To compile the firmware: ------------------------ Download the as31 from: http://www.berndporr.me.uk/as31/ (this is a patched version of as31 which supports an include directive). Install it in this directory. Then run "make -f Makefile_asm". Feedback: BerndPorr@f2s.com comedilib-0.11.0/etc/hotplug/usb/Makefile.in0000644000000000000000000004671213140064520015507 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = etc/hotplug/usb ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/am-check-python-headers.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/as-libtool.m4 $(top_srcdir)/m4/ax_tls.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COMEDILIB_AGE = @COMEDILIB_AGE@ COMEDILIB_CFLAGS = @COMEDILIB_CFLAGS@ COMEDILIB_CURRENT = @COMEDILIB_CURRENT@ COMEDILIB_LIBS = @COMEDILIB_LIBS@ COMEDILIB_LIBVERSION = @COMEDILIB_LIBVERSION@ COMEDILIB_LT_LDFLAGS = @COMEDILIB_LT_LDFLAGS@ COMEDILIB_REVISION = @COMEDILIB_REVISION@ COMEDILIB_VERSION_MAJOR = @COMEDILIB_VERSION_MAJOR@ COMEDILIB_VERSION_MICRO = @COMEDILIB_VERSION_MICRO@ COMEDILIB_VERSION_MINOR = @COMEDILIB_VERSION_MINOR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_BACKEND = @PDF_BACKEND@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_QUIET = @PYTHON_QUIET@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_CONFIG_OPTIONS = @RUBY_CONFIG_OPTIONS@ RUBY_PREFIX = @RUBY_PREFIX@ RUBY_SO_DIR = @RUBY_SO_DIR@ SCXI_SO_VERSION = @SCXI_SO_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ VERSION = @VERSION@ XMLTO = @XMLTO@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pcmciadir = @pcmciadir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ udevfirmwaredir = @udevfirmwaredir@ udevrulesdir = @udevrulesdir@ udevscriptsdir = @udevscriptsdir@ SUBDIRS = usbdux usbduxfast usbduxsigma all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu etc/hotplug/usb/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu etc/hotplug/usb/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: comedilib-0.11.0/etc/hotplug/usb/usbdux/0000755000000000000000000000000013162722664015040 500000000000000comedilib-0.11.0/etc/hotplug/usb/usbdux/Makefile.am0000644000000000000000000000020212416542105016775 00000000000000EXTRA_DIST = usbdux usbdux_firmware.hex usbdux_firmware.bin if INSTALL_UDEVHOTPLUG udevfirmware_DATA = usbdux_firmware.bin endif comedilib-0.11.0/etc/hotplug/usb/usbdux/usbdux_firmware.bin0000644000000000000000000000335212416542105020652 00000000000000¢WÀ†À‚ÀƒÀ„À…ÀàÀÐå‘Âäõ‘ÐÐÐàЅЄЃЂІ2ætåæ tåu¸uøÿæhtåö~ýx’æ`úå»T€`ôtõ»€îÃÃÃÃÃÃÿÿÿÿÿÿÿÿx’töæt€å"æt‚å…ÿ³æt ðæt€åt„åtåæ•tååæõtÿåå»T€`úæÃt€åæÂtðåtæÚåtæÛåtÿæÎåtÿæÏåtÿæÐåtÿæÑåtæóåtæÁåætåæÀtðÛçàÛzð£ÚüuäÛužÛÛu¯Ûz à£À‚ÀƒÀ„À…æ|ðÛЅЄЃЂÚåæIt„ååx’tö"u²'u€""uŽuŠuŒu¨‚u‰ÒŒ"T|DÂz0çÒ‚€‚Ҁ€#Úð‚zҀ€Úú|z}Ҁ€å€0äìMüíýÚï{z}€Ò€Â€å€0äëMûíýÚïÒ"ušøu›u¯x€æùæ{æëðìðÙõ"æt€ðtðtðtðtðtðæt’ðætðæ‘tðÛðÛðÛæt ðætðÛðÛætÒðætàðæ^tˆðæ_t ðæ\tðuèu¨€"åý[`ä÷ ÷€æm]\`íZp ç÷´ÿ ç÷€ ç÷p ç÷íö"À†ÀàÀÐÀÀÀÀÀÀx˜y tü#ú#ûè ë##ü#ú#ûèÐÐÐÐÐÐÐÐÐàІ2À†À‚ÀƒÀ„À…ÀàÀÐÀÀÀÀÀÀÀÀåªT pbæ˜tåæ™tååªTpðãæ‘tååå‘Âäõ‘æ]tðÐÐÐÐÐÐÐÐÐÐÐàЅЄЃЂІ2æt€åætåætå"æt€åætåætå"À†À‚ÀƒÀ„À…ÀàÀÐÀÀÀÀÀÀÀÀç€àxö,#s€G€Z€`€f€0€€€€ €gû€bÐ7€Zçx à`ùÙü£àö£àö€Dx‘çàöÐ7€5x€z çàö£Úúé#€ çã€çàõ³€çàõ³£àõÐ7ætåååå‘Âäõ‘æ_tðÐÐÐÐÐÐÐÐÐÐÐàЅЄЃЂІ2à£øàû£àü£à£ôØó"TÀD0LÂ…z0çÒ‚€‚Ҁ€#Úðëz0çÒ‚€‚Ҁ€#ÚðÒ…"bæ˜tåæ™tå"üäðüxæðH#s€D€B€@€%€€€8x üyæð£Ùú€x‘æüëð£ìð€ üåð£äðæœtåætå"À†À‚ÀƒÀ„À…ÀàÀÐÀÀÀÀÀÀÀÀ7å‘Âäõ‘æ_t€ðÐÐÐÐÐÐÐÐÐÐÐàЅЄЃЂІ2"ðÛ"comedilib-0.11.0/etc/hotplug/usb/usbdux/usbdux_firmware.hex0000644000000000000000000001021212416542105020657 00000000000000:030000000201A258 :03000B00020416D6 :03004300020100B7 :1001000002017F000204570002017F0002017F000C :1001100002017F0002017F0002017F0002017F00D7 :1001200002017F0002017F0002017F000205020040 :1001300002017F0002017F0002017F0002068F00A2 :1001400002017F0002017F0002017F0002017F00A7 :1001500002017F0002017F0002017F0002017F0097 :1001600002017F0002017F0002017F0002017F0087 :1001700002017F0002017F0002017F0002017FC0B7 :1001800086C082C083C084C085C0E0C0D0E591C273 :10019000E4F591D0D0D0E0D085D084D083D082D087 :1001A000863290E60074101206E590E60B74031296 :1001B00006E575B80075F8FF90E66874081206E564 :1001C0001202F612037E1202FD007892E660FAE552 :1001D000BB548060F47401F5BB80EEC3C3C3C3C3DA :1001E000C301010206020202020202FFFFFFFFFF3B :1001F000FFFFFF000000000000000078927400F68E :1002000090E60174801206E52290E60174821206DF :10021000E585FFB390E61374A0F090E604748012B5 :1002200006E574841206E574001206E590E69574FE :10023000001206E51206E590E6F574FF1206E5E504 :10024000BB548060FA90E6C374801206E590E6C263 :1002500074F01206E5740190E6DA1206E574019076 :10026000E6DB1206E574FF90E6CE1206E574FF9019 :10027000E6CF1206E574FF90E6D01206E574FF9013 :10028000E6D11206E5740090E6F31206E5740190DB :10029000E6C11206E590E61974101206E590E6C074 :1002A0007400F01206DB90E781E09001DB7A06F043 :1002B000A3DAFC759DE41206DB759E001206DB9046 :1002C00001DB75AF071206DB7A20E0A3C082C08392 :1002D000C084C08590E67CF01206DBD085D084D047 :1002E00083D082DAE590E64974841206E51206E5C9 :1002F00078927401F62275B22775802222758E01DC :10030000758A10758C0075A882758900D28C22546C :100310007C4481C2817A0830E704D2828002C282A2 :10032000D280C28023DAF0C2827A05D280C280DA1B :10033000FA7C007A047D08D280C280E58030E40334 :10034000EC4DFCED03FDDAEF7B007A087D80D28076 :10035000C280E58030E403EB4DFBED03FDDAEFD224 :100360008122759AF8759B0075AF077880E6F99041 :10037000E67B08E612030FEBF0ECF0D9F52290E6ED :10038000047480F07402F07404F07406F07408F0E1 :100390007400F090E6127492F090E6187400F090F9 :1003A000E6917400F01206DBF01206DBF01206DBB9 :1003B00090E61074A0F090E68D7400F01206DBF069 :1003C0001206DB90E61474D2F090E61574E0F0901B :1003D000E65E7488F090E65F74A0F090E65C7402CC :1003E000F075E80175A88022E590FD5B6006E4F7F2 :1003F0000CF7801FE66D5D5C6019ED5A700CE71418 :10040000F7B4FF0F09E714F78009E704F770040950 :10041000E704F7EDF622C086C0E0C0D0C000C001FE :10042000C002C003C004C005789879A07401FC2301 :10043000FA23FB1203E8080909EB2323FC23FA2320 :10044000FB1203E8D005D004D003D002D001D000C5 :10045000D0D0D0E0D08632C086C082C083C084C0F5 :1004600085C0E0C0D0C000C001C002C003C004C04D :1004700005C006C007E5AA5420701312036290E677 :100480009874001206E590E69974101206E5E5AA44 :100490005401701190F0001205E390E6917400127F :1004A00006E51206E5E591C2E4F59190E65D740279 :1004B000F0D007D006D005D004D003D002D001D0B0 :1004C00000D0D0D0E0D085D084D083D082D0863206 :1004D00090E60474801206E590E60474081206E5BE :1004E00090E60474001206E52290E6047480120679 :1004F000E590E60474061206E590E6047400120620 :10050000E522C086C082C083C084C085C0E0C0D060 :10051000C000C001C002C003C004C005C006C007BF :1005200090E780E07890F690052C23738047805AFE :100530008060806680308010801680028005120204 :100540000980671201FB80621204D0120637805ABC :1005500090E78178A0E06005F90808D9FCA3E0F6EF :1005600008A3E0F68044789190E781E0F61204D089 :10057000120637803578807A0990E781E0F6A30883 :10058000DAFA1204E9120623802090E7811205E3CB :10059000801890E781E0F5B3801090E781E0F5B333 :1005A000A3E0F5901204D012063790E68D74001285 :1005B00006E51206E51206E5E591C2E4F59190E63E :1005C0005F7408F0D007D006D005D004D003D00265 :1005D000D001D000D0D0D0E0D085D084D083D082DC :1005E000D08632E0A3F8E0FBA3E0FCA3E0A3120571 :1005F000F4D8F32254C044304CC2857A0830E70462 :10060000D2828002C282D280C28023DAF0EB7A08E2 :1006100030E704D2828002C282D280C28023DAF024 :10062000D2852212036290E69874001206E590E6E5 :100630009974101206E52290FC01E4F090FC007819 :1006400090E6F090064823738044804280408025E5 :1006500080138002803878A090FC027908E6F008C8 :10066000A3D9FA80197891E612030F90FC02EBF0FF :10067000A3ECF0800990FC02E590F0A3E4F090E692 :100680009C74001206E590E69D74101206E522C0E7 :1006900086C082C083C084C085C0E0C0D0C000C016 :1006A00001C002C003C004C005C006C0071206375F :1006B000E591C2E4F59190E65F7480F0D007D00632 :1006C000D005D004D003D002D001D000D0D0D0E0EB :1006D000D085D084D083D082D08632000000000044 :0A06E0000000000022F01206DB22E9 :00000001FF comedilib-0.11.0/etc/hotplug/usb/usbdux/Makefile.in0000644000000000000000000003716013140064520017016 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = etc/hotplug/usb/usbdux ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/am-check-python-headers.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/as-libtool.m4 $(top_srcdir)/m4/ax_tls.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(udevfirmwaredir)" DATA = $(udevfirmware_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COMEDILIB_AGE = @COMEDILIB_AGE@ COMEDILIB_CFLAGS = @COMEDILIB_CFLAGS@ COMEDILIB_CURRENT = @COMEDILIB_CURRENT@ COMEDILIB_LIBS = @COMEDILIB_LIBS@ COMEDILIB_LIBVERSION = @COMEDILIB_LIBVERSION@ COMEDILIB_LT_LDFLAGS = @COMEDILIB_LT_LDFLAGS@ COMEDILIB_REVISION = @COMEDILIB_REVISION@ COMEDILIB_VERSION_MAJOR = @COMEDILIB_VERSION_MAJOR@ COMEDILIB_VERSION_MICRO = @COMEDILIB_VERSION_MICRO@ COMEDILIB_VERSION_MINOR = @COMEDILIB_VERSION_MINOR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_BACKEND = @PDF_BACKEND@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_QUIET = @PYTHON_QUIET@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_CONFIG_OPTIONS = @RUBY_CONFIG_OPTIONS@ RUBY_PREFIX = @RUBY_PREFIX@ RUBY_SO_DIR = @RUBY_SO_DIR@ SCXI_SO_VERSION = @SCXI_SO_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ VERSION = @VERSION@ XMLTO = @XMLTO@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pcmciadir = @pcmciadir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ udevfirmwaredir = @udevfirmwaredir@ udevrulesdir = @udevrulesdir@ udevscriptsdir = @udevscriptsdir@ EXTRA_DIST = usbdux usbdux_firmware.hex usbdux_firmware.bin @INSTALL_UDEVHOTPLUG_TRUE@udevfirmware_DATA = usbdux_firmware.bin all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu etc/hotplug/usb/usbdux/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu etc/hotplug/usb/usbdux/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-udevfirmwareDATA: $(udevfirmware_DATA) @$(NORMAL_INSTALL) @list='$(udevfirmware_DATA)'; test -n "$(udevfirmwaredir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(udevfirmwaredir)'"; \ $(MKDIR_P) "$(DESTDIR)$(udevfirmwaredir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(udevfirmwaredir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(udevfirmwaredir)" || exit $$?; \ done uninstall-udevfirmwareDATA: @$(NORMAL_UNINSTALL) @list='$(udevfirmware_DATA)'; test -n "$(udevfirmwaredir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(udevfirmwaredir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(udevfirmwaredir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-udevfirmwareDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-udevfirmwareDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip install-udevfirmwareDATA installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-udevfirmwareDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: comedilib-0.11.0/etc/hotplug/usb/usbdux/README0000644000000000000000000000122412416542105015626 00000000000000Remarks to the hotplug script "usbdux": --------------------------------------- The script /etc/hotplug/usb/usbdux uploads the firmware into the usb device after it has been plugged in. It assumes that you have installed the firmware under /usr/share/usb (recommended by the usb hotplug team) and that usbdux shall be connected to comedi0. Please modify the script if needed. To compile the firmware: ------------------------ Download the as31 from: http://www.berndporr.me.uk/as31/ (this is a patched version of as31 which supports an include directive). Install it in this directory. Then run "make -f Makefile_asm". Feedback: BerndPorr@f2s.com comedilib-0.11.0/etc/hotplug/usb/usbdux/usbdux0000755000000000000000000000203012416542105016202 00000000000000#!/bin/sh # # hotplug script for USBDUX. Sat Mar 20 09:56:43 GMT 2004 # Bernd.Porr@cn.stir.ac.uk # # # #look for comedi config COMEDI_CONFIG= # if [ -e /usr/local/sbin/comedi_config ]; then COMEDI_CONFIG=/usr/local/sbin/comedi_config fi if [ -e /usr/sbin/comedi_config ]; then COMEDI_CONFIG=/usr/sbin/comedi_config fi if [ -e /sbin/comedi_config ]; then COMEDI_CONFIG=/sbin/comedi_config fi # # #look for the firmware USBDUX_FIRMWARE= if [ -e /usr/share/usb/usbdux_firmware.hex ]; then USBDUX_FIRMWARE=/usr/share/usb/usbdux_firmware.hex fi if [ -e /usr/local/share/usb/usbdux_firmware.hex ]; then USBDUX_FIRMWARE=/usr/local/share/usb/usbdux_firmware.hex fi # # # If you have more than one device please add/uncomment # # just to make sure we remove the comedi device $COMEDI_CONFIG -r /dev/comedi0 # $COMEDI_CONFIG -r /dev/comedi1 # # connecting the comedi device comedi0 with the module usbdux $COMEDI_CONFIG -i $USBDUX_FIRMWARE /dev/comedi0 usbdux # $COMEDI_CONFIG -i $USBDUX_FIRMWARE /dev/comedi1 usbdux # # comedilib-0.11.0/etc/hotplug/usb/usbduxsigma/0000755000000000000000000000000013162722665016062 500000000000000comedilib-0.11.0/etc/hotplug/usb/usbduxsigma/Makefile.am0000644000000000000000000000022612416542105020024 00000000000000EXTRA_DIST = usbduxsigma usbduxsigma_firmware.hex usbduxsigma_firmware.bin if INSTALL_UDEVHOTPLUG udevfirmware_DATA = usbduxsigma_firmware.bin endif comedilib-0.11.0/etc/hotplug/usb/usbduxsigma/Makefile.in0000644000000000000000000003722313140064520020037 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = etc/hotplug/usb/usbduxsigma ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/am-check-python-headers.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/as-libtool.m4 $(top_srcdir)/m4/ax_tls.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(udevfirmwaredir)" DATA = $(udevfirmware_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COMEDILIB_AGE = @COMEDILIB_AGE@ COMEDILIB_CFLAGS = @COMEDILIB_CFLAGS@ COMEDILIB_CURRENT = @COMEDILIB_CURRENT@ COMEDILIB_LIBS = @COMEDILIB_LIBS@ COMEDILIB_LIBVERSION = @COMEDILIB_LIBVERSION@ COMEDILIB_LT_LDFLAGS = @COMEDILIB_LT_LDFLAGS@ COMEDILIB_REVISION = @COMEDILIB_REVISION@ COMEDILIB_VERSION_MAJOR = @COMEDILIB_VERSION_MAJOR@ COMEDILIB_VERSION_MICRO = @COMEDILIB_VERSION_MICRO@ COMEDILIB_VERSION_MINOR = @COMEDILIB_VERSION_MINOR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_BACKEND = @PDF_BACKEND@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_QUIET = @PYTHON_QUIET@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_CONFIG_OPTIONS = @RUBY_CONFIG_OPTIONS@ RUBY_PREFIX = @RUBY_PREFIX@ RUBY_SO_DIR = @RUBY_SO_DIR@ SCXI_SO_VERSION = @SCXI_SO_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ VERSION = @VERSION@ XMLTO = @XMLTO@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pcmciadir = @pcmciadir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ udevfirmwaredir = @udevfirmwaredir@ udevrulesdir = @udevrulesdir@ udevscriptsdir = @udevscriptsdir@ EXTRA_DIST = usbduxsigma usbduxsigma_firmware.hex usbduxsigma_firmware.bin @INSTALL_UDEVHOTPLUG_TRUE@udevfirmware_DATA = usbduxsigma_firmware.bin all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu etc/hotplug/usb/usbduxsigma/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu etc/hotplug/usb/usbduxsigma/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-udevfirmwareDATA: $(udevfirmware_DATA) @$(NORMAL_INSTALL) @list='$(udevfirmware_DATA)'; test -n "$(udevfirmwaredir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(udevfirmwaredir)'"; \ $(MKDIR_P) "$(DESTDIR)$(udevfirmwaredir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(udevfirmwaredir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(udevfirmwaredir)" || exit $$?; \ done uninstall-udevfirmwareDATA: @$(NORMAL_UNINSTALL) @list='$(udevfirmware_DATA)'; test -n "$(udevfirmwaredir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(udevfirmwaredir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(udevfirmwaredir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-udevfirmwareDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-udevfirmwareDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip install-udevfirmwareDATA installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-udevfirmwareDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: comedilib-0.11.0/etc/hotplug/usb/usbduxsigma/README0000644000000000000000000000042612416542105016652 00000000000000To compile the firmware: ------------------------ Download the as31 from: http://www.berndporr.me.uk/as31/ (this is a patched version of as31 which supports an include directive). Install it in this directory. Then run "make -f Makefile_asm". Feedback: BerndPorr@f2s.com comedilib-0.11.0/etc/hotplug/usb/usbduxsigma/usbduxsigma_firmware.bin0000644000000000000000000002000012416542105022701 00000000000000¢×÷iÀ†À‚ÀƒÀ„À…ÀàÀÐå‘Âäõ‘ÐÐÐàЅЄЃЂІ2ætÚæ tÚu¸uøÿæhtÚæqtÚàOxæ`úå»T€`ôtõ»€îx‚vu²àu€`æt Úu˜ærtÚ"†“™õ™å˜0áû†"†Â…˜å˜0àû噓†"TD@Â…þÒ…"ÀàTD`Â…þèþÒ…Ðà$ˆðµðå"æt€ðtðtðtðtðtðæt’ðætðæ‘tðÐðÐðÐæt ðætðÐðÐætÒðætàðæ^tˆðæ_tˆðæ\tðuèu¨€"å€ àûÂ…ð£ð£ð£ð£Ò…"À†À‚ÀƒÀ„À…ÀàÀÐÀÀÀÀÀÀÀÀ¯åªT p@‡xƒæøt3Ò‡øå°ð£å ð£åð£tð£x‚æù¹Ùû‡æ˜tÚx‚æ##$æ™ÚåªTpðØæ‘tÚÚå‘Âäõ‘æ]tðÒ¯ÐÐÐÐÐÐÐÐÐÐÐàЅЄЃЂІ2æt€ÚætÚætÚ"æt€ÚætÚætÚ"‡҅tÀÂ…þÒ…à£øt3à£øt3à£øt3à£xƒöøt3à£øt3à£øt3"À†À‚ÀƒÀ„À…ÀàÀÐÀÀÀÀÀÀÀÀ¯ç€àx€ö##s€+€<€B€Q€€€€€ã€`Õ€[ç³€Mçà£x‚ö³š€:çØ€2çà£õ³à£õ´à£õµ€!çà£õ³à£õ´à£õµà£õà£õ à£õ°ætÚÚÚå‘Âäõ‘æ_tðÒ¯ÐÐÐÐÐÐÐÐÐÐÐàЅЄЃЂІ2à£øà£ûà£æØö"Ty#ÙýDúëTðyÙýJ†þëTy#ÙýTðþÒ†"æ˜tÚæ™tÚ"üäðüx€æð0#s€6€4€2€€€,€*üÒ‡¹Â‡€üåð£å ð£å°ðæœtÚætÚ"À†À‚ÀƒÀ„À…ÀàÀÐÀÀÀÀÀÀÀÀå‘Âäõ‘æ_t€ðÐÐÐÐÐÐÐÐÐÐÐàЅЄЃЂІ2ÃÃÃÃÃÃÿÿÿÿÿÿÿÿxtöæt Ú"æt¢Ú…ÿ³æt ðæt€Út„ÚtÚæ•tÚÚæõtÿÚå»T€`úæÃt€ÚæÂtðÚtæÚÚtæÛÚtÿæÎÚtÿæÏÚtÿæÐÚtÿæÑÚtæóÚtæÁÚætÚæÀtðÐçàµzð£ÚüuäÐužÐµu¯Ðz à£À‚ÀƒÀ„À…æ|ðÐЅЄЃЂÚåæIt„ÚÚxtö""ðÐ"€@À  `àPÐ0°pðˆHÈ(¨hè˜XØ8¸xø„DÄ$¤dä”TÔ4´tô ŒLÌ,¬lìœ\Ü<¼|ü‚BÂ"¢bâ’RÒ2²rò ŠJÊ*ªjêšZÚ:ºzú†FÆ&¦fæ–VÖ6¶vöŽNÎ.®nîž^Þ>¾~þAÁ!¡aá‘QÑ1±qñ ‰IÉ)©ié™YÙ9¹yù…EÅ%¥eå•UÕ5µuõ MÍ-­mí]Ý=½}ýƒCÃ#£cã“SÓ3³só ‹KË+«kë›[Û;»{û‡GÇ'§gç—W×7·w÷OÏ/¯oïŸ_ß?¿ÿcomedilib-0.11.0/etc/hotplug/usb/usbduxsigma/usbduxsigma_firmware.hex0000644000000000000000000001142212416542105022725 00000000000000:030000000201A258 :03004300020100B7 :1001000002017F000202D70002017F0002017F008E :1001100002017F0002017F0002017F0002017F00D7 :1001200002017F0002017F0002017F000203F5004F :1001300002017F0002017F0002017F0002056700CB :1001400002017F0002017F0002017F0002017F00A7 :1001500002017F0002017F0002017F0002017F0097 :1001600002017F0002017F0002017F0002017F0087 :1001700002017F0002017F0002017F0002017FC0B7 :1001800086C082C083C084C085C0E0C0D0E591C273 :10019000E4F591D0D0D0E0D085D084D083D082D087 :1001A000863290E60074101206D890E60B740312A3 :1001B00006D875B80075F8FF90E66874081206D87E :1001C00090E67174001206D81201E012024F007816 :1001D00081E660FAE5BB548060F47401F5BB80EE03 :1001E0007882760075B2E075806090E60174A012A6 :1001F00006D875981390E67274081206D822058600 :10020000901F0093C299F599E59830E1FB0586228D :100210000586C285C298E59830E0FBE599901F00FD :1002200093058622540F4440C2851201FE1202102B :10023000D28522C0E0540F4460C2851201FEE8124C :1002400001FED285D0E012022488F0B5F0E52290BC :10025000E6047480F07402F07404F07406F074081C :10026000F07400F090E6127492F090E6187400F0CA :1002700090E6917400F01206CEF01206CEF012064F :10028000CE90E61074A0F090E68D7400F01206CEC9 :10029000F01206CE90E61474D2F090E61574E0F0F9 :1002A00090E65E7488F090E65F7488F090E65C7487 :1002B00002F075E80175A88022E58020E0FBC28588 :1002C000120210F0A3120210F0A3120210F0A312F7 :1002D0000210F0A3D28522C086C082C083C084C031 :1002E00085C0E0C0D0C000C001C002C003C004C0CF :1002F00005C006C007C2AFE5AA5420703EC2877889 :1003000083E6F87404120233D28790F800E5B0F067 :10031000A3E5A0F0A3E590F0A37400F0A37882E633 :10032000F81202B9D8FBC28790E69874001206D87A :100330007882E6232390E6991206D8E5AA54017044 :100340001190F0001204D690E69174001206D812B3 :1003500006D8E591C2E4F59190E65D7402F0D2AF63 :10036000D007D006D005D004D003D002D001D000F1 :10037000D0D0D0E0D085D084D083D082D0863290C7 :10038000E60474801206D890E60474081206D89029 :10039000E60474001206D82290E60474801206D88F :1003A00090E60474061206D890E60474001206D88B :1003B00022C287D28500000074C0C2851201FED21D :1003C00085E0A3F87400120233E0A3F8740112026E :1003D00033E0A3F87403120233E0A37883F6F874D1 :1003E00004120233E0A3F87405120233E0A3F87498 :1003F0000612023322C086C082C083C084C085C07A :10040000E0C0D0C000C001C002C003C004C005C02D :1004100006C007C2AF90E780E07880F69004212301 :1004200073802B803C804280518015800680048040 :1004300005800802049B1205E180601205D3805BF1 :1004400090E7811203B112037F12051D804D90E7E2 :1004500081E0A37882F61203B112039812050C8092 :100460003A90E7811204D6803290E781E0A3F5B399 :10047000E0A3F5B4E0A3F5B5802190E781E0A3F512 :10048000B3E0A3F5B4E0A3F5B5A3E0F590E0A3F5E0 :10049000A0E0A3F5B012037F12051D90E68D740055 :1004A0001206D81206D81206D8E591C2E4F591904A :1004B000E65F7408F0D2AFD007D006D005D004D0E4 :1004C00003D002D001D000D0D0D0E0D085D084D0ED :1004D00083D082D08632E0A3F8E0A3FBE0A312042D :1004E000E4D8F6225403790623D9FD4410FAEB54DC :1004F000F0790403D9FD4AC2861201FEEB540F794C :100500000423D9FD54F01201FED2862290E698749D :10051000001206D890E69974011206D82290FC01C8 :10052000E4F090FC007880E6F090052E237380368E :100530008034803280128004802C802A90FC01D28A :10054000871202B9C287800E90FC01E590F0A3E506 :10055000A0F0A3E5B0F090E69C74001206D890E6F7 :100560009D74101206D822C086C082C083C084C089 :1005700085C0E0C0D0C000C001C002C003C004C03C :1005800005C006C00712051DE591C2E4F59190E68D :100590005F7480F0D007D006D005D004D003D0021D :1005A000D001D000D0D0D0E0D085D084D083D0820C :1005B000D08632C3C3C3C3C3C30101020602020211 :1005C000020202FFFFFFFFFFFFFFFF00000000002D :1005D00000000078817400F690E60174A01206D83D :1005E0002290E60174A21206D885FFB390E6137438 :1005F000A0F090E60474801206D874841206D874B1 :10060000001206D890E69574001206D81206D8900B :10061000E6F574FF1206D8E5BB548060FA90E6C395 :1006200074801206D890E6C274F01206D874019055 :10063000E6DA1206D8740190E6DB1206D874FF9051 :10064000E6CE1206D874FF90E6CF1206D874FF905B :10065000E6D01206D874FF90E6D11206D874009046 :10066000E6F31206D8740190E6C11206D890E61996 :1006700074101206D890E6C07400F01206CE90E70F :1006800081E09005B37A06F0A3DAFC759DE41206CA :10069000CE759E001206CE9005B375AF071206CE3A :1006A0007A20E0A3C082C083C084C08590E67CF03D :1006B0001206CED085D084D083D082DAE590E64988 :1006C00074841206D81206D878817401F6220000CC :0D06D0000000000000000022F01206CE2203 :101F0000008040C020A060E0109050D030B070F051 :101F1000088848C828A868E8189858D838B878F8C1 :101F2000048444C424A464E4149454D434B474F4F1 :101F30000C8C4CCC2CAC6CEC1C9C5CDC3CBC7CFC61 :101F4000028242C222A262E2129252D232B272F2F1 :101F50000A8A4ACA2AAA6AEA1A9A5ADA3ABA7AFA61 :101F6000068646C626A666E6169656D636B676F691 :101F70000E8E4ECE2EAE6EEE1E9E5EDE3EBE7EFE01 :101F8000018141C121A161E1119151D131B171F1C1 :101F9000098949C929A969E9199959D939B979F931 :101FA000058545C525A565E5159555D535B575F561 :101FB0000D8D4DCD2DAD6DED1D9D5DDD3DBD7DFDD1 :101FC000038343C323A363E3139353D333B373F361 :101FD0000B8B4BCB2BAB6BEB1B9B5BDB3BBB7BFBD1 :101FE000078747C727A767E7179757D737B777F701 :101FF0000F8F4FCF2FAF6FEF1F9F5FDF3FBF7FFF71 :00000001FF comedilib-0.11.0/etc/hotplug/usb/usbduxsigma/usbduxsigma0000755000000000000000000000206712416542105020256 00000000000000#!/bin/sh # # hotplug script for USBDUXsigma. Mon Apr 23 13:38:43 GMT 2012 # Bernd.Porr@gla.ac.uk # # # #look for comedi config COMEDI_CONFIG= # if [ -e /usr/local/sbin/comedi_config ]; then COMEDI_CONFIG=/usr/local/sbin/comedi_config fi if [ -e /usr/sbin/comedi_config ]; then COMEDI_CONFIG=/usr/sbin/comedi_config fi if [ -e /sbin/comedi_config ]; then COMEDI_CONFIG=/sbin/comedi_config fi # # #look for the firmware USBDUX_FIRMWARE= if [ -e /usr/share/usb/usbduxsigma_firmware.hex ]; then USBDUX_FIRMWARE=/usr/share/usb/usbduxsigma_firmware.hex fi if [ -e /usr/local/share/usb/usbduxsigma_firmware.hex ]; then USBDUX_FIRMWARE=/usr/local/share/usb/usbduxsigma_firmware.hex fi # # # If you have more than one device please add/uncomment # # just to make sure we remove the comedi device $COMEDI_CONFIG -r /dev/comedi0 # $COMEDI_CONFIG -r /dev/comedi1 # # connecting the comedi device comedi0 with the module usbdux $COMEDI_CONFIG -i $USBDUX_FIRMWARE /dev/comedi0 usbduxsigma # $COMEDI_CONFIG -i $USBDUX_FIRMWARE /dev/comedi1 usbduxsigma # # comedilib-0.11.0/etc/dt282x.conf0000755000000000000000000000454012416542105013072 00000000000000#!/bin/sh # Configuration for dt282x driver # ds ### Device file DEVICE=/dev/comedi0 ### Type of board ### Choose one BOARD=dt2821 # also for -f-16se, -g-16se, etc. #BOARD=dt2823 #BOARD=dt2824-pgh #BOARD=dt2824-pgl #BOARD=dt2825 #BOARD=dt2827 #BOARD=dt2828 #BOARD=dt21-ez #BOARD=dt23-ez #BOARD=dt24-ez #BOARD=dt24-ez-pgl ### Option 0: Board base address ### Depends on jumper settings IOBASE=0x240 ### Option 1: IRQ ### Depends on jumper settings ### Choose one #IRQ=0 # don't use interrupts #IRQ=3 #IRQ=5 IRQ=7 #IRQ=10 #IRQ=15 ### Option 2: first DMA channel ### Depends on jumper settings ### Choose one DMA1=0 # don't use DMA #DMA1=5 #DMA1=6 ### Option 3: second DMA channel ### Depends on jumper settings ### Choose one DMA2=0 # don't use secondary DMA #DMA2=6 #DMA2=7 ### Option 4: Analog Input reference ### Depends on jumper settings or type of board ### Choose one AI_REF=0 # differential #AI_REF=1 # single ended ### Option 5: Analog Input encoding ### Depends on jumper settings ### Choose one AI_ENCODE=0 # straight binary #AI_ENCODE=1 # two's complement ### Option 6: Analog Output 0 encoding ### Depends on jumper settings ### Choose one A00_ENCODE=0 # straight binary #AO0_ENCODE=1 # two's complement ### Option 7: Analog Output 1 encoding ### Depends on jumper settings ### Choose one AO1_ENCODE=0 # straight binary #AO1_ENCODE=1 # two's complement ### Option 8: Analog Input Range ### Depends on jumper settings ### Choose one #AI_RANGE=0 # bipolar +/- 10 V #AI_RANGE=1 # unipolar 0-10 V #AI_RANGE=2 # bipolar +/- 5 V #AI_RANGE=3 # unipolar 0-5 V ### Option 9: Analog Output 0 Range ### Depends on jumper settings ### Choose one #AO0_RANGE=0 # bipolar +/- 10 V #AO0_RANGE=1 # unipolar 0-10 V #AO0_RANGE=2 # bipolar +/- 5 V #AO0_RANGE=3 # unipolar 0-5 V #AO0_RANGE=4 # bipolar +/- 2.5 V ### Option 10: Analog Output 1 Range ### Depends on jumper settings ### Choose one #AO1_RANGE=0 # bipolar +/- 10 V #AO1_RANGE=1 # unipolar 0-10 V #AO1_RANGE=2 # bipolar +/- 5 V #AO1_RANGE=3 # unipolar 0-5 V #AO1_RANGE=4 # bipolar +/- 2.5 V #----------------------------------------------------------- # End of Configuration #----------------------------------------------------------- /usr/sbin/comedi_config $DEVICE $BOARD $IOBASE,$IRQ,$DMA1,$DMA2,$AI_REF,$AI_ENCODE,$AO0_ENCODE,$AO1_ENCODE,$AI_REF,$AO0_REF,$AI1_REF comedilib-0.11.0/etc/Makefile.in0000644000000000000000000005316613140064520013235 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = etc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/am-check-python-headers.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/as-libtool.m4 $(top_srcdir)/m4/ax_tls.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(docdir)" DATA = $(doc_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COMEDILIB_AGE = @COMEDILIB_AGE@ COMEDILIB_CFLAGS = @COMEDILIB_CFLAGS@ COMEDILIB_CURRENT = @COMEDILIB_CURRENT@ COMEDILIB_LIBS = @COMEDILIB_LIBS@ COMEDILIB_LIBVERSION = @COMEDILIB_LIBVERSION@ COMEDILIB_LT_LDFLAGS = @COMEDILIB_LT_LDFLAGS@ COMEDILIB_REVISION = @COMEDILIB_REVISION@ COMEDILIB_VERSION_MAJOR = @COMEDILIB_VERSION_MAJOR@ COMEDILIB_VERSION_MICRO = @COMEDILIB_VERSION_MICRO@ COMEDILIB_VERSION_MINOR = @COMEDILIB_VERSION_MINOR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_BACKEND = @PDF_BACKEND@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_QUIET = @PYTHON_QUIET@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_CONFIG_OPTIONS = @RUBY_CONFIG_OPTIONS@ RUBY_PREFIX = @RUBY_PREFIX@ RUBY_SO_DIR = @RUBY_SO_DIR@ SCXI_SO_VERSION = @SCXI_SO_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ VERSION = @VERSION@ XMLTO = @XMLTO@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pcmciadir = @pcmciadir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ udevfirmwaredir = @udevfirmwaredir@ udevrulesdir = @udevrulesdir@ udevscriptsdir = @udevscriptsdir@ SUBDIRS = pcmcia hotplug udev doc_DATA = das1600.conf dt282x.conf modules.conf EXTRA_DIST = das1600.conf dt282x.conf modules.conf all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu etc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu etc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-docDATA: $(doc_DATA) @$(NORMAL_INSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done uninstall-docDATA: @$(NORMAL_UNINSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(docdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-docDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-docDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-docDATA install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-docDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: comedilib-0.11.0/etc/modules.conf0000644000000000000000000000066012416542105013503 00000000000000 # # add these lines to /etc/modules.conf # alias char-major-98 comedi alias char-major-98-0 your_driver post-install your_driver /usr/sbin/comedi_config /dev/comedi0 your_driver options # # If you use the dt282x driver, it's convenient to install the dt282x.conf # script and use that to configure the driver. Remember to edit the # file for your system. # #alias char-major-98-0 dt282x #post-install dt282x /etc/dt282x.conf comedilib-0.11.0/etc/das1600.conf0000755000000000000000000000335512416542105013120 00000000000000#!/bin/sh # Configuration for das1600 driver # Thomas Henkel and ds ### Device file DEVICE=/dev/comedi0 ### Type of board ### Choose one BOARD=das1601/12 #BOARD=das1602/12 #BOARD=das1602/16 ### Option 0: Board base address ### Depends on jumper settings IO_BASE=0x320 ### Option 1: IRQ ### Choose one #IRQ=0 # don't use interrupts #IRQ=3 #IRQ=4 #IRQ=5 #IRQ=6 IRQ=7 #IRQ=9 ### Option 2: DMA channel ### Depends on jumper settings ### Choose one DMA=0 # don't use DMA #DMA=1 #DMA=2 #DMA=3 ### Option 3: Crystal selection ### Depends on jumper settings ### Choose one CRYSTAL=0 # 10 Mhz #CRYSTAL=1 # 1 Mhz ### Option 4: Analog Input reference ### Depends on jumper settings ### Choose one A_INP_TYPE=0 # differential #A_INP_TYPE=1 # single ended ### Option 5: Analog Input range ### Depends on jumper settings ### Choose one #A_INP_RANGE=0 # bipolar (-10 V -- +10 V) #A_INP_RANGE=1 # unipolar (0 V -- +10 V) ### Option 6: Analog Output 0 Range ### Depends on jumper settings ### Choose one #A_OUT_0=0 # bipolar +/- 10 V #A_OUT_0=1 # bipolar +/- 5 V #A_OUT_0=2 # bipolar external reference #A_OUT_0=3 # unipolar 0-10 V #A_OUT_0=4 # unipolar 0-5 V #A_OUT_0=5 # unipolar external reference ### Option 7: Analog Output 1 Range ### Depends on jumper settings ### Choose one #A_OUT_1=0 # bipolar +/- 10 V #A_OUT_1=1 # bipolar +/- 5 V #A_OUT_1=2 # bipolar external reference #A_OUT_1=3 # unipolar 0-10 V #A_OUT_1=4 # unipolar 0-5 V #A_OUT_1=5 # unipolar external reference #----------------------------------------------------------- # End of Configuration #----------------------------------------------------------- /usr/sbin/comedi_config $DEVICE $BOARD $IO_BASE,$IRQ,$DMA,$CRYSTAL,$A_INP_TYPE,$A_INP_RANGE,$A_OUT_0,$A_OUT_1 comedilib-0.11.0/etc/pcmcia/0000755000000000000000000000000013162722664012507 500000000000000comedilib-0.11.0/etc/pcmcia/Makefile.am0000644000000000000000000000015612416542105014454 00000000000000 pcmcia_SCRIPTS = comedi pcmcia_DATA = comedi.conf comedi.opts EXTRA_DIST = comedi.conf comedi.opts comedi comedilib-0.11.0/etc/pcmcia/comedi.conf0000644000000000000000000000330012416542105014521 00000000000000 device "ni_mio_cs" class "comedi" module "ni_mio_cs" device "quatech_daqp_cs" class "comedi" module "quatech_daqp_cs" device "pcm-das08" class "comedi" module "das08_cs" device "daqcard-1200" class "comedi" module "ni_labpc_cs" device "ni_daq_dio24" class "comedi" module "ni_daq_dio24" device "ni_dio_cs" class "comedi" module "ni_dio_cs" device "cb_das16_cs" class "comedi" module "cb_das16_cs" card "National Instruments DAQCard-AI-16XE-50" # version "National Instruments", "*", "DAQCard-AI-16XE-50" manfid 0x10b, 0x010d bind "ni_mio_cs" card "National Instruments DAQCard-AI-16E-4" ## version "National Instruments", "*", "DAQCard-AI-16E-4" manfid 0x10b, 0x010c bind "ni_mio_cs" card "National Instruments DAQCard-6062E" # version "National Instruments", "*", "DAQCard-6062E" manfid 0x10b, 0x02c4 bind "ni_mio_cs" card "National Instruments DAQCard-6024E" # version "National Instruments", "*", "DAQCard-6024E" manfid 0x10b, 0x075e bind "ni_mio_cs" card "National Instruments DAQCard-6036E" manfid 0x10b, 0x0245 bind "ni_mio_cs" card "National Instruments DAQ-Card DIO-24" #card "National Instruments DAQCard-DIO-24" manfid 0x10b, 0x470c bind "ni_dio_cs" card "Quatech DAQP-308 16-bit Analog Input/Output" manfid 0x0137, 0x0027 bind "quatech_daqp_cs" card "Measurement Computing pcm-das08" manfid 0x01c5, 0x4001 bind "pcm-das08" card "ComputerBoards, Inc. PC-CARD-DAS16/16-AO" #manfid 0x01c5, 0x0039 version "ComputerBoards, Inc.", "PC-CARD-DAS16/16-AO" bind "cb_das16_cs" card "National Instruments DAQCard-1200" manfid 0x10b, 0x103 bind "daqcard-1200" card "National Instruments DAQ-Card DIO-24" manfid 0x010b, 0x475c bind "ni_daq_dio24" comedilib-0.11.0/etc/pcmcia/Makefile.in0000644000000000000000000004205413140064520014463 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = etc/pcmcia ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/am-check-python-headers.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/as-libtool.m4 $(top_srcdir)/m4/ax_tls.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pcmciadir)" "$(DESTDIR)$(pcmciadir)" SCRIPTS = $(pcmcia_SCRIPTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(pcmcia_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COMEDILIB_AGE = @COMEDILIB_AGE@ COMEDILIB_CFLAGS = @COMEDILIB_CFLAGS@ COMEDILIB_CURRENT = @COMEDILIB_CURRENT@ COMEDILIB_LIBS = @COMEDILIB_LIBS@ COMEDILIB_LIBVERSION = @COMEDILIB_LIBVERSION@ COMEDILIB_LT_LDFLAGS = @COMEDILIB_LT_LDFLAGS@ COMEDILIB_REVISION = @COMEDILIB_REVISION@ COMEDILIB_VERSION_MAJOR = @COMEDILIB_VERSION_MAJOR@ COMEDILIB_VERSION_MICRO = @COMEDILIB_VERSION_MICRO@ COMEDILIB_VERSION_MINOR = @COMEDILIB_VERSION_MINOR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_BACKEND = @PDF_BACKEND@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_QUIET = @PYTHON_QUIET@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_CONFIG_OPTIONS = @RUBY_CONFIG_OPTIONS@ RUBY_PREFIX = @RUBY_PREFIX@ RUBY_SO_DIR = @RUBY_SO_DIR@ SCXI_SO_VERSION = @SCXI_SO_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ VERSION = @VERSION@ XMLTO = @XMLTO@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pcmciadir = @pcmciadir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ udevfirmwaredir = @udevfirmwaredir@ udevrulesdir = @udevrulesdir@ udevscriptsdir = @udevscriptsdir@ pcmcia_SCRIPTS = comedi pcmcia_DATA = comedi.conf comedi.opts EXTRA_DIST = comedi.conf comedi.opts comedi all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu etc/pcmcia/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu etc/pcmcia/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-pcmciaSCRIPTS: $(pcmcia_SCRIPTS) @$(NORMAL_INSTALL) @list='$(pcmcia_SCRIPTS)'; test -n "$(pcmciadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pcmciadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pcmciadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(pcmciadir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(pcmciadir)$$dir" || exit $$?; \ } \ ; done uninstall-pcmciaSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(pcmcia_SCRIPTS)'; test -n "$(pcmciadir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(pcmciadir)'; $(am__uninstall_files_from_dir) mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pcmciaDATA: $(pcmcia_DATA) @$(NORMAL_INSTALL) @list='$(pcmcia_DATA)'; test -n "$(pcmciadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pcmciadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pcmciadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pcmciadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pcmciadir)" || exit $$?; \ done uninstall-pcmciaDATA: @$(NORMAL_UNINSTALL) @list='$(pcmcia_DATA)'; test -n "$(pcmciadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pcmciadir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(SCRIPTS) $(DATA) installdirs: for dir in "$(DESTDIR)$(pcmciadir)" "$(DESTDIR)$(pcmciadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pcmciaDATA install-pcmciaSCRIPTS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pcmciaDATA uninstall-pcmciaSCRIPTS .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pcmciaDATA install-pcmciaSCRIPTS install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-pcmciaDATA uninstall-pcmciaSCRIPTS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: comedilib-0.11.0/etc/pcmcia/comedi.opts0000644000000000000000000000000212416542105014555 00000000000000 comedilib-0.11.0/etc/pcmcia/comedi0000755000000000000000000000106012416542105013601 00000000000000#! /bin/sh if [ -r ./shared ] ; then . ./shared ; else . /etc/pcmcia/shared ; fi # Get device attributes get_info $DEVICE # Load site-specific settings start_fn () { return; } stop_fn () { return; } . $0.opts case "$ACTION" in 'start') #echo /usr/sbin/comedi_config /dev/comedi0 $2 PATH=/sbin:/usr/sbin:/usr/local/sbin:$PATH; comedi_config /dev/comedi0 $2 start_fn $DEVICE ;; 'stop') stop_fn $DEVICE ;; 'check') ;; 'cksum') ;; 'restart') ;; 'suspend'|'resume') ;; *) usage ;; esac exit 0 comedilib-0.11.0/etc/udev/0000755000000000000000000000000013162722665012217 500000000000000comedilib-0.11.0/etc/udev/Makefile.am0000644000000000000000000000027012416542105014160 00000000000000EXTRA_DIST = 90-comedi.rules z99_comedi.rules if INSTALL_UDEVHOTPLUG udevrules_DATA = 90-comedi.rules udevscripts_SCRIPTS = else udevrules_SCRIPTS = udevscripts_SCRIPTS = endif comedilib-0.11.0/etc/udev/z99_comedi.rules0000644000000000000000000000317312416542105015160 00000000000000#This file provides some example udev rules which may be helpful for comedi. #It includes rules for creating symlinks to the device file with #persistent names in /dev/comedi/by-path/, setting permissions and #group ownership on the comedi device files, and examples showing #adjustment of a device file's buffer size. SUBSYSTEM!="comedi", GOTO="comedi_end" ACTION!="add", GOTO="comedi_add_end" #create symlink with persistent name based on hardware path KERNEL=="comedi[0-9]*", KERNEL!="comedi[0-9]*_subd[0-9]*", SUBSYSTEMS=="pci", SYMLINK+="comedi/by-path/pci-$id" #persistent subdevice symlinks KERNEL=="comedi[0-9]*subd[0-9]*", SUBSYSTEMS=="pci", SYMLINK+="comedi/by-path/pci-$id_subd%n" #The following line would automatically run comedi_config on main device file #to adjust the read buffer size for a specific board at pci path #0000:07:0d.0 (bus 0x7, slot 0xd). #KERNEL=="comedi[0-9]*", KERNEL!="comedi[0-9]*_subd[0-9]*", SUBSYSTEMS=="pci", KERNELS=="0000:07:0d.0", RUN+="/usr/local/sbin/comedi_config $tempnode --read-buffer 1024" #Here we do the same, except we are matching by pci vendor/device id instead of bus/slot #KERNEL=="comedi[0-9]*", KERNEL!="comedi[0-9]*_subd[0-9]*", SUBSYSTEMS=="pci", ATTRS{vendor}=="0x1093", ATTRS{device}=="0x70bf", RUN+="/usr/local/sbin/comedi_config $tempnode --read-buffer 1024" # wide open device file permissions KERNEL=="comedi[0-9]*", MODE="0666" # device files restricted to the "comedi" group #KERNEL=="comedi[0-9]*", MODE="0660", GROUP="comedi" # device files restricted to the "iocard" group #KERNEL=="comedi[0-9]*", MODE="0660", GROUP="iocard" LABEL="comedi_add_end" LABEL="comedi_end" comedilib-0.11.0/etc/udev/Makefile.in0000644000000000000000000004575713140064520014207 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = etc/udev ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/am-check-python-headers.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/as-libtool.m4 $(top_srcdir)/m4/ax_tls.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(udevrulesdir)" \ "$(DESTDIR)$(udevscriptsdir)" "$(DESTDIR)$(udevrulesdir)" SCRIPTS = $(udevrules_SCRIPTS) $(udevscripts_SCRIPTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(udevrules_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COMEDILIB_AGE = @COMEDILIB_AGE@ COMEDILIB_CFLAGS = @COMEDILIB_CFLAGS@ COMEDILIB_CURRENT = @COMEDILIB_CURRENT@ COMEDILIB_LIBS = @COMEDILIB_LIBS@ COMEDILIB_LIBVERSION = @COMEDILIB_LIBVERSION@ COMEDILIB_LT_LDFLAGS = @COMEDILIB_LT_LDFLAGS@ COMEDILIB_REVISION = @COMEDILIB_REVISION@ COMEDILIB_VERSION_MAJOR = @COMEDILIB_VERSION_MAJOR@ COMEDILIB_VERSION_MICRO = @COMEDILIB_VERSION_MICRO@ COMEDILIB_VERSION_MINOR = @COMEDILIB_VERSION_MINOR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_BACKEND = @PDF_BACKEND@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_QUIET = @PYTHON_QUIET@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_CONFIG_OPTIONS = @RUBY_CONFIG_OPTIONS@ RUBY_PREFIX = @RUBY_PREFIX@ RUBY_SO_DIR = @RUBY_SO_DIR@ SCXI_SO_VERSION = @SCXI_SO_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ VERSION = @VERSION@ XMLTO = @XMLTO@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pcmciadir = @pcmciadir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ udevfirmwaredir = @udevfirmwaredir@ udevrulesdir = @udevrulesdir@ udevscriptsdir = @udevscriptsdir@ EXTRA_DIST = 90-comedi.rules z99_comedi.rules @INSTALL_UDEVHOTPLUG_TRUE@udevrules_DATA = 90-comedi.rules @INSTALL_UDEVHOTPLUG_FALSE@udevscripts_SCRIPTS = @INSTALL_UDEVHOTPLUG_TRUE@udevscripts_SCRIPTS = @INSTALL_UDEVHOTPLUG_FALSE@udevrules_SCRIPTS = all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu etc/udev/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu etc/udev/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-udevrulesSCRIPTS: $(udevrules_SCRIPTS) @$(NORMAL_INSTALL) @list='$(udevrules_SCRIPTS)'; test -n "$(udevrulesdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(udevrulesdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(udevrulesdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(udevrulesdir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(udevrulesdir)$$dir" || exit $$?; \ } \ ; done uninstall-udevrulesSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(udevrules_SCRIPTS)'; test -n "$(udevrulesdir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(udevrulesdir)'; $(am__uninstall_files_from_dir) install-udevscriptsSCRIPTS: $(udevscripts_SCRIPTS) @$(NORMAL_INSTALL) @list='$(udevscripts_SCRIPTS)'; test -n "$(udevscriptsdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(udevscriptsdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(udevscriptsdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(udevscriptsdir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(udevscriptsdir)$$dir" || exit $$?; \ } \ ; done uninstall-udevscriptsSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(udevscripts_SCRIPTS)'; test -n "$(udevscriptsdir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(udevscriptsdir)'; $(am__uninstall_files_from_dir) mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-udevrulesDATA: $(udevrules_DATA) @$(NORMAL_INSTALL) @list='$(udevrules_DATA)'; test -n "$(udevrulesdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(udevrulesdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(udevrulesdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(udevrulesdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(udevrulesdir)" || exit $$?; \ done uninstall-udevrulesDATA: @$(NORMAL_UNINSTALL) @list='$(udevrules_DATA)'; test -n "$(udevrulesdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(udevrulesdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(SCRIPTS) $(DATA) installdirs: for dir in "$(DESTDIR)$(udevrulesdir)" "$(DESTDIR)$(udevscriptsdir)" "$(DESTDIR)$(udevrulesdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-udevrulesDATA install-udevrulesSCRIPTS \ install-udevscriptsSCRIPTS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-udevrulesDATA uninstall-udevrulesSCRIPTS \ uninstall-udevscriptsSCRIPTS .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip install-udevrulesDATA install-udevrulesSCRIPTS \ install-udevscriptsSCRIPTS installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am \ uninstall-udevrulesDATA uninstall-udevrulesSCRIPTS \ uninstall-udevscriptsSCRIPTS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: comedilib-0.11.0/etc/udev/90-comedi.rules0000644000000000000000000000004412416542105014665 00000000000000KERNEL=="comedi[0-9]*", MODE="0666" comedilib-0.11.0/comedi_board_info/0000755000000000000000000000000013162722663014121 500000000000000comedilib-0.11.0/comedi_board_info/Makefile.am0000644000000000000000000000025512416542105016067 00000000000000bin_PROGRAMS = comedi_board_info comedi_board_info_SOURCES = comedi_board_info.c comedi_board_info_CFLAGS = $(COMEDILIB_CFLAGS) comedi_board_info_LDADD = $(COMEDILIB_LIBS) comedilib-0.11.0/comedi_board_info/Makefile.in0000644000000000000000000005607713140064520016110 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ bin_PROGRAMS = comedi_board_info$(EXEEXT) subdir = comedi_board_info ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/am-check-python-headers.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/as-libtool.m4 $(top_srcdir)/m4/ax_tls.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_comedi_board_info_OBJECTS = \ comedi_board_info-comedi_board_info.$(OBJEXT) comedi_board_info_OBJECTS = $(am_comedi_board_info_OBJECTS) am__DEPENDENCIES_1 = comedi_board_info_DEPENDENCIES = $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = comedi_board_info_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(comedi_board_info_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(comedi_board_info_SOURCES) DIST_SOURCES = $(comedi_board_info_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COMEDILIB_AGE = @COMEDILIB_AGE@ COMEDILIB_CFLAGS = @COMEDILIB_CFLAGS@ COMEDILIB_CURRENT = @COMEDILIB_CURRENT@ COMEDILIB_LIBS = @COMEDILIB_LIBS@ COMEDILIB_LIBVERSION = @COMEDILIB_LIBVERSION@ COMEDILIB_LT_LDFLAGS = @COMEDILIB_LT_LDFLAGS@ COMEDILIB_REVISION = @COMEDILIB_REVISION@ COMEDILIB_VERSION_MAJOR = @COMEDILIB_VERSION_MAJOR@ COMEDILIB_VERSION_MICRO = @COMEDILIB_VERSION_MICRO@ COMEDILIB_VERSION_MINOR = @COMEDILIB_VERSION_MINOR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_BACKEND = @PDF_BACKEND@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_QUIET = @PYTHON_QUIET@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_CONFIG_OPTIONS = @RUBY_CONFIG_OPTIONS@ RUBY_PREFIX = @RUBY_PREFIX@ RUBY_SO_DIR = @RUBY_SO_DIR@ SCXI_SO_VERSION = @SCXI_SO_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ VERSION = @VERSION@ XMLTO = @XMLTO@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pcmciadir = @pcmciadir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ udevfirmwaredir = @udevfirmwaredir@ udevrulesdir = @udevrulesdir@ udevscriptsdir = @udevscriptsdir@ comedi_board_info_SOURCES = comedi_board_info.c comedi_board_info_CFLAGS = $(COMEDILIB_CFLAGS) comedi_board_info_LDADD = $(COMEDILIB_LIBS) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu comedi_board_info/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu comedi_board_info/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list comedi_board_info$(EXEEXT): $(comedi_board_info_OBJECTS) $(comedi_board_info_DEPENDENCIES) $(EXTRA_comedi_board_info_DEPENDENCIES) @rm -f comedi_board_info$(EXEEXT) $(AM_V_CCLD)$(comedi_board_info_LINK) $(comedi_board_info_OBJECTS) $(comedi_board_info_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comedi_board_info-comedi_board_info.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< comedi_board_info-comedi_board_info.o: comedi_board_info.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_board_info_CFLAGS) $(CFLAGS) -MT comedi_board_info-comedi_board_info.o -MD -MP -MF $(DEPDIR)/comedi_board_info-comedi_board_info.Tpo -c -o comedi_board_info-comedi_board_info.o `test -f 'comedi_board_info.c' || echo '$(srcdir)/'`comedi_board_info.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/comedi_board_info-comedi_board_info.Tpo $(DEPDIR)/comedi_board_info-comedi_board_info.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='comedi_board_info.c' object='comedi_board_info-comedi_board_info.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_board_info_CFLAGS) $(CFLAGS) -c -o comedi_board_info-comedi_board_info.o `test -f 'comedi_board_info.c' || echo '$(srcdir)/'`comedi_board_info.c comedi_board_info-comedi_board_info.obj: comedi_board_info.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_board_info_CFLAGS) $(CFLAGS) -MT comedi_board_info-comedi_board_info.obj -MD -MP -MF $(DEPDIR)/comedi_board_info-comedi_board_info.Tpo -c -o comedi_board_info-comedi_board_info.obj `if test -f 'comedi_board_info.c'; then $(CYGPATH_W) 'comedi_board_info.c'; else $(CYGPATH_W) '$(srcdir)/comedi_board_info.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/comedi_board_info-comedi_board_info.Tpo $(DEPDIR)/comedi_board_info-comedi_board_info.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='comedi_board_info.c' object='comedi_board_info-comedi_board_info.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(comedi_board_info_CFLAGS) $(CFLAGS) -c -o comedi_board_info-comedi_board_info.obj `if test -f 'comedi_board_info.c'; then $(CYGPATH_W) 'comedi_board_info.c'; else $(CYGPATH_W) '$(srcdir)/comedi_board_info.c'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: comedilib-0.11.0/comedi_board_info/comedi_board_info.c0000644000000000000000000002200012416542105017611 00000000000000/* This program reads information about a comedi device and displays the information in a human-readable form. */ #include #include #include #include #include #include #include static char * const default_filename = "/dev/comedi0"; int verbose = 0; static const char * const subdevice_types[]={ "unused", "analog input", "analog output", "digital input", "digital output", "digital I/O", "counter", "timer", "memory", "calibration", "processor", "serial digital I/O", "pwm" }; struct subdev_flag { const char *sdf_define; unsigned int bitmask; const char *description; }; static struct subdev_flag subdev_flags[] = { {"SDF_MAXDATA",0x0010,"maxdata depends on channel"}, {"SDF_FLAGS",0x0020,"flags depend on channel"}, {"SDF_RANGETYPE",0x0040,"range type depends on channel"}, {"SDF_MODE0",0x0080,"can do mode 0"}, {"SDF_MODE1",0x0100,"can do mode 1"}, {"SDF_MODE2",0x0200,"can do mode 2"}, {"SDF_MODE3",0x0400,"can do mode 3"}, {"SDF_MODE4",0x0800,"can do mode 4"}, {"SDF_SOFT_CALIBRATED",0x2000,"subdevice uses software calibration"}, {"SDF_CMD_WRITE",0x4000,"can do asynchronous output commands"}, {"SDF_CMD_READ",0x8000,"can do asynchronous input commands"}, {"SDF_READABLE",0x00010000,"subdevice can be read"}, {"SDF_WRITABLE",0x00020000,"subdevice can be written"}, {"SDF_INTERNAL",0x00040000,"subdevice does not have externally visible lines"}, {"SDF_GROUND",0x00100000,"can do aref=ground"}, {"SDF_COMMON",0x00200000,"can do aref=common"}, {"SDF_DIFF",0x00400000,"aref=diff"}, {"SDF_OTHER",0x00800000,"can do aref=other"}, {"SDF_DITHER",0x01000000,"can do dithering"}, {"SDF_DEGLITCH",0x02000000,"can do deglitching"}, {"SDF_MMAP",0x04000000,"can do mmap()"}, {"SDF_RUNNING",0x08000000,"subdevice is acquiring data"}, {"SDF_LSAMPL",0x10000000,"subdevice uses 32-bit samples for commands"}, {"SDF_PACKED",0x20000000,"subdevice can do packed DIO"}, {0,0,0}}; void explain_subdevice_flags(char* padding,unsigned int sf) { int i = 0; while (subdev_flags[i].sdf_define) { if (sf & subdev_flags[i].bitmask) printf("%s%s:%s\n", padding, subdev_flags[i].sdf_define, subdev_flags[i].description); i++; } } void unit_to_desc(char *udesc,int unit) { if ((unit & RF_EXTERNAL) != 0) strcpy(udesc, "*EXT"); else udesc[0] = '\0'; switch(RF_UNIT(unit)) { case UNIT_volt: strcat(udesc," V"); break; case UNIT_mA: strcat(udesc," mA"); break; case UNIT_none: strcat(udesc,""); break; default: sprintf(udesc + strlen(udesc)," (unknown unit %d)", unit); } } char *tobinary(char *s,int bits,int n) { int bit=1<>=1) *t++=(bits&bit)?'1':'0'; *t=0; return s; } char *cmd_src(int src,char *buf) { buf[0]=0; if(src&TRIG_NONE)strcat(buf,"none|"); if(src&TRIG_NOW)strcat(buf,"now|"); if(src&TRIG_FOLLOW)strcat(buf, "follow|"); if(src&TRIG_TIME)strcat(buf, "time|"); if(src&TRIG_TIMER)strcat(buf, "timer|"); if(src&TRIG_COUNT)strcat(buf, "count|"); if(src&TRIG_EXT)strcat(buf, "ext|"); if(src&TRIG_INT)strcat(buf, "int|"); #ifdef TRIG_OTHER if(src&TRIG_OTHER)strcat(buf, "other|"); #endif if(strlen(buf)==0){ sprintf(buf,"unknown(0x%08x)",src); }else{ buf[strlen(buf)-1]=0; } return buf; } void probe_cmd_generic_timed(comedi_t *it,int s,int n_channels,int freq_for_generic_timed) { comedi_cmd cmd; char buf[100]; printf(" command structure filled with probe_cmd_generic_timed for %d channels:\n", n_channels); if(comedi_get_cmd_generic_timed(it, s, &cmd, n_channels, 1E9/freq_for_generic_timed)<0){ printf(" not supported\n"); }else{ printf(" start: %s %d\n", cmd_src(cmd.start_src,buf),cmd.start_arg); printf(" scan_begin: %s %d\n", cmd_src(cmd.scan_begin_src,buf),cmd.scan_begin_arg); if (verbose) { if ((cmd.scan_begin_src == TRIG_TIMER)&&(cmd.scan_begin_arg)) { printf(" scan_begin_src = TRIG_TIMER:\n" " The sampling rate is defined per scan\n" " meaning all channels are sampled at\n" " the same time. The maximum sampling rate is f=%d Hz\n", (int)(1E9/cmd.scan_begin_arg));} } printf(" convert: %s %d\n", cmd_src(cmd.convert_src,buf),cmd.convert_arg); if (verbose) { if ((cmd.convert_src == TRIG_TIMER)&&(cmd.convert_arg)) { printf(" convert_src = TRIG_TIMER\n" " The sampling rate is defined per channel\n" " meaning that a multiplexer is being switched from\n" " channel to channel at a maximum rate of %d Hz.\n" " The overall sampling rate needs to be divided\n" " by the number of channels and results in f=%d Hz.\n", (int)(1E9/cmd.convert_arg), (int)(1E9/cmd.convert_arg/n_channels)); } } printf(" scan_end: %s %d\n", cmd_src(cmd.scan_end_src,buf),cmd.scan_end_arg); printf(" stop: %s %d\n", cmd_src(cmd.stop_src,buf),cmd.stop_arg); } } void get_command_stuff(comedi_t *it,int s,int n_chans_for_generic_timed,int freq_for_generic_timed) { comedi_cmd cmd; char buf[100]; if(comedi_get_cmd_src_mask(it,s,&cmd)<0){ printf(" not supported\n"); }else{ printf(" start: %s\n",cmd_src(cmd.start_src,buf)); if (cmd.start_src == TRIG_EXT) printf(" cmd.start_src allows external trigger (TRIG_EXT)," " for example from on input pin at the device.\n"); printf(" scan_begin: %s\n",cmd_src(cmd.scan_begin_src,buf)); printf(" convert: %s\n",cmd_src(cmd.convert_src,buf)); printf(" scan_end: %s\n",cmd_src(cmd.scan_end_src,buf)); printf(" stop: %s\n",cmd_src(cmd.stop_src,buf)); probe_cmd_generic_timed(it,s,n_chans_for_generic_timed,freq_for_generic_timed); } } int main(int argc,char *argv[]) { int i,j; int n_subdevices,type; const char *type_str; int chan,n_chans; int n_ranges; int subdev_flags; comedi_range *rng; comedi_t *it; char *filename = default_filename; char c; char strtmp[32]; int def_n_chans_for_generic_timed = 1; int n_chans_for_generic_timed; int freq_for_generic_timed = 1E9; while (-1 != (c = getopt(argc, argv, "hvn:F:"))) { switch (c) { case 'n': def_n_chans_for_generic_timed = strtoul(optarg, NULL, 0); break; case 'F': freq_for_generic_timed = strtoul(optarg, NULL, 0); break; case 'v': verbose++; break; case 'h': default: fprintf(stderr, "usage: comedi_board_info [OPTIONS] COMEDI_DEVICE\n" " -n number of channels for async command (default 1)\n" " -F probing sampling rate for async command (default 1Ghz)\n" " -v verbose output\n" " -h this help screen\n"); exit(1); } } if(optind < argc) { filename = argv[optind]; } it = comedi_open(filename); if(!it){ comedi_perror(filename); exit(1); } printf("overall info:\n"); printf(" version code: 0x%06x\n", comedi_get_version_code(it)); printf(" driver name: %s\n", comedi_get_driver_name(it)); printf(" board name: %s\n", comedi_get_board_name(it)); printf(" number of subdevices: %d\n", n_subdevices = comedi_get_n_subdevices(it)); for(i = 0; i < n_subdevices; i++){ printf("subdevice %d:\n",i); type = comedi_get_subdevice_type(it, i); if(type < (int)(sizeof(subdevice_types) / sizeof(subdevice_types[0]))){ type_str = subdevice_types[type]; }else{ type_str = "UNKNOWN"; } printf(" type: %d (%s)\n",type,type_str); if(type==COMEDI_SUBD_UNUSED) continue; subdev_flags = comedi_get_subdevice_flags(it, i); printf(" flags: 0x%08x\n",subdev_flags); if (verbose) explain_subdevice_flags(" ",subdev_flags); n_chans=comedi_get_n_channels(it,i); printf(" number of channels: %d\n",n_chans); if(!comedi_maxdata_is_chan_specific(it,i)){ printf(" max data value: %lu\n", (unsigned long)comedi_get_maxdata(it,i,0)); }else{ printf(" max data value: (channel specific)\n"); for(chan=0;chanunit); printf(" [%g%s,%g%s]",rng->min,strtmp,rng->max,strtmp); } printf("\n"); }else{ for(chan=0;chanunit); printf(" [%g%s,%g%s]",rng->min,strtmp,rng->max,strtmp); } printf("\n"); } } printf(" command:\n"); n_chans_for_generic_timed = def_n_chans_for_generic_timed; if (n_chans_for_generic_timed>n_chans) n_chans_for_generic_timed = n_chans; if (n_chans_for_generic_timed<1) n_chans_for_generic_timed = 1; if (freq_for_generic_timed > 1E9) freq_for_generic_timed = 1E9; if (freq_for_generic_timed < 1) freq_for_generic_timed = 1; get_command_stuff(it,i,n_chans_for_generic_timed,freq_for_generic_timed); } return 0; } comedilib-0.11.0/c++/0000755000000000000000000000000013162722665011051 500000000000000comedilib-0.11.0/c++/Makefile.am0000644000000000000000000000002412416542105013007 00000000000000 SUBDIRS = include comedilib-0.11.0/c++/include/0000755000000000000000000000000013162722665012474 500000000000000comedilib-0.11.0/c++/include/Makefile.am0000644000000000000000000000006612416542105014440 00000000000000 include_HEADERS = comedilib.hpp comedi_iostream.hpp comedilib-0.11.0/c++/include/comedilib.hpp0000644000000000000000000010647212726505314015061 00000000000000/* A C++ binding for comedilib. Requires the Boost C++ libraries. Copyright (C) 2006-2007 Frank Mori Hess 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 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 Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef _COMEDILIB_WRAPPER_HPP #define _COMEDILIB_WRAPPER_HPP #include #include #include #include #include #include #include #include namespace comedi { class subdevice; // wrapper for comedi_to_physical() class to_physical { public: to_physical() { memset(&_polynomial, 0, sizeof(_polynomial)); } to_physical(const comedi_polynomial_t &polynomial): _polynomial(polynomial) {} double operator()(lsampl_t data) const { return comedi_to_physical(data, &_polynomial); } private: comedi_polynomial_t _polynomial; }; // wrapper for comedi_from_physical() class from_physical { public: from_physical() { memset(&_polynomial, 0, sizeof(_polynomial)); } from_physical(const comedi_polynomial_t &polynomial): _polynomial(polynomial) {} lsampl_t operator()(double physical_value) const { return comedi_from_physical(physical_value, &_polynomial); } private: comedi_polynomial_t _polynomial; }; class device { public: device() {} device(const std::string &device_file) { this->open(device_file); } std::string board_name() const { const char *name = comedi_get_board_name(comedi_handle()); if(name == 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_get_board_name() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_get_board_name"); throw std::runtime_error(message.str()); } return name; } int command_test(comedi_cmd *cmd) const { int retval = comedi_command_test(comedi_handle(), cmd); if(retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_command_test() returned error."; std::cerr << message.str() << std::endl; comedi_perror("comedi_command_test"); throw std::runtime_error(message.str()); } return retval; } void command(comedi_cmd *cmd) const { int retval = comedi_command(comedi_handle(), cmd); if(retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_command() failed, return value=" << retval << " ."; std::cerr << message.str() << std::endl; comedi_perror("comedi_command"); throw std::runtime_error(message.str()); } } std::string default_calibration_path() const { char *c_string_file_path = comedi_get_default_calibration_path(comedi_handle()); if(c_string_file_path == NULL) { comedi_perror("comedi_get_default_calibration_path"); throw std::runtime_error(__PRETTY_FUNCTION__); } std::string file_path = c_string_file_path; free(c_string_file_path); return file_path; } void do_insn(comedi_insn *instruction) const { int retval = comedi_do_insn(comedi_handle(), instruction); if(retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_do_insn() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_do_insn"); throw std::runtime_error(message.str()); } } void do_insnlist(comedi_insnlist *insnlist) const { int retval = comedi_do_insnlist(comedi_handle(), insnlist); { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_do_insnlist() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_do_insnlist"); throw std::runtime_error(message.str()); } } std::string driver_name() const { const char *name = comedi_get_driver_name(comedi_handle()); if(name == 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_get_driver_name() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_get_driver_name"); throw std::runtime_error(message.str()); } return name; } int fileno() const { int fd = comedi_fileno(comedi_handle()); if(fd < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_fileno() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_fileno"); throw std::runtime_error(message.str()); } return fd; } subdevice find_subdevice_by_type(int type, const subdevice *start_subdevice = 0) const; subdevice get_read_subdevice() const; subdevice get_write_subdevice() const; unsigned n_subdevices() const { int retval = comedi_get_n_subdevices(comedi_handle()); if(retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_get_n_subdevices() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_get_n_subdevices"); throw std::runtime_error(message.str()); } return retval; } void open(const std::string &device_file) { comedi_t *dev = comedi_open(device_file.c_str()); if(dev == 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_open() failed, with device file name: \"" << device_file << "\"."; std::cerr << message.str() << std::endl; comedi_perror("comedi_open"); throw std::runtime_error(message.str().c_str()); } _comedi_handle.reset(dev, &comedi_close); } private: friend class subdevice; comedi_t* comedi_handle() const { if(_comedi_handle == 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": device not open."; std::cerr << message.str() << std::endl; throw std::invalid_argument(message.str()); } return _comedi_handle.get(); } boost::shared_ptr _comedi_handle; }; class calibration { public: calibration() {} calibration(const device &dev) { init(dev.default_calibration_path()); } calibration(const std::string &file_path) { init(file_path); } const comedi_calibration_t* c_calibration() const { return _c_calibration.get(); } private: void init(const std::string &file_path) { comedi_calibration_t *cal = comedi_parse_calibration_file(file_path.c_str()); if(cal == NULL) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_parse_calibration_file() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_parse_calibration_file"); throw std::runtime_error(message.str()); } _c_calibration.reset(cal, &comedi_cleanup_calibration); } boost::shared_ptr _c_calibration; }; class subdevice { public: subdevice(): _index(-1) {} subdevice(const device &dev, unsigned subdevice_index): _device(dev), _index(subdevice_index) { if(_index >= _device.n_subdevices()) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": invalid subdevice index."; std::cerr << message.str() << std::endl; throw std::invalid_argument(message.str()); } } void apply_hard_calibration(unsigned channel, unsigned range, unsigned aref, const calibration &cal) { if(cal.c_calibration() == 0) throw std::invalid_argument(__PRETTY_FUNCTION__); int retval = comedi_apply_parsed_calibration(comedi_handle(), index(), channel, range, aref, cal.c_calibration()); if(retval < 0) { comedi_perror("comedi_apply_parsed_calibration"); throw std::runtime_error(__PRETTY_FUNCTION__); } } void apply_hard_calibration(unsigned channel, unsigned range, unsigned aref) { apply_hard_calibration(channel, range, aref, calibration(dev())); } void arm(unsigned source) const { int retval = comedi_arm(comedi_handle(), index(), source); if (retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_arm() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_arm"); throw std::runtime_error(message.str()); } } void arm_channel(unsigned channel, unsigned source) const { int retval = comedi_arm_channel(comedi_handle(), index(), channel, source); if (retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_arm_channel() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_arm_channel"); throw std::runtime_error(message.str()); } } unsigned buffer_size() const { int retval = comedi_get_buffer_size(comedi_handle(), index()); if(retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_get_buffer_size() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_get_buffer_size"); throw std::runtime_error(message.str()); } return retval; } void cancel() const { int retval = comedi_cancel(comedi_handle(), index()); if(retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_cancel() failed, return value=" << retval << " ."; std::cerr << message.str() << std::endl; comedi_perror("comedi_cancel"); throw std::runtime_error(message.str()); } } lsampl_t data_read(unsigned channel, unsigned range, unsigned aref) const { lsampl_t value; int retval = comedi_data_read(comedi_handle(), index(), channel, range, aref, &value); if(retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_data_read() failed, return value=" << retval << " ."; std::cerr << message.str() << std::endl; comedi_perror("comedi_data_read"); throw std::runtime_error(message.str()); } return value; } std::vector data_read_n(unsigned channel, unsigned range, unsigned aref, unsigned num_samples) const { std::vector values(num_samples); int retval = comedi_data_read_n(comedi_handle(), index(), channel, range, aref, &values.at(0), values.size()); if(retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_data_read_n() failed, return value=" << retval << " ."; std::cerr << message.str() << std::endl; comedi_perror("comedi_data_read_n"); throw std::runtime_error(message.str()); } return values; } lsampl_t data_read_delayed(unsigned channel, unsigned range, unsigned aref, unsigned nano_sec) const { lsampl_t value; int retval = comedi_data_read_delayed(comedi_handle(), index(), channel, range, aref, &value, nano_sec); if(retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_data_read_delayed() failed, return value=" << retval << " ."; std::cerr << message.str() << std::endl; comedi_perror("comedi_data_read_delayed"); throw std::runtime_error(message.str()); } return value; } void data_read_hint(unsigned channel, unsigned range, unsigned aref) const { int ret = comedi_data_read_hint(comedi_handle(), index(), channel, range, aref); if(ret < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_data_read_hint() failed, return value = " << ret << " ."; std::cerr << message.str() << std::endl; comedi_perror("comedi_data_read_hint"); throw std::runtime_error(message.str()); } } void data_write(unsigned channel, unsigned range, unsigned aref, lsampl_t data) const { int retval = comedi_data_write(comedi_handle(), index(), channel, range, aref, data); if(retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_data_write() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_data_write"); throw std::runtime_error(message.str()); } } device dev() const {return _device;} void digital_trigger_disable(unsigned trigger_id) const { int retval = comedi_digital_trigger_disable(comedi_handle(), index(), trigger_id); if (retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_digital_trigger_disable() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_digital_trigger_disable"); throw std::runtime_error(message.str()); } } void digital_trigger_enable_edges(unsigned trigger_id, unsigned base_input, unsigned rising_edge_inputs, unsigned falling_edge_inputs) const { int retval = comedi_digital_trigger_enable_edges(comedi_handle(), index(), trigger_id, base_input, rising_edge_inputs, falling_edge_inputs); if (retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_digital_trigger_enable_edges() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_digital_trigger_enable_edges"); throw std::runtime_error(message.str()); } } void digital_trigger_enable_levels(unsigned trigger_id, unsigned base_input, unsigned high_level_inputs, unsigned low_level_inputs) const { int retval = comedi_digital_trigger_enable_levels(comedi_handle(), index(), trigger_id, base_input, high_level_inputs, low_level_inputs); if (retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_digital_trigger_enable_levels() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_digital_trigger_enable_levels"); throw std::runtime_error(message.str()); } } void dio_bitfield(unsigned write_mask, unsigned *bits) const { dio_bitfield2(write_mask, bits, 0); } void dio_bitfield2(unsigned write_mask, unsigned *bits, unsigned base_channel) const { int retval = comedi_dio_bitfield2(comedi_handle(), index(), write_mask, bits, base_channel); if(retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_dio_bitfield2() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_dio_bitfield2"); throw std::runtime_error(message.str()); } } void dio_config(unsigned channel, enum comedi_io_direction direction) const { int retval = comedi_dio_config(comedi_handle(), index(), channel, direction); if(retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_dio_config() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_dio_config"); throw std::runtime_error(message.str()); } } enum comedi_io_direction dio_get_config(unsigned channel) const { unsigned dir; int retval = comedi_dio_get_config(comedi_handle(), index(), channel, &dir); if (retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_dio_get_config() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_dio_get_config"); throw std::runtime_error(message.str()); } return (enum comedi_io_direction)dir; } unsigned dio_read(unsigned channel) const { unsigned bit; int retval = comedi_dio_read(comedi_handle(), index(), channel, &bit); if (retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_dio_read() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_dio_read"); throw std::runtime_error(message.str()); } return bit; } void dio_write(unsigned channel, unsigned bit) const { int retval = comedi_dio_write(comedi_handle(), index(), channel, bit); if (retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_dio_read() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_dio_read"); throw std::runtime_error(message.str()); } } void disarm() const { int retval = comedi_disarm(comedi_handle(), index()); if (retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_disarm() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_disarm"); throw std::runtime_error(message.str()); } } void disarm_channel(unsigned channel) const { int retval = comedi_disarm_channel(comedi_handle(), index(), channel); if (retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_disarm_channel() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_disarm_channel"); throw std::runtime_error(message.str()); } } unsigned find_range(unsigned channel, unsigned unit, double min, double max) const { int retval = comedi_find_range(comedi_handle(), index(), channel, unit, min, max); if(retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_find_range() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_find_range"); throw std::runtime_error(message.str()); } return retval; } unsigned flags() const { int retval = comedi_get_subdevice_flags(comedi_handle(), index()); if(retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_get_subdevice_flags() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_get_subdevice_flags"); throw std::runtime_error(message.str()); } return retval; } unsigned get_buffer_contents() const { int retval = comedi_get_buffer_contents(comedi_handle(), index()); if(retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_get_buffer_contents() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_get_buffer_contents"); throw std::runtime_error(message.str()); } return retval; } unsigned get_buffer_read_count() const { unsigned count; int retval = comedi_get_buffer_read_count(comedi_handle(), index(), &count); if (retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_get_buffer_read_count() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_get_buffer_read_count"); throw std::runtime_error(message.str()); } return count; } unsigned get_buffer_read_offset() const { int offset = comedi_get_buffer_read_offset(comedi_handle(), index()); if (offset < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_get_buffer_read_offset() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_get_buffer_read_offset"); throw std::runtime_error(message.str()); } return offset; } unsigned get_buffer_write_count() const { unsigned count; int retval = comedi_get_buffer_write_count(comedi_handle(), index(), &count); if (retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_get_buffer_write_count() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_get_buffer_write_count"); throw std::runtime_error(message.str()); } return count; } unsigned get_buffer_write_offset() const { int offset = comedi_get_buffer_write_offset(comedi_handle(), index()); if (offset < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_get_buffer_write_offset() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_get_buffer_write_offset"); throw std::runtime_error(message.str()); } return offset; } void get_clock_source(unsigned channel, unsigned *clock, unsigned *period_ns) const { int retval = comedi_get_clock_source(comedi_handle(), index(), channel, clock, period_ns); if(retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_get_clock_source() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_get_clock_source"); throw std::runtime_error(message.str()); } } void get_cmd_generic_timed(comedi_cmd *cmd, unsigned chanlist_len, unsigned scan_period) const { int retval = comedi_get_cmd_generic_timed(comedi_handle(), index(), cmd, chanlist_len, scan_period); if (retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_get_cmd_generic_timed() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_get_cmd_generic_timed"); throw std::runtime_error(message.str()); } } void get_cmd_src_mask(comedi_cmd *cmd) const { int retval = comedi_get_cmd_src_mask(comedi_handle(), index(), cmd); if (retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_get_cmd_src_mask() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_get_cmd_src_mask"); throw std::runtime_error(message.str()); } } void get_gate_source(unsigned channel, unsigned gate_index, unsigned *gate_source) const { int retval = comedi_get_gate_source(comedi_handle(), index(), channel, gate_index, gate_source); if (retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_get_gate_source() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_get_gate_source"); throw std::runtime_error(message.str()); } } unsigned get_routing(unsigned channel) const { unsigned routing = 0; int retval = comedi_get_routing(comedi_handle(), index(), channel, &routing); if(retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_get_routing() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_get_routing"); throw std::runtime_error(message.str()); } return routing; } comedi_polynomial_t hardcal_converter(unsigned channel, unsigned range, enum comedi_conversion_direction direction) const { comedi_polynomial_t result; int retval = comedi_get_hardcal_converter(comedi_handle(), index(), channel, range, direction, &result); if(retval < 0) { comedi_perror("comedi_get_hardcal_converter"); throw std::runtime_error(__PRETTY_FUNCTION__); } return result; } unsigned hardware_buffer_size(enum comedi_io_direction direction) const { int retval = comedi_get_hardware_buffer_size(comedi_handle(), index(), direction); if(retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_get_hardware_buffer_size() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_get_hardware_buffer_size"); throw std::runtime_error(message.str()); } return retval; } unsigned index() const {return _index;}; void internal_trigger(unsigned trig_num) const { int retval = comedi_internal_trigger(comedi_handle(), index(), trig_num); if(retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_internal_trigger() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_internal_trigger"); throw std::runtime_error(message.str()); } } void lock() const { int retval = comedi_lock(comedi_handle(), index()); if (retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_lock() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_lock"); throw std::runtime_error(message.str()); } } unsigned mark_buffer_read(unsigned bytes) const { int marked = comedi_mark_buffer_read(comedi_handle(), index(), bytes); if (marked < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_mark_buffer_read() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_mark_buffer_read"); throw std::runtime_error(message.str()); } return marked; } unsigned mark_buffer_written(unsigned bytes) const { int marked = comedi_mark_buffer_written(comedi_handle(), index(), bytes); if (marked < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_mark_buffer_written() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_mark_buffer_written"); throw std::runtime_error(message.str()); } return marked; } unsigned max_buffer_size() const { int retval = comedi_get_max_buffer_size(comedi_handle(), index()); if(retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_get_max_buffer_size() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_get_max_buffer_size"); throw std::runtime_error(message.str()); } return retval; } lsampl_t max_data(unsigned channel = 0) const { lsampl_t value = comedi_get_maxdata(comedi_handle(), index(), channel); if(value == 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_get_maxdata() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_get_maxdata"); throw std::runtime_error(message.str()); } return value; } bool max_data_is_chan_specific() const { int retval = comedi_maxdata_is_chan_specific(comedi_handle(), index()); if (retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_maxdata_is_chan_specific() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_maxdata_is_chan_specific"); throw std::runtime_error(message.str()); } return retval != 0; } unsigned n_channels() const { int retval = comedi_get_n_channels(comedi_handle(), index()); if(retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_get_n_channels() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_get_n_channels"); throw std::runtime_error(message.str()); } return retval; } unsigned n_ranges(unsigned channel = 0) const { int retval = comedi_get_n_ranges(comedi_handle(), index(), channel); if(retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_get_n_ranges() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_get_n_ranges"); throw std::runtime_error(message.str()); } return retval; } unsigned poll() const { int amount = comedi_poll(comedi_handle(), index()); if (amount < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_poll() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_poll"); throw std::runtime_error(message.str()); } return amount; } const comedi_range* range(unsigned channel, unsigned range_index) const { comedi_range *cRange = comedi_get_range(comedi_handle(), index(), channel, range_index); if(cRange == 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_get_range() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_get_range"); throw std::runtime_error(message.str()); } return cRange; } bool range_is_chan_specific() const { int retval = comedi_range_is_chan_specific(comedi_handle(), index()); if (retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_range_is_chan_specific() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_range_is_chan_specific"); throw std::runtime_error(message.str()); } return retval != 0; } void reset() const { int retval = comedi_reset(comedi_handle(), index()); if(retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_reset() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_reset"); throw std::runtime_error(message.str()); } } void reset_channel(unsigned channel) const { int retval = comedi_reset_channel(comedi_handle(), index(), channel); if(retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_reset_channel() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_reset_channel"); throw std::runtime_error(message.str()); } } void set_as_read_subdevice() const { int retval = comedi_set_read_subdevice(comedi_handle(), index()); if (retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_set_read_subdevice() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_set_read_subdevice"); throw std::runtime_error(message.str()); } } void set_as_write_subdevice() const { int retval = comedi_set_write_subdevice(comedi_handle(), index()); if (retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_set_write_subdevice() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_set_write_subdevice"); throw std::runtime_error(message.str()); } } void set_buffer_size(unsigned num_bytes) const { int retval = comedi_set_buffer_size(comedi_handle(), index(), num_bytes); if(retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_set_buffer_size() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_set_buffer_size"); throw std::runtime_error(message.str()); } } void set_clock_source(unsigned channel, unsigned clock, unsigned period_ns) const { int retval = comedi_set_clock_source(comedi_handle(), index(), channel, clock, period_ns); if(retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_set_clock_source() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_set_clock_source"); throw std::runtime_error(message.str()); } } void set_counter_mode(unsigned channel, unsigned mode_bits) const { int retval = comedi_set_counter_mode(comedi_handle(), index(), channel, mode_bits); if(retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_set_counter_mode() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_set_counter_mode"); throw std::runtime_error(message.str()); } } void set_filter(unsigned channel, unsigned filter) const { int retval = comedi_set_filter(comedi_handle(), index(), channel, filter); if (retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_set_filter() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_set_filter"); throw std::runtime_error(message.str()); } } void set_gate_source(unsigned channel, unsigned gate_index, unsigned gate_source) const { int retval = comedi_set_gate_source(comedi_handle(), index(), channel, gate_index, gate_source); if(retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_set_gate_source() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_set_gate_source"); throw std::runtime_error(message.str()); } } void set_max_buffer_size(unsigned num_bytes) const { int retval = comedi_set_max_buffer_size(comedi_handle(), index(), num_bytes); if(retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_set_max_buffer_size() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_set_max_buffer_size"); throw std::runtime_error(message.str()); } } void set_other_source(unsigned channel, unsigned other, unsigned source) const { int retval = comedi_set_other_source(comedi_handle(), index(), channel, other, source); if (retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_set_other_source() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_set_other_source"); throw std::runtime_error(message.str()); } } void set_routing(unsigned channel, unsigned routing) const { int retval = comedi_set_routing(comedi_handle(), index(), channel, routing); if(retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_set_routing() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_set_routing"); throw std::runtime_error(message.str()); } } comedi_polynomial_t softcal_converter(unsigned channel, unsigned range, enum comedi_conversion_direction direction, const calibration &cal) const { if(cal.c_calibration() == 0) throw std::invalid_argument(__PRETTY_FUNCTION__); comedi_polynomial_t result; int retval = comedi_get_softcal_converter(index(), channel, range, direction, cal.c_calibration(), &result); if(retval < 0) { comedi_perror("comedi_get_softcal_converter"); throw std::runtime_error(__PRETTY_FUNCTION__); } return result; } comedi_subdevice_type subdevice_type() const { int retval = comedi_get_subdevice_type(comedi_handle(), index()); if(retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_get_subdevice_type() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_get_subdevice_type"); throw std::runtime_error(message.str()); } return comedi_subdevice_type(retval); } void unlock() const { int retval = comedi_unlock(comedi_handle(), index()); if (retval < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_unlock() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_unlock"); throw std::runtime_error(message.str()); } } private: comedi_t* comedi_handle() const {return dev().comedi_handle();} device _device; unsigned _index; }; inline subdevice device::find_subdevice_by_type(int type, const subdevice *start_subdevice) const { unsigned start_index; if(start_subdevice) start_index = start_subdevice->index() + 1; else start_index = 0; int subdev = comedi_find_subdevice_by_type(comedi_handle(), type, start_index); if(subdev < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": failed to find subdevice of type " << type << " ."; std::cerr << message.str() << std::endl; comedi_perror("comedi_find_subdevice_by_type"); throw std::runtime_error(message.str()); } return subdevice(*this, subdev); } inline subdevice device::get_read_subdevice() const { int subdev = comedi_get_read_subdevice(comedi_handle()); if (subdev < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_get_read_subdevice() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_get_read_subdevice"); throw std::runtime_error(message.str()); } return subdevice(*this, subdev); } inline subdevice device::get_write_subdevice() const { int subdev = comedi_get_write_subdevice(comedi_handle()); if (subdev < 0) { std::ostringstream message; message << __PRETTY_FUNCTION__ << ": comedi_get_write_subdevice() failed."; std::cerr << message.str() << std::endl; comedi_perror("comedi_get_write_subdevice"); throw std::runtime_error(message.str()); } return subdevice(*this, subdev); } }; #endif // _COMEDILIB_WRAPPER_HPP comedilib-0.11.0/c++/include/Makefile.in0000644000000000000000000004274213140064520014453 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = c++/include ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/am-check-python-headers.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/as-libtool.m4 $(top_srcdir)/m4/ax_tls.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(include_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(includedir)" HEADERS = $(include_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COMEDILIB_AGE = @COMEDILIB_AGE@ COMEDILIB_CFLAGS = @COMEDILIB_CFLAGS@ COMEDILIB_CURRENT = @COMEDILIB_CURRENT@ COMEDILIB_LIBS = @COMEDILIB_LIBS@ COMEDILIB_LIBVERSION = @COMEDILIB_LIBVERSION@ COMEDILIB_LT_LDFLAGS = @COMEDILIB_LT_LDFLAGS@ COMEDILIB_REVISION = @COMEDILIB_REVISION@ COMEDILIB_VERSION_MAJOR = @COMEDILIB_VERSION_MAJOR@ COMEDILIB_VERSION_MICRO = @COMEDILIB_VERSION_MICRO@ COMEDILIB_VERSION_MINOR = @COMEDILIB_VERSION_MINOR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_BACKEND = @PDF_BACKEND@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_QUIET = @PYTHON_QUIET@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_CONFIG_OPTIONS = @RUBY_CONFIG_OPTIONS@ RUBY_PREFIX = @RUBY_PREFIX@ RUBY_SO_DIR = @RUBY_SO_DIR@ SCXI_SO_VERSION = @SCXI_SO_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ VERSION = @VERSION@ XMLTO = @XMLTO@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pcmciadir = @pcmciadir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ udevfirmwaredir = @udevfirmwaredir@ udevrulesdir = @udevrulesdir@ udevscriptsdir = @udevscriptsdir@ include_HEADERS = comedilib.hpp comedi_iostream.hpp all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c++/include/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu c++/include/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ done uninstall-includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-includeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-includeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool cscopelist-am ctags ctags-am distclean \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-includeHEADERS install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-includeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: comedilib-0.11.0/c++/include/comedi_iostream.hpp0000644000000000000000000000423612416542105016263 00000000000000/* Input and output stream classes for comedilib's C++ binding. The << and >> operators are NOT useful, as the overloaded bitshift operators are used for formatting. Instead use the unformatted read() and write() member functions. Copyright (C) 2007 Frank Mori Hess 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 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 Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef _COMEDILIB_IOSTREAM_HPP #define _COMEDILIB_IOSTREAM_HPP #include #include #include #include #include namespace comedi { namespace detail { class filebuf { public: filebuf(const comedi::device &dev, std::ios::openmode mode, size_t buffer_size) { int fd = dup(dev.fileno()); if(fd < 0) { throw std::invalid_argument(__PRETTY_FUNCTION__); } m_filebuf.reset(new __gnu_cxx::stdio_filebuf(fd, mode, buffer_size)); } boost::scoped_ptr<__gnu_cxx::stdio_filebuf > m_filebuf; }; } class istream: private detail::filebuf, public std::istream { public: istream(const comedi::device &dev, size_t buffer_size = static_cast(BUFSIZ)): detail::filebuf(dev, std::ios::in | std::ios::binary, buffer_size), std::istream(this->m_filebuf.get()) {} }; class ostream: private detail::filebuf, public std::ostream { public: ostream(const comedi::device &dev, size_t buffer_size = static_cast(BUFSIZ)): detail::filebuf(dev, std::ios::out | std::ios::binary, buffer_size), std::ostream(this->m_filebuf.get()) {} }; }; #endif // _COMEDILIB_IOSTREAM_HPP comedilib-0.11.0/c++/Makefile.in0000644000000000000000000004662013140064520013027 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = c++ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/am-check-python-headers.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/as-libtool.m4 $(top_srcdir)/m4/ax_tls.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COMEDILIB_AGE = @COMEDILIB_AGE@ COMEDILIB_CFLAGS = @COMEDILIB_CFLAGS@ COMEDILIB_CURRENT = @COMEDILIB_CURRENT@ COMEDILIB_LIBS = @COMEDILIB_LIBS@ COMEDILIB_LIBVERSION = @COMEDILIB_LIBVERSION@ COMEDILIB_LT_LDFLAGS = @COMEDILIB_LT_LDFLAGS@ COMEDILIB_REVISION = @COMEDILIB_REVISION@ COMEDILIB_VERSION_MAJOR = @COMEDILIB_VERSION_MAJOR@ COMEDILIB_VERSION_MICRO = @COMEDILIB_VERSION_MICRO@ COMEDILIB_VERSION_MINOR = @COMEDILIB_VERSION_MINOR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_BACKEND = @PDF_BACKEND@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_QUIET = @PYTHON_QUIET@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_CONFIG_OPTIONS = @RUBY_CONFIG_OPTIONS@ RUBY_PREFIX = @RUBY_PREFIX@ RUBY_SO_DIR = @RUBY_SO_DIR@ SCXI_SO_VERSION = @SCXI_SO_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ VERSION = @VERSION@ XMLTO = @XMLTO@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pcmciadir = @pcmciadir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ udevfirmwaredir = @udevfirmwaredir@ udevrulesdir = @udevrulesdir@ udevscriptsdir = @udevscriptsdir@ SUBDIRS = include all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c++/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu c++/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: comedilib-0.11.0/ChangeLog0000644000000000000000000131272513162722665012206 00000000000000# Generated by Makefile. Do not edit. commit baf0baf0901ae4269a62ef421f07ad677d84d1ff Author: Ian Abbott Date: 2017-09-27 13:55:21 +0100 AUTHORS: Add Joseph Timothy Foley and Spencer E. Olson Various fixes and improvements to SWIG and Python support, and the comedi.h header file. AUTHORS commit 1b988961a229dd768f14c69f9658ee687c473cb8 Author: Ian Abbott Date: 2017-09-20 16:26:36 +0100 demo/gpct_pulse_generator: Fix some error checking Store the comedi_data_write() return values for channel 1 and 2 in the 'retval' variable, so that the following 'if(retval < 0) return retval;' is meaningful. This also avoids a compiler warning: "Identical condition 'retval<0', second condition is always false". Thanks to David Binderman for the bug report. demo/gpct_pulse_generator.c commit 44c031d0f2e6e65a99fb020207a65fc1890ea0cc Author: Ian Abbott Date: 2017-05-11 12:12:37 +0100 doc/drivers.txt: Rebuilt from Comedi sources Rebuilt from the "out-of-tree" Comedi kernel module sources. The adv_pci1710 driver gains support for Advantech PCI-1716. doc/drivers.txt commit 6e08ff2ff222a343f13d980fc254fbf5192f1836 Author: Ian Abbott Date: 2017-05-02 17:09:31 +0100 configure.ac: Enable "maintainer-mode" by default Change 'AM_MAINTAINER_MODE' to 'AM_MAINTAINER_MODE([enable])' in "configure.ac" so there is no need to pass the '--enable-maintainer-mode' option to './configure'. If you really want to disable "maintainer-mode", the '--disable-maintainer-mode' option can be used. configure.ac commit 05bdfb7cfab727fc8b0cba6fd870259472eb45fc Author: Ian Abbott Date: 2017-04-27 16:35:31 +0100 doc/drivers.txt: Rebuilt from Comedi sources Note: This is built from the "out-of-tree" Comedi kernel module sources, not the Linux "staging" Comedi kernel sources. doc/drivers.txt commit e14ce3bc9c90abe7fd0cfc554ae2c55c874c2054 Author: Ian Abbott Date: 2017-04-21 16:56:24 +0100 man: update comedi(7) man/comedi.7 commit 43806f72fc7c0c114879b41e189947b5977c85d0 Author: Ian Abbott Date: 2017-04-21 16:35:31 +0100 comedi_config: Various changes to man page man/comedi_config.8 commit 7d4414c7a3b9438baa3417bbe1430394e3182b9b Author: Ian Abbott Date: 2017-04-21 14:23:09 +0100 comedi_config: Bump version to 0.11.0 comedi_config/comedi_config.c man/comedi_config.8 commit 351958b1195e2bb4caf2db551065bb530c42834d Author: Ian Abbott Date: 2017-04-21 14:15:32 +0100 comedi_config: Add --subdevice-buffer option Add option --subdevice-buffer to allow buffer sizes for arbitrary subdevices (that have asynchronous command support) to be configured. This complements the --read-buffer and --write-buffer options. The required argument is a comma-separated list alternating between subdevice number and buffer size, and should end with a buffer size. The option and its argument may be specified multiple times. comedi_config/comedi_config.c man/comedi_config.8 commit 3f8514739a2d799d2e6dbb6cd43a7f6bb624a319 Author: Ian Abbott Date: 2017-04-10 19:02:55 +0100 lib/calib.c: Include for fstat() Relying on to define major(), minor() and makedev() is deprecated, so include to define them. Als include and as the Linux man page for fstat() has them in the synopsys. lib/calib.c commit 99958da64f78471b300a7af4015ea3a930e845ef Author: Ian Abbott Date: 2017-04-10 14:14:29 +0100 swig/python: Removed test_comedi.py It was untested, and never worked. It would be better to replace it with some small demo programs, similar to the C language demo programs. swig/python/Makefile.am swig/python/test_comedi.py commit 6a73a96cbfbafda6e6dc35f935cd189f4057a2da Author: Joseph Timothy Foley Date: 2017-03-13 23:42:36 +0000 swig/comedi.i: Fixed the "break backwards compatibility" The lines: %rename("%(strip:[COMEDI_])s", regextarget=1) "COMEDI_.*"; %rename("%(strip:[comedi_])s", regextarget=1) "comedi_.*"; caused errors on import due to _comedi function names not matching at import time. Stripping names is now completely done in the globals() modification at the end, which works properly. to indicate if the old names should be stripped or not. This makes the intent very clear in the generated comedi.py file. [Reformatted commit message -- Ian Abbott] swig/comedi.i commit f28772a982251ff9282baad9e385556051a7c001 Author: Joseph Timothy Foley Date: 2017-03-12 21:47:52 +0000 Ignore __pycache__ created during python SWIG testing. .gitignore commit 492c6915762c1d1cf519bbf1d340e3a25d93e2b0 Author: Joseph Timothy Foley Date: 2017-03-12 21:07:31 +0000 swig/comedi.i: Fix a Python 3 incompatibility Fixed Python3 incompatibility created by trying to modify module globals() in iterator. Also simplified breaking backwards compatibility switch as #define SWIGPYTHONONLYSHORT [Reformatted commit message -- Ian Abbott] swig/comedi.i commit 1e7fd436c9e676c13c450e820b30a83c39e389fb Author: Joseph Timothy Foley Date: 2017-03-12 21:06:24 +0000 Ignore any python compiled files in SWIG directory: *.pyc .gitignore commit 5a5a46b4eec5c8112d1b54406287f9cf7368cda7 Author: Ian Abbott Date: 2016-11-08 18:14:20 +0000 Add .gitignore file .gitignore commit fa9c5d14c9fae536870dd658d1e3bbfc21dfd9b5 Author: Ian Abbott Date: 2016-11-08 14:57:16 +0000 demo/mmap: limit options.n_chan to 256 Set new macro N_CHANS to 256 - the length of the chanlist[] array. If the '-n' option sets options.n_chan higher than N_CHANS, reduce it to avoid overrunning the chanlist[] array. demo/mmap.c commit 235338eb7e7333461ae69a84ef73b50862725456 Author: Ian Abbott Date: 2016-11-08 14:52:44 +0000 demo/cmd: limit options.n_chan to N_CHANS If the '-n' option sets options.n_chan to something higher than N_CHANS (256), reduce it to avoid overrunning the chanlist[] array. demo/cmd.c commit facb713cd82cfd5f4a39d9b1334c2b0f1c834e88 Author: Ian Abbott Date: 2016-11-08 14:29:58 +0000 demo/mmap: check subdevice exists and supports 'read' commands Check the subdevice actually exists and that it claims to support 'read' commands (SDF_CMD_READ subdevice flag set), bailing out early if not. demo/mmap.c commit ad70295bb4eab9a76f5e0a47ba9288934829b115 Author: Ian Abbott Date: 2016-11-08 14:25:43 +0000 demo/mmap: use comedi_get_cmd_generic_timed() Use local function prepare_cmd_lib() -- which uses comedi_get_cmd_generic_timed() -- to prepare a good command for the device. Bail out early if it fails. demo/mmap.c commit 1e8ca17ba9ce239f6aaef23896940dd03ff8452c Author: Ian Abbott Date: 2016-11-08 14:20:49 +0000 demo/mmap: default to 'read' subdevice instead of subdevice 0 If the '-s' option has not been specified, default to using the current 'read' subdevice if there is one instead of defaulting to subdevice 0. Fall back to using subdevice 0 if there is no 'read' subdevice. demo/mmap.c commit c2cf7c80183478d574f9d1be4a04c7fbf3943502 Author: Ian Abbott Date: 2016-11-08 14:15:35 +0000 demo/cmd: check subdevice exists and supports 'read' commands Check the subdevice actually exists and that it claims to support 'read' commands (SDF_CMD_READ subdevice flag set), bailing out early if not. demo/cmd.c commit b7cb7f23313c7262baa89d920f2a1bc177412fb4 Author: Ian Abbott Date: 2016-11-08 13:48:56 +0000 demo/cmd: bail out if fail to prepare command Check return value of prepare_cmd_lib() and exit if less than 0. Also change prepare_cmd_lib() to write its error message to stderr instead of stdout. demo/cmd.c commit 4329a08403bc7b941271059c80d6dba01e85a02c Author: Ian Abbott Date: 2016-11-08 13:24:02 +0000 demo/cmd: default to the 'read' subdevice instead of subdevice 0 If the '-s' option has not been specified, default to using the current 'read' subdevice if there is one instead of defaulting to subdevice 0. Fall back to using subdevice 0 if there is no 'read' subdevice. demo/cmd.c commit 9cf2bba2e032541faadeaac88e8e7201ea203d60 Author: Ian Abbott Date: 2016-09-19 15:26:44 +0100 README: Git repository migrated to github.com Updated documented URL of git repository, and provided instructions for updating the URL of previously cloned repositories. Signed-off-by: Ian Abbott README commit a2573fff8f693a13b068f4da9aeb15c9da00a8fe Author: Ian Abbott Date: 2016-07-07 11:23:37 +0100 doc/drivers.txt: Rebuilt from Comedi - capitalize ADLINK consistently Use updated drivers.txt from the comedi.org Comedi package. The documentation for the ADLINK drivers has been updated to capitalize ADLINK in a consistent manner. doc/drivers.txt commit f6c1318c6cfc7fa7a1d6c8069caf1cafd0288706 Author: Ian Abbott Date: 2016-07-07 10:58:55 +0100 doc/drivers.txt: Rebuilt from comedi Rebuilt "doc/drivers.txt" using "make Documentation/comedi/drivers.txt" in the Comedi package, which scans the driver sources for documentation. Note: this is built from the comedi.org Comedi sources, not the Linux "staging" Comedi sources. doc/drivers.txt commit c45f319171f4828b8f2c691c64d2b0d20a5bf5d0 Author: Ian Abbott Date: 2016-06-20 11:29:14 +0100 comedi_test: deal with INSN_GTOD values more carefully Try and avoid arithmetic overflow when converting the difference between two INSN_GTOD timestamps to a signed number of microseconds. testing/insn_read_time.c commit a4dd004076959881b6e3cd7e7233db52d2eec24c Author: Ian Abbott Date: 2016-06-20 11:09:55 +0100 demo/insn: report start and end time as unsigned values Report the seconds and microseconds values from the INSN_GTOD instructions as unsigned values to postpone the Y2038 problem to a Y2106 problem. Be a bit more careful with the conversion to a signed difference. We wouldn't normally expect time to go backwards, but it is possible if the system time is set to to an older time between the instructions. Also, in the description of INSN_GTOD in the Comedilib manual, explicitly mention that the seconds and microseconds values are unsigned. demo/insn.c doc/reference.xml commit e0ee6039eb77c5aa8319d3238ddb6ec095798a7f Author: Ian Abbott Date: 2016-06-10 10:42:37 +0100 c++: Add a lot of missing wrapper functions to comedilib.hpp Add missing C++ wrappers for most comedilib functions. Also make some of the existing wrappers 'const' where if that appears to have been omitted. c++/include/comedilib.hpp commit 70d6a02dd9d7689d65398dd2404a6495c5d6f176 Author: Ian Abbott Date: 2016-06-09 15:04:28 +0100 lib: dio: set internal error for incompatible subdevice type comedi_dio_get_config(), comedi_dio_read(), comedi_dio_write(), comedi_dio_bitfield2() (and comedi_dio_bitfield()) return -1 if the subdevice type is unsuitable, but do not set an internal comedi error code in that case. Change them to do so. Also, don't bother checking if instruction list ioctl is supported in comedi_get_dio_config(), as it doesn't use it. lib/dio.c commit 2fb6289b1cb66eb85aa93829ebe72ff87a2ef293 Author: Ian Abbott Date: 2016-05-16 11:24:07 +0100 comedi.h: replace bare 'unsigned' with 'unsigned int' include/comedi.h commit 7958fec6c524ff2bf0af323652ce0c5605db5be3 Author: Ian Abbott Date: 2016-05-13 18:14:57 +0100 doc: Makefile.am: rebuild manual when tutorial program source changes doc/Makefile.am commit 63735881209686102db2003f843a78926ef7faca Author: Ian Abbott Date: 2016-05-13 17:55:39 +0100 doc: include the full tut3.c program listing Include the full tut3.c program listing in the document as it's not much bigger than tut3_part.c and it's a pain maintaining both of them. demo/tut3_part.c doc/tutorial.xml commit 59c563fea6d55dd87fb782b93f110d48254f90f9 Author: Ian Abbott Date: 2016-05-13 17:45:15 +0100 demo: reformat the tutorial examples a bit demo/tut1.c demo/tut2.c demo/tut3.c commit 80d809282c7fce40ae144a9dd91247e024d30cd4 Author: Ian Abbott Date: 2016-05-13 17:19:10 +0100 demo: update demo programs to set read or write subdevice Attempt to make the streaming command demos work if the specified subdevice is not the default 'read' or 'write' subdevice (depending on the direction of the command). This uses the new comedi_set_read_subdevice() and comedi_set_write_subdevice() functions. Changing the read or write subdevice is currently supported only by the Linux "in-tree" version of Comedi since kernel version 3.19. demo/ao_mmap.c demo/ao_waveform.c demo/cmd.c demo/do_waveform.c demo/gpct_buffered_counting.c demo/ledclock.c demo/mmap.c demo/poll.c demo/receiver.c demo/select.c demo/sigio.c demo/tut3.c demo/tut3_part.c commit 7a8b838e6682ee798e7b0979bf0ea545b3def7e5 Author: Ian Abbott Date: 2016-05-13 16:42:14 +0100 demo: poll: fix polling of wrong subdevice The call to comedi_poll() always sets the subdevice parameter to 0. Set it to the subdevice that the streaming command is using. demo/poll.c commit 8c31fb88c1069fa72f8fa77de9cffc4adf9c2b0b Author: Ian Abbott Date: 2016-05-13 16:07:03 +0100 lib: don't change read or write subdevice unnecessarily Change comedi_set_read_subdevice() and comedi_set_write_subdevice() to do nothing if the requested subdevice is already set as the current read or write subdevice, respectively. The functions now return success even if the Comedi drivers do not support changes to the read or write subdevice as long as the specified subdevice is the default one. doc/command_funcref.txt lib/comedi.c commit aff4937e03f40813215e54945a4ba6a64f755406 Author: Ian Abbott Date: 2016-05-13 15:14:47 +0100 Added some more buffer position functions for use with mmap Added comedi_get_buffer_read_offset(), comedi_get_buffer_write_offset(), comedi_get_buffer_read_count(), and comedi_get_buffer_write_count(). comedi_get_buffer_read_offset() is the same as comedi_get_buffer_offset(), which has now been documented as deprecated, but is currently still declared in "comedilib.h" by default. It gets the read position within the buffer as an offset from the start of the buffer (modulo the buffer size). comedi_get_buffer_write_offset() gets the write position within the buffer as an offset from the start of the buffer (modulo the buffer size). comedi_get_buffer_read_count() gets the number of bytes read from the buffer, modulo UINT_MAX+1. comedi_get_buffer_write_count() gets the number of bytes written to the buffer, modulo UINT_MAX+1. doc/command_funcref.txt doc/deprecated_funcref.txt include/comedilib.h lib/buffer.c lib/version_script swig/ruby/lib/comedi.rb commit fad46b9b16154e40b1ba4674d5baacef3163dab5 Author: Ian Abbott Date: 2016-05-13 14:30:19 +0100 doc: tweak some of the documentation for streaming acquisition functions doc/command_funcref.txt commit 22caa42aee4618f247d1e29325677e3627dddca2 Author: Ian Abbott Date: 2016-05-13 14:19:58 +0100 doc: command_funcref.txt: fix DocBook tag Change '' to ''. doc/command_funcref.txt commit 67a364cf93872cca93f39268f61c6df8d5141532 Author: Ian Abbott Date: 2016-05-13 11:48:31 +0100 comedi_test: attempt to change read and write subdevice during test When testing streaming input (or streaming output) command functionality for a subdevice, attempt to make it the current 'read' (or 'write') subdevice by calling the new 'comedi_set_read_subdevice()' (or 'comedi_set_write_subdevice()') function. That is currently only supported by the Linux "in-tree" version of Comedi, since kernel version 3.19. If the attempt fails, and the subdevice is not the current 'read' (or 'write') subdevice, the test will report "not applicable" as before. testing/cmd_1.c testing/cmd_2.c testing/cmd_3.c testing/inttrig.c testing/mmap.c testing/select.c commit ae03f3932e6f03a1ed9e65e8698754aece20f8e5 Author: Ian Abbott Date: 2016-05-12 19:35:40 +0100 swig/ruby: update bindings Add methods for several Comedilib functions that are currently absent from the Ruby bindings. Rename the comedi_to_physical, comedi_from_physical, and cleanup_calibration_file methods to to_physical, from_physical, and cleanup_calibration, either for consistency (comedi_to_physical and comedi_from_physical) or because they are wrong (cleanup_cleanup_calibration_file). TODO: Add a binding for comedi_get_clock_source() as well, but I'm not sure how to handle multiple output parameters. swig/ruby/lib/comedi.rb commit 5762a1dd60c6a9ecdb59588cb9cfc3a5f44e9473 Author: Ian Abbott Date: 2016-05-12 19:08:31 +0100 doc: corrected link content comedi_cleanup_calibration_file 'comedi_cleanup_calibrate_calibration_file' should be 'comedi_cleanup_calibration'. doc/calibration_funcref.txt commit 43a3ae9a27e2b02e75b6f8f97b49421ff7067e10 Author: Ian Abbott Date: 2016-05-12 18:52:35 +0100 comedilib.h: Don't mark 'data' parameter of comedi_data_read_n for SWIG The 'data' parameter (of type lsampl_t*) for comedi_data_read_n(it,subd,chan,range,aref,data,n) is currently marked as an OUTPUT parameter for SWIG, but we can only do that for single objects, and this one points to an array of objects. include/comedilib.h commit aec40a79aabd484cd6bf6699bd0b33a1584c6596 Author: Ian Abbott Date: 2016-05-12 18:18:08 +0100 doc: refer to device file descriptors rather than device files doc/command_funcref.txt commit 66070c6af617d55b7054f6b4f660dd7830c08b8b Author: Ian Abbott Date: 2016-05-12 18:00:28 +0100 Add comedi_set_read_subdevice() and comedi_set_write_subdevice() These functions allow the current read or write subdevice to be changed to another subdevice that supports streaming input (for read), or streaming output (for write) asynchronous commands. They return 0 on success, in which case the comedi_get_read_subdevice() or comedi_get_write_subdevice() functions will get the updated read or write subdevice. Changes are local to the "open file description" that was created by comedi_open() (actually, by open()), and have no effect on other open file descriptions created by other calls to comedi_open() (or open()) for the same underlying Comedi device node. Changes to the read or write subdevice is not currently supported by the comedi.org version of the Comedi drivers, but is supported by the Linux "in-tree" Comedi drivers since kernel version 3.19. doc/command_funcref.txt include/comedilib.h lib/comedi.c lib/version_script commit 6458b08e5655dd6f3c89c83a4ef1e3d4f665733f Author: Ian Abbott Date: 2016-05-12 16:12:43 +0100 lib: remove some unnecessary setting of __comedi_errno Since comedi_ioctl() calls libc_error() to set __comedi_errno to errno (and possibly print an error message), there is no need for callers of comedi_ioctl() to set __comedi_errno immediately afterwards. But comedi_command(), comedi_command_test(), and comedi_do_insnlist() currently do that. Remove the unneeded setting of __comedi_errno in those functions. Also, comedi_command() and comedi_command_test() check __comedi_errno regardless of whether comedi_ioctl() returnis an error, and possibly modify the error code to an internal comedi error. Change them to only do that if comedi_ioctl() returns an error, because __comedi_errno might contain a stale value. lib/comedi.c commit 27509ba9c91dbbf5a51d4b7f3dc25b7f826b6f08 Author: Ian Abbott Date: 2016-03-10 15:11:16 +0000 Add digital trigger configuration functions Add wrapper functions for the INSN_CONFIG_DIGITAL_TRIG configuration instruction. These are comedi_digital_trigger_disable(), comedi_digital_trigger_enable_edges(), and comedi_digital_trigger_enable_levels(). doc/extensions_funcref.txt include/comedilib.h lib/insn_config_wrappers.c lib/version_script commit c85d380b9361ce02f28efd8786c07316b4d278b5 Author: Ian Abbott Date: 2016-03-10 12:25:21 +0000 comedilib.h: fix a typo in a comment include/comedilib.h commit ac2ce445204e465d3e74f4dfd792d1af86c1dc5c Author: Ian Abbott Date: 2016-03-10 11:20:18 +0000 Add channel-specific arm, disarm, and reset wrappers. The comedi_arm(), comedi_disarm(), and comedi_reset() functions always set the channel number in the corresponding configuration instructions to 0, as they assume the channel number will be ignored by the driver. Some drivers do in fact use the channel number in these configuration instructions. Add additional wrapper functions comedi_arm_channel(), comedi_disarm_channel(), and comedi_reset_channel() to allow the channel number to be specified. doc/extensions_funcref.txt include/comedilib.h lib/insn_config_wrappers.c lib/version_script commit 2062d615ff65b3311af8de2cc188d771fe81314b Author: Ian Abbott Date: 2016-03-10 11:20:18 +0000 Add comedi_disarm() and bump to 0.11.0 Add the comedi_disarm() function to send the INSN_CONFIG_DISARM configuration instruction to a subdevice. In configure.ac, bump the comedilib libtool version code to 11:0:11, so the comedilib version becomes 0.11.0. Also bump the comedilib manual version to 0.11.0 in doc/comedilib.ent. configure.ac doc/comedilib.ent doc/extensions_funcref.txt include/comedilib.h lib/insn_config_wrappers.c lib/version_script commit 0378db73991bf4fed2b6def84b877d445c54d47e Author: Ian Abbott Date: 2016-03-21 11:27:40 +0000 comedi.h: adjust header comment Don't mention where the header gets installed. include/comedi.h commit 8b01d77b80c28f3d631b877cd9b623008628ef2c Author: Ian Abbott Date: 2016-03-21 11:08:06 +0000 comedi.h: Add note that the "aux data" config options are still used The COMEDI_DEVCONF_AUX_DATA3_LENGTH, COMEDI_DEVCONF_AUX_DATA2_LENGTH, COMEDI_DEVCONF_AUX_DATA1_LENGTH, COMEDI_DEVCONF_AUX_DATA0_LENGTH, COMEDI_DEVCONF_AUX_DATA_HI, COMEDI_DEVCONF_AUX_DATA_LO, and COMEDI_DEVCONF_AUX_DATA_LENGTH config option indices are still used by the standalone COMEDI kernel modules built from comedi.org sources for loading firmware in some driver modules, although they are no longer used by the COMEDI kernel modules in the Linux kernel sources. Adjust the comment to reflect this. include/comedi.h commit ef4c4e2e08baa180aa11bd7e58ff83a65756acc7 Author: Ian Abbott Date: 2016-03-21 10:35:16 +0000 Avoid using BIT(x) macro The BIT(x) macro is used by some internal kernel headers and is not used in user API kernel headers. It was used incorrectly in the "staging" kernel version of "comedi.h" in the "linux-next" tree for a brief period. Replace the use of BIT(x) with explicit masks. Handle CR_INVERT specially in SWIG to avoid it appearing as a negative integer. _CR_FLAGS_MASK was defined twice, identically, in SWIG, so remove one of the definitions. include/comedi.h swig/comedi.i commit 32cb61fe90647f1ea70159b0d8ab12eda4cd9d20 Author: Spencer E. Olson Date: 2016-03-19 22:53:39 -0600 Reimplement 371dcc56e6f7(strip comedi_/COMEDI prefix) This patch reimplements 371dcc56e6f7 where the comedi_/COMEDI_ prefix was removed. Just like that patch, this patch also allows for all old names to resolve properly. Differently than that patch, this patch simply adds new items in the modules dictionary with the comedi_/COMEDI_ prefix removed. Benefits of this approach: 1) Do not have to create a fake module. 2) Tab completion works well in ipython/python since the module is left intact. 3) Adding new items without the comedi_/COMEDI_ prefix happens only once at module load time, instead of every time an item is requested from the module. swig/comedi.i commit b9821b9d8c9f9ea40604daaef9b3fab719a1c496 Author: Spencer E. Olson Date: 2016-03-18 12:26:52 -0600 Sync removal of obsolete/useless items in comedi.h This patch removes COMEDI_CB_* macros that are of no use to userspace at any rate. COMEDI_CB_* are no longer in comedi.h in the staging tree, but rather in comedidev.h. This patch also removes an old commented-out INSN_CONFIG_GET_OTHER_SRC, the value of which was already taken long ago by INSN_CONFIG_GET_HARDWARE_BUFFER_SIZE. include/comedi.h commit 5d36757aa60769fa5fe25f16d4e908799f631e12 Author: Spencer E. Olson Date: 2016-03-18 12:19:22 -0600 Move old items of comedi.h into new "deprecated" section This allows the body of comedi to maintain visual sync to that of the staging tree. include/comedi.h commit 5cb320d559dab00f54520509ca76d97edbb4b696 Author: Spencer E. Olson Date: 2016-03-18 12:09:04 -0600 Use BIT(x) macro for better sync to staging comedi.h This patch defines a copy of the kernel BIT(x) macro and syncs the use of BIT(x) between the staging tree and comedilib versions of comedi.h include/comedi.h commit 0bb9805c829a0ae54f10f50d916ca742450b14e7 Author: Spencer E. Olson Date: 2016-03-18 12:05:17 -0600 Inherit documentation from staging comedi.h This partial sync of staging tree to the comedilib version of comedi.h brings documentation and some mild formatting. The documentation should be beneficial to userspace and the sync helps to visually maintain future syncing between kernel and userspace code. include/comedi.h commit 823bf1e39876d58fdbd7f4938f67adb1cb7f82ef Author: Spencer E. Olson Date: 2016-03-18 10:09:27 -0600 Teach SWIG to properly handle some unsigned consts for python This revisits the change made in da0fe745fcb9: 1) Changes c-macro constants back to their original definition (without explicit typing them as unsigned) so-as to more exactly compare the comedilib version of comedi.h with that of the kernel module. 2) Removes the duplicate definition of NI_GPCT_INVERT_CLOCK_SRC_BIT in comedi.i. 3) Instead of redefining the macros to fix the mishandling of signedness by SWIG for python, teach SWIG to treat these as unsigned ints. include/comedi.h swig/comedi.i commit 9d4b7367ebcad6548042556ba93fbf3e191c22e6 Author: Spencer E. Olson Date: 2016-03-18 09:55:12 -0600 change static inline NI_* to macros This is a partial sync of the staging tree to comedilib with these benefits: 1. This is first in a series of patches to sync comedilib to the kernel modules in the staging development tree. The point of this series of patches is to make the syncing of the userspace and kernel comedi.h files be visually more easily done. 2. This patch also teaches SWIG out to properly wrap these macros and provide them to the user. 3. The redef of static inline NI_* functions as macro functions eases alternative use of comedi.h as an import source for a new ctypes-based python interface for comedilib. include/comedi.h swig/comedi.i commit ba27bddca40d814d2e8066ef83d9d9377c763e6c Author: Ian Abbott Date: 2016-03-10 11:25:09 +0000 include/comedi.h: synced with comedi Signed-off-by: Ian Abbott include/comedi.h commit 3f19af6b53dcd251ad415f95cf4b0af22fea9178 Author: Spencer E. Olson Date: 2016-03-08 22:47:52 -0700 Documents stop_arg!=0 when stop_src=TRIG_NONE This patch documents the new interpretation of stop_arg when stop_src == TRIG_NONE. In the new interpretation, if stop_src==TRIG_NONE, a user may specify that a buffer of finite length (and less than or equal to the maximum buffer size) be repeated indefinitely. For now, only the NI MIO driver implements this new interpretation. All other drivers should continue to force stop_arg==0 when stop_src==TRIG_NONE. In this case, the old behavior is maintained. doc/other.xml commit ea09b60196494a374ec90391079e2b07b308de19 Author: Spencer E. Olson Date: 2016-03-08 22:42:34 -0700 update supported hardware list to include NI PXI-6251 doc/drivers.txt commit 65063d785ea505d8d7903c5a0242b026a31efccc Author: Ian Abbott Date: 2015-11-23 16:04:11 +0000 demo/mmap: support integer wraparound and large sample size Currently, the 'front' and 'back' variables are of type 'int' (signed 32-bit integers). The loop will break when 'front < back', which will happen when more than 'INT_MAX' bytes of data have been produced. Redefine them as 'unsigned int' and also allow 'front < back' which will happen when more than 'UINT_MAX' bytes of data have been produced. Because the buffer size is not necessarily a power of 2, we can no longer just use '(back + i) % size' to get the buffer position corresponding to 'back + i', so introduce a new variable 'bufpos' to keep track of the buffer position. Also allow for subdevices that set the 'SDF_LSAMPL' flag to indicate they use the large (32-bit, 'lsampl_t') sample type instead of the small (16-bit, 'sampl_t') sample type. Also, rename the buffer size variable 'size' to 'bufsize'. demo/mmap.c commit 49f298cf86bd2e66f882de3499be2d20bd947920 Author: Ian Abbott Date: 2015-08-24 17:33:11 +0100 lib/range.c: deal with samples > maxdata when converting to phys By default, comedi_to_phys() and comedi_sample_to_phys() return NAN (not a number) if the raw sample value is 0 or maxdata. Change it to convert any raw sample values above maxdata to NAN. Such raw samples shouldn't occur, but this seems like a sensible thing to do. (Note that the conversion of out-of-range values to NAN behavior can be changed via the comedi_set_global_oor_behavior() function.) lib/range.c commit 3e337824f4c38abef1a37e63bf8b37a081685446 Author: Ian Abbott Date: 2015-08-20 13:02:53 +0100 lib/calib_yacc.y: fix segfault in comedi_parse_calibration_file() Don't call fill_inverse_linear_polynomials(priv.parsed_file) if priv.parsed_file is NULL as that would dereference the NULL pointer leading to a segmentation fault. lib/calib_yacc.y commit abb45335e3f232bd238e2544deaf63cb4c6d259f Author: Ian Abbott Date: 2015-06-08 11:53:50 +0100 doc: Bump to version 0.10.3. doc/comedilib.ent commit 6065b188d19a6d07832acebed6415c7656d879a7 Author: Ian Abbott Date: 2015-06-08 11:52:07 +0100 configure.ac: Bump to 0.10.3 Bump the comedilib libtool version code to 10:3:10, so the comedilib version becomes 0.10.3. configure.ac commit da0fe745fcb9c0061d60d9b3bb14db00e2679904 Author: Éric Piel Date: 2015-06-06 23:34:27 +0200 include: explicitly indicate values are unsigned when it could matter In C, mixing up between int and unsigned int doesn't matter too much for constants because in memory they end up the same. However, in Python, they appear differently. Swig assumes (wrongly?) by default that the constants are signed, intead of being unsigned. For every value equal or greater that 2**31, it matters. For instance CR_INVERT should be 2147483648, but it is -2147483648 in python. By marking the values explicitly unsigned, swig generates the right values. That's excepted for enum, which swig just consider int. So for the only constant in that case, we manually override it in swig. include/comedi.h swig/comedi.i commit cda898efc6366d8e8efa48d36b39110ff4fc88fe Author: Ian Abbott Date: 2015-05-28 13:45:18 +0100 doc: update copyright years doc/comedilib.xml commit 29607869cd334c8d19dffc1525c438992b0c02cc Author: Ian Abbott Date: 2015-05-28 13:35:58 +0100 doc: fix capitalization of National Instruments doc/other.xml commit 16142b8d9ce822df4fdabd58f95d2bf8cb4d8b81 Author: Éric Piel Date: 2015-05-27 18:42:01 +0200 doc: add information about using the National Instrument GPCT The counter interface might eventually be changed to a more generic one. However, for now it's good to have something documented on how things work. doc/other.xml commit 027ca2c5adaf2d7727eda6d40982b78c11b6ff7b Author: Éric Piel Date: 2015-05-18 15:16:32 +0200 doc: fix names of *SOURCE constants to *_SRC Synchronises the content of the documentation with the actually content of the include files. doc/extensions_funcref.txt commit 9683559f511bd05ca4983c357a33bed5a6176dce Author: Ian Abbott Date: 2014-04-10 20:19:43 +0100 comedi_test: fix test_cmd_write_fast_1chan() for big buffer If the comedi data buffer is larger than the total size of the data being written to the buffer in first test_cmd_write_fast_1chan(), the first loop iterates endlessly writing 0 bytes to the buffer. Break out of the first loop once the required amount of data has been written. testing/cmd_1.c commit 207c72b0f94385a13390f85a67955c74ca73f130 Author: Ian Abbott Date: 2014-04-04 15:03:25 +0100 Makefile.am: Use '$(localstatedir)' instead of '${localstatedir}' In the rule to make the 'calibrations' directory during installation, use Make variable '$(localstatedir)' instead of shell variable '${localstatedir}'. Also remove an unnecessary '/' after '$(DESTDIR)' in the rule. Makefile.am commit 2b4d72f00926cc03ab39b9f340e35325b7ec9ceb Author: Ian Abbott Date: 2014-04-04 12:11:35 +0100 Makefile.am: create calibrations directory during installation Add an install-data-local rule that creates the ${localstatedir}/lib/comedi/calibrations during installation. This matches the directory name used by the comedi_get_default_calibration_path() function. Makefile.am commit ae0e6dae04fb9d750afad556c9eb16c034c9e322 Author: Ian Abbott Date: 2014-04-04 11:19:50 +0100 configure.ac: Added AC_PROG_MKDIR_P configure.ac commit f55d30396ab390152ed95ce661e0bb18fc5ef521 Author: Ian Abbott Date: 2014-02-13 11:39:35 +0000 lib/Makefile.am: Add 'comedi_la_LIBADD = -lm' Builds on some systems need the line: comedi_la_LIBADD = -lm in lib/Makefile.am Reported by Jan Banda, using a Linux Mint Petra system with gcc version 4.8.1. lib/Makefile.am commit 371dcc56e6f77c44f9ebf4b178a540b9d0833490 Author: Éric Piel Date: 2014-01-31 15:07:15 +0100 swig: remove comedi_ prefix from the function names python always use the namespace of the library so it was redundant. so what used to be written comedi.comedi_open() can be written comedi.open(). The main trick is to add a special python code that allows for the old names to still be compatible. That avoids to break every single python program previously written. swig/comedi.i commit 1465834a26c87fd8c59a98afaae7a02407927f77 Author: Ian Abbott Date: 2014-01-09 15:23:13 +0000 demo/inpn: correct ranges in range loop The demo is supposed to take one reading for each channel for each range, but was using the range from the command line options instead. Thanks to Daniele Mazzi for spotting the bug! demo/inpn.c commit 6ee63ff0b02240b6f7c0f3908379632c11286462 Author: Ian Abbott Date: 2014-01-07 14:56:22 +0000 README.Git: add minimum required Bison version The minimum required version of Bison when building from git sources is 1.875 or possibly higher. Mention 1.875 as the minimum version for now. README.Git commit 2277e82787fb6fec0732463f5207810b2fe617ce Author: Ian Abbott Date: 2014-01-07 14:28:43 +0000 lib/calib_yacc.y: eliminate priv() casting function Parse parameters are now passed as the correct type instead of `void *`, so the static inline priv() function is no longer needed to cast the pointer to the correct type. lib/calib_yacc.y commit c689eff475a9923b5150084d6adf3c50fd5a714c Author: Ian Abbott Date: 2014-01-07 13:44:23 +0000 lib: replace YYPARSE_PARAM and YYLEX_PARAM In the Bison source calib_yacc.y, replace the use of YYPARSE_PARAM and YYLEX_PARAM C macros with the %parse-param and %lex-param declarations. I still need a C macro in combination with %lex-param for it to work, so I'm not sure I'm doing it right! Also correct the %pure_parser declaration which should be %pure-parser (i.e. the underscore should be a dash). This has a knock-on effect for the yyerror() function, which now needs an extra parameter. lib/calib_yacc.y lib/libinternal.h commit e8cefc0a0d21a737f0fd426356748f004754ec7e Author: Ian Abbott Date: 2013-11-08 13:12:01 +0000 demo/ao_mmap: remove spurious 'i' from an output message demo/ao_mmap.c commit 1f0020e1083d252d9403df72a600441836beadf9 Author: Ian Abbott Date: 2013-11-08 13:06:38 +0000 demo/ao_mmap: remove msync() call The msync() call doesn't seem to work on Comedi devices, and seems a bit pointless anyway, as it is meant for use on files with a backing store. Remove it. demo/ao_mmap.c commit 5f3b60573e55d379b943a45159180196d27b2e90 Author: Ian Abbott Date: 2013-08-21 11:06:24 +0100 m4/am-check-python-headers.m4: Try python-config --includes Some systems (e.g. Arch Linux) put the Python C headers in a strange place, so try and run `$PYTHON-config --includes` first to find the -I options to pass to the C compiler. Fall back to the old method if it fails. Thanks to Darrell Enns for reporting the problem and suggesting a solution. I changed it a bit. m4/am-check-python-headers.m4 commit 155529234a0919511ca5f28ec4e4caadb3f6c293 Author: Ian Abbott Date: 2013-07-23 17:43:19 +0100 doc/funcref: fixed a couple of minor mark-up issues. doc/funcref commit 18fc6139882d580f8755f386a4dc6084cc8e6f80 Author: Ian Abbott Date: 2013-05-14 17:35:49 +0100 include/comedi.h: synced with comedi Signed-off-by: Ian Abbott include/comedi.h commit 6c5d8834819351f8d5064709580bcd6e44e9feae Author: Ian Abbott Date: 2013-05-14 14:25:50 +0100 demo: tut3.c: add 'return 0;' to end of main() function. demo/tut3.c commit 0404ed50dd4f827ac95bc129689d768e798f4f0a Author: Ian Abbott Date: 2013-05-14 12:50:14 +0100 doc/driverwriting.xml: editing Kbuild Add a step to the instructions for integrating a new driver into comedi. The Kbuild file needs to be edited. doc/driverwriting.xml commit 383919639adc4dd17ea6ae0fd143add092c5246a Author: Ian Abbott Date: 2013-05-07 13:43:11 +0100 demo/sender: add error checking Check for errors from comedi_dio_config() and comedi_do_insnlist(). demo/sender.c commit c413483a6694f782e1d2e154d3c37acf74d5500f Author: Ian Abbott Date: 2013-05-07 13:29:54 +0100 demo/dio: exit with failure if comedi_dio_config() fails. demo/dio.c commit a19f4d463fe26cd49191c07ed7a17f0d79855a0b Author: Ian Abbott Date: 2013-05-07 13:24:03 +0100 demo/choose_routing: remove unused variable 'period_ns'. demo/choose_routing.c commit 82ee0c80e2fd59a19c34ea0c7614fa02a1633ea2 Author: Ian Abbott Date: 2013-05-07 13:15:54 +0100 testing: remove unused variables in comedi_test program Remove the global variable 'capabilities' which is set to 0 by the get_capabilities() function but not used anywhere else. Remove the 'type' and 'flags' local variables from get_capabilities() which are set to the return values of comedi_get_subdevice_type() and comedi_get_subdevice_flags() but never used. Remove the 'tmp' local variable from test_segfault(); it was involved in a volatile memory access to test for segmentation faults. Still do the volatile memory access but don't use the variable. testing/main.c testing/mmap.c commit fdf9d2d98bb31dbc95a14d4b403e4e0836fb9a9a Author: Ian Abbott Date: 2013-05-07 13:01:08 +0100 lib/data.c: remove unused variables Remove unused variable 's' from comedi_data_write() and comedi_data_read_delayed(). lib/data.c commit 0868eccbf7ce7416170d3f5c739d2fd08fd3975e Author: Ian Abbott Date: 2013-05-07 12:48:11 +0100 lib: remove cached cmd_timed and cmd_timed_errno from subdevice Remove the cmd_timed and cmd_timed_errno members from the internal struct subdevice_struct. cmd_timed_errno is checked but never set, so it will always be 0 and the code that uses it is buggy as it returns the value of s->cmd_mask_errno if s->cmd_timed_errno is non-zero and sets s->cmd_mask_errno on failure. It shouldn't be setting s->cmd_mask_errno at all. Since the generic timed command could depend on the length of the channel list, don't bother caching the result, and don't set s->cmd_mask_errno on failure. lib/cmd.c lib/comedi.c lib/libinternal.h commit 2811aea03894e1306f9426c78a4b8b8a6f906c56 Author: Ian Abbott Date: 2013-05-07 12:32:26 +0100 lib: check some malloc/calloc/realloc failures Some calls to malloc(), realloc() or calloc() do not check the result. Do so. Also call internal function libc_error() if they fail to set the result for comedi_errno(). lib/calib_yacc.y lib/cmd.c lib/sv.c commit df2466c0f6efc0a1b4f71062604dd3fd332863ec Author: Ian Abbott Date: 2013-04-15 12:26:05 +0100 doc: add missing -lm option to command line for compiling tut1 doc/tutorial.xml commit ada711164c2c7c447faf606a3a946def7f4e56b2 Author: Ian Abbott Date: 2013-03-21 16:36:42 +0000 doc: Bump to version 0.10.2. doc/comedilib.ent commit d9b2a47a32efee78386781fbbc15eb431037dcca Author: Ian Abbott Date: 2013-03-21 16:33:08 +0000 configure.ac: Bump to 0.10.2 Bump the comedilib libtool version code to 10:2:10, so the comedilib version becomes 0.10.2. configure.ac commit ddec51884bf194b1f2c02cd5e27085eabc788093 Author: Ian Abbott Date: 2013-03-21 16:27:56 +0000 include/comedi.h: synced with comedi Signed-off-by: Ian Abbott include/comedi.h commit f4e228e23162eca185d593a2c736645ec50ab716 Author: Ian Abbott Date: 2013-03-21 15:49:18 +0000 lib/calib_lex.l: Add #define YY_NO_INPUT to C pre-amble This suppresses a compiler warning about 'input' defined but not used. lib/calib_lex.l commit cc0c9e740579640ef92ee5e7d37d6453cb2c8e9c Author: Ian Abbott Date: 2013-03-21 15:36:14 +0000 lib/calib_yacc.y: Move comedi_parse_calibration_file() Move the comedi_parse_calibration_file() function definition to the bottom of the file. It calls calib_yyparse() and the declaration might not be in scope since we removed the declaration from "lib/libinternal.h", but we know it will be declared somewhere above the bottom of the generated "lib/calib_yacc.c" above the new location of comedi_parse_calibration_file(). lib/calib_yacc.y commit 90ce9a94bdb6b26a9cbffdf2e9922b0b1f668a65 Author: Ian Abbott Date: 2013-03-21 15:12:35 +0000 lib: fix calib_yyparse() conflict For newer versions of Bison, the declaration of our calib_yyparse() function in "lib/libinternal.h" clashes with that in the generated "lib/calib_yacc.h". Remove the declarations of calib_yyerror() and calib_yyparse() from "lib/libinternal.h" and declare them in "lib/calib_yacc.c". lib/calib_yacc.y lib/libinternal.h commit 3dfae5a6ee6040d294493f3856a3949e1b602af0 Author: Ian Abbott Date: 2013-01-21 16:15:30 +0000 configure.ac: Replaced AM_CONFIG_HEADER() with AC_CONFIG_HEADERS() AM_CONFIG_HEADER is obsolete and doesn't work with Automake 1.13. Use AC_CONFIG_HEADERS instead. configure.ac commit af8ab01d906ba7b0579d0e0de68102bd197ae9ee Author: Ian Abbott Date: 2013-01-21 16:06:40 +0000 configure.ac: Move AS_LIBTOOL() and SCXI_SO_VERSION Move the call to AS_LIBTOOL() to avoid warnings from automake 1.12.6. Move SCXI_SO_VERSION as it is nearby! On Gentoo Linux: $ WANT_AUTOMAKE=1.12 ./autogen.sh configure.ac:101: warning: LT_INIT was called before AM_PROG_AR /usr/share/aclocal-1.12/ar-lib.m4:13: AM_PROG_AR is expanded from... configure.ac:101: the top level configure.ac:101: warning: AC_PROG_LIBTOOL was called before AM_PROG_AR /usr/share/aclocal-1.12/ar-lib.m4:13: AM_PROG_AR is expanded from... configure.ac:101: the top level configure.ac:101: warning: LT_INIT was called before AM_PROG_AR aclocal.m4:8669: AM_PROG_AR is expanded from... configure.ac:101: the top level configure.ac:101: warning: AC_PROG_LIBTOOL was called before AM_PROG_AR aclocal.m4:8669: AM_PROG_AR is expanded from... configure.ac:101: the top level configure.ac commit af00348ee77d3333f072970109a9e2323ce40086 Author: W. Trevor King Date: 2013-01-19 02:32:00 +0000 configure.ac: Add AM_PROG_AR for automake-1.12 This is what automake told me to do: $ ./autogen.sh ... automake: warnings are treated as errors /usr/share/automake-1.12/am/ltlibrary.am: warning: 'libcomedi.la': linking libtool libraries using a non-POSIX /usr/share/automake-1.12/am/ltlibrary.am: archiver requires 'AM_PROG_AR' in 'configure.ac' lib/Makefile.am:2: while processing Libtool library 'libcomedi.la' ... autoreconf-2.69: automake failed with exit status: 1 AM_PROG_AR is new in automake-1.11.2. For further details, see: http://lists.gnu.org/archive/html/bug-automake/2012-05/msg00009.html configure.ac commit 977d9057a1199e352c335b82dfc7ef1835e3c52b Author: Ian Abbott Date: 2012-10-29 17:22:29 +0000 doc: Add Éric Piel to comedilib manual authors and copyright doc/comedilib.xml commit df124b2ba906f2a2a7a7da77e7b78359853a22e3 Author: Ian Abbott Date: 2012-10-29 17:11:20 +0000 AUTHORS: Add Éric Piel Éric started a section on language bindings (for Python in particular) to the Comedilib manual. AUTHORS commit 7d4ad9ad15b9cd8620c987712fbaa38dc51b513f Author: Éric Piel Date: 2012-10-29 17:08:09 +0000 doc: add a section about Python bindings This section goes into a "Language bindings" section where description for Perl and Ruby could also go. doc/Makefile.am doc/bindings.xml doc/reference.xml commit e185d974baf369399ffdbe8835e38f411951d1f9 Author: Ian Abbott Date: 2012-10-15 16:18:47 +0100 comedi_board_info: improve display of external ranges. The units for a range with internal unit code `RF_EXTERNAL | UNIT_volt` is currently displayed as " (unknown unit 256)", for example an external bipolar voltage range -1 to 1 is displayed as: [-1 (unknown unit 256),1 (unknown unit 256)] Change it to be displayed as: [-1*EXT V,1*EXT V] comedi_board_info/comedi_board_info.c commit b1824dba8d6200dbc43373e7b68590b769a80519 Author: Ian Abbott Date: 2012-10-15 15:52:47 +0100 comedi_board_info: reset n_chans_for_generic_timed for each subdevice Add variable `def_n_chans_for_generic_timed` to hold the preferred number of channels to use in calls to `comedi_get_cmd_generic_timed()`. Reset the `n_chans_for_generic_timed` variable to this value each time around the loop for each subdevice before clipping the value to the number of channels the subdevice has. comedi_board_info/comedi_board_info.c commit 1994c8d96ce6a88c35d86d600ff504aa06bb6cf1 Author: Ian Abbott Date: 2012-10-15 15:47:46 +0100 comedi_board_info: increased length of strtmp[] `strtmp` is currently declared as `char strtmp[16]`, but that may be too short for the calls to `unit_to_desc()` when the type of unit is unknown. Increase its length to 32. comedi_board_info/comedi_board_info.c commit ba3117525a69751de3d996818492ab7ac460c884 Author: Ian Abbott Date: 2012-08-28 14:19:09 +0100 doc/Makefile.am: fix maintainer-clean-local rule. The maintainer-clean-local rule was removing the wrong file for comedilib.pdf. doc/Makefile.am commit bafead2b6d377aa967b2bff463d8aa1e868cb30f Author: Ian Abbott Date: 2012-08-28 12:08:47 +0100 doc: Bump to version 0.10.1. doc/comedilib.ent commit 2c810c12e31794402455dfb985ce1e2c9e60e5eb Author: Ian Abbott Date: 2012-08-28 11:54:39 +0100 doc/install.xml: Describe comedi_num_legacy_minors. Add some info to the Install section about reserving devices for manual configuration using the comedi_num_legacy_minors module parameter. doc/install.xml commit 6bd3e85bdfdb88de21ea4d6fd5ffdbf96ca19470 Author: Ian Abbott Date: 2012-08-28 11:52:42 +0100 etc/udev: Add z99_comedi.rules to EXTRA_DIST Mark z99_comedi.rules to be added to the released sources, but don't install it. etc/udev/Makefile.am commit 604a4dd8aaa497d8ea05dbe6bac63cc4304d51ed Author: Ian Abbott Date: 2012-08-28 10:41:34 +0100 udev: Add commented out rule to set group owner to "iocard". There is already a commented out rule in the example udev rules file "z99_comedi.rules" to set the mode to 0660 and set the group owner to "comedi". Add an almost identical commented out rule to set the group owner to "iocard" as this is favoured by Debian. etc/udev/z99_comedi.rules commit a3fe997aed486e7ff4da3f796655e1acaa4c3697 Author: Ian Abbott Date: 2012-08-28 10:12:50 +0100 README.Git: Add dblatex to optional dependencies README.Git commit c331390b149c92d7658a709839834eb85f7a9047 Author: Ian Abbott Date: 2012-08-22 12:48:53 +0100 configure.ac: Minor correction to example package version sequence. Removed a stray '.'. configure.ac commit 94ee52784504946839405eaa33f50d9a2dd49d15 Author: Ian Abbott Date: 2012-08-22 12:20:03 +0100 configure.ac: Expand rules for setting package/library version. The comedilib manual version is usually only updated if the manual has changed since the previous release (although it ought to change anyway if any library interfaces have changed). Allow a lower-case letter (or sequence of letters) to be appended to the comedilib package version if the only changes are outside the library sources and language bindings. configure.ac commit 3f8ba17c764d7483528608eaf498813e75e8e3be Author: Ian Abbott Date: 2012-08-22 10:09:58 +0100 configure.ac: Bump to 0.10.1 Bump the comedilib libtool version code to 10:1:10, so the comedilib version becomes 0.10.1. The comedilib manual version hasn't been updated. configure.ac commit 2b8c2f8087d69be00c33a20d33d80106efa7f8a6 Author: Anders Blomdell Date: 2012-08-22 08:21:56 +0100 comedi_open has file descriptor leak If something fails after a succesful open, cleanup fails to close the file. The code cleanup: if(it) free(it); needs to be replaced with something like: cleanup: if (it) { if (it->fd >= 0) { close(it->fd); } free(it); Regards Anders Blomdell lib/comedi.c commit 50ad010b31758b8868fe92e287606e8d8df3efbc Author: Ian Abbott Date: 2012-05-15 14:31:08 +0100 configure.ac: Add reminder comment for updating documentation version. The comedilib manual mentions the version of comedilib it applies to. This is not done automatically; it is done by editing "doc/comedilib.ent". Add a comment to configure.ac as a reminder. configure.ac commit 96078fcadab142b4b6f540baaa2fbf23e1e4f343 Author: Ian Abbott Date: 2012-05-14 17:00:35 +0100 doc: Add Comedilib version number In "comedilib.ent", Add an XML entity 'comedilib_version' expanding to the Comedilib version '0.10.0'. This is hard-edited in rather than set dynamically. Setting it dynamically would be nice but producing it from an AC_OUTPUT() file isn't all that nice as it would end up in the 'build' tree and we'd some ugly 'make' rule to copy it to the 'source' tree. For now, just edit it manually as required. At least having it as an entity means it only needs to be set in a single documentation file! In "comedilib.xml", change the subtitle to mention Comedilib and the version number, using the comediliv_version entity. doc/comedilib.ent doc/comedilib.xml commit 648fac47723bc3578a11d88314a2b4769268f511 Author: Ian Abbott Date: 2012-05-14 15:04:10 +0100 demo/tut3.c: memset options to 0 before modifying options.verbose was used uninitialized. demo/tut3.c commit d1ad074b8c961cd70802d0270c22e5ad7b9620e7 Author: Ian Abbott Date: 2012-05-14 14:54:33 +0100 demo/tut3: Removed a couple of unused variables. demo/tut3.c commit 51dbae239bbc8adaf6c2aaad1aedecf241e5dbdd Author: Ian Abbott Date: 2012-05-14 14:53:13 +0100 demo/pwm: Removed an unused variable. demo/pwm.c commit 68e11852cf89d7e5a7ceabb1088778aa6d81597f Author: Ian Abbott Date: 2012-05-14 14:51:06 +0100 demo/pwm: Bug fix - should have called comedi_close() The code called close(device) instead of comedi_close(device) where device came from comedi_open. demo/pwm.c commit 77e2628600a9419e240fa85b2672a120c37cbeae Author: Ian Abbott Date: 2012-05-14 14:45:37 +0100 demo/choose_clock: Fix a printf. "Selecting master clock %d for channel %d on subdevice %d.\n" The %d after subdevice was missing although the corresponding parameter in the argument list was present. demo/choose_clock.c commit 0f77a928308ed21ae3a91800a2cb60b812ba70e2 Author: Ian Abbott Date: 2012-05-14 14:35:23 +0100 comedi_board_info: Moved man page into ../man I'm not sure if all man pages should go in the general 'man' subdirectory or a more specific subdirectory, but as the general 'man' subdirectory already contained a man page for comedi_config (which has its own source subdirectory), I moved the man page for comedi_board_info there for consistency. Also changed the EXTRA_DIST line in man/Makefile.am. comedi_board_info/Makefile.am man/Makefile.am man/comedi_board_info.1 commit 8a63ce2ecc5e698c080573d02767e93af4c02bc7 Author: Ian Abbott Date: 2012-05-14 14:10:13 +0100 doc/drivers.txt: Minor correction for USB-DUX-FAST. The Devices line still showed USB-DUX-FAST as USB-DUX. doc/drivers.txt commit bf8bd73b6bd4f47deaebba903ff1877a5fe8a189 Author: Bernd Porr Date: 2012-05-13 15:00:34 +0100 Updated the drivers.txt doc/drivers.txt commit 02b796adde144c33597f4e0f9a29e4dcc7413a17 Author: Bernd Porr Date: 2012-05-13 11:09:45 +0100 Changed my e-mail address to the linux-usb-daq one to be consistent with the driver e-mails which I also changed to the company e-mails adress. doc/comedilib.xml commit b39b8cb8a40e9ade1a0c2008f5a2075c1e26a83e Author: Ian Abbott Date: 2012-05-11 12:56:55 +0100 doc/funcref: Fix "Returns:" for comedi_to_physical. There was a stray space before the "Returns:" heading so it wasn't processed as intended. Also, there was an empty line above it leading to an empty paragraph in the DocBook funcref.xml. doc/funcref commit d7e611cc6f8da33647521abbcd5a67b28a794a9a Author: Ian Abbott Date: 2012-05-11 12:45:29 +0100 doc/funcref: Add links between comedi_to_phys and comedi_set_global_oor_behavior. doc/funcref commit 168fcd6ed6fc85490b6d0b098274917dd9d96f57 Author: Ian Abbott Date: 2012-05-11 12:34:31 +0100 doc/funcref: Moved in comedi_set_global_oor_behavior Moved function comedi_set_global_oor_behavior out of the deprecated section as it is associated with the comedi_to_phys function. doc/deprecated_funcref.txt doc/funcref commit cda5011a87883e9e44b4474e3db1041fc61c13ab Author: Bernd Porr Date: 2012-05-11 11:15:45 +0100 Moved comedi_to_phys and comedi_from_phys back to the main section. Both comedi_to_phys and comedi_to_physical complement each other. Comedi_to_phys is linear and very fast whereas comedi_to_physical is more precise but requires polynomials and calibration data. doc/deprecated_funcref.txt doc/funcref commit 034f98154f562319c72ac4f3f27382e2d6ecf7e8 Author: Ian Abbott Date: 2012-05-10 14:33:33 +0100 doc/comedilib_html_config.xsl: Use numbered sections. Change DocBook XSL parameters for HTML output to use numbered sections (like it was before we switched from SGML to XML) and to use just the numbers in cross references, rather than number and/or title. doc/comedilib_html_config.xsl commit f415b87538be29a86c4b700eac6676b50091cf1d Author: Ian Abbott Date: 2012-05-10 14:14:56 +0100 doc/intro.xml: Replace a link to figure 1 with an xref. doc/intro.xml commit ac090c7bdfcaab4c741c5100a18d93b336694305 Author: Ian Abbott Date: 2012-05-10 13:49:57 +0100 demo/python/mmap.py: Fix buffer wraparound bug. Fix bug reported by Ross Williamson where the code does not deal with buffer wraparound within a chunk of data. demo/python/mmap.py commit dbe3c77a3d692c52c2999683058e6c5eaabc117b Author: Ian Abbott Date: 2012-05-09 18:41:51 +0100 doc/other.xml: Add extra details about range and aref. Add extra detail to the section on acquisition functions about the range and aref parameters, and describe the comedi_range type. The whole section is still a bit higgledy-piggledy and could do with some rearrangement one day! doc/other.xml commit 98869fa36daa7ffb50733dd4aef3c2a197961c49 Author: Ian Abbott Date: 2012-05-09 17:40:34 +0100 doc/other.xml: Small DocBook mark-up fix. Use proper mark-up for sqrt function in slowly varying inputs section. doc/other.xml commit 2c729dbb346d6e7135762df6899e13e86b28e893 Author: Ian Abbott Date: 2012-05-09 17:28:58 +0100 doc/comedilib_dblatex_config.xsl: Set function.parens to "1". Persuades dblatex to output parentheses for all the tags, even those without tags inside. doc/comedilib_dblatex_config.xsl commit 24d02fde414b165510d81cc53528e1f4138e8e33 Author: Ian Abbott Date: 2012-05-09 17:22:31 +0100 doc/comedilib_html_config.xsl: Set function.parens to "1". This makes sure the HTML output for foobarbaz includes parentheses, although it doesn't seem to add empty parentheses after a plain foo which perhaps it should. doc/comedilib_html_config.xsl commit b41732fa6212b0cbbcbf9cd14fff58a6bc334535 Author: Ian Abbott Date: 2012-05-09 17:12:23 +0100 doc/reference.xml: Added CR_PACK_FLAGS() Added description of CR_PACK_FLAGS() macro and the various flag bits. doc/reference.xml commit c3ba569f877ba39230e92443b724bf3f4124f72b Author: Ian Abbott Date: 2012-05-09 16:05:02 +0100 doc/glossary.xml: A few DocBook mark-up changes. doc/glossary.xml commit 4a6276c257637b189e419f2da90f6f078bf3cecc Author: Ian Abbott Date: 2012-05-09 15:50:17 +0100 doc/driverwriting.xml: Various changes. Some DocBook mark-up changes. Also avoided absolute path-names for sources as people tend to put them in different places! Also changed instructions for submitting drivers for review. doc/driverwriting.xml commit 382f445b4a091aa964c19690587bdc3dbd6f8e3a Author: Ian Abbott Date: 2012-05-09 14:45:18 +0100 doc/extensions_funcref.txt: Some DocBook mark-up changes. doc/extensions_funcref.txt commit 054ceeb77e531a9f67429332288af38853555411 Author: Ian Abbott Date: 2012-05-09 14:16:23 +0100 doc/error_funcref.txt: Some DocBook mark-up changes. doc/error_funcref.txt commit 32047d460bac65336095647c38268d02d6f54c06 Author: Ian Abbott Date: 2012-05-09 12:32:05 +0100 doc/dio_funcref.txt: Some DocBook mark-up changes. doc/dio_funcref.txt commit 4566a4a433284f9deb6b2e342e473cab1e01c762 Author: Ian Abbott Date: 2012-05-08 18:44:48 +0100 doc/deprecated_funcref.txt: Some DocBook mark-up changes. doc/deprecated_funcref.txt commit c1cd8025465ae3fa3beb9ec146f3184b14d7db3b Author: Ian Abbott Date: 2012-05-08 18:08:56 +0100 doc/calibration_funcref.txt: Some DocBook mark-up changes. doc/calibration_funcref.txt commit 09106917dee2ab4db1d7619e75b5962cb0cfe3f8 Author: Ian Abbott Date: 2012-05-08 17:08:16 +0100 doc/command_funcref.txt: Some DocBook mark-up changes. doc/command_funcref.txt commit 1c64dcb1b57a37fd5f0968c1b61a1841b0609592 Author: Ian Abbott Date: 2012-05-08 16:51:49 +0100 doc/funcref: Some DocBook mark-up changes. doc/funcref commit eab51a0d941a2e2f82922ea527ef577ebb63a475 Author: Ian Abbott Date: 2012-05-08 14:12:11 +0100 doc/install.xml: Fixed a link. doc/install.xml commit 5f95a358a6f8fa5bfc9dede3d2f712715007b4b7 Author: Ian Abbott Date: 2012-05-08 14:04:55 +0100 doc/reference.xml: Minor change. Used a proper cross reference to driver structures. doc/reference.xml commit 48740913646eda7fb5be39fbe0d30cad710d7524 Author: Ian Abbott Date: 2012-05-08 13:58:27 +0100 doc/other.xml: More DocBook mark-up changes. More changes, mostly adding tags. doc/other.xml commit 4bbaa29b410ad9b5d15a1a8f248b26a196ff6443 Author: Ian Abbott Date: 2012-05-08 12:25:28 +0100 doc/comedilib.ent: Got rid of a couple of redundant entities. Got rid of the 'hellip' and 'uuml' entities in favour of predefined versions of these entities. doc/comedilib.ent commit 5d91ff685d0fb2ad0ea4a7071667ecef747a6d86 Author: Ian Abbott Date: 2012-05-08 12:11:55 +0100 doc/install.xml: A few DocBook mark-up changes. doc/install.xml commit a814061d884785818ecc672ceb876f50d6f44f51 Author: Ian Abbott Date: 2012-05-08 11:35:22 +0100 doc/tutorial.xml: A few DocBook mark-up changes. doc/tutorial.xml commit df4d8963de1c105cd57111a1a4419a226bd5df80 Author: Ian Abbott Date: 2012-05-04 18:45:33 +0100 doc/other.xml, reference.xml: Slowly varying inputs and comedi triggers Mention that the stuff that relies on the COMEDI_TRIG ioctl, including the slowly varying input (comedi_sv_...) functions no longer work with current versions of the Comedi kernel layer. doc/other.xml doc/reference.xml commit 8fae5ac58c127830a7fa49c598f4ae88ffb287c1 Author: Ian Abbott Date: 2012-05-04 18:29:47 +0100 doc/reference.xml: Improve description of comedi_insnlist... ... by adding a link to the comedi_do_insnlist function. doc/reference.xml commit 683e685c9f8bf15d6ef336d51e78814cd2a52969 Author: Ian Abbott Date: 2012-05-04 18:20:42 +0100 doc/reference.xml: Removed some comedilib internals. Removed subdevice_struct as it is internal to comedilib. Removed struct comedi_t_struct, leaving only the comedi_t typedef as applications only see it as a pointer to an opaque, incomplete type. doc/reference.xml commit c63732907e6a963dee574e0272a8f12221cfad97 Author: Ian Abbott Date: 2012-05-04 18:10:55 +0100 doc/reference.xml: More DocBook mark-up changes. doc/reference.xml commit a3c29c87a8fd6e19196d7744fb02eecc1ae3aa34 Author: Ian Abbott Date: 2012-05-04 16:32:35 +0100 doc: Use a stylesheet for dblatex Add comedilib_dblatex_config.xsl stylesheet and pass it to dblatex when producing PDF output. The current version of the stylesheet doesn't make much difference to the output, but it's somewhere we can put stuff later. We probably want to do something similar for the other PDF backends, but those are currently broken anyway. doc/Makefile.am doc/comedilib_dblatex_config.xsl commit 9bd59e1defbd33edbe180c9e604d5433902a2134 Author: Ian Abbott Date: 2012-05-03 19:56:59 +0100 doc/other.xml: Moved a few tags around and minor changes. Moved tags inside , , etc. tags so fonts stay a bit more consistent. doc/other.xml commit 2d82ee25b319e06ca4217b9736c672fcb6d44ce5 Merge: c1a454b 048c280 Author: Ian Abbott Date: 2012-05-03 13:06:46 +0100 Merge branch 'master' of git://comedi.org/git/comedi/comedilib commit 048c280a9a035da3aa9c6d1e4dae1ea1fa662b52 Author: Bernd Porr Date: 2012-05-03 02:11:14 +0100 Removed a para from the section about proc which mentioned an NI card but that's now the dux board from above actually. doc/install.xml commit ee16e47509fb2dab2581e729f59ea880595e4b71 Author: Bernd Porr Date: 2012-05-03 02:07:30 +0100 Just spotted that the documentation also talks about board_info. I've updated it as well: explained the new command comedi_board_info. doc/install.xml commit 2d0ed0442c7c668b0cf8aee084382cb916a3cd92 Author: Bernd Porr Date: 2012-05-03 01:24:22 +0100 Added a couple of sentences about async acquisition and the two modes cards do it and then mentioned our new board_info. doc/tutorial.xml commit 47b3edd6e2845d92ad6ebd6be856ce570a9799f7 Author: Bernd Porr Date: 2012-05-03 01:03:16 +0100 Changed some of the descriptions for the SDF flags which were a bit misleading. comedi_board_info/comedi_board_info.c commit 33f3a2eada793de92aab3f133ccc1fe45ad37063 Author: Bernd Porr Date: 2012-05-03 00:52:13 +0100 Just what I said in the git log is now also actually in the man page namely that the frequency option is only there for debugging. comedi_board_info/comedi_board_info.1 commit c22d498dc06f1f9bd3d3bb07ed98b1c92d789284 Author: Bernd Porr Date: 2012-05-03 00:39:04 +0100 Added comedi_board_info which has been inspired by the original info in the demo directory. I've made it a bit more verbose and also took into account that now the generic_timed command takes more than one channel so that a user can experiment which sampling rates are possible with different channel numbers. I've also added an option to set the sampling rate for the generic_timed command. That sould actually not be needed but I'm sure there are drivers out there which do not correct the sampling rate downwards automatically. Makefile.am comedi_board_info/Makefile.am comedi_board_info/comedi_board_info.1 comedi_board_info/comedi_board_info.c configure.ac commit 74a1207a29b59e2b0b38052b3333e556b537b3b7 Author: Bernd Porr Date: 2012-05-02 18:40:07 +0100 Added info that '-n' is used to select the waveform. demo/ao_waveform.c commit 58e0e21ea975088446d3bd21f98b3996de6febc4 Merge: 90ea57b 708b802 Author: Bernd Porr Date: 2012-05-02 17:59:46 +0100 Merge branch 'master' of ssh://comedi.org/git/comedi/comedilib commit 90ea57b2e964f10f5b2d9736ec86c37c07cf9e0f Author: Bernd Porr Date: 2012-05-02 17:58:15 +0100 Created a PWM demo using the newly introduced defines to manipulate PWM frequency. demo/Makefile.am demo/README demo/pwm.c commit c1a454bb40dff971246e58ea3577c15e9fa5f6f1 Author: Ian Abbott Date: 2012-05-02 15:47:59 +0100 doc/other.xml: More fiddling about. More documentation tidy-ups. I'll probably get bored eventually! doc/other.xml commit 708b802811611b04828b51c98e5a131a1b32a207 Author: Ian Abbott Date: 2012-05-02 13:04:24 +0100 doc/comedilib.xml: Add myself (Ian Abbott) to list of authors. doc/comedilib.xml commit ad6a93952f384011bb3f44356aebd6916d8be666 Author: Ian Abbott Date: 2012-05-02 13:01:41 +0100 doc/tutorial.xml: Fix a broken link. doc/tutorial.xml commit 6892b4046874e107778b927da927d47e1566a3a4 Author: Ian Abbott Date: 2012-05-02 12:54:46 +0100 doc/other.xml: Use comedi_dio_bitfield2 instead of comedi_dio_bitfield. Rework text to use comedi_dio_bitfield2 as comedi_dio_bitfield is marked as deprecated elsewhere in the document. doc/other.xml commit aaa4514804b46062ad117fd5cfee65d21dc38a2b Author: Bernd Porr Date: 2012-05-01 19:41:38 +0100 I've added a bit more "meat" to the asynchronous acquisition section and added myself to the authors section. doc/comedilib.xml doc/tutorial.xml commit 14d401376f3fe4c003af89b4683b4e8a0d245380 Author: Ian Abbott Date: 2012-05-01 18:03:57 +0100 configure: Avoid PDF generation by default if don't have dblatex Changed handling of --with-pdf-backend[=yes] to avoid picking the default xmlto backend for PDF generation because it's broken. The default xmlto backend for PDF generation can still be selected using --with-pdf-backend=default if you really want to try it. configure.ac commit 5392632a1c93ca09f0fc3bcfd71936b258a6833c Author: Ian Abbott Date: 2012-05-01 17:42:15 +0100 doc/funcref: Added missing comedi_data_read_n There was a broken link to the comedi_data_read_n function from elsewhere, so we'd better add a section for it. doc/funcref commit 7655653dafccc7cb4e6b68295fc652e31db59061 Author: Ian Abbott Date: 2012-05-01 17:14:27 +0100 doc: Use ansi style funcsynopsis for html output. Set XSL parameter "funcsynopsis.style" to "ansi" in the XSL stylesheet used for HTML output (comedilib_html_config.xsl). doc/comedilib_html_config.xsl commit cc82998ec7b8fb43ec5e2eff33dcf499f70cc9d9 Author: Ian Abbott Date: 2012-05-01 16:54:39 +0100 doc/mkref: Add some refmiscinfo for man pages Make the man pages a bit neater. doc/mkref commit 1d351bfa0472b1fe7090b480edf367934e63aad7 Author: Ian Abbott Date: 2012-05-01 15:42:07 +0100 doc/other.xml: Some DocBook markup changes. doc/other.xml commit 5fdc15c3020c9a2d6da125f8cdc0915df12dadf2 Author: Ian Abbott Date: 2012-05-01 12:51:08 +0100 doc: A few whitespace tweaks in program listings demo/tut3_part.c doc/other.xml commit c938e2bf609182beabd4ac7298cd330d0f35a0ad Author: Ian Abbott Date: 2012-05-01 11:48:46 +0100 doc/other.xml: Replaced simplelists Replaced some simplelists with variablelists to fix some dblatex layout problems. doc/other.xml commit df6a97ec6c1175086cf8c7e912b0b4ffaad3fad9 Author: Bernd Porr Date: 2012-04-27 01:37:33 +0100 I've updated the manual in the section configuration and also updated the tutorial. I've simplified the tut2.c by using comedi2phys instead of comedi2physical. The use of polynomials as a 2nd comedi program is a bit too difficult for a novice and might deter the user to dig deeper into the coding. Also, I've added tut3.c which is a stripped down version of cmd.c and of that again the relevant lines for the handbook to save space. demo/Makefile.am demo/tut2.c demo/tut3.c demo/tut3_part.c doc/install.xml doc/tutorial.xml commit 12155822bc82cb45c9f36506a41a136a45a7cfa6 Author: Bernd Porr Date: 2012-04-26 23:24:50 +0100 Removed old hotplug install which is no longer used at all and just left udev as the only hotplug mechanism. I've also added an option to disable the installation of the firmware. This is useful for debian or ubuntu packages where the firmware is now provided by a package accompanying the staging kernel. All usbdux files are included in the kernel firmware packages. Package maintainers should use the --disable-firmware option. configure.ac etc/hotplug/usb/usbdux/Makefile.am etc/hotplug/usb/usbduxfast/Makefile.am etc/hotplug/usb/usbduxsigma/Makefile.am commit e7a3e54042e692a5df1fa26b9907f9eba7ed8d36 Author: Ian Abbott Date: 2012-04-25 18:34:54 +0100 doc/other.xml: Make table of configuration instructions less ugly. The PDF output of the table of configurations was awful. Fiddled with the column widths a bit and simplified the layout "Meanings of data[1],..." column to allow it to wrap. doc/other.xml commit be4e3b40076ff762fe8cd58a6d2d9e8da127558c Author: Ian Abbott Date: 2012-04-25 17:14:16 +0100 configure: Allow choice of backend for PDF generation. Add --with-pdf-backend=[yes|no|dblatex|fop|default] option which defaults to "yes". This controls the option passed to 'xmlto' to generate PDFs. If set to "yes" (the default) it looks for 'dblatex' and uses it as the backend for 'xmlto' if found, otherwise 'xmlto' will use the default backend. If set to "no" (same as --without-pdf-backend), PDF generation is disabled. If set to "dblatex" it looks for 'dblatex' and uses it as the backend for 'xmlto' if found, otherwise PDF generation is disabled. If set to "fop" it looks for 'fop' and uses it as the backend for 'xmlto' if found, otherwise PDF generation is disabled. If set to "default", 'xmlto' will use the default backend. configure.ac doc/Makefile.am commit 08448172d8b2877774cd28c1b6fa0f3d8e9ff8a5 Author: Ian Abbott Date: 2012-04-23 18:12:41 +0100 doc/drivers.txt: Rebuilt from comedi Rebuilt "doc/drivers.txt" using "make Documentation/comedi/drivers.txt" in the Comedi package. Note: this scans the driver sources included with the comedi.org Comedi package, not the Linux "staging" Comedi sources, so some newer, staging-only drivers are missing. Signed-off-by: Ian Abbott doc/drivers.txt commit 31b558634a25e04ce633ae4c80464571e807da71 Author: Ian Abbott Date: 2012-04-23 17:52:06 +0100 doc/Makefile.am: Create directory for pdf output dblatex is passed the option `-o $(srcdir)/pdf`, but if this directory does not exist, the PDF file is created with the name 'pdf' in $(srcdir). Make the directory so that the -o option treats the specified name as an output directory instead of an output filename. doc/Makefile.am commit be02f1a3d66d5b420f3bd51ffd66ee32fbb3c325 Author: Ian Abbott Date: 2012-04-23 17:29:51 +0100 etc/hotplug/usbduxsigma: Remove Makefile and Makefile.in ... ... but keep Makefile.am of course! etc/hotplug/usb/usbduxsigma/Makefile etc/hotplug/usb/usbduxsigma/Makefile.in commit ac43731c432ab8de54cb65cf717c2296c1be67db Author: Bernd Porr Date: 2012-04-23 14:03:12 +0100 Updated usbdux firmware files. The udev hotplug mechanism now takes binary files and no longer hex files. Also added the firmware for usbduxsigma. configure.ac etc/hotplug/usb/Makefile.am etc/hotplug/usb/usbdux/Makefile.am etc/hotplug/usb/usbdux/Makefile_asm etc/hotplug/usb/usbdux/usbdux_firmware.bin etc/hotplug/usb/usbduxfast/Makefile.am etc/hotplug/usb/usbduxfast/usbduxfast_firmware.bin etc/hotplug/usb/usbduxsigma/Makefile etc/hotplug/usb/usbduxsigma/Makefile.am etc/hotplug/usb/usbduxsigma/Makefile.in etc/hotplug/usb/usbduxsigma/Makefile_asm etc/hotplug/usb/usbduxsigma/README etc/hotplug/usb/usbduxsigma/fx2-include.asm etc/hotplug/usb/usbduxsigma/usbduxsigma etc/hotplug/usb/usbduxsigma/usbduxsigma_firmware.asm etc/hotplug/usb/usbduxsigma/usbduxsigma_firmware.bin etc/hotplug/usb/usbduxsigma/usbduxsigma_firmware.hex commit 1d86853f1b5995fa8386de277a1561bdbb8f5ee3 Author: Bernd Porr Date: 2012-04-23 13:15:03 +0100 Fixed an issue reported by Graeme Hattan that the udev rules were installed in the etc directory and not the lib. See also: http://lintian.debian.org/tags/udev-rule-in-etc.html ./configure --with-udev-hotplug=/lib places now all files in /lib. The scripts were wrongly prefixed with the sysconf directory which is /etc but should be /lib. The directory is now also taken from --with-udev-hotplug=/lib. configure.ac commit 456421c4f6ea59528894918fc6dc73530f2dbd84 Author: Bernd Porr Date: 2012-04-23 12:43:04 +0100 Fixed a path issue with comedilib.pdf. Got correctly saved into the pdf subfolder but install exprected it in the doc folder. doc/Makefile.am commit c2d03227e07deea8013ef55bb20a43406f25c48d Author: Bernd Porr Date: 2012-04-23 12:28:13 +0100 Removed two scripts which are no longer used by hotplug. In the early udev days the firmware had to be uploaded by comedi_config. However now the driver requests the firmware by itself and there is no need to have dedicated scripts for every kernel module in udev. etc/udev/Makefile.am etc/udev/usbdux etc/udev/usbduxfast commit 9a76f63cd3ca694fb254023902a628d2f7b7752a Author: Bernd Porr Date: 2012-04-23 12:22:16 +0100 automake now checks for dblatex and the pdf version of the comedi manual is now generated configure.ac doc/Makefile.am commit 0d8c6e966124e8dd7a1f7fe66bc9b9b87c186557 Author: Bernd Porr Date: 2012-04-23 00:23:03 +0100 Comedilib.pdf can now be generated with dblatex -t pdf ./comedilib.xml There were two major issues in the comedilb.xml: 1) there were too many nested sections so that latex ran out of sub-sub-sub-sub-sections. 2) A section needs a title and can no longer exist without one. The first line of the textfiles contains now the title and will be inserted by mkref into the xml file. todo: switch from xmlto to dblatex for the pdf generation and re-enable it in the makefile. doc/Makefile.am doc/calibration_funcref.txt doc/comedilib.xml doc/command_funcref.txt doc/deprecated_funcref.txt doc/dio_funcref.txt doc/error_funcref.txt doc/extensions_funcref.txt doc/funcref doc/mkref doc/reference.xml commit 428ad43ebc33ab8dfa1ec5e1f8af4f01671da8c9 Author: Ian Abbott Date: 2012-04-20 14:18:53 +0100 Generate ChangeLog from git log during 'make dist' Generate the ChangeLog using git log in the dist-hook target of the main Makefile. The git command used is: git log --stat --name-only --date=iso The format of the resulting ChangeLog is different to the old one that was produced with cvs2cl. Signed-off-by: Ian Abbott ChangeLog Makefile.am commit a61c28c6966d31cf40e50b4de1a4f257df61dcc0 Author: Ian Abbott Date: 2012-04-20 13:28:15 +0100 doc/reference.xml: Added section for comedi_polynomial_t. The tutorial.xml contained links to a missing section for the comedi_polynomial_t type, so I added one. Signed-off-by: Ian Abbott doc/reference.xml commit 4f21a64daa87117902d85b3f7477ac0f05d36793 Author: Ian Abbott Date: 2012-04-20 12:26:34 +0100 doc/Makefile: Remove *.css files on uninstallation. Signed-off-by: Ian Abbott doc/Makefile.am commit 67a83184ad4f8b166a56be2c50a1c8fa676842ea Author: Ian Abbott Date: 2012-04-20 12:10:01 +0100 Makefile.am: Remove 'debian' from EXTRA_DIST. The 'debian' target doesn't exist and there is no rule to make it, so remove it from EXTRA_DIST. Signed-off-by: Ian Abbott Makefile.am commit 38a3932fd9fdc89bfc4f56f4d8b436dadc3fface Author: Ian Abbott Date: 2012-04-20 11:57:23 +0100 Makefile.am: Don't bother removing CVS directories in dist-hook. Signed-off-by: Ian Abbott Makefile.am commit 404cee44a9535eb5d7fc03e940ffc3aecd1f8c18 Author: Ian Abbott Date: 2012-04-20 10:42:25 +0100 todo: Added note about Ruby bindings disabled by default. Signed-off-by: Ian Abbott todo commit 12fad7551d7502b9dbbee27b6a97fb52ae916e28 Author: Ian Abbott Date: 2012-04-20 10:34:27 +0100 configure.ac: Use AS_HELP_STRING() Use AS_HELP_STRING() to make the HELP-STRING arguments for the AC_ARG_ENABLE() and AC_ARG_WITH() macro calls. Signed-off-by: Ian Abbott configure.ac commit 82456b6f98cc3f02eb9ff15ef1f9e273732f57ab Author: Ian Abbott Date: 2012-04-20 10:11:57 +0100 configure: Disable Ruby bindings by default. The SWIG Ruby bindings do not build cleanly from scratch. They need an existing installation of comedilib. So disable them in the default configuration. They can be enabled with the --enable-ruby-bindings configure option. Signed-off-by: Ian Abbott configure.ac commit ee2986755aab663108ae01310217b9d6b62a061b Author: Ian Abbott Date: 2012-04-16 14:53:28 +0100 include/comedi.h: synced with comedi Signed-off-by: Ian Abbott include/comedi.h commit 679c0fb5f7f381a4629537bffa03087560b2e906 Author: W. Trevor King Date: 2012-04-16 08:58:20 -0400 driverwriting.xml: COMEDI_CB_EOA is also used to report end-of-output. doc/driverwriting.xml commit 1fd268ccdb8a9df30b0dda42f21ca2ece0759f2a Author: W. Trevor King Date: 2012-04-16 07:52:48 -0400 driverwriting.xml: COMEDI_CB_OVERFLOW is also used to report underflows. doc/driverwriting.xml commit 5af8a8cf2877e6a5dac602779e382a0e45c35ca4 Author: W. Trevor King Date: 2012-03-13 09:37:08 -0400 Add myself to the comedi.i copyright, since I just tweaked it. I also added 2010 for: commit 3fe8e6baac051d80906c6fac6c18c04c8df9ce4a Author: Ian Abbott Date: Mon Dec 20 14:50:21 2010 +0000 Add sampl_t and lsampl_t array_class()es to comedi.i. ... Patch from W. Trevor King. swig/comedi.i commit db4fd993090090a7e7054bdfb4ccff667d4cf07b Author: W. Trevor King Date: 2012-03-13 09:30:45 -0400 Suggest people use `PYTHONPATH` rather than adjusting `sys.path` internally. The old method only worked out of the box if you were running Python 2.1 on a 586. I imagine that is too small a slice of current users to be worth hard coding ;). demo/python/cmd.py demo/python/info.py demo/python/mmap.py swig/python/README.txt commit 55b6a03a50713bfb9c2e1f5000765b6e4d5ef882 Author: W. Trevor King Date: 2012-03-13 09:24:07 -0400 Add myself to the old Python demo copyrights, since I just tweaked each demo. demo/python/cmd.py demo/python/info.py demo/python/mmap.py commit b415c91aacdedb29e248ba031273d3a66636e994 Author: W. Trevor King Date: 2012-03-13 09:22:03 -0400 Oops, fix copyright month on `demo/python/insn.py`. demo/python/insn.py commit 3d79204427bfc1725d8184d6467e0a96ec4dfa89 Author: W. Trevor King Date: 2012-03-13 09:17:08 -0400 Cast the period to an integer in `demo/python/mmap.py`'s command setup. This avoids: Traceback (most recent call last): ... File ".../mmap.py", line 96, in prepare_cmd C.scan_begin_arg = 1e9/freq ... TypeError: in method 'comedi_cmd_struct_scan_begin_arg_set', argument 2 of type 'unsigned int' demo/python/mmap.py commit 8add63faa3b2cf2cbae18345f3caf21fdded234c Author: W. Trevor King Date: 2012-03-13 09:12:41 -0400 Adjust `sys.path` before importing `mmap` in `demo/python/mmap.py`. With the previous implementation, `mmap` was importing the demo script, not the standard `mmap` library module. From the docs [1]: The directory containing the script being run is placed at the beginning of the search path, ahead of the standard library path. This means that scripts in that directory will be loaded instead of modules of the same name in the library directory. I'm not sure when this changed in Python, since the demo script presumably worked with an earlier version. [1]: http://docs.python.org/tutorial/modules.html#the-module-search-path demo/python/mmap.py commit 7a277ab0cb12e7ad6b84f9973ba5c09bcbdeb1e4 Author: W. Trevor King Date: 2012-03-13 08:58:19 -0400 Cast the period to an integer in `demo/python/cmd.py`'s command setup. This avoids: TypeError: in method 'comedi_get_cmd_generic_timed', argument 5 of type 'unsigned int' demo/python/cmd.py commit fe3cdd466b93ccb71df112a641c79bfb6f274a74 Author: W. Trevor King Date: 2012-03-13 08:47:48 -0400 Add serial and PWM subdevice types to `demo/python/info.py`. This catches it up for the folowing commits to the comedi repository: commit 311e9c540217d60bdf56a1dba9eafe474fd3b218 Author: Bernd Porr Date: Sun Jan 13 23:07:02 2008 +0000 Added a proper PWM subdevice for comedi. commit 8092ed57ff38e1fcaf75a7e0bf3b8c4f5372f3d7 Author: Frank Mori Hess Date: Sat Jan 31 22:13:09 2004 +0000 serial dio (SCXI) support from Caleb Tennis demo/python/info.py commit 4b56f24232844066dcdc62d349f565d6530e6ada Author: W. Trevor King Date: 2012-03-13 08:41:24 -0400 Add `chanlist_len` to `comedi_get_cmd_generic_timed()` calls in Python demos. This catches the Python demos up to: commit 003b9ec501b5c69f25bfbc68e8b3f923d482bb04 Author: Ian Abbott Date: Mon Nov 8 11:01:42 2010 +0000 Add chanlist_len parameter to comedi_get_cmd_generic_timed. demo/python/cmd.py demo/python/info.py commit 70eca906628c1562022e1878ea20f1fe11a0e24e Author: W. Trevor King Date: 2012-03-13 08:36:39 -0400 Add `demo/python/insn.py`, a Python clone of `demo/insn.c`. demo/python/insn.py commit 1fe137aa2444e65ce1a6c848dc6cddaebc08d349 Author: W. Trevor King Date: 2012-03-13 08:31:36 -0400 Add an `insn_array` array_class to `comedi.i`. This makes it possible to populate `comedi_insnslist_struct` for use with `comedi_do_insnlist`. I also removed my earlier re-typedefs of `sampl_array` and `lsampl_array`. I didn't understand the reason for the underlying `TypeError` when I added them. The proper way to avoid that error is to use the `.cast()` and `.frompointer()` methods. See `demo/python/insn.py` (coming soon) for details. swig/comedi.i commit b09e05a776f0f8ea9a71d19c021a7a8516935b90 Author: Ian Abbott Date: 2012-02-13 11:36:13 +0000 Removed comedi_calibrate.8 man page. The comedi_calibrate.8 man page has been moved to the comedi_calibrate package where it belongs. Thanks to W. Trevor King for pointing it out. Signed-off-by: Ian Abbott man/Makefile.am man/comedi_calibrate.8 commit 2665ee5627ee41f749cf02359c2e827cb28d5673 Author: Ian Abbott Date: 2011-12-01 15:37:43 +0000 libcomedi: don't ignore channel in comedi_set_clock_source() Fix bug reported by Finn Hoffman on comedi email list. lib/insn_config_wrappers.c commit 54712cbf6aff94d94fca6314a130c4cbfd9a2b11 Author: Christoph Schmidt-Hieber Date: 2011-08-17 10:26:51 +0100 m4/am-check-python-headers.m4: Python 3 wrapper for comedi Here's a small patch to make the configure script compatible with Python 3. The wrapper itself (swig/python/comedi_python_wrap.c) will have to be generated with SWIG >= 2.0.0 for Python 3 compatibility. m4/am-check-python-headers.m4 commit 23e8eb609e5d07b1f16dc881b1a3400bc1e9e7c7 Author: Ian Abbott Date: 2011-06-27 13:08:08 +0100 comedi_test: Remove unnecessary assignment of 'go' when checking data The 'go' variable is only used by the 'while' loop that reads the data. We don't need to set it in the 'for' loop that checks the data afterwards. Signed-off-by: Ian Abbott testing/mmap.c commit 261d3e102945bf1389360bf5fb19142c9453f491 Author: Ian Abbott Date: 2011-06-27 13:03:03 +0100 comedi_test: Fix buffer overrun in test_mmap() If the command does not stop immediately after the last sample, there can be more data to read than we have room for. Make sure the 'while' loop 'read()' does not overrun the end of the malloc'ed 'buf'. Signed-off-by: Ian Abbott testing/mmap.c commit cceb2bc2500368ca4e2cf1a737d34330083fb58a Author: Ian Abbott Date: 2011-05-11 12:05:55 +0100 Fix a couple of typos. A couple of the include files are missing the 'p' in 'published' in the file header comment. Signed-off-by: Ian Abbott include/comedi_errno.h include/comedilib_version.h.in commit cf20e6af6bb33716d7cc5cdf34a86ec04f2d5be4 Author: Ian Abbott Date: 2011-05-11 11:45:07 +0100 COMEDILIB_CFLAGS: Fix for separate build directory. When doing an out-of-tree build, the comedi_version.h file is in the build tree, not in the source tree. The CFLAGS needs an additional -I option so the compiler can find it. Signed-off-by: Ian Abbott configure.ac commit 5d34786aba154242bce2a70fa0b517868c34436b Author: Ian Abbott Date: 2011-05-10 14:42:46 +0100 INSTALL: Changed cvs reference to git. Signed-off-by: Ian Abbott INSTALL commit 4941b694a79ff7b484eafb6bbca388d2e4536525 Author: Ian Abbott Date: 2011-05-10 14:41:02 +0100 README: Update mailing list details. Signed-off-by: Ian Abbott README commit dee77a55ea581add815d37b60c9b98bd0838f0d9 Author: Ian Abbott Date: 2011-05-10 14:36:06 +0100 README: Changed CVS references to Git. Signed-off-by: Ian Abbott README commit 73c59552bfd9ef5a3d7649556ab18945cf584a70 Author: Ian Abbott Date: 2011-05-10 14:22:16 +0100 README.CVS: Renamed to README.Git and edited slightly. Signed-off-by: Ian Abbott README.Git commit 91a350462393e8a92d731860bd18ed1dfd6568b0 Author: Ian Abbott Date: 2011-01-26 16:29:34 +0000 Add comedilib_version.h header, produced by ./configure, included by comedilib.h, containing COMEDILIB_VERSION_MAJOR, COMEDILIB_VERSION_MINOR, COMEDILIB_VERSION_MICRO, and COMEDILIB_CHECK_VERSION(major,minor,micro). This can be used to perform C pre-processor checks for API changes in comedilib. configure.ac include/Makefile.am include/comedilib.h include/comedilib_version.h.in commit c530564317683306bc1673ab12fe09bb51fe70bf Author: Ian Abbott Date: 2011-01-05 15:02:44 +0000 #include needed for fstat(). lib/calib.c commit cdb3a84f86e55b4cd5674c8d19cf94c95bfcdf96 Author: Ian Abbott Date: 2010-12-20 15:49:59 +0000 Updated procedures for building with Python's distutils. Also reduced line-lengths for 80-character wide terminals. Most of the updated text supplied by W. Trevor King. Ian Abbott added a note that it only applies when building the wrappers separately from Comedilib without 'make'. swig/python/README.txt commit 3fe8e6baac051d80906c6fac6c18c04c8df9ce4a Author: Ian Abbott Date: 2010-12-20 14:50:21 +0000 Add sampl_t and lsampl_t array_class()es to comedi.i. This makes it easier (possible?) to setup comedi_insn_struct and comedi_cmd_struct instances. Patch from W. Trevor King. swig/comedi.i commit 880074831499ba68c17a1c2653d71d6eef3b9cfb Author: Ian Abbott Date: 2010-12-17 13:56:26 +0000 Adjust setup.py to link against libtool's lib/.libs/. Patch from W. Trevor King. swig/python/setup.py commit d5e7c2a1164921fdedb80e1b285bcc54e2dfa700 Author: Ian Abbott Date: 2010-12-16 16:03:35 +0000 Revert previous commit, renaming comedi_wrap.c back to comedi_python_wrap.c. Add "comedi_python.i" swig interface file which merely %includes the "comedi.i" in the parent directory. Fix paths in "setup.py" and set it up to run swig directly (using "comedi_python.i" as the source). Change "_comedi.py" to "comedi.py" (but keep the underscore prefix on the .so and .la files). Based on a patch by W. Trevor King. swig/python/Makefile.am swig/python/comedi_python.i swig/python/setup.py commit 5605af7eba87c0877b94ca709bc76ef46a516b79 Author: Ian Abbott Date: 2010-12-16 11:41:41 +0000 Use #ifdef SWIGRUBY around typemap(ruby,...) and remove the ruby argument. swig/comedi.i commit 6c6a5d5b4fb52afe22ff7ec85dcd78a0e8668483 Author: Ian Abbott Date: 2010-12-16 11:34:07 +0000 Renamed comedi_python_wrap.c to the swig default comedi_wrap.c. swig/python/Makefile.am commit eb57419204c5d5c7fc8e17262b57348cdd7ba014 Author: Ian Abbott Date: 2010-12-16 11:29:10 +0000 Tag comedi_sv_measure's data as a swig output in comedilib.h. Patch from W. Trevor King. include/comedilib.h commit be1d22cb797d423814211e0ca99f95e596143d55 Author: Ian Abbott Date: 2010-12-14 14:43:49 +0000 Added W. Trevor King to AUTHORS. AUTHORS commit aa7fd8061e586be2ae8cf44de5acbe3dd5216f21 Author: Ian Abbott Date: 2010-12-14 14:41:55 +0000 Add -lm to comedilib.pc.in Libs. Patch from W. Trevor King. comedilib.pc.in commit 4b8bf1aff5dd3e86fad0b128bfc2c51c81b2d13b Author: Ian Abbott Date: 2010-12-14 14:37:18 +0000 Import DESTDIR in swig/ruby/setup.rb for configurable rbconfig install paths. Patch from W. Trevor King. swig/ruby/setup.rb commit df57477cba9523865e2123699bec326769f4b7c5 Author: Ian Abbott Date: 2010-12-14 10:32:39 +0000 Change --disable-docbook-binding to --disable-docbook in configure options. Patch from W. Trevor King. configure.ac commit 309fc0d7f84aa27d4a46938ad2ca37628d83789d Author: Ian Abbott Date: 2010-11-08 11:38:40 +0000 Include chanlist length in call to comedi_get_cmd_generic_timed. Truncate the Float period to an integer. swig/ruby/demo/cmd commit 003b9ec501b5c69f25bfbc68e8b3f923d482bb04 Author: Ian Abbott Date: 2010-11-08 11:01:42 +0000 Add chanlist_len parameter to comedi_get_cmd_generic_timed. swig/python/comedi_wrap.doc commit 41759a9bea205122fd0cd15bc7c7aa60ce8a0225 Author: Ian Abbott Date: 2010-11-08 10:42:42 +0000 Defined SWIG_USE_OLD_TYPEMAPS as a temporary measure to work with SWIG 2.0. swig/comedi.i commit 5dcb1804728c6bb9ba0d6d5d72f77207a3ba8a12 Author: Ian Abbott Date: 2010-03-24 16:45:15 +0000 Specify EXTRA_DIST files in subdirectories explicitly. swig/ruby/Makefile.am commit b8a4f1a2658f675d1d47637a9e0a5fcaaece9b3f Author: Ian Abbott Date: 2010-03-19 13:44:56 +0000 Added channel parameter to comedi_set_clock_source() and comedi_get_clock_source(). Bumped library version to 0.10.0. c++/include/comedilib.hpp configure.ac demo/choose_clock.c demo/gpct_pulse_generator.c doc/extensions_funcref.txt include/comedilib.h lib/insn_config_wrappers.c lib/version_script commit b06cecc1516910dc9486d2a74f0a2777a6b35791 Author: Ian Abbott Date: 2010-02-17 18:28:15 +0000 comedi_find_range() should skip ranges that don't match specified units. lib/range.c commit becded6ae0d7f72268a80acfceccf0d0a8534ab2 Author: Ian Abbott Date: 2009-08-13 11:16:04 +0000 Check subdevice type. demo/gpct_pulse_generator.c commit 8a29362cd45d2cee02e254f6f86114e2ada250ef Author: Ian Abbott Date: 2009-08-13 11:09:05 +0000 Use negative options.value to set up time as a duty cycle. demo/gpct_pulse_generator.c commit 2387fcffef0a2c5c5393cd31278092666b364c06 Author: Bernd Porr Date: 2009-04-17 20:41:45 +0000 Generates also binary format for the new comedi driver integrated into the mainstrain linux kernel etc/hotplug/usb/usbduxfast/Makefile_asm commit 0b9c89434c4f5bbc3953dd60b54f5a5a13cdadd3 Author: Bernd Porr Date: 2009-04-17 20:40:33 +0000 Generates also binary format for the new kernel comedi drivers etc/hotplug/usb/usbdux/Makefile_asm commit 0fbbf1a5f1471f5770768bf9aa51764da80f5af0 Author: Ian Abbott Date: 2009-03-31 15:08:55 +0000 Add brief note about dependencies for Python and Ruby bindings. INSTALL commit 1b52275fa2ad321adb48a59b7307d87fb125d5ee Author: Bernd Porr Date: 2009-03-16 19:30:39 +0000 Added the installtion instructions from the Wiki and removed reference to Debian woody packages. I had recently quite a lot of e-mails asking about the permissions of the comedi files and every time the the problem was that the udev rules were installed in /usr/local/etc. INSTALL commit 12eedd26b387aea886bafc2e9722c593677cff54 Author: Ian Abbott Date: 2009-02-18 15:35:09 +0000 comedi_get_default_calibration_path(): Check result of asprintf() for error. lib/calib.c commit d7bdd10bd675d9469afcfbc78a3a288bb8e74374 Author: Ian Abbott Date: 2009-02-18 15:14:53 +0000 Update setup.rb using http://i.loveruby.net/archive/setup/setup-3.4.1.tar.gz swig/ruby/setup.rb commit f2fdf25018e5751aa8a630a5181a97b3fdcb963c Author: Ian Abbott Date: 2009-02-18 14:47:06 +0000 Move "comedi_errno.h" into "include/" and install it. include/Makefile.am include/comedi_errno.h lib/Makefile.am commit 76a2e658b76a960098d20cd71598d3b2709a6884 Author: Ian Abbott Date: 2009-02-18 14:10:54 +0000 Put __comedi_errno variable into thread-local storage if the compiler supports it. Configuration test uses Alan Woodland's 'ax_tls.m4' from . AUTHORS configure.ac lib/error.c lib/libinternal.h m4/ax_tls.m4 commit 24147c08a491783b38acfbd65b309c79c1395738 Author: Ian Abbott Date: 2009-01-30 14:51:38 +0000 Allow swig to include comedi.h and comedilib.h from comedi.i to avoid duplication. include/comedilib.h swig/comedi.i swig/python/Makefile.am swig/ruby/Makefile.am commit 3c2522433487dfc5f56ac9ed08b780f0b9253620 Author: Ian Abbott Date: 2009-01-30 14:21:52 +0000 Added updates from comedi.h and comedilib.h. swig/comedi.i commit 8ccf6492f49eef8eb86d09f46091edd45a612d67 Author: Ian Abbott Date: 2009-01-06 12:19:31 +0000 Added dependencies flex and bison, and (optionally) swig, python, ruby and xmlto. README.CVS commit 3549993b550eeb5ee2272dffa251c4ebf3591432 Author: Bernd Porr Date: 2008-12-21 14:29:53 +0000 the udev scripts are no longer needed because of autoconf in kernelspace and the drivers request the firmware now via the standard udev firmware helper. etc/udev/90-comedi.rules commit 564e9680b02a49c1e2ffa51c4fad2d28de471537 Author: Ian Abbott Date: 2008-12-18 17:23:14 +0000 Fixed do_test_for_insn_bits(), broken by validity checks added to comedi_do_insnlist(). Call comedi_ioctl() instead of comedi_do_insnlist(). lib/filler.c commit 9a06deb6f945f799cb6d2d1a16414b5cf0302377 Author: Ian Abbott Date: 2008-12-18 16:44:20 +0000 Removed unneeded comedi_insnlist from do_test_for_insn(). lib/filler.c commit d8c3b29ca43f940b21cbae91be80a195657b62ac Author: Ian Abbott Date: 2008-12-18 16:38:51 +0000 Corrected the 'BUG' message in do_test_for_insnlist() (it reported the wrong function). lib/filler.c commit c234d5afbc13ea8dfdf379953521cad71f483637 Author: Ian Abbott Date: 2008-12-18 11:43:27 +0000 Oops, I missed one of the info to board_info changes. doc/install.xml commit 80ac38a5b1ddce02b4263df7405c05a15440c0b6 Author: Ian Abbott Date: 2008-12-18 11:23:48 +0000 demo/info is now demo/board_info. Thanks to JuanPi for pointing it out. doc/install.xml commit 8884128f3a2256365a9e048899eb5d0683312fbf Author: Frank Mori Hess Date: 2008-11-13 14:40:48 +0000 Persistent names by pci device path should be in by-path subdirectory, not by-id. etc/udev/z99_comedi.rules commit 83058293b93f0be8fb9a7e055f19512b04d6d3dc Author: Frank Mori Hess Date: 2008-11-13 14:17:15 +0000 Added C++ wrapper for comedi_get_buffer_contents(). c++/include/comedilib.hpp commit 9c3e25cddfd600687db5a5eac3b11b7b3859ff77 Author: Bernd Porr Date: 2008-11-09 21:42:41 +0000 Simplified the comedi rules for usbdux(fast). Also fixed the coldplug problem: the script was only called after a hotplug but not at boot time. This should work now. etc/udev/90-comedi.rules commit 4df5ffd451692818cfa12d01219542bccd5c366a Author: Ian Abbott Date: 2008-11-05 12:52:25 +0000 Added some device and subdevice validity checks. lib/buffer.c lib/calib.c lib/comedi.c lib/get.c lib/range.c lib/sv.c lib/timer.c commit 0038ed146700f267d9f983ae94068df826bdd1e5 Author: Ian Abbott Date: 2008-11-05 11:40:42 +0000 Handle COMEDI_SUBD_PWM and check for future unknown subdevice types. demo/info.c testing/info.c commit acfb8c3fb4f7c04b13a2a7d74fa518f1ba878ea8 Author: Frank Mori Hess Date: 2008-10-20 19:49:02 +0000 Made suffix on persistent subdevice symlinks use underscore for consistency. etc/udev/z99_comedi.rules commit 81ba50ceec2b3d264ff52c1481a6520b4e218356 Author: Frank Mori Hess Date: 2008-10-20 19:37:57 +0000 Added example udev rules file for new udev/sysfs in comedi for pci boards. etc/udev/z99_comedi.rules commit 8103c5334a882234ef853e54a21b15b13998e8c9 Author: Frank Mori Hess Date: 2008-09-16 14:49:35 +0000 Updated it to only run the (unreliable) do_test_for_insn_bits() if the information was not available in the subdevice info. lib/filler.c commit 4d61d75531592566347b8d951639c70eaaa39bf4 Author: Frank Mori Hess Date: 2008-09-16 14:48:14 +0000 Added subdevice::subdevice_type() wrapper. c++/include/comedilib.hpp commit ac9f5f248fe1aae78266ff4855d93eefeb659bf6 Author: Frank Mori Hess Date: 2008-09-16 14:01:38 +0000 synced with comedi. include/comedi.h commit c13e19648b0e0231dd0570cd128dc768971cab0d Author: Frank Mori Hess Date: 2008-09-04 21:24:42 +0000 fixed typo in printf. demo/dio.c commit b94b2ba02434e5a48d6c6d0455abfcbc56493549 Author: Frank Mori Hess Date: 2008-08-29 19:17:40 +0000 Fixed memory leak in comedi_cleanup_calibration(). lib/calib_yacc.y commit 6c1a1cdacbdce956b63e6ec04508007abb92f4ed Author: Frank Mori Hess Date: 2008-08-29 13:38:27 +0000 Added missing return type to member function declaration. c++/include/comedilib.hpp commit fa3510e8782ddad22f64b818e912ee1a1e9aa0fa Author: Frank Mori Hess Date: 2008-08-20 15:15:25 +0000 Added binding for comedi_get/set_routing. c++/include/comedilib.hpp commit 72c2c73a1e518310a254606a5878190c6e6c5b05 Author: Frank Mori Hess Date: 2008-08-20 00:27:16 +0000 Added comment about using gpct_encoder demo with 660x boards. demo/gpct_encoder.c commit c99e7803a6b1c1ce5902e144104cdda1e7c38836 Author: Frank Mori Hess Date: 2008-08-06 20:06:16 +0000 Added C++ binding for comedi_get_clock_source. Fixed binding for comedi_find_subdevice_by_type. c++/include/comedilib.hpp commit 4007cc82f5e0037e4d21c400da512efc1fda2c4b Author: Ian Abbott Date: 2008-07-31 09:54:43 +0000 Added AC_CONFIG_MACRO_DIR([m4]). configure.ac commit fe3b6fa9d7c962ddaaf2294cbc7612810729c546 Author: Frank Mori Hess Date: 2008-06-25 15:47:06 +0000 Added comedi::subdevice::set_clock_source, set_counter_mode, and set_gate_source. c++/include/comedilib.hpp commit 0b4cf53b45e81b47da49803bc1c9b2f7660dfc09 Author: Frank Mori Hess Date: 2008-06-25 15:14:23 +0000 Added comedi::subdevice::reset wrapper for comedi_reset(). c++/include/comedilib.hpp commit f21482f6c28956a5d83bc28debb73eee994e208a Author: Frank Mori Hess Date: 2008-05-01 17:30:11 +0000 Added specification of return value for comedi_dio_bitfield2. doc/dio_funcref.txt commit 64f8e05331a8c993d970c4e3f45fe7635f3b4079 Author: Ian Abbott Date: 2008-04-23 18:53:09 +0000 Fix some 64-bit warnings. lib/comedi.c commit 39253a72b3274620c8f2a86e50d52c50d49db523 Author: Frank Mori Hess Date: 2008-03-31 17:08:33 +0000 Added wrappers for comedi_get_hardware_buffer_size and comedi_find_range. c++/include/comedilib.hpp commit 758813e9555b67aeb90083ce790c7bee4c81fc90 Author: Frank Mori Hess Date: 2008-03-28 21:11:49 +0000 Added description of return value from comedi_internal_trigger(). doc/funcref commit 3b34f5f08d93b6d9eb86f8448d8ba0702ac4945d Author: Frank Mori Hess Date: 2008-03-28 21:10:56 +0000 Added wrapper for comedi_internal_trigger(). c++/include/comedilib.hpp commit 8952c74075b7490de6d6fc1cecadebbc04c59cac Author: Frank Mori Hess Date: 2008-03-28 18:16:45 +0000 Added reference entry for comedi_get_hardware_buffer_size(). doc/extensions_funcref.txt doc/reference.xml commit d0956ca8b5e829e0fb7d379b18a2ba400a3bb913 Author: Frank Mori Hess Date: 2008-03-28 15:56:35 +0000 Added comedi_get_hardware_buffer_size() wrapper function, and made comedi_strerror return a const char*. include/comedilib.h lib/error.c lib/insn_config_wrappers.c lib/version_script commit b3873b7c79675bd44add7fd16f6b50cbe10d169b Author: Frank Mori Hess Date: 2008-03-28 15:55:03 +0000 Replaced a perror with comedi_perror testing/cmd_1.c commit 2edd66775b2f6b840e297c26e3e75e5c3fd13923 Author: Frank Mori Hess Date: 2008-03-28 15:29:16 +0000 synced with comedi. include/comedi.h commit 0f6494cfdc30f17add201a51d2d2a368baae7039 Author: Frank Mori Hess Date: 2008-03-27 20:44:15 +0000 Added default constructors to from_physical and to_physical. Added missing const qualifier to hardcal_converter and softcal_converter methods. c++/include/comedilib.hpp commit 4acda5c777b135088360927746be5adecbda0831 Author: Frank Mori Hess Date: 2008-03-26 19:52:05 +0000 Fixed compile error. c++/include/comedilib.hpp commit 0e3150e577cdeb18d093135d2366b69c34f3b05d Author: Frank Mori Hess Date: 2008-03-26 19:22:38 +0000 Made comedi::calibration default constructible. Added wrapper classes for comedi_to/from_physical. c++/include/comedilib.hpp commit 959b2ebcadcfe09a525a3529d8736b5d00b6b09f Author: Frank Mori Hess Date: 2008-03-14 19:07:22 +0000 Added wrappers for calibration functions. Fixed memory leak in default_calibration_path() method. c++/include/comedilib.hpp commit 7e3ad2a0fd72b1827213d1102c71c144c1ff7e56 Author: Frank Mori Hess Date: 2008-03-14 18:22:24 +0000 Made it very slightly more clear that comedi_apply_calibration is only useful for hardware-calibrated boards. doc/calibration_funcref.txt commit e0b0b89338bb17e69b53aa77dde4019682b18177 Author: Frank Mori Hess Date: 2008-03-14 17:52:20 +0000 Allow comedi_cleanup_calibration to accept a NULL argument. lib/calib_yacc.y commit 5e90332b026341c987735c52d17798366f5e7d95 Author: Frank Mori Hess Date: 2008-03-11 16:04:23 +0000 Added perl to EXTRA_DIST Makefile.am commit 051f58fd8b23cd5a2e38b683fb28b1abf86e5242 Author: Ian Abbott Date: 2008-02-21 12:59:07 +0000 Sync with comedi doc/drivers.txt commit cd0469894b1568e832d6ba73ef1b40fc759c47f6 Author: Frank Mori Hess Date: 2008-02-13 20:14:38 +0000 Made mkref script handle the case of a void parameter correctly. Allowed text lines to begin with any whitespace character (not just space). doc/mkref commit d127a631550ec65feef8be69fd59d7d0552481ea Author: Frank Mori Hess Date: 2008-02-13 20:13:39 +0000 Updated references for error reporting functions. doc/error_funcref.txt commit 7eb7a64566cb87b765a5baebfc2b824e54f626e7 Author: Frank Mori Hess Date: 2008-02-12 19:31:26 +0000 Updated the dio function reference doc/dio_funcref.txt commit 069547579741197d7f9556c20f254e888609e8da Author: Frank Mori Hess Date: 2008-02-12 18:27:00 +0000 Updated comedi_dio_config implementation to reflect logical split between COMEDI_INPUT/COMEDI_OUTPUT and corresponding config insn ids (even though they still have the same value). Made comedi_dio_config return 0 on success for better consistency in API. lib/dio.c commit 2d4cc8f6d0cbc3749af08beaa0044e087d26b48e Author: Frank Mori Hess Date: 2008-02-12 17:01:43 +0000 Updated and added some links to reference for asynchronous command functions. doc/command_funcref.txt commit 0c69850ffceca9a5bca800da825e8ecb61ea85e7 Author: Frank Mori Hess Date: 2008-02-12 01:12:46 +0000 Made comedi_ioctl take its third argument as a void* instead of and integer type, and got rid of a bunch of casts (and added a few). lib/buffer.c lib/comedi.c lib/data.c lib/filler.c lib/get.c lib/ioctl.c lib/libinternal.h lib/sv.c commit a61ed59402bb7fd2516b707e73efbc31e17c7242 Author: Frank Mori Hess Date: 2008-02-11 20:50:14 +0000 Fixed return values from comedi_mark_buffer_read/written(). Removed some redundant assignments of __comedi_errno lib/buffer.c commit d2809f82d52da4bb9e4967fd95fb2af9af2a1114 Author: Frank Mori Hess Date: 2008-02-11 16:42:28 +0000 Added some "type" elements to docbook output, although they don't really have much effect. doc/mkref commit a7ece13dbdcb5bab15ebe4084e33bf7b7fef19d3 Author: Frank Mori Hess Date: 2008-02-11 16:25:15 +0000 Added a link and remove some wrong (obsolete?) bits in the description of comedi_cancel(). doc/command_funcref.txt commit 4e7a93e64623c0c1266d7bbe7d428e78432c1971 Author: Frank Mori Hess Date: 2008-02-11 15:50:36 +0000 Rearranged section heirarchy. Made capitalization of section titles consistent. doc/comedilib.xml doc/mkdr doc/reference.xml commit 86a6fa5989b8beb4ae60ce19f982f1de3a8ef141 Author: Frank Mori Hess Date: 2008-02-08 21:42:25 +0000 Added section for comedi_subdevice_type enum. doc/reference.xml commit 3a5c3a8fb0e676d85734285b372703da17d4eab7 Author: Frank Mori Hess Date: 2008-02-08 21:41:32 +0000 Added some links to core function references, and fixed some bitrot. Deprecated comedi_set_global_oor_behavior since it only affects comedi_to_phys (which is already deprecated). doc/deprecated_funcref.txt doc/funcref commit db048dfa6ff4dd8a821a455105629e60b1995152 Author: Frank Mori Hess Date: 2008-02-08 19:02:18 +0000 Fixed some spelling errors "sucess"->"success". doc/command_funcref.txt doc/deprecated_funcref.txt doc/dio_funcref.txt commit e3526fbd7caeb6ade94d3be8e722c7992547db83 Author: Frank Mori Hess Date: 2008-02-08 18:48:27 +0000 Removed some wrong or obsolete information. Made it xinclude the tutorial programs tut1.c and tut2.c doc/intro.xml doc/tutorial.xml commit d73685a2544fd0baab7e8781f53912361d1e8156 Author: Frank Mori Hess Date: 2008-02-08 18:28:26 +0000 Minor tweak to comedi_get_softcal_converter description. doc/calibration_funcref.txt commit d7434f79bb88c01af8f220654f24548314c16467 Author: Frank Mori Hess Date: 2008-02-08 18:23:05 +0000 trivial change to a comment. demo/tut2.c commit f6a4444de89c9e45ce1cc37835433652db3a259b Author: Frank Mori Hess Date: 2008-02-08 16:23:36 +0000 Switched to use comedi_to_physical instead of deprecated comedi_to_phys. demo/tut2.c commit 9a472f9f4a6d86de2fa8e5b6f43c62c0da217ccb Author: Frank Mori Hess Date: 2008-02-08 16:22:43 +0000 Added some checking of return values for errors demo/tut1.c commit 6639f730fcdf9f8143e595da6daa14f7eb7f1c72 Author: Frank Mori Hess Date: 2008-02-07 19:58:13 +0000 Some minor tweaks. doc/Makefile.am doc/comedilib.css doc/comedilib_html_config.xsl commit cdb13846755527cb2cab737a76f0db27bea4da05 Author: Frank Mori Hess Date: 2008-01-28 21:34:06 +0000 Updated drivers.txt from comedi 0.7.76 doc/drivers.txt commit 46bd0a16bacf94a7e971f5b2a107146290802608 Author: Frank Mori Hess Date: 2008-01-28 20:38:47 +0000 comedi_internal_trigger is provided by comedilib now. testing/comedi_test.h testing/inttrig.c commit 242aa6405f2b2621fbfd3fbb8344ea0ce1bcae29 Author: Frank Mori Hess Date: 2008-01-28 20:35:14 +0000 Fixed another problem with mmap test on subdevice using lsampl_t. testing/mmap.c commit 115b6a66c153effe8831b3b44a48fd4c202156cc Author: Frank Mori Hess Date: 2008-01-28 20:27:19 +0000 Fixed bug in mmap test when run on subdevice with SDF_LSAMPL. testing/mmap.c commit 064f43b4f89fb79237953fd7c735bf701001d112 Author: Frank Mori Hess Date: 2008-01-28 19:30:01 +0000 Added css stylesheet for html docs. At the momment, it just gives a light gray background to display of "programlisting" elements. doc/Makefile.am doc/comedilib.css doc/comedilib_html_config.xsl commit 014562410870d66f99e82cd1ac246b66ba4ee235 Author: Ian Abbott Date: 2008-01-28 16:10:11 +0000 Don't use SDF_WRITEABLE flag to check if read (or write) command is applicable. Instead, check that the specified subdevice matches the read (or write) subdevice. testing/cmd_1.c testing/cmd_2.c testing/inttrig.c testing/mmap.c testing/select.c commit 32c98f950642e76d6e3f3cb568f548697f94efde Author: Frank Mori Hess Date: 2008-01-25 15:00:01 +0000 Added some links. doc/calibration_funcref.txt commit d5d5d74cf525837fa83ef4b413ae547c436cdf68 Author: Frank Mori Hess Date: 2008-01-24 21:35:24 +0000 Links to http://www.comedi.org everywhere. doc/comedilib.ent commit 0b172a6493d204292477c6d4c23e5ecf0a497db4 Author: Frank Mori Hess Date: 2008-01-24 21:09:32 +0000 Did a little editing and updating for bitrotten parts. doc/install.xml commit 73cf1bf2e69a64701003787ab09a88764a711e36 Author: Frank Mori Hess Date: 2008-01-24 21:09:05 +0000 Use "email" element. doc/comedilib.xml commit 1a24ec304302e190a382183c286e204e4189543b Author: Frank Mori Hess Date: 2008-01-24 19:30:00 +0000 Fixed indentation, shouldn't have made any content changes. doc/install.xml commit dfaf144f85eb1f3ca417ea1643d3de786b6d95b8 Author: Frank Mori Hess Date: 2008-01-24 19:11:18 +0000 Fixed indentation. Performed some editing of content. Removed some parts which were wrong, or made no sense to me. doc/intro.xml commit 48a0731a298e49bbc3da24d14bbac4709e8ef964 Author: Frank Mori Hess Date: 2008-01-24 15:08:47 +0000 Added some missing "para" elements in the legalnotice. Fixed up indentation. doc/comedilib.xml commit ab8d0426c34633f6f33fd7d29784e1a492b767fb Author: Frank Mori Hess Date: 2008-01-24 01:34:10 +0000 Forgot to add this new file, it's part of conversion to docbook-xml. doc/comedilib.ent commit a0568092e75abb3c20079fa6c43fb5fd15ee943d Author: Frank Mori Hess Date: 2008-01-24 01:32:41 +0000 Converted comedilib docs to docbook-xml 4.4, fixing a bunch of parse errors along the way (mostly unclosed tags). configure.ac doc/Makefile.am doc/comedilib.xml doc/comedilib_html_config.xsl doc/driverwriting.xml doc/funcref doc/glossary.xml doc/install.xml doc/intro.xml doc/mkdr doc/mkref doc/other.xml doc/reference.xml doc/tutorial.xml commit a06bba542a9b2305b0d455294017160da65697c7 Author: Frank Mori Hess Date: 2008-01-23 18:56:52 +0000 Added more INSN_CONFIG wrappers: comedi_get_clock_source(), comedi_get_gate_source(), and comedi_get_routing(). Added "channel" parameter to some of the INSN_CONFIG wrappers. demo/gpct_buffered_counting.c demo/gpct_encoder.c demo/gpct_pulse_generator.c demo/gpct_simple_counting.c doc/extensions_funcref.txt include/comedilib.h lib/insn_config_wrappers.c lib/version_script commit 76791bfeed78109acdee5299718e355c2647f20a Author: Frank Mori Hess Date: 2008-01-18 16:37:32 +0000 Added comedi_set_filter() and comedi_set_routing() configuration instruction wrappers. demo/choose_filter.c demo/choose_routing.c doc/extensions_funcref.txt include/comedilib.h lib/insn_config_wrappers.c lib/version_script commit 64d656994a9e7f80fab62857c63cfd413c1e4f37 Author: Frank Mori Hess Date: 2008-01-17 17:10:07 +0000 Updated to use comedi_set_clock_source() wrapper. demo/choose_clock.c commit b3627840ac53e2f018bca13742b8b71e50d528e4 Author: Frank Mori Hess Date: 2008-01-17 17:03:01 +0000 Added reference entries for new configuration instruction wrappers. doc/Makefile.am doc/comedilib.sgml doc/extensions_funcref.txt doc/funcref include/comedilib.h commit 1979b2f2cc286ec45db39a008d9f8999320dc9a1 Author: Ian Abbott Date: 2008-01-17 13:52:02 +0000 More memory initialization, error detection and cleanup in get_subdevices() and get_rangeinfo(). lib/filler.c commit 625d44af0475471ae1c3796e6602e6e94215d8b1 Author: Ian Abbott Date: 2008-01-17 13:50:32 +0000 Free elements of rangeinfo_list on close. lib/comedi.c commit 37dc388297b2c26dc4139e40c4bf773e531997f3 Author: Frank Mori Hess Date: 2008-01-16 20:09:38 +0000 Return 0 from the INSN_CONFIG wrappers on success. lib/insn_config_wrappers.c commit ebe72a2b2a306948ab6dca429b9f910b9af061fb Author: Frank Mori Hess Date: 2008-01-16 19:45:05 +0000 Added more memory initialization for the sake of valgrind (especially memory that gets set by ioctls that valgrind can't see). Added a little error handling for a few memory allocations. lib/comedi.c lib/data.c lib/dio.c lib/filler.c lib/get.c commit 4d07ce99692635a8fe5de02427dbda4174e3768b Author: Frank Mori Hess Date: 2008-01-15 21:01:40 +0000 Moved some wrappers for INSN_CONFIG instructions into comedilib. Will add some reference documentation for the new functions soon. configure.ac demo/common.c demo/examples.h demo/gpct_buffered_counting.c demo/gpct_encoder.c demo/gpct_pulse_generator.c demo/gpct_simple_counting.c include/comedilib.h lib/Makefile.am lib/insn_config_wrappers.c lib/version_script commit 8e610500f3bb93a28739b3c633a03c6522208889 Author: Frank Mori Hess Date: 2008-01-14 22:15:07 +0000 Split function references into subsections. Always build docs in $(srcdir). doc/Makefile.am doc/calibration_funcref.txt doc/comedilib.sgml doc/command_funcref.txt doc/deprecated_funcref.txt doc/dio_funcref.txt doc/error_funcref.txt doc/funcref doc/mkref commit d1ff202fc400610161efb3203746ae20f4a335cc Author: Frank Mori Hess Date: 2008-01-14 20:29:37 +0000 fixed typo in hotplug warning message. configure.ac commit 9493cf1b479c2370a7e912d4d631384b171e3146 Author: Bernd Porr Date: 2008-01-13 23:18:05 +0000 Synced this with comedi. PWM support. include/comedi.h commit 599cf81a1bcc9dbbe5e9a088b766ca8af662be1c Author: Ian Abbott Date: 2007-12-19 11:44:16 +0000 Define datarootdir, docdir, htmldir and pdfdir if not defined by autoconf (first defined in autoconf-2.59c). configure.ac commit 624228b8fea737894ed25b1fa1b723d2ebd4d025 Author: Frank Mori Hess Date: 2007-12-17 00:06:39 +0000 Added a little more description of return value from comedi_mark_buffer_read(), from Jan Gukelberger . doc/funcref commit 0b21f807831a9f15a99688aa003e9b2e09cdd729 Author: Ian Abbott Date: 2007-12-10 13:20:19 +0000 Avoid mixing declarations and code. demo/choose_clock.c demo/choose_filter.c demo/choose_routing.c demo/gpct_buffered_counting.c lib/calib.c lib/calib_yacc.y commit f87490e0f6f058252fda7874df4fc993ff36c1c6 Author: Frank Mori Hess Date: 2007-12-01 15:54:08 +0000 Fixed setting of comedi_errno in comedi_dio_config() for invalid arguments. lib/dio.c commit 792e4b741f929dbee6c77d1d167bb7052deb3f25 Author: Frank Mori Hess Date: 2007-12-01 15:53:18 +0000 Got rid of obsolete error codes. lib/error.c lib/libinternal.h commit 3464515b7da4e0ae71005051e11c6be99739f5be Author: Ian Abbott Date: 2007-11-30 18:20:15 +0000 Added blancmange curve. demo/ao_waveform.c commit 92eb0d52bcfd36499119da685be4cba32b25f5ea Author: Ian Abbott Date: 2007-11-30 16:02:30 +0000 Selected waveform with -n. Shifted up sine wave if necessary. Added new waveforms. Fixed cycloid. :-) demo/ao_waveform.c commit df5e7fde3f3819c0726dd7772bb9601a86007a93 Author: Ian Abbott Date: 2007-11-30 12:24:08 +0000 Synced with comedi. include/comedi.h commit ebd3258a054a16458a074f33d2dbcd51b8c0e500 Author: Bernd Porr Date: 2007-11-25 21:17:14 +0000 New firmware with PWM support. It uses the GPIF of the board to stream out the bit streams. etc/hotplug/usb/usbdux/fx2-include.asm etc/hotplug/usb/usbdux/usbdux_firmware.asm etc/hotplug/usb/usbdux/usbdux_firmware.hex commit 94ad4788d97053832b1ec7ae0f19ba99db7770b7 Author: Ian Abbott Date: 2007-11-22 18:11:22 +0000 Support -c channel and -r range options. demo/ao_waveform.c commit 36dfab8446199c76e518840ba90d72b584dcf6fa Author: Bernd Porr Date: 2007-11-20 19:43:00 +0000 Moved EXTRA_DIST outside of conditionals (as already happened to hotplug) etc/udev/Makefile.am commit a630001ef0c2b138fea3624a5abc92c72a9e4491 Author: Frank Mori Hess Date: 2007-11-13 03:18:32 +0000 Fixed name of comedi_cleanup_calibration() doc/funcref commit 24da90810d10c48765735af7c8c9567c90bbd8a5 Author: Frank Mori Hess Date: 2007-11-10 16:54:15 +0000 Adding trivial email address obfuscation, since some of the AUTHORS files are linked to from the web page. AUTHORS commit 605fd5565556b75cae0769ae11d64b888549f2cc Author: Ian Abbott Date: 2007-11-07 13:01:50 +0000 Fix use of INSN_GTOD so it works on 64-bit platforms. A struct timeval is not the same size as a pair of lsampl_t's for 64-bit, so can't point 'data' in a comedi_insn to a struct timeval and expect it to work! demo/insn.c doc/reference.sgml doc/tutorial.sgml testing/insn_read_time.c commit a68c805998ebb4f3adbd92210c6db28090cd21a9 Author: Ian Abbott Date: 2007-11-02 16:03:58 +0000 Fix out-of-tree build of ruby bindings. swig/ruby/Makefile.am commit bf4a793f51d5feb83132cf1f726b56bb4800fb5d Author: Frank Mori Hess Date: 2007-10-29 01:12:57 +0000 Fixed warning on 32 bit arch, caused by my fix for 64 bits. demo/ao_mmap.c commit 5b96772c03c2efcaeab625b45dfd4dfdd52fcde9 Author: Frank Mori Hess Date: 2007-10-29 01:01:26 +0000 Regenerated ChangeLog with "cvs2cl -t" for 0.8.1 release. ChangeLog commit fde862bdbdd57181b69317f29c41ec38d1718b70 Author: Frank Mori Hess Date: 2007-10-29 00:59:29 +0000 Bumped version for 0.8.1 release. configure.ac commit c73ce599a6449bb42ed5e61ba05825bf7cb39a32 Author: Frank Mori Hess Date: 2007-10-29 00:58:41 +0000 synced with comedi. include/comedi.h commit 464fb550cc082762e33edbaf7f5652fa169139de Author: Frank Mori Hess Date: 2007-10-26 21:10:05 +0000 Fixed compile warning on amd64 demo/ao_mmap.c commit 6c72b05ff469d6d270928e64529a1e04fe6d511a Author: Frank Mori Hess Date: 2007-10-21 20:05:13 +0000 Moved EXTRA_DIST outside of conditionals. etc/hotplug/usb/usbdux/Makefile.am etc/hotplug/usb/usbduxfast/Makefile.am commit 334b16aabe06e5527da2b37c306332826ab08adc Author: Frank Mori Hess Date: 2007-10-17 20:17:43 +0000 Synced with comedi. include/comedi.h commit 595eae1962592b802276b769c66ae529437c97b1 Author: Frank Mori Hess Date: 2007-10-17 20:12:41 +0000 Added comedi_iostream.hpp to include_HEADERS c++/include/Makefile.am commit 95bea14e9e21493383258f4f00257529439d17d8 Author: Frank Mori Hess Date: 2007-10-15 19:37:50 +0000 Added dio_config and dio_bitfield2 to c++ binding. c++/include/comedilib.hpp commit 9e4c195b924cdb8260eedc223337a99228fc57b6 Author: Frank Mori Hess Date: 2007-10-15 00:02:49 +0000 Patch from steven.jenkins@ieee.org (Steven Jenkins): The SWIG interface file (swig/comedi.i) is out of date with respect to comedi.h and comedilib.h. I've attempted to make it current by applying most of the changes since 1.22 (both headers). My ability to test is limited. The swig/ruby/demo/cmd application runs successfully using the comedi_test device. The python extension library compiles, but that's as far as I've taken it. swig/comedi.i swig/ruby/demo/cmd swig/ruby/lib/comedi.rb commit b6144ac99b7ccecdf984fdd4dae1ac7cf196cd59 Author: Frank Mori Hess Date: 2007-10-12 21:24:11 +0000 Added comedi::istream and ostream classes, to provide slightly higher level ostream::write() and istream::read() functions for transferring data during commands. c++/include/comedi_iostream.hpp commit bdbd1ab792b39486e35c01cf4d0d5cf69c538c36 Author: Frank Mori Hess Date: 2007-10-12 21:22:05 +0000 Added default constructor for comedi::subdevice, and added missing wrapper for comedi_cancel(). c++/include/comedilib.hpp commit e8ad2b3498bbb0511b10b3c39b3e403819d93a9c Author: Frank Mori Hess Date: 2007-09-28 19:02:02 +0000 Sync with comedi. include/comedi.h commit d720e88a52f7a4526ac2edb4a9d5bc6ad25cd302 Author: Frank Mori Hess Date: 2007-08-27 21:46:35 +0000 Added C++ binding. Makefile.am c++/Makefile.am c++/include/Makefile.am c++/include/comedilib.hpp configure.ac commit e448dd685e40815358a3917e2b87a20891047417 Author: Frank Mori Hess Date: 2007-08-27 20:32:07 +0000 Got rid of redundant EXTRA_DIST include/Makefile.am commit d2708571d4eb2f7daaeff15a2456912251e5b957 Author: Frank Mori Hess Date: 2007-08-19 18:39:03 +0000 Patch from Tobias Blaser : Here is a patch to CVS which adds the DESTDIR variable to the installation rules in the comedilib doc Makefile. Convenient when creating packages. AUTHORS doc/Makefile.am commit 1081d0ff02c139093fdaa74fb896f8e16a2b3da0 Author: Frank Mori Hess Date: 2007-08-19 18:30:26 +0000 Gave libscxi independent version info from libcomedi. Removed attempt to link to libcomedi when building libscxi. configure.ac lib/Makefile.am scxi/Makefile.am commit aa782ffee1a71872cc08639ae1d0f66db82dcbec Author: Frank Mori Hess Date: 2007-08-14 13:21:47 +0000 Added blurb about do_waveform. demo/README commit 70dfd75dfbf604782cc00fb4e6ca677f274cbd1b Author: Frank Mori Hess Date: 2007-08-13 21:21:39 +0000 Added digital output command demo. demo/Makefile.am demo/do_waveform.c commit aa946e4810c256bb8c62b8f391694d00c82723a8 Author: Frank Mori Hess Date: 2007-08-13 21:20:35 +0000 Be a little more correct by setting CMDF_WRITE flag, in preparation for subdevices that support both input and output commands. demo/ao_waveform.c commit e9f25368435bf4d7352f67ab077428f8924d29cb Author: Frank Mori Hess Date: 2007-08-13 21:19:36 +0000 print subdevice too on command dumps. demo/common.c commit da5769b50f958ccb2eddcceca8a4d21282f39dda Author: Frank Mori Hess Date: 2007-08-13 21:18:47 +0000 synced with comedi. include/comedi.h commit 12389d30c38c9eae0b053dd53d96d081c30240cf Author: Frank Mori Hess Date: 2007-08-10 18:48:03 +0000 Moved comedi_internal_trigger into common.c demo/ao_mmap.c demo/ao_waveform.c demo/common.c demo/examples.h commit 0ec21b27ef8d18be500b1f60d40a3411e1eaa030 Author: Frank Mori Hess Date: 2007-08-10 17:50:59 +0000 Removed some obsolete comments. demo/ao_waveform.c commit 37aeec001c20d26ed10830e012173bcf51eb10ea Author: Frank Mori Hess Date: 2007-08-09 14:10:52 +0000 Need to use stop_src=TRIG_NONE demo/gpct_buffered_counting.c commit b5b135c303783622078703dec1528b94d3b430de Author: Frank Mori Hess Date: 2007-08-07 20:59:24 +0000 Default buffer sizes are actually 64k now. man/comedi_config.8 commit c1082cee6537c797e7caf852c15163dfea177579 Author: Frank Mori Hess Date: 2007-08-02 19:46:44 +0000 Fixed comedi_get_cmd_generic_timed() by adding a chanlist_len parameter. Old version is still available in library, thanks to the magic of the version_script. demo/cmd.c demo/info.c demo/mmap.c doc/funcref include/comedilib.h lib/cmd.c lib/version_script swig/comedi.i testing/cmd_1.c testing/cmd_2.c testing/cmd_3.c testing/inttrig.c testing/mmap.c testing/select.c commit d11d8a69be3712cc507499344a7e479e47fc9d7a Author: Frank Mori Hess Date: 2007-08-02 19:43:04 +0000 sync with comedi doc/drivers.txt commit 3d1ae7facdb4ab3074a52eef8b65dedbec4c712d Author: Frank Mori Hess Date: 2007-08-02 18:44:39 +0000 Removed duplicate declaration. demo/cmd.c commit 2dd7b6c4fea45eada2dc15395d9f8a127da68329 Author: Frank Mori Hess Date: 2007-07-31 19:51:53 +0000 Blah, a fresh cvs checkout does need a couple command-line options to autoreconf, so put autogen.sh back in. Makefile.am README.CVS autogen.sh commit c06664b86765109c86bc480802327e17e1301481 Author: Frank Mori Hess Date: 2007-07-31 17:47:49 +0000 Autogenerated ChangeLog using "cvs2cl -t" ChangeLog commit 2b73533b8b7c62ef9f0582273fa93969d96fad12 Author: Frank Mori Hess Date: 2007-07-31 17:43:18 +0000 Got rid of doccomedilib, use "configure --docdir=blah" and related options. Fixed some problems with "make distcheck". configure.ac doc/Makefile.am etc/Makefile.am commit 9c9500a7b406060bf4d908472184c20df173bace Author: Frank Mori Hess Date: 2007-07-31 17:38:15 +0000 autogen.sh is gone. Makefile.am commit 3a30f9f97cd7cbba6d802ab3f09b1f33f2924563 Author: Frank Mori Hess Date: 2007-07-31 14:50:47 +0000 Got rid of autogen.sh, and just tell people to run autoreconf. NEWS README.CVS autogen.sh commit b216256a536dea45dee5234f517c8973dc1632dc Author: Frank Mori Hess Date: 2007-07-31 14:47:27 +0000 Added AUTHORS list to comedilib. AUTHORS commit 2d7d5f9bf35b943bc77834ac5d3fefe622dfc5a2 Author: Frank Mori Hess Date: 2007-07-31 14:27:21 +0000 Took comedi_dio_bitfield out of _COMEDILIB_DEPRECATED for release, until bindings are updated. include/comedilib.h commit 1e3e40f1f1c62305c8eb0f38c7d6f698afbf4f15 Author: Frank Mori Hess Date: 2007-07-31 14:20:44 +0000 synced with comedi doc/drivers.txt commit 2b04263bedaf9efdfb35a4bf590a3153b2a1f3e7 Author: Frank Mori Hess Date: 2007-07-31 02:44:29 +0000 Actually, according to current:revision:age practice, the next release should be 0.8.0 since new functions have been added since 0.7.22. configure.ac lib/buffer.c lib/calib.c lib/dio.c lib/get.c lib/version_script commit e790acd5a6c5b0f9756f98e1bf1424c124a689f0 Author: Frank Mori Hess Date: 2007-07-31 02:29:58 +0000 Fixed up AC_INIT and AM_INIT_AUTOMAKE parameters. configure.ac commit 8d74d571b32dffce94b31a2b498ba1f308ab41c4 Author: Frank Mori Hess Date: 2007-07-31 02:21:24 +0000 Move to current:revision:age discipline for library version numbers. Bumped version for next release. configure.ac lib/Makefile.am m4/as-libtool.m4 commit 68e1efcdbcbb861eae332edc242898e599649cc4 Author: Frank Mori Hess Date: 2007-07-30 03:50:30 +0000 Synced with comedi. doc/drivers.txt commit 1faffb3919403bc65a6e0f2cbec008dcdf9980f8 Author: Frank Mori Hess Date: 2007-07-30 03:26:57 +0000 Added mention of comedi_calibrate and comedi-nonfree-firmware tarballs. README commit 2f7cc6c6f2d454394d8b3fa9936fc7dad5060baa Author: Ian Abbott Date: 2007-07-24 13:50:45 +0000 synced with comedi doc/drivers.txt commit 06fa9b06b1cb78906f45ee39ae540d221b388456 Author: Ian Abbott Date: 2007-07-24 13:38:14 +0000 Add calib_lex.h to noinst_HEADERS. lib/Makefile.am commit fc1be39d47979f44d2c979a71608a64fad70f1fb Author: Ian Abbott Date: 2007-07-24 13:06:40 +0000 Add closing tags for and . doc/glossary.sgml commit c8ff80779bef355c37c32678a3b513639b24f4e4 Author: Frank Mori Hess Date: 2007-07-16 15:01:06 +0000 Synced with comedi. include/comedi.h commit 50f11c17b86f8450435a98a8d8d34c132a64a5f9 Author: Frank Mori Hess Date: 2007-07-16 15:00:28 +0000 Added some sanity checks, and made it use the read subdev by default if no "-s" command line option is given. demo/gpct_buffered_counting.c commit 5868ebdb9903f798af6bf3183e8503de5e7a4a46 Author: Frank Mori Hess Date: 2007-07-16 14:01:40 +0000 Corrected comments describing read_subdevice and write_subdevice members of comedi_devinfo doc/reference.sgml commit a7d0851c8577ac3cec6cd443a12027f36bb00def Author: Frank Mori Hess Date: 2007-07-16 12:46:38 +0000 Forgot to add file for new demo. demo/gpct_buffered_counting.c commit 23acd1d5bdf0d266347d7999e28b6578dad8b3ae Author: Frank Mori Hess Date: 2007-07-13 20:32:43 +0000 Sync with comedi. include/comedi.h commit ecceacdc8155d5cec71256d82c1c8ac56ae5d429 Author: Frank Mori Hess Date: 2007-07-13 20:31:50 +0000 Added NI GPCT buffered counting example. demo/Makefile.am commit 81d55d2a522a88a5595667d2f1c4bdb4b214babf Author: Frank Mori Hess Date: 2007-07-12 14:57:08 +0000 New demo program. demo/choose_filter.c commit c5bd91e4c8165fa4372703c52d1037399f53864f Author: Frank Mori Hess Date: 2007-07-12 14:56:21 +0000 sync with comedi include/comedi.h commit 1a4e7fe192dba73e2eb80190dd61e245024d90fd Author: Frank Mori Hess Date: 2007-07-11 18:26:53 +0000 Initialize counter value to zero. demo/gpct_simple_counting.c commit 1299e25cf46438c9495422aafa443fba19ea26bc Author: Frank Mori Hess Date: 2007-07-11 18:26:32 +0000 Added a comment. demo/gpct_pulse_generator.c commit 44d6175e7cbea9e1a63971531a7efa7cfcdfb589 Author: Frank Mori Hess Date: 2007-07-10 14:26:30 +0000 Removed unused variable. demo/gpct_encoder.c commit 7e3d88314ba35f4277cb3552df185ef375e3d275 Author: Frank Mori Hess Date: 2007-07-10 14:11:32 +0000 Cleaned up mixing of spaces/tabs for indentation probably done by emacs. demo/gpct_encoder.c commit a78711414a1347ea11c1641b899ede41752225db Author: Frank Mori Hess Date: 2007-07-10 14:08:07 +0000 Removed some dead code. demo/gpct_simple_counting.c commit 9804a8c81dda128683d9feba6130c52fee071267 Author: Frank Mori Hess Date: 2007-06-28 01:22:38 +0000 Demo program for quadrature encoder counting with NI GPCT, from Anders Blomdell demo/Makefile.am demo/gpct_encoder.c include/comedi.h commit 5698f4a3722e15792cb07ca16bac9650ed674b6f Author: Bernd Porr Date: 2007-05-24 10:51:17 +0000 Added a line which sets the permissions to 0666 for all /dev/comedi devices. etc/udev/90-comedi.rules commit 9d36f4e886f7569c883f08bd64785e461461dae1 Author: Frank Mori Hess Date: 2007-04-29 18:40:28 +0000 Removed autogenerated file from cvs. etc/udev/Makefile.in commit 408d1e24cd9156f4e8097c7dc0fecbe0ab72d30a Author: Bernd Porr Date: 2007-04-28 00:24:42 +0000 Used AC_ARG_WITH for udev as suggested by frank. configure.ac commit cad8c4c6c160a2cc2bbb56c4e3f5bbe1d526a259 Author: Frank Mori Hess Date: 2007-04-24 20:22:53 +0000 Silenced automake 1.10 warning. configure.ac commit 6277f54e12ffa1de6c27ce51ec5ee1c1ad193c55 Author: Bernd Porr Date: 2007-04-23 22:20:09 +0000 Added udev support. configure.ac etc/Makefile.am etc/hotplug/usb/usbdux/Makefile.am etc/hotplug/usb/usbduxfast/Makefile.am etc/udev/90-comedi.rules etc/udev/Makefile.am etc/udev/Makefile.in etc/udev/usbdux etc/udev/usbduxfast commit c80870a4a6bc9d424943e9dd263288cb1d9926c0 Author: Frank Mori Hess Date: 2007-04-18 14:04:39 +0000 Fixed compile warning under gcc 4.1.2 lib/calib_yacc.y commit 88d88b1f41fa7f7b47f61aa53182c5d7970c66fa Author: Frank Mori Hess Date: 2007-02-26 17:24:24 +0000 synced with comedi. include/comedi.h commit a5cbc369a1e129f491415208cc907901b9a7a260 Author: Frank Mori Hess Date: 2007-01-08 21:54:15 +0000 synced with comedi. include/comedi.h commit 6a0fc4a5e50f8538df4b1aefd6657dc17eda425c Author: Frank Mori Hess Date: 2007-01-08 21:53:59 +0000 Added new gpct_simple_counting demo (shares some code with gpct_pulse_generator demo through common.c). demo/Makefile.am demo/README demo/common.c demo/examples.h demo/gpct_pulse_generator.c demo/gpct_simple_counting.c commit f80c83a1d0c041911d5a2bb5648ac5a4abcdd16c Author: Frank Mori Hess Date: 2007-01-08 20:56:24 +0000 Print large unsigned values correctly (not as negative numbers) for subdevice with 32 bit values. demo/inp.c commit 8db3fa8f4719a8332a0848e5c0108786c0c5fa31 Author: Frank Mori Hess Date: 2007-01-05 21:15:00 +0000 Added brief description of choose_routing demo. demo/README commit daf810a11058e366dcaf6952b62ec8d90575544f Author: Frank Mori Hess Date: 2007-01-05 21:09:28 +0000 Added gpct_pulse_generator demo. demo/Makefile.am demo/README demo/gpct_pulse_generator.c commit 98b683b85decb803e06cf0da3b488daeb18ba108 Author: Frank Mori Hess Date: 2007-01-05 20:39:17 +0000 synced with comedi include/comedi.h commit c1995338a12992b48fccd68bc34b1ecc6395baee Author: Frank Mori Hess Date: 2007-01-05 19:35:14 +0000 print max data value as unsigned value instead of signed, so 32 bit counters show proper max value (instead of -1). demo/info.c commit fbdf65b4f517ad0b93a15204417147a0a9202ebd Author: Frank Mori Hess Date: 2007-01-03 21:14:53 +0000 Made parse_options() write options to a struct instead of passing them through global variables. demo/antialias.c demo/ao_mmap.c demo/ao_waveform.c demo/apply_cal.c demo/choose_clock.c demo/choose_routing.c demo/cmd.c demo/common.c demo/dio.c demo/eeprom_dump.c demo/examples.h demo/info.c demo/inp.c demo/inpn.c demo/insn.c demo/ledclock.c demo/mmap.c demo/outp.c demo/poll.c demo/receiver.c demo/select.c demo/sender.c demo/sigio.c demo/sv.c commit c7a581399a83f4ffaa210f092e5ace1297a3dccf Author: Frank Mori Hess Date: 2007-01-03 15:44:51 +0000 Added a sentence to ao_waveform description. demo/README commit 8ee6219b64e2ad7b7e0e6851fd0c2d306f621563 Author: Frank Mori Hess Date: 2007-01-03 15:43:06 +0000 Removed some C99-isms (mixed code and declarations) demo/choose_clock.c demo/choose_routing.c commit 257bae2a111c0baf42f427adf282a9a92e81cf39 Author: Frank Mori Hess Date: 2007-01-03 15:31:11 +0000 Replaced deprecated AM_PROG_CC_STDC with AC_PROG_CC_STDC configure.ac commit 2d38396fcb9c6a1631d29c67171a924bb561ac02 Author: Frank Mori Hess Date: 2006-10-25 19:57:49 +0000 Added a table with descriptions of a few configuration instructions. doc/other.sgml commit 01da122c40e55971ab6bc3a7071dfe1c076d9361 Author: Frank Mori Hess Date: 2006-10-25 18:53:42 +0000 Updated to docbook 4.2. Fixed broken in tutorial.sgml doc/comedilib.sgml doc/glossary.sgml doc/install.sgml doc/intro.sgml doc/reference.sgml doc/tutorial.sgml commit 261de96d3a46ca605b2f88535df62f7742820ed1 Author: Frank Mori Hess Date: 2006-10-24 20:36:33 +0000 Sync'd with comedi include/comedi.h commit 53747a7f0ac3a68f7ee97bdf67bb8489f457f76d Author: Frank Mori Hess Date: 2006-10-24 15:07:41 +0000 Updated RTSI documentation to reflect my changes. doc/other.sgml commit a31d71f3496976ca3a453ea10d2314398a91814b Author: Frank Mori Hess Date: 2006-10-24 15:07:08 +0000 Sync'ed with comedi. include/comedi.h commit 4cdf1b09a98a064a54ac3eb28ef808ac8277ca3b Author: Frank Mori Hess Date: 2006-10-23 19:35:24 +0000 Added choose_clock and choose_routing demo programs. Synced comedi.h with comedi. Made dio demo simply configure the line direction based on the command line argument. demo/Makefile.am demo/README demo/choose_clock.c demo/choose_routing.c demo/dio.c include/comedi.h commit 34b9800e40fe5dc950ab29535eae9fa353051fd7 Author: Frank Mori Hess Date: 2006-10-17 18:19:29 +0000 Added const qualifiers to some char* return values. Added new experimental comedi_dio_bitfield2() function which works with > 32 channels. Only works properly with ni_65xx currently. Will post a request for review by any interested parties to list before I bother making the rest of the drivers work with it. doc/funcref include/comedilib.h lib/calib.c lib/dio.c lib/get.c lib/version_script commit 4ccca1c790fa1d95c09c4778aa0b377a630ffac5 Author: Frank Mori Hess Date: 2006-09-11 13:55:22 +0000 Added description of SDF_SOFT_CALIBRATED flag. doc/funcref commit 905b99fb60db35e07b2193c66f03feecb8126a66 Author: Frank Mori Hess Date: 2006-09-08 19:40:15 +0000 Added brief description of enum comedi_conversion_direction doc/reference.sgml commit 97ab81dcbcb8812a3f40bacfcc963b704cabd6c1 Author: Frank Mori Hess Date: 2006-09-08 18:38:07 +0000 Added entries for comedi_to_physical() and comedi_from_physical(). doc/funcref commit fe9d8704c2e6dee910089e9fd7547879c7459a4b Author: Frank Mori Hess Date: 2006-09-08 15:41:05 +0000 sync with comedi include/comedi.h commit f4e592b4aab6993456f4cf18335cd57a356b82f0 Author: Frank Mori Hess Date: 2006-09-08 14:53:48 +0000 Added entries for comedi_get_hardcal_converter() and comedi_get_softcal_converter(). Clairified comedi_apply_calibration() a little. doc/funcref commit 1421d0919ea6790f5bc08110fa764b365b4eb82d Author: Frank Mori Hess Date: 2006-09-07 19:09:04 +0000 Added some primative support for using software calibration in a way that can be integrated with boards that don't use software calibrations. include/comedilib.h lib/calib.c lib/version_script commit 881600a31e6cbfbe7fcc69be87f109518ec8c27b Author: Frank Mori Hess Date: 2006-08-31 18:09:27 +0000 Fill in inverse polynomials for first order soft calibrations. lib/calib_yacc.y commit e48a8d91df5dc5307a4a9e6b49991626eaa9254b Author: Frank Mori Hess Date: 2006-08-31 15:29:44 +0000 Added flex and bison generated files to MAINTAINERCLEANFILES lib/Makefile.am commit a186b9a33ceb2f19184eed7ab97c91e902f42399 Author: Frank Mori Hess Date: 2006-08-28 22:59:42 +0000 Fix parsing of floating point values in exponential notation, and numbers with a leading + or - sign (untested). lib/calib_lex.l commit 29358e699fe2428bf6f18dad2c44200776cb2701 Author: Frank Mori Hess Date: 2006-08-22 20:19:19 +0000 Fixed problem with keeping track of whether a software calibration is for the from_phys or to_phys direction. lib/calib_yacc.y commit 4f26b59efc2b77e79a341ebbc301dfeb99c51553 Author: Frank Mori Hess Date: 2006-08-22 20:13:44 +0000 Parsing of calibration file with soft calibration information works now. lib/calib_yacc.y lib/libinternal.h commit d686d1278fd8f16511b4298f1a045ba9037ec119 Author: Frank Mori Hess Date: 2006-08-22 18:14:22 +0000 First pass at parsing additional calibration file elements which support software calibration. include/comedilib.h lib/Makefile.am lib/calib_lex.l lib/calib_yacc.y lib/libinternal.h commit c17577318d3842f4f1f51abb9ee43a5a9234d4f1 Author: Ian Abbott Date: 2006-07-20 11:51:54 +0000 Applied patch from David MacMahon . Adds physical units support to comedilib demo programs. I changed one of the format strings to help line up values better in the 'cmd' example. demo/README demo/cmd.c demo/common.c demo/examples.h demo/inp.c commit d349d2e12b5ebc77f5048a4728fad51053610ac3 Author: Ian Abbott Date: 2006-07-13 17:06:33 +0000 Use comedi_perror to report error if comedi_open fails, and exit with exit code 1. demo/info.c commit 5706893a207409c458a5695480ff2dae4ff2a353 Author: Ian Abbott Date: 2006-07-13 12:45:26 +0000 Applied patch from David MacMahon . Add leading zeroes to subdevice flag values. doc/funcref commit 761ffc3e90b93c11f5c0d79800870ac743663fe3 Author: Ian Abbott Date: 2006-07-13 12:43:14 +0000 Applied (slightly modified) patch from David MacMahon . Reports specific error string (strerror(errno)) if comedi_open fails (I changed the format slightly from David's). Displays subdevice flags as a hexadecimal number. demo/info.c commit f149577d8ab1d25099001f005df707a7da79f592 Author: Ian Abbott Date: 2006-07-13 12:33:58 +0000 Added AC_PROG_LIBTOOL, as suggested by the autotools. configure.ac commit 44d71a63cfbe74b80924a5c90626382708cf5035 Author: Frank Mori Hess Date: 2006-05-02 02:09:02 +0000 Patch from abbotti@mev.co.uk (Ian Abbott): Fixes compile error with gcc 2.96. demo/ao_mmap.c commit 3e2bc0f15a781dbd7efd1841939300b1d37f296e Author: Frank Mori Hess Date: 2006-05-02 01:25:35 +0000 synced with comedi doc/drivers.txt commit 0abfdd0a0e02f6cd14986107175738294ab324fa Author: Frank Mori Hess Date: 2006-05-02 01:21:46 +0000 RTSI documentation from terry1@beam.ltd.uk (Terry Barnaby) doc/other.sgml commit c548e180872dea26a47a65671516c22436b9d70c Author: Frank Mori Hess Date: 2006-03-03 01:00:50 +0000 sync with comedi include/comedi.h commit 64d90d7f374c64cdce46aff0e397ba35f33563e6 Author: Frank Mori Hess Date: 2006-02-15 22:27:00 +0000 Removed comedi_calibrate from subdirs, as it has been split into its own module. Fix is from Ian Abbott . Makefile.am commit c632d4e636aa89acd4543aea4d04aa32ac05da94 Author: Frank Mori Hess Date: 2006-02-05 20:56:11 +0000 Removed comedi_calibrate from comedilib, it is now in its own module. comedi_calibrate/Makefile.am comedi_calibrate/README comedi_calibrate/cal_common.c comedi_calibrate/calib.h comedi_calibrate/cb.c comedi_calibrate/cb64.c comedi_calibrate/comedi_calibrate.c comedi_calibrate/ni.c comedi_calibrate/ni_labpc.c comedi_calibrate/ni_m_series.c comedi_calibrate/other.c comedi_calibrate/results/DAQCard-6024E comedi_calibrate/results/DAQCard-6036E comedi_calibrate/results/DAQCard-6062E comedi_calibrate/results/DAQCard-ai-16e-4 comedi_calibrate/results/DAQCard-ai-16xe-50 comedi_calibrate/results/at-mio-16de-10 comedi_calibrate/results/at-mio-16e-1 comedi_calibrate/results/at-mio-16e-10 comedi_calibrate/results/at-mio-16e-2 comedi_calibrate/results/at-mio-16xe-50 comedi_calibrate/results/measurement-computing-pci-das1000 comedi_calibrate/results/measurement-computing-pci-das1602-16 comedi_calibrate/results/measurement-computing-pci-das6014 comedi_calibrate/results/measurement-computing-pci-das6025 comedi_calibrate/results/measurement-computing-pci-das6034 comedi_calibrate/results/pci-6014 comedi_calibrate/results/pci-6023e comedi_calibrate/results/pci-6024e comedi_calibrate/results/pci-6025e comedi_calibrate/results/pci-6031e comedi_calibrate/results/pci-6032e comedi_calibrate/results/pci-6033e comedi_calibrate/results/pci-6034e comedi_calibrate/results/pci-6035e comedi_calibrate/results/pci-6036e comedi_calibrate/results/pci-6052e comedi_calibrate/results/pci-6071e comedi_calibrate/results/pci-6110 comedi_calibrate/results/pci-6711 comedi_calibrate/results/pci-6713 comedi_calibrate/results/pci-mio-16e-1 comedi_calibrate/results/pci-mio-16e-4 comedi_calibrate/results/pci-mio-16xe-10 comedi_calibrate/results/pci-mio-16xe-50 comedi_calibrate/save_cal.c comedi_calibrate/split_dumps configure.ac commit d4fd5f7b087d96676f53d3d74fde681baa26270c Author: Frank Mori Hess Date: 2006-02-03 01:06:30 +0000 Make sure fine caldacs are reset before attempting to recalibrate coarse caldacs for unipolar ai. comedi_calibrate/ni.c commit adac86b5d94d5585b4d250ef87865acf2616cb42 Author: Frank Mori Hess Date: 2006-01-08 16:37:59 +0000 synced with comedi include/comedi.h commit 0b55b0435d1f1cad37b74bcce9063ee04eecf82b Author: Frank Mori Hess Date: 2006-01-04 02:55:40 +0000 Added beginnings of support for m-series calibration. So far, it just reads various internal calibration sources. comedi_calibrate/Makefile.am comedi_calibrate/calib.h comedi_calibrate/ni.c comedi_calibrate/ni_m_series.c commit caedc7bf151251602bf0a396462f571dcef9f397 Author: Frank Mori Hess Date: 2005-12-28 17:11:35 +0000 Made cmd demo work with SDF_LSAMPL subdevices. demo/cmd.c commit 96fab11cada2a507aad9ba7b297e057027765aad Author: David Schleef Date: 2005-11-04 01:21:42 +0000 Change Kurt Müller's email address doc/intro.sgml commit 7d743ff4972fd46466f9e7a0a06c644da45d672d Author: Frank Mori Hess Date: 2005-11-03 01:24:38 +0000 new results comedi_calibrate/results/measurement-computing-pci-das6014 commit 85237bcd52424a67ca53ffe7c2742b2ba28b4ff0 Author: Frank Mori Hess Date: 2005-11-03 01:21:38 +0000 MC pci-das6014 calibration looks good. comedi_calibrate/cb64.c commit 8ff9586edbb0246e82f5e0d10d8b0cbeccfa3272 Author: Frank Mori Hess Date: 2005-11-02 00:18:27 +0000 sync comedi.h with comedi include/comedi.h commit 904da61cb4b63c0aed2749fe8e9ce12ed59f3555 Author: Frank Mori Hess Date: 2005-11-02 00:12:31 +0000 Added entry for MC pci-das6014 comedi_calibrate/cb64.c commit 4fa75441de080c390f3bba524616c889cfbab3c3 Author: Frank Mori Hess Date: 2005-10-06 22:20:56 +0000 Update 6024e status to STATUS_DONE, and update results for same. comedi_calibrate/ni.c comedi_calibrate/results/pci-6024e commit 43c7a043b741e0dcfac116118d40e63d3eb1e3f2 Author: Frank Mori Hess Date: 2005-09-10 22:20:43 +0000 Added outline of code for loading pci-6052 caldacs from eeprom (doesn't work yet). comedi_calibrate/cb64.c commit 47f1100bf95439631a04a0937ab420b1509a28a2 Author: Frank Mori Hess Date: 2005-09-09 01:06:25 +0000 Set status of at-mio-16xe-50 back to STATUS_DONE, as it seems to be fine after all. comedi_calibrate/ni.c commit af6516b8985091fb6c13dff8d346e7a864844b4e Author: Frank Mori Hess Date: 2005-08-27 00:36:44 +0000 undo recent changes for AT-MIO-16XE-50, which were unproductive. comedi_calibrate/ni.c commit f96c37bb8523f68c45b847a3567c06e12ce4b713 Author: Frank Mori Hess Date: 2005-08-25 23:41:18 +0000 update at-mio-16de-10 to STATUS_DONE comedi_calibrate/ni.c commit 602e201a54eceaea007ca664dfd0e3e21c13c338 Author: Frank Mori Hess Date: 2005-08-25 23:38:03 +0000 new results comedi_calibrate/results/at-mio-16de-10 commit 98b7dd53f6d6935c689d193ba4027f213dca925c Author: Frank Mori Hess Date: 2005-08-24 22:35:04 +0000 fix AT-MIO-16XE-50 calibration to take into account coarse postgain offset that it seems to have (not sure though). comedi_calibrate/ni.c commit be3faf44dddbb859f9463a585e63a8f5b5c1a5a1 Author: Frank Mori Hess Date: 2005-08-22 00:06:05 +0000 Added some diagnostics to try and figure out the 6052. comedi_calibrate/cb64.c commit 40b41587d748d3db8460e0bb4fae4c65955e9e4d Author: Frank Mori Hess Date: 2005-08-14 21:34:36 +0000 updated results for at-mio-16xe-50 comedi_calibrate/results/at-mio-16xe-50 commit ede8fca2441270eb7f47b6340d49dbb23ba31070 Author: Frank Mori Hess Date: 2005-08-14 21:31:43 +0000 update at-mio-16xe-50 status to STATUS_DONE comedi_calibrate/ni.c commit 62264c38054580ebdaefeac27e1b500e68efe081 Author: Frank Mori Hess Date: 2005-07-28 01:03:00 +0000 first try at at-mio-16de-10 calibration comedi_calibrate/ni.c commit 909897a5c341b2aa9d7dc1bb461c63d33c1c6181 Author: Bernd Porr Date: 2005-06-07 23:28:25 +0000 Changed the path so that the .conf files are copied in the doc directory. Otherwise they would have ended up in /usr/share. etc/Makefile.am commit 47450e43879f0c713df3c604dc77a56644d3711a Author: Bernd Porr Date: 2005-06-07 23:27:00 +0000 Creates the proper so-version defined in configure.ac. lib/Makefile.am commit 5ef66deba049f179af5782f0c1d9e4bca51ec628 Author: Bernd Porr Date: 2005-06-07 23:24:39 +0000 Documentation now goes in usr/share/doc/libcomedi0. This path is just the same path debian is using for its own files like README.debian or changlog. Thus, all the docu is then in the same place. doc/Makefile.am commit b53b8933b730f1415d080244e83bd2ca5a1f4f6f Author: Bernd Porr Date: 2005-06-07 23:21:34 +0000 Added variable for the documentation configure.ac commit 45797fa801f3bc643058fec603b04b7ce780eb07 Author: Frank Mori Hess Date: 2005-05-19 23:14:50 +0000 add mention of defaults for --range, --subdevice, --channel, and --subdevice options man/comedi_calibrate.8 commit 4e8e8b8aa9ec0674377410faff590dfc4cea26eb Author: Frank Mori Hess Date: 2005-05-17 01:35:36 +0000 add missing whitespace on description of --help option man/comedi_calibrate.8 commit 15317de0c35d8d98c97af6be8042e98ee6536790 Author: Frank Mori Hess Date: 2005-04-27 00:03:03 +0000 removed debian files from cvs debian/changelog debian/control debian/copyright debian/dirs debian/libcomedi-dev.files debian/libcomedi0.files debian/libcomedi0.postinst debian/libcomedi0.postrm debian/libcomedi0.shlibs debian/python-comedilib.files debian/rules commit 58a2e315df3bc0af3918860e65a2c4dc05ae325a Author: Frank Mori Hess Date: 2005-04-25 21:43:37 +0000 return errors properly in comedi_mark_buffer_read() and comedi_mark_buffer_written() lib/buffer.c commit 4f670c0248c3cc18b9f49e227e53a28622cdbdca Author: Frank Mori Hess Date: 2005-04-25 21:41:48 +0000 fix for comedi_get_generic_timed() from Jan Gukelberger lib/cmd.c commit 34ce707da0f06c798d5cd7619d77e611cd86971f Author: Frank Mori Hess Date: 2005-04-11 02:13:43 +0000 update instructions for integrating new drivers doc/driverwriting.sgml commit 19442d5d0697e03f525c21606e744019da7b0407 Author: David Schleef Date: 2005-04-07 22:36:05 +0000 Ugh, fix the soname problem lib/Makefile.am commit fb04c820053c34c57a8474666294febb76d2954e Author: David Schleef Date: 2005-04-07 22:33:36 +0000 Update from Comedi. doc/drivers.txt commit 17b0ebbf7dc43be86db837173a6fd42ab605b0c0 Author: Frank Mori Hess Date: 2005-03-22 02:05:11 +0000 sync with comedi doc/drivers.txt commit 051314ac61c8cb2d9ccc0785b7a36f3b3e7a57ce Author: Frank Mori Hess Date: 2005-03-19 18:51:13 +0000 add description of --init-data options man/comedi_config.8 commit e91b12f54dac7bb61564536513b8bfdc41033c13 Author: Frank Mori Hess Date: 2005-03-19 00:57:00 +0000 cleanup file pointers with fclose() comedi_config/comedi_config.c commit 7c0ab8f2acdfb3ac1e6800742686bacf82d2ed14 Author: Bernd Porr Date: 2005-03-19 00:42:05 +0000 Fixed a segfault. The fopen command needs a string and not an integer as flag. Every entry in the filename arrary is initally initialised with "NULL". comedi_config/comedi_config.c commit de651eaca0aa5be24cf6a135e6f28c07b27c7e59 Author: Frank Mori Hess Date: 2005-03-17 17:28:19 +0000 add support for multiple firmware files, and uploading firmware on 64 bit arches comedi_config/comedi_config.c commit 111541c2d37829d1fb9cbb513f70e2aeffdf028a Author: Frank Mori Hess Date: 2005-03-17 17:27:12 +0000 sync with comedi include/comedi.h commit ceeb49162ba2c8a2f9ddd9caa3dff35c6ddebe51 Author: Frank Mori Hess Date: 2005-03-16 22:34:38 +0000 added table for subdevice flags to comedi_get_subdevice_flags() documentation doc/funcref commit 933be9aae494781bc797f8d7575dfad0435a0698 Author: Frank Mori Hess Date: 2005-03-16 19:05:34 +0000 use SDF_RUNNING flag to test for completion of ao command testing/cmd_1.c commit 4d7d67982653fe913a677db29576f95527fa344c Author: Frank Mori Hess Date: 2005-03-16 19:04:59 +0000 updated version of comedi_get_subdevice_flags() which is capable of returning dynamic flags like SDF_RUNNING or SDF_BUSY lib/get.c lib/version_script commit 55147aef5c212706540aeb9daf098f497b6d332a Author: Frank Mori Hess Date: 2005-03-13 17:04:47 +0000 info is board_info now demo/README commit 8e115ae15b121401889aa9645e4c8fa7b74a3a57 Author: Frank Mori Hess Date: 2005-03-12 21:11:01 +0000 fix name collision with automake 1.9 demo/Makefile.am commit 2a720182e41ed6b2d7dac4f984e55e844c4e6d15 Author: Frank Mori Hess Date: 2005-03-06 17:42:56 +0000 added comedi_dio_get_config() doc/funcref include/comedilib.h lib/dio.c lib/version_script commit 1e601cbd3f6c7c93e1bff876d54384397f83f298 Author: Frank Mori Hess Date: 2005-03-06 17:35:04 +0000 sync with comedi include/comedi.h commit 8fdb92784a7a430cadd0fe67363e451f6214ee61 Author: Frank Mori Hess Date: 2005-02-27 22:45:14 +0000 patch from Ian Abbott : I was running "comedi_test -v" on my new analog output driver and noticed that it was getting stuck in a loop during the "cmd_write_fast_1_chan" test. It turned out that the test had written more data to the buffer than was required to complete the acquisition (it was using cmd->stop_src = TRIG_COUNT) and then got stuck in a loop waiting for the buffer to empty. The attached patch stops the test_cmd_write_fast_1chan function writing more data than is required to complete the acquisition. testing/cmd_1.c commit 0dc6fe9c33eee8b2857fae0bf0812f591ef18601 Author: Bernd Porr Date: 2005-02-27 20:40:38 +0000 Conterpart to the change in comedi: have taken out the bufferoverflow packet. It has messed everything up. Just restarting the gpif is the best option. Without any additional packets. etc/hotplug/usb/usbduxfast/usbduxfast_firmware.asm etc/hotplug/usb/usbduxfast/usbduxfast_firmware.hex commit 3ed5c07df6655a933154ab417ce2609036e2a2b8 Author: Bernd Porr Date: 2005-02-27 02:18:23 +0000 Set the ring buffer length to 512kB for usbduxfast. This is needed for graphical software like qtscope. Otherwise we get always buffer overflows. etc/hotplug/usb/usbduxfast/usbduxfast commit 545b9420d5b665eba08c2b96d21bbcebf07d53c4 Author: Frank Mori Hess Date: 2005-02-24 20:46:56 +0000 added some error checks demo/tut2.c commit e3c958cf65805b80adaa8fc74009d7afe7e7e43a Author: Frank Mori Hess Date: 2005-02-22 23:00:36 +0000 new results comedi_calibrate/results/measurement-computing-pci-das6034 commit f2eff57381fb540226ade4f55750119b4c055d5f Author: Frank Mori Hess Date: 2005-02-22 23:00:13 +0000 mc pci-das6024 calibration is good now. comedi_calibrate/cb64.c commit 61a12da72fecac6c28e0a95cd5c8e2e6ba963b50 Author: Frank Mori Hess Date: 2005-02-22 13:00:07 +0000 crank up delay for mc pci-das6034 still more. comedi_calibrate/cb64.c commit d11da3c6fac96154b879247388fcfa7c1721f005 Author: Frank Mori Hess Date: 2005-02-20 22:06:00 +0000 trying to fix calibration for meas. computing pci-das6034 comedi_calibrate/cb64.c commit 7ed14c5b16249e1d15e0874fae381e71355d0e7c Author: Frank Mori Hess Date: 2005-02-09 23:20:51 +0000 new results comedi_calibrate/results/measurement-computing-pci-das1000 commit 68ec8cc1846cce5a7b9f14ae9c7423645e43dc44 Author: Frank Mori Hess Date: 2005-02-09 23:19:10 +0000 calibration for pci-das1000 works now comedi_calibrate/cb.c commit def0e9bf8ee473b8be73cdf21b94f678c57674f1 Author: Frank Mori Hess Date: 2005-02-06 16:25:16 +0000 add license header to scxi.c, and caleb as author include/comedilib_scxi.h scxi/scxi.c commit cd07b7217bf438e4755387f9803a456fd48f32e8 Author: Frank Mori Hess Date: 2005-02-06 16:22:41 +0000 fix license headers, and prevent multiple includes of comedilib_scxi.h include/comedi.h include/comedilib.h include/comedilib_scxi.h commit 3a85b2d8985f402270ef0b9d1b926ad23ef653b9 Author: Frank Mori Hess Date: 2005-02-06 16:17:51 +0000 patch from beat.zahnd@phim.unibe.ch (Beat ZAHND), he says: I extendended the SCXI support for the 1122 module and moved the scxi_boards structure to scxi.c include/comedilib_scxi.h scxi/scxi.c commit 1142536a233ade6134d12c3217aa0aa98762b716 Author: Frank Mori Hess Date: 2005-02-03 02:45:40 +0000 fix entries for pcm-das08 etc/pcmcia/comedi.conf commit 5d4729b9eccc5661111d3dc9a3cccfd8535b0de3 Author: Frank Mori Hess Date: 2005-01-23 03:11:30 +0000 mmap works for output waveforms now. demo/ao_mmap.c include/comedi.h lib/buffer.c swig/comedi.i commit 8f06878f5d028b17133609fd076deac4085affce Author: Frank Mori Hess Date: 2005-01-22 14:31:20 +0000 mark initial buffer contents as written, remove some unused variables, fixed buffer overrun demo/ao_mmap.c commit 99c8d0b5f1cef607889165a5dd9b1e343d7bf3b9 Author: Frank Mori Hess Date: 2005-01-17 20:20:26 +0000 added memory mapped ao waveform demo (untested) demo/Makefile.am demo/ao_mmap.c commit 9f6b16e004a2545af7014dc9d4b07b94bd64c921 Author: Frank Mori Hess Date: 2005-01-10 00:46:28 +0000 added comedi_mark_buffer_written() (untested) doc/comedilib.sgml doc/funcref include/comedilib.h lib/buffer.c lib/version_script commit 22eea6221efc86734351c4d2543d35ef0c147e06 Author: Bernd Porr Date: 2005-01-04 17:27:23 +0000 Transfer mode for data is now bulk. If a buffer overflow occurrs the next packet has two 0xff at the begining. etc/hotplug/usb/usbduxfast/usbduxfast_firmware.asm etc/hotplug/usb/usbduxfast/usbduxfast_firmware.hex commit ca83900fcf0289be0a0aac47767154f4ac827b29 Author: Frank Mori Hess Date: 2004-12-04 18:12:35 +0000 patch from steven.jenkins@ieee.org (Steven Jenkins): 'setup.rb config' calls 'extconf.rb' in the ext directory to build the extension Makefile. 'extconf.rb' looks for C source files in the directory when it runs, so SWIG needs to run before 'setup.rb config'. The attached patch makes the output of SWIG a prerequisite for ext/Makefile. swig/ruby/Makefile.am commit d0b58e51d0c034e54f437b5285d5f44a680143e6 Author: David Schleef Date: 2004-12-02 07:59:00 +0000 change URL for RTLinux doc/intro.sgml doc/other.sgml commit 0942349bb8879ede9c4e7a09512af09b2a89a467 Author: Frank Mori Hess Date: 2004-11-23 01:18:14 +0000 patch from Steven Jenkins : If configure attempts to build the Ruby extension on a system without a previous installation of comedilib, compilation fails because gcc can't find comedilib.h. The attached patch adds the distribution include directory to the gcc search path when compiling the extension. swig/ruby/Makefile.am swig/ruby/ext/extconf.rb commit 4cff0c973ef9396ce29c0eb35c76aa061056e72d Author: Frank Mori Hess Date: 2004-11-20 16:56:09 +0000 sync with comedi doc/drivers.txt commit 2b058cf74ed8271af007b77eaecc79ce1ed88629 Author: Bernd Porr Date: 2004-11-02 00:21:21 +0000 Added path to the usbduxfast makefile configure.ac commit 317ef9454d1ea64fd2f1958118094bf0e7f87193 Author: Bernd Porr Date: 2004-11-02 00:19:36 +0000 Added usbduxfast to the makefile.am etc/hotplug/usb/Makefile.am commit e7f8fe430101fff0e6d819d943a3272990b7bda9 Author: Bernd Porr Date: 2004-11-02 00:17:58 +0000 usbduxfast hotplug scripts and firmware. etc/hotplug/usb/usbduxfast/Makefile_asm etc/hotplug/usb/usbduxfast/README etc/hotplug/usb/usbduxfast/fx2-include.asm etc/hotplug/usb/usbduxfast/usbduxfast etc/hotplug/usb/usbduxfast/usbduxfast_firmware.asm etc/hotplug/usb/usbduxfast/usbduxfast_firmware.hex commit c6463add663761b1b2df39c550b391f816f58f26 Author: Bernd Porr Date: 2004-11-02 00:15:47 +0000 For usbduxfast. Initial commit. etc/hotplug/usb/usbduxfast/Makefile.am commit c3422f0c0f1fee3b3ed24c159740109bd06aed73 Author: Frank Mori Hess Date: 2004-10-17 15:25:04 +0000 changed a parameter name include/comedilib_scxi.h scxi/scxi.c commit ce991f80dd84e60ea1fd09d3163c50c6822db341 Author: Frank Mori Hess Date: 2004-10-17 15:24:24 +0000 docbook is not a binding configure.ac commit 4e4c7e33f1dd1af41d362627eea7a87d9c2f3377 Author: Frank Mori Hess Date: 2004-10-17 15:22:06 +0000 new scxi README from Caleb Tennis scxi/Makefile.am scxi/README commit f9e4eb07d73b9a53415606c0470a70aff2f3df5d Author: Frank Mori Hess Date: 2004-10-10 17:03:58 +0000 moved Changelog to ChangeLog and added entry for 0.7.22 ChangeLog commit 366b8b5da0402caf0f3e94a2d5b36f0926ad4384 Author: Frank Mori Hess Date: 2004-09-27 03:27:43 +0000 fix handling of swig so it is run at compile time instead of when building tarball (due to possible dependence on swig library). autogen.sh configure.ac swig/python/Makefile.am swig/python/comedi.py swig/ruby/Makefile.am commit 96e61f54e897d43f5d8c877ff073ac3097a85d64 Author: Bernd Porr Date: 2004-09-22 22:54:04 +0000 Added docbook disable. If the binding is now disabled configure doesn't look for the program and is not complaining that the program is not there. configure.ac commit 3f065e174d97383bb4cadeffdd3acd0334fabf44 Author: Frank Mori Hess Date: 2004-09-09 21:43:16 +0000 add eeprom address for reference voltage on at-mio-64e-3 comedi_calibrate/ni.c commit b956b0ceb49211046f07d721e939c8fedb452619 Author: Frank Mori Hess Date: 2004-08-31 00:09:27 +0000 add support for at-mio-64e-3 comedi_calibrate/ni.c commit 98ceac99f32add86fcc3f4d15a1662aa773ab928 Author: Bernd Porr Date: 2004-08-18 22:22:31 +0000 Changed e-mail adress to berndporr@f2s.com etc/hotplug/usb/usbdux/README commit 769a448373d1bd675ea79c2551a41132ba2d74c2 Author: Bernd Porr Date: 2004-08-18 22:21:42 +0000 New constants for the new firmware. Access to revision control of the FX2. etc/hotplug/usb/usbdux/fx2-include.asm commit 1249c61de9703b51f004fc9aeca2bc7b533ed6c5 Author: Bernd Porr Date: 2004-08-18 22:16:14 +0000 Removed usbdux_firmware.lst because it's just the listing of the assembler which is not needed in the distro. etc/hotplug/usb/usbdux/usbdux_firmware.lst commit f4ca47d701dd2c698b01770c0de6bf315e8c421b Author: Bernd Porr Date: 2004-08-18 22:12:38 +0000 Minor bug fixes. etc/hotplug/usb/usbdux/usbdux_firmware.asm etc/hotplug/usb/usbdux/usbdux_firmware.hex etc/hotplug/usb/usbdux/usbdux_firmware.lst commit 766795510a82d4fa91938e071a67145d63ea9726 Author: Frank Mori Hess Date: 2004-08-14 20:33:46 +0000 add "serial" to subdevice_types testing/info.c commit a9740966edb236a62d84347acf5b53a6b6cb6840 Author: David Schleef Date: 2004-08-13 03:58:06 +0000 bump version configure.ac commit 7cfa1941d7ec4c857608e05de3f30796e4e5764e Author: David Schleef Date: 2004-08-13 03:57:53 +0000 add pkgconfig file comedilib.pc.in commit d9c0d0dc7037faff8214752784edf1893d7850bf Author: David Schleef Date: 2004-08-13 03:52:41 +0000 Add pkgconfig file. Add 'make dev' target. Makefile.am commit 8f3bcc94c5ad4a788c133f6d1472f5f7680c81c2 Author: David Schleef Date: 2004-08-11 21:56:06 +0000 update debian packaging debian/changelog debian/control debian/rules commit f8389c58f5908d2b626d21e7a901962e78bb9f0a Author: David Schleef Date: 2004-08-11 21:37:46 +0000 Fix distcheck swig/Makefile.am swig/ruby/Makefile.am commit 33d9f3daca79f930bbc587735b309a69123be702 Author: Frank Mori Hess Date: 2004-08-02 01:35:41 +0000 removed an unneeded debug message comedi_calibrate/cb64.c commit 2b1efc8b6c91bf50a8bec4ed2f170d74eb815721 Author: Frank Mori Hess Date: 2004-08-02 00:10:47 +0000 added some error messages, and update status of pcidas-1000 comedi_calibrate/cb.c comedi_calibrate/cb64.c commit 06a7891c4dd4975f9d2edfe19babbf2efeb253bc Author: Frank Mori Hess Date: 2004-08-02 00:09:51 +0000 fix check for presence of ao subdevice comedi_calibrate/cal_common.c commit cdb4e7d266dfb2f8f02a19bb75a13cb3141744db Author: Frank Mori Hess Date: 2004-08-01 22:24:01 +0000 updated usbdux firmware from Bernd Porr: Firmware now only measures as many channels as are in the channel list. If there's only one channel in the list we can manage to measure within one microframe. This makes it possible to measure with 8kHz max. Added a counter. The counter is called every 2ms from an FX2 timer inerrupt. Low priority so that measurements are not disturbed. The bulk transfers are now two times faster (insn). Reading an A/D value or an DIO takes now only 2ms or less. The trick is that the in endpoint is already filled when the request is issued. Fixed a bug in the FIFO resets. Second counter did not count properly. That's fixed. Also found two missing syncdelays. etc/hotplug/usb/usbdux/usbdux_firmware.asm etc/hotplug/usb/usbdux/usbdux_firmware.hex commit 2afaa069bd3ad18a53e0048aec50f7bfd6d176b1 Author: Frank Mori Hess Date: 2004-07-25 00:39:39 +0000 insert usleep() in loop testing/cmd_1.c commit 5ff9f2f63e5a598e2ffc8b02dc961b864ca0ca90 Author: Frank Mori Hess Date: 2004-07-24 21:27:05 +0000 update status of 6014 comedi_calibrate/ni.c commit 4496652627870742500fc23c1b31c72b522a58ed Author: Frank Mori Hess Date: 2004-07-24 18:04:59 +0000 fix building of drivers.sgml and funcref.sgml when building out of tree doc/Makefile.am commit 53419b4e09b81cfa36a802d2e02e1deaa99c1c61 Author: Frank Mori Hess Date: 2004-07-24 17:03:06 +0000 patch for out-of-tree builds from Caleb Tennis doc/Makefile.am commit c673de7c79ba910a891ecf8653971a263f232cbc Author: Frank Mori Hess Date: 2004-07-24 16:09:01 +0000 fix internal trigger when testing write command, and fix test when write command uses stop_src==TRIG_NONE instead of TRIG_COUNT testing/cmd_1.c testing/comedi_test.h commit e66997b981d748941821eb224f048760386d5075 Author: Frank Mori Hess Date: 2004-07-24 15:47:30 +0000 fix test_segfault() so it works with 2.6 kernel signal handling behaviour testing/mmap.c commit 6aa65af0be33119a198058273d6869f291812ffc Author: Frank Mori Hess Date: 2004-07-14 11:42:05 +0000 add entry for at-mio-64e-3 comedi_calibrate/ni.c commit 60a04025a926c53642e43dd9b83b83db3b31dd39 Author: Frank Mori Hess Date: 2004-06-30 00:28:27 +0000 new results comedi_calibrate/results/pci-6034e commit 8d5b7e9e13a555f90d52a8640901677ffe6594a8 Author: Frank Mori Hess Date: 2004-06-30 00:25:23 +0000 updated pci-6034e to STATUS_DONE comedi_calibrate/ni.c commit 769129848d30924595c0543ffff11fff1eb7675e Author: Frank Mori Hess Date: 2004-06-29 01:21:23 +0000 add support for pci-6034e comedi_calibrate/ni.c commit 9a84e6a44b6360bd2d989a862de0772c383a70be Author: Frank Mori Hess Date: 2004-06-20 03:36:33 +0000 use setup.rb for clean-local and distclean-local swig/ruby/Makefile.am commit 7888c4a8e705cded1ac6f233ad2a1465aa26ea86 Author: Frank Mori Hess Date: 2004-06-20 02:37:18 +0000 make distcheck works now with automake 1.8 Makefile.am commit 9dd97c647061ebd6507636d4478a2d29fff43533 Author: Frank Mori Hess Date: 2004-06-20 01:45:16 +0000 fix strict aliasing warning lib/data.c commit bddf0434f115eb1929b138f77864d4757ec413fe Author: Frank Mori Hess Date: 2004-06-19 23:12:30 +0000 fix ruby prefix to work for distcheck Makefile.am configure.ac commit 67319a9e99c5839bd12f09093f70e348c8cefe4c Author: Frank Mori Hess Date: 2004-06-19 19:55:26 +0000 fix for compiler warning about strict aliasing rules testing/mode0_read.c commit 06a5a7846a3bab8a434eedbe6f6cefa18ef87186 Author: Frank Mori Hess Date: 2004-06-19 17:55:38 +0000 added some files to EXTRA_DIST that were left out of tarball swig/ruby/Makefile.am commit 3d426c3cac4620628863f57e238844394ab875ac Author: Frank Mori Hess Date: 2004-06-19 15:25:30 +0000 fixes for srcdir != biulddir lib/Makefile.am commit 0e94ca5098111a5d912023436ee4d1b8332044ff Author: Frank Mori Hess Date: 2004-06-19 15:24:24 +0000 fix compiler warnings about strict aliasing lib/dio.c commit d20c5e18c9e3a41ae48641b0e80920b225ea208f Author: Frank Mori Hess Date: 2004-06-19 15:06:00 +0000 fix compilation when builddir != srcdir swig/python/Makefile.am swig/ruby/Makefile.am commit 2541e7b171ca582321378408c0f1b5e582ca0bf2 Author: David Schleef Date: 2004-06-12 20:56:06 +0000 distcheck fixes configure.ac swig/ruby/Makefile.am commit 60942692cffc0b393b428fe446e4e9f5d5e0829f Author: Frank Mori Hess Date: 2004-06-10 12:01:59 +0000 fix eeprom address for 6713 comedi_calibrate/ni.c commit bbe6060b5312de30c79a1d52248ee83342869270 Author: Frank Mori Hess Date: 2004-06-09 23:08:26 +0000 add warning to 6711 calibration if driver version might be too old comedi_calibrate/ni.c commit ccdecfcd81dd8fd0c452de36eb94c1813f585cfe Author: Frank Mori Hess Date: 2004-06-09 23:01:35 +0000 6713 is completely failing comedi_calibrate/ni.c commit 917e918708ce5e59fb65e5732f4dd0a96c0bd03f Author: Frank Mori Hess Date: 2004-06-08 00:20:22 +0000 updated status of 6713 comedi_calibrate/ni.c commit 57490664b40fa7b53a5de92dca986d230e070fdf Author: Frank Mori Hess Date: 2004-06-05 16:29:38 +0000 new results comedi_calibrate/results/pci-6014 commit d827f8ab712fb1269e823216e8c39757176e3585 Author: Frank Mori Hess Date: 2004-06-05 16:25:17 +0000 actually, status for 6713 should still be STATUS_GUESS comedi_calibrate/ni.c commit 63239bdde8a4188595878e38039802ae963ca038 Author: Frank Mori Hess Date: 2004-06-05 16:21:59 +0000 update pci-6713 status and add eeprom address of reference voltage comedi_calibrate/ni.c commit 4dbc361f7e968fcb29037bebf155e060fa1f6b94 Author: Frank Mori Hess Date: 2004-06-01 01:37:56 +0000 6014 seems to have ao fine offset caldacs, instead of linearity comedi_calibrate/ni.c commit 600b597caf78f28a4c857b68161804c69544e995 Author: Frank Mori Hess Date: 2004-06-01 01:26:35 +0000 update daqcard-6036e status to STATUS_DONE comedi_calibrate/ni.c commit 9d095b876b9cdadbda4d94beb1931c8a84a3701f Author: Frank Mori Hess Date: 2004-06-01 01:26:09 +0000 new results comedi_calibrate/results/DAQCard-6036E commit 0cec15340669871dd7ac7d4e0dd14b22b0736632 Author: Frank Mori Hess Date: 2004-05-25 00:15:34 +0000 pci-6014 support comedi_calibrate/ni.c commit d405d3694400b1a7323df65d33e12925a4484682 Author: Frank Mori Hess Date: 2004-05-22 01:08:48 +0000 added stub for pci-6014 comedi_calibrate/ni.c commit 57decd8731665279c3672a0dd58464f0abb80386 Author: Frank Mori Hess Date: 2004-05-20 21:53:38 +0000 fixes for DAQCard-6036E comedi_calibrate/ni.c commit a80fe88246d3e92e28d0e4f662f036156f22c855 Author: Frank Mori Hess Date: 2004-05-13 02:15:48 +0000 new results comedi_calibrate/results/at-mio-16e-10 commit b63b9ae21a6ce4199fec1afe5ce1aa5991885776 Author: Frank Mori Hess Date: 2004-05-13 02:14:05 +0000 update status of at-mio-16e-10 comedi_calibrate/ni.c commit fe2b93e7b5a8f28adb361154a3a635e752833ea0 Author: Frank Mori Hess Date: 2004-05-12 01:08:49 +0000 filling in missing caldacs for at-mio-16e-10 comedi_calibrate/ni.c commit d85b79a3f5d5c3f11076f5a6cdcefc6a53bf854b Author: Frank Mori Hess Date: 2004-05-09 21:57:56 +0000 fixes for at-mio-16e-10 comedi_calibrate/ni.c commit 907942460b486b585ab6e20e9323b182be9e21ef Author: Frank Mori Hess Date: 2004-04-11 17:29:53 +0000 new calibration output comedi_calibrate/results/at-mio-16e-1 commit b737bfcbb79d4ae0a809aed45acba36bce228aa5 Author: Frank Mori Hess Date: 2004-04-04 02:22:44 +0000 add support for ao linearity calibration on at-mio-16e-1 and at-mio-16e-2 comedi_calibrate/ni.c commit 0dbabb2cdd287516afebc0a845ce01c9f479b40b Author: Frank Mori Hess Date: 2004-03-29 02:19:38 +0000 scxi convenience library patch from caleb tennis: This latest patch changes the interface to three functions: comedi_scxi_open comedi_scxi_close comedi_scxi_readwrite With these three functions one can properly interface to all SCXI devices. If you like the latest patch (3/23/04 07:14), please apply and close this bug. Next up will be adding some generic analog and digital IO functions. include/comedilib_scxi.h scxi/scxi.c commit 30e7053ebce4d058ecef42c81477bd8680d03aed Author: Frank Mori Hess Date: 2004-03-29 01:43:27 +0000 usbdux update from bernd porr: The new hotplug script uses comedi/usbdux.c for firmware upload and not fxload any more. fxload is too unreliable and seems to be missing or different among different distros. All users of usbdux boards report problems which are fxload related. The new hotplug script simply uses comedi_config -i firmware.hex. This fix also removes problems with the usbdevfs (race in 2.6, sleep, ...). The usbdevfs is no longer needed. etc/hotplug/usb/usbdux/usbdux commit dfc1ffbdbaa9a6554d16f1cbdd90ae666bbcfe69 Author: Frank Mori Hess Date: 2004-03-29 01:39:36 +0000 update to ruby binding from steven jenkins: Better exception handling. More consistent handling of return values. Updated documentation. swig/ruby/README swig/ruby/demo/cmd swig/ruby/demo/common.rb swig/ruby/demo/inp swig/ruby/demo/outp swig/ruby/lib/comedi.rb commit 96cfcf95364d5290d549485c0f4a37814ba64eeb Author: Frank Mori Hess Date: 2004-03-29 01:34:15 +0000 added daqcard 6036e support comedi_calibrate/comedi_calibrate.c comedi_calibrate/ni.c commit 6623e404d8218438ea24885aca24ddb473d0dcdc Author: Frank Mori Hess Date: 2004-03-24 21:26:02 +0000 new calibration results comedi_calibrate/results/pci-6711 commit bb2f1868846116c92cbc984b4668301a992f5b7a Author: Frank Mori Hess Date: 2004-03-11 23:29:58 +0000 ni pci-6711 calibration works now comedi_calibrate/ni.c commit 246d9434f2e062ef3e6d5cab4d7aa376ba8689d9 Author: Frank Mori Hess Date: 2004-03-07 22:21:10 +0000 downgrade status of 67xx boards to STATUS_UNKNOWN, since they don't work comedi_calibrate/ni.c commit 41ce3f70a09940eb4e4b613013d0829f8058adf2 Author: Frank Mori Hess Date: 2004-03-06 22:13:37 +0000 patch from Steven Jenkins ------- The attached patch updates files in comedilib/swig/ruby. lib/comedi.rb is updated to raise Ruby exceptions as indicated by the comedilib API documentation. README and demo/cmd are updated accordingly. swig/ruby/README swig/ruby/demo/cmd swig/ruby/lib/comedi.rb commit b48bfe080a5d3597ea8f8f756c1c99578f2951e6 Author: Frank Mori Hess Date: 2004-03-03 03:14:03 +0000 fix equality test m4/as-ac-expand.m4 commit bb1ff949c9e5a9c76a0ecc5cec8d02f5c2289329 Author: Frank Mori Hess Date: 2004-02-29 16:52:17 +0000 beginnings of scxi convenience library from Caleb Tennis Makefile.am configure.ac include/Makefile.am include/comedilib_scxi.h scxi/Makefile.am scxi/scxi.c commit 8be040818710665c8a85b4db6ed23bf9a51a6267 Author: Frank Mori Hess Date: 2004-02-29 16:49:29 +0000 add serial dio subdevice type demo/info.c commit ae9babbc61186254d5608f4958dbf6dd4031b1db Author: Frank Mori Hess Date: 2004-02-24 13:09:26 +0000 guess reference eeprom address again comedi_calibrate/ni.c commit 628ec4210b32a6f5e8151dd117ba07339dcc1677 Author: Frank Mori Hess Date: 2004-02-24 01:20:06 +0000 new results comedi_calibrate/results/pci-6033e commit 368b22e2515e6b28b66c277e189c26139df82699 Author: Frank Mori Hess Date: 2004-02-24 01:16:25 +0000 fix eeprom address for voltage reference on 6033e comedi_calibrate/ni.c commit 23c1d703db25edefb1b5e7124aab494f00b596ad Author: Frank Mori Hess Date: 2004-02-21 14:34:08 +0000 make sure ground isn't out of range during unipolar gain calibration for 6033e comedi_calibrate/ni.c commit f97908c06e3e6b5e9ba01240d253642b7c587428 Author: Frank Mori Hess Date: 2004-02-18 00:14:30 +0000 sync with comedi include/comedi.h commit 3271187236baef27f7ff5b519593b3a58e72632d Author: Frank Mori Hess Date: 2004-02-16 14:30:45 +0000 enabling support for pci-6033e comedi_calibrate/ni.c commit 6ea1735e6e934c76674fae4edf1ff1afb4928915 Author: Frank Mori Hess Date: 2004-02-16 14:02:19 +0000 Update from Bernd Porr. Sleeps only if the file is not there. etc/hotplug/usb/usbdux/usbdux commit 9097a55736595f3e35ea7fefe28cc5f01bd5f6ab Author: Frank Mori Hess Date: 2004-02-15 22:24:57 +0000 add support for 67xx boards. Doesn't work yet, due to unknown reference of internal calibration adc. On my board, it's input seems to be about 2% off from +-10V. comedi_calibrate/cal_common.c comedi_calibrate/calib.h comedi_calibrate/comedi_calibrate.c comedi_calibrate/ni.c commit 2aeeb17080e8f1250792c46440294ba54054c550 Author: Frank Mori Hess Date: 2004-02-07 22:20:16 +0000 usbdux firmware update from Bernd Porr: Bugfix version of the firmware. When running ./cmd and ./ao_waveform at the same time I got CRC errors on the USB. Reason: some registers in the FX2 need a syncdelay. After a write to a register no other write is allowed to any other register for a certain time. This is called "Syncdelay". Introduced syncdelays for all EP registers. Now the CRC errors are gone. Another bugfix: the byte for the CPUCS register was wrong (shifted one bit to the left). This resulted in undefined processor speed. The speed was chosen just by chance at power up (12Mhz,24Mhz,48Mhz). etc/hotplug/usb/usbdux/usbdux_firmware.asm etc/hotplug/usb/usbdux/usbdux_firmware.hex commit 38580fc697078c8a59646d1673a7afbe5f2c7aea Author: Frank Mori Hess Date: 2004-02-07 21:42:49 +0000 patch form Bernd Porr: added a "sleep 1" just before fxload to eliminate race condition betwwen hotplug and usbdevfs in the preemptive 2.6 kernel etc/hotplug/usb/usbdux/usbdux commit 659520b9587feabf18a7d018bc7d1a6d8679367e Author: Frank Mori Hess Date: 2004-01-31 22:19:47 +0000 sync with comedi include/comedi.h commit 4d08248fdaab09cd9f53b06692d218430660d95c Author: Frank Mori Hess Date: 2004-01-31 21:57:02 +0000 update for usbdux driver form Bernd Porr who says: Had to change the USB 2.0 transfer protocol from IRQ transfer to ISO transfer. Reason: IRQ transfer is still not stable (2.4/2.6). However, ISO transfer has been rewritten in the kernel and works (just now in 2.6 but will be backported sooner or later)! I supply new firmware and a new version of the driver which now uses ISO transfer throughout (1.1 / 2.0). etc/hotplug/usb/usbdux/usbdux_firmware.asm etc/hotplug/usb/usbdux/usbdux_firmware.hex commit 524f2090f4724b08a0af7a886bce664b29198291 Author: Frank Mori Hess Date: 2004-01-18 21:35:50 +0000 added description of comedi_command_test() return values doc/funcref commit 0c37ffaa7cabf3be60ae9240431fb1cb7986897f Author: Frank Mori Hess Date: 2004-01-18 21:35:19 +0000 fixed typo doc/other.sgml commit ad69935badb830459ca02a901c9dcb32fe4b9f1d Author: Frank Mori Hess Date: 2004-01-18 20:26:47 +0000 don't make comedi_command arg INOUT swig/comedi.i commit 610dfd9bcf00dc53bb6847ee0182cd7dd6e91545 Author: Frank Mori Hess Date: 2004-01-17 20:23:07 +0000 fix check for ruby.h configure.ac commit ebec2e6206cc2b5fbbc5d957ddbc3262ee839d8f Author: Frank Mori Hess Date: 2004-01-17 20:12:17 +0000 add check for ruby header configure.ac commit f59b64a8dedf77677bef171717c65e083964f036 Author: Frank Mori Hess Date: 2004-01-17 19:39:54 +0000 added configure options for disabling python and ruby bindings configure.ac commit 2fe5055c25db467d99778a3a6da137c56f64e768 Author: Frank Mori Hess Date: 2004-01-17 19:18:08 +0000 clean up object files swig/ruby/Makefile.am commit 3e81d9e11ed1c5ab457fea38dceee755fe87a9ba Author: Frank Mori Hess Date: 2004-01-17 19:17:42 +0000 update README to reflect automake support for compilation/installation swig/ruby/README commit b8d7e64c4df876e93a95ff47411c626d5d310787 Author: Frank Mori Hess Date: 2004-01-17 19:08:46 +0000 more autoconf support for ruby binding configure.ac swig/ruby/Makefile.am commit 0178ccd682be24995a1077eed71b00159b5cd201 Author: Frank Mori Hess Date: 2004-01-17 19:08:17 +0000 pass arguments to configure autogen.sh commit a3005f2922ca2f1f34f21b0b104663ee31912f80 Author: Frank Mori Hess Date: 2004-01-17 17:11:17 +0000 start of automake support for ruby extension swig/ruby/Makefile.am commit cac5a2eac607daf53e3d199e2b0abcf27676929f Author: Frank Mori Hess Date: 2004-01-17 16:33:09 +0000 ruby binding and example from Steven Jenkins. I still need to tweak the Makefiles a bit to integrate it properly swig/ruby/README swig/ruby/demo/cmd swig/ruby/demo/common.rb swig/ruby/ext/MANIFEST swig/ruby/ext/extconf.rb swig/ruby/lib/comedi.rb swig/ruby/setup.rb swig/ruby/syntax_sugar commit a7ad74bf2d5d5684f3fd2384b82926876875c733 Author: Frank Mori Hess Date: 2004-01-12 22:41:40 +0000 include typemaps.i swig/comedi.i commit 153547a0477a66434dd9b004ffacc3b0642ee02f Author: Frank Mori Hess Date: 2004-01-12 01:38:06 +0000 ruby fix from steven jenkins swig/comedi.i commit 57dc5de6d32045637885e794745283a9b8da1bd2 Author: Frank Mori Hess Date: 2004-01-12 00:03:45 +0000 fix problem with html directory getting remade every time (at least with automake1.8) doc/Makefile.am commit 971764caf184cdcbb9ed957fefe17154eeb25710 Author: Frank Mori Hess Date: 2004-01-11 23:39:18 +0000 added some m4 quoting to get rid of automake1.8 warnings m4/as-ac-expand.m4 m4/as-compiler-flag.m4 m4/as-libtool.m4 m4/as-version.m4 commit 37cc8552e8dd3107255dc4228ef1198138dc3fe9 Author: Frank Mori Hess Date: 2004-01-11 23:16:02 +0000 add some comments on obsolete sections swig/python/README.txt commit 711679b1e2295672ab661a72e28d5a4aa1bb4914 Author: Frank Mori Hess Date: 2004-01-11 23:14:44 +0000 restore README.txt that got lost when I moved the python directory swig/python/README.txt commit 09aa989c1f946030e70d8303a067dea40052c2de Author: Frank Mori Hess Date: 2004-01-11 23:04:35 +0000 swig deprecated BOTH in favor of INOUT swig/comedi.i commit a64c59b46d9a7789092ceece625a88a6ae75e223 Author: Frank Mori Hess Date: 2004-01-08 03:10:32 +0000 make cvs checkout compilable by people without swig configure.ac swig/python/Makefile.am swig/ruby/Makefile.am commit 76c73a095645e9c5216d3979961689d6cf524238 Author: Frank Mori Hess Date: 2004-01-04 17:07:04 +0000 fix typo swig/python/Makefile.am commit bc7a0262b23ffbf49ed8689e5a5d8dd56454db28 Author: Frank Mori Hess Date: 2004-01-04 16:56:35 +0000 moved SWIG code from python directory to new swig directory. Added beginnings of support for ruby swig binding Makefile.am configure.ac python/README.txt python/comedi.i python/comedi_wrap.c swig/Makefile.am swig/comedi.i swig/python/Makefile.am swig/python/comedi.py swig/python/comedi_wrap.doc swig/python/setup.py swig/python/test_comedi.py swig/ruby/Makefile.am swig/ruby/examples/cmd swig/ruby/examples/common swig/ruby/syntax_sugar commit 56027b215404d941e513fc13f3e79cdfe65b6f85 Author: Frank Mori Hess Date: 2004-01-04 16:06:51 +0000 html_targets and man_targets not working out so hot doc/Makefile.am doc/html_targets doc/man_targets commit 998c091e1e3376da29e46c1efd141c11224b3024 Author: Frank Mori Hess Date: 2004-01-02 01:16:00 +0000 doing a retry for the preload write is useless, since the command hasn't started yet. Print a useful error message and exit instead. demo/ao_waveform.c commit 054cade97fe44580d4c3dc4e59610e48a0214fe4 Author: Frank Mori Hess Date: 2004-01-02 00:06:33 +0000 made BUF_LEN larger, so boards with huge ao fifos (ni 67xx) don't underrun when starting up. demo/ao_waveform.c commit a264b821eb397c236f756b434e2b225007091dcb Author: Frank Mori Hess Date: 2003-12-24 16:09:30 +0000 try to keep html_targets and man_targets up-to-date as automatically as possible doc/Makefile.am commit 663896f3257050bcca1268b9a8768023889fe2cb Author: Frank Mori Hess Date: 2003-12-24 15:46:55 +0000 use files to keep track of html and man targets doc/Makefile.am doc/html_targets doc/man_targets commit c5028f969908bee282b7229d393e5cac47a8f866 Author: Frank Mori Hess Date: 2003-12-24 15:40:31 +0000 fix possibility of incorrect bison invocation, when make tries to make calib_yacc.h before calib_yacc.c lib/Makefile.am commit af062d28653ee55b19ee83ab0b6930d06308f2ba Author: Frank Mori Hess Date: 2003-12-24 15:00:47 +0000 put gif back in EXTRA_DIST doc/Makefile.am commit 4581baf59a3eb21aac63f5dda9bd693406ee6240 Author: Frank Mori Hess Date: 2003-12-24 01:48:51 +0000 provide prebuilt docs in distribution tarballs configure.ac doc/Makefile.am doc/acq-seq.gif doc/html/Makefile.am doc/man/Makefile.am commit c75e9301c819858d929fb5f9c5267f63cd0a85a4 Author: Frank Mori Hess Date: 2003-12-21 18:07:42 +0000 added some missing end tags, noted by Steven Jenkins doc/comedilib.sgml doc/driverwriting.sgml doc/install.sgml doc/other.sgml doc/tutorial.sgml commit a57ff1fc14750abf4d140686fa4f8dc7e754d859 Author: Frank Mori Hess Date: 2003-12-21 17:30:01 +0000 update from bernd porr to use fxload to load firmware etc/hotplug/usb/usbdux/usbdux commit cb5e78da65d94d1329dbff5598c3490e3deac075 Author: Frank Mori Hess Date: 2003-12-03 02:43:47 +0000 make dependency handling work for subdirs doc/Makefile.am doc/html/Makefile.am doc/man/Makefile.am commit a03c337cdb9fa2e7c1a8302447a70644588bc91c Author: Frank Mori Hess Date: 2003-12-03 02:43:22 +0000 trying to improve calibration docs doc/funcref commit 217924bcfe6f65975601a38a8f2134919ac55424 Author: Frank Mori Hess Date: 2003-12-03 01:47:39 +0000 trying to improve calibration docs man/comedi_calibrate.8 commit 7f83f89d4c7aad50bc82d962dca9887c8fbeccdd Author: Frank Mori Hess Date: 2003-11-30 15:41:52 +0000 add support for usb scripts/firmware configure.ac commit e410cfda9c898495942c45673227e9f96d24faa5 Author: Frank Mori Hess Date: 2003-11-30 15:41:14 +0000 comedilib support for new usbdux driver etc/Makefile.am etc/hotplug/Makefile.am etc/hotplug/usb/Makefile.am etc/hotplug/usb/usbdux/Makefile.am etc/hotplug/usb/usbdux/Makefile_asm etc/hotplug/usb/usbdux/README etc/hotplug/usb/usbdux/fx2-include.asm etc/hotplug/usb/usbdux/usbdux etc/hotplug/usb/usbdux/usbdux_firmware.asm etc/hotplug/usb/usbdux/usbdux_firmware.hex etc/hotplug/usb/usbdux/usbdux_firmware.lst commit 9350128a51ef9d09a95a1248091dc05b22ba10e0 Author: David Schleef Date: 2003-11-20 18:40:30 +0000 new files testing/results/pci-6023e testing/results/pci-6713 testing/results/pci-das6023 testing/results/pci-dio-32hs commit 8bca0fc2cdb93df8e1ad0f7d10ec31b86096e8ec Author: David Schleef Date: 2003-11-17 20:13:42 +0000 Add notes about compiling from CVS README.CVS commit 3fd60e201e94d9907d574ebc56bced9b71975b22 Author: Frank Mori Hess Date: 2003-11-15 14:35:20 +0000 *** empty log message *** INSTALL commit a0b578697fe4582692fe99a0b8972f93d9b0d2b9 Author: Frank Mori Hess Date: 2003-10-24 00:56:30 +0000 add daqcard-6036e etc/pcmcia/comedi.conf commit 28ea3d0529423af82b6b7f718e8f96c9a1fe06eb Author: Frank Mori Hess Date: 2003-10-13 19:22:07 +0000 fix coarse/fine ai pregain offset caldacs for pci-6025e comedi_calibrate/ni.c commit d9a35aa836e4a8b09443688dfb2b2f8414d9191a Author: Frank Mori Hess Date: 2003-10-13 18:52:23 +0000 fix path when creating calibration directory during install, bug noted by Norbert Schmidt. comedi_calibrate/Makefile.am commit ad25b37d406234a69ce250716b850f49a4f684bd Author: Frank Mori Hess Date: 2003-10-09 14:59:44 +0000 add ACLOCAL_AMFLAGS so automake calls aclocal correctly when necessary Makefile.am commit 6d4b3337c25500c389e5e69f98816661e76f4153 Author: Frank Mori Hess Date: 2003-09-03 03:54:06 +0000 hack so we don't rebuild docs with every make doc/html/Makefile.am doc/man/Makefile.am commit ee428c99bc9f6a75e629f54f82febfefd41203f1 Author: Frank Mori Hess Date: 2003-09-03 03:49:12 +0000 typo doc/funcref commit 29b0c0b5eb00cb0e0886365bcee56720a977c435 Author: Frank Mori Hess Date: 2003-09-03 02:59:00 +0000 added a -release option for libtool, so it names the library with the version instead of libcomedi-0.0.0.so lib/Makefile.am commit 37a8e0533fe9b57b038a07601c3fa08601342e59 Author: Frank Mori Hess Date: 2003-09-03 02:18:52 +0000 add id to glossary so it doesn't produce a randomly named html file doc/glossary.sgml commit 3602f4abab26da45add24c09f994a0dbfdf3b72c Author: David Schleef Date: 2003-08-30 04:21:50 +0000 localstatedir should be /var, thus we need append a lib/ here lib/calib.c commit 22b88279c2db04e1b9cd07d567ead1858585e133 Author: Frank Mori Hess Date: 2003-08-30 02:08:21 +0000 coarse and fine pregain offsets were switched for pci-6024e comedi_calibrate/ni.c commit a2f63aeedb63303e684a6efd4513c21ccc947d6c Author: Frank Mori Hess Date: 2003-08-23 03:26:39 +0000 add stub for daqcard-6036e comedi_calibrate/ni.c commit 366e3a261300ae678c6e71d3ecdc5ac0c5ed5dc4 Author: Frank Mori Hess Date: 2003-08-21 16:10:56 +0000 add calib_yacc.h to BUILT_SOURCES lib/Makefile.am commit 17d9741765d4276a7ed54d1a4cfce9f695580db2 Author: Frank Mori Hess Date: 2003-08-21 15:11:34 +0000 use 'ue' instead of 'u' for uumlat doc/comedilib.sgml commit 8e2cd55f2423f7a451f8524243d93ecc64586e40 Author: David Schleef Date: 2003-08-16 23:18:07 +0000 fix warnings comedi_calibrate/save_cal.c demo/sv.c commit df9e839390c9064e85b513dd84b1bd760203e765 Author: David Schleef Date: 2003-08-16 23:11:18 +0000 version bump configure.ac commit 691373797b53851a3350c2a6373645f7e61562ce Author: David Schleef Date: 2003-08-16 22:55:40 +0000 force aux dir configure.ac commit d7a275dcaccfcd86d083f5d9232f45ef0da6ee83 Author: David Schleef Date: 2003-08-16 22:19:35 +0000 new makefiles etc/Makefile.am etc/pcmcia/Makefile.am commit 73d57773000d2b1733fd460f1c72c5a4a49656a2 Author: David Schleef Date: 2003-08-16 22:18:05 +0000 rerefactor Makefile.am doc/Makefile.am commit 57ee5a6de730b22ab4e96b9ac00f525de91f75db Author: David Schleef Date: 2003-08-16 22:17:30 +0000 add Makefiles into etc/ Makefile.am configure.ac commit 47d1c330571411391f28b7595e619951f966c5fc Author: David Schleef Date: 2003-08-16 22:14:58 +0000 install a few more files debian/libcomedi-dev.files debian/libcomedi0.files debian/rules commit 42eb25e515bf206c3919e1dfa459401f7ea2297c Author: David Schleef Date: 2003-08-16 00:51:13 +0000 not needed etc/rel_comedilib commit 7174581d98b2473987ed416bfdfc1a088a5097ab Author: David Schleef Date: 2003-08-16 00:43:52 +0000 add files debian/libcomedi-dev.files commit 3770278066c365d60440c1e92077bb414f5428f2 Author: David Schleef Date: 2003-08-16 00:42:41 +0000 updates from debian package debian/changelog debian/control debian/libcomedi0.postinst debian/libcomedi0.postrm debian/libcomedi0.shlibs debian/rules commit 71e3e08c9011ea90ecee46e113e4e69d8f4296be Author: David Schleef Date: 2003-08-16 00:41:35 +0000 update debian/copyright commit 8c7886ff0db2a7db141a3d628997bfd94a6ecc1e Author: David Schleef Date: 2003-08-16 00:20:54 +0000 don't dist acq-seg.gif doc/Makefile.am commit fac5eabb0bb6d6d0fefea59486661222aacf281e Author: David Schleef Date: 2003-08-16 00:20:41 +0000 moved to html doc/acq-seq.gif commit 733da099a23be5807f3830fe51b6b5030837caa2 Author: David Schleef Date: 2003-08-16 00:20:02 +0000 refactor build system for docs doc/Makefile.am doc/comedilib.sgml doc/html/Makefile.am doc/html/acq-seq.gif doc/man/Makefile.am commit 0a70a2f231551d05c0930e06f4253d86b5a58b2a Author: David Schleef Date: 2003-08-16 00:18:46 +0000 calibrations is installed in $localstatedir lib/calib.c commit cd7cab945867cf9bbec81f46b3c59182ad5e7a4f Author: David Schleef Date: 2003-08-16 00:18:04 +0000 dist generated lex and yacc sources lib/Makefile.am commit b666cdc3d1084de1b0f463af107353d69a2a1fc0 Author: David Schleef Date: 2003-08-16 00:16:32 +0000 remove flex and bison from build deps debian/control commit c7701b0b87b422cb91cc90fb1f783d1c08c8f3ff Author: David Schleef Date: 2003-08-16 00:15:58 +0000 Install calibrations/ to localstatedir comedi_calibrate/Makefile.am commit 038034fdbbce5d781d35bcff66e92a114c0243f6 Author: David Schleef Date: 2003-08-16 00:15:29 +0000 remove include from EXTRA_DIST Makefile.am commit 7dec44588034992bdfc77ebda7b92725dc9e34a1 Author: David Schleef Date: 2003-08-16 00:15:15 +0000 update version. switch back to using docbook2xxx, and test for each one. Jade/jw doesn't really have a way to test for backends. configure.ac commit 7adc4794f67f9e08b5a6662d0598e9174fe8e367 Author: Frank Mori Hess Date: 2003-08-15 21:13:29 +0000 ignore externally referenced ranges in get_bipolar_lowgain(), etc. comedi_calibrate/comedi_calibrate.c commit 66ab57bca108f56f98bd8d9ed74f6680c2d4e819 Author: Frank Mori Hess Date: 2003-08-11 20:05:06 +0000 marked sv_ functions as deprecated doc/funcref commit 605a5fa68b35d494dc15f5368342fb837d208a86 Author: Frank Mori Hess Date: 2003-08-08 18:41:20 +0000 ignore install errors for manpages doc/Makefile.am commit ef4b9afdb5e01a08152615a460081839665d6467 Author: Frank Mori Hess Date: 2003-08-08 17:38:59 +0000 it's https instead of http comedi_calibrate/comedi_calibrate.c commit a20a51506cf3ba2bde10cf51b30bdb4ca8ae458a Author: Frank Mori Hess Date: 2003-08-02 03:58:21 +0000 added missing doc/intro.sgml commit 82f3f20381d78d93742a1a466b5fe21b5b2d39ea Author: Frank Mori Hess Date: 2003-08-02 03:44:13 +0000 fixed closing of doc/mkref commit e45e9a2c277ebc541d5d49ed1fcf546da9a9fa59 Author: Frank Mori Hess Date: 2003-08-02 03:20:22 +0000 added support for fine unipolar offset caldac, especially for pci-6042e. updated pci-6052e status to STATUS_DONE (unipolar analog output linearity calibration works correctly now). comedi_calibrate/ni.c commit 044bba0d1a8335b506f013d727ac317ae8859e0f Author: Frank Mori Hess Date: 2003-08-02 03:18:36 +0000 moved a few lines around for clairity comedi_calibrate/cal_common.c commit 7c1c60388edc0c9e211c163cd6d5bd8f35001127 Author: Frank Mori Hess Date: 2003-08-02 03:17:49 +0000 updated results using debug caldacs comedi_calibrate/results/pci-6052e commit 48a08ec68ee7d18dd3ac3b2d8d07e520494804c1 Author: Frank Mori Hess Date: 2003-07-23 20:00:49 +0000 tweaks, and always reset fine caldacs before adjusting corresponding coarse caldac comedi_calibrate/cal_common.c comedi_calibrate/ni.c commit ca615cb0fe2b7f95af973ff022c4381bb9f8972b Author: Frank Mori Hess Date: 2003-07-21 19:23:58 +0000 updated pci-6031e status to STATUS_DONE, and made pegs happen only when caldacs are reset. comedi_calibrate/cal_common.c comedi_calibrate/ni.c commit 5ec125425e78af05223402abb1aa58f7bcf7a350 Author: Frank Mori Hess Date: 2003-07-21 19:22:38 +0000 updated results comedi_calibrate/results/pci-6031e commit 4f5a67c36d91529348e23d44e9227013324b6ffe Author: Frank Mori Hess Date: 2003-07-20 05:10:13 +0000 do seperate unipolar ai calibration on ni boards that need it comedi_calibrate/cal_common.c comedi_calibrate/calib.h comedi_calibrate/ni.c commit 5c505d7b573965348cd47a6b7f365fbed30791c7 Author: Frank Mori Hess Date: 2003-07-20 03:20:50 +0000 don't save multiple values for the same caldac channel comedi_calibrate/save_cal.c commit 4a028b8012806dae4b5af03f7e493a1d0f19fefa Author: Frank Mori Hess Date: 2003-07-19 22:48:31 +0000 add pci-6031e support. comedi_calibrate/ni.c commit fda2e6259d9e85630ebc099ed133fb67237321d7 Author: Frank Mori Hess Date: 2003-07-19 22:12:29 +0000 alphabetize boards and add more STATUS_UNKNOWN board types comedi_calibrate/ni.c commit b2c706096e29b8da084ed1b7705e291ab1fb61da Author: Frank Mori Hess Date: 2003-07-19 22:09:47 +0000 new results comedi_calibrate/results/pci-6031e commit 35ae28907b8882736df7a81999756b5493bb24e6 Author: Frank Mori Hess Date: 2003-07-19 19:16:41 +0000 tell user when command line options are being forced on or off comedi_calibrate/comedi_calibrate.c commit 8c5615994f902a7005407ceaf31398872e1dc335 Author: Frank Mori Hess Date: 2003-07-16 16:45:27 +0000 correct url for cvs instructions README commit 389507482bf11d7050427af6357f79acf0938823 Author: Frank Mori Hess Date: 2003-07-16 16:38:33 +0000 fix use of COMEDI_DEVCONF_AUX_DATA* options (from Bernd Porr) comedi_config/comedi_config.c commit 0812812571d85c9c4459817bea73f4a02000dbea Author: Frank Mori Hess Date: 2003-07-16 16:26:14 +0000 sync with comedi include/comedi.h commit 092659f27deebc8e9c971181652f3f6b0ca372f2 Author: Frank Mori Hess Date: 2003-07-15 15:58:28 +0000 refined handling of built directories doc/Makefile.am commit 5a951646a7187b3407f7b979ad64eff65762246c Author: Frank Mori Hess Date: 2003-07-12 01:32:02 +0000 incremented n_observables for new observables i added comedi_calibrate/ni.c commit d9f02d1466e23526473f8d25525c0a0c7f5eb7d8 Author: Frank Mori Hess Date: 2003-07-11 23:31:08 +0000 tweaked bipolar ao targets comedi_calibrate/ni.c commit dfdb0915aa961e2e455c3ca4d149785b883c5020 Author: Frank Mori Hess Date: 2003-07-11 23:25:10 +0000 ignore errors making manpages again doc/Makefile.am commit caa9fd466389a89a8e0877368e5515ca41ccba31 Author: Frank Mori Hess Date: 2003-07-11 23:07:42 +0000 added symlink for figure doc/Makefile.am commit d3e6b58fdf0f5dde365926493c934233a61b64e6 Author: Frank Mori Hess Date: 2003-07-11 22:53:40 +0000 replaced all “ and ” with and doc/driverwriting.sgml doc/install.sgml doc/intro.sgml doc/other.sgml doc/reference.sgml doc/tutorial.sgml commit 4f397d0a38478b73a5dedaec0070296f2851e4f4 Author: Frank Mori Hess Date: 2003-07-10 22:07:12 +0000 fix 6052 calibration to use ad8804_debug caldacs comedi_calibrate/ni.c commit 9574922ac1633e73e26346f1bd039a735dba8350 Author: Frank Mori Hess Date: 2003-07-10 21:55:03 +0000 fixing bipolar ao linearity calibration, lowered 6052 status since I'm pretty sure the caldac type is wrong in the driver. comedi_calibrate/ni.c commit 70666cad39806a5c79a353eea608c25ce5bd351a Author: Frank Mori Hess Date: 2003-07-09 20:13:00 +0000 added etc/ to EXTRA_DIST, moved creation of /etc/comedi/calibrations to comedi_calibrate subdirectory's makefile Makefile.am comedi_calibrate/Makefile.am etc/pcmcia/comedi commit d53f8fb6b8f49496c2f637984de95f62ecb3159f Author: Frank Mori Hess Date: 2003-07-09 19:49:59 +0000 got rid of advanced.sgml doc/Makefile.am commit 41291d69a661cb0c8e8254b0fe8fa79a87d67f7d Author: Frank Mori Hess Date: 2003-07-09 19:03:48 +0000 use AC_PROG_LIBTOOL instead of old name AM_PROG_LIBTOOL m4/as-libtool.m4 commit d7fc976d8b226961dff315af3e14b2d75533a687 Author: Frank Mori Hess Date: 2003-07-09 02:46:39 +0000 undoing regression doc/advanced.sgml commit 5cc75f5efe0d27abb427bb46e14372c6d2161edd Author: Frank Mori Hess Date: 2003-07-08 23:51:29 +0000 fix regressions, remove obsolete description of isapnp support doc/install.sgml doc/other.sgml doc/reference.sgml commit f98e8f792ee2fefbcf929924717dd19323bf2f7c Author: Frank Mori Hess Date: 2003-07-08 23:02:42 +0000 fixed a regression and added some copyright notices doc/comedilib.sgml commit 49414d97d626c7b8b9137c983b2681d4ff612565 Author: Frank Mori Hess Date: 2003-07-08 22:58:20 +0000 fix figure doc/intro.sgml commit b9f2b7d2fea7675a95cb799320704c6d57b555df Author: Frank Mori Hess Date: 2003-07-08 22:39:23 +0000 undoing funcref regressions doc/funcref commit 81df61bede802814263a9e54754e48156b78d996 Author: Frank Mori Hess Date: 2003-07-08 22:13:00 +0000 make install-data-local target conditional, and use $(INSTALL_DATA) instead of $(INSTALL) doc/Makefile.am commit 374e8ca6635a23d8e9bfd475b170a63eff890f92 Author: David Schleef Date: 2003-07-07 22:48:44 +0000 escape quotes in perl string doc/mkref commit 7202fb8b74ff69df1c3602a99e52369e81c628c2 Author: David Schleef Date: 2003-07-07 22:44:39 +0000 add figure doc/Makefile.am doc/acq-seq.gif commit d70d0eef2cd9cdfadb10c7571ae43083464a0619 Author: David Schleef Date: 2003-07-07 22:34:18 +0000 Much fixage and new text from Herman. doc/advanced.sgml doc/comedilib.sgml doc/driverwriting.sgml doc/funcref doc/glossary.sgml doc/install.sgml doc/intro.sgml doc/mkref doc/other.sgml doc/reference.sgml doc/tutorial.sgml commit 8e33ed9c6e4effc890e9a25a6ce077f12f13c265 Author: Frank Mori Hess Date: 2003-07-06 00:11:13 +0000 added detection of flex/bison to configure configure.ac lib/Makefile.am commit d492ffbc39ee3caef41d4f7d1819f3d550059e4a Author: Frank Mori Hess Date: 2003-07-03 21:51:23 +0000 daqcard-1200 is now supported by ni_labpc_cs.o driver etc/pcmcia/comedi.conf commit b6cbf8a08ed98bfc3376f09f18024c118a5c3800 Author: Frank Mori Hess Date: 2003-07-03 16:17:40 +0000 added creation of /etc/comedi/calibrations directory during install Makefile.am commit 79a109dcc66e931d2db91d98148c10dfae663be6 Author: Frank Mori Hess Date: 2003-07-03 15:51:53 +0000 added reference eeprom address for pci-6036e comedi_calibrate/ni.c commit 2b3832c22008fa32df23db3828f62718570aeaaa Author: Frank Mori Hess Date: 2003-07-02 18:35:52 +0000 pci-6036e works comedi_calibrate/ni.c commit d471a2dc394ef676c5a0a7e80871ebb169bcf4e4 Author: Frank Mori Hess Date: 2003-07-02 18:35:03 +0000 added a perror() comedi_calibrate/save_cal.c commit f801b52a9a06f483d31c303b5ea9087c247cf91f Author: Frank Mori Hess Date: 2003-07-02 18:26:26 +0000 new results with ad8804_debug caldac comedi_calibrate/results/pci-6036e commit 02125939f196dac92ffd2ef4fa89ad3653f62da8 Author: Frank Mori Hess Date: 2003-07-02 18:04:46 +0000 fix out-of-range problems with ao unipolar linearity calibration comedi_calibrate/ni.c commit 5de65aa11de4cec133923c6b42a4affdbfd1323f Author: Frank Mori Hess Date: 2003-07-01 21:14:15 +0000 fix analog output targets comedi_calibrate/ni.c commit a73cef8a7679ae96434028a490c7439b9838b5e6 Author: Frank Mori Hess Date: 2003-07-01 21:01:31 +0000 fixed a DPRINT comedi_calibrate/comedi_calibrate.c commit 54530d0efb9c1be68a032aa024281f9d0a9843e7 Author: Frank Mori Hess Date: 2003-07-01 20:57:15 +0000 fixes for pci-6071e comedi_calibrate/ni.c commit a0ca3dc58afbd2e38f9504095d04bb507c674e12 Author: Frank Mori Hess Date: 2003-07-01 20:56:43 +0000 new results with ad8804_debug caldac in driver comedi_calibrate/results/pci-6071e commit b69e3de979670a34ba6f7ba5e0ec64d1324d222c Author: Frank Mori Hess Date: 2003-06-30 15:25:16 +0000 added adc_pregain_offset_fine for 6036e comedi_calibrate/ni.c commit 4e7a838087f2c3990c0c4f8cbd6f35ec3b92ced8 Author: Frank Mori Hess Date: 2003-06-27 14:26:18 +0000 first pass at pci-6036e calibration support comedi_calibrate/ni.c commit a575e23b55a0d2b82523f7115d471887b4a0c09c Author: Frank Mori Hess Date: 2003-06-27 03:23:49 +0000 added pci-6036e entry comedi_calibrate/ni.c commit f5fd0b02693894ca6bf468d3fe4daa17e5b9dec7 Author: Frank Mori Hess Date: 2003-06-27 03:15:02 +0000 trivial changes of 1 to 1.0 comedi_calibrate/cb.c comedi_calibrate/cb64.c commit 04582261ab6f294f602c023270067ce46d8fc01f Author: Frank Mori Hess Date: 2003-06-18 00:06:20 +0000 fix possible segfault comedi_calibrate/comedi_calibrate.c commit 49b521c21c8bad390b9c9876bf09802e9c9781ef Author: Frank Mori Hess Date: 2003-06-17 23:57:49 +0000 make it loop through gain/offset calibrations until the readings are within specified tolerance of targets. comedi_calibrate/cal_common.c comedi_calibrate/calib.h comedi_calibrate/cb.c comedi_calibrate/cb64.c comedi_calibrate/comedi_calibrate.c commit 57f038f35c38163d684b089382346c1d402adcae Author: Frank Mori Hess Date: 2003-06-17 00:44:14 +0000 updated comment comedi_calibrate/cb.c commit b0a4a1dbd0c8fb94c7b7952556fe71777723ae32 Author: Frank Mori Hess Date: 2003-06-17 00:05:28 +0000 Disable attempt to do unipolar postgain calibration on measurement computing pci-das1602/16 boards, since it is failing badly. comedi_calibrate/cal_common.c comedi_calibrate/calib.h comedi_calibrate/cb.c commit 11264f9d0163159a4acf1afe4f2494eccc819c06 Author: Frank Mori Hess Date: 2003-06-14 16:04:23 +0000 make unipolar gain calibration work a little better comedi_calibrate/cal_common.c commit a61dcfa9f79c7682640559c706660c1bc0087803 Author: Frank Mori Hess Date: 2003-06-13 21:49:27 +0000 use bipolar range when pegging pregain offset before unipolar postgain calibration comedi_calibrate/cal_common.c comedi_calibrate/cb.c commit 07b25b2b9f1e5099a87281303b912d40c3c2c953 Author: Frank Mori Hess Date: 2003-06-13 18:03:22 +0000 remove duplicate lines comedi_calibrate/cal_common.c commit f04b00a8584d370e5f4b55defcc03d6d27f28fae Author: Frank Mori Hess Date: 2003-06-13 17:15:40 +0000 tweak to unipolar postgain offset routine comedi_calibrate/cal_common.c commit c62918e14e6a09759335ac6ea9d0a66a402dc183 Author: Frank Mori Hess Date: 2003-06-13 17:13:28 +0000 new results for measurement computing pci-das1602/16 comedi_calibrate/cb.c comedi_calibrate/results/measurement-computing-pci-das1602-16 commit 532ff2daa571bf0d020ec1c864f15441dd6a4a81 Author: Frank Mori Hess Date: 2003-06-12 19:57:43 +0000 fix problems with set_target setting the target to NaN on unipolar ao ranges comedi_calibrate/comedi_calibrate.c commit 5b8c21c96a702092d361cb9a552b6ba37d356892 Author: Frank Mori Hess Date: 2003-06-06 18:57:30 +0000 fix swapping of unipolar and bipolar postgain offsets during calibration comedi_calibrate/cal_common.c commit 553a0142e91c616ea1b3a8b0cdc91425027e287a Author: David Schleef Date: 2003-06-06 17:50:33 +0000 Macro from gstreamer m4/as-compiler-flag.m4 commit 53a43ff0a711174a40ec6d05e513e285adbcf9b8 Author: Frank Mori Hess Date: 2003-06-06 14:59:29 +0000 make sure we aren't out-of-range when doing unipolar postgain offset comedi_calibrate/cal_common.c comedi_calibrate/calib.h comedi_calibrate/comedi_calibrate.c commit 7af1cc7f5ede78b87c996706f8ee4ef7e08b6009 Author: Frank Mori Hess Date: 2003-06-06 14:07:58 +0000 added some m4 quoting (fixes docbook warning message with comma), added warning message when python binding will not be compiled. comedi_calibrate/comedi_calibrate.c configure.ac commit 49e17577dfc7d4a8dff3dbfb500a57e0829b6792 Author: Frank Mori Hess Date: 2003-06-06 05:01:08 +0000 fixed return value for comedi_dio_config() entry doc/funcref commit 613d45f72a595a8c56d2024dc21881fe2b0db172 Author: David Schleef Date: 2003-06-05 22:17:01 +0000 Conditional compile. Use compiler flags found by autoconf python/Makefile.am commit a2e5d96ba6e3bae243000d0e8a651a85f34cd375 Author: David Schleef Date: 2003-06-05 22:16:02 +0000 Add conditional compilation. Use docbook found by autoconf. doc/Makefile.am commit b5c7d281a2e251ceb7302849af0354fa22492a13 Author: David Schleef Date: 2003-06-05 22:15:12 +0000 move files around. fix build depends. debian/changelog debian/control debian/libcomedi-dev.files debian/libcomedi0.files debian/python-comedilib.files commit 00849f157e630ea49be0ea4f908e67a06cec59cb Author: David Schleef Date: 2003-06-05 22:13:58 +0000 Conditionally find python and docbook. Check compiler flags. configure.ac commit 8f36bbd560fed2a388da012ee343a9ade177331e Author: David Schleef Date: 2003-06-05 22:12:45 +0000 Fix to actually make it work. comedilib.spec.in commit f3c2842bfb18b23718ee8f190fceb7c95fe55c1c Author: Frank Mori Hess Date: 2003-06-05 04:22:50 +0000 gcc 2.95 doesn't understand -Wno-unused-function, replaced with -Wno-unused python/Makefile.am commit 065495273e1265cd1134ec96b284b4791f1f302e Author: David Schleef Date: 2003-06-04 20:28:04 +0000 add some compiler flags to make quieter python/Makefile.am commit a41a632c5d0c275be2b0f26c724f1067bec45bd6 Author: David Schleef Date: 2003-06-04 20:27:25 +0000 remove check for python >= 2.2 configure.ac commit a6bb2b79113cf51410eeb1917e81b59bd0f1ee33 Author: David Schleef Date: 2003-06-04 20:00:29 +0000 Use autoconf-located includes for python python/Makefile.am commit 1d1005175ac6fd97fe3081a566a258e72c73b6f5 Author: David Schleef Date: 2003-06-04 04:23:57 +0000 Fix name of comedi module python/Makefile.am commit 76e49e97e2e8dd38167d029c8cd00f6797556b2c Author: David Schleef Date: 2003-06-04 04:23:22 +0000 new snapshot debian/changelog commit 7e0247279729343d1a72a100323148b025f8959e Author: David Schleef Date: 2003-06-04 04:15:02 +0000 Change return value of comedi_data_{read|write}() doc/funcref commit ce44af670c67aea0cda370545f36ee1301fb5fb1 Author: David Schleef Date: 2003-06-04 03:38:06 +0000 move files to python-comedi debian/libcomedi0.files debian/python-comedilib.files commit 718b2db19351d6be7afeb81e6ba4039009182d32 Author: David Schleef Date: 2003-06-04 03:36:55 +0000 autogenerate spec file Makefile.am comedilib.spec.in configure.ac commit 13c4f1fc3d7b4ed9a4cea3e849d21bcf9dd54606 Author: David Schleef Date: 2003-06-04 03:34:57 +0000 make autogenerated comedilib.spec.in commit 4737f22ddd4ff1e6fb18ead9a5147a0c9c5a5ff9 Author: David Schleef Date: 2003-06-04 03:33:59 +0000 hacking. Don't know if this works :) comedilib.spec commit 463736ca60f65466cfa2af9d63b1e6442753886b Author: David Schleef Date: 2003-06-04 03:04:42 +0000 learn how to write sh correctly autogen.sh commit 7b9099df6bf85ead3575c8c4b98247d8fea4f6af Author: David Schleef Date: 2003-06-04 03:03:17 +0000 stolen from gst-python m4/am-check-python-headers.m4 commit 3f05c6147feffb7809354a0e34928ea5c2614ad2 Author: David Schleef Date: 2003-06-04 03:02:25 +0000 touch some missing files autogen.sh commit e21f2a555dc026312c4ca6e03bf5566d209f0e6b Author: David Schleef Date: 2003-06-04 02:59:18 +0000 er, don't really want to use acinclude.m4 acinclude.m4 commit 2445e19237571c866360fcf9e65d6db39a115be5 Author: David Schleef Date: 2003-06-04 02:58:00 +0000 acinclude.m4 stolen from gst-python acinclude.m4 commit 74e8c0e4a936f410b557088570188e827ee58609 Author: David Schleef Date: 2003-06-04 02:55:50 +0000 need to dist these files. include/Makefile.am commit bd414e5a57a37253f03bc65fbe80539314bbadb8 Author: David Schleef Date: 2003-06-04 02:54:41 +0000 add #! line demo/python/cmd.py demo/python/mmap.py commit cbc88ac621cd7d416857660857c8884589268234 Author: David Schleef Date: 2003-06-04 02:53:45 +0000 Add python examples from Luc Lefebvre demo/python/README demo/python/cmd.py demo/python/info.py demo/python/mmap.py commit 25669b17b28463a91d573bee651f0da94efbc656 Author: David Schleef Date: 2003-06-04 02:49:23 +0000 regenerate python/comedi.py python/comedi_wrap.c commit 1cfc30e91079fb52ecf3b63ee8450f6ac72c3f92 Author: David Schleef Date: 2003-06-04 02:48:32 +0000 update doc/drivers.txt commit 11de6fee0de0c6d8cd580c943ee4dae40edf509f Author: David Schleef Date: 2003-06-04 02:48:00 +0000 not needed with new debhelper debian/libcomedi0.conffiles commit c6370ce00d06e5f261d32fc29b0fa28497fc9ede Author: David Schleef Date: 2003-06-04 02:47:41 +0000 install in a more debhelper-friendly way debian/libcomedi-dev.files debian/libcomedi0.files commit ca4dfd446d6d8a9f73b9dc090a674b8398b74f06 Author: David Schleef Date: 2003-06-04 02:47:15 +0000 packaging fixes debian/changelog debian/control debian/rules commit 435ad43809f5ac9f3f0f071c9fd002e57bf0eff4 Author: David Schleef Date: 2003-06-04 02:47:00 +0000 tell people to submit a bug report comedi_calibrate/comedi_calibrate.c commit a744f60230b2875c9d7ba7699cd26016d9915159 Author: David Schleef Date: 2003-06-04 02:46:41 +0000 no longer used Config commit 342b47fb2b5c13b6a1ab829ff5cd4c0bfba849e1 Author: David Schleef Date: 2003-06-04 02:43:49 +0000 moved to .. rpm/comedilib.patch rpm/comedilib.spec commit 6f8877b61dfc7b292e363492273ed165bebce36c Author: David Schleef Date: 2003-06-04 02:43:12 +0000 move out of rpm directory comedilib.spec commit 2cdfa17091cc29835c8e8ab88630feb00d601ebf Author: David Schleef Date: 2003-06-04 02:42:08 +0000 Fixes to make python and docs build correctly Makefile.am configure.ac doc/Makefile.am python/Makefile.am python/comedi.i python/comedi_wrap.c python/setup.py commit 90b41e59604f93e39fb0472790dd05a654ec3365 Author: David Schleef Date: 2003-06-03 23:57:32 +0000 Rewrite of python wrappers based on swig python/Makefile.am python/Makefile.pre.in python/README.txt python/Setup.in python/comedi.i python/comedi.py python/comedi_wrap.c python/comedi_wrap.doc python/compy.c python/sample.py python/sample1.py python/setup.py python/test_comedi.py commit 598fa693a6beaaa3805d8b43076f277590d8530b Author: Frank Mori Hess Date: 2003-06-01 18:58:55 +0000 removed obsolete advanced.sgml. Got rid of references to hard-coded comedi_config paths doc/Makefile.am doc/advanced.sgml doc/install.sgml commit c06d17d1ddde68577e86448ab137b9249a56d2db Author: Frank Mori Hess Date: 2003-06-01 18:44:41 +0000 removed assumption that comedi_config is in /usr/sbin man/comedi_config.8 commit 840b17a894d936b51b3a102f8c18994411e298cc Author: Frank Mori Hess Date: 2003-06-01 18:38:22 +0000 fix script for different common comedi_config paths etc/pcmcia/comedi commit 788056d3b06127b91f482ff483a4ef6ac2cd9b7f Author: Frank Mori Hess Date: 2003-05-31 16:59:29 +0000 move some warning messages so they will actually get seen comedi_calibrate/cb.c commit 9825b8a1af5156447b6e6d805f86eca58f2705f5 Author: Frank Mori Hess Date: 2003-05-31 16:58:45 +0000 be a little more careful about fixing up calibration file path, although it doesn't make any practical difference lib/calib.c commit ad40297bf280b0cf26698b57a5d7221cf7037ef1 Author: Frank Mori Hess Date: 2003-05-28 21:22:59 +0000 catch some errors comedi_calibrate/cb.c commit 9b78a41963608192d5d1b41c00e9d58d80cc0436 Author: Frank Mori Hess Date: 2003-05-28 21:18:34 +0000 fix default calibration file path for boards with '/' in name lib/calib.c commit aa47373687b3526cbf4ae593cf6a59e5bf14683d Author: Frank Mori Hess Date: 2003-05-28 18:55:36 +0000 replace return with YYABORT lib/calib_yacc.y commit 4ebdc2dbbe1df5eaaa66b260e0485169d60667a7 Author: David Schleef Date: 2003-05-27 19:05:56 +0000 update. comedi_calibrate/results/pci-6071e commit aa28c07bde62337d58a42a8e17367cf43bb9498b Author: Frank Mori Hess Date: 2003-05-25 21:20:41 +0000 added support for new cb_pcidas64 board types comedi_calibrate/cb64.c comedi_calibrate/comedi_calibrate.c commit 80034d661d835943eb7d26a63c49fa9411e1bead Author: Frank Mori Hess Date: 2003-05-25 21:11:20 +0000 made sv order adjustable comedi_calibrate/cal_common.c comedi_calibrate/calib.h comedi_calibrate/comedi_calibrate.c comedi_calibrate/ni.c commit d3973e166631fa067b6650db2d3750446de5721f Author: Frank Mori Hess Date: 2003-05-25 16:20:42 +0000 fix statistics of new_sv_measure, and reduce number of steps in check_gain_chan_x comedi_calibrate/comedi_calibrate.c commit fa4100f9a3ce2f8e7fb9a6c9d68a2b24f3455f34 Author: Frank Mori Hess Date: 2003-05-24 21:15:06 +0000 use CR_EDGE and CR_INVERT constants instead of magic numbers demo/receiver.c commit a18d21726f11c6c45a3d0a42d358fab8f85bdb07 Author: Frank Mori Hess Date: 2003-05-22 21:40:50 +0000 new results comedi_calibrate/results/pci-6110 commit f233ede6ef17ebfee67282201384ce755535a3d0 Author: Frank Mori Hess Date: 2003-05-22 20:49:53 +0000 make verbosity options work again comedi_calibrate/comedi_calibrate.c commit 299d9df1deaf0ebcfa292b49766598bf7b61aad2 Author: Frank Mori Hess Date: 2003-05-22 20:42:34 +0000 trivial tweak comedi_calibrate/ni.c commit e036c5a8d41e71b5a9ad7ec1860559481c4cf335 Author: Frank Mori Hess Date: 2003-05-22 20:30:41 +0000 increased sv->order for 611x comedi_calibrate/comedi_calibrate.c commit f2bdfdfd13abe155316fd036c4a38ee6a687c11e Author: Frank Mori Hess Date: 2003-05-22 16:13:12 +0000 still trying to get 611x ai to calibrate well, trying to increase settling time now. comedi_calibrate/ni.c commit 78c5a7e9bd77d2bca2f0294044ffaa3d49a507a4 Author: Frank Mori Hess Date: 2003-05-22 16:12:07 +0000 cleanup some redundant initialization of sv stuff comedi_calibrate/comedi_calibrate.c commit 93cb91df254148cd1881defa0ab6c34e4b71ce54 Author: Frank Mori Hess Date: 2003-05-21 18:44:28 +0000 fix analog out ch 1 calibration, and calulation of variable ai reference source for 611x comedi_calibrate/ni.c commit d2a9fc95d61372de52e243bfcc13b96e400f871c Author: Frank Mori Hess Date: 2003-05-21 17:52:41 +0000 added some warning messages when binary calibrations set caldacs to max/min values comedi_calibrate/comedi_calibrate.c comedi_calibrate/save_cal.c commit de2714e5fe421dc4c8a2b5659dc2fc76b5955cfb Author: Frank Mori Hess Date: 2003-05-21 17:16:09 +0000 increase N_OBSERVABLES even more for 611x comedi_calibrate/calib.h commit b277b8dda25f6f63005a81729d6eee40688949ed Author: Frank Mori Hess Date: 2003-05-20 15:09:01 +0000 fix assignments that should have been equality tests comedi_calibrate/ni.c commit 8c46a0f9c84929e7aa042fd6b2feb8176a6b1e0c Author: Frank Mori Hess Date: 2003-05-19 23:31:47 +0000 made comedi_config install into sbin instead of bin subdirectory comedi_config/Makefile.am commit 6ad2b6c950189f80a55741663091e165cce034b8 Author: Frank Mori Hess Date: 2003-05-18 00:26:59 +0000 trying to fix undefined symbol problems people are having lib/buffer.c lib/calib.c lib/calib_yacc.y lib/cmd.c lib/comedi.c lib/data.c lib/dio.c lib/error.c lib/get.c lib/range.c lib/sv.c lib/timed.c lib/timer.c lib/version_script commit 4cfdf12baac3fa2b0a9b079a97fea75c4466f6ba Author: Frank Mori Hess Date: 2003-05-16 21:15:17 +0000 added -D_REENTRANT to library cflags lib/Makefile.am commit a47a8b6028c8f3e5ea9144461048f92e6697f183 Author: Frank Mori Hess Date: 2003-05-16 19:41:13 +0000 updated for autoconf stuff INSTALL commit 67ee3b39140b1b7c7c152ba732460ec21d3f4501 Author: Frank Mori Hess Date: 2003-05-09 00:04:12 +0000 added some DPRINT's to ni_labpc calibration so there is some indication it is doing something comedi_calibrate/ni_labpc.c commit 4c95630d224a1d648044d45e75a69a3393ba3d0f Author: Frank Mori Hess Date: 2003-05-09 00:00:51 +0000 added driver name to default calibration file path lib/calib.c commit 8217d590a7ef24a22afe7aab2b6f050fbb259aa5 Author: Frank Mori Hess Date: 2003-05-08 23:57:03 +0000 added ni_labpc support comedi_calibrate/Makefile.am comedi_calibrate/calib.h comedi_calibrate/comedi_calibrate.c comedi_calibrate/ni.c comedi_calibrate/ni_labpc.c commit 10045b2f61f98befe01d3ca406341649da9347c4 Author: Frank Mori Hess Date: 2003-05-08 00:35:19 +0000 added entries for additional calibration functions doc/funcref commit f905699fd721b5ee07e9060773bf4190c675ead8 Author: Frank Mori Hess Date: 2003-05-08 00:34:29 +0000 fix broken dependencies, and man page generation doc/Makefile.am commit 85731bd4438b4f925531aa8e88a67d6b54f54cef Author: Frank Mori Hess Date: 2003-05-07 18:12:28 +0000 added examples, and more/updated option descriptions man/comedi_calibrate.8 commit c3199c93c823b851f87c05674201c7a57c539983 Author: Frank Mori Hess Date: 2003-05-07 00:13:00 +0000 fixed some bad behaviour when using default calibration file path comedi_calibrate/comedi_calibrate.c comedi_calibrate/save_cal.c commit 8a9e9861f15f77cb5eb5034844523e8bf851066d Author: Frank Mori Hess Date: 2003-05-06 23:37:45 +0000 made default comedi_calibrate behaviour a little smarter, shared more code between comedilib and comedi_calibrate comedi_calibrate/cal_common.c comedi_calibrate/calib.h comedi_calibrate/cb.c comedi_calibrate/comedi_calibrate.c comedi_calibrate/ni.c comedi_calibrate/save_cal.c include/comedilib.h lib/calib.c lib/calib_yacc.y man/comedi_calibrate.8 commit 0d0bfe17b94ecb0738c0ebc026768b65b94fbfa2 Author: Frank Mori Hess Date: 2003-05-06 18:26:21 +0000 exposed some lower-level calibration functions for more flexibility include/comedilib.h lib/calib.c lib/calib_yacc.y lib/libinternal.h commit 0f45648de433c22518ecf763b6b3cff78f523109 Author: Frank Mori Hess Date: 2003-05-06 05:50:04 +0000 cleanup old 1602/16 stuff comedi_calibrate/cb.c commit 4a28456b8d8006e963ba8c55bee03a878a36318a Author: Frank Mori Hess Date: 2003-05-06 01:24:50 +0000 added options for specifying which subdev, channel, range, aref you want comedi_calibrate to apply calibration for before exiting comedi_calibrate/calib.h comedi_calibrate/cb.c comedi_calibrate/cb64.c comedi_calibrate/comedi_calibrate.c commit d5ea98f55b49b0331c462e4919a4907491c1a9d8 Author: Frank Mori Hess Date: 2003-05-06 00:36:18 +0000 changed convention for default calibration file naming to something more transparent and robust (since I figured out how to get minor number from code for ls) comedi_calibrate/save_cal.c lib/calib.c commit 4172580d890b26a9c75ab1ee2fb31c206584d2e2 Author: Frank Mori Hess Date: 2003-05-05 14:37:39 +0000 took out some debug messages i accidentaly left in comedi_calibrate/comedi_calibrate.c commit 2e3cf8307fca574aaa19f45949698f7623f34eba Author: Frank Mori Hess Date: 2003-05-05 03:38:26 +0000 made polarity determination in binary calibrations more robust, to fix problems I saw when caldac pushed input out-of-range comedi_calibrate/comedi_calibrate.c commit 9799051d65f499b88c0829eaa8b1f60664c1f273 Author: Frank Mori Hess Date: 2003-05-05 03:18:19 +0000 fixed comedi_apply_calibration so it applies all matching calibrations instead of just the first one lib/calib.c commit 5ff5c2421278b9f923ce6a47a403224156d3225e Author: Frank Mori Hess Date: 2003-05-05 00:11:50 +0000 increased max number of observables for 611x boards, added postgain offset to generic calibration routines, used generic cal for mc pci-das1602/16 calibration. comedi_calibrate/cal_common.c comedi_calibrate/calib.h comedi_calibrate/cb.c comedi_calibrate/comedi_calibrate.c commit 230835193e7fad1647768c6a48eb0c17e7d14eaa Author: Frank Mori Hess Date: 2003-05-05 00:09:12 +0000 pruned some dead code comedi_calibrate/ni.c commit f1d87926828d1c6deccf82c50f1cfb1841c3e954 Author: Frank Mori Hess Date: 2003-05-04 02:16:31 +0000 converted all remaining boards (except mc pci-das1602/16) to use generic calibration support comedi_calibrate/cal_common.c comedi_calibrate/calib.h comedi_calibrate/cb.c comedi_calibrate/cb64.c commit d1a57c9710255b1d06e37118b26906c046f996b2 Author: Frank Mori Hess Date: 2003-05-03 22:25:05 +0000 rearranged prep of adc for dac calibration to be more flexible comedi_calibrate/cal_common.c commit 13d4399dcdea7a924c752eb74f543b0987b63fd5 Author: Frank Mori Hess Date: 2003-05-03 22:08:24 +0000 converted calibration of measurement computing 60xx boards over to generic code comedi_calibrate/cal_common.c comedi_calibrate/calib.h comedi_calibrate/cb64.c comedi_calibrate/comedi_calibrate.c comedi_calibrate/ni.c commit 4db55f5044d59ab4d048a5ad7a56d80b45084ad7 Author: Frank Mori Hess Date: 2003-05-03 14:59:26 +0000 moved COMEDI_VERSION_CODE() macro to comedilib.h, added some version checks to comedi_calibrate so it complains if it's using a driver with known bugs. Converted 6071 calibration to ad8804 addressing. comedi_calibrate/ni.c include/comedilib.h lib/libinternal.h commit e75f09dcf91969505e591eb599fb04aab6e82442 Author: Frank Mori Hess Date: 2003-05-03 14:57:15 +0000 i shouldn't have made comedi_internal_data_read() inline, it's too long, and it causes gcc 2.9 to produce a bogus warning lib/data.c commit 9860fabdf244a4b0d2c75ec01237d983fd9cbf5d Author: Frank Mori Hess Date: 2003-05-03 01:11:01 +0000 fixed 6035 dac1 offset caldac, added inactive 6071e calibration guess for an ad8804 style caldac comedi_calibrate/ni.c commit 04269a12c367886597c0715dc8fbf14973d2300b Author: Frank Mori Hess Date: 2003-05-03 00:28:20 +0000 new results comedi_calibrate/results/measurement-computing-pci-das6025 commit 04faa2487720790e8388ad5e4371d68989fc3d2c Author: Frank Mori Hess Date: 2003-05-03 00:17:47 +0000 updated dump, with driver caldac corrected to ad8804 comedi_calibrate/results/DAQCard-6062E commit d50fc9b498006bc1edea092a26cec89f90612459 Author: David Schleef Date: 2003-05-02 23:49:12 +0000 remove system identifiers doc/comedilib.sgml doc/reference.sgml doc/tutorial.sgml commit 1a7e31bd5e04773a9a0b29045c5ad7a9d335980f Author: David Schleef Date: 2003-05-02 23:47:47 +0000 change section to libdevel debian/control commit 8d84736def8ef6c865acb0e4e6770b267cf85cd2 Author: David Schleef Date: 2003-05-02 23:43:42 +0000 Add DAQCard-6024E comedi_calibrate/ni.c commit 9923c8133cdbc8a607195002d349fb6994b73998 Author: David Schleef Date: 2003-05-02 23:41:44 +0000 new results comedi_calibrate/results/DAQCard-6024E comedi_calibrate/results/DAQCard-6062E comedi_calibrate/results/pci-6036e comedi_calibrate/results/pci-6071e commit c3551c8cccdba3f8ba626e85d3694cd59e30e40f Author: Frank Mori Hess Date: 2003-05-02 21:58:23 +0000 added 'write to file' support for ni 611x boards, and calibration of all their input ranges. comedi_calibrate/Makefile.am comedi_calibrate/cal_common.c comedi_calibrate/calib.h comedi_calibrate/cb.c comedi_calibrate/cb64.c comedi_calibrate/comedi_calibrate.c comedi_calibrate/ni.c commit 827370aa9026b8bbe1bdfb3ac0f7cda54886d1f3 Author: David Schleef Date: 2003-05-02 08:06:17 +0000 clean better doc/Makefile.am commit 2e30cfa54ef8c41cb6401f80ac91b22104593176 Author: David Schleef Date: 2003-05-02 08:01:09 +0000 remove version commit 8ab858452b654669f96a2a7c8556db1cb367a207 Author: David Schleef Date: 2003-05-02 07:53:44 +0000 autoconfiscate Makefile comedi_calibrate/Makefile comedi_config/Makefile debian/rules demo/Makefile doc/Makefile lib/Makefile testing/Makefile commit 079a3235de8e82bcbfd37093c2fd951df76a547f Author: David Schleef Date: 2003-05-02 07:53:02 +0000 need headers testing/Makefile.am commit 98801148b961979ca24bbb397f451849f801ca99 Author: David Schleef Date: 2003-05-02 07:52:24 +0000 demos should be nodist demo/Makefile.am commit 151b9dbf2b331f212ef5f1fbe1e4630a952a77cc Author: David Schleef Date: 2003-05-02 07:37:03 +0000 clean up warning lib/calib_lex.l commit c2557b6b010d2987527fecdd9c429df17cea4202 Author: David Schleef Date: 2003-05-02 07:33:20 +0000 Fix yacc and lex building lib/Makefile.am commit b28c52a42f0f989c6cdfdd45f17e950521f68cf8 Author: David Schleef Date: 2003-05-02 07:19:00 +0000 autoconfiscation Makefile.am autogen.sh comedi_calibrate/Makefile.am comedi_config/Makefile.am configure.ac demo/Makefile.am doc/Makefile.am lib/Makefile.am m4/as-ac-expand.m4 m4/as-libtool.m4 m4/as-version.m4 man/Makefile.am testing/Makefile.am commit e745f56716f57de5652d938f4f27a28c43935939 Author: Frank Mori Hess Date: 2003-05-02 00:54:07 +0000 converted all NI boards to write calibrations to file. Also, it will calibrate unipolar analog output ranges separately for them. comedi_calibrate/ni.c commit 5271b6cba68c40eba5cfb59e6ce938e1a3acc533 Author: Frank Mori Hess Date: 2003-05-01 14:43:50 +0000 fix get_bipolar_lowgain() which i broke comedi_calibrate/comedi_calibrate.c commit 6a5b835a75c5dae28b7905b0b0ed724bfd82cf31 Author: Frank Mori Hess Date: 2003-04-30 22:59:07 +0000 added unipolar analog output observables comedi_calibrate/ni.c commit 464b43a015f8639d808ab2195cbed627509819ff Author: Frank Mori Hess Date: 2003-04-30 20:36:15 +0000 added some comments on cal_*binary() functions comedi_calibrate/README commit c5a39df7026775dc83de8e787e665e5f08a1c912 Author: Frank Mori Hess Date: 2003-04-30 20:30:04 +0000 made all cal_*binary() functions set oor behaviour to COMEDI_OOR_NUMBER comedi_calibrate/cb64.c comedi_calibrate/comedi_calibrate.c comedi_calibrate/ni.c commit da110303467f10ea9dac18d592fcdfc990aa0888 Author: Frank Mori Hess Date: 2003-04-30 20:17:44 +0000 added is_unipolar() and is_bipolar() query functions, added very_low_target() helper function for generating unipolar targets that are close but not zero. comedi_calibrate/calib.h comedi_calibrate/cb.c comedi_calibrate/comedi_calibrate.c comedi_calibrate/ni.c commit 2e2e1558eae6ccac9ae9f08bed80e34e325606a8 Author: Frank Mori Hess Date: 2003-04-30 01:06:17 +0000 added support for reading reference from eeprom for most boards comedi_calibrate/calib.h comedi_calibrate/ni.c commit f0641d2fcfa7e1b16e56e2a9981c0e10a8957d69 Author: Frank Mori Hess Date: 2003-04-29 16:09:27 +0000 fix cal_linearity_binary() comedi_calibrate/comedi_calibrate.c commit 78f9e1b83dbdc68d4e63bfbbe80ede73172cf76e Author: Frank Mori Hess Date: 2003-04-29 01:50:46 +0000 offset unipolar ground observable targets half a bit above zero comedi_calibrate/ni.c commit 7041bcca954c83a6abcfc4d7ee9a71078ff564b7 Author: Frank Mori Hess Date: 2003-04-29 01:00:22 +0000 added support for calibrating analog output linearity comedi_calibrate/calib.h comedi_calibrate/cb.c comedi_calibrate/cb64.c comedi_calibrate/comedi_calibrate.c comedi_calibrate/ni.c commit 137fedb214d426238feda88c4f09999b9d6de3e1 Author: Frank Mori Hess Date: 2003-04-28 16:15:05 +0000 daqcard 6062e calibration should be good now (with a little luck) comedi_calibrate/ni.c commit 39258a550429d3667fc9dfc4f41433760b6f2fed Author: Frank Mori Hess Date: 2003-04-28 01:00:07 +0000 added more unipolar observables for ni boards, so unipolar calibrations can be done. comedi_calibrate/calib.h comedi_calibrate/comedi_calibrate.c comedi_calibrate/ni.c commit 3337aa150ff32c07a5841c2646679da2b9974cba Author: Frank Mori Hess Date: 2003-04-28 00:14:44 +0000 tweaked cal_postgain_binary() so it gets the least significant bit right comedi_calibrate/comedi_calibrate.c commit 1912648a7e4c5572a30354117ca9e8f43b62f0f4 Author: Frank Mori Hess Date: 2003-04-27 18:13:39 +0000 okay, _really_ got last bit correct with cal_binary() this time. comedi_calibrate/comedi_calibrate.c commit 87a4e7ed2bd00ce583d0be73e0f326f3988e8aaf Author: Frank Mori Hess Date: 2003-04-27 00:08:03 +0000 fixed new_sv_init() calls so they are not hard-coded to assume the adc subdevice is subdevice 0. comedi_calibrate/comedi_calibrate.c commit a372e7340d5d050abd156397c6d43ef29f9160fe Author: Frank Mori Hess Date: 2003-04-27 00:03:27 +0000 tweaks to cal_binary() so that it gets the last, least significant bit correct. comedi_calibrate/calib.h comedi_calibrate/comedi_calibrate.c commit 46e32500de2b39189838cf44846158de5427f378 Author: Frank Mori Hess Date: 2003-04-26 22:24:37 +0000 hmm, should have left postgain offset caldac as argument to cal_postgain() for 6062e comedi_calibrate/ni.c commit 322bb4852b27f18f21f9c8f414beeeebe642ea4a Author: Frank Mori Hess Date: 2003-04-26 22:23:49 +0000 STATUS_NONE is actually STATUS_UNKNOWN comedi_calibrate/README commit 050f69bd4bd6ac224cda7542f9139640105e24cd Author: Frank Mori Hess Date: 2003-04-26 21:09:49 +0000 removed bogus free() comedi_calibrate/ni.c commit 2feca1fa14ede97522d6d7ec566082bc465dcb16 Author: Frank Mori Hess Date: 2003-04-26 18:54:53 +0000 init saved_calibration_t array for daqcard 6062e comedi_calibrate/ni.c commit fbbb3e297e60cfa4b93797a6361c758b4a8d4bbe Author: Frank Mori Hess Date: 2003-04-26 16:23:04 +0000 fixed catching of unknown board name with NI drivers, fixed board name of daqcard-6062E, added dummy daqcard-6064E, changed some cb boards to use my favorite cal_binary(). comedi_calibrate/cb.c comedi_calibrate/cb64.c comedi_calibrate/comedi_calibrate.c comedi_calibrate/ni.c commit 125147c067b69f45bcc38e238ad3c6a826b8b83d Author: Frank Mori Hess Date: 2003-04-26 02:03:48 +0000 swapped pre/postgain offsets comedi_calibrate/ni.c commit 9700eeb713d33ef390223933edc461e8cb7d194e Author: Frank Mori Hess Date: 2003-04-26 02:02:54 +0000 made error message on failure to open device more informative comedi_calibrate/comedi_calibrate.c commit e0b7dadca798fe0c287e96e07a934032215f9698 Author: Frank Mori Hess Date: 2003-04-25 20:43:23 +0000 fixed reading of argument for short option 'f' that I broke a while back comedi_calibrate/comedi_calibrate.c commit 0710248b23a54dd1d94f3cdcfb012bfc79abc2c0 Author: Frank Mori Hess Date: 2003-04-25 01:58:34 +0000 tweaked include directives so gcc -MM generates better dependency files lib/buffer.c lib/calib.c lib/cmd.c lib/comedi.c lib/data.c lib/dio.c lib/error.c lib/filler.c lib/get.c lib/ioctl.c lib/libinternal.h lib/range.c lib/sv.c lib/timed.c lib/timer.c commit 426a0a26798ef5668e7c4419284f5529f30b97fb Author: Frank Mori Hess Date: 2003-04-25 01:50:49 +0000 added some dependency generation to makefile comedi_calibrate/Makefile comedi_calibrate/cb64.c comedi_calibrate/comedi_calibrate.c comedi_calibrate/ni.c commit 2e0f10fe446c71d35b90bd015ab0041bb8734a05 Author: Frank Mori Hess Date: 2003-04-25 01:44:21 +0000 added some dependency file generation lib/Makefile lib/buffer.c lib/calib.c lib/calib_yacc.y lib/cmd.c lib/comedi.c lib/data.c lib/dio.c lib/error.c lib/filler.c lib/get.c lib/ioctl.c lib/range.c lib/sv.c lib/timed.c lib/timer.c commit e31f607b2e10be1744c44f7affa13156b7e01394 Author: Frank Mori Hess Date: 2003-04-25 01:43:52 +0000 added some white space to fix preprocessor weirdness, ## was causing __FUNCTION__ to disappear instead of the comma? lib/libinternal.h commit 751c68705c4bcfff3074cf89484b66daed95d7b3 Author: Frank Mori Hess Date: 2003-04-25 01:02:51 +0000 initial pass at daqcard-6062e support, and got rid of global do_output variable. comedi_calibrate/calib.h comedi_calibrate/comedi_calibrate.c comedi_calibrate/ni.c commit bada1b597a4f624783904fd4a10c3b2511e1328e Author: Frank Mori Hess Date: 2003-04-24 04:20:51 +0000 added multiple range calibration for measurement computing pci-das1xxx cards comedi_calibrate/cb.c commit 3bf61fbe4426b0d52d21953a5fb93eec4ce0867b Author: Frank Mori Hess Date: 2003-04-22 21:20:39 +0000 added multi-range calibration support for pci-das4020 comedi_calibrate/cb64.c commit bf1b81075e58c46f298f0e3d10e3b95292e69e8c Author: Frank Mori Hess Date: 2003-04-22 00:04:14 +0000 added apply_cal demo demo/Makefile demo/apply_cal.c commit cb76a1cfb708e53c014dfd060885f7e68bcef856 Author: Frank Mori Hess Date: 2003-04-21 23:57:30 +0000 added ao calibration and multiple ai range calibration for measurement computing 64xx boards comedi_calibrate/cb.c comedi_calibrate/cb64.c commit fbd59333a96abdaa57314c72d22bb41f92852ed0 Author: Frank Mori Hess Date: 2003-04-21 01:50:03 +0000 added --[no-]calibrate and --[no-]reset options man/comedi_calibrate.8 commit 580976f1b8528b7f637192c21a9375e12018a938 Author: Frank Mori Hess Date: 2003-04-21 01:48:53 +0000 split off cb64.c from cb.c comedi_calibrate/Makefile comedi_calibrate/calib.h comedi_calibrate/cb.c comedi_calibrate/cb64.c comedi_calibrate/comedi_calibrate.c commit 2d699438420087dbcc85ae4026bbbaa3f99ec81b Author: Frank Mori Hess Date: 2003-04-21 01:48:02 +0000 made a bunch of functions static comedi_calibrate/ni.c commit cdb904f6d0c183208bcbf5b3d618dd0f66b6489d Author: Frank Mori Hess Date: 2003-04-20 22:50:40 +0000 made do_reset option work with multiple range calibrations for 60xx comedi_calibrate/calib.h comedi_calibrate/cb.c comedi_calibrate/comedi_calibrate.c commit c4c078dfc2ba6a4f0f249bd608c919ea4ef532ab Author: Frank Mori Hess Date: 2003-04-20 01:42:27 +0000 added application of appropriate calibrations before dumps or results comedi_calibrate/comedi_calibrate.c commit 86d7dfa79d21d432bf26a418a5987193916f82ae Author: Frank Mori Hess Date: 2003-04-20 01:41:50 +0000 fixed calibration of ai ranges != 0 (doh). Changed a bunch of functions to static. comedi_calibrate/cb.c commit ddba729d0e8aef428e7221014632b9cb29d8f9c1 Author: Frank Mori Hess Date: 2003-04-19 20:32:47 +0000 fix deprecation warning with gcc3.2 lib/libinternal.h commit cae8f8d9e1b443f67c6db6acf69985c16aa91f99 Author: Frank Mori Hess Date: 2003-04-19 04:56:05 +0000 added analog output calibration for measurement computing 60xx series comedi_calibrate/calib.h comedi_calibrate/cb.c comedi_calibrate/comedi_calibrate.c commit 28b69b8a057edcc13ee29e60a408b42fb6fde7af Author: Frank Mori Hess Date: 2003-04-19 01:40:32 +0000 fix initialization of line counter, some yytext -> calib_yytext changes lib/calib_lex.l commit 611a8587fd4d10c6bc8ed89b6cc96cc0e68f357e Author: Frank Mori Hess Date: 2003-04-01 19:28:11 +0000 changed some debugging fprintfs to stderr into DPRINTs comedi_calibrate/cb.c commit 163c004adaf0baf31479da4785610499295c6f6e Author: Frank Mori Hess Date: 2003-03-19 20:08:26 +0000 make flex stuff as reentrant as i can lib/calib.c lib/calib_lex.l lib/calib_yacc.y lib/libinternal.h commit 02062c63ac333f49565824d0d651298461d570da Author: Frank Mori Hess Date: 2003-03-19 18:56:19 +0000 comedi_apply_calibration() almost reentrant now lib/calib_lex.l lib/calib_yacc.y lib/libinternal.h commit 4bae28d80c68ac8365ce5ec26bee6d50e796f9a1 Author: Frank Mori Hess Date: 2003-03-19 16:26:37 +0000 added -D_REENTRANT to library CFLAGS lib/Makefile commit 09db44185bdd9ca492ead287393c90115a34cc26 Author: Frank Mori Hess Date: 2003-03-06 19:18:18 +0000 added a couple comment lines to top of generated calibration files comedi_calibrate/save_cal.c commit 1a67e3d7afeef6ba36eb4d70ff588df8505921f8 Author: Frank Mori Hess Date: 2003-03-06 19:07:33 +0000 made parsing slightly more forgiving with respect to commas, in case user hand-edits calibration file lib/calib_yacc.y commit 83a410a7b8f2a2c7105cfe5d4cff12c6f7fa495d Author: Frank Mori Hess Date: 2003-03-06 19:06:06 +0000 stopped comments from getting printed lib/calib_lex.l commit b27a2340a25a176a808dbbdc57d7918f3158d9d3 Author: Frank Mori Hess Date: 2003-03-06 19:05:16 +0000 moved stderr output to use COMEDILIB_DEBUG() lib/calib.c commit 0536b89f422a25d7916b2c78c9c5ebd6623b7f12 Author: Frank Mori Hess Date: 2003-03-06 19:04:18 +0000 added return value for comedi_apply_calibration() doc/funcref commit 26769e5635a3e357072398c32cafaafeb5fafc3b Author: Frank Mori Hess Date: 2003-03-05 17:01:34 +0000 set default n_scan value to 10 for insn demo, added check that it is not set larger than MAX_SAMPLES demo/insn.c commit 6dcb08e06b9f7f5b99867545020e5ec8899378a3 Author: Frank Mori Hess Date: 2003-03-05 16:55:14 +0000 a couple not so important tweaks to calibration file parsing, before I leave it lib/calib.c lib/calib_yacc.y lib/libinternal.h commit fac040f46245967d2699b4f4b3c02995737f9e4b Author: Frank Mori Hess Date: 2003-03-05 00:46:36 +0000 got rid of unneccessary yyrestart() lib/calib_yacc.y lib/libinternal.h commit b950e1c63c454f350124c126b656791cafc63456 Author: Frank Mori Hess Date: 2003-03-05 00:30:00 +0000 removed libperl dependency by switching to bison/flex to parse calibration file. lib/Makefile lib/calib.c lib/calib_lex.l lib/calib_yacc.y lib/libinternal.h commit fb2bf948b2e0c11c7ed657253bdfbe590e7ffe57 Author: Frank Mori Hess Date: 2003-03-04 00:41:10 +0000 Changed comedi_set_calibration() to comedi_apply_calibration(), and made it much faster, it takes <100msec to run instead of >1sec. It requires linking to libperl now (hope that's okay). Renamed DEBUG() and _() in libinternal.h to COMEDILIB_DEBUG() and GETTEXT() in order to avoid conflicts with perl headers. doc/funcref include/comedilib.h lib/Makefile lib/calib.c lib/cmd.c lib/comedi.c lib/error.c lib/libinternal.h commit 8a1649bbcd76d62d405b4267cde29c209d1866c8 Author: Frank Mori Hess Date: 2003-03-01 03:30:59 +0000 added descriptions of some options, --save-file in particular man/comedi_calibrate.8 commit fc3cc45a16efc348557ddea51f3f926e467d5ca7 Author: Frank Mori Hess Date: 2003-03-01 01:52:32 +0000 added documentation for comedi_set_calibration() doc/funcref commit afaad08b77dfd44eb5e882d028b05771ce3f1efb Author: Frank Mori Hess Date: 2003-03-01 01:03:39 +0000 catch errors from find_calibration() lib/calib.c commit 0a9abb84465ec46b29e02bb52c63a12379de210d Author: Frank Mori Hess Date: 2003-02-28 22:40:52 +0000 fixed missing dollar signs, and "subdev" should have been "subdevices" lib/calib.c commit c63d33ed235af5fd98f9607669d3d28ecfa477b0 Author: Frank Mori Hess Date: 2003-02-28 20:51:04 +0000 finished implementing comedi_set_calibration() (for real this time), untested lib/calib.c commit 518159f129f43152a2cc45d85255f37228fd7f8e Author: Frank Mori Hess Date: 2003-02-26 19:36:56 +0000 fixed finding calibration based on subdevice. Ignore previous log message about finishing implementation of comedi_set_calibration(), as it's only half done. lib/calib.c commit 84b33a87819c7a65f2570cc4c06367ee1cd37158 Author: Frank Mori Hess Date: 2003-02-26 19:31:56 +0000 added subdevice to calibration file comedi_calibrate/save_cal.c commit e36d2e5b3a8592dd4d9afbf5237c237f58914813 Author: Frank Mori Hess Date: 2003-02-26 19:19:57 +0000 finished implementing comedi_set_calibration() (untested) include/comedilib.h lib/calib.c lib/version_script commit 45c3292e6d624efa43e9429743618ec002ff451a Author: Frank Mori Hess Date: 2003-02-26 17:58:53 +0000 fixed use of short option 's', got rid of semicolon at end of file, only mess with /etc/comedi/calibrations directory if we are using default save file location comedi_calibrate/comedi_calibrate.c comedi_calibrate/save_cal.c commit 723db82ce5bb47388480396e458b06aba834a25f Author: Frank Mori Hess Date: 2003-02-24 22:30:43 +0000 beginnings of comedi_set_calibration() lib/Makefile lib/calib.c commit 63b007952713448d0035ea949917c5d2e51ecc18 Author: Frank Mori Hess Date: 2003-02-24 19:20:12 +0000 added command line option for specifiying name of file you want to write calibration to comedi_calibrate/calib.h comedi_calibrate/cb.c comedi_calibrate/comedi_calibrate.c comedi_calibrate/save_cal.c commit b7de679b2fa29a1f4eeb7c8071e5436d2e24e5e1 Author: Frank Mori Hess Date: 2003-02-16 16:45:13 +0000 fixed setting of __comedi_errno after ioctl lib/ioctl.c lib/libinternal.h commit 60a24ae631d81f476cee684941be7e64b78119a8 Author: Frank Mori Hess Date: 2003-02-05 23:04:14 +0000 all analog input ranges are now calibrated for meas computing pci-das60xx comedi_calibrate/cb.c commit 46b3372b1aa293d23d29aa58ce1caed195c25560 Author: Frank Mori Hess Date: 2003-02-05 19:04:53 +0000 added a couple convenience functions comedi_calibrate/calib.h comedi_calibrate/cb.c comedi_calibrate/save_cal.c commit 69971fa3d23b35153eb34b01ead9c81d340ded22 Author: Frank Mori Hess Date: 2003-02-05 15:05:31 +0000 updated reference to old lineo cvs server etc/rel_comedilib commit 62d3635bc5d833edf7844494e4dda779d607dd8d Author: Frank Mori Hess Date: 2003-02-05 04:18:29 +0000 want to use ino_t to identify comedi device file instead of dev_t, which always contains major/minor number of hard drive comedi_calibrate/cb.c comedi_calibrate/save_cal.c commit 28c57d548aa320fd3a04f143f54770690c8d3c8f Author: Frank Mori Hess Date: 2003-02-04 19:45:45 +0000 removed some dead code comedi_calibrate/save_cal.c commit def13891a2a37ac774d87a0d2c29eb75aafa5df2 Author: Frank Mori Hess Date: 2003-02-04 18:21:07 +0000 writing calibrations to a file should be useable now comedi_calibrate/calib.h comedi_calibrate/save_cal.c commit a59ba8a07c5e64c781239aa45decc59655af18c8 Author: Frank Mori Hess Date: 2003-02-02 01:56:05 +0000 initial support for writing a set of calibrations to a text file comedi_calibrate/Makefile comedi_calibrate/calib.h comedi_calibrate/comedi_calibrate.c comedi_calibrate/save_cal.c commit 1974104db9477043dce34a5b15e4d2f53560c4a1 Author: Frank Mori Hess Date: 2003-01-09 17:53:46 +0000 added linefeed comedi_calibrate/cb.c commit 32f85d18a92bb4274694172d7fdedcf6d947cffe Author: Frank Mori Hess Date: 2003-01-01 23:22:08 +0000 better error message when reading calibration voltages from eeprom comedi_calibrate/cb.c commit 9d4aa91837fe14acd441b677d61a365f0ce0256f Author: Frank Mori Hess Date: 2003-01-01 23:08:07 +0000 include string.h for memset() demo/mmap.c lib/buffer.c commit ea64ba8daa44b6a92a33e64a82ffb4d8b44ad53b Author: Frank Mori Hess Date: 2003-01-01 23:07:02 +0000 fixing includes for exit(), memset() for gcc 2.96 compiler warnings comedi_calibrate/other.c demo/antialias.c demo/ao_waveform.c demo/dio.c demo/info.c demo/inp.c demo/inpn.c demo/insn.c demo/ledclock.c demo/mmap.c demo/outp.c demo/poll.c demo/receiver.c demo/select.c demo/sender.c demo/sigio.c testing/main.c commit 884ac97d587b176a9d7867d9f31b33716595feda Author: Frank Mori Hess Date: 2003-01-01 23:05:48 +0000 ignoring error so make install works when docs not built Makefile commit 68b2748c32289919234888d68df84ab41c01a481 Author: Frank Mori Hess Date: 2003-01-01 22:47:07 +0000 analog output calibration for cb_pcidas boards, plus reading of calibration voltages from eeprom. comedi_calibrate/cb.c commit 50ea72bc51aa55f06b0641fd2e6537ded0101343 Author: Frank Mori Hess Date: 2003-01-01 22:46:35 +0000 inactive support for reading calibration voltage from eeprom on 611x (not sure if ni_get_reference() is correct) comedi_calibrate/ni.c commit 5160eeba97c48c3cdc2d3b02a0532d9b70357382 Author: Frank Mori Hess Date: 2002-12-31 02:15:31 +0000 update status of pci-das1200 comedi_calibrate/cb.c commit 55e46d503d734e55649d611be6e6fc62fc72950b Author: Frank Mori Hess Date: 2002-12-31 01:13:13 +0000 fix compiler warning demo/dio.c commit fa70781423107d2a07e2435da55356d36e5948d0 Author: Frank Mori Hess Date: 2002-12-31 01:09:03 +0000 added cb_pcidas driver comedi_calibrate/comedi_calibrate.c commit 340c849fcc3eea19f9c887be6f769158c59467bc Author: Frank Mori Hess Date: 2002-12-11 02:38:01 +0000 new dev_info names for pcm-das08 and daqcard-1200 so pcmcia script runs comedi_config correctly etc/pcmcia/comedi.conf commit 48b8faab177763f99d3769fc37df72258a23e0cd Author: Frank Mori Hess Date: 2002-11-29 22:02:35 +0000 added some comments about how internal voltage reference appears when using +-50V or +-20V input ranges comedi_calibrate/ni.c commit a1b5be053f1c3b018ad2278b505f2d28abb4d839 Author: Frank Mori Hess Date: 2002-11-29 21:54:01 +0000 added ability to adjust settling time used by new_sv_measure(), since 611x needs more than standard 99usec settle. comedi_calibrate/calib.h comedi_calibrate/comedi_calibrate.c comedi_calibrate/ni.c commit 6d37fae4c97c8f254d5f0fe31d588af66a386f28 Author: Frank Mori Hess Date: 2002-11-29 21:29:04 +0000 611x calibration works now comedi_calibrate/comedi_calibrate.c comedi_calibrate/ni.c commit 9e713197bb1484e80689c4e22aca9c661f5f0be9 Author: Frank Mori Hess Date: 2002-11-29 21:27:40 +0000 fixed comedi_nanosleep(), which did nothing before comedi_calibrate/other.c commit 28cbcb99d84b82c21c1bb457ed783f5a20f8b2b7 Author: Frank Mori Hess Date: 2002-11-26 20:06:22 +0000 added error check for mmap() call demo/mmap.c commit 7f188a8354e1c557e4ea370d1c4df3def59aadb2 Author: Frank Mori Hess Date: 2002-11-25 21:05:13 +0000 rearranged order of 611x observables to deal with only having 2 ai channels on 6111 comedi_calibrate/ni.c commit 328365c267767e44af2850d7d2554e6bdc11b410 Author: Frank Mori Hess Date: 2002-11-25 20:56:34 +0000 I think we finally have 611x calibration right comedi_calibrate/ni.c commit 0b0afb5fa070b34c043bc8cea02443b8c569c942 Author: Frank Mori Hess Date: 2002-11-24 15:41:11 +0000 correcting ao caldac channels after fixing caldac type in driver comedi_calibrate/ni.c commit c4bef70db042beb6744b3dd30c71bc23f91d066b Author: Frank Mori Hess Date: 2002-11-24 15:16:49 +0000 611x documentation was wrong, calibration sources do not correspond to those from other boards. Guessing at index for 5V positive 0V negative calibration source. comedi_calibrate/ni.c commit 33ec9a58fac9014ff8f350b3c22441ff82c26903 Author: Frank Mori Hess Date: 2002-11-24 15:15:05 +0000 changed printing of "offset , target" to "reading , target" since the value it was printing was the actual voltage reading and not an offset from the target value comedi_calibrate/comedi_calibrate.c commit d8c8e696afc714ad68fa8d969cef33b9508bcbb8 Author: Frank Mori Hess Date: 2002-11-23 21:34:40 +0000 611x calibration doesn't like 5v-0v reference for gain calibration, wants 5v-5v reference comedi_calibrate/ni.c commit 6629cece6054c4e11fb7523984a8d4823cebf6d3 Author: Frank Mori Hess Date: 2002-11-23 21:09:27 +0000 fix calibration channels for 611x analog output comedi_calibrate/ni.c commit 57106eaf63c3be96fb518ed851e4d981af5c8c39 Author: Frank Mori Hess Date: 2002-11-23 18:15:45 +0000 fixed 611x names to match ni_pcimio driver comedi_calibrate/ni.c commit 1719e7a0ad941906c5174d9140bf13631d41318f Author: Frank Mori Hess Date: 2002-11-23 18:13:17 +0000 added CR_ALT_SOURCE and CR_ALT_FILTER to observe_insn.chanspec's, needed by 611x, and should be harmless to other boards comedi_calibrate/ni.c commit 5685d1ae2b62fcb81e0410dd49b562e5e5d30790 Author: Frank Mori Hess Date: 2002-11-22 21:45:05 +0000 increased BUF_LEN, so demo works better with ni boards demo/ao_waveform.c commit 6bc9f5f03d3040a8e7b3fbcf0463e31831897d44 Author: David Schleef Date: 2002-11-22 07:17:15 +0000 update from comedi include/comedi.h commit 847fb8c86cd9c941b703aed5745edde489577112 Author: David Schleef Date: 2002-11-22 07:15:09 +0000 Fix for cases where the command doesn't allow source choices testing/cmd_1.c commit 087e6042d440e5618155ebbf54938b7265a9bf67 Author: David Schleef Date: 2002-11-22 06:48:39 +0000 fix mmap testing testing/mmap.c commit 8ab0f19e340dcebf8d2e25a96bf91001af3900e0 Author: Frank Mori Hess Date: 2002-11-20 00:43:19 +0000 changed & to %, before it seemed to assume the buffer size was a power of 2 demo/mmap.c commit f0e92b132257b7040f815d800bacd10f3cdc431d Author: Frank Mori Hess Date: 2002-11-18 23:49:57 +0000 added documentation for comedi_data_read_delayed() and comedi_data_read_hint() because I'm sick of anwering questions about why comedi_data_read() returns inaccurate values. doc/funcref commit 962c9d0a8920ade6091caf543d1148f71f377680 Author: Frank Mori Hess Date: 2002-11-18 17:05:14 +0000 611x calibration support. More conversion to new CONFIG_ALT_SOURCE usage (backward compatibility with AREF_OTHER should still work ) comedi_calibrate/calib.h comedi_calibrate/cb.c comedi_calibrate/comedi_calibrate.c comedi_calibrate/ni.c commit a838d43cead06082a83669fc09ec1388a88415f1 Author: Frank Mori Hess Date: 2002-11-12 18:36:26 +0000 updating status of 6023 comedi_calibrate/cb.c commit ebde7f1f3dab669bce1f7ac238b1abc3fe27d544 Author: David Schleef Date: 2002-11-05 05:21:52 +0000 Fixes, add cb_das16_cs etc/pcmcia/comedi.conf commit 9f8336c828871a0cacb60569a52a5d3e61ec3d82 Author: David Schleef Date: 2002-09-25 01:19:18 +0000 install de LC_MESSAGES Makefile commit 97f351cfd070f13b47e36723f5c137b3b57a7f52 Author: David Schleef Date: 2002-09-25 01:17:17 +0000 lksjdf comedi_calibrate/results/pci-6032e commit 88f6c3061c353f99700348079813a43c23dd52e0 Author: David Schleef Date: 2002-09-25 01:16:02 +0000 Fix i18n comedi_config/comedi_config.c commit a220597b4b9149dc52b682f7c59fb0102dcb8f8f Author: David Schleef Date: 2002-09-25 01:12:16 +0000 remove some stuff that is in the lib now demo/info.c commit 5dae30af2fc097b5b18334c9de38d07354134a60 Author: David Schleef Date: 2002-09-25 01:11:47 +0000 add some error checking demo/ao_waveform.c commit 086659fc597dcbcbb615e75c326f8b16fab91cd6 Author: David Schleef Date: 2002-09-25 01:08:16 +0000 fix typo on comedi_open doc/funcref commit c5e8857bb15c620528a8fac0caed6c312bc14202 Author: David Schleef Date: 2002-09-25 01:04:41 +0000 Last log is bogus. Should be: disable AO0 on 6071e, since it doesn't work correctly. comedi_calibrate/ni.c commit 8aad2de2c47c5864599508ea9c73ff6d1aca463c Author: David Schleef Date: 2002-09-25 01:02:57 +0000 Added help() and --help flag comedi_calibrate/comedi_calibrate.c commit e5b72fbbd24965d9ca76a6eaf8eba2dfe060b3f3 Author: David Schleef Date: 2002-09-25 01:02:08 +0000 Add help() and --help flag comedi_calibrate/ni.c commit c8bb32ca72416a901c00c14c57a29224a8d33072 Author: David Schleef Date: 2002-09-09 22:16:10 +0000 results comedi_calibrate/results/DAQCard-ai-16e-4 commit 4d9fa6a5b106df94634df3680b8be946de01a786 Author: David Schleef Date: 2002-09-09 22:15:56 +0000 DAQCard-16e-4 is done comedi_calibrate/ni.c commit f866712b0d37fa059ddcd7975cc995aeecc8d360 Author: David Schleef Date: 2002-08-29 23:35:37 +0000 Fixes for 6023. comedi_calibrate/ni.c comedi_calibrate/results/pci-6023e commit 3f3b1159440f052653075d112ab47b3b8c36a6af Author: David Schleef Date: 2002-08-28 20:07:27 +0000 DAQCard-AI-16e-4, pci-6023e improvments comedi_calibrate/ni.c commit 6f12bb964f5a42e0870e2d98100dcef034d9bcac Author: David Schleef Date: 2002-08-20 00:09:00 +0000 change 6032e to DONE comedi_calibrate/ni.c commit 8fbcb2c63a3a2c02c4d18cee18e0e980db64895d Author: David Schleef Date: 2002-08-19 23:11:33 +0000 Added 6032e comedi_calibrate/ni.c commit cd6660ec5879ed5cda502333405c6e393cf20194 Author: David Schleef Date: 2002-08-06 19:39:31 +0000 Fix mistake getting buffer head position demo/mmap.c commit b502ae1f17d76f3776f7267e7d70ca5b21a7bc3e Author: David Schleef Date: 2002-07-24 01:52:43 +0000 version bump version commit add0bf082b7e42b64e389ed72f9287ad4903945d Author: Frank Mori Hess Date: 2002-07-22 20:45:24 +0000 added a couple paragraphs for people who don't know what anti-alias filters are. doc/other.sgml commit 0fbbbef2ddb78861edcac7233365dfc46398dad4 Author: David Schleef Date: 2002-07-04 03:30:39 +0000 copy from Comedi include/comedi.h commit 2631bc901299d6cc9aadf9d616232c63c4a35a1e Author: David Schleef Date: 2002-07-04 03:29:41 +0000 rearrangement include/comedilib.h commit 118dfa65c36656857a8e2b3dc6bfa3c47db97c0c Author: Frank Mori Hess Date: 2002-07-01 04:01:53 +0000 sync with comedi include/comedi.h commit a3bc23ec79c68d72de3d1bea05d6850c13d221ba Author: Frank Mori Hess Date: 2002-06-23 23:31:08 +0000 added support for cb_pcidas.c boards comedi_calibrate/cb.c commit b657159d342bd016648d196636f0170ba88e78b3 Author: Frank Mori Hess Date: 2002-06-20 23:54:12 +0000 added computer boards pci-das6023 comedi_calibrate/cb.c commit 079da8bc72f8a190cf02b66b0d5edbfa9ec8d598 Author: Frank Mori Hess Date: 2002-06-15 21:25:52 +0000 new test results testing/results/Measurement_Computing_pcidas-6023 commit 365b5ed395f6129e18e5338f2be2960eac04591d Author: David Schleef Date: 2002-06-13 00:00:03 +0000 Fix up some versioning mistakes lib/comedi.c lib/data.c lib/error.c lib/get.c lib/ioctl.c lib/libinternal.h lib/range.c commit 83da2c977cd78dac10bba48cd73a87df7b0fa44c Author: David Schleef Date: 2002-06-12 23:19:39 +0000 Add cal_postgain_binary() and use it for 6052e and pci-mio-16e-4 comedi_calibrate/calib.h comedi_calibrate/comedi_calibrate.c comedi_calibrate/ni.c comedi_calibrate/results/pci-mio-16e-4 commit 3642cd3552cdc17e55603f218c46780da1d0c747 Author: David Schleef Date: 2002-06-12 22:44:44 +0000 notes about the new calibration functions comedi_calibrate/README commit ec607f5003e4f1e9746440655b4a38fb4712ba7f Author: David Schleef Date: 2002-06-12 21:49:22 +0000 Add binary search calibration function. comedi_calibrate/calib.h comedi_calibrate/comedi_calibrate.c comedi_calibrate/ni.c comedi_calibrate/results/pci-mio-16e-4 commit 2851280824fc21dcbba0a87379459bdf1d1c6ad1 Author: David Schleef Date: 2002-06-12 02:02:05 +0000 Add symbol versioning. Versions need to be checked with 0.7.18 release. lib/Makefile lib/buffer.c lib/cmd.c lib/comedi.c lib/data.c lib/dio.c lib/error.c lib/get.c lib/libinternal.h lib/range.c lib/sv.c lib/timed.c lib/timer.c lib/version_script commit e6f99e5ad9e569b2978c946d6075993c09bfbe96 Author: David Schleef Date: 2002-06-12 02:01:03 +0000 remove rm of non-autogenerated files doc/Makefile commit b168d6d3f1e902c06ec486c7c50e1c3abc2b5a2a Author: David Schleef Date: 2002-06-12 02:00:37 +0000 Fix shlibdeps to get the built library debian/rules commit 159933b8c11d8307785d8173fa95642125441f17 Author: David Schleef Date: 2002-06-07 17:55:43 +0000 *** empty log message *** comedi_calibrate/results/pci-6024e commit 60d73ea2eb522730a3df4d110146a6f4ca7b1289 Author: David Schleef Date: 2002-06-07 17:54:27 +0000 Update for 6024e comedi_calibrate/ni.c commit c28b3ee40045552aa60aac0a4e0efa59b548410d Author: David Schleef Date: 2002-06-07 00:18:48 +0000 *** empty log message *** testing/results/pci-6052e commit 6c680d07902fa90e548efc186fd75136e2ab6e66 Author: David Schleef Date: 2002-06-07 00:17:35 +0000 More questions doc/FAQ commit f3ef54ca5cfcc00b4d336374ad24985080dbd0bc Author: David Schleef Date: 2002-06-07 00:16:42 +0000 Handles range,maxdata information correctly. Internal triggering works. demo/ao_waveform.c commit 34327d3efd82714c34a5c9223ab0f93ca863cf2a Author: David Schleef Date: 2002-06-06 01:21:10 +0000 disable CR_ALT_SOURCE until there's a check for Comedi support comedi_calibrate/ni.c commit 1303b4758ce6872f5a47498922e4f79dfbbda312 Author: David Schleef Date: 2002-06-06 00:38:54 +0000 test reading 0 samples testing/insn_read.c testing/main.c commit 6a3e5a4ca541852d8a236a95c10509cb078774a6 Author: David Schleef Date: 2002-06-06 00:28:52 +0000 *** empty log message *** comedi_calibrate/results/at-mio-16xe-50 comedi_calibrate/results/pci-6035e comedi_calibrate/results/pci-mio-16e-4 commit e1f09b66fc2baf540bac4e9ba6c5dda00efb2a5c Author: David Schleef Date: 2002-06-06 00:27:14 +0000 finish 6035e, fix 16e-4 after change to debug caldac comedi_calibrate/ni.c commit 51468b10f23c97e5c181df36a29912b1a0601b8e Author: David Schleef Date: 2002-05-22 22:53:01 +0000 updates for 6035e comedi_calibrate/ni.c commit 303d9e7ff15b56ab6d36519adffa991ff85ba915 Author: Frank Mori Hess Date: 2002-05-22 16:44:42 +0000 fix INTTRIG insn demo/ao_waveform.c commit e19dbfeccba80f4a84cef0348b594299bc416e67 Author: Frank Mori Hess Date: 2002-05-20 02:23:38 +0000 added initial support for calibrating 64xx series cards. Added support for reading calibration source voltages from eeprom. Got rid of a couple more global variables just for kicks. comedi_calibrate/calib.h comedi_calibrate/cb.c comedi_calibrate/comedi_calibrate.c comedi_calibrate/ni.c commit 7420b070abd69c0195fd97acf222e52e2a9969fa Author: David Schleef Date: 2002-05-18 23:00:20 +0000 Move etc/ to libcomedi0 package debian/rules commit b4fd07f2cfd9d283feff101c3b629c2b2fa40c6e Author: David Schleef Date: 2002-05-18 22:48:19 +0000 Add comedi_get_read/write_subdevice() include/comedilib.h lib/get.c commit 3386926ddbb2a41e2a8d3dab30ed14512d54e487 Author: David Schleef Date: 2002-05-18 22:47:03 +0000 devices should be made in /dev debian/libcomedi0.postinst commit b232205eed4e61d64fc0beede3cf1e15a2a39369 Author: David Schleef Date: 2002-05-18 22:46:32 +0000 Fix install of html docs Makefile commit 8bb4454b3d686cc4b251e7d4a0da4e18c5e1e01c Author: Frank Mori Hess Date: 2002-05-18 21:52:23 +0000 fudging Makefile so it doesn't fail on 'make install' with cvs checkout Makefile commit 135a452b9c8159303ea82d853838f220529a7e55 Author: David Schleef Date: 2002-05-17 20:24:33 +0000 Mark 6052e as done comedi_calibrate/ni.c commit da1bf9efc647645e98ba1c52c8ef572b6dae9e9d Author: Frank Mori Hess Date: 2002-05-17 15:33:18 +0000 added CR_ALT_FILTER and CR_ALT_SOURCE to observe_insn.chanspec's comedi_calibrate/cb.c commit 4d143d616d76b6ad708cdedd68cbfede4394fc4b Author: David Schleef Date: 2002-05-17 02:22:35 +0000 Make CR_PACK less strict. include/comedi.h commit 45f3cb25a75fbb32782e8470b7f948b3a865b1fc Author: David Schleef Date: 2002-05-17 02:21:14 +0000 Changed new_sv to use chanspec. Updated 6052e. Changed ni.c to use CR_ALT_SOURCE for one observable. comedi_calibrate/Makefile comedi_calibrate/calib.h comedi_calibrate/comedi_calibrate.c comedi_calibrate/ni.c comedi_calibrate/other.c commit a915ab1206433cd799d915586b476df31ce5bf82 Author: David Schleef Date: 2002-05-17 02:19:52 +0000 Fix up data_read_* code lib/data.c commit b6e2625c1c0207f088faf8be26e194ac0feaaedf Author: David Schleef Date: 2002-05-17 02:18:04 +0000 updated comedi_calibrate/results/pci-6052e commit f6fed642251dd73d3767a41c3819fa7871e4deaa Author: David Schleef Date: 2002-05-16 06:31:47 +0000 Make comedi_ioctl less verbose lib/libinternal.h commit 85233be248abd1164ab8e4527c6ce480dc809544 Author: David Schleef Date: 2002-05-16 06:30:54 +0000 Added new ioctl() wrapper. lib/buffer.c lib/comedi.c lib/data.c lib/filler.c lib/ioctl.c lib/libinternal.h lib/sv.c commit 22ae5041970a47d75bca6943636adda79cce20ee Author: David Schleef Date: 2002-05-15 19:53:34 +0000 Change cmd tester to check for Comedi version, and then use SDF_CMD flag. lib/filler.c lib/libinternal.h commit 515a0d426fe2efe4290c92e1a4702768ab606e62 Author: Frank Mori Hess Date: 2002-05-13 21:39:11 +0000 oops 4020 calibration was using 60xx routine comedi_calibrate/cb.c commit 4afd6bc03e1bf97bbdf4d80ae7c457163cd21bf7 Author: Frank Mori Hess Date: 2002-05-13 04:58:05 +0000 pci-das60xx should use ground aref not differential comedi_calibrate/cb.c commit a999ccefbcde03489c3f3fc45b9dcd471ebe02ba Author: Frank Mori Hess Date: 2002-05-13 03:55:52 +0000 basic calibration of pci-das6025 works now, added 4020 calibration code comedi_calibrate/calib.h comedi_calibrate/cb.c comedi_calibrate/comedi_calibrate.c comedi_calibrate/ni.c commit 137fdba9885c7a0dce8b98b6a9532e901e63271b Author: Frank Mori Hess Date: 2002-05-12 03:07:20 +0000 got rid of some global variables comedi_calibrate/calib.h comedi_calibrate/cb.c comedi_calibrate/comedi_calibrate.c comedi_calibrate/ni.c commit 619f6afc47870affacf23ec9a61584a92651988e Author: David Schleef Date: 2002-05-11 07:35:31 +0000 Remove all the ioctl_ wrappers, because they were dumb. lib/buffer.c lib/comedi.c lib/data.c lib/filler.c lib/ioctl.c lib/libinternal.h lib/sv.c commit 8f29543c11c042cec79c1dd13eaeabb43578803d Author: David Schleef Date: 2002-05-11 06:45:40 +0000 Added parsing of Status header and & doc/mkdr commit 1e25ae3db8428270c6f054149d480c619973953c Author: David Schleef Date: 2002-05-11 06:43:55 +0000 Add glossary doc/comedilib.sgml commit d59513479b363fb011dae3bad585f78f215ac01d Author: David Schleef Date: 2002-05-11 06:43:30 +0000 Use n_scans as the number of samples to measure. demo/insn.c commit d4f2efea4876a482545be822cd6282817572b14a Author: David Schleef Date: 2002-05-11 06:42:14 +0000 Added at-mio-16e-1 comedi_calibrate/ni.c commit 0c0a3440dbf5a7d08585201e045992a584417bf7 Author: David Schleef Date: 2002-05-10 19:08:58 +0000 Get rid of spurious "subdevice does not support commands" warnings. demo/info.c commit 3dd23bc127d748147583a492b0d35d91a93d3584 Author: Frank Mori Hess Date: 2002-05-07 23:42:30 +0000 sync with comedi include/comedi.h commit 4d55a9ca2ca796a47cb358a02a88776c95e3c5ba Author: Frank Mori Hess Date: 2002-05-07 01:32:57 +0000 Added dummy support for cb_pcidas64 boards that does nothing so far. Slowly getting rid of global variables as I go. comedi_calibrate/Makefile comedi_calibrate/calib.h comedi_calibrate/cb.c comedi_calibrate/comedi_calibrate.c comedi_calibrate/ni.c commit 8a85f450b5dbbf12197d1d513e305a642df156cc Author: Frank Mori Hess Date: 2002-05-01 19:58:09 +0000 updated drivers.txt generated from comedi, that fixes some parse errors doc/drivers.txt commit 4f8f9eda9baacb4466531ff3e658a32730bcee03 Author: David Schleef Date: 2002-05-01 19:27:11 +0000 moved DOCTYPE in each file into a comment. Vim still recognizes it, but there are no more jade warnings/errors doc/glossary.sgml doc/install.sgml doc/intro.sgml doc/other.sgml doc/reference.sgml doc/tutorial.sgml commit 7d9b50fc7d276d41edd4f3384bb53dda14484556 Author: David Schleef Date: 2002-05-01 19:24:46 +0000 added pdf target doc/Makefile commit 427f10a77a717869cb85fa40821d29f8fcecae1e Author: David Schleef Date: 2002-05-01 19:24:27 +0000 Added some functions doc/funcref commit 75e3c0fcef1ce385578850cf2a17833d9777ddd0 Author: Frank Mori Hess Date: 2002-04-30 23:07:00 +0000 some more additions so flags don't cause invalid channel error lib/data.c commit 21d7877c2d39d46c6eb02085fcd48dfe95a9e98e Author: Frank Mori Hess Date: 2002-04-30 22:56:30 +0000 Horrible hack to allow passing of CR flags through channel arguments. Made comedi_calibrate use comedi_data_read_n() from main library. Should be able to add computer boards support to comedi_calibrate soon now. comedi_calibrate/calib.h comedi_calibrate/comedi_calibrate.c include/comedi.h lib/data.c commit e73c24b951409d812386765d50f5d2d73ee88066 Author: Frank Mori Hess Date: 2002-04-29 21:13:13 +0000 added comedi_data_read_n() include/comedilib.h lib/data.c commit bf5d20bb9f40bb235ea58b4f1ac4c082c002d8c8 Author: Frank Mori Hess Date: 2002-04-29 19:50:32 +0000 added comedi_data_read_hint() and fixed comedi_data_read_n() include/comedilib.h lib/data.c commit f31cfa63350a8407de438f278f841b11434c0451 Author: Frank Mori Hess Date: 2002-04-29 18:58:36 +0000 oops arg is really nanoseconds include/comedilib.h commit cedfceb9abe2d43b99db80b66f06dca5a0b619e0 Author: Frank Mori Hess Date: 2002-04-29 18:26:46 +0000 fixed initialization of insn array in comedi_data_read_delayed(), added unnecessary init of ilist lib/data.c commit 4a9dd8e9d33620b986ad484d6a9c508eabb6a2af Author: Frank Mori Hess Date: 2002-04-29 18:22:41 +0000 added comedi_data_read_delayed() include/comedilib.h lib/data.c commit 7762442abde04fee68c66e1df98ec77f3d08cce5 Author: Frank Mori Hess Date: 2002-04-29 18:19:35 +0000 oops incomplete commit last time. comedi_calibrate/calib.h commit fe5c7b532da983191de7254240c9717a4e0aa31f Author: Frank Mori Hess Date: 2002-04-27 19:24:34 +0000 got rid of global variable device_status comedi_calibrate/comedi_calibrate.c comedi_calibrate/ni.c commit 611740983cd372cadcd74409fb2c3dec5233e0ca Author: Frank Mori Hess Date: 2002-04-17 03:58:23 +0000 updated from comedi, for calibration config stuff include/comedi.h commit 2a637ef62c4355e1124c60f3cc4722e7f1606f32 Author: Frank Mori Hess Date: 2002-04-16 20:51:56 +0000 replaced call to comedi_get_front_count() with call to identical comedi_get_buffer_offset() since that is the function that is actually declared in comedilib.h demo/mmap.c commit 79614184d3dab67d6469c9fac9dfd02595f2efeb Author: Frank Mori Hess Date: 2002-04-02 19:55:33 +0000 fixed error checking that tested for unsigned variables being negative demo/eeprom_dump.c commit 80281d3b3138b193d7b07b4c365767eb71c34a84 Author: David Schleef Date: 2002-03-18 23:12:58 +0000 typing doc/glossary.sgml commit 834b78b9087c68ffad8ddafe76a8698088da3eb8 Author: David Schleef Date: 2002-03-18 22:18:17 +0000 Change name doc/glossary.sgml commit 09d8271d34e751eca1d4a4335a5bd4a144b3b378 Author: David Schleef Date: 2002-03-18 22:14:47 +0000 *** empty log message *** comedi_calibrate/results/pci-6025e doc/vocab.sgml testing/results/Adlink_PCI-9118DG commit e3ab787c666b57e40407a7b8182d48a9583c2c7e Author: David Schleef Date: 2002-03-18 22:11:32 +0000 Added multi-channel support demo/ao_waveform.c commit 44dce3360ecc149144f5a10af4b7f1b8669eee1f Author: David Schleef Date: 2002-03-18 22:10:12 +0000 Fix for toplevel makefile change debian/rules commit 5d0c1d4bc8857b170aa5f2812451843fd88b1aef Author: David Schleef Date: 2002-03-18 22:09:20 +0000 Clean up installation Makefile commit 94a761c7a4144335e85703a5c6b982f019edc56d Author: David Schleef Date: 2002-03-18 22:08:53 +0000 Fix stupid ttypo comedi_calibrate/ni.c commit ede9462423c9c3f36f7d83b5bcb9ca3120a56afa Author: David Schleef Date: 2002-03-18 21:52:13 +0000 perl demo demo/perl/inp.pl commit af2f7409a2fd6073f87f86a7e661208a8c70fdf3 Author: David Schleef Date: 2002-03-18 21:50:40 +0000 Changes to make it a little more robust demo/cmd.c commit 92a02273c3e2fd3b63a4196227ef13a1074d83b2 Author: David Schleef Date: 2002-03-18 21:49:08 +0000 Fix for 6025. Other 602x boards probably have the same problem. comedi_calibrate/ni.c commit b7d115eafaebd378f39a74b6cf203dbf2d239007 Author: David Schleef Date: 2002-03-18 21:48:14 +0000 added output command test testing/cmd_1.c testing/main.c testing/mmap.c commit a7a27a2a9179c83ca998e4e3e9c264a44465f016 Author: David Schleef Date: 2002-03-18 21:47:45 +0000 *** empty log message *** todo commit 84650f75f88caa892b3f1efc65e073c93613f900 Author: David Schleef Date: 2002-03-14 23:33:18 +0000 *** empty log message *** comedi_calibrate/results/pci-mio-16e-1 commit bfd78beffcb32f81941b14aa0edf964294428a7a Author: David Schleef Date: 2002-03-14 23:30:05 +0000 Finish pci-mio-16xe-10 comedi_calibrate/ni.c comedi_calibrate/results/pci-mio-16xe-10 commit 62088df1244293ed61b6a3dc958742927cdd80b0 Author: David Schleef Date: 2002-03-09 01:22:30 +0000 Change email addresses and host names. README comedi_config/comedi_config.c debian/copyright doc/FAQ include/comedilib.h man/comedi.7 man/comedi_config.8 perl/README rpm/comedilib.spec commit aecc9c6a2bc1e98d9d5b12eb70b6f6d1250ab723 Author: David Schleef Date: 2002-03-09 00:25:04 +0000 Add DAQ-DIO-24 etc/pcmcia/comedi.conf commit 81c07a5d88c8e2cb93355e0d7d8cfc93bd0c874b Author: David Schleef Date: 2002-03-09 00:20:20 +0000 Patch from John Conner python/compy.c python/sample1.py commit 40818a4ece8bf028f7d671ef6eac791629a70478 Author: David Schleef Date: 2002-03-09 00:12:24 +0000 Update from Comedi include/comedi.h commit 99b587482bf28854705d944c5bf72f0f5a1dbe21 Author: David Schleef Date: 2002-03-08 23:44:25 +0000 Fix BUG in do_test_for_insn_bits() while testing irrelevant subdevices that are busy. lib/filler.c commit 912ff4281f573306cb3ec8d65f8fab819061b2ac Author: Frank Mori Hess Date: 2002-03-07 22:34:04 +0000 added Herman as author doc/comedilib.sgml commit 3e522f3eda60ec8a6c09bf3b07fd52c0934ef8e0 Author: David Schleef Date: 2002-02-26 11:08:15 +0000 let's build some RPMs. From Tim Ousley rpm/comedilib.patch rpm/comedilib.spec commit 3c2682f199cf5a2bc03ee07931c3f939a84b6528 Author: David Schleef Date: 2002-02-21 03:14:39 +0000 Move to correct location debian/conffiles debian/libcomedi0.conffiles commit 7372d69492d5ed52b6e0b92a759cf7f58fb75230 Author: David Schleef Date: 2002-02-21 03:08:14 +0000 Comedilib has conffiles debian/libcomedi0.conffiles commit 38af01fe52e89be8f9eb98299296ff0faeaeb699 Author: David Schleef Date: 2002-02-20 20:17:11 +0000 6052e works now comedi_calibrate/comedi_calibrate.c comedi_calibrate/ni.c comedi_calibrate/results/pci-6052e commit eb1a0aac82a5a9cb071b83ac8ad1d74257b3fd6c Author: David Schleef Date: 2002-02-16 23:23:36 +0000 Install demo/*.c, install etc/*.conf correctly Makefile commit cef3d9d6568f88691cab80e9a2bc30b6b0b818cc Author: David Schleef Date: 2002-02-12 22:30:14 +0000 More devices etc/pcmcia/comedi.conf commit 5baf6c4c40b47ad8155923e015faf32453d098f9 Author: David Schleef Date: 2002-02-12 22:30:01 +0000 added cleanup etc/rel_comedilib commit c2dcc60a7bb1e8543dd8ab9821296fa25a19f730 Author: David Schleef Date: 2002-02-12 22:29:13 +0000 changelog entry for 0.7.18 Changelog commit 2491b315c6227117e0b38f88d5b883249796a5ec Author: David Schleef Date: 2002-02-12 00:54:20 +0000 Added printing of Id string from device source comedi_calibrate/calib.h comedi_calibrate/comedi_calibrate.c commit e322bacd03a402cec7c79e1a73d5757e2b58a771 Author: David Schleef Date: 2002-02-12 00:47:54 +0000 Update 6052e to use ad8804 caldac. Requires current Comedi CVS. comedi_calibrate/ni.c commit 894a4b0d3ab138a1296c8f6eecefc232105a3b47 Author: David Schleef Date: 2002-02-10 21:55:42 +0000 Change N_CALDACS to 64. comedi_calibrate/calib.h commit 52b66f2c8938f1eef9a5e225a2379c94b739dec6 Author: David Schleef Date: 2002-02-06 22:08:50 +0000 Disabled streaming output on many of the command tests testing/cmd_1.c testing/cmd_2.c testing/inttrig.c testing/main.c testing/mmap.c testing/select.c commit b9c474f1d4509d36acb4b92a1be2ad5b4d213eae Author: David Schleef Date: 2002-02-06 03:09:13 +0000 *** empty log message *** comedi_calibrate/results/pci-6023e comedi_calibrate/results/pci-6024e comedi_calibrate/results/pci-6052e comedi_calibrate/results/pci-mio-16xe-50 commit 1cb86b7c82c3cd0461094d30b65944dd69434159 Author: David Schleef Date: 2002-02-06 03:08:09 +0000 Update some cards comedi_calibrate/ni.c commit 2e6b3a462001faec27b2575dacc4bbef50e3f528 Author: David Schleef Date: 2002-02-01 00:34:06 +0000 Iteration on 6052e comedi_calibrate/ni.c commit ccc00104ca7491baa24c2b8f9c0e305d2d9188fa Author: David Schleef Date: 2002-01-31 11:24:33 +0000 Added 6052e comedi_calibrate/ni.c comedi_calibrate/results/pci-6052e commit 6e52d6cfe1d070c29deb31024ba9999406bf57cc Author: Frank Mori Hess Date: 2002-01-27 21:05:05 +0000 fixed buffer resizing for subdevices that aren't subdevice zero. comedi_config/comedi_config.c commit fadd1471cf1981c413b8bd9ead92de699834e906 Author: David Schleef Date: 2002-01-25 02:14:42 +0000 Print Id without $. Additional info on 6071e. comedi_calibrate/comedi_calibrate.c comedi_calibrate/ni.c commit b69733b6e69028649d01d8f7ccbebd99c33b4de8 Author: David Schleef Date: 2002-01-25 02:14:01 +0000 *** empty log message *** comedi_calibrate/results/pci-6071e commit cd8d48d864ef61d5dba3c8f78367ca2ee9b81f8c Author: David Schleef Date: 2002-01-22 11:35:15 +0000 bump version commit 89fe19f725a9abbdcbd28d40d1a3fecebfaddf2a Author: David Schleef Date: 2002-01-22 10:01:13 +0000 Cleanup. etc/rel_comedilib commit 5fc0db62710f072a1748dbdc3d46c3e7f952c124 Author: David Schleef Date: 2002-01-22 10:00:42 +0000 *** empty log message *** debian/changelog commit 049c585b23be604de19989bd8674d6699fab777a Author: David Schleef Date: 2002-01-22 09:34:49 +0000 Make it work with the parallel port again demo/ledclock.c commit 6fc61032794a8169d201ada6f2fa90d1dd827a33 Author: David Schleef Date: 2002-01-22 09:32:28 +0000 Fixed strange unreproducible behavior with insn barfing. Turns out that -5 is not really equal to -5. comedi_calibrate/comedi_calibrate.c commit 89d30ff0b41104b944fdd5419528be521135fdd0 Author: Frank Mori Hess Date: 2002-01-22 04:06:53 +0000 correct id number for daqcard-1200 etc/pcmcia/comedi.conf commit c6427774e11935dd5cd3d939e23660763ce9cfd4 Author: Frank Mori Hess Date: 2002-01-22 03:09:26 +0000 oops it was actually a driver problem etc/pcmcia/comedi.conf commit fa1d587467f0304718acdf90b9722aa25e7ca442 Author: Frank Mori Hess Date: 2002-01-22 02:53:38 +0000 fixes for boards where the device name is not the module name etc/pcmcia/comedi.conf commit 7e92da9d79951a819ed1cd3cc2644a7dd6fdda44 Author: David Schleef Date: 2002-01-21 15:35:34 +0000 Current Comedi CVS drivers.txt. doc/drivers.txt commit 0be5b0051387ecd35441a60193def68f058cdc0c Author: David Schleef Date: 2002-01-21 15:32:42 +0000 Move documentation ported to DocBook-3.1 out of docbook directory. doc/Makefile doc/advanced.sgml doc/comedilib.sgml doc/docbook/Makefile doc/docbook/comedilib.sgml doc/docbook/drivers.txt doc/funcref doc/install.sgml doc/intro.sgml doc/mkdr doc/mkref doc/other.sgml doc/reference.sgml doc/tutorial doc/tutorial.sgml commit 9a417c72822bcf04e4153f72882d57829e2e5867 Author: David Schleef Date: 2002-01-21 15:17:12 +0000 Updates doc/docbook/Makefile doc/docbook/comedilib.sgml doc/docbook/funcref doc/docbook/mkref doc/docbook/other.sgml doc/docbook/reference.sgml doc/docbook/tutorial.sgml commit f95a0c1eac233b11ca5252307a8de0ccca691325 Author: David Schleef Date: 2002-01-21 11:15:31 +0000 Converting docs to DocBook 3.1 doc/docbook/Makefile doc/docbook/advanced.sgml doc/docbook/comedilib.sgml doc/docbook/drivers.txt doc/docbook/funcref doc/docbook/install.sgml doc/docbook/intro.sgml doc/docbook/mkdr doc/docbook/mkref doc/docbook/other.sgml doc/docbook/reference.sgml doc/docbook/tutorial.sgml commit 575761aed2a717b9f1d1c25ec6f2fd3468746826 Author: David Schleef Date: 2002-01-21 00:33:05 +0000 Fix to make the demo programs link statically with the local library. demo/Makefile commit 8652f3c7d035bd03c7a99acb2740c2471e3cccdb Author: David Schleef Date: 2002-01-21 00:26:30 +0000 *** empty log message *** debian/changelog commit 0cb54481fee40df10017a883f7719a57512c84a7 Author: David Schleef Date: 2002-01-21 00:14:37 +0000 Fixed some [] characters. doc/comedilib.sgml commit 1a0ddff3008fd98be338087d25ee3a74df3e00eb Author: David Schleef Date: 2002-01-21 00:13:52 +0000 Added a few questions doc/FAQ commit 7ee9745443b75dcd226136d8124d697a0322dab4 Author: David Schleef Date: 2002-01-15 01:02:39 +0000 *** empty log message *** version commit 450f2fed3f8e88cdc672dea99960dbf2ba721ff6 Author: David Schleef Date: 2002-01-15 00:31:39 +0000 remove autogenerated file debian/comedilib1.files commit 239d29640fe0c47229e64436aa456b37ddd89283 Author: David Schleef Date: 2002-01-15 00:29:54 +0000 Added fine calibration. Changed DAQCard-ai-16xe-50 and at-mio-16xe-50 to use fine calibration. comedi_calibrate/calib.h comedi_calibrate/comedi_calibrate.c comedi_calibrate/ni.c comedi_calibrate/results/DAQCard-ai-16xe-50 commit a4485ce456c00eafb7e11667facfae87201f9f05 Author: David Schleef Date: 2002-01-14 22:50:26 +0000 Clear up some confusion etc/modules.conf commit 99dd95e2bafc8e0b35fff4b3aafa6fddc3ef1b40 Author: David Schleef Date: 2002-01-14 22:45:10 +0000 Change name. It seems most distros are using modules.conf etc/modules.conf commit 4548660d9407f11abab2dbddbeee8ee648d58496 Author: David Schleef Date: 2002-01-14 22:39:29 +0000 PCI-MIO-16E-1 is now done comedi_calibrate/ni.c comedi_calibrate/results/pci-mio-16e-1 commit 2394134624825ed21ce7b96882d62ea5d740b8f0 Author: David Schleef Date: 2002-01-14 21:29:03 +0000 Use MAKEDEV instead of building inodes ourselves debian/libcomedi0.postinst commit 7f09d95a24c76b196a4ec02c37fa040b48317efb Author: David Schleef Date: 2002-01-14 21:28:15 +0000 Fix spelling error. Depend on makedev. debian/control commit 861f57900f025c0f578c5321092be2626667a06e Author: David Schleef Date: 2002-01-14 21:26:26 +0000 Add README. Add a few boards. Fix: CONFIG_GUESS boards output dump information. comedi_calibrate/README comedi_calibrate/comedi_calibrate.c comedi_calibrate/ni.c comedi_calibrate/results/at-mio-16xe-50 comedi_calibrate/results/pci-6071e comedi_calibrate/results/pci-6713 comedi_calibrate/results/pci-mio-16xe-10 commit 52a2615b4c53f63498eab1be0a123d5ab6fd580a Author: Frank Mori Hess Date: 2002-01-08 20:38:16 +0000 included string.h for declaration of memset. demo/cmd.c commit 0923e0a8fc1219989e450a9b70d99973cc367888 Author: David Schleef Date: 2001-12-14 22:45:20 +0000 *** empty log message *** comedi_calibrate/results/pci-6025e commit 61a0154ed80e83a9405fbc4a71023253e02fefa0 Author: David Schleef Date: 2001-12-01 05:26:50 +0000 Merged from Comedi etc/pcmcia/comedi.conf commit 1876b9e66eb3836bc4aff2dc8896fc9ad6975684 Author: David Schleef Date: 2001-11-18 03:02:25 +0000 Changelog for 0.7.17 Changelog commit 0a0a670cf7d4946b988e27c266493d99862f3347 Author: David Schleef Date: 2001-11-18 02:52:45 +0000 update debian/changelog commit 2c8ea61eb6a8ff9ff8bc596432814dc0787d2861 Author: David Schleef Date: 2001-11-07 23:20:47 +0000 merge NMU from Branden Robinson debian/changelog debian/control debian/libcomedi0.postinst debian/libcomedi0.postrm debian/libcomedi0.shlibs commit b1886b0378de91fa77507dd3e0ab128025d933eb Author: David Schleef Date: 2001-10-24 22:25:51 +0000 Removed comedi_poll(), since it was moved to comedilib demo/poll.c commit 6069b4d60d9985377c9d58f0b4113b78b1259a02 Author: David Schleef Date: 2001-10-24 22:24:28 +0000 Fixed warning by adding header lib/cmd.c commit e380ccedf84f76e3ee93d8e1f6e674d770c9fe74 Author: David Schleef Date: 2001-10-24 22:23:59 +0000 Added SONAME_SUFFIX Config lib/Makefile commit 25a50c0ea6951a3599eace12d96a820f2a2c7b9f Author: David Schleef Date: 2001-10-18 09:19:12 +0000 *** empty log message *** comedi_calibrate/results/at-mio-16xe-50 commit c52bd772ebb5fff5772fcd941069160a43d068a0 Author: David Schleef Date: 2001-10-18 09:16:03 +0000 added at-mio-16xe-50 comedi_calibrate/ni.c commit a848999fa5a1e779e700573977ab745dca82903c Author: David Schleef Date: 2001-10-16 08:19:29 +0000 Split up install target Makefile commit b8f70469bdeb3478860f24968c50f8e6342523eb Author: David Schleef Date: 2001-10-12 00:01:02 +0000 Updated standards version debian/control commit 1e6eb3b89235120194ff05df15393b691f88c6ed Author: David Schleef Date: 2001-10-11 23:58:01 +0000 remove file causing lintian problems debian/ex.doc-base.package commit 8396894edee20d9bc8e2fb38528498ef72a8aaed Author: David Schleef Date: 2001-10-10 22:59:19 +0000 update status of 16e-2 comedi_calibrate/ni.c commit b50987ddadd65495313679532f93cfe2f2294c88 Author: David Schleef Date: 2001-10-10 22:55:17 +0000 from ds comedi_calibrate/results/at-mio-16e-2 commit faeb129e9169af508b9cae1eeb8afabeaeacd001 Author: David Schleef Date: 2001-10-10 22:34:57 +0000 updated comedi_calibrate/results/DAQCard-ai-16xe-50 commit c8c5cd6e9e9b7d7feef6ea34eba665d45c5a794e Author: David Schleef Date: 2001-10-10 22:08:23 +0000 added comedi_calibrate/results/DAQCard-ai-16xe-50 commit b369fac84c2128b0dabb3145ee6e7a1b807e0072 Author: David Schleef Date: 2001-10-10 22:07:53 +0000 Cleanups, change log level for many operations, added info for some ni boards comedi_calibrate/calib.h comedi_calibrate/comedi_calibrate.c comedi_calibrate/ni.c commit f3681b41fa10c58e9fe4eff2963c4dcb8dd0d11c Author: David Schleef Date: 2001-10-09 23:45:16 +0000 Split up comedi_calibrate.c, additional hacking comedi_calibrate/Makefile comedi_calibrate/calib.h comedi_calibrate/comedi_calibrate.c comedi_calibrate/ni.c commit 909b8450301462d25f7cd98c902a830de34cc87d Author: David Schleef Date: 2001-10-09 22:14:35 +0000 more hacking. check-in before splitting into separate files comedi_calibrate/comedi_calibrate.c commit a1c6910d49962629ae71775e2656472616d6745f Author: David Schleef Date: 2001-10-09 19:35:49 +0000 new code calibrates daqcard comedi_calibrate/comedi_calibrate.c commit 997237115b708d8f063df4be43e3805f9252607c Author: David Schleef Date: 2001-10-08 22:49:45 +0000 Made observable channels into objects (sort of) comedi_calibrate/comedi_calibrate.c commit c7fd322e1fdc6629f350d7fdeed85898fe8d8526 Author: David Schleef Date: 2001-10-08 00:28:02 +0000 Hides more stuff behind verbose flag. Less default info for unknown boards. New number printing mant(err)e+exp format comedi_calibrate/comedi_calibrate.c commit 67f2ed4254be330c8d7bbaddf2dd17458c736ac1 Author: David Schleef Date: 2001-10-04 23:44:08 +0000 Change all the file headers to LGPL lib/buffer.c lib/cmd.c lib/comedi.c lib/data.c lib/dio.c lib/error.c lib/filler.c lib/get.c lib/ioctl.c lib/libinternal.h lib/range.c lib/sv.c lib/timed.c lib/timer.c commit 2e5c484b245a43d5cf8546ae53d8b025fac2308d Author: David Schleef Date: 2001-10-04 23:33:14 +0000 added function to convert multiple samples to/from phys units lib/range.c commit 10a82351844afdafe31a0d5d6630c1fd001816a1 Author: David Schleef Date: 2001-10-04 22:24:01 +0000 More cleaning doc/Makefile commit 726a857a0ff0251cebcad81e91be13297bd4045f Author: David Schleef Date: 2001-10-04 20:35:04 +0000 cleaned up some of the document making doc/Makefile commit d8b81aaea514ecfa3985c0803cad618abfed4c71 Author: David Schleef Date: 2001-10-04 20:17:55 +0000 added testing/results/Advantech_PCL-812PG commit b76621f0485f43cf319d41d4ddd494f1c8374b88 Author: David Schleef Date: 2001-10-04 20:12:04 +0000 removed mode0_test from list of standard tests testing/main.c commit c8af5fcdafd3a78a81d54d47ae44b90936aa3ba6 Author: David Schleef Date: 2001-10-04 20:10:55 +0000 Added 6024E etc/pcmcia/comedi.conf commit 380f2fc1eb2368c19f9573ad1a2e0a23505b7ac7 Author: David Schleef Date: 2001-10-04 20:10:36 +0000 Additional typing doc/comedilib.sgml commit a6f0492b24e5a6790fecf3ae67ed254561ff6ed2 Author: Frank Mori Hess Date: 2001-08-31 23:19:52 +0000 fixed bug that I did that was noted by allan willcox demo/ao_waveform.c commit 3ed20f03ddc4205cde32a26ad263e45a9eb2a7de Author: David Schleef Date: 2001-08-28 23:50:37 +0000 Fix to fast_1chan, so it supports TRIG_INT for analog output. lib/cmd.c commit ea27e982357c76a8696fbff24857c64ed54a7ff6 Author: Frank Mori Hess Date: 2001-08-24 19:08:55 +0000 modified to work with TRIG_INT, made it use the -F command line option to set update frequency demo/ao_waveform.c commit b00e1eb5bd022c5600ab782d21439c4a3853db97 Author: Frank Mori Hess Date: 2001-08-24 19:08:06 +0000 copied over from comedi, for INSN_INTTRIG support. include/comedi.h commit e3704ff4a97fc99ec68d1f4b1e28574b5e820c7d Author: David Schleef Date: 2001-08-19 01:32:30 +0000 Additional verbage for extended triggering doc/comedilib.sgml commit 83767a6b853ed025205b5d7c9021d9ef67a7abef Author: David Schleef Date: 2001-08-19 01:31:26 +0000 locale settings need to be #ifdef'd comedi_config/comedi_config.c commit baa125de2cb6091d4c131330771eb635b7a2f6a9 Author: David Schleef Date: 2001-08-19 01:30:06 +0000 Oops. libintl.h needs to be #ifdef'd lib/libinternal.h commit c5acd7cc43db6a08ae364fd9f9bc05c0455c4859 Author: David Schleef Date: 2001-08-19 01:27:33 +0000 gettextization of error messages lib/error.c lib/libinternal.h commit 6996d2db6efd3d21e61883dbe73acefe18e25b14 Author: David Schleef Date: 2001-08-19 01:27:16 +0000 Random message change lib/filler.c commit 6b3977b50823dfb7eacb10534f82a393b51fc6d0 Author: David Schleef Date: 2001-08-19 01:25:04 +0000 Separated soname into separate definition lib/Makefile commit 0ed20b06aa241339f733419af1dc3efb2d2afb9c Author: David Schleef Date: 2001-08-19 01:24:23 +0000 target for gettext message creation doc/Makefile commit 8b812d424c13e8950911a45f6aeb0b64192aa2e6 Author: David Schleef Date: 2001-08-19 01:22:43 +0000 gettext()ized comedi_config/comedi_config.c commit 50db83bac0f7929bd2f98602d81da15217b49cb8 Author: David Schleef Date: 2001-08-19 01:22:17 +0000 Reworked major portions. Much more portable. comedi_calibrate/comedi_calibrate.c commit 133dc7582989d38c94504b5ac4dc2f2b38d51c9f Author: David Schleef Date: 2001-08-19 01:21:41 +0000 Added -DI18N option Config commit cd216fd6fd813403d0f25169cbc8baaeb7d6e910 Author: David Schleef Date: 2001-08-19 01:19:50 +0000 Eine .po Datei auf deutsch doc/po/de.po commit 14695f8c96fbb7d449f9ef5b6a92a219a8407169 Author: David Schleef Date: 2001-08-01 12:07:05 +0000 Enable dithering. Fix wrong expectation of return value from do_insn() comedi_calibrate/comedi_calibrate.c commit 8b5cd228fa67a718e961e1eb5b73fb2b6549694c Author: David Schleef Date: 2001-07-30 20:40:26 +0000 Added long getopts and added help(), 'cuz I always forget how to use it testing/main.c commit 4241d30c5fa6f43cd36145cbe8d4bbef69b0e9b0 Author: David Schleef Date: 2001-07-30 20:39:46 +0000 Added lots about configuration instructions doc/comedilib.sgml commit 9e95da3932dc13e1986d916bd5f74db888c1f0d8 Author: David Schleef Date: 2001-07-30 20:39:19 +0000 Make it quieter etc/rel_comedilib commit 3298f1fcc5efc1b2ecb9fd3dbf39465bea1db449 Author: David Schleef Date: 2001-07-30 20:38:54 +0000 Fix includes demo/cmd.c commit f7261b85769234367f5a150e416b7bed2af20421 Author: David Schleef Date: 2001-07-30 20:38:17 +0000 Change email address, add Comedi version and device name comedi_calibrate/comedi_calibrate.c commit f35979e90f492c1cd4e911afc618d9b6707264f3 Author: David Schleef Date: 2001-07-30 20:37:42 +0000 Fix typo README comedi_config/comedi_config.c commit 58b905a8c3b24746c12d32d18a9afbe6f4cf188c Author: Frank Mori Hess Date: 2001-07-25 15:53:57 +0000 made insn demo take 10 samples again as it originally did demo/insn.c commit 22c91e5912f02935c1fc328a394a323de12e5dd1 Author: David Schleef Date: 2001-07-17 20:10:42 +0000 Generate $Id$ comedi_calibrate/comedi_calibrate.c commit ac1786cc522abaa27cb30c94e615727dfea9a601 Author: David Schleef Date: 2001-07-16 02:02:56 +0000 added changelog. Changelog commit 646587b1ea4cd8773223393b984367ec50be9156 Author: David Schleef Date: 2001-07-16 00:05:36 +0000 It doesn't make sense to keep regenerating these in CVS. They are generated in the release script now. doc/comedilib-1.html doc/comedilib-2.html doc/comedilib-3.html doc/comedilib-4.html doc/comedilib-5.html doc/comedilib-6.html doc/comedilib.html doc/comedilib.txt commit 76e6cf0404ad7eaeba8cbbc67e04c183fab83a65 Author: David Schleef Date: 2001-07-16 00:04:06 +0000 release script etc/rel_comedilib commit 40f9847e795dd72e466047d8f4a469f00fadd723 Author: David Schleef Date: 2001-07-15 23:58:49 +0000 Simple makefile, 'cause I can never remember the correct commands doc/Makefile commit c24b4234558162c118a346b8aeb176faae3d7096 Author: David Schleef Date: 2001-07-15 23:58:14 +0000 Regenerated docs doc/comedilib-1.html doc/comedilib-2.html doc/comedilib-3.html doc/comedilib-4.html doc/comedilib-5.html doc/comedilib-6.html doc/comedilib.html doc/comedilib.txt commit 6e9354dc5d54e42ea4f4607809e2151fa919a0a4 Author: David Schleef Date: 2001-07-15 23:52:13 +0000 Add a few comments about recent changes in demos demo/README commit 4d191e35f7d65d6891541deebb91fbcecaee6153 Author: David Schleef Date: 2001-07-15 23:25:04 +0000 Don't use debhelper debian/docs commit b5ddf058a7b0f8f18f0c013f3d047716e4cc02db Author: David Schleef Date: 2001-07-15 23:24:18 +0000 Use ../Config comedi_calibrate/Makefile comedi_config/Makefile commit 59deca7e484bff6992000e4dc73aa036171c4b31 Author: David Schleef Date: 2001-07-15 23:24:00 +0000 Use ../Config. Fix 'make test'. testing/Makefile commit 4c155e99a10e550ab4f44990f60ec254f4939ea6 Author: David Schleef Date: 2001-07-15 23:15:55 +0000 Random todo checkin todo commit 5671f6d9d06faacb21674ddeaf60b89dd42b06c7 Author: David Schleef Date: 2001-07-15 23:15:29 +0000 Added user-editable Config file. Add support for $(PREFIX). Config Makefile commit f4f16b883dd7858dfe0a638d63aa46417105df2a Author: David Schleef Date: 2001-07-15 23:14:09 +0000 Get CFLAGS from ../Config demo/Makefile lib/Makefile commit cad8e94b8b5cd193dd19719c2411a6636c46599b Author: David Schleef Date: 2001-07-15 23:13:29 +0000 remove suidregister debian/rules commit 189f5a8e61eeaaa625334b3980327ad2987cbd29 Author: David Schleef Date: 2001-07-15 23:13:09 +0000 new version version commit 2f3b8a855189fc6e29417dfdf0847440373a73a9 Author: David Schleef Date: 2001-07-15 23:12:40 +0000 Getting ready to release a new version debian/changelog commit a6a0495a714173be7ba14bf44b543c165ac3fe21 Author: David Schleef Date: 2001-07-15 23:11:36 +0000 Random change README commit eceb3bccf84fa86738184dfed9e1ed3036f4f00a Author: David Schleef Date: 2001-07-15 22:47:58 +0000 Make stdout unbuffered, so that if stderr==stdout, lines match up. testing/main.c commit b1aea5d0779cdd214b3b3ced44cf7d9f78d96ba1 Author: David Schleef Date: 2001-07-15 22:47:14 +0000 Changed prototype of comedi_get_cmd_generic_timed testing/cmd_1.c commit c9b062db155382ccd0e7364c9d2524f27c562e7b Author: David Schleef Date: 2001-07-15 22:46:37 +0000 Doesn't need to be static. Added test target testing/Makefile commit beb18635c4a8af203c2a649a94c220a72fe11b45 Author: David Schleef Date: 2001-07-15 22:46:02 +0000 Fix comedi_get_cmd_* so that commands are only generated once. More error messages. lib/buffer.c lib/cmd.c lib/comedi.c lib/comedi_errno.h lib/error.c lib/libinternal.h commit 7973a0f2adcff62c0819c0bbf6ac8f3464e27e0c Author: David Schleef Date: 2001-07-15 22:39:54 +0000 Change prototype of comedi_get_cmd_generic_timed demo/cmd.c demo/mmap.c include/comedilib.h testing/cmd_2.c testing/cmd_3.c testing/inttrig.c testing/mmap.c testing/select.c commit db0d0feba8199f79b42913f20d360d68a259135f Author: David Schleef Date: 2001-07-15 19:58:15 +0000 Needs string.h, not others demo/sender.c commit 98ead7a4f903d966a54b80320a14427ac230e8bd Author: David Schleef Date: 2001-07-15 19:57:32 +0000 Major hacking, just like cmd.c demo/mmap.c commit 8139bc355875cceb5be6c181eb65222979e76bef Author: David Schleef Date: 2001-07-15 19:57:08 +0000 Replace demo/cmd.c commit a00960e0086ba9c6123ea8a9def31ccc45f0cd83 Author: David Schleef Date: 2001-07-15 19:56:31 +0000 Remove commented stuff demo/ao_waveform.c commit b668811b9c72404cb9400ca58d2ea3f8f174500e Author: David Schleef Date: 2001-07-14 00:53:30 +0000 Changed main.c to common.c demo/Makefile demo/README demo/cmd.c demo/common.c commit 31b3e7ed7fc2b63a99537a85dfac3444eaf2fa03 Author: David Schleef Date: 2001-07-14 00:50:52 +0000 Changed the name of verbose_flag; Added a few more flags in main.c demo/Makefile demo/README demo/antialias.c demo/examples.h demo/inp.c demo/insn.c demo/ledclock.c demo/main.c demo/mmap.c demo/outp.c demo/poll.c demo/receiver.c demo/select.c demo/sigio.c demo/sv.c commit 68e8bf7b0da09b44ae8b5984adf85370116ccdaa Author: David Schleef Date: 2001-07-14 00:50:15 +0000 Major fixes and added inline documentation. It's actually somewhat decent now. demo/cmd.c commit 494d76f823c69f72d72c00a1f2743a4484e669cd Author: David Schleef Date: 2001-07-14 00:42:51 +0000 Added a bit of __comedi_errno initialization lib/comedi.c commit 71373765bbe9a56da9497e310a5fb458503aaaef Author: Frank Mori Hess Date: 2001-07-12 21:41:21 +0000 removed bit about chanlist error in cmdtest, since all bad chanlist errors should return same value, so I should change my drivers doc/comedilib.sgml commit f090f06b0af810b127b03ff186dbf4ef8b04fd58 Author: Frank Mori Hess Date: 2001-07-12 20:34:05 +0000 added a burst-mode-like command to comedi_get_cmd_generic_timed() lib/cmd.c commit 1d66cf1d595eb95eebf428bfa77202f7fa1d7af7 Author: Frank Mori Hess Date: 2001-07-12 20:28:43 +0000 more comedi_cmd related documentation doc/comedilib.sgml commit 5d2fa2394d1a48691a319253856e2f24f30a463e Author: Frank Mori Hess Date: 2001-07-10 23:12:16 +0000 fix for compile warning with range.c lib/libinternal.h commit 8efb15052d5431214f64b9bac21457f7f352ece0 Author: David Schleef Date: 2001-07-10 22:58:04 +0000 Updates from (someone), plus corrections and additions by ds. demo/README commit 49e3830ddba6fe6f92ea5ad37e99f803340add33 Author: David Schleef Date: 2001-07-10 22:55:32 +0000 Added comments demo/ledclock.c commit d1dd55c93b17e873acda8b6c9cf976aa9628a082 Author: David Schleef Date: 2001-07-10 22:33:05 +0000 clean python and perl, even if not built Makefile commit b830e61d3f85a416df8b58edc6158f64b2c5230f Author: David Schleef Date: 2001-07-10 22:31:16 +0000 Added debug_ptr(). Fixed do_test_for_cmd() lib/filler.c commit a21713730afc6b275688e53e3f53a4c68fbf60f0 Author: David Schleef Date: 2001-07-10 22:30:27 +0000 Remove sched.h, because we don't use it and uclibc doesn't have it demo/ledclock.c demo/receiver.c commit f8cab16c4d5faae69d37d5916d1ff75b48852784 Author: David Schleef Date: 2001-07-10 22:28:06 +0000 Perl demos moved from perl/ directory demo/perl/info.perl demo/perl/inp.pl commit 0dd63c60de29b695ff12f8eaee7ab31aa37fbdd1 Author: David Schleef Date: 2001-07-10 22:26:36 +0000 *** empty log message *** debian/conffiles commit 0afe6fffeb02b1c74efdbe03424c4713b9760c04 Author: David Schleef Date: 2001-07-10 22:26:15 +0000 Copied the etc/ directory from Comedi etc/conf.modules etc/das1600.conf etc/dt282x.conf etc/pcmcia/comedi etc/pcmcia/comedi.conf etc/pcmcia/comedi.opts commit 915c97e04202d898efd4cd0fa343367b2f01fa6d Author: David Schleef Date: 2001-07-10 22:25:26 +0000 A text version, for all the crazies doc/comedilib.txt commit 0f8fd728ae4b788169a98dc56421ce572187c8d5 Author: David Schleef Date: 2001-07-10 22:23:29 +0000 Remove comedilib_reference, rebuild comedilib*html doc/comedilib-4.html doc/comedilib-5.html doc/comedilib-6.html doc/comedilib.html doc/comedilib_reference-1.html doc/comedilib_reference-2.html doc/comedilib_reference-3.html doc/comedilib_reference-4.html doc/comedilib_reference.html doc/comedilib_reference.sgml commit 1f1293e649fd3ce40ac096eeb2284175cd115613 Author: David Schleef Date: 2001-07-10 22:21:12 +0000 Fix getopt segfaulting comedi_config/comedi_config.c commit 50cd1f83e8c45d76fad81d6a764dec7e097d76e6 Author: David Schleef Date: 2001-07-09 20:12:07 +0000 Changed from siginfo handler to signal. demo/sigio.c commit 59568d202909a4a83a11c678997d31d15e7b6a03 Author: David Schleef Date: 2001-07-09 02:41:18 +0000 Moved chatter behind if(verbose) testing/cmd_1.c testing/mmap.c commit 7e649096d2ddfbd6c32bc470298b86d55cec669a Author: Frank Mori Hess Date: 2001-07-06 18:11:48 +0000 added CR_PACK description doc/comedilib.sgml commit a463bd34cb8666f73d93879ef2d7a2a0523d3301 Author: David Schleef Date: 2001-07-05 05:21:44 +0000 Fixed getuid()/geteuid() problem causing modprobe post-install scripts to fail. Updated usage information. comedi_config/comedi_config.c commit abd10aa21424b19b3e7421d5c8b797b9d5b24bd0 Author: Frank Mori Hess Date: 2001-07-02 16:42:25 +0000 Added a little bit more to command section. doc/comedilib.sgml commit 55b4890f1b381c3a6b6eeb31ad054406b4b05891 Author: David Schleef Date: 2001-07-01 11:59:06 +0000 More work on cmd trig sources doc/comedilib.sgml commit 163841a772e2fd085d3521d2402537deb7e0d63a Author: Frank Mori Hess Date: 2001-07-01 01:02:36 +0000 added a bit to the command section, merged comedilib_reference into this file. Still have to document comedi_cmd struct and related functions. doc/comedilib.sgml commit 12cffb219c1a186587bb29d8b06ea5c8932298d2 Author: David Schleef Date: 2001-06-27 22:21:45 +0000 Added install targets for perl, python, debian Makefile commit ac0985e4539a6a3a4186c5c94f0cde17fb686015 Author: David Schleef Date: 2001-06-27 22:19:56 +0000 Changed install target to install_debian debian/rules commit 77540a363b72a00ffc32a6b354e1fdf7b97462be Author: David Schleef Date: 2001-06-27 22:18:47 +0000 Uses deprecated functions, so added _COMEDILIB_DEPRECATED testing/mode0_read.c commit a4fb3b20d986063d432719e7f643da30fe84fc94 Author: David Schleef Date: 2001-06-27 22:18:16 +0000 Changed from siginfo handler to simple signal handler testing/mmap.c commit 93ec934880d47d4fea6786cb79b8f9bbb395e8bb Author: David Schleef Date: 2001-06-27 22:17:38 +0000 Added #! line perl/Comedi.pm commit cf7397be842b4ca4215ce68ded1b9874983dc58b Author: David Schleef Date: 2001-06-27 22:17:17 +0000 Added _COMEDILIB_DEPRECATED, 'cuz we still support it internally lib/libinternal.h commit 95e2ff75f510d66fd2287ac7a0b125fe1b353b6b Author: David Schleef Date: 2001-06-27 22:16:42 +0000 Change return value of comedi_close to int lib/comedi.c commit 405f044ad9e92702ac53762b13dda2d03adb2cb2 Author: David Schleef Date: 2001-06-27 22:16:08 +0000 Cleanup and rearrangement include/comedilib.h commit 063c78f71046e2923711f33ae3db90d4249eb9d8 Author: David Schleef Date: 2001-06-27 22:15:31 +0000 Fix bug about the return value of comedi_get_range() doc/tutorial commit dfcd45f95c302827a7e37a601417fa7282b61075 Author: David Schleef Date: 2001-06-27 22:14:20 +0000 re-autogenerated doc/comedilib-1.html doc/comedilib-2.html doc/comedilib-3.html doc/comedilib-4.html doc/comedilib-5.html doc/comedilib.html doc/comedilib_reference-1.html doc/comedilib_reference.html commit 291d71d323d73c714afd91f627e44ff4b140980e Author: David Schleef Date: 2001-06-27 22:12:32 +0000 Don't need fcntl(,F_SETSIG,) demo/ledclock.c commit d9e3023ff0fae3fe9d726207a70d6a1a1f5dda68 Author: David Schleef Date: 2001-06-27 22:11:59 +0000 Fix previous bugus check-ins. demo/cmd.c commit 5ed4fb90f33391579ec1a17a83ca827ce1bcfdde Author: David Schleef Date: 2001-06-27 22:11:02 +0000 Added device nodes debian/libcomedi0.postinst commit b32ef02cfdcc347b803823923ed7748c2b4d5100 Author: David Schleef Date: 2001-06-27 22:10:33 +0000 change INFINITY to HUGE_VAL comedi_calibrate/comedi_calibrate.c commit 2e136dd1c3a61bd241981899c5cf162015a3b565 Author: David Schleef Date: 2001-06-27 22:09:56 +0000 *** empty log message *** todo version commit e252726146911224d653329417b7a6c60ad3fe47 Author: Frank Mori Hess Date: 2001-06-27 19:51:11 +0000 made ao_waveform use same parse_options() as other demos demo/ao_waveform.c commit 172846db87db86de1dc96f45a50418d715712e45 Author: Frank Mori Hess Date: 2001-06-27 19:42:19 +0000 update from wuttke joachim demo/README commit 809e0436aa3f71dbb9d449a7b9c7560e44e2da73 Author: Frank Mori Hess Date: 2001-06-21 22:26:28 +0000 made it refuse to resize buffer if we are removing device. Mostly change is whitespace, just added an if block. comedi_config/comedi_config.c commit 36478ed855d34549a6d1aad37276446a66563574 Author: Frank Mori Hess Date: 2001-06-20 20:09:53 +0000 noted a Makefile problem todo commit 76fcc1bfb92356921c0c7b497c74b44b9be90b25 Author: David Schleef Date: 2001-06-14 09:13:08 +0000 Some work on docs doc/comedilib.sgml doc/comedilib_reference.sgml commit 3c4bca23486436147c2d5dd9622f91374c226700 Author: David Schleef Date: 2001-06-13 10:22:38 +0000 rewrote README commit e93771f21993aa1c5266e52d473972c123c96c01 Author: David Schleef Date: 2001-06-12 10:41:09 +0000 Added realtime command line option. Fixed tests to use realtime flag. Added internal trigger test. testing/cmd_1.c testing/cmd_2.c testing/comedi_test.h testing/main.c testing/mmap.c testing/select.c commit 61111bfd439d5eb34e29d3bf6a6dbdf54b8e983b Author: David Schleef Date: 2001-06-12 10:40:18 +0000 Fix realtime flag. testing/cmd_3.c commit 8e530395fe3011db6a0e150b4885dacf5edadea3 Author: David Schleef Date: 2001-06-12 10:39:27 +0000 Test for internal triggering. testing/inttrig.c commit 7ea936090e2851ba6e0733a89b86a7497b6b9571 Author: David Schleef Date: 2001-06-12 10:38:50 +0000 Added insn ioctl support. Added insn ioctl probing. Renamed previously misnamed insnlist probing. Rewrote comedi_data_read_n() lib/comedi.c lib/data.c lib/dio.c lib/filler.c lib/libinternal.h commit e9acd7e3131af5b3eceea341873528fd5a86bd8a Author: David Schleef Date: 2001-06-12 10:37:08 +0000 general hacking, convert comedi_trigger to comedi_data_read_n comedi_calibrate/comedi_calibrate.c commit 0bd291780ced33cc6b3cc685f96bcd802b7aff33 Author: David Schleef Date: 2001-06-12 10:36:25 +0000 fixes for cross-compilation Makefile lib/Makefile testing/Makefile commit 3ca99fff278bc2acf7fe4242b498e2e2813e29c0 Author: Frank Mori Hess Date: 2001-06-04 00:37:21 +0000 updated reference to default buffer size from 128k -> 16k man/comedi_config.8 commit af7b904d4ca4fc7858970176053507e9092a9ece Author: David Schleef Date: 2001-05-28 04:05:03 +0000 Add targets for python wrapper (disabled by default) Makefile commit 433f3c1bd7cd5fe6cff3a8daaaa85a86e3b2a7ab Author: David Schleef Date: 2001-05-28 04:00:34 +0000 hmmm... should compile things before I check them in. python/compy.c python/sample.py commit 9ff8e2fa97a77e6bc01d7f53d20edcb7b9683db3 Author: David Schleef Date: 2001-05-28 03:57:32 +0000 Fix things so that they actually work python/Makefile.pre.in python/Setup.in python/compy.c python/sample.py commit 69b9002a22aa3915e1221e7bd7667c75d0d8bd47 Author: Frank Mori Hess Date: 2001-05-28 03:35:34 +0000 fixed bug lib/cmd.c commit 3fcd155c48d3e5fddc73bd0c8f835efe25e54ad8 Author: David Schleef Date: 2001-05-28 02:49:11 +0000 a python wrapper python/Makefile.pre.in python/Setup.in python/compy.c python/sample.py commit 92c625b1fcd85f86739e70252fed9f51bbf70959 Author: David Schleef Date: 2001-05-28 02:39:43 +0000 copied from comedi include/comedi.h commit 698938d995d69ed62244aa01523fe8617003dbb0 Author: David Schleef Date: 2001-05-28 02:39:00 +0000 additional tests, fixes, move some functions to ../lib testing/Makefile testing/bufconfig.c testing/cmd_1.c testing/cmd_2.c testing/cmd_3.c testing/comedi_test.h testing/insn_read.c testing/insn_read_time.c testing/main.c testing/mmap.c testing/select.c commit 229b4cd58cdf6fda2283dacef09227eea2037bb1 Author: David Schleef Date: 2001-05-28 02:38:09 +0000 staging area for moving functions from here to ../lib testing/lib.c commit 8f5391c3ce4b59b22716ea6d241b59ffba423e67 Author: David Schleef Date: 2001-05-28 02:36:41 +0000 added HAVE_COMEDI_POLL lib/libinternal.h commit 44b5028d606c7cc3fce048481152403e024b5ed3 Author: David Schleef Date: 2001-05-28 02:36:20 +0000 added cmd.c lib/Makefile commit 64b3584ff79239eeaba8e3126b7b664dd23b6181 Author: David Schleef Date: 2001-05-28 02:36:03 +0000 added cmd related functions lib/cmd.c commit 7616ab0880be1df6d046dd1a62609168181ea8a1 Author: David Schleef Date: 2001-05-28 02:35:08 +0000 added get_subdevice_flags() lib/get.c commit fa434c140ce7b04076408118e8ea5fca3f4ebe23 Author: David Schleef Date: 2001-05-28 02:34:32 +0000 added get_cmd_src_mask, get_cmd_generic_timed, comedi_poll() include/comedilib.h commit d4b04cd828acdb6c5ca92706088277b50cc7aa5b Author: David Schleef Date: 2001-05-28 02:33:03 +0000 added poll example demo/Makefile demo/poll.c commit ad4ee57f185a70199f0718e4c80b96edd5fa510c Author: David Schleef Date: 2001-05-28 02:31:40 +0000 more results testing/results/Advantech_PCI-1710 testing/results/Advantech_PCI-1711 testing/results/Advantech_PCI-1720 testing/results/Advantech_PCI-1731 testing/results/DAQCard-6062E testing/results/DAQCard-ai-16xe-50 commit adaca483a39bdf1b6669c9a3044cf01026dc204c Author: David Schleef Date: 2001-05-28 02:28:55 +0000 Changed to LGPL, because that's what it was supposed to be. COPYING commit ef8394e66cabcfee3912f65e9f57e3c9ea5462c3 Author: David Schleef Date: 2001-05-24 18:22:26 +0000 changed N_CALDACS to 32 comedi_calibrate/comedi_calibrate.c commit 3e2756029e828ed6d93b15e40c1d48fbaa8c7f93 Author: Frank Mori Hess Date: 2001-05-14 00:06:37 +0000 removed outdated lseek stuff demo/ao_waveform.c commit 7263bf6d2c9ec0b73cc943a432e73f9049aa4797 Author: Frank Mori Hess Date: 2001-05-14 00:04:08 +0000 explicitly initialized value, subdevice, channel, aref and range in main.c demo/cmd.c demo/main.c demo/mmap.c commit 57f480129098523ce881c63ef126858991a33ca5 Author: Tim Ousley Date: 2001-05-04 16:41:49 +0000 changed all GPCTR names to GPCT include/comedi.h commit 193b1b571c4dbb33e165fc37920edc08b97c8b4d Author: Frank Mori Hess Date: 2001-05-02 15:16:03 +0000 added checks for malloc failure comedi_calibrate/comedi_calibrate.c commit 798386252d28ed125ae8e2bbd4345910f5310756 Author: Frank Mori Hess Date: 2001-05-02 00:08:28 +0000 a small step towards standardized comedi error codes lib/comedi_errno.h lib/error.c commit b96bdf794d333310a9ec7b62a70c9c12cea52787 Author: Frank Mori Hess Date: 2001-05-01 20:51:09 +0000 added copy of GPL COPYING commit 443af26b35279894cc20aa3426dfe4a2a0ffda08 Author: David Schleef Date: 2001-04-28 16:14:59 +0000 Fixed test for debian package build Makefile commit 0fb94f62e96dc08f14c666ed53e36b0a767fb334 Author: Frank Mori Hess Date: 2001-04-27 20:33:36 +0000 put back comedi_get_max_buffer_size lib/buffer.c commit 3465d320ac945b0996b05f5504a5d5896d11d097 Author: Tim Ousley Date: 2001-04-27 19:06:22 +0000 added #define for GPCTR_GET_INT_CLK_FRQ include/comedi.h commit 3436ff0452d869d88c3236d186ce983e7c3c4ef9 Author: Frank Mori Hess Date: 2001-04-24 16:37:51 +0000 removed buffer config functions that I accidentally duplicated, made names of alpha functions follow conventions of older functions include/comedilib.h lib/buffer.c lib/get.c commit 09acff74e9e0a21deee5889b032e63a4ba8e9b73 Author: Tim Ousley Date: 2001-04-20 19:47:54 +0000 added GPCTR constants. include/comedi.h commit d99990a6662f8b75137f292237b89520a7f282f1 Author: Frank Mori Hess Date: 2001-04-08 22:28:25 +0000 added some comments describing alpha functions include/comedilib.h commit 5efacde9a319ba2bd70adb9acf7b2848f4434a17 Author: Frank Mori Hess Date: 2001-04-08 18:03:05 +0000 added comedi_buf_offset function that returns buf_user_ptr include/comedilib.h commit dc518f11e762b16e9483d7aca662ab447c412378 Author: Frank Mori Hess Date: 2001-04-08 18:02:20 +0000 forgot to add buffer.c file containing definitions for new functions lib/buffer.c commit fc62ecb25e236a898790860f1faf75b70b97fbc2 Author: Frank Mori Hess Date: 2001-04-06 23:12:42 +0000 added buffer info ioctl support and some alpha buffer related functions include/comedi.h include/comedilib.h lib/Makefile lib/ioctl.c lib/libinternal.h commit 7e7985ead92c2a93b35163a6f06a3d70fb6125dd Author: David Schleef Date: 2001-03-13 09:35:07 +0000 a script probably only useful to ds comedi_calibrate/split_dumps commit cbcd0f7103423f617cfd75317d204c2103692412 Author: David Schleef Date: 2001-03-13 09:34:04 +0000 make install now installs man pages to the wrong place, as per user request Makefile commit dfab33b2c5b779c34b1ba41701d749305126f68a Author: David Schleef Date: 2001-03-13 09:32:57 +0000 *** empty log message *** debian/changelog debian/control commit e51fd0b0e0d47266dafb1a2daebdeedfabdde1cc Author: David Schleef Date: 2001-03-07 05:09:19 +0000 *** empty log message *** testing/results/at-mio-16e-10 testing/results/dt2814 testing/results/pci-dio-32hs testing/results/rti800 commit 885720bf77260f8376531425c466443f72894c46 Author: David Schleef Date: 2001-03-02 06:52:57 +0000 change bufconfig version test from 0.7.56 to 0.7.57 comedi_config/comedi_config.c commit 926cac4bafd70eb9cac36e96609c2d509f11cadd Author: David Schleef Date: 2001-03-02 06:52:06 +0000 added test to make sure area is unmapped testing/mmap.c commit b3e40fea08354e24c351ce60bf2c76d1d0787bc6 Author: David Schleef Date: 2001-03-02 06:50:53 +0000 *** empty log message *** todo commit 10204606f94b522ac9bdee5ed59c7fcc239821f2 Author: David Schleef Date: 2001-03-01 22:01:15 +0000 changed bufconfig to support new bufconfig structure comedi_config/comedi_config.c commit c6093128a1b690db7a945443222e9de6af76a873 Author: David Schleef Date: 2001-03-01 21:59:01 +0000 added bufconfig test testing/Makefile testing/bufconfig.c testing/main.c commit 93c44d29a1736a51957ebed0706c6a96e8f56066 Author: David Schleef Date: 2001-03-01 21:58:37 +0000 bufconfig support lib/get.c commit e5a7e10668302f721a74496769ab7834511c5d29 Author: David Schleef Date: 2001-03-01 21:58:28 +0000 enabled use of instructions for dio_bits lib/dio.c commit a9105f1a8d3e78784fede408ee293fb39493a68d Author: David Schleef Date: 2001-03-01 21:57:33 +0000 added bufconfig support include/comedilib.h commit 01a017f5151fdb038a5629b63ba878d14baebdda Author: David Schleef Date: 2001-03-01 21:57:00 +0000 5 new demos cmd uses main.c removal of direct ioctl calls demo/Makefile demo/antialias.c demo/ao_waveform.c demo/cmd.c demo/dio.c demo/eeprom_dump.c demo/examples.h demo/info.c demo/inp.c demo/inpn.c demo/insn.c demo/ledclock.c demo/main.c demo/mmap.c demo/outp.c demo/receiver.c demo/select.c demo/sender.c demo/sigio.c demo/sv.c commit de4cf88cef92400257b5c0cdabc3f2510ac82172 Author: David Schleef Date: 2001-03-01 21:54:37 +0000 added dependency on debhelper debian/control commit e22777159bd06885c0eb9b8535f693ba1a6d14c4 Author: David Schleef Date: 2001-03-01 21:54:08 +0000 fixes for DAQCard-AI-16XE-50 and new pci-6023e better dumping support better statistics comedi_calibrate/comedi_calibrate.c commit 3db0b427e47650559263b5ca8b724a4b26ad4ee9 Author: David Schleef Date: 2001-03-01 21:52:37 +0000 horribly out of date. needs fixing BAD README commit 47b9f2d6c9a7cb0e4e648c899830af3d63e90242 Author: David Schleef Date: 2001-03-01 21:52:23 +0000 update docs INSTALL commit 2963ac3c653dfdd1e4232f778fa86bff616dc476 Author: David Schleef Date: 2001-03-01 05:10:28 +0000 interface update include/comedi.h commit d60c1f9c50265194c553e08f2bb1eb8df07c9d39 Author: Frank Mori Hess Date: 2001-02-23 17:27:33 +0000 added permission error report if not run as root, removed redundant sanity check I put in last revision comedi_config/comedi_config.c commit 32c50c353c32f6d7ff42cc807775c153cd40947d Author: Frank Mori Hess Date: 2001-02-22 21:48:40 +0000 made comedi_config no longer require a driver name when used to detach a driver comedi_config/comedi_config.c commit ff1a151ce60b11d7ac21e2649681b0d9606a35d5 Author: Frank Mori Hess Date: 2001-02-22 20:11:02 +0000 documented -r --remove option for comedi_config comedi_config/comedi_config.c man/comedi_config.8 commit c7a45f3edf42f66b09d46b7544c418084b06a005 Author: Frank Mori Hess Date: 2001-02-15 21:01:13 +0000 added some comments, including advice on how to make interrupt handler run at hard real time priority demo/cmd.c commit 8d3bd3aea944635506e117bfc6b9881e32a1731a Author: Frank Mori Hess Date: 2001-01-30 20:13:34 +0000 removed my misguided SDF_MMAPPED flag include/comedi.h commit 7fa2d20f688b4f0c078612b0531af827cd2bb28e Author: Frank Mori Hess Date: 2001-01-29 00:48:16 +0000 added SDF_MMAPPED flag include/comedi.h commit 62eda451472e19a7fa92924908663f77a56744bb Author: Frank Mori Hess Date: 2001-01-25 20:46:48 +0000 added buffer resize options to man page man/comedi_config.8 commit 0fa0f6fad5bb2dcf7f6936a7af30e2d549704a62 Author: Frank Mori Hess Date: 2001-01-25 12:34:48 +0000 fixed bug with option parsing when both read and write buffers are resized simultaneously comedi_config/comedi_config.c commit 60f5a74a1ecbb21e2ef83cb7abc4db6851679bc8 Author: Frank Mori Hess Date: 2001-01-25 01:23:42 +0000 added exit(1) on buffer resize error comedi_config/comedi_config.c commit fd7a408853d2308efe6844f9d1e2d0ea83b01253 Author: Frank Mori Hess Date: 2001-01-25 00:49:26 +0000 added --read-buffer and --write-buffer options for resizing buffers, incremented CC_VERSION to 0.7.13 comedi_config/comedi_config.c commit 935bf669daad5b40cacef8a579d5093daaa50066 Author: Frank Mori Hess Date: 2001-01-25 00:45:00 +0000 added bufconfig struct and ioctl include/comedi.h commit 1f95f177879f175a5d0c58ec2f479a468d3ab75a Author: David Schleef Date: 2001-01-23 18:26:08 +0000 added todo todo commit 8817e7ea6c7e10a70ebf23d5522192647abaea00 Author: David Schleef Date: 2001-01-23 18:24:25 +0000 don't know testing/results/PCI-MIO-something commit e2dcc74d252af57edf3b33fc16509929a1631c6b Author: David Schleef Date: 2001-01-23 18:23:44 +0000 export more of units lib/filler.c commit 9d33f2d87518c6a3087b0afb6c085b333a976a96 Author: David Schleef Date: 2001-01-23 18:23:20 +0000 memleak fix from someone lib/comedi.c commit 65ccd0d6c01f8334c57bf16d89956412f54e5d74 Author: David Schleef Date: 2001-01-23 18:22:24 +0000 bugfix demo/ao_waveform.c commit a9de6b8db3d04d183b507b868be8adf74450a8ef Author: David Schleef Date: 2001-01-23 18:22:08 +0000 spelling fix comedi_config/comedi_config.c commit 8265dded626a3430dd8e5f2d6e32fdf6b556d8e4 Author: David Schleef Date: 2001-01-23 18:21:47 +0000 added segfault testing testing/mmap.c commit 91f2dd824bd15dfb022a00783bdfe1df25a85f45 Author: David Schleef Date: 2001-01-16 22:02:51 +0000 new result testing/results/dt2814 commit ce5d4d54cebfb274bb588ac621c7b1549ad0b3d7 Author: David Schleef Date: 2001-01-16 21:56:40 +0000 new result testing/results/at-mio-16e-10 testing/results/pci-dio-32hs commit 38a7864392e9b808f1eb297991712a13c79b91e1 Author: David Schleef Date: 2000-11-30 23:13:19 +0000 version bump debian/changelog version commit 49bfad27af2fcca98ca7387231437abf56de2179 Author: David Schleef Date: 2000-11-30 22:59:39 +0000 removed testing code demo/mmap.c commit 981a9e2c22c33b5fef1dd29e21ca9c4d9770f07b Author: David Schleef Date: 2000-11-30 22:57:04 +0000 testing additions testing/Makefile testing/README testing/cmd_1.c testing/cmd_2.c testing/cmd_3.c testing/comedi_test.h testing/insn_read_time.c testing/main.c testing/results/DAQCard-ai-16xe-50 testing/select.c commit 46247c4783b3084325a18f9977c162c1b9f3b7ac Author: David Schleef Date: 2000-11-30 01:29:10 +0000 random cleanup demo/tut2.c commit 7cde371fd4ce2d3dad7dc9721f9e22463ea573aa Author: David Schleef Date: 2000-11-25 04:19:59 +0000 mmap demo and testing demo/mmap.c testing/mmap.c commit 5012a6d5c5a1aece53623370718dc082c3a95b26 Author: David Schleef Date: 2000-11-25 04:19:35 +0000 *** empty log message *** demo/Makefile testing/Makefile testing/main.c commit a01cd721f6ebc4b3c4231bc9ec2860247f3121c9 Author: David Schleef Date: 2000-11-07 20:14:44 +0000 fixed errno sign problem comedi_config/comedi_config.c commit 1fb67651b6256d507870a656bd6d9be786d6d2f8 Author: David Schleef Date: 2000-10-19 06:57:09 +0000 added dio.c demo/Makefile demo/dio.c commit 307527f46bd65b0ba0a7cb145f1894c23246beb7 Author: David Schleef Date: 2000-10-19 06:31:29 +0000 readded tut2 demo/Makefile commit b2e74ef516466adbf318a2586b90aa5896d1b013 Author: David Schleef Date: 2000-10-19 06:30:39 +0000 added additional warning flags comedi_calibrate/Makefile comedi_config/Makefile lib/Makefile testing/Makefile commit 5e6da7c2f5cac8bdac8e59cff6198d1b9e7fd75a Author: David Schleef Date: 2000-10-19 06:29:14 +0000 added header file for example common code demo/examples.h commit 79a511162dbd55a147a85d5a50bc5e105948bc83 Author: David Schleef Date: 2000-10-19 06:28:27 +0000 Cleanup of example programs demo/Makefile demo/README demo/antialias.c demo/ao_waveform.c demo/cmd.c demo/eeprom_dump.c demo/info.c demo/inp.c demo/inpn.c demo/insn.c demo/main.c demo/mode2.c demo/mode3.c demo/mode4.c demo/outp.c demo/rt/Makefile demo/rt/README demo/rt/ai.c demo/rt/it.c demo/sv.c demo/tut1.c demo/tut2.c commit 2f944c5d207f3036de549da462666967eb81b77a Author: David Schleef Date: 2000-10-15 21:33:54 +0000 added comedi_config/comedi_config.c commit d1976b7f495dcefb95f9832ca77a6bcd8fc97f07 Author: David Schleef Date: 2000-10-13 10:26:16 +0000 revert change to COMEDI_INSN ioctl lib/comedi.c commit e1bc3fd1b8a0868567cffd8c53eb00f052622bb6 Author: David Schleef Date: 2000-10-13 09:23:42 +0000 version bump version commit 2ed99855737e42a7fc406ae71761ac1473bd9bae Author: David Schleef Date: 2000-10-13 09:23:10 +0000 changed version dependency debian/libcomedi0.shlibs commit 5199a302ae4a33a6411a56236ffaaee87e4de014 Author: David Schleef Date: 2000-10-13 09:22:05 +0000 added command test testing/Makefile testing/cmd_1.c testing/main.c commit 1cd2d95031ccd7cc1dd932be15f30514453f4c21 Author: David Schleef Date: 2000-10-13 09:21:21 +0000 dio fixes lib/comedi.c lib/dio.c lib/filler.c commit 3bf08ef6d84b395d9489e56b3d99e49155085bbc Author: David Schleef Date: 2000-10-12 01:46:43 +0000 more lintian fixes debian/rules commit 59ad47f6aeff4afae56de107361aff6cff6cd88c Author: David Schleef Date: 2000-10-12 01:40:52 +0000 lintian fixes Makefile debian/dirs debian/rules commit 342941712082ce01c2b7cbb9a705940e8b0b3e0e Author: David Schleef Date: 2000-10-11 23:16:35 +0000 fix /usr/bin/comedi_config to /usr/sbin/ debian/rules commit 90f5e559b0ee76ebea7b0ef7a683711da901aef5 Author: David Schleef Date: 2000-10-11 21:16:55 +0000 version change debian/changelog version commit 2f41ad34501d021c215acfe6cc659a2fa055d642 Author: David Schleef Date: 2000-10-11 20:58:05 +0000 lintian fixes debian/changelog debian/libcomedi0.postinst commit a966c3737df0045e69fb4fd79109678887ea4d4f Author: David Schleef Date: 2000-10-11 20:52:56 +0000 regen doc/comedilib-4.html commit d419596e0ad44266e5a803a15d74090d1c16fa6b Author: David Schleef Date: 2000-10-11 20:52:13 +0000 added comedi_calibrate man page man/comedi_calibrate.8 commit 5a5aa10f3675607da67ae12cfaa545553d3423b8 Author: David Schleef Date: 2000-10-11 20:51:25 +0000 fixed wrong version comedi_config/comedi_config.c commit c74af29270787a1c7e9fdc2853c74487d8f40cd3 Author: David Schleef Date: 2000-10-10 08:41:42 +0000 random fixes comedi_calibrate/comedi_calibrate.c commit c417f2cac9f8e47cea8af41b65add8d0fef22572 Author: David Schleef Date: 2000-10-10 08:39:50 +0000 instruction support bug fix lib/dio.c lib/filler.c commit 142cff19a68675d1f61c0be526e2aef19c80b602 Author: David Schleef Date: 2000-10-10 08:38:52 +0000 move comedi_config back to /usr/sbin Makefile commit dd24c022e52db7b229cff2fe25e88071e01c0f3e Author: David Schleef Date: 2000-10-10 07:21:57 +0000 added debugging messages added support for loading extended data comedi_config/comedi_config.c commit ccc75d8ae8b8561be5a3fb4d8a51b74c1126cb49 Author: David Schleef Date: 2000-10-10 00:52:59 +0000 updated man pages man/comedi.7 man/comedi_config.8 commit 809aaa48b9d800bcf09c4c526c46c6b41d0d412f Author: David Schleef Date: 2000-10-10 00:52:10 +0000 added tests and created main testing/Makefile testing/comedi_test.h testing/info.c testing/inpn.c testing/insn_read.c testing/main.c testing/mode0_read.c testing/mode1.c testing/mode2.c commit 84eef56cd5d16846f96a8ac8e51e0a602a2db388 Author: David Schleef Date: 2000-09-06 01:03:20 +0000 README changes demo/README commit 6ea8ceeb7a3fe476aab7a7102d5464cd23e46870 Author: David Schleef Date: 2000-09-05 18:55:29 +0000 additions comedi_calibrate/comedi_calibrate.c commit 31a3da0f21463db2fe4bf93be298df613e8a19e4 Author: David Schleef Date: 2000-09-05 18:47:18 +0000 added comment demo/cmd.c commit 68a2f02a792b7a475dbe2f2a361d37a35e1be2a4 Author: David Schleef Date: 2000-09-05 18:14:24 +0000 removed demo/mode1.c commit e7a0f5f10c98a56eb31f73aa8278c523f5016383 Author: David Schleef Date: 2000-09-05 18:10:55 +0000 changes demo/cmd.c demo/insn.c demo/mode2.c commit af6e454aac756b9e1c3838ff6010769c719c588b Author: David Schleef Date: 2000-09-05 18:09:31 +0000 maintainer email change debian/changelog debian/control commit c9f298466fc774cdf5daf23e0e68872e09c9852e Author: David Schleef Date: 2000-09-03 02:22:28 +0000 lots of changes with commands and instructions lib/comedi.c lib/data.c lib/dio.c lib/filler.c lib/get.c lib/ioctl.c lib/libinternal.h lib/range.c commit f4420f799e164de9f83aecd26ee382491ca066cb Author: David Schleef Date: 2000-09-03 02:20:13 +0000 addition of several functions include/comedilib.h commit c2735332c6b81cafffea96d15c8a44ba99bb5894 Author: David Schleef Date: 2000-09-03 02:19:07 +0000 comedi.h update include/comedi.h commit 5c8326c791a1ebf0e543cd8136b4e9f781c713b7 Author: David Schleef Date: 2000-09-03 02:16:55 +0000 documentation additions and updates demo/insn.c commit 5e8a77d52b3554e6a9989c7dfd5907df28c4e713 Author: David Schleef Date: 2000-09-03 02:15:44 +0000 added lots of more information demo/info.c commit 14152fb380f32b80201fc3a3a2b2e2ff24a60b50 Author: David Schleef Date: 2000-09-03 02:15:20 +0000 added documentation demo/cmd.c commit 6ce6a6bb3a6be677611790d032e4c0c906057f11 Author: David Schleef Date: 2000-09-03 02:14:58 +0000 version update version commit f4ced5dd1783df7c6cf0332a8115bef2133ed530 Author: David Schleef Date: 2000-09-03 02:13:59 +0000 added comedilib_reference and comedilib updates doc/comedilib.sgml doc/comedilib_reference-1.html doc/comedilib_reference-2.html doc/comedilib_reference-3.html doc/comedilib_reference-4.html doc/comedilib_reference.html doc/comedilib_reference.sgml commit 0dae311a3885c2e34c2247cfdd5f22108c5292ce Author: David Schleef Date: 2000-08-09 23:34:53 +0000 fixed name to ni_atmio, ni_pcimio comedi_calibrate/comedi_calibrate.c commit a59077370249dc159a79bbdcfc30c1eed78b45da Author: David Schleef Date: 2000-08-09 21:13:53 +0000 added insn demo/Makefile commit 3e079c133f64c7fad2086525e74fb566db704568 Author: David Schleef Date: 2000-08-09 21:13:33 +0000 move html files doc/comedilib-1.html doc/comedilib-2.html doc/comedilib-3.html doc/comedilib-4.html doc/comedilib-5.html doc/comedilib-6.html doc/comedilib.html commit f9c356a840dac935a39224b169a960e965ab1c7a Author: David Schleef Date: 2000-08-09 21:11:29 +0000 insn demo demo/insn.c commit bb5cead91fce2ee3b0082af597e8e41473b5ab49 Author: David Schleef Date: 2000-08-09 21:08:17 +0000 more features demo/cmd.c commit 6c1657bcd95dbdbef9f5fe76e1408409c836217e Author: David Schleef Date: 2000-08-09 21:07:53 +0000 updates debian/dirs debian/rules commit 9d201348c2a6915931b3dd9a2f85621dd2f89186 Author: David Schleef Date: 2000-08-09 21:07:14 +0000 install man pages, comedi_config, comedi_calibrate Makefile commit c427dfb8d7f5af5d817d4c06718508dd7e7f6470 Author: David Schleef Date: 2000-08-09 21:06:09 +0000 fix to more specific doc type doc/comedilib.sgml commit 1e6fe113e772b006ea930a806788a4f7c2c4ec86 Author: David Schleef Date: 2000-08-09 21:05:07 +0000 update include/comedi.h commit 713519ccfecc610a93c8477fa7d46e4c10f25db7 Author: David Schleef Date: 2000-08-09 21:04:41 +0000 sscanf->strtol lib/comedi.c commit 80a7835141dec0307692914bf28635c3dd479550 Author: David Schleef Date: 2000-08-09 21:03:15 +0000 add insn support lib/filler.c lib/ioctl.c commit 2baa4dd7f464c3e6fb2401e1936ba333aef05222 Author: David Schleef Date: 2000-08-09 20:27:51 +0000 added insn support lib/libinternal.h commit 5bcafbc92039ca87e188914d525624c0b4474129 Author: David Schleef Date: 2000-06-08 21:49:26 +0000 fix for comedi_config Makefile commit 7db2496edd2002eefa9f0a68ddb0601d9f9e4b6d Author: David Schleef Date: 2000-06-03 19:57:41 +0000 moved stuff from comedi comedi_config/Makefile comedi_config/comedi_config.c man/comedi.7 man/comedi_config.8 commit 3aeb987160ac4184033f674aebee5628675ec8d3 Author: David Schleef Date: 2000-06-02 21:52:45 +0000 rewrite demo/mode2.c commit 644fca15d20c3e5bf14c208419104f9f3767c2c4 Author: David Schleef Date: 2000-06-02 21:37:40 +0000 added antialias.c demo/antialias.c commit 748980971df2e77bea40fc2caf9f719843a5efe7 Author: David Schleef Date: 2000-05-27 00:56:45 +0000 many random changes Makefile demo/Makefile demo/ao_waveform.c demo/cmd.c demo/info.c lib/filler.c perl/lperl commit 1d543c53b9a54613ba3fa103ab1f2bf61878f5eb Author: David Schleef Date: 2000-05-27 00:55:34 +0000 patch from Tomasz demo/main.c commit cca9e94ba7c88f0637248260ffd5e383ee9d9519 Author: David Schleef Date: 2000-05-27 00:18:53 +0000 added calibration for DAQCard-ai-16xe-50 comedi_calibrate/comedi_calibrate.c commit 1dbdacce2ad291316adb5992586bc67dfbf50607 Author: David Schleef Date: 2000-03-30 00:34:37 +0000 build fixes Makefile commit 65ffd9f93b2cdc90e0b98efaef91d47a03dcf4d9 Author: David Schleef Date: 2000-03-30 00:23:14 +0000 fixed debian/rules Makefile commit e884dfac6396e6b85caf9a6703a1272045d71240 Author: David Schleef Date: 2000-03-30 00:22:37 +0000 remove command.c from Makefile lib/Makefile commit e30254a41cc01fdfea21f05d484c017bd7981d2b Author: David Schleef Date: 2000-03-30 00:21:43 +0000 oops, didn't mean to add this lib/command.c commit 1508d720e9b60adcfcd71af0100f99d6b5158546 Author: David Schleef Date: 2000-03-30 00:18:58 +0000 fixed debian target in makefile Makefile commit 653d264765e7647ed80489ad15da75a1ed67c37d Author: David Schleef Date: 2000-03-30 00:17:55 +0000 added command support lib/Makefile lib/command.c commit 0767e5123573d8ed6ae87e621c073ddbbd4a443c Author: David Schleef Date: 2000-03-30 00:15:26 +0000 added version file version commit 1b32c7eb4bd27541bcf06e75045db305c58b03de Author: David Schleef Date: 2000-03-30 00:14:45 +0000 versioning fixes Makefile debian/rules lib/Makefile commit d5faf6aeb13cd10b2134745890e05e7400eca71a Author: David Schleef Date: 2000-03-30 00:05:00 +0000 new version Makefile debian/changelog commit 3ecb5a41ae0cc867fbbdc88f41cef5f08fc35ace Author: David Schleef Date: 2000-03-30 00:00:17 +0000 patch for debian build Makefile comedi_calibrate/Makefile debian/changelog debian/comedilib1.files debian/control debian/copyright debian/dirs debian/docs debian/ex.doc-base.package debian/libcomedi0.postinst debian/libcomedi0.shlibs debian/rules demo/Makefile lib/Makefile commit 89ab075dd7af9be9ded9eff3be79d3e27e9a69b4 Author: David Schleef Date: 2000-03-29 23:53:11 +0000 removal of rangetype demo/inpn.c demo/tut2.c commit 03de53a7570acdf9d3ac270f94ff758b466ceac0 Author: David Schleef Date: 2000-03-29 23:52:34 +0000 added support for pci-mio-16xe-10 comedi_calibrate/comedi_calibrate.c commit 99f84ebdbd513df4705ea9a1625b6ab8d68aa49d Author: David Schleef Date: 2000-03-29 23:51:21 +0000 added comedi.h include/comedi.h commit 6e6de1271ad51acd50c19f7d687a93659082f8fc Author: David Schleef Date: 2000-03-06 08:34:44 +0000 Expanded demo/cmd.c commit 03f8fd8378131da83ef5dc652a77fe579bb818bb Author: David Schleef Date: 2000-03-06 08:25:58 +0000 fix COMEDI_SUBD_UNUSED bug lib/filler.c commit f060f85d90d124c5f42e0009c48aa0cf4e5dc42d Author: David Schleef Date: 2000-02-10 00:11:16 +0000 Updating for comedi-0.7.39 and RTLinux-2.1 demo/rt/Makefile demo/rt/it.c commit 845f3ad55327a0b4bc7968c2a0fb694af7ddbfb5 Author: David Schleef Date: 2000-02-02 05:16:13 +0000 patch from tomasz lib/timed.c commit b4bba38d0ffc583975ff99a4d412a65ccb7623b1 Author: David Schleef Date: 2000-02-02 05:14:23 +0000 Initial revision INSTALL Makefile README comedi_calibrate/Makefile comedi_calibrate/comedi_calibrate.c demo/Makefile demo/README demo/ao_waveform.c demo/cmd.c demo/eeprom_dump.c demo/info.c demo/inp.c demo/inpn.c demo/main.c demo/mode1.c demo/mode2.c demo/mode3.c demo/mode4.c demo/outp.c demo/rt/Makefile demo/rt/README demo/rt/ai.c demo/rt/it.c demo/sv.c demo/tut1.c demo/tut2.c doc/FAQ doc/comedilib.sgml doc/html/comedilib-1.html doc/html/comedilib-2.html doc/html/comedilib-3.html doc/html/comedilib-4.html doc/html/comedilib-5.html doc/html/comedilib-6.html doc/html/comedilib.html doc/tutorial include/comedilib.h lib/Makefile lib/comedi.c lib/data.c lib/dio.c lib/error.c lib/filler.c lib/get.c lib/ioctl.c lib/libinternal.h lib/range.c lib/sv.c lib/timed.c lib/timer.c lib/version_script perl/Changes perl/Comedi.pm perl/Comedi.xs perl/INSTALL perl/Lib/Changes perl/Lib/Lib.pm perl/Lib/Lib.xs perl/Lib/Makefile.PL perl/MANIFEST perl/Makefile.PL perl/README perl/Trigger/Changes perl/Trigger/Makefile.PL perl/Trigger/Trigger.pm perl/Trigger/test.pl perl/example.perl perl/info.perl perl/lperl perl/mode1.perl perl/mode2.perl perl/mode2lib.perl perl/test.pl perl/typemap testing/Makefile testing/inpn.c testing/main.c testing/mode1.c testing/mode2.c comedilib-0.11.0/depcomp0000755000000000000000000005601612426145302011773 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2013 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: comedilib-0.11.0/install-sh0000755000000000000000000003325512426145301012421 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-11-20.07; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: comedilib-0.11.0/config.h.in0000644000000000000000000000342213140064621012430 00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* 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 /* Define to the sub-directory where libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* If the compiler supports a TLS storage class define it to that here */ #undef TLS /* Version number of package */ #undef VERSION /* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a `char[]'. */ #undef YYTEXT_POINTER comedilib-0.11.0/comedilib.pc.in0000644000000000000000000000032412416542105013266 00000000000000prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: Comedilib Description: Comedi Library Requires: Version: @VERSION@ Libs: -L${libdir} -lcomedi -lm Cflags: -I${includedir} comedilib-0.11.0/config.sub0000755000000000000000000010577512426145301012407 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2014 Free Software Foundation, Inc. timestamp='2014-09-11' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches with a ChangeLog entry to config-patches@gnu.org. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: