comedilib-0.10.2/0000755000000000000000000000000012323207640010467 500000000000000comedilib-0.10.2/scxi/0000755000000000000000000000000012323207640011435 500000000000000comedilib-0.10.2/scxi/README0000644000000000000000000000263011562232662012244 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.10.2/scxi/Makefile.in0000644000000000000000000005375512317502704013443 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = scxi DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp README 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) 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 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@ 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@ 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 .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } 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 $< .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 `$(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 # 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.10.2/scxi/Makefile.am0000644000000000000000000000034511562232662013421 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.10.2/scxi/scxi.c0000644000000000000000000001525211562232662012502 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.10.2/comedi_board_info/0000755000000000000000000000000012323207636014116 500000000000000comedilib-0.10.2/comedi_board_info/Makefile.in0000644000000000000000000005545212317502702016111 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ bin_PROGRAMS = comedi_board_info$(EXEEXT) subdir = comedi_board_info DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp 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) 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 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@ 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@ 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 .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list 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 $< .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 `$(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 # 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.10.2/comedi_board_info/comedi_board_info.c0000644000000000000000000002200012037024511017605 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.10.2/comedi_board_info/Makefile.am0000644000000000000000000000025511754204373016076 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.10.2/demo/0000755000000000000000000000000012323207636011420 500000000000000comedilib-0.10.2/demo/tut3.c0000644000000000000000000001310612144435503012401 00000000000000/* * Example of using commands - asynchronous input * Part of Comedilib * * Copyright (c) 1999,2000,2001 David A. Schleef * 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. */ /* * The program is used to test the usbdux sigma board */ #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 i; int subdev_flags; lsampl_t raw; struct parsed_options options; memset(&options, 0, sizeof(options)); /* 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 = 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); } /* 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); 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){ printf("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.10.2/demo/ledclock.c0000644000000000000000000001246211562232662013272 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); 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.10.2/demo/choose_routing.c0000644000000000000000000000237012142173735014536 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.10.2/demo/README0000644000000000000000000001617611750472326012236 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.10.2/demo/apply_cal.c0000644000000000000000000000232711562232662013455 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.10.2/demo/gpct_encoder.c0000644000000000000000000000725111562232662014146 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.10.2/demo/ao_mmap.c0000644000000000000000000001047612237161417013125 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); } 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.10.2/demo/Makefile.in0000644000000000000000000045756712317502703013431 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ 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 DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp $(noinst_HEADERS) README 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) 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 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@ 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@ 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 .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list 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 $< .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 `$(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 # 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.10.2/demo/cmd.c0000644000000000000000000002437411562232662012262 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); parse_options(&options, argc, argv); /* 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); } // 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); //prepare_cmd(dev, options.subdevice, options.n_scan, options.n_chan, 1e9 / options.freq, cmd); 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); } /* 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){ printf("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.10.2/demo/poll.c0000644000000000000000000001276511562232662012466 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); 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,0); 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.10.2/demo/dio.c0000644000000000000000000000301312142173735012255 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.10.2/demo/antialias.c0000644000000000000000000000443311562232662013456 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.10.2/demo/receiver.c0000644000000000000000000001057711562232662013323 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); 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.10.2/demo/gpct_buffered_counting.c0000644000000000000000000001472511562232662016223 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 = comedi_get_read_subdevice(device); 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.10.2/demo/sender.c0000644000000000000000000000622712142173735012774 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< #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.10.2/demo/pwm.c0000644000000000000000000000655711754207077012332 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.10.2/demo/common.c0000644000000000000000000000564411562232662013006 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.10.2/demo/sigio.c0000644000000000000000000001013611562232662012620 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); 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.10.2/demo/choose_filter.c0000644000000000000000000000247211562232662014337 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.10.2/demo/outp.c0000644000000000000000000000227611562232662012503 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.10.2/demo/examples.h0000644000000000000000000000142411562232662013331 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.10.2/demo/tut2.c0000644000000000000000000000342511747722200012404 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.10.2/demo/gpct_pulse_generator.c0000644000000000000000000001144111562232662015721 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. */ 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 */ 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.10.2/demo/mmap.c0000644000000000000000000000733511562232662012447 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" unsigned int chanlist[256]; 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; int size; int front, back; int ret; int i; struct parsed_options options; init_parsed_options(&options); parse_options(&options, argc, argv); dev = comedi_open(options.filename); if(!dev){ comedi_perror(options.filename); exit(1); } size = comedi_get_buffer_size(dev, options.subdevice); fprintf(stderr,"buffer size is %d\n", size); map = mmap(NULL,size,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(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); 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; while(1){ front += comedi_get_buffer_contents(dev, options.subdevice); if(options.verbose) fprintf(stderr, "front = %d, back = %d\n", front, back); if(front < back) break; if(front == back){ //comedi_poll(dev, options.subdevice); usleep(10000); continue; } for(i = back; i < front; i += sizeof(sampl_t)){ static int col = 0; printf("%d ",*(sampl_t *)(map + (i % size))); col++; if(col == options.n_chan){ printf("\n"); col = 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.10.2/demo/info.c0000644000000000000000000001006111562232662012436 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.10.2/demo/insn.c0000644000000000000000000000613611562232662012462 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]; 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: %d.%06d\n", t1[0], t1[1]); for(i = 0; i < options.n_scan; i++){ printf("%d\n", data[i]); } printf("final time: %d.%06d\n", t2[0], t2[1]); printf("difference (us): %ld\n",(long)(t2[0]-t1[0]) * 1000000 + (t2[1] - t1[1])); return 0; } comedilib-0.10.2/demo/gpct_simple_counting.c0000644000000000000000000000606311562232662015726 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.10.2/demo/choose_clock.c0000644000000000000000000000306411754206166014146 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.10.2/demo/Makefile.am0000644000000000000000000000756711750472326013416 00000000000000 noinst_PROGRAMS = \ antialias ao_waveform ao_mmap apply_cal board_info choose_clock choose_filter \ choose_routing cmd do_waveform dio eeprom_dump gpct_buffered_counting \ gpct_encoder gpct_pulse_generator \ gpct_simple_counting inp inpn insn ledclock \ mmap outp poll receiver select pwm \ sender sigio sv tut1 tut2 tut3 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) comedilib-0.10.2/demo/tut1.c0000644000000000000000000000160711562232662012406 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.10.2/demo/inp.c0000644000000000000000000000420411562232662012273 00000000000000/* * A very small 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. */ /* 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.10.2/demo/select.c0000644000000000000000000001265311562232662012773 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); 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.10.2/demo/ao_waveform.c0000644000000000000000000001772611750472326014031 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); } 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 * 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); } 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.10.2/demo/inpn.c0000644000000000000000000000347112263537333012460 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.10.2/demo/sv.c0000644000000000000000000000235111562232662012136 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.10.2/comedilib.pc.in0000644000000000000000000000032411562232662013274 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.10.2/README0000644000000000000000000000547711562242043011304 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 git://comedi.org/git/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.10.2/ar-lib0000755000000000000000000001330212077265432011513 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 < sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Copyright (C) 1998-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_LEX # ----------- # Autoconf leaves LEX=: if lex or flex can't be found. Change that to a # "missing" invocation, for better error output. AC_DEFUN([AM_PROG_LEX], [AC_PREREQ([2.50])dnl AC_REQUIRE([AM_MISSING_HAS_RUN])dnl AC_REQUIRE([AC_PROG_LEX])dnl if test "$LEX" = :; then LEX=${am_missing_run}flex fi]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless 'enable' is passed literally. # For symmetry, 'disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], am_maintainer_other[ make rules and dependencies not useful (and sometimes confusing) to the casual installer])], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_CC_C_O # -------------- # Like AC_PROG_CC_C_O, but changed for automake. AC_DEFUN([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC_C_O])dnl AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl # FIXME: we rely on the cache variable name because # there is no other way. set dummy $CC am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o if test "$am_t" != 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 dnl Make sure AC_PROG_CC is never called again, or it will override our dnl setting of CC. m4_define([AC_PROG_CC], [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])]) ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_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). m4_define_default([_AM_PYTHON_INTERPRETER_LIST], [python python2 python3 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])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([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.10.2/ChangeLog0000644000000000000000000121116512323207640012170 00000000000000# Generated by Makefile. Do not edit. 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 comedi_board_info/comedi_board_info.1 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.CVS 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 lib/comedi_errno.h 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.sgml doc/comedilib.xml doc/comedilib_html_config.xsl doc/driverwriting.sgml doc/driverwriting.xml doc/funcref doc/glossary.sgml doc/glossary.xml doc/install.sgml doc/install.xml doc/intro.sgml doc/intro.xml doc/mkdr doc/mkref doc/other.sgml doc/other.xml doc/reference.sgml doc/reference.xml doc/tutorial.sgml 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 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/examples/cmd swig/ruby/examples/common 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/Makefile.am python/README.txt python/comedi.i python/comedi.py python/comedi_wrap.c python/comedi_wrap.doc python/setup.py python/test_comedi.py 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/html/acq-seq.gif 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/Measurement_Computing_pcidas-6023 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 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 doc/vocab.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/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 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/conf.modules 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 demo/main.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 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 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.10.2/Makefile.in0000644000000000000000000007236012317534766012503 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = . DIST_COMMON = INSTALL NEWS README AUTHORS ChangeLog \ $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/configure $(am__configure_deps) \ $(srcdir)/config.h.in $(srcdir)/comedilib.spec.in \ $(srcdir)/comedilib.pc.in COPYING ar-lib compile config.guess \ config.sub depcomp install-sh missing ltmain.sh 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) 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) 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@ 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@ 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 .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then rm -f stamp-h1; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: @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) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__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 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.10.2/comedilib.spec0000644000000000000000000000413112317507221013212 00000000000000Summary: Data Acquisition library for the Comedi DAQ driver. Name: comedilib Version: 0.10.2 Release: 1 License: LGPL Group: System Environment/Kernel URL: http://www.comedi.org/ Source: http://www.comedi.org/comedi/download/comedilib-0.10.2.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.10.2/c++/0000755000000000000000000000000012323207640011037 500000000000000comedilib-0.10.2/c++/Makefile.in0000644000000000000000000004620412317502702013032 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = c++ DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am 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) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ 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@ 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@ 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 .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: comedilib-0.10.2/c++/include/0000755000000000000000000000000012323207640012462 500000000000000comedilib-0.10.2/c++/include/Makefile.in0000644000000000000000000004232612317502702014456 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = c++/include DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(include_HEADERS) 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) 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 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@ 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@ 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 .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-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 # 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.10.2/c++/include/comedi_iostream.hpp0000644000000000000000000000423611562232662016271 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.10.2/c++/include/comedilib.hpp0000644000000000000000000005336411562232662015063 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()); } } 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; } inline subdevice find_subdevice_by_type(int type, const subdevice *start_subdevice = 0) const; 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; } 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())); } 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() { 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; } 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 dio_bitfield2(unsigned write_mask, unsigned *bits, unsigned base_channel) { 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) { 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()); } } unsigned find_range(unsigned channel, unsigned unit, double min, double max) { 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; } 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_gate_source(unsigned channel, unsigned gate_index, unsigned *gate_source) { 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()); } } 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; } 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; } 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; } 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; } 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 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) { 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) { 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_gate_source(unsigned channel, unsigned gate_index, unsigned gate_source) { 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_routing(unsigned channel, unsigned routing) { 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); } private: comedi_t* comedi_handle() const {return dev().comedi_handle();} device _device; unsigned _index; }; 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); } }; #endif // _COMEDILIB_WRAPPER_HPP comedilib-0.10.2/c++/include/Makefile.am0000644000000000000000000000006611562232662014446 00000000000000 include_HEADERS = comedilib.hpp comedi_iostream.hpp comedilib-0.10.2/c++/Makefile.am0000644000000000000000000000002411562232662013015 00000000000000 SUBDIRS = include comedilib-0.10.2/comedilib.spec.in0000644000000000000000000000413711562232662013632 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.10.2/perl/0000755000000000000000000000000011562232662011437 500000000000000comedilib-0.10.2/perl/info.perl0000644000000000000000000000250711562232662013202 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.10.2/perl/README0000644000000000000000000000212211562232662012234 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.10.2/perl/Comedi.xs0000644000000000000000000002540211562232662013136 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.10.2/perl/Makefile.PL0000644000000000000000000000052111562232662013327 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.10.2/perl/example.perl0000644000000000000000000000113111562232662013672 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.10.2/perl/Trigger/0000755000000000000000000000000011562232662013042 500000000000000comedilib-0.10.2/perl/Trigger/Makefile.PL0000644000000000000000000000034511562232662014736 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.10.2/perl/Trigger/Trigger.pm0000644000000000000000000001145711562232662014733 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.10.2/perl/Trigger/Changes0000644000000000000000000000020011562232662014245 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.10.2/perl/Trigger/test.pl0000644000000000000000000000122411562232662014275 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.10.2/perl/Lib/0000755000000000000000000000000011562232662012145 500000000000000comedilib-0.10.2/perl/Lib/Makefile.PL0000644000000000000000000000051511562232662014040 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.10.2/perl/Lib/Lib.pm0000644000000000000000000001400511562232662013131 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.10.2/perl/Lib/Lib.xs0000644000000000000000000001212511562232662013150 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.10.2/perl/Lib/Changes0000644000000000000000000000032211562232662013355 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.10.2/perl/Comedi.pm0000644000000000000000000001140111562232662013112 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.10.2/perl/mode1.perl0000644000000000000000000000172111562232662013251 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.10.2/perl/INSTALL0000644000000000000000000000032411562232662012407 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.10.2/perl/Changes0000644000000000000000000000032711562232662012654 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.10.2/perl/typemap0000644000000000000000000000046111562232662012762 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.10.2/perl/lperl0000755000000000000000000000020011562232662012413 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.10.2/perl/mode2lib.perl0000644000000000000000000000152611562232662013744 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.10.2/perl/MANIFEST0000644000000000000000000000041311562232662012506 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.10.2/perl/test.pl0000644000000000000000000000121311562232662012670 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.10.2/perl/mode2.perl0000644000000000000000000000234111562232662013251 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.10.2/m4/0000755000000000000000000000000012323207634011012 500000000000000comedilib-0.10.2/m4/libtool.m40000644000000000000000000106002312077265412012646 00000000000000# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 57 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## 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\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_REPLACE_SHELLFNS mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified).], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([${with_sysroot}]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and in which our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|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" ;; ppc*-*linux*|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 x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi # Handle Gentoo/FreeBSD as it was Linux case $host_vendor in gentoo) version_type=linux ;; *) version_type=freebsd-$objformat ;; esac case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; linux) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' need_lib_prefix=no need_version=no ;; 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 ;; 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' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; 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) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) 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*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS="$save_LDFLAGS"]) if test "$lt_cv_irix_exported_symbol" = yes; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## 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 which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## 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 "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) # ------------------------------------------------------ # In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and # '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. m4_defun([_LT_PROG_FUNCTION_REPLACE], [dnl { sed -e '/^$1 ()$/,/^} # $1 /c\ $1 ()\ {\ m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) } # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: ]) # _LT_PROG_REPLACE_SHELLFNS # ------------------------- # Replace existing portable implementations of several shell functions with # equivalent extended shell implementations where those features are available.. m4_defun([_LT_PROG_REPLACE_SHELLFNS], [if test x"$xsi_shell" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"}]) _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=}]) _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) fi if test x"$lt_shell_append" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl func_quote_for_eval "${2}" dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) fi ]) # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine which file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS comedilib-0.10.2/m4/ltoptions.m40000644000000000000000000003007312077265412013236 00000000000000# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, # Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 7 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## 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_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## 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.10.2/m4/as-libtool.m40000644000000000000000000000176711562232662013257 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.10.2/m4/am-check-python-headers.m40000644000000000000000000000225412205111265015570 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.10.2/m4/as-compiler-flag.m40000644000000000000000000000063611562232662014326 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.10.2/m4/lt~obsolete.m40000644000000000000000000001375612077265412013566 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.10.2/m4/ltversion.m40000644000000000000000000000126212077265412013226 00000000000000# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 3337 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.2]) m4_define([LT_PACKAGE_REVISION], [1.3337]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.2' macro_revision='1.3337' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) comedilib-0.10.2/m4/ax_tls.m40000644000000000000000000000573211562232662012500 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.10.2/m4/ltsugar.m40000644000000000000000000001042412077265412012662 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.10.2/include/0000755000000000000000000000000012323207637012120 500000000000000comedilib-0.10.2/include/comedilib_version.h.in0000644000000000000000000000365311562467163016327 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.10.2/include/comedi_errno.h0000644000000000000000000000321311562467163014663 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.10.2/include/Makefile.in0000644000000000000000000004266712317502704014120 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(srcdir)/comedilib_version.h.in $(include_HEADERS) 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) 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 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@ 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@ 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 .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): 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 # 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.10.2/include/comedilib_version.h0000644000000000000000000000354412317507220015705 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 10 #define COMEDILIB_VERSION_MICRO 2 /** * 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.10.2/include/comedilib_scxi.h0000644000000000000000000000426011562232662015170 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.10.2/include/comedilib.h0000644000000000000000000002650311562232662014146 00000000000000/* include/comedilib.h header file for the comedi library routines COMEDI - Linux Control and Measurement Device Interface Copyright (C) 1998-2002 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 _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); /* 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); /* syncronous 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 *SWIG_OUTPUT(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_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_reset(comedi_t *device, unsigned subdevice); 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); #endif #ifdef __cplusplus } #endif #endif comedilib-0.10.2/include/comedi.h0000644000000000000000000010102312144463717013452 00000000000000/* include/comedi.h (installed as /usr/include/comedi.h) header file for comedi 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 /*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 #define COMEDI_DEVCONF_AUX_DATA_HI 29 /*most significant 32 bits of pointer address (if needed) */ #define COMEDI_DEVCONF_AUX_DATA_LO 30 /*least significant 32 bits of pointer address */ #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 (1<<26) #define CR_DITHER CR_ALT_FILTER #define CR_DEGLITCH CR_ALT_FILTER #define CR_ALT_SOURCE (1<<27) #define CR_EDGE (1<<30) #define CR_INVERT (1<<31) #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) /* trigger flags */ /* These flags are used in comedi_trig structures */ #define TRIG_BOGUS 0x0001 /* do the motions */ #define TRIG_DITHER 0x0002 /* enable dithering */ #define TRIG_DEGLITCH 0x0004 /* enable deglitching */ //#define TRIG_RT 0x0008 /* perform op in real time */ #define TRIG_CONFIG 0x0010 /* perform configuration, not triggering */ #define TRIG_WAKE_EOS 0x0020 /* wake up on end-of-scan events */ //#define TRIG_WRITE 0x0040 /* write to bidirectional devices */ /* command flags */ /* These flags are used in comedi_cmd structures */ #define CMDF_PRIORITY 0x00000008 /* try to use a real-time interrupt while performing command */ #define TRIG_RT CMDF_PRIORITY /* compatibility definition */ #define CMDF_WRITE 0x00000040 #define TRIG_WRITE CMDF_WRITE /* compatibility definition */ #define CMDF_RAWDATA 0x00000080 #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 #define TRIG_ROUND_MASK 0x00030000 #define TRIG_ROUND_NEAREST 0x00000000 #define TRIG_ROUND_DOWN 0x00010000 #define TRIG_ROUND_UP 0x00020000 #define TRIG_ROUND_UP_NEXT 0x00030000 /* 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_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_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 */ #define SDF_READABLE 0x00010000 /* subdevice can be read (e.g. analog input) */ #define SDF_WRITABLE 0x00020000 /* subdevice can be written (e.g. analog output) */ #define SDF_WRITEABLE SDF_WRITABLE /* spelling error in API */ #define SDF_INTERNAL 0x00040000 /* subdevice does not have externally visible lines */ #define SDF_RT 0x00080000 /* DEPRECATED: subdevice is RT capable */ #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 */ /* re recyle these flags for PWM */ #define SDF_PWM_COUNTER SDF_MODE0 /* PWM can automatically switch off */ #define SDF_PWM_HBRIDGE SDF_MODE1 /* PWM is signed (H-bridge) */ /* subdevice types */ enum comedi_subdevice_type { COMEDI_SUBD_UNUSED, /* 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 */ COMEDI_SUBD_PROC, /* processor, DSP */ COMEDI_SUBD_SERIAL, /* serial IO */ COMEDI_SUBD_PWM /* PWM */ }; /* configuration instructions */ 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, /*ALPHA*/ INSN_CONFIG_SERIAL_CLOCK = 26, 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, // Use CTR as single pulsegenerator INSN_CONFIG_GPCT_PULSE_TRAIN_GENERATOR = 1002, // Use CTR as pulsetraingenerator INSN_CONFIG_GPCT_QUADRATURE_ENCODER = 1003, // Use the counter as encoder INSN_CONFIG_SET_GATE_SRC = 2001, // Set gate source INSN_CONFIG_GET_GATE_SRC = 2002, // Get gate source INSN_CONFIG_SET_CLOCK_SRC = 2003, // Set master clock source INSN_CONFIG_GET_CLOCK_SRC = 2004, // Get master clock source INSN_CONFIG_SET_OTHER_SRC = 2005, // Set other source // INSN_CONFIG_GET_OTHER_SRC = 2006, // Get other source INSN_CONFIG_GET_HARDWARE_BUFFER_SIZE = 2006, // Get size in bytes of subdevice's on-board fifos used during streaming input/output INSN_CONFIG_SET_COUNTER_MODE = 4097, INSN_CONFIG_8254_SET_MODE = INSN_CONFIG_SET_COUNTER_MODE, /* deprecated */ INSN_CONFIG_8254_READ_STATUS = 4098, INSN_CONFIG_SET_ROUTING = 4099, INSN_CONFIG_GET_ROUTING = 4109, /* PWM */ INSN_CONFIG_PWM_SET_PERIOD = 5000, /* sets frequency */ INSN_CONFIG_PWM_GET_PERIOD = 5001, /* gets frequency */ INSN_CONFIG_GET_PWM_STATUS = 5002, /* is it running? */ INSN_CONFIG_PWM_SET_H_BRIDGE = 5003, /* sets H bridge: duty cycle and sign bit for a relay at the same time*/ INSN_CONFIG_PWM_GET_H_BRIDGE = 5004 /* gets H bridge data: duty cycle and the sign bit */ }; /* * Settings for INSN_CONFIG_DIGITAL_TRIG: * 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 * * operation parameter 1 parameter 2 parameter 3 * --------------------------------- ----------- ----------- ----------- * COMEDI_DIGITAL_TRIG_DISABLE * COMEDI_DIGITAL_TRIG_ENABLE_EDGES left-shift rising-edges falling-edges * COMEDI_DIGITAL_TRIG_ENABLE_LEVELS left-shift high-levels low-levels * * COMEDI_DIGITAL_TRIG_DISABLE returns the trigger to its default, inactive, * unconfigured state. * * COMEDI_DIGITAL_TRIG_ENABLE_EDGES sets the rising and/or falling edge inputs * that each can fire the trigger. * * COMEDI_DIGITAL_TRIG_ENABLE_LEVELS sets a combination of high and/or low * level inputs that can fire the trigger. * * "left-shift" is useful if the trigger has more than 32 inputs to specify the * first input for this configuration. * * 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_INPUT = 0, COMEDI_OUTPUT = 1, COMEDI_OPENDRAIN = 2 }; enum comedi_support_level { COMEDI_UNKNOWN_SUPPORT = 0, COMEDI_SUPPORTED, COMEDI_UNSUPPORTED }; /* 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) #define COMEDI_TRIG _IOWR(CIO,4,comedi_trig) #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) /* structures */ typedef struct comedi_trig_struct comedi_trig; 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_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]; }; 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_struct { unsigned int n_insns; comedi_insn *insns; }; 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; /* channel/range list */ unsigned int chanlist_len; sampl_t *data; /* data list, size depends on subd flags */ unsigned int data_len; }; struct comedi_chaninfo_struct { unsigned int subdev; lsampl_t *maxdata_list; unsigned int *flaglist; unsigned int *rangelist; unsigned int unused[4]; }; struct comedi_rangeinfo_struct { unsigned int range_type; void *range_ptr; }; struct comedi_krange_struct { int min; /* fixed point, multiply by 1e-6 */ int max; /* fixed point, multiply by 1e-6 */ unsigned int flags; }; 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; /* channel flags */ unsigned int range_type; /* lookup in kernel */ unsigned int settling_time_0; unsigned insn_bits_support; /* see support_level enum for values*/ unsigned int unused[8]; }; 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_struct { char board_name[COMEDI_NAMELEN]; int options[COMEDI_NDEVCONFOPTS]; }; struct comedi_bufconfig_struct { unsigned int subdevice; unsigned int flags; unsigned int maximum_size; unsigned int size; unsigned int unused[4]; }; 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 (1<<8) #define UNIT_volt 0 #define UNIT_mA 1 #define UNIT_none 2 #define COMEDI_MIN_SPEED ((unsigned int)0xffffffff) /* callback stuff */ /* only relevant to kernel modules. */ #define COMEDI_CB_EOS 1 /* end of scan */ #define COMEDI_CB_EOA 2 /* end of acquisition/output */ #define COMEDI_CB_BLOCK 4 /* new data has arrived: wakes up write()/read() */ #define COMEDI_CB_EOBUF 8 /* DEPRECATED: end of buffer */ #define COMEDI_CB_ERROR 16 /* card error during acquisition */ #define COMEDI_CB_OVERFLOW 32 /* buffer overflow/underflow */ /**********************************************************/ /* 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 */ I8254_MODE5 = (5 << 1), /* Hardware triggered strobe (retriggerable) */ I8254_BCD = 1, /* use binary-coded decimal instead of binary (pretty useless) */ I8254_BINARY = 0 }; static inline unsigned NI_USUAL_PFI_SELECT(unsigned pfi_channel) { if (pfi_channel < 10) return 0x1 + pfi_channel; else return 0xb + pfi_channel; } static inline unsigned NI_USUAL_RTSI_SELECT(unsigned rtsi_channel) { if (rtsi_channel < 7) return 0xb + rtsi_channel; else return 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_GPCT_SOURCE_PIN_i_CLOCK_SRC_BITS = 0x6, /* NI 660x-specific */ 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, NI_GPCT_PRESCALE_X2_CLOCK_SRC_BITS = 0x10000000, /* divide source by 2 */ NI_GPCT_PRESCALE_X8_CLOCK_SRC_BITS = 0x20000000, /* divide source by 8 */ NI_GPCT_INVERT_CLOCK_SRC_BIT = 0x80000000 }; static inline unsigned NI_GPCT_SOURCE_PIN_CLOCK_SRC_BITS(unsigned n) { /* NI 660x-specific */ return 0x10 + n; } static inline unsigned NI_GPCT_RTSI_CLOCK_SRC_BITS(unsigned n) { return 0x18 + n; } static inline unsigned NI_GPCT_PFI_CLOCK_SRC_BITS(unsigned n) { /* no pfi on NI 660x */ return 0x20 + n; } /* 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, }; static inline unsigned NI_GPCT_GATE_PIN_GATE_SELECT(unsigned n) { return 0x102 + n; } static inline unsigned NI_GPCT_RTSI_GATE_SELECT(unsigned n) { return NI_USUAL_RTSI_SELECT(n); } static inline unsigned NI_GPCT_PFI_GATE_SELECT(unsigned n) { return NI_USUAL_PFI_SELECT(n); } static inline unsigned NI_GPCT_UP_DOWN_PIN_GATE_SELECT(unsigned n) { return 0x202 + n; } /* 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, }; static inline unsigned NI_GPCT_PFI_OTHER_SELECT(unsigned n) { return NI_USUAL_PFI_SELECT(n); } /* start sources for ni general-purpose counters for use with INSN_CONFIG_ARM */ enum ni_gpct_arm_source { NI_GPCT_ARM_IMMEDIATE = 0x0, NI_GPCT_ARM_PAIRED_IMMEDIATE = 0x1, /* Start both the counter and the adjacent paired counter simultaneously */ /* 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, NI_MIO_RTSI_CLOCK = 1, /* doesn't work for m-series, use NI_MIO_PLL_RTSI_CLOCK() */ /* the NI_MIO_PLL_* sources are m-series only */ NI_MIO_PLL_PXI_STAR_TRIGGER_CLOCK = 2, NI_MIO_PLL_PXI10_CLOCK = 3, NI_MIO_PLL_RTSI0_CLOCK = 4 }; static inline unsigned NI_MIO_PLL_RTSI_CLOCK(unsigned rtsi_channel) { return NI_MIO_PLL_RTSI0_CLOCK + rtsi_channel; } /* 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, NI_RTSI_OUTPUT_RTSI_OSC = 12 /* pre-m-series always have RTSI clock on line 7 */ }; static inline unsigned NI_RTSI_OUTPUT_RTSI_BRD(unsigned n) { return NI_RTSI_OUTPUT_RTSI_BRD_0 + n; } /* 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 }; static inline unsigned NI_PFI_OUTPUT_RTSI(unsigned rtsi_channel) { return NI_PFI_OUTPUT_RTSI0 + rtsi_channel; } /* 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). */ static inline unsigned NI_EXT_PFI(unsigned pfi_channel) { return NI_USUAL_PFI_SELECT(pfi_channel) - 1; } static inline unsigned NI_EXT_RTSI(unsigned rtsi_channel) { return NI_USUAL_RTSI_SELECT(rtsi_channel) - 1; } /* status bits for INSN_CONFIG_GET_COUNTER_STATUS */ enum comedi_counter_status_flags { COMEDI_COUNTER_ARMED = 0x1, COMEDI_COUNTER_COUNTING = 0x2, COMEDI_COUNTER_TERMINAL_COUNT = 0x4, }; /* 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 }; static inline unsigned NI_CDIO_SCAN_BEGIN_SRC_PFI(unsigned pfi_channel) { return NI_USUAL_PFI_SELECT(pfi_channel); } static inline unsigned NI_CDIO_SCAN_BEGIN_SRC_RTSI(unsigned rtsi_channel) { return NI_USUAL_RTSI_SELECT(rtsi_channel); } /* 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. */ static inline unsigned NI_AO_SCAN_BEGIN_SRC_PFI(unsigned pfi_channel) { return NI_USUAL_PFI_SELECT(pfi_channel); } static inline unsigned NI_AO_SCAN_BEGIN_SRC_RTSI(unsigned rtsi_channel) { return NI_USUAL_RTSI_SELECT(rtsi_channel); } /* 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 { AMPLC_DIO_CLK_CLKN, /* 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_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 */ AMPLC_DIO_CLK_OUTNM1, /* 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_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 set 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 */ AMPLC_DIO_GAT_NOUTNM2, /* 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_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 */ AMPLC_DIO_GAT_OUTNM2, /* non-negated output of counter channel minus 2 */ 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" */ }; #ifdef __cplusplus #if 0 { /* avoid confusing editor auto-indent */ #endif } #endif #endif /* _COMEDI_H */ comedilib-0.10.2/include/Makefile.am0000644000000000000000000000013511562232662014073 00000000000000 include_HEADERS = comedi.h comedilib.h comedi_errno.h comedilib_scxi.h comedilib_version.h comedilib-0.10.2/config.h.in0000644000000000000000000000357312317502772012451 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 in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Define to 1 if your C compiler doesn't accept -c and -o together. */ #undef NO_MINUS_C_MINUS_O /* 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.10.2/autogen.sh0000755000000000000000000000004111562232662012411 00000000000000#!/bin/bash autoreconf -i -B m4 comedilib-0.10.2/ltmain.sh0000644000000000000000000105152212077265412012244 00000000000000 # libtool (GNU libtool) 2.4.2 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) # --no-warn don't display warning messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.4.2 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . # GNU libtool home page: . # General help using GNU software: . PROGRAM=libtool PACKAGE=libtool VERSION=2.4.2 TIMESTAMP="" package_revision=1.3337 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_dirname may be replaced by extended shell implementation # func_basename file func_basename () { func_basename_result=`$ECHO "${1}" | $SED "$basename"` } # func_basename may be replaced by extended shell implementation # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` } # func_dirname_and_basename may be replaced by extended shell implementation # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname may be replaced by extended shell implementation # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' # Sed substitution that converts a w32 file name or path # which contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "$my_tmpdir" } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "$1" | $SED \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_tr_sh # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_version # Echo version message to standard output and exit. func_version () { $opt_debug $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $opt_debug $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $opt_debug $SED -n '/^# Usage:/,/# Report bugs to/ { :print s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ p d } /^# .* home page:/b print /^# General help using/b print ' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $opt_debug func_error "missing argument for $1." exit_cmd=exit } # func_split_short_opt shortopt # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. func_split_short_opt () { my_sed_short_opt='1s/^\(..\).*$/\1/;q' my_sed_short_rest='1s/^..\(.*\)$/\1/;q' func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` } # func_split_short_opt may be replaced by extended shell implementation # func_split_long_opt longopt # Set func_split_long_opt_name and func_split_long_opt_arg shell # variables after splitting LONGOPT at the `=' sign. func_split_long_opt () { my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^--[^=]*=//' func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` } # func_split_long_opt may be replaced by extended shell implementation exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. nonopt= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "${1}=\$${1}\${2}" } # func_append may be replaced by extended shell implementation # func_append_quoted var value # Quote VALUE and append to the end of shell variable VAR, separated # by a space. func_append_quoted () { func_quote_for_eval "${2}" eval "${1}=\$${1}\\ \$func_quote_for_eval_result" } # func_append_quoted may be replaced by extended shell implementation # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "${@}"` } # func_arith may be replaced by extended shell implementation # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` } # func_len may be replaced by extended shell implementation # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` } # func_lo2o may be replaced by extended shell implementation # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` } # func_xform may be replaced by extended shell implementation # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_error ${1+"$@"} func_error "See the $PACKAGE documentation for more information." func_fatal_error "Fatal configuration error." } # func_config # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # Display the features supported by this script. func_features () { echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag tagname # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname="$1" re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf="/$re_begincf/,/$re_endcf/p" # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Option defaults: opt_debug=: opt_dry_run=false opt_config=false opt_preserve_dup_deps=false opt_features=false opt_finish=false opt_help=false opt_help_all=false opt_silent=: opt_warning=: opt_verbose=: opt_silent=false opt_verbose=false # Parse options once, thoroughly. This comes as soon as possible in the # script to make things like `--version' happen as quickly as we can. { # this just eases exit handling while test $# -gt 0; do opt="$1" shift case $opt in --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" $opt_debug ;; --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) opt_config=: func_config ;; --dlopen|-dlopen) optarg="$1" opt_dlopen="${opt_dlopen+$opt_dlopen }$optarg" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) opt_features=: func_features ;; --finish) opt_finish=: set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help_all=: opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_mode="$optarg" case $optarg in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_silent=false func_append preserve_args " $opt" ;; --no-warning|--no-warn) opt_warning=false func_append preserve_args " $opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $opt" ;; --silent|--quiet) opt_silent=: func_append preserve_args " $opt" opt_verbose=false ;; --verbose|-v) opt_verbose=: func_append preserve_args " $opt" opt_silent=false ;; --tag) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_tag="$optarg" func_append preserve_args " $opt $optarg" func_enable_tag "$optarg" shift ;; -\?|-h) func_usage ;; --help) func_help ;; --version) func_version ;; # Separate optargs to long options: --*=*) func_split_long_opt "$opt" set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-n*|-v*) func_split_short_opt "$opt" set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done # Validate options: # save first non-option argument if test "$#" -gt 0; then nonopt="$opt" shift fi # preserve --debug test "$opt_debug" = : || func_append preserve_args " --debug" case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test "$opt_mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$opt_mode' for more information." } # Bail if the options were screwed $exit_cmd $EXIT_FAILURE } ## ----------- ## ## Main. ## ## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case "$lt_sysroot:$1" in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result="=$func_stripname_result" ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$lt_sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $opt_debug # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result="" if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result" ; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $opt_debug if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $opt_debug # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $opt_debug if test -z "$2" && test -n "$1" ; then func_error "Could not determine host file name corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result="$1" fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $opt_debug if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " \`$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result="$3" fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $opt_debug case $4 in $1 ) func_to_host_path_result="$3$func_to_host_path_result" ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via `$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $opt_debug $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $opt_debug case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result="$1" } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result="$func_convert_core_msys_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via `$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $opt_debug if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd="func_convert_path_${func_stripname_result}" fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $opt_debug func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result="$1" } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_msys_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_mode_compile arg... func_mode_compile () { $opt_debug # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify \`-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" func_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with \`-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj="$func_basename_result" } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from \`$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "\`$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument \`$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and \`=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename="" if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname" ; then func_basename "$dlprefile_dlname" dlprefile_dlbasename="$func_basename_result" else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename" ; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $opt_debug sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $opt_debug match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive which possess that section. Heuristic: eliminate # all those which have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $opt_debug if func_cygming_gnu_implib_p "$1" ; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1" ; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result="" fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir="$arg" prev= continue ;; dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-flto*|-fwhopr*|-fuse-linker-plugin) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test "$prev" = dlfiles; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps ; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." else echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi 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 continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test "$prefer_static_libs" = yes || test "$prefer_static_libs,$installed" = "built,no"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib="$l" done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$lt_sysroot$libdir" absdir="$lt_sysroot$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later func_append notinst_path " $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi case "$host" in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test "$installed" = no; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then echo if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$opt_mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$absdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$opt_mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system can not link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs="$temp_deplibs" fi func_append newlib_search_path " $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|qnx|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. func_append verstring ":${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" func_append libobjs " $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$opt_mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then # Remove ${wl} instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$opt_mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd1 in $cmds; do IFS="$save_ifs" # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test "$try_normal_branch" = yes \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=${output_objdir}/${output_la}.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " ${wl}-bind_at_load" func_append finalize_command " ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs="$new_libs" func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then func_append oldobjs " $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" func_resolve_sysroot "$deplib" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) func_append RM " $arg"; rmforce=yes ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then odir="$objdir" else odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" test "$opt_mode" = uninstall && odir="$dir" # Remember odir for removal later, being careful to avoid duplicates if test "$opt_mode" = clean; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case "$opt_mode" in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then func_append rmfiles " $odir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 comedilib-0.10.2/install-sh0000755000000000000000000003325512077265432012434 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.10.2/INSTALL0000644000000000000000000000232412077261747011457 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.10.2/COPYING0000644000000000000000000006364411562232662011465 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.10.2/config.guess0000755000000000000000000013016212077265432012743 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012, 2013 Free Software Foundation, Inc. timestamp='2012-12-30' # 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 (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc. This 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/*) eval $set_cc_for_build cat <<-EOF > $dummy.c #include #ifdef __UCLIBC__ # ifdef __UCLIBC_CONFIG_VERSION__ LIBC=uclibc __UCLIBC_CONFIG_VERSION__ # else LIBC=uclibc # endif #else # ifdef __dietlibc__ LIBC=dietlibc # else LIBC=gnu # endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; 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; } ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux 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 case $UNAME_PROCESSOR in i386) eval $set_cc_for_build 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 UNAME_PROCESSOR="x86_64" fi fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: comedilib-0.10.2/man/0000755000000000000000000000000012323207635011246 500000000000000comedilib-0.10.2/man/comedi.70000644000000000000000000000146011562232662012521 00000000000000.TH comedi 7 "" .SH NAME \fBcomedi\fR - the Linux Control and Measurement Device Interface .SH SYNOPSIS \fB#include \fR .br .SH DESCRIPTION The \fBcomedi\fR package is a collection of hardware drivers and 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 souce, in the file Documentation/comedi/drivers.txt. .br Programming documentation for comedilib can be found in /usr/share/doc/comedilib, or also at http://www.comedi.org/comedi. .SH SEE ALSO \fBcomedi_config\fR(8), \fBcomedi_calibrate\fR(8) .SH VERSION 0.7.x .SH AUTHOR David Schleef, comedilib-0.10.2/man/Makefile.in0000644000000000000000000004661312317502704013243 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = man DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am 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) 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) 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@ 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@ 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 .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) 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 # 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.10.2/man/comedi_config.80000644000000000000000000000657511562232662014063 00000000000000.TH comedi_config 8 "" .SH NAME \fBcomedi_config\fR - COMEDI configuration utility .SH SYNOPSIS \fBcomedi_config\fR [-vVq] /dev/comediN [[,...]] .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. .SH OPTIONS \fBcomedi_config\fR recognizes the following options: \fB-q, --quiet\fR don't print output while running. \fB-v, --verbose\fR print verbose output while running. \fB-V, --version\fR print version number and exit. \fB-r, --remove\fR remove previously configured driver. .TP .BI "--read-buffer " "num" set read buffer size to .I num kilobytes. The default size is 64k. .TP .BI "--write-buffer " "num" set write buffer size to .I num kilobytes. The default size is 64k. .TP .BI "-i, --init-data, --init-data0 " "file" upload initialization data (typically firmware) from .I file to board. .TP .BI "--init-data1 " "file" .TP .BI "--init-data2 " "file" .TP .BI "--init-data3 " "file" 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 ,,... 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: comedi_config /dev/comedi0 ni_pcimio A National Instruments AT-MIO E series board can be configured to use /dev/comedi3 using the command: comedi_config /dev/comedi3 ni_atmio 0x220,3 This tells the driver that the board is configured for I/O base 0x220 and IRQ 3. .SH ADDITIONAL INFORMATION Additional text documentation can be found in /usr/doc/comedilib-0.7.11. The current version of \fBComedi\fR and \fBComedilib\fR can be obtained from ftp://ftp.comedi.org/pub/comedi. The Comedi web site is located at http://www.comedi.org/comedi. .SH SEE ALSO \fBcomedi\fR(7) .SH VERSION 0.7.x .SH AUTHOR David Schleef, comedilib-0.10.2/man/comedi_board_info.10000644000000000000000000000270611750472326014703 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.10.2/man/Makefile.am0000644000000000000000000000012411754204506013220 00000000000000 man_MANS = comedi_board_info.1 comedi.7 comedi_config.8 EXTRA_DIST = $(man_MANS) comedilib-0.10.2/comedi_config/0000755000000000000000000000000012323207635013260 500000000000000comedilib-0.10.2/comedi_config/comedi_config.c0000644000000000000000000002365711562232662016150 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.7.16" #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; int read_buf_size=0; int write_buf_size=0; int init_fd; #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, 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}, { "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" "\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; #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; default: do_help(1); } } if((argc-optind) < 1 || (argc-optind) > 3 || ((argc-optind) == 1 && read_buf_size == 0 && write_buf_size == 0 && remove == 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); } } } } exit(0); } comedilib-0.10.2/comedi_config/Makefile.in0000644000000000000000000005474112317502702015254 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ sbin_PROGRAMS = comedi_config$(EXEEXT) subdir = comedi_config DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp 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) 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 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@ 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@ 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 .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-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 $< .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 `$(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 # 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.10.2/comedi_config/Makefile.am0000644000000000000000000000023611562232662015237 00000000000000 sbin_PROGRAMS = comedi_config comedi_config_SOURCES = \ comedi_config.c comedi_config_CFLAGS = $(COMEDILIB_CFLAGS) comedi_config_LIBS = $(COMEDILIB_LIBS) comedilib-0.10.2/configure0000755000000000000000000167060412317502700012332 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for comedilib 0.10.2. # # # 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.10.2' PACKAGE_STRING='comedilib 0.10.2' 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 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 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_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 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' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures comedilib 0.10.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/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.10.2:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-maintainer-mode enable 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-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. 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.10.2 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.10.2, 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=10 COMEDILIB_VERSION_MICRO=2 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.13' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='comedilib' VERSION='0.10.2' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' 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=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 $as_echo "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE 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 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 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 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 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 "x$CC" != xcc; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5 $as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } else { $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; } fi set dummy $CC; ac_cc=`$as_echo "$2" | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` if eval \${ac_cv_prog_cc_${ac_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. # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* if { { 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; } && test -f conftest2.$ac_objext && { { 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 eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. if { ac_try='cc -c conftest.$ac_ext >&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_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* if { { 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; } && test -f conftest2.$ac_objext && { { 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 # cc works too. : else # cc exists but doesn't like -o. eval ac_cv_prog_cc_${ac_cc}_c_o=no fi fi fi else eval ac_cv_prog_cc_${ac_cc}_c_o=no fi rm -f core conftest* fi if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h fi # FIXME: we rely on the cache variable name because # there is no other way. set dummy $CC am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o if test "$am_t" != 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 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.2' macro_revision='1.3337' 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 "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; 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) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 $as_echo "${with_sysroot}" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|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" ;; ppc*-*linux*|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 x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac 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 test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## 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 "$GCC" = yes; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='${wl}--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test x"$lt_cv_prog_compiler__b" = xyes; then archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([A-Za-z]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi # Handle Gentoo/FreeBSD as it was Linux case $host_vendor in gentoo) version_type=linux ;; *) version_type=freebsd-$objformat ;; esac case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; linux) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' need_lib_prefix=no need_version=no ;; 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 ;; 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' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" ac_config_commands="$ac_config_commands libtool" # Only expand once: { $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=10 COMEDILIB_REVISION=2 COMEDILIB_AGE=10 COMEDILIB_LIBVERSION=10:2:10 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.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.10.2, 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.10.2 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ nm_file_list_spec \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "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 which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="" # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ func_stripname ()\ {\ \ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ \ # positional parameters, so assign one to ordinary parameter first.\ \ func_stripname_result=${3}\ \ func_stripname_result=${func_stripname_result#"${1}"}\ \ func_stripname_result=${func_stripname_result%"${2}"}\ } # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi comedilib-0.10.2/lib/0000755000000000000000000000000012323207635011241 500000000000000comedilib-0.10.2/lib/calib_lex.h0000644000000000000000000002051012122625761013253 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 37 #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 #define YY_BUF_SIZE 16384 #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 #define YY_READ_BUF_SIZE 8192 #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 85 "../../comedilib/lib/calib_lex.l" #line 341 "../../comedilib/lib/calib_lex.h" #undef calib_yyIN_HEADER #endif /* calib_yyHEADER_H */ comedilib-0.10.2/lib/version_script0000644000000000000000000000456411562232662014170 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; comedilib-0.10.2/lib/filler.c0000644000000000000000000001716311562232662012614 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.10.2/lib/error.c0000644000000000000000000000556011562232662012466 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.10.2/lib/buffer.c0000644000000000000000000001042011562232662012575 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_offset,comedi_get_buffer_offset,0.7.18); int _comedi_get_buffer_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; } 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) { 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_count; } comedilib-0.10.2/lib/Makefile.in0000644000000000000000000012203412317502704013226 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = lib DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp $(noinst_HEADERS) 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) 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 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@ 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@ 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 .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } 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 $< .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 `$(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 $(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.10.2/lib/timer.c0000644000000000000000000000654211562232662012456 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.10.2/lib/comedi.c0000644000000000000000000001242212142173735012570 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); __comedi_errno = errno; 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); __comedi_errno = errno; 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) { int ret; if(!valid_dev(it)) return -1; ret = comedi_ioctl(it->fd, COMEDI_INSNLIST, il); __comedi_errno = errno; return ret; } 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); } comedilib-0.10.2/lib/cmd.c0000644000000000000000000001107612142173735012077 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.10.2/lib/dio.c0000644000000000000000000001375411562232662012114 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) return -1; if(it->has_insnlist_ioctl == 0) 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) 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) 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) 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.10.2/lib/calib_lex.c0000644000000000000000000017507112122625762013264 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 37 #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 #define YY_BUF_SIZE 16384 #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) /* 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 591 "../../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 #define YY_READ_BUF_SIZE 8192 #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; #line 41 "../../comedilib/lib/calib_lex.l" #line 819 "../../comedilib/lib/calib_lex.c" 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 ); } 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] ) { int 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 1055 "../../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 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; int 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 85 "../../comedilib/lib/calib_lex.l" comedilib-0.10.2/lib/range.c0000644000000000000000000001167111562232662012431 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;imin + mult*(*src); } dest = ((void *)dest) + dst_stride; src = ((void *)src) + src_stride; } }else{ for(i=0;imin + 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.10.2/lib/calib_yacc.c0000644000000000000000000020452612273706367013421 00000000000000/* A Bison parser, made by GNU Bison 2.7.12-4996. */ /* 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 "2.7.12-4996" /* 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 yylval calib_yylval #define yychar calib_yychar #define yydebug calib_yydebug #define yynerrs calib_yynerrs /* Copy the first part of user declarations. */ /* Line 371 of yacc.c */ #line 1 "../../comedilib/lib/calib_yacc.y" /* 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 371 of yacc.c */ #line 414 "../../comedilib/lib/calib_yacc.c" # ifndef YY_NULL # if defined __cplusplus && 201103L <= __cplusplus # define YY_NULL nullptr # else # define YY_NULL 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 /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif #if YYDEBUG extern int calib_yydebug; #endif /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ 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 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE { /* Line 387 of yacc.c */ #line 347 "../../comedilib/lib/calib_yacc.y" int ival; double dval; char *sval; /* Line 387 of yacc.c */ #line 504 "../../comedilib/lib/calib_yacc.c" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 #endif #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int calib_yyparse (void *YYPARSE_PARAM); #else int calib_yyparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int calib_yyparse (calib_yyparse_private_t *parse_arg); #else int calib_yyparse (); #endif #endif /* ! YYPARSE_PARAM */ #endif /* !YY_CALIB_YY_COMEDILIB_LIB_CALIB_YACC_H_INCLUDED */ /* Copy the second part of user declarations. */ /* Line 390 of yacc.c */ #line 531 "../../comedilib/lib/calib_yacc.c" #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; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char yytype_int8; #else typedef short int 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 && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # 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 __attribute__ /* This feature is available in gcc versions 2.5 and later. */ # if (! defined __GNUC__ || __GNUC__ < 2 \ || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)) # define __attribute__(Spec) /* empty */ # 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 /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(N) (N) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int yyi) #else static int YYID (yyi) int yyi; #endif { return yyi; } #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 && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # 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 (YYID (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 && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) 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 (YYID (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 (YYID (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 /* YYNRULES -- Number of states. */ #define YYNSTATES 109 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 275 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ 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 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const yytype_uint8 yyprhs[] = { 0, 0, 3, 7, 9, 10, 12, 16, 20, 24, 30, 31, 35, 41, 42, 44, 48, 52, 58, 64, 70, 76, 82, 88, 89, 91, 95, 97, 98, 100, 104, 106, 107, 109, 113, 115, 116, 120, 126, 127, 129, 133, 137, 141, 145, 146, 148, 152, 158, 162, 163, 165, 169, 171, 173, 175 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { 27, 0, -1, 21, 28, 22, -1, 1, -1, -1, 29, -1, 29, 23, 28, -1, 3, 19, 14, -1, 4, 19, 14, -1, 5, 19, 24, 30, 25, -1, -1, 21, 31, 22, -1, 21, 31, 22, 23, 30, -1, -1, 32, -1, 32, 23, 31, -1, 6, 19, 13, -1, 7, 19, 24, 33, 25, -1, 8, 19, 24, 35, 25, -1, 9, 19, 24, 37, 25, -1, 10, 19, 24, 39, 25, -1, 17, 19, 21, 42, 22, -1, 18, 19, 21, 42, 22, -1, -1, 34, -1, 34, 23, 33, -1, 13, -1, -1, 36, -1, 36, 23, 35, -1, 13, -1, -1, 38, -1, 38, 23, 37, -1, 13, -1, -1, 21, 40, 22, -1, 21, 40, 22, 23, 39, -1, -1, 41, -1, 41, 23, 40, -1, 6, 19, 13, -1, 11, 19, 13, -1, 12, 19, 13, -1, -1, 43, -1, 43, 23, 42, -1, 15, 19, 24, 44, 25, -1, 16, 19, 46, -1, -1, 45, -1, 45, 23, 44, -1, 20, -1, 13, -1, 20, -1, 13, -1 }; /* 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_NULL }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ 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 /* 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 composing 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 }; /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. Performed when YYTABLE doesn't 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 }; /* 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 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -47 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 }; /* 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 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -1 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 }; #define yypact_value_is_default(Yystate) \ (!!((Yystate) == (-47))) #define yytable_value_is_error(Yytable_value) \ YYID (0) 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 }; #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 /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. However, YYFAIL appears to be in use. Nevertheless, it is formally deprecated in Bison 2.4.2's NEWS entry, where a plan to phase it out is discussed. */ #define YYFAIL goto yyerrlab #if defined YYFAIL /* This is here to suppress warnings from the GCC cpp's -Wunused-macros. Normally we don't worry about that warning, but some users do, and we want to make it easy for users to remove YYFAIL uses, which will produce warnings from Bison 2.5. */ #endif #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 (YYID (0)) /* Error token number */ #define YYTERROR 1 #define YYERRCODE 256 /* This macro is provided for backward compatibility. */ #ifndef YY_LOCATION_PRINT # define YY_LOCATION_PRINT(File, Loc) ((void) 0) #endif /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX yylex (&yylval, YYLEX_PARAM) #else # define YYLEX yylex (&yylval, LEX_PARAM) #endif /* 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 (YYID (0)) # 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 (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, calib_yyparse_private_t *parse_arg) #else static void yy_symbol_value_print (yyoutput, yytype, yyvaluep, parse_arg) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; calib_yyparse_private_t *parse_arg; #endif { FILE *yyo = yyoutput; YYUSE (yyo); if (!yyvaluep) return; YYUSE (parse_arg); # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # else YYUSE (yyoutput); # endif YYUSE (yytype); } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, calib_yyparse_private_t *parse_arg) #else static void yy_symbol_print (yyoutput, yytype, yyvaluep, parse_arg) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; calib_yyparse_private_t *parse_arg; #endif { if (yytype < YYNTOKENS) YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); else YYFPRINTF (yyoutput, "nterm %s (", 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). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) #else static void yy_stack_print (yybottom, yytop) yytype_int16 *yybottom; yytype_int16 *yytop; #endif { 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 (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_reduce_print (YYSTYPE *yyvsp, int yyrule, calib_yyparse_private_t *parse_arg) #else static void yy_reduce_print (yyvsp, yyrule, parse_arg) YYSTYPE *yyvsp; int yyrule; calib_yyparse_private_t *parse_arg; #endif { int yynrhs = yyr2[yyrule]; int yyi; unsigned long int yylno = yyrline[yyrule]; 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, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) , parse_arg); YYFPRINTF (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyvsp, Rule, parse_arg); \ } while (YYID (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. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) #else static YYSIZE_T yystrlen (yystr) const char *yystr; #endif { 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. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) #else static char * yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; #endif { 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_NULL, yytname[yytoken]); YYSIZE_T yysize = yysize0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ const char *yyformat = YY_NULL; /* 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: - Assume YYFAIL is not used. It's too flawed to consider. See for details. YYERROR is fine as it does not invoke this function. - 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_NULL, 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. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, calib_yyparse_private_t *parse_arg) #else static void yydestruct (yymsg, yytype, yyvaluep, parse_arg) const char *yymsg; int yytype; YYSTYPE *yyvaluep; calib_yyparse_private_t *parse_arg; #endif { YYUSE (yyvaluep); YYUSE (parse_arg); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); YYUSE (yytype); } /*----------. | yyparse. | `----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void *YYPARSE_PARAM) #else int yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (calib_yyparse_private_t *parse_arg) #else int yyparse (parse_arg) calib_yyparse_private_t *parse_arg; #endif #endif { /* The lookahead symbol. */ int yychar; #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 /* Default value used for initialization, for pacifying older GCCs or non-GCC compilers. */ static YYSTYPE yyval_default; # 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 /* The semantic value of the lookahead symbol. */ 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; } 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 1787 of yacc.c */ #line 366 "../../comedilib/lib/calib_yacc.y" { 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; } break; case 7: /* Line 1787 of yacc.c */ #line 379 "../../comedilib/lib/calib_yacc.y" { if( parse_arg->parsed_file->driver_name != NULL ) YYABORT; parse_arg->parsed_file->driver_name = strdup( (yyvsp[(3) - (3)].sval) ); } break; case 8: /* Line 1787 of yacc.c */ #line 384 "../../comedilib/lib/calib_yacc.y" { if( parse_arg->parsed_file->board_name != NULL ) YYABORT; parse_arg->parsed_file->board_name = strdup( (yyvsp[(3) - (3)].sval) ); } break; case 13: /* Line 1787 of yacc.c */ #line 396 "../../comedilib/lib/calib_yacc.y" { parse_arg->cal_index++; } break; case 14: /* Line 1787 of yacc.c */ #line 397 "../../comedilib/lib/calib_yacc.y" { parse_arg->cal_index++; } break; case 16: /* Line 1787 of yacc.c */ #line 402 "../../comedilib/lib/calib_yacc.y" { comedi_calibration_setting_t *setting; setting = current_setting( parse_arg ); if( setting == NULL ) YYABORT; setting->subdevice = (yyvsp[(3) - (3)].ival); } break; case 21: /* Line 1787 of yacc.c */ #line 413 "../../comedilib/lib/calib_yacc.y" { if(add_polynomial(parse_arg, POLYNOMIAL_TO_PHYS) < 0) YYERROR; parse_arg->num_coefficients = 0; } break; case 22: /* Line 1787 of yacc.c */ #line 418 "../../comedilib/lib/calib_yacc.y" { if(add_polynomial(parse_arg, POLYNOMIAL_FROM_PHYS) < 0) YYERROR; parse_arg->num_coefficients = 0; } break; case 26: /* Line 1787 of yacc.c */ #line 429 "../../comedilib/lib/calib_yacc.y" { if(add_channel( parse_arg, (yyvsp[(1) - (1)].ival) ) < 0) YYERROR; } break; case 30: /* Line 1787 of yacc.c */ #line 437 "../../comedilib/lib/calib_yacc.y" { if(add_range( parse_arg, (yyvsp[(1) - (1)].ival) ) < 0) YYERROR; } break; case 34: /* Line 1787 of yacc.c */ #line 445 "../../comedilib/lib/calib_yacc.y" { if(add_aref( parse_arg, (yyvsp[(1) - (1)].ival) ) < 0) YYERROR; } break; case 38: /* Line 1787 of yacc.c */ #line 453 "../../comedilib/lib/calib_yacc.y" { if(add_caldac( parse_arg, parse_arg->caldac ) < 0) YYERROR; } break; case 39: /* Line 1787 of yacc.c */ #line 454 "../../comedilib/lib/calib_yacc.y" { if(add_caldac( parse_arg, parse_arg->caldac ) < 0) YYERROR; } break; case 41: /* Line 1787 of yacc.c */ #line 458 "../../comedilib/lib/calib_yacc.y" { parse_arg->caldac.subdevice = (yyvsp[(3) - (3)].ival); } break; case 42: /* Line 1787 of yacc.c */ #line 459 "../../comedilib/lib/calib_yacc.y" { parse_arg->caldac.channel = (yyvsp[(3) - (3)].ival); } break; case 43: /* Line 1787 of yacc.c */ #line 460 "../../comedilib/lib/calib_yacc.y" { parse_arg->caldac.value = (yyvsp[(3) - (3)].ival); } break; case 52: /* Line 1787 of yacc.c */ #line 478 "../../comedilib/lib/calib_yacc.y" { if(add_polynomial_coefficient(parse_arg, (yyvsp[(1) - (1)].dval)) < 0) YYERROR; } break; case 53: /* Line 1787 of yacc.c */ #line 482 "../../comedilib/lib/calib_yacc.y" { if(add_polynomial_coefficient(parse_arg, (yyvsp[(1) - (1)].ival)) < 0) YYERROR; } break; case 54: /* Line 1787 of yacc.c */ #line 488 "../../comedilib/lib/calib_yacc.y" { parse_arg->polynomial.expansion_origin = (yyvsp[(1) - (1)].dval); } break; case 55: /* Line 1787 of yacc.c */ #line 492 "../../comedilib/lib/calib_yacc.y" { parse_arg->polynomial.expansion_origin = (yyvsp[(1) - (1)].ival); } break; /* Line 1787 of yacc.c */ #line 1976 "../../comedilib/lib/calib_yacc.c" 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 which 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 which 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 /* Make sure YYID is used. */ return YYID (yyresult); } /* Line 2050 of yacc.c */ #line 497 "../../comedilib/lib/calib_yacc.y" 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 ); fill_inverse_linear_polynomials(priv.parsed_file); return priv.parsed_file; } comedilib-0.10.2/lib/timed.c0000644000000000000000000000430411562232662012432 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 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,comedi_reset,0.9.0); int _comedi_reset(comedi_t *device, unsigned subdevice) { comedi_insn insn; lsampl_t data[1]; 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_RESET; 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) { comedi_insn insn; lsampl_t data[2]; 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_ARM; data[1] = target; if(comedi_do_insn(device, &insn) >= 0) return 0; else return -1; } 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; } comedilib-0.10.2/lib/libinternal.h0000644000000000000000000000740112263010415013626 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.10.2/lib/calib_yacc.y0000644000000000000000000003247612263010415013427 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 ); fill_inverse_linear_polynomials(priv.parsed_file); return priv.parsed_file; } comedilib-0.10.2/lib/ioctl.c0000644000000000000000000000272511562232662012447 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.10.2/lib/calib_yacc.h0000644000000000000000000000707512273706367013426 00000000000000/* A Bison parser, made by GNU Bison 2.7.12-4996. */ /* 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 /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif #if YYDEBUG extern int calib_yydebug; #endif /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ 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 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE { /* Line 2053 of yacc.c */ #line 347 "../../comedilib/lib/calib_yacc.y" int ival; double dval; char *sval; /* Line 2053 of yacc.c */ #line 104 "../../comedilib/lib/calib_yacc.h" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 #endif #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int calib_yyparse (void *YYPARSE_PARAM); #else int calib_yyparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int calib_yyparse (calib_yyparse_private_t *parse_arg); #else int calib_yyparse (); #endif #endif /* ! YYPARSE_PARAM */ #endif /* !YY_CALIB_YY_COMEDILIB_LIB_CALIB_YACC_H_INCLUDED */ comedilib-0.10.2/lib/get.c0000644000000000000000000001234311562232662012111 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.10.2/lib/Makefile.am0000644000000000000000000000200112277127177013220 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.10.2/lib/calib.c0000644000000000000000000002244511562232662012410 00000000000000/* lib/calib.c functions for setting calibration Copyright (C) 2003 Frank Mori Hess #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.10.2/lib/calib_lex.l0000644000000000000000000000434712122625751013270 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.10.2/lib/sv.c0000644000000000000000000000741612142173735011767 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.10.2/lib/data.c0000644000000000000000000001243212142173735012242 00000000000000/* lib/data.c functions for reading/writing 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 "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.10.2/NEWS0000644000000000000000000000000011562232662011102 00000000000000comedilib-0.10.2/doc/0000755000000000000000000000000012323207636011241 500000000000000comedilib-0.10.2/doc/command_funcref.txt0000644000000000000000000003320311752242167015054 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: If successful, 0 is returned, otherwise -1. 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. For output subdevices, sample values are written using the function write. Returns: If successful, 0 is returned, otherwise -1. 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. 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. 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. The number of bytes that are available in the streaming buffer is returned. If there is an error, -1 is returned. Function: comedi_get_buffer_offset -- streaming buffer status Retval: int Param: comedi_t * device Param: unsigned int subdevice Description: The function comedi_get_buffer_offset is used on a subdevice that has a Comedi command in progress. This function returns the offset in bytes of the read pointer in the streaming buffer. This offset is only useful for memory mapped buffers. If there is an error, -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. On error, -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: If successful, 0 is returned, otherwise -1. 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: If successful, 0 is returned, otherwise -1. 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. On error, -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 accessible through the device device. If there is no such subdevice, -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 accessible through the device device. If there is no such subdevice, -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), 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: The function comedi_mark_buffer_read returns the number of bytes successfully marked as read, or -1 on error. The return value may be less than num_bytes if you attempt to mark more bytes read than are currently available for reading, or if num_bytes must be rounded down to be an exact multiple of the subdevice's sample size (either sizeof(sampl_t) or sizeof(lsampl_t)). 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), 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: The function comedi_mark_buffer_written returns number of bytes successfully marked as written, or -1 on error. The return value may be less than num_bytes if you attempt to mark more bytes written than the amount of free space currently available in the output buffer, or if num_bytes must be rounded down to be an exact multiple of the subdevice's sample size (either sizeof(sampl_t) or sizeof(lsampl_t)). 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. If successful, the number of additional bytes available is returned. If there is an error, -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: The new buffer size in bytes is returned on success. On error, -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: The new maximum buffer size is returned on success. On error, -1 is returned. comedilib-0.10.2/doc/tutorial.xml0000644000000000000000000002430012132761632013544 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. To compile it run: gcc tut3.c -lcomedi -lm -o tut3 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. Below is an extract from tut3.c showing the relevant commands: 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.10.2/doc/deprecated_funcref.xml0000644000000000000000000002600412122634440015507 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_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.10.2/doc/drivers.txt0000644000000000000000000031422011754202050013372 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-6208A Devices: [ADLink] PCI-6208A (adl_pci6208) Author: nsyeow Updated: Fri, 30 Jan 2004 14:44:27 +0800 Status: untested Configuration Options: none 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_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_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 (adv_pci1710), PCI-1710HG (pci1710hg), PCI-1711 (adv_pci1710), PCI-1713, PCI-1720, PCI-1731 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), PC218E (pc218e), PC272E (pc272e), PCI272 (pci272 or amplc_dio200) Updated: Wed, 22 Oct 2008 13:36:02 +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, PCI272: [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 PC218E PC212E PC215E/PCI215 ------------- ------------- ------------- Subdevices 7 6 5 0 CTR-X1 PPI-X PPI-X 1 CTR-X2 CTR-Y1 PPI-Y 2 CTR-Y1 CTR-Y2 CTR-Z1 3 CTR-Y2 CTR-Z1 CTR-Z2 4 CTR-Z1 CTR-Z2 INTERRUPT 5 CTR-Z2 INTERRUPT 6 INTERRUPT PC214E PC272E/PCI272 ------------- ------------- Subdevices 4 4 0 PPI-X PPI-X 1 PPI-Y PPI-Y 2 CTR-Z1* PPI-Z 3 INTERRUPT* 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 '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 PC218E PC212E PC215E/PCI215 ------------- ------------- ------------- Sources 6 6 6 0 CTR-X1-OUT PPI-X-C0 PPI-X-C0 1 CTR-X2-OUT PPI-X-C3 PPI-X-C3 2 CTR-Y1-OUT CTR-Y1-OUT PPI-Y-C0 3 CTR-Y2-OUT CTR-Y2-OUT PPI-Y-C3 4 CTR-Z1-OUT CTR-Z1-OUT CTR-Z1-OUT 5 CTR-Z2-OUT CTR-Z2-OUT CTR-Z2-OUT PC214E PC272E/PCI272 ------------- ------------- Sources 1 6 0 JUMPER-J5 PPI-X-C0 1 PPI-X-C3 2 PPI-Y-C0 3 PPI-Y-C3 4 PPI-Z-C0 5 PPI-Z-C3 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_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_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_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) Author: Richard Bytheway Updated: Wed, 13 Nov 2002 12:34:56 +0000 Status: experimental Written to support the PCIM-DAS1602/16 on a 2.4 series kernel. 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. See http://www.measurementcomputing.com/PDFManuals/pcim-das1602_16.pdf for more details. 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_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 = signle-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 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 Oct 18 12:56:06 EDT 2007 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_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_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_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, PCI-6221, PCI-6224, PXI-6224, PCI-6225, PXI-6225, PCI-6229, PCI-6250, PCI-6251, PCIe-6251, PXIe-6251, PCI-6254, PCI-6259, PCIe-6259, PCI-6280, PCI-6281, PXI-6281, PCI-6284, PCI-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: Tue, 15 Nov 2011 15:10:37 +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.10.2/doc/other.xml0000644000000000000000000024371111752525771013044 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. Its stop_arg argument is reserved and should be set to 0. (Reserved means that unspecified things could happen if it is set to something else but 0.) 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 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.10.2/doc/error_funcref.txt0000644000000000000000000001323411752467040014570 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.10.2/doc/intro.xml0000644000000000000000000005633211752737100013046 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.10.2/doc/driverwriting.xml0000644000000000000000000007617612144421764014624 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.10.2/doc/deprecated_funcref.txt0000644000000000000000000000752111753174431015541 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_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.10.2/doc/funcref0000644000000000000000000007252412173530653012547 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.10.2/doc/comedilib_dblatex_config.xsl0000644000000000000000000000050611752515326016674 00000000000000 ansi comedilib-0.10.2/doc/Makefile.in0000644000000000000000000004755712317502703013244 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = doc DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(am__dist_pdf_DATA_DIST) 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) 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) 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@ 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@ 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 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 .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-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 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) 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) 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.10.2/doc/pdf/0000755000000000000000000000000012323207636012012 500000000000000comedilib-0.10.2/doc/pdf/comedilib.pdf0000644000000000000000000253473412173531453014376 00000000000000%PDF-1.5 % 2 0 obj << /Type /ObjStm /N 100 /First 809 /Length 1328 /Filter /FlateDecode >> stream xڝW]8}ﯸv$+j- ,3Zi^$2 3 $1)\ͤ$Y$R֘!U$ bRjE9te9i96zJ9/#ԐQ SAN(Kx5e!Qොr%D13#-Ѐ0TՀe- IrCe'*YA !E:%Xk< N9Oq&OHfT/Ex(Hй # e10h& 3@ ?WsBB3Z0L' #d Av2aRC %8,saVJ[r0ȹD + +G 0HPP"f< `Ԛ@,5Fd3 QxL$@f4 9Ϲ\HhfΩdwFS +K";&ÀGI*+93TJӧ䊞\-=yA:WF6Czlƅw~Wӧ;tnKG ;·6cZri߭b!*׸`kzq7q-JP u7!|K\n̑u_;ϳ]Xj4<;a(tկmX[xgCѠmUOɡ;tt⎡omXCmG4Yi'd)v֡]Ȥ}]a D,4ߎ­kPMtrn%ivD)5L@c_tۦ\i{lۓ&?>%p_j]fw4:^5Ns^ hl֦݄:Π}W>ŠsVEM7MCRת_WMu]/n7k$;wWSJS?*~(CR`NrS ¾6͹Z+z^F@i;Iħcܽ=̧҃0Mm\I00VӢ^4?b ~/«\omluGOlP W0z}C<L|q8vY[0-q$09;ƜP}'q|'h VtzlӜs6> 9}7/e#[}kl6lς_Vq^[ܺKa _.!Gj!?^_6m> )G^hNVtoy<\>vZE0Fhw>}x>\> stream xڥr8z MJ岩v$,B*~{(˛gMJT*N*Y.&Ҷh2ZE?rbCа#\ MFBVƃFY3RX*d ܐr7dX|'XKP˨A2ZUZKUJ6 5 sN &4(ȺИb"cG$= cd6 $̲iH5d#e jՖE٢F aC;ig`x+,.y&SR.`%NX%8J2Y:8.8 K,80- HBG?Y|jL߰k o$l:2'aGzm`+)SNjvyԉ $T[!#Y2f?ۀ- 6Jp  rN>) "HC>P\Io>}Ro鯤(b=wtgnϛ^iASiDf 6}GaU:r+7rTSD0o8 z:^ WHSRB=eεveCU7M i??ǂ/ۺ2n4$U)>,v -~(|V@j*崷ęcC (o QBL0O~mN1{WX?¬SCZ8_iCf.3t쾆vd> stream xڝAo6<^q!)`@,zh(m %}c hIͼX0P/(gZp$IJsS˱TA"8E,Ye~)q1gXq!bp,,$8059Yk>kUЈcRǬui.sԜºEv79X_3H7y6( Ɨ;@`Yvd+JY/A T9Y k %]F&:,@bT ,@.%J*)*`1T o]ZӎQkPHiD Ae2bp,!֑[|&) #d{" a܌Z0*ƨ#9X Aؐ%0 R( H hUنJXpRU|1 M-!hc5pАJC4Ĩppr#I=0Lcw`y{?A"Rꘪou7q_uix3iV"e9a쏄c<1ݐqC8!nP岤'9~?׷o]LZ!]ajxɳֹ\uK췰 kjx/l*?EѸd$Q~[o7> stream xڥW]o6}om8?DR0XxM!/Beɕ,;W$j=~4&H9|2$0n"!1$ c$IRNj9@d$ i_Cb^YWhy-$xXk- 9_KyGq |5b`!q${lҰ3KX1ІA8 m'\7E@'$=XB9Tr`=udIj"ORB"ad8>rqFAe,s.I\ȗt qC!ș4OY$QȚp"mJ:؃ii`bcšH̅)_ MX2ܬ.K}i/X'qz'ӂ?O,pAFX&tkiu^YV^'vW&MV=ku9fAD0?`;e\ v&Q9Tf_r.ZyiϟUlI'e[:g|$pH$O4j~owMQVuFaY),Ϳџ/̝n*]dI?C?8(Qj5!zcI=/JVFW=EKJE")Nif(2`G8Î?EjhsgHywvq,+4Q#h\UYdo v@<~ /8xn颕.^K]z?HҨ,F)0%#)~w6c1Yohi +ƿ0hU£tph%uё'=텨::ZIw+o6l%u[+P9Ha͝!Yh1kW74/xU[>ޠ^0+w_iY1tk>'Y昦n27-}lɢ}T(R<[dfVlU/|n~>VfOu'`z堋%C{ku;~{H\gJwyRnwyh;yދ3l+Dži[%kW]~T5պPz o<4ꍲ-{u:{7yfطrmY(E[HU;|Gw\&wh-`%x9,!,ljhU Ue71 On+1KQPΚcg wݖ[&a6ETo=3CV%۪}`Do >${;Lv3i+溽ʷݺ͡Z m}4Lo Ͻzw]qۼrķet>7#`sթO5=G[׏f؜.~c<qMH *Svn^/ecp7O=<q endstream endobj 806 0 obj << /Type /ObjStm /N 100 /First 876 /Length 1719 /Filter /FlateDecode >> stream xڵko8Wc Dx';HOM ,ED[]\K4~#K)3"=<5=S93 \%JwW˄4p9W1jb;r04s3Z(\%R1+-3vж|%G iFN3%]2ΡCàp@RC3.EDE *e)EҒ,OʺZǦʆ#M-| ?5ivIHhtCMɳ%<:wS08upfOti ù=~'s.bʫ{ F埔dK#JPB+NP?ceYy(υށ՗ {z(&>W91.*$nfհiYכvβ[&VdJ>oļj$ئQؘ c5Snf^6.w<7\Ӄ4tlﳪEi7͆-OYl0 ir .\o&Mԡ.dM-9Knw#..Sk7o3l>Y^<$ۆ-#o {:HүۼɻJCԈn \70z9s9X&~L#/tǦPT%pj+*pO0CvyUȧ- []5ԋkAO c\u)o?9ٻ |(C-bԡ_m^kJ45Фlj8>ɞDnBׯ¯"û2Y_̯"nfax#gam| .6>t1OpDdDSg+VWc"?D?ь;.uzR2ӿȶG$>pmirXxG^ID: DR|>n51%V;[RA|sWzpi_Ѿ-N}M6l>v/urv)PIKnk<0aY}cMV82Nzw&˼&gpĮ_Hu7Dߐ|_r[4&R }_N1a/adG~p`9^^m9./9}[A?] //>b%E&g]{wwv@̯Ȅuuc2󰴰3\wA\-XD]ov@ zy/(nW^5/Ddd<]&˿\%}4ubCRh6D_9B endstream endobj 1134 0 obj << /Length 302 /Filter /FlateDecode >> stream xڝ=S0 w Pa;lmMrIk&k$ A\Ꞥްmxh 擛6[^mEQI-rnb$LqWwA1'~1:a]BBf 1MYv"!/9P֢% OS=ZVl.f}D;gsr\lT&dS."4.c9iwCbٔ),?>Pf?$nCFz]_}ẉ?Wmַd 2L9GLwp9XmO,V>X endstream endobj 1143 0 obj << /Length 1004 /Filter /FlateDecode >> stream xڥVMs8+\s/p)`j75EPXٞ ~[j@M͜zju?6P١"|f4v/N{q89Y|!rK~>k: ƞE Aׄ7"|N {y1ȭ1A ~, W1/ "w.du~Dɓ1X>.]Tupᐍ$ޑ2:zu]T[4'?j▫m^}-ۏh6 Wed&Ltm Ɣ(lUWF`2͢\LC-?0QlEmDiOJYt[^*(#}t=FcPRA, ɤS#u]'5}Z*٩␱D Pë=Cp)xuNNoB$#%&=ynaxc<[W*W{\`0&k9Fn_(&{!0V0]km^B+KǤKn@{7K<8yO𚫼Ŭ[UF~ORz\rNÛ cdkdCsذ{Z5Z[!k\51#`O9/f֪*&}(o-QU,k#bSΟa"Q&M|nd~d9y[*nOo?^81_…nb2d2דj-Lݘlr #1[g+W TʣGt^y$ ׶Kj e fRh] .^ /1#o j>u?Czπ4*dq}bUucJԟ %Z[D+Te cI]x֍;YbDA@mB6!]! EНG? endstream endobj 1186 0 obj << /Length 1272 /Filter /FlateDecode >> stream xKsHvKzgKnYW־Hk7րȣb!|16( 0lvXKy\]cYaO X!tO򢝛yU9  X\!B]}Hv˙|N"?'l{ï!!p1}CnM?Xe;9/-k7FTR駴 ێGk;T^oHmv fUci,S%>@&<*h{\D[K^"oVx^Eb؝;!սH,Uꛈ<%dtpϓ],啉̓7,yb9wiȪTQdԂ5b;Խ{t |;mx/j <)D67ZN#bbZ/!4#]^ y"8@!plY(1^&$* a58BQ m%:`Cr%ty%3I_ᄪ&%qok «BݣD J7b5oUvE3x9DtiACYp˺ZE6mhae\MI훼bzW9^o)y0hkgl%] )mƇAG:k3fvUx%)eu;ӂ|i"[g*Z^V_nj?7V䪹ntz4h %LM~3,ϲBշXa=MhڎOvSW 7ʍw̥ĈQg7'1sq?‡b1j4ς)e>g1\N4\HPrQ6qsQ{"dо&ۥ"1S1NW؋"jɌ~.v\K v-ke?. K| NR[iכ)bMN3Xe*sك[5E9烳e|"[itNNPGYi"w CDIT03A]Vx`P^SQ;"=Ñ,KgE?{*F$iv,L&j#Fe&a,f|pNЀ-@>/hA݄IjDh̖]4f[71b4jw=WФ@:{pNuiK7^Aö&9ö䲟YN4l{Oe-NFw7">n endstream endobj 1231 0 obj << /Length 1301 /Filter /FlateDecode >> stream xKsH,BL?nzvc+8[UTXjhx8<$)ۑd6\iƃ7/qK:nMn-.%$,&u=ł *S˃Hޤlsb=&L/F57a4*I5?Q\k7PsTzHd,޲5Ӥs]~.~Ay5 eIeTd՚_| O*ɫTݟd]`̒iPq^І~m4)qco6̳FξOUf⩍=ĪZ stMr(H?vs(ٽGfzm0"X:݁Z?M^i5iO +.8&'[`|+ؽ@ԅ"Mqz\_#\a^Jj&.O.ggɻf@-S5sÆaL3b'1ES0ifrQr34X0i!l#wQɊ@ل ™K@=Chv4Z~Imu4EZ8Ʃc JZtkA5jo0hb[yY!ދ:8no21x 7g٣F1Cȴȶ:jλߩy5f?!&MnB%b;h- 050mhk L?f@A'td]s2m #0kh3y/0! 9`ZlDq2 B ȧcYg".od0{uüvP.'IhNZ? Acl@zn#EI$%†^ fBL?uҐx$ $h)dhz\< BKn@Er@V_ͺ%|[f+.x-7-= endstream endobj 1275 0 obj << /Length 1009 /Filter /FlateDecode >> stream xMs8 ong3m[`P&FdL<0X=#z_! >w#ȁ%/1iu.VREuk-@b[sҷ,؛ um @?0WrGc*oY` ;9'$<P,,1y!*6Ua$ÈAx*I~3zVopC."zEh?"$bNc≃J1<''0G3t$:vEӆQwq$ HN*HpL,yhCA;\-&Wuj|q hBsu[iSݍ" _;/T7W![53B 8xB;t Ğ:췺U*seҲ ,y 's."{+w2:>}-]RIJ9 }FosL}?.~9I"T1c"~m&Ȅ[۾Bx=$]W.NFlSYEǖ90MSm]l1ٻʮ;|1ֺu*R͍ΊnU9떏?bVՍ6v270q >ٟD0^fnE\g6vҭZmUbh3ͪv8[GSR\cdxLŽ{`s65C)?*k#"(Na{?;]Օnmƒ25y#Wg>91r7ZeɴW$bƙ*c'8p\ TxN]Ɠf֨/umUVH+xx,j8Eͩ@S=$G XAVht]d-~[#64ܦT6K~s,ǴǞ¤'>I &v՘o0>. g~8NJmp%o6 endstream endobj 1318 0 obj << /Length 1034 /Filter /FlateDecode >> stream xMs8| `wk٭oiC@vb ; /nMlK$<I` x㽜{/DJ9/!iy WZYqj-@d[sR$ۛ ԍsﳇ/!@7aDHGRTFn n_JyH PYHC""̋u?- 2_**N3.TʋQWy\ͬeV!rZ f\~8myn28Ѯ=ApN3-1%T;?e]QDn`=UqgQng_yvc֋gPPQ k$dobZvc /bFirD7}e4G`O:O9#6zl܆w,=Nl8d-^#.ZhTf:3՘QyZR 2dQX3#7NC /E7/rkL단6bOLG RۧZXZm mMU0uj" f+w.9餭XgCaGִ*=5nڪ1DK:iN0+ki96.C*jԦ̊Mi'r$-7<r.($/ODUّ>3t҇ u]NvƙtG`[VG"\[>]$szzg_VRGӯVپ-{.M'@F@U~]Um9Ӯ$ԇ@$\PݬI8)/M-y䘟y:])K@ؔj؂6z&1Je;&7:`C |7 x endstream endobj 1189 0 obj << /Type /ObjStm /N 100 /First 1021 /Length 2472 /Filter /FlateDecode >> stream x[]o}ׯcнpHF$-`~HkAqh  gʪaB^"]2"!JI V+ LV![Z(Q%lq Y%3RH})EкֆR"Yg(Q &k8hHco[tG+#6tIm,c`1! % \ʁA(A9H~)*FJ~ B%KZ"@J)Zrf% 9kʜEE{F-)&6'*yTFZPD2809*jj b ml3 àK]J 9jTvm(P9[JahI8a=,6rLS[}&y[`͵U Њ-y,U ĨKP'R#I+{q4째ʲ*,X1e[ZQs+אm-++z˭+5׫526.>mG;ڛ4PJ@ZƦ]%[6Xw .ukbxՒul?:Z$ؠI0QgO^E8}{yyusvzǛw9;}wuߜvש?^\ s΋)E0YҰ0]HEoÓ'2z*?}EП7ߜ8<9mxr[* >Z`uxR^B?tSp.oEHm s24"~׿_. /D_}㵟]]tRH׆x#f1Yei{뫷//0pzY8&?98;}/.o>Ixasۋw]=-fRmF_C˸3`@^B:4 t[H^ / \rr%'\rr%'\rr%KUC9B/0Ґ(K:\ dlA*̄@ wxdDF6V`!@48#2xC.m~R_ FwOAs|tGd*. w7G.b{s/m%|_V K'X"|f\MA<ǫ:.F)|VB3a`.[z> stream x[[s8}WifjGK tSvm3tvfƤ_ɒr6 .s>;89_u:cQ!ԣ ;m4OWՁWͪwZy}܁b8p#BLx 8<Ηj!xSџ:wׄz>N@|C=bqǓ|="z.`_A78sqq>nu0("u&n3^\"He:fiXQ!9p+L<`9ORRk62D$cFY oA@ ш /qV\"hS韀4&h"k%<,zn[Ii"17=`Ͽy@oE-VJOnZdT\^H~ZMZF}lQj'i q W,,/9 ,iC?ۯ1l-ƑA$Brś Ň!m$ÓWě&JÝXkOEfx!j&'p"swΨT/?/ ?<@_Nl AkJr,P lɝ2񭚕Rk0ba%uX]="PAC/ #{Wz/ |zdl*3D-G!S\Uh'2Wbr L]ņp0feLߟDѵf /P|UA'|{H!E2v@-,._[$DfV&1՘y˅APHdң"-Y4'{uPk>R>΋| s.da"F_ :!YQ6_6` ;T5Octhr M|9q+TC uu1tLK~w#)OR+@UDw$yr@VTH[ؾh既WO)֖l00WXEJK!d  $.,+ , SqԂ~MPaO*FVJ7<w|V/=-1ԠlaK<:[B?zh؟<.dq$M؟cDR endstream endobj 1404 0 obj << /Length 1643 /Filter /FlateDecode >> stream x[Kw8WX$`:z4f #@Ij'X ߋ9wuu2P P ^?!RAXǮ.mpD$[!m+Ʀ\W ~471 y;&Rh P[(rHA膉uZ:BP]ucpUE`篼H@ >ixT AJU  IẔ_ Wg@3\~h2 Iq/?$+.$&{G%K®wl]l.瀖HKf|8C7ʑhֱ7KWIʚ03/T7#.rQCm!xnhq;.ʮm1;%,.ni.J[WVPa6:*FlvV89wfxeDix zQU;d\TnUPa}nod0c^q5WM4L8 'zQHJJEU:#< d;dd0:D/JT#Ou 3)R5VPVЁ`Ůbg>ҙ0ٰb|͊e+pTݚC˸oo77/ryJ(oTJypj@i@e\=iب|<-S$XJ:(̇?`6:ND-Fjmgா^df*Myf"+\EmEw"`)m9pC&IZ֌YD !3(OU-.K6މ' +,Mbqs-6mD$؈Xw")ᕷczYw"dw;w S"!_=fM3G|<<;v"F+i2nKJf6Jjctܗl1Ǡ10WQ XK<6gͷ) i,\v~: *,> stream xZM1>*VmAI,:#vWS{ͱIXrzٯ_ 4h @2rT'sЌ>PJ?/)7 JtH_ <%QݯŞVJ$8(RrvRHL7 ct1QG0( EQsd'Q*fi"u^ 3:bq2$## sIfE,%吳 n+C+ B -mA+3;40KW 1.nq)hl0 7G 䉋;8B&Ak4zL1(EF!=\HkT-oN9T9R\[ҜdJ(uc(Z헓Zq[e{xLn;Cc+Zν4j}G[NHfw\HJve9$fcM}s;DWTwS_K_@q䷹wՕѝNfjT (V0*XmU|UqO{/,wA#ٳ~8wwǛë>×o<>ķvMn_=79Ÿr,c̗⾚ti_gU8ß>~K^h? ~c?K43h g#kѢɊ.6y<̋X=0l,)ʆt1ul -ucqA%[ߟ* qu6Y0-i8R^,Pɶɴ g`JZو,f|lfS-"3m-Zop NF*V\b wmtX_X&~>ʓdmݫ _㏏^~9|eǻ/pxk8~ӏ&[᠔~y{o &ռ*e:d~`POhM6d8O666(۠!cCƆ 26dlؐ!SCL 25djԐ!SCrn P5 ../Ţ;J,E.2K-ؗ7}X.mK&[\87IȌ/MkR3bфBgo4Y، lfܬ{ ELen$?]f_œO$>mQ6 /{}󺬟^DL 2NQ=7n}b:m{3{Htʅ"|xO/}:_o NPK%+K^)SD~"?Fm0?oR:~݄fHFWOMPs-WB+w cWBT^B34v/7rE0Q/ _Z nDv[BTJw9 p]{j \-UZ|\LKLqAқWa|W:.r}`^nDMSn  ;.*BV-(ްz)7oT(׼0>Lݝaҥ{џIYҷe(wTXMMMM&sm2|Dcn17Xh,M4, Y4diҐ!KCֆ Y6dmڐ!kCֆ 4ҐKC. 4Ґ Oe]M q2EJxo}q$N Jwck Y\D)ʸPơN3\h㤽'|A^J#q)\$ɡFWa$]s~N`$y2Gw$8w ~x#]q(~gtF4wMW!4!b_sH~фG ;&Dk|7!b_sd~фV;6hBH18> stream x[s8~ځXu#Ʌ3NN))6IW²Q IeJZryH,K09::Hƕaƻqp-@b/ L,"J1/n~:(zS-{Ȣ;ѩq8n|o^i`5 $j|j>ohؖ2v320-/OQS~-]u 2]l7ˢ0oWf~=0i~7l8KN \4& oZ&wxq\wc>rR)p悙_ysa|1B{+gj!$'K4 rހWS{ϩmB>wk9B7?uocy!?lDGGGt:?L xW3Š@UP =XzI-xGޅ9ll'I4^Lr aF4=ct$}`:UkV敕9.W[\MBg0LnK0:W`H(6TDmAe$^,uxMo*HJ@yZђ_VUuϒ4(l"΂ԩ >dBD9)*6]f<*I7t2M:M b>9`r]#W~^s!-Ywߊ:IXghEd mU-t;!0b ʾJU9a:l1~(&sib?z'eu ,+Fyd/)X_ECU=Vrya@@w4g~CҴ!ZUcb;T#а$̓` eR֫HAѩ?b0/V.z7~Y@gQ3Ml3y*^9yoiA>Bz^߱wdB 4cLFu!JwԒ)2JX8fA0;XEF0x *d E#[EU/<p3u,d2;x.~%^2Ҥx ņff"O_gU7Z2:ܖlpIG@aIiZX"<='[DIe۳/D!Sa4Jv~|*,%/rc^۟m}6;y#?@'!gx5'_\u3Ê9(R'FNO`W۽cąU~%UOtbo\=s>ɟj3\݋*[cQMg(]q=–U0>D)y\^M^O(/#@>> stream xo0+|l%bu *v*q&%YItkJFr]~G 0Nw D ET3YL/gZY Z#%nΣovcL(*Z\ 3 S Z*\9*&MMϬb4ܶWY(_r,AXBEi)ZVMiR]uh*;A4cлyLkj0^r]1R}eC:6̭Iù_5eԷKvlA{B20ۏ1FsNu|U&WV lQ d]KO RX].}q=/4qTeO TBF@MMs؅H< #mA8|/B!2 {%#'‡du) fYۺ/hCh` >'km3Ss~Q=/;qǶ]:^^}XuU>,tLY6?!1>-;y ;ޱ;q]0=7GVtl߻PЖVߗ 믿!m=Jea.W:N /;is9H((ʮ|<+UOC%pR1b endstream endobj 1468 0 obj << /Length 721 /Filter /FlateDecode >> stream xUV0+~;eQJv؊G}G'$tn̕HC9>-geD*Y,Iř$W,jrK?MxtΤG3癀dAEpp2_). UGv$,2%7uYXqLT IWfHfc#~X&Ob$$PK.0#^0FO}C?lFHzژLfq64DRQ␲e_Vka9mChig?5Pi@'mBB v@ /Wm3-%4bc)& 0M5rLR^LAUN+t{0}w;v!b_1`֭t?͔*.fEpU:UgfD*S`ĥѽ:7QZ"L#zO<~q:m cJ+g4;m{bH7ԛV9(wa= \vw;n@!Pex\~,N˾F'4%gγEv> stream xڭZI6_[*$)dr3yUsHr(H"|ߧ7pe29M z|LJ^< q'n4go_:TCtu"ung.H35?(9~|oabo/y}(6DyľazO,ڛ/>~<]}\քk6|wOl5B7C"j>Nr18TIbafLR?|c9g4H<\= گ-93فLթꊚ_wkw$fsV-XWMR %LfTLY,7 <)cQ]|<񬸫ս)B j;S:`y 4\ }-I0S2jNP/&6k- gT27J3wFS0?X:24pPR`&jԍG AVv-^aQgMuU ua_{>WYj-` P*U U]ى0fzrW)s KA}bp>8|+ȓhuR(Z~v4?"EWM!8wx!Rl@%vƬ_~JBl^Dㅃ_s՝d<˙3i'V掫s 02 E;Wvjو>)]n."鲿p$sFÜ:{e{YeAv.; -rao0sv˩tC&> ~`|Zr%ܜLxח!y{\fC0co#7ƕ'Vv)`$~#( ;`$֭^:a %};մAO DC۵< oTE,3#bi]]&#$hs£<"F_tcepJ 'MBsWFTHTyn QhVxˀx N9ȱNE, !`5p 7hƐ IsaܖBpbQ&ugA>GwP Z?ּR! mo`RL /!ѷsʏqszJT*0w9-/1GdC_Ih &C4(hiUxE=ikȪJTݜaM;+@ x⇠ڙ͊o* &ZV_+[%SsXcw @"p/ Fc8i~^{(1 xDˎY\e8*!f\QITт/Bdl]ʵ7WuU͉c 4w(gpuVUO*} cQ40'sV Gi &e7Xň\T&\a\[Dɰ`+WHt8%֙s#.D/_ۈaoI;:;b-n\RF95CY,ecՐN w= 7fǐcQzcBM_!H5_KnjSnD5[$#RX.+Ӕ6N`$ 8oaԡ4L8`s͂+>ί2 MʠF}QM)d{=+լnQ8dkZ#&wNv !_o{{L!%F #{b- %~WZ\/"NE ŶH/|8!(Z/gʂapfN BTkkGSL58-"̇D+㘓 S`9R{*b qoHRi,g%A!璶omj拭9 Y}Ḹ6܌5mlV2*ovCZ&1 iJ'SԦ>jF0C/<XpPh''1"*KO,>E':FwpIKܣZ ۝Bߨ +B)=ddgMxq42&i .ORW,uj!(\+]I6!1}զփ;dM'"-ꄿfS2JQ+X7ٲ19?DWN|cI "P;^j,pIy#K^, q[لy=SjlTdU2S0^W@6tFj)w7&rI&ڻ!1+7M@f"_Hhv>ձe0>=Bnl!]2"V,cHbX7Y3_Y&lRxr Hl&Yxׄ$>9$=;3nϰr1u4LQYpy7KL)w_]Bq|z9{i?,=oU\&G:D3ܥQ:ߌc'LI7ϼI>YR74z{ B1]u{kyGrى$'1uaՂ$.r( 1 8"?yР;uI# e!Nȯ]m]l2:K}KR"#ϠrrBʌ筢GlUwcn r0+7vd/> stream x[]o}ׯc.3䐅6@ 58"5d v}wGJ ֬LÙ.qqI$]ubBq6i65֦@$fE$nEx%+Oy#OΧ[0c 13owx7z'62R±GGmh<ܽ~~ ny[^~r>^'gGˏyzq8XSg}|}nrOkvEӓK(1gڷoK7nK^0~#P 1BBBL]3uͱk]sc5Ǯ9vͱk]3w5s]3w5s]3w5^l"W\фȯ?qVy8 _){l [u=ȏ/ylieȟ y;uD0Q"?>5de?LiuByk9!(] ?NJz,\<( ?T3(ʨ; "ep 4ta-2| .;cZQaw4ea)Lp ACQ3*ƌ (pFZY]S1ΰ;95 "ʖ %ufivE$N꣈&lj4-3aNpîIKcivV5jUf]iQwTgTCQXa6 ɭFQQFaWDsUFmQ n8(M}ŒH6I# 3H 3J"HQ|4&ˆ g_%S ٖ &KÐ&m\GE<IBҶ =#n>D"O9ܵ a7Qn2=/=/=.=z>^JWySۧ9Yz+]_o^D=bWx_GiFvGM]^:V?`sӰsk^:rA6#m??ߞ\]me *5*|Ό%+IC!831y+cx:m83Aq]MF_H3߆3!%;Y'25 Q47y_{L]@\ xLe$$qPB !)m. Ybz.Ȟs>]ޛv&ݰ3yL^;䵟J?#~F(+vKc"؁.XT6adh5FQUjHH+Q32 VnE٫}!pV0,v2=e%>o.̲@qK Jp:";QIY*ZaS䎨ޜ_\,][>o+ ~Wiv./ruDgb5ވv>cn3VC%m+7hVɮOlUEllT0XLZX>}n pƒSZDh:s endstream endobj 1499 0 obj << /Length 4044 /Filter /FlateDecode >> stream xڭɲ6BPU} z☋/OoAϞ" Dvw;o?<~{.w$HvoN8q<ܥ9quרc:e: qungCfc߹͟7>v^ ];;ύlwO+]{n&0wo~>MtyĤ'{ӣnv$>ƙ(rN]9 jCdz< ?]/Oa4s.jhTG{^~)Q9}9Oq€USU{q:oݿU)HF3jΥ+"V>i8Ia*ϼ+v? ]u/.,j}9oE4/~(#p-E4Tw0N/J鵝PQvwRQu}5]p@8'yCOF ⣠?ey+Uz ApāRs_(+זQA4=;80!r$J!A/|/lpUFUwՓ {Mj^HH^%(يaVZdV=}B6DS(RsԘe0Y'(A˪*!XiT+oa t`=("7H[l*Iq Hږ8ܢɳbos 6Ϝ ͠Fa-G=lvJGeK $ qt8!XYEOpXzE-ՖdV8DҘ:۪6sDFKn= -w9| 4+85G!o:gEvq"W/,3C55p+0P"!0Ю@`kpz 5@%w>'mEk bXE_?Va )l3E)J lQBO0n4wxJ]V:-tfj&TU a9#6jra;<$TgQzaF:)7q>L) 0 Ca`>ZxHzfm$Y]#gVJKLg _;YNX̒*40Cx/,7O+T8˗vXYkg"bc3B do zr\ʝnP=s#-ߓIDV2`\$?QZJ`H ?-޲= eG`(ˆp %ZfJ`~K'p2J:ā#0:t\N X0Yː (w+W"s僚fM*tpYJ,+N|7N#nJ"B"9@2k&G*+RyTyCxomP['J{#F:RV}|y ٳBX䪐.IbV]^GTNۨ2ؕ;dj?&v$qYW \/3 %Fµ&u V$0M\??c?wLXaqkCL6u${a9 ܨhoApbaԆebLC;JLflepPYs:Y3HՂIS$kv=C[Ox1&FN@K ?.W>[s6NC7+ tT"Յt,DCgpq] T q ㍔MAu"Enea:E 6)& F_>┟k  }ZMaYwf0,>c%$ʱ_0}u,7ikW'}i/}&s7sdwJ!fcz1G\MI;]Do~/ζV8كuPWlxneq%8b}d袷Lr`le^>VhoH U,{;;pMԊ0A>v7ʹ?L"ך#ф\>o8A%Hc͌q,;tIy1=nnmn|`f|nqy|~սs#<>xԺ_o[+XM>xe"Y88\)Ne'߁X%PBwg '†߾q}(BT">/#/0wv^瓹0c_ӒZX6)c#ڡnUYp+4 FȕF'JbVjtpݢx0lfź1|tOc,Z)GxE "`K{>iїy+N/v6{UCN=xB˒sҺ4&meG$T9 g8"X@6SM1 Yn*WL$KN*g km益X `Y6ކne-kfokH.6X5X~Nˋī|urBܩv܀GH~Tl`bkߏ iDS'ہqiF ?ᐡy`RTSݝJF"ddLReXU#]y(I>n.$ILZZ \ x]j1. &V'\5![;5\uW@h/ZPBKVWip^0hy7}XT_0غBYGs?֢ endstream endobj 1518 0 obj << /Length 3598 /Filter /FlateDecode >> stream xڥZK6ϯ-R ;[nxj/NX z2ۍn%N' nPlN?^}dy%ǍJ$4gnoڋ>V_&։qY`4۾Gow!p:J)/w~#|~#86ϮeBD2ryE/^AӒ~"VAp' d릨ۓ鴙og4OnNc!~,.R*]RFۇ]&/OP]/Dmq"Eb\WUs4}SמF lK'记ܪk#O[ym.۶ {Z7[Om"}6G_gs͹gN= ?L'4APw"8~V8X0T(ۭd- hg}YtǯvJm _׺]T^֗X>RX>'(SA(7*O4=zV CoU3k2/@z#"fOVA"(nIUF`j8CablbTQlΠ]_V7e{2c-2BkJd{'aW6TʝHZ#V wdNӱ:Ujz%U z|y3 SJn%B8faFb"qS/M 5O~"* D vY#9p<;n|_w m5q}p# #٪vGjXu:uM98U( :P+C_%y$YXi=Fmm:ۥ5 "y@ѥ6^xw%_ԕXPV 7q@xfxq`gL5ov1,H9o)qNXxweKY@`pʝ r$=ZN"xcUj" Y,w؞rskKIƂ, jfN BC g : Z6 |=_+_o&14^ Ikq:xrcPG!dgl6`T2 ܰmC-yI [i0 UO͍-x&-W؀]%f`V`;ę9dT_rDqT앃EdxS{9dA@|3]e)&_,L*ΓG^o>)( D2j)NsbH$5> }{ݎO, 5WU.wt\nwNڸT!y܅%W!{t :6eI:GI qE V٘X( 4LfhvY>=x06q*e(3P(-T@H ^kBAH,s<w%pN~ytnSQ2%QsgXמAΏ-P.= +Zbr1s깫uF [̢FlpUƱFQ36X 49AFؖo[70mS]wKuOYD*AEs U<oߵcΡYxAG tHpG(~guyjLu]z8v.r"+=s]fa!$.X޷"&ǜ`WCL"FEH/MP@a0 Rh'/RhZ^d.xI $XB.R|#xv:yH)Ȗ0"y| B`< ݆,dK=!Z0CM]%S '-?GS> q !ӔAteߐPuiCHn.U^+ KpB]I鉁i 4 b4 R>=ldjz[e2g]u:nIBxEp2L0UJ+I3CeDZ3uw1] {'wbqL8 ?Ù d4XK=ퟫys)334n#"^NzϹ``xGxeB-X6M.2Fcy[;[.a~<>1zz9S_̿lߦ.3nJoc?n p06/J݇PEyW!@N' aԩ  =¥,yWVYhZ)$9 #G>QIB̋+"uO8 D/C̨bZhfHϘMo)I1wG7v#2-LyO~X G~i.[15^_A2.SE@ >mqit+=v&hv?LGK?D endstream endobj 1532 0 obj << /Length 2378 /Filter /FlateDecode >> stream xڵYKs6W8S7er#씊CB8ߧ zA"ݘn~z}ǂK4EKRx&{(5GU?~݉'aw,pw(/p҃)~s/7 ·EǛ^kx;G/bE ʻp=04/7~$^GW) CTɥJ>g])i]yh' 6y3.<-6@o}IXUF,-̗%9vy.u~h:Z˿ eWeSĽ2:W3z'җ)RbEDA8`~2;c?oC >< ut\oC_p02iXd}Fl)=:`RCȮϣ\]xyR9e0>[!kUuotKNv9-;@؟8.\5Ip1szA2SɊzȏC͇o_SKbZYUՅN}jڣan(qǒ[Ց+".'X*BFOX0T^~  :YfH-dt!&0槑\+>*+L#?G>Q8ZƉݺ<ݔn`җ-( Zuj. (to ]. /0^ NC3a<Yx'ZLg!$hʾv+" Yu?V!EAQ CSJw)H,̾#`hމ`qLIܠ1͘|Y<&&.#&xgp0DCOZ09 0KGCMvΜ07 dCAu483b;NN1q2;,IN&]huGIKUcf{s ]' $&AKފՅ:φ$xZor @5٪n&=eRkbI2C#Ԃ.6;d.]fl{40Vg 2-Rb\r3&ܢ[ehx˚ȲFunšYvE \wD rH#r~!kfJbNQn} ֛,A0"ײV@oŕ^ʱBk?1@6 RZoYnߵJb9~?b\4D֨S\n]w_UҶҗke'bTxP ~/X8Vu*s2^2Юf2S/50~2[ZH(P%D#%N"Dф-ƫ!|2E4 xD7O n.+l_)KeO.M6\2(Y _ ٞ[JTk̴Kx*߂0w}itv3,d4P endstream endobj 1515 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./fig0.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 1538 0 R /BBox [0 0 1077 454] /Resources << /XObject << /Im0 1539 0 R >>/ProcSet [ /PDF /Text /ImageI ] >> /Length 32 >> stream q 1077 0 0 454 0 0 cm /Im0 Do Q endstream endobj 1539 0 obj << /Type /XObject /Subtype /Image /Name /Im0 /Filter [/LZWDecode] /Width 1077 /Height 454 /ColorSpace 1540 0 R /BitsPerComponent 8 /Length 1541 0 R >> stream P8$ BaPd6DbQ8V-FcQv=HdR9$M'JeRdVLfS9m7NgS}?PhT:%GRiTe6OTjU:VWVkU _XlV;%gZmVeoSkw^oW_.x& bqXf7lY~7Gcy骾~K{ϴzק2x_>C}oqw'p^I٫tD P.@PN:XޛmN%9!!PAh1 XB+=CX[ D9xpC} DX:NDxatq'Xkb\Yv6+DhBkJ.¸ bZO3XmbDA9ϖ2FE xb59f1ȝ 2* h'#!zrJ "dL~Pf@Rvy1"l0@*|irǙ)%XyQ#,rs*a乖WIY&exSJ'3֚_͈0HcJi7$\Q"_N4m6o8 s&V],%|ڟ ES}PyE(.HL8d.(M_7 P))( LF(9Dnؑ>(, SKK*C3&6PhF .Ci GOTLQGDTT2>T̽ȨV9PU6P$H2$59^e 3T9/F's,ӸJkeMZY K/wYv.B;-ԲYhkڊkQlIS_J$sNcl;GZ[n73q+cYirBƺt]ۼ\V[uo!4z.;}o*l'Ə~{B9F ZM+E8=`)ox4l3/ M{8x{Q1^\gp Ƹ8.q㶋h:HF]%Vtұ[K:RnC@؉ԶCO T=ՙQJ+ǞگAs5M[}yh):e}hvQyض]l#quƿ;CZlڷn-7.қnl==~ՎUyXkm27{zO/K{X)%oNoa4ߜ38W|NJ.~r]>$TfpwtTSBUE|s}7A|{ΎshM WklF6pޫ>h5*;'IԪTToA W&]o}PIjoL/|yZ;:yz~WNuɹX~xzxQ=珼,oMkyQ|ΦsݓP-4l1_b~By)\#ߗd~w"&ooyOb]i/U S}{ot/خ/$HxOJ̳àϓ.j,bo^<P4OoX/NW,O=vB ޭ1 0yϋ0JRnnM+l~ #hY +a-# o .? #s 3 0 p0n͐,+(<2g>ͥ?=:@O;F@43Aq-sI<@Wt PT t$;ԹMSGԟHcX_2-Vk=.Y73UrEyEv7$RӔ= ?رC9}wan=w7eo,ٕӣZR*2SYz=9W=V]X~V˚is!9W9skgYCLVYUt ?͝z-sZZ#i3?كM.IW+xZgkZo<;jC=ZsVӣ)s0:!bǦ::[kk5ykoٱ05=-VWkɰR( y0PӝZ5WiW;8;:JٍZ [KoC/ԕ٬{.e[3}EKDOڣAÕ3a?SfRYRg߳;g=kZ&_ ;Ex/xL[QGa0!';IDg{TqE^-,ff{n_e_Dٗ)Xݺf{T>߷z] 5\1|Dp{;YӴPZ;;c[MC7-ܙ8$a9|>-q/z? ?9~şc{w?zATY'[<]R=㷾o;+}9`t<+}m8?7c<-{~] =9cȶ??,3 $ AT. CDA8R7D0NCIxQ-K\ %Ƥ9y=LpICQғMSBFJ*ЉDWeYU]l=q.Kv:Naxxn9ʯ5@o9gTO%iV{2dC_Aum##p{{#v͗eyΎ#CsxcX2gw8/=ᾈu?ZoRd= @{@߿NIp{ +:0 .lFDR$!Bč^QI'.@Bǐ"D#\= Iʐ̭+L,\B-E,M)671Ko74s9>sB(N43;14J?EѮ}oGmL94MДKI;B4GT2tUu{V3 ՋwYuc>W_SPm)VYUY,fV|{bRv5a\Z6ul[6նvPA) t0q\}L5uWn]UM[XT)-XFmxZ׆tccx;cC^SYFSc%Z8Wfy'9Y{>g&UQmfCejΙںi=;6Nk;qiԚ+g>ћ_ vm9ool۶`x־Oz9\N5}q69$]}-р}7%hO7nW[}Gm]Ge߬Kxwwx<-Ρ)_]Qvue]>K_/tl܏}~{|Wv=2V +K|Eh C}-ۗ~@`cr/GQІa5%^u/@GZEes*FO5ACel*.E80&vs c R8q:7h}Ly|Q1lQ<sF8-x~@ė #$6tNy!Zuqj-o&D2>>'&%$zAJW0rLsL9,&Ƙ{p1L|͔rEKen9Ia יȉNE8#ӂx3Y^&їev?<k|MwN?V.b%)C(mOѧ>_ IOR%ah_+PU嚋HAi2 :=z=,$^|ʨR'*c 8Բ9w''Z?Af:Se(U20& 扮O-trԊ\+^ E9Q5歜{ Hkj%*ddɯdf,ͅLhvxZZ|jةML-3E8:jdFXgZ!]vRz r嶳&NN_-mŠ\Oth- +svݮKphuگ2iHI7-a㾖V^rIzԶZHAI:͛OUޛt z`odnsJs] w"6FŌ57Q =%Ú^ z/įS"gױxp-=bnm2Ep~ Ah-^< d"9..X+cȑn5Yf ݘ&q?{Wl~x9#埳6^IK3 w1W݆ĥr&XX+Xt&3H/MQ<{}uM{=u8*}jF 1v,=Ab<,ty2h~ݯSK͙ T3ۏzZ=G^􋭵{;׿}Z,|}_wo>72~^}%>n{o_z; Y9 Ⱦ"?I68{':1dsø=?@zu-@ K1#+6B"0!/o2DAY @- ; A@ʻq^8"4$t##P»=lllm"3̫@˸C|.3ȌEJ"jˤ*˨CmÜFLt:\:lL$?IijH*K̖ͤJԍ',cMkpq ˌMc˃\J4 jɔH̗<;T\ǺKJ Kk K$TKM0\04'?δgɜE$ Kό)dFL\OJLO\(|F} 쮶L0P KTxsA]M; Dۇ=Ф!\ԶQTFNeELQbM LCQhÐB65O< QkGȤN"ѭ/DbѺ&Bm'Ap>5-%+ #=ӕ9:$O_NE#Q0͋ .R:?S@ShSkSESe+e!Su33SROEGTUMB )*mMC?cUPR2;GU]./#ERC5a-bԝU82խa+}Dɽ]EQE_]eQDAsCIcaLiM8V%NƣuOsV[%pVli?`=fVlGW$TL{T }u׫WX$}E)4eWzT„}Ɍ)GsElT-* b\ hH5^WMV,b%Yu,XΣEԥ~ ToY2M3oIWsXU$z5KaEv}ͦ}5ZtZ,I5tVZ5`WU&2{J]}CCTFl6@ۍVF g ZKRUFۅDltyI-Z6]GHl;rCݹJmC]# ]4]Wս[C̱hݜP}V`\seKYK$dĝϽQ]SܭO[u=ʅ|^hYM}W K%U_x9XYݭ^jNUE݁e^J+` U|`qH1v_ A[~ ` m N~3FYkFnVO\a%a&3aű`M%udY&^$> aTn$\ͫb63`[n+].b..ڽR~1`F/Jf=]V܆7\%&ANsv$}c\~fdn)gPU>pfeq(LgN~fV~%=e6ReRdxfFcf讋dނ辌.׆xyᎆd&4iBƕfmn^N|gidfQTe>h9FΈ՚g^mj+6u耢]{꾢]i~ 5kNqj>L|`Fdv^kjf-hk M6ih^l}.j&jfv<$.lVtmmvH~msnm>j\J`kmlkEҢ ޻mnnVh~mNlnj@P5 oV6f,n(cnFo>>3~ nnopi6EOPβp7nps$Ȑt'sBr2Ct_$jXOv,w*WMtآDrPtbHuQtCt?V'Ru_Mu@tOUuEI o4'[agPr\uZk_oNmO*tW(uGdkth,vcviqsFpqfs+ twmwswiH{v` /B%v|'|x?}s~iox7?xG@x?}QgpFxB9wTqvgtv xwx?o7lyʟyOy6g/y/z_uxOpV9zdzߋ`ߗzyv&z{xluO w{7{wzTlgx l{_g&|(|tGtWyxW|}W|wxtGum'tW~}W77|fo_v?|~|/~w?X?~||w'~ A`xD& Cah>Eb#qv%!G#1<5#I$t.ƦZuPzD&I&I.'g|5V)ժ^cTZ"g=zQonU[IA﷼"=?&-PVPeqn}gsJ$;-;3 j5K1ۥ {}mxW }entwGE4~_'nExZ>-z}ZNǗw|L|/ܿ7f? o@@( ³<p\AS{9; Ő9{53oQ *q/pF$m%q?I,72_* Đ&HJl(D*KrDޱѓK8J#3E3TϦ,BB8\Q!4Pr LKS JUE9WK5uS XtEC'UQudRR[fUWcٵfؖMAO׏yRIov2muDv͵kږlYw9w h+WM`!=aј]y ىۗ-]Hꬵ,[GcCA/V-c8,ɛu1mq}4Wgܑng9j6ujj麚q)P˔NɔŹUM[&Îhۺ[:ߡF&k{'f63NX~p&*sT<۶d|ٳ۴ŝn WOqfnwp%:mݟhr}_us}x!q\]F>ME},T0=x|{[k}guu/~?^N1/!Զ[KcmPg>SЁu4S ܟi/G ۑvOWma~. R oo ;a4O"mp=WG`} ė ^,Lx&_Sw0h1 \z<'R|њ3(YsӁ =B ɣlzp|H[Qv?`X1Z6HhQO20'<(I2dHqd>2ʉ%$PTE`Y5Sˈ*l0]I 0$b~#r(੧LIx5&\̙.M8lgŦ7tPs· ҍktYI+_Lil|#И%*Y]re\W֕\Ѻcq5JEMkؙĭ\WVIә_D6ǚoku3[bwڂhEwfh-6@hRx^2Rq^`Y6vIJ?\;pU9g-`a1<|oKsnooO<+źw3[ss8Lm7hbyyȲXÝNڹO}czk;wW=+RvNzM}G轟vUOw?y3}Syoeյę-߫Q#La]NFR7q'|0OC9χPo[rGhO_ݞ Y_~0ʓ/,VL0\5/=nG/ 7|OnOذOx\0p)h:&eFk ,kP00Cu)bodEroR oby:PМ"p}}k OprjE PVʄ PCpY S N n  tI/_ ;O eQ0 dP_HtP=!qToq,S;q 1${3tYo 41Eqk01}C / @yHЃщ1E _3kqO-hJjq1P0EڬqqIE =1wyd"Q 2! r q;!2 "/QQ "R $2U"!r- R91a"g&/S'1&%?%&E&9)n2r)2wr)!G#r+,22{*/%r+.R)(#a*ҁ--.+rI1 -R'/rG//*0q1/0A0G3zfSs"}sAQ2b 53*p44!rO"dl7 /69(70u-47.Gмt_2H}:. j3leӒC%'he>f3vc=ӜsXs% ?6г>E31ށ}31<-Y=o,@#KBѪ\'х?~!C/PnetK&T7=H;sG5( 6EC'ءtjdt&HHmAT-3;4460Fg;IO]GGLAn+?πT=yAC%I 8M3\LLԼ9S;ԾqgMtqL4Ύ #?()@ӍT( U5CUszQoTAB 4 6rmJrgQ/ >]K>>uqoy5g,\xT |?7P}og;=_XX%k Wu K/_SiEΟV T}Ŝ__߯_#қ1_KOM;TYN?)Z\3@X4 Bd A8t^1F~A!E")$FG)JtAfs o3N'ɦ BZLa5 ^Yz~aW++4d=:^Lju29vOn+灟_pTXV a0>+!29XS9.a2^ZjDSlJmZ ρ4tU>lzv_W{ƻx--F/ذ8N,D/%KԜޒM*SP 2 W83st:=tS49JU+BJuTU30%}XQ-o4*pQ9OJ;hDD jMCvnSE4;VUteY5lVn*M?_F7%kQsSM="Wu u%Iշ5oqXT+_v[Cx6#~MCU(Oj1c`7i5tjѵe M*]>>Vehcmda?u@bFi|qL:9eF]5wU;y>Xln'8>+h6eF/~7sodeW=0R FXzNxUk A TE {o+Gau:6ߝ^Dži}!ѹ|?|7qE}?w~?~r7? 1:H`4&@ F A8)`}Z A9`l:BI a4' t/AXX7C Y-%D8b3#8Ɲb6~TGF)E7Y"ͽb_v%u}gTa9G3DW=K+8gZ mљ`3ƞǓThvEHi7Gulm 7b|QBԘV\Iĩp}9i-eϲHcby=-4Ǚ2\9bdoMvfLכeLW&j%SBK9Y)띛SuNI# lN)T#L̞5?gMÙ6$кChm :Q:)5fQE/QEIi5'RYK`*ƙS8 L)7juOi?]tT:QMB&T@@ endstream endobj 1542 0 obj << /Length 1543 0 R >> stream ̙ endstream endobj 1551 0 obj << /Length 3798 /Filter /FlateDecode >> stream x[ݓ۶B}:g:S糗N$,)o>)]oA3K=}iPL `5iu#MB>QHEYN&|Zo=O:Z|dvWR9 lhc4MϸKZ*=T$lR6w@fՀy*7K.%̷[RICyC1Vۖ,= [SݒC_ejpsJd9u`K9Ʃ41ld$p{KQu4>>5$/"IUykF \.X0Dn'?NNmOmzYqn -앆Z@*"Kv236 7ׯNJҴ#6~hC*աv+I:/;\nf~l])88C7d(79*BycfU>m̑+ǸfWMKCf{*J7P .墙6M/%K6 w_iҬy%?:Ӂ-kћW=&bFyq5*I'k]^wV\1 M_4}~@2"_iivxkL@,7!CPop &ܽ"|O1eѼ@:7x,)Ls]UyW&Ș8/$<SzB<Z,20?< o~6.)'BWxj~XG7wMNlt#?|>#/)F'c7 Ki$U0퇦K/L"G Ɋ CWTUwE(]%El+6MEƮ.iosG{IwYa6ʦP'=2$P(3sa/tBy}pJ8M\Fg5X@20>*sΎHD TSH F1CZӧIqn:>s68L3 {-6c?LbG `;!pd Uclcg7BڌZj'ˏL\2  ArM[@Hd)0a]bp|CF{k=HkPa\@{տ|/sw.:y(p2Dә ,X2WK`"^$jTʃv<L "t ,DvãܴTiyME5iuW˵i ; l ti{HS@СC`Ye0Bl}v7Tt &i `l<أ՘S, ZI*JHTܼyEMDk ubdn!?Xk ))9D:DU0ѰCլ%i`c ~2 zBY/w1,R1acƳ΃n€I ?ܴڛﳽa9Kw!>^,`xJ#JF{dVkSIhD`nE1ke ^ *ݢy/]=##5Qܻ_%|7xUޕ]û}^Vu3NBr}/ vHj8BZcs1t6~8_/(.uVv%`I%%}yf!vuYF"1or$lk7rP/hYg'}X43IU*$[T}Ry,!Sv!̼H%ql-dMo2D&|Rg &zG&VTmA6Qnɰ<9tkIRWá1o0| qyF\NĮPP%-mjm9P(O]&a.7zUNCSjb4BB;KC`#M}? z}k.\32×&I@@QLOB{WhD)ň}G!;pF81&Xs`VZ+˹pyTlAh{&ݤu#z/b)g|%!k8ل'O@^9 1ᮏO9eOi9wɁ+s|}qㇶӳ+^mVU.YdP#!RDnH/z ˢ˅}B`+Z wd}A޴ uYzH|w^2~w!Bok}m:o(n"P8@.EsB~٧A^(dn D ?ldD*STc8d(3C*oigKGbo[yB]j78ɜHldVT gܪ5`DCg LC{֦pDqgo\/콶Ջѣ-rjH/8LcƘ퇚U4v%KlCN+!q{8^4)W/fsHkg`9SWWbZɄÄ{ cc8O<GJ*11lںg;2ypntV_߼^, k3z8R)ne$Uͩ{-ǾaϾa6| bЃVzw5f@/wIϫYCSm=!ʾJFZ!o$aJ &ǞOsjgf- c=L-hloJN<,6`缩&59\|$-i>-VҜyt|]$\?-,X'uMuT7OxFǿcLh50 cv endstream endobj 1575 0 obj << /Length 2487 /Filter /FlateDecode >> stream xks۸5#Hdf!wiR_wM>f|X$6}w %ҔuDžwX9k9~:;Ǚrb/VB9W+G*Ož s8O6M٧:t"V>B"2f F9=x㞳?]}9},gןqȭ#9`;gΘe=μ^Kf\e5[>sMJ].AbmXB1&:FߗevdUql"KzrfAl<ՓfI,gnZiNԶeVm[70{cWR'eƛ-$5P.o׋br,D$^)M=<0C=k5!\Ut,z "YBl봡A/nrl^nR]V=]ۤvFN6l{7Ag `sWx7P&\ȟX;n[yQpk%I- ܀z_JiM/"Iw\5lb^D^6sHf\ (nFHVUZ4Tȇ: ٹnG(,rF̗n:ӣ3qPt Db"=܍ŕE9ҽf?:J3PdM n LWKmEDB7+c̳KnDlY͔FzZAvF}t+:xGhDZaH":C}}E(Sj3 6tYebvK 1Ɖ)f@kW}@4"Lɏ4g8 05coiԃ$mm iS0Ed"SИGAE1#OꈘD!sˣ{ҋY=%}$*>ep2V_X\_^J]܋oh~AҰ`:I2냇tNj2V*Ō $OiA{:m\W7:ly-$s|G ::4)!7$p0`)4hfcny='zә>+4e%ݞ-82OӸS#?hxQ]}o9g1pgy6v*Je7-Փ?Ogx)<9OuӬ_gy5ݞv4ǯ҇M\(wx[Kxej8tQd|54|/dU \pD 8‹ةRgu`^O@1.Bi2u_NpKg;S^^ @ UclÝYoW ZF΃9cs1WpxyOn_20#)njM9hM~SVByr/\z2T/Cg3{%h,[U068*ȵ]>I=h4 UscW`Ϧ$"2mB#]`Ծ/@ƴDROmvM@} '涏 ݾW/.Z1s`{K&1:6[/ { ]υm ipy^gE5zӍbF*>1p54hK]܆43m'd+Zyi%mthg8,ll_נhȤEߦ]+ .^Ḧ́:80ш2~"r5S^z"PԶTt '?͆^wQm{[vGƮNRC.2+2+f,lTuף`X$H[oJsQ?Ƽb(BRg|u >QOt+h^u)-6(dH vfr^庶Xn7rC|\C"R[nz3剶: }؟5SoYu>k9ɮj<:{5MxPڿ*ʸYgy[JpǕz|`䧖 C/U#ϫ)ay0>>VJ:!+2D ~Ҡ }T T3wUHR?Ϫ] endstream endobj 1588 0 obj << /Length 2649 /Filter /FlateDecode >> stream x][s۸~[+tfrlI/v&xh5+^N|ڲc i|9ࡃ go^=Ŷ2sf[sE"ʀu J5zk{ýi3rond",>} #Uvٵ\d`DYnه4ɫ̴B{A;NюӘXvoʶU:٧xT7ՕX׫?uIfӵ)6 1u3JFUOО=]:+,>Lk>l^4p1{z[:;+>)0Acpue#?^?MŢV#VcZ"ځ&qmuQ}QJַuy6٘+08%9ojkٴ\Z=}Srv-92g|\OKb6)/G'cc&)/h?/>fz;_wh ~ËYNFg_X`WzcKE;{Ϧ3gq|%A]D0nДռu{srR[d|q?;ioCLHc #JxFV:kdsnz㚒uP|7 ׳dHX9T?9zZ&*7f\~M/M03wt81TpƊ&G.@XRc9szLiySW~1RT&_!7mfF0bQnNnY-/n ԏk3g,DD5 o'&#>Vgbv]ic喹.TtHj&0Q40ֵxDr2c@c jJ~=Bw`y}>$kЙgB%.pM&L6FR#Iz2/N;Ml2 T aɆBB7Av;Q~:zÆѤLuXb5uU;2naCʅ|l)3į=z^Gxv C8)i?H'`Q s97ǝQd?mUy0(]{Ļ]b uox, \f}҅I$@9HP.힜UUηE$wN2 }|`1rE*m򢘯&*"u N2}|`1"2LDlm@#$342lB%~$uM_1*.vsfDJ$3 p՛;]6rO}5N6bxq>ɲuqUrx r!v2||t`1){KY*RvFK"]L( l$R"EzΪ.Jx #wd29||`1rNCܺl^Wspa2E||"`1Ժ.uѣ*#.L&L6""#lR۬& :e = kyd1=:-M7m I \ 9tF0٘1ek!.pNTL6Fj>0]9 wAr2`11,v۪ &4>>P0و= ڨML6b?Ѓ>H$ԃ* #(aSg*?ީ4D)e">w ۇʅɼzlQM Nd㲙m;F  0(PM؃6O&\#U݇~N)QP(3(EAC.uHL6F?.Q.CSdFF14$!ql=E ML t񁺃 .*A)dF6RZ#ӭżɄʁHRL?B=Q.L l&]Bdj@5dcPtJ~Z{0">>P0E$()d@d#1c1^kZ-'|"lD5œ?Z=a.nNTL6FVibd2@d#*' TEɄ:ADrDr~R{]̭||_8b~1%(Ƈ jh^f?Qf\}xF!Im7Ojbۭz endstream endobj 1504 0 obj << /Type /ObjStm /N 100 /First 973 /Length 2187 /Filter /FlateDecode >> stream xZQs ~ׯc`.Iy㹙r 2kqE.b1FGHK5P#i#F)؟mbJ@Qq86AI bJ,FaJKqX .qTK9GK/QR)sdQ4o6I $/,z`*o+ͣ8dRabR4RL3CZ{x[m(KTlqrjk9ں7s0,e#`VF CgF@&!`(aGЦv6svmxfq4e-0Go9''bqI$e $A5+ 7K@5euv2CyP43fmljc,1L&ڼ@ YRJ0-|u%E0&2>lRinPq*m/[_6y$xK XB 5 n据#qUt&G6ic6Bx͢RkO]U?~. (?tgbXa{_.^?w,T8R' q{;wUXi _@䁐FOM{9_\J8Нv?tnO&s7 WXIsR/K8{q|&^Lm٩{w]'?~zSNzF"aHE 9oby=|tڔ׎Z^;RwbGK|43G$r` haPxN2rFڇh!nL-??,:Tu?o(FEۻrýI,Uis o3+$mw|W*"ux4@d oãq,&o[ɶJ՘i1鱏W{^>Ϗ1%SPSl0ae(QD "  2(R?lDz8CT2JZ^Lp14A)~>*CR/z+WJ :p7j$m_ >V-qݏs\ﳫEs7-`X!|"T[uͻGZ0|Xh#ߐW6ą#jEZexʨZѺs)xvO ՞k6gr0ɺ@@*~=`#5d13fg3</1TBG> -1?|kP) iݻƚ9G8;[^-2s/,NN.<./K`x=;Xn/ܳ,l?!Q#gA͌q4u;?Φُ/Ȏ'Q%J ImBCň:K*+I Ă(GpC,ѫ Ph;h5Cu]u]$b^'22c(4YcF}E:Rr)-F1[dQ&~-_ia޴#[i{$7e)&n/Q2P^Pω #TB)WxU候gf7(P"x@2\aa+~))pA~PS*77uJu) (`۵Rx*{B}zU:YTF2 qh㘹͑ih$/ F2Gmu(fJc7PPֱ L)x <9\ G2=/;v)a7,vbpVKy]idщ]*&dv= 矮b_|5 h((Q;#LKh| péeGZ!n[pKl5; o0rǰ̨Xf$Wژ{62Wo72]dFG#3̞s\p]SvFnZ⪝`:ͦEje)Piz5O*t"[nD_7"p*dxEX[ldFUF,v[Čv)llwq+7 endstream endobj 1660 0 obj << /Length 2682 /Filter /FlateDecode >> stream x\mFEH ݀ss)X+Yd&x~avf!\t+_fu7oN"NsqG< c@eix8!$ar`A^#1o`<ȇsŇIG#? {9r08/VSqX;"Ψ,)!btԙ|)req뭣N/P BD uFP+$.o2 nJu>\qݤv0Gv]`E9tLX+;&:⚶?4t*4@2И-Vv 4Si9O~1؄ ۔oilkegBac_8f+fx404m\"F#N=Tf|K쭕=z _0a'Qˡ2oSP!DTd sWon߽~x=}IY\N(tG6SGX+;#BHEFbzK[M. NU|KԭYA^wIţV&^ʦ|K+[+;'(TU;-n6]cU.)kegp]G \7Yjå=ogl{eg$Ek`XʿP2[d1XR٬ dY(xKLlUC@#?zMf鄴6nW'㪸\ jS%3!Ę=s SSX+;')3?o F4[h}% ԗ〉rx1LY+;?`QebF6[ZbF % 1 p1[b? 'G]vVWvQ8!?GTJ'>y(T/zKys7+#w]uNbݶZvE+fE\Q:j:3}\pyV'Eɶ.nY'w+ K0W!͛6/=aWڢK8%qQmՠw;j>|#/kՏS߲:nŘ q 37Uۼ*UϦzD9'?p#1էQ?Ur_;BѿbL ڋ`pk^yꇺ( :Jpj-EwX\%Վ& {^A^@&"IU ]sRX:tz 2iZ+;%q63>K`Dx٣% =r|;oWv7z!G!B鑷n |}}!cb&`|@%4΁F,ALo9j܎/wdҷP N93caW-]6c\N*o$g33%CED}X-VS:@#X-TL'~q54Jj|_x #/1ȷZ9I ,{rUMG!.7ȷ4)>E~z})r/-kGb$8塚1ݓaLxK;۪:ǍaXxS#z݌ (ݴJ]V堁n$IW]|Uu]eJD 1(EȊ!>z Q1nc`A':Z]y!q߈;WEQ{Qej&;y)4}P"oZu&(::Hz=VMʬP†cvU>G#lysxXIW ъ.S50\0G ."$9Pzī|jSd?MNG&gOHb03594ߔ5Q BO&:8K6 YW]U2br\Uo]:htQkˀ8͟⎌tLxpY-J6'R\^>$Eh'D`nEBUJ#X%>uöRuVT'5!ւt}ĎC;vթТ\شCk-W7}Ի]U{Suu5M4`u%R1fŸĻLB0CA܋_2uʐ'<ÔQ> y]lotRZ> stream xX]oTG }_1Pߙ=U@HFyaEQ. N(,*c{P:l:,{v6aaO5[N36fw\':k ҙdA2J˩v5ǵ:Spg_[ l!yi%t ` Kv&)?H]uț,LB,i"ul)g `66<b F/T6Ԃ^ :plqQ24ikzy0f@Ej͊ZP(yTQCڜld[=?MϿOȶCPw__lw01pT8Ob!#]cIHPL1pSph \Zk \ Y%h,sRAJd &N8np4fDi 'RrFT$3 L% 4s*# A9aK#DA0+W!AN0 '+I rRg! LI:TdK ,쌍Q/A1_1p3IL`hSDЬAN0lAN05PANL<ک`Qa&L:ApV9_xh;<*8K²۲\[W-jy=> stream x\[~_!l.^%I,,vwP.[,dQ俗)%69H#s9L"Ƒ"qtX bADcEn]Ouq:&5p%XPLg8k}@T>W?\ 60B#a|sOTmX۫\A#4SuxuL@i0U2C1F.:'lQ7F/a߱`3!V j AFT"}=H(-l"-ibWWܼsX(z'yž!/CȠ⚰-Ar&lpYgYa2Cg|y>R,mS緻ƹgZZy̲Cެ3im+WDKl]4uVf[-\-ӊ\ٵE;ۇKyUu >l'U#H-==S3˜\v< vDtYG*%_aϨRy<В^9ȵ-"­ = &!C@I'Ž^N6K\_lr^cmyP?ţYDH>ziZDeUNy,GJZؖJXAı OwN(M- =W3(U8=GmNLp J kȐe=c7dx {dH- 85u2XVEv?fu7 1tB 0S>A:-Wm>n[ 4]2紭vN \6BXNY^Liº~"-@2Ĕ앜eV ,AgIpkK|OKŒcy ǎ\Yױ)c\1|SՖ\mE N?͓Q=xO6Y"/qGLWfߜ_?~|o0oJeBs]4GqhT츏i5d]#I.nMb]sMc  m뀱ۿ Q)ЏR\ra54y[:+ @amK5l0y kL(@Ĭg姏l(}ϲv*B^T6S.*<{Uj+`z{[XPo[[GK,&}$:}>BuQG3Κ.ڐcCn b祉`2XI.v $91CTflFV'ח^Ha*qv 3`foa] AV$Rc3n8,__RDtԥg4G!-w}|Oˌ b@c+B|EKj4.,S`{[XU!4/S]=ZU쩆:I Fuߓj_aDHݒ<"ӈpߏp2V#IyĘqH:U҅grC/H.uYe%ŏ_>.?IG|Y*] W= [XOiiڬ9$Ȅa0=5)uPDŽ$0u}|Ouȹ )G&Dgԗ."$\<_L QW3q'##W = &!L0}|O2uI! /,^L~wzťzX,)~'!%}|O2u ]X/{2+/WpB$셙%$/ `d=&lGt߹np<2$n3l: vn_Rg!ą9WhlOOz[Mܫ?]]tcpR!vB~流1[ J{ *EVlS]7y1s $2`:#N9Eo&{cͻ.{Lv 2"`{z63,(r057y>[3磥|{Kcka+a %@quO^Τ홍E1miϗ/I^l]L|=?dC-Cõ8(_kTB9_s5<3sk]_eeZEeI1X4*k5M&or!*">itO^]fkYyVOrIPF3ѣYP)R?/$K&ܪvDHTV|Y5R$8&f%3[l*1"QФ]J.׹і:3eKٽ:33 HjHWM^f[-Q{ c 9`Vge-gc{7S.[7 endstream endobj 1769 0 obj << /Length 3278 /Filter /FlateDecode >> stream x\ms_IfZsK%i&KCĉD*$e%h0d\<.H{k{o^޻ c .^;f}%G^&Ga"FX3 ~,/Wa&p%?b/s_yq5#w'Q?F#ƅ<žmPyD{]snE h}#;!rG&nk)V[1\O(ԕ{dn 8hb]GMw󖮳:⹈7Ӧ岙7U֫/%fo J!6wE2#xJ.C=$7\&˅΄*)(q]` v$BZxj(FfTŪbj"_4/%\ nIq)ڔ wb=Ab v$HBF.T==V[Ͼ%K`GXѤv/O/M=bz-= vOGz-a v@^G(rg!NbBy=-sm{B<6;]aTfyh~OOCP~rqpangR`GH b.z,HC>qpnתgߒO[#|־-|.&8]QڳoG5˔8F,\QZůBgcwtv[i v(B> ѹKͯ&t$vѳoɦ3Qٷt5B;Lʉ`f=!˯:]OS$_ ӭ0׼jC#_o f\3Δߵo|kS9j_6cPg.=)sRU'L]R;EʾL&j|1ϔwEi"n˟6=u^̧Ι:-i v:,j>Τ~Io+g3Nr9<xu,5y5ϰ1ΈjhikR`hRD~K2Jw d<9r䅴c[FvٙX- rC;|g`D%z{ds]fƒ(!EQü}bz4Rͻ3u[em(n~xߦ ϙ:-]g $NH\PGvUC"]YrFi]YB|Fv׆US ᪶wFH׾%!`w(-7o?m~^T^|U:kߒkSx/'3)l0Bnogߒ kS`aB;ԥK{Y*U3-;?x?e%X,˙-m v$!bnc<d=sV;*ə3-a vJA9)hLes]$}Jg<'^2ɣ?|l_'5yw#n'KDUD޵o)rkSDN|iuXG46ƪ,tQ׾%G`G qL+#U]׼묡Nbxǥq(?Wcn"xп( u endstream endobj 1699 0 obj << /Type /ObjStm /N 100 /First 983 /Length 1654 /Filter /FlateDecode >> stream xY[o\5~ϯ#<\lR*T5E>[%|3 lf;쩤2stP=ZN~wO-_n.~]]pv|uV4>]GEQK<ȴ>M7?}j}~|z||7<<[?7 RTo4@#hO8N>>٬wgoϾXϟfys 4vZ<.~\&™lj L$R?, dqlmĿ92'4?3`挶eLך %0.%3cf10|"h10?O %k448kFlM;.(YOZA 'j:K DU%r\f'R9W D1z<[n5LeIKpuydA0Aq WA6 sOlQ %?fL*ldsq :悠S]vSYNi1!+vwDt 6\z) !jIsc0 Ϣ6F_ t#([zQ ~;l/EhkZ^@?6n WnT%jHџOkl-TZ֭//?zڕk9o6AaP4RUN??Xg({lTwR}CLk`#{*6?]6VX*dh1MTaEi~BдtҼa(`{Wh̠h/ߣ_Eq>F+]98 J41>`9VQ!Z'_r endstream endobj 1835 0 obj << /Length 3198 /Filter /FlateDecode >> stream x\m>#{h(.{ًr\&am4xInEʇ]vuuuSo`mm-ꏷW7p۷$[K̗Hܺ][_d^+jEj/X:Lr~tpqCI\tWl7p`է϶ϾlzR{Kp9_l-ͤ!^msvY`{VryPZU&,WkɻCvhttaɄ\C)8]]hݹћOw]u7Z<򟨌*֢vV]w۬XE]Qwd=EI{O\?4>}_pb-P$sx]7Y1xeo4=e/}^[31_yy˪Y]\r|?Q)c/ Rf *?YU\Xrʦr޿ZWP'8u'ZwCrys}lΊNZlѝi.p =\JgRD MvP @0Wáp6tOTa/d3W:g dI9P' ;&;6\>& MlvhŽ-PSZǻqbc)+>d.O3taGUȐ .Kzp{Xd/l+N-NjrsVe "Fc6tOda`& 0򿅘;@u/!~"`:/ μ /y'#3̈́> ٰ' ;Ɗ`‘&j~.WM~O0(W/BP1r'"gC#% \@NUڣd6tOTa/p7 *ٔ?Qy]Cp}fX`K.GY*zlYoO^ ?S=4M8;2Ț.ʛ,V(j'eR7e~:ԓTSϥi, , 8z!)f(a~+<@7^?9%KUєZl(iP5Ѫbe-4XX4Ӽnj!]>ҕXpk9@X >#7MUTLnE|/V,a<ި:c:}T0*\See/Mu+։[T-/`$%7 ZB]D}EJj 1&xt2"ݎu2/F@uMpnz+Z2$ƫ>`JT֩N]4Яҷq QMlHeW?! s_{SD_C2>[%EFiH(`$.)fX=[»yy<YDfP?aL*]S5tpiVQD-HХJ@*]uʪBcw&6pIT`,M x _E -u ΁= _f.4Zž=}Ƅd;ZB:i]x紸&b-dS~Ik{^7e~$Pɬ*sl+ [cvdM<]7ڋsCW&MnjM҈~C,,,p2]@Y#tzuCuBN`0sGEZ$|tzy'Ô!`2K+g,yVybƾHZ%kw& 3T(Мɢj$c-Β'f™vQRGypǓ5ZAǺK0}>Uk|k/OE2'=&|hshENӊ~B + t*ڧ6 옴o jRյ@GT9L3aV:Ά_ _OeU4A.1݁W-/{VS*$p!_,3@q!+ V1U@TT3DPl]>?QLX6 uy=iSq%Mms˵Y2Xz%ݔXT5NjAq>jP<7=U~^lj'}AkuqJOCJUåeyӁFnw)*ky2tR7 P n- {QאPaW`LV:IfNxz\LNQ&!)'>>=Hu0M±i2Mh>Bh`.SJUuYy9hDŽ[E[,֪?S5MR2mQ~8m,pt=Q!,rU > stream x\[~_ %Nc{cǗ!vjiEq*=F#iԃ|߹5 <՗WBzԛnfC^f~>ݮg|'hhѮQ $t~\r׷W 3x 3,]pFn'Qv:{w+k ]ϔFvc"|ЉG|eHiRV@;ezp%8RVEWu!|KJ=^iy! l%]GR.S-uOUF}*O x\/-؀seUyQv0ؐg,i_AYlgjkpR,oi.sX~EBNs \S[y]-rdyw,̉27L%ۻJMdЕB|A0xmAEؒF_&&rduq{qSs'L4Wf)w՗r(r =cQ>1 q "| Y y7D;U>**$|OY|WY^zONʤJ wjr`isQhS9m# >IS%og1MUTe0#PQEȉBV`96{-(pvHま`.c'kmSg?\"[| 4u"e($ 6 D9:"  }(RAZL%`OP} "0.kЅ%:Mt9 8"8uD(L0 Du^61DBlSܖb[(XJDZHm By (KH~-sL]ڶ6:\DY֢$ֻ ͘-}w~xx|2(i{KoG37p@(bDDR<ޓT]sIcR#h8:ǾȷE{EK24*?H(:]8%%]%8HgH MP愒Vn(~L15(b~K\Δ ·ǁE v`GORåqBrI~ ؝qCP@-ws! ( Y!fセ#lxS#(DjY09ñ,0|e%L),*lOA, Tuz1\Nq~<2ǧ3k7rB~< Ky8h 4lm*OnUMI/=i!zQ%%7͆j|MO*7ÿ#2.f*^. ejkef(Z@몙Oω Ѹ[đCLBmR\h V=L]?U(Y-K۫RIۉLEB V *.q'!EcFV&])9 RR6=^.ZǃUynRH.,euFP]pEke/[ % ϪR/OT 4p~(IEȒb` (R4UEeUi*X!ƓBG T'.Z+;BCbmv8GL6%{:!T>CoNT#hځNN <G{Ma>:-`IY|s;DʖPe񷓕EsX//_4bk6y/\UMF|KX+;&!@s36%+|sƷCR?ajgSdlʷd#'_Oޜo/sŮ7n1u=$T.tzO%լ5aaBl[.Z`ʷZQ>b2d-VvLl{$Ggxmtaz`KiHM`ғo{e4ilR/m|zp4p&+keGA0Rh+OqL&@W%fـ]yJ '9]m ]TV,ț *ɠʷZQp ^8P Lړӕo {zx2u[o2e1'3FW1l=$)}/B졟]ƻ2MVCydlZKaxK22^asrxU>4X>ԾIEWcU=OF|K"*;TCʗɥmoNm3ʨrSϥ{e(>$Na$/IjxٓoKkeO.P7QpϷuGOr;y]yf4(KL1]c{hq"c |KxR#]bkىɐʷDZ1x ŋ)ٲ>k` |-z:P[Bb@8En\ƀ0MՓo g@p!;SO׿|~ B|Y hӭ[a2e1n%'ʞ)H24߹3ǯN=x;Uw_!!0Pp~qjc'ٺJ]T~(z;;~{ɯt6 endstream endobj 1823 0 obj << /Type /ObjStm /N 100 /First 973 /Length 1682 /Filter /FlateDecode >> stream xXMoG W19hv8$08 h"NFm)$}Y)AYRK)@-Qk}s  T-4,(!!iHZ`$5JA$}a(!-BBJ* I I j)agK_f 34d%6.PULJ ;ٶBNb[x-.TԐe7ƛ&xVŴ >d.!cڐI5PX1Y@# ti3CW1 |'[K y VhBؿ`W`n,lTRa `{إӐ!) Fj 1_L V g*:Zj T,ncmwF1hWmC%t:dQiȠGhaQ+An0qLN9 d-LNNkNJHjdqR?DnNJ(k5$JqRB&'%=GOyZna^!w1~0=]aS:^Nprj1Puչ8D!;Ľv X6|sZN^ѯͻÇq7j1lBrGBM%] Gif8fWojnHV;bA 9=Y8AVj$9DUNf?Q%R-P$ĔA6 *7Ɉ-&~e͞alz4nK=賣H^* >Z/Llkl~u8ܗ9փ!1`M;y~9M7]l$\|Vlaw$z1%O2%Z+.N$ 9b Sa'ǚbAJDWԸܜ"~X9ErdV|PyUNN0ar-(C*x75;9Q>79(99QJ>~T9fttRm]֖ZڲkkˮNB51RT3fћsly>,7W:#YzŘlspffuPNՄߑѝ%7vݟIg^,epujoz.Ϯ]Aù[N˚; (oonFqS\`808@ltGfW0HFN,l)G9 14q[%;9ѵ89bMNNAWɹ6'l0}Q;9IA9]ddޝNRl"LIJƠC$%c!u1N;!sz ɿ9)o  .NJJ䤄38)!QBe)?Րd endstream endobj 1919 0 obj << /Length 2685 /Filter /FlateDecode >> stream x]]s۸}`3Vidvg;6K,Q [}⦝5$tu:}Gd-2[efTf7LH$ ˔d7v*/?|׌V%kFsfԂ5UzƽnpF~WlwF~?r e_ 12yy!yFRy"MF&+lދte? S, 5pNBҊQTYS`$^{~wK{$qC?ӏǗݾVa7כ:l`Web6n6dY†eXA6r{clȽ%_xmy0eӘ+XP FǷ$ Mr[BS8,_U,2l]vU&pǃ۟*rR%;PT#.Xtuky]j/v&eu0?.yԷ<"|bLW >>d(kLyt1LC:dB;ʚb u+`en'UW}y[L'e_An̑r'nPٍ%v"޾vP.MQ`r-L}ۧ/7=%v8KbQ' ŖB'+|XɁ4 ;Wj瓘T ʩb^Oyhj%zc !bIt}ƤKB`GHKf_jnY4V2oL ?gȦ5]:nA~!><0TcrA DOؓ;}<G_jN(lBJ#JGqnEZ5"Fۀ?J&#kwD%Kjj(فn)bBG5"8ai f n`1@1=Ο&S*&3`_T$L4B;C,>>0PJhî@jo͒΃J5 %T,udmDGS@&t+CrϺ&ؐ_tf9Yd vmT'K*FW&ƫ&3Ʌ #خgQTpguq3Fn00[|sr|;5Fd#*||| &`"%%2q,`čAZ'DZF"0IYgTO]4O =bd L6¿iSy/|SΏ_M<0Tc@).slk2}||@`~[02s<`2||Z`1jٿ_r/sg JvQq4mϭ DnF_Bꚙ K9lLaϾL`ڙd @dǘČ<Gz;vm=t+c^u-;YFxR8Ae g/Z/v QD&eO&L6FS˝ c||COPLXJaWN*]h>gE' %;P&\".Ʌf9[fӏ6 c=+eDgWB]tc' `1 $0D;&1@; }/aL6& CB׺~vmZ7Y 5d&!l"I̡}9Wx,Xe2]||.`PC¹ԓ:xuo4joT)RE[yLnSu_>Mٱ> ;.Ȩ\*݊!Yy)0ig>qò/ gI ŬB# r(T7m\EG2}|`1˛ow~=ӑenA,>>0`1$Ҋ>k\t[n$ &S:T Cڝy!H4E*w1}io*pJtUn5%nI,||`4K\1 c8KTL6DaB`% ~}2qkdz4o!t:"-6R%>,ad@󍉘Sъ"%ʭL6H+u"Q- jT6ktHu@A踧ʉpkd0> stream xڵ\_OAKZ+ (rݺKmRٝ=]=I*=?c[]dhZݿn1[{{=xHC~"׈xy}Y>'Iy1P>f[}!~q =n> a{R[B{}6RcęlS>pEABF%gy"sHjU[]t˿fS^!┻ MHQi0B9A<ІCC*Fw~s ]&((F]pvHa)$P)Qy kj'SF2\$#MLz+1ނ r}~(fd:wөCa"I9bSѫɱiǼ6f>!Ƴ]%vI%,;n"#΋W&4vkQ*O툟.WP3d Brj;Őq>u;W(PHb[?j&NMiH񪨯22s6Ic)~+6ߕYn9RId`wIJWc\'&/v*WvtY$rX4A2o"ƋKQ$l\<Hp[(1Y3_N?:-mh7/pTdg|aL8בd=zTL5@Ӥ{xmaz;t;6~ň 7}QBXfK/(k4q pnGJغPO}茝cb#!)^E>3L.G9 kf`\`7ۇ򷶦 "t5GSL&Q;*Y1mŶ>G܍$<ھ#zۋ1`b1UYn?:1*O~V۝@$RM^hw3z BNf.G{: ;ƠpŘ;t :6)Id&w4cL*F"nݲA0/ǿ~ÈM1j" i3@Ʉ5u;2,D|zqCfaG8鶾=v1DydwTd¶`'j( 8~н^׏az9a/(e$:"vUVT&"NHZ'H9MB \`[zدVZeшπ0k5V-bJ֒ko>![[0Jt{&iO6g}W[ϋCY>X=$`Ty~S<ۯaRЋY]zZ0nۙ?|[] p>NTF(tA#|_e)#3U5ÿGI7›[F+ +yʽRS3]YŬTD%3f& P?y8`JJ~2zH[.Clr1o73-YK%_HzK 86s궶 ߖkxdFE4{#HJĐƭ~(80OyDVNPb<wQ?E=U^ JU8@$j ߥ:WKBV9T%gWi͋U>Y;:8\40JyS?B=i Ey8cmMM H3YOW?T1OM36yn̗ib&Km!J`Mzm5 P?y"y8R '[!-0ecWu1_"uSM^sXM՜HMaL:HjNfY9~'ߟAlk>6 I@C%[H `0 Pv ˻qS9‡j(%hטL@[!]wG\)Q 5CZ'v;cPZ_ VǏB{|"T^er _=@;%=\hUiDSOpg2Cn*Z_] Nftei(]GX& -^ɦ\v=z0H`DL.` ZǀʜTDR.BQO+%>Jq(rƝΓYldʧǤ(ĦVH7>fؕJW >=y|pxz!( 07?3 4! }% .RK_mӃP|2H iH~4;ځ 4]>Xİqytu5c#YͲHs\؂IW4nUE%3GHv(cf~ endstream endobj 1916 0 obj << /Type /ObjStm /N 100 /First 975 /Length 1526 /Filter /FlateDecode >> stream xX[oTG ~_1{U@HT*&d#gP.P#*;c?{.N#CqbCSHE4Sȩ!פ B2j6M &5`Y5B7[A] aߣ,!B2LUY3.J 29 L960l1ln: +֦:]tKM%hU=^6vuce7] tzlkkT3'1$J` 6jMW YL6 6JSjbmѢ`` FφMJ&$P0БHnH2;C* 1cK 2)3 2&WcU>zG$$u df. %bY R߶!nH6Lb:Mؐ`+_A-d( W5XJ)ХCCE&t̼_MQXI /RjK$xiPq8vqx4O]ӓٕVnuXp Ga0=_مw>89_G05~7W\3'o‘zɌ>a G7{kZR%uHO"mdW\}El#K"44&ذ}3-{eʝPv';lӮÛ;}5=^\_gxnz:=:J6Ŝ" xSַmǭRM8ƈ:|oϷ,;ٜ]N`{ދ4Asp#yH+p6m67 "> stream x[ݓ۶B}@OcNƾ9O %Q:%RG_vŻ3mnD ؏.pl_wWgr v2iP)*.~ZXr +$Q\C,W^q_ /bsB ihF $<?^z=>0ljAq-~pԬmv}VtEˢl+lH!" VM+.܊'1JEv0s̖=.R4v1![#>k>[l$Ǚ옻luѴŦ V"W/y%"6 O04˪kOC,E78qca.bs›3&(c"`]l:ߴEUO4}ZlȻ5l|r8[w͗ s|d%>$o6V;d5Ze6p@ ]Y@qZU!N -d@r[1؁@ǚuT\3{B<<$ԇ b_YvjS@8-LVuNC {ENA=VfP&o[lFЏį]Cghk2¸m~ MYU')Eih@wz-۬( H-G0`5`ɨܘL~7d~f,wna% OD D*&,+3H^8Q xǟj-ӓ󶐹pM@UNdއY'ܠ[Y˼Ҋ})͛߾{o' $v&'#al {4ynUhg6͠rTI(H1ݮL+aVe>m;˶h t,ocvmDj"2F?ȱDLIak1nϷA'XiB[R?xF.T 뻃4&wrPaYan0*f, X8 \Haz5R*tY]]9%*U 43P OSn ԹȈO8轨/8т4 5Qy7Ff8& x4J=4yLa>xHבz6(L0 Ӯ.  (/X`_׊W/?>Uj$ؑ9EVT#Fvc ׎XaQNFΑx(غy%z88Dq>MUysۗB\-f:Lq/":L̙Y7e%b+]}yOwh!R3p 2.<@lںּ)()}SzR. km< I_̩ :ʇyMp?n;M9^2tVxgXt-1>ֹ6uͰuy.1nںҁx] R;"b OVmm PS 5 rv=?K6 O dm.x˜ata9 Q$}dB$*ۢ쪮[Nm rfBz#.]5VmF,jȫ~SXgCR _C@w_RJS]k [B/Bͨ2tr 0PAB5rWuLkA<q>Y0o΅$Mi~w6"SO<M/ ]L& sK5🼮5ҀrKԼ;̇ n P 3JHh;FNWV!'IrPlkFg"T^slHXt0?rـ]D7L<^L0E'P|5X}ޕwD|Z+}O<0[J!a Q0<<`FW ch@sc'FcǼ]sf܃B"B:<ę `{?U=b|{[&㊘ǹ}* jۑmVF oK-H!oE WK0sIO*ct7z3L ֍ɶ̿~&K߼{w7~;+x) p֧-&@*rԋ7onOW AvRnaTAJnVwKnֻ@#,^3 n*Ds5opa']^ag(a`k!ߙ\]^> stream xڵ[ݓ۶Bo<L86M'sCIıD*$])Ng=b/@v';p͛N*ܮ&A(ěD <#9]N>9)w2q3RGC(&tyC'ۛ?o$M`|Ý,a+$k$P^䷛޸KHFbΗ sx$qYse%vid6)LUCVYZ,iP,m>&f8:~=yS"m礱}Vjglx|j#U 5~˖l_B[F OwMyPa'84.d0L6HP %CG@UU* DˡTߓXR*0R-|12J%dL3$p0~uo؞yMMfX:WvW֒M$/fd5TNeh_S,z:{nyQ4TEs{^Zv ̀oQro]26-ҦfJ(Y?J=SO>j>9Og~&2=/IhҼ`t%@6a-R8YE\W鎺7)jJ\yyy0| Frmgf-T}Vh'UJE K/ /21!.WjY]|ޤSe<<ﮫP}4YX̓%ϳΚyxCź/f @] vtg@+J,F|ꭲ=X_V4MY HU԰mƟzGAn4Ȑkxi' э}X1_x,SHm@*Y`X4YUMy}=ܔq ]b,@_QZ]"E bcQVh6hGweEUPVd(T"H‡cJzND D")tZ&y6 R7M[K47CxUVG# 5!r;8BbAWJ9OVy~KʩiCA9H eܴZ\t~ Zq%C5g h;äw.ܽyn,H)"joN<WDvPEzCU-(x+np5RVa2OCN]FIs ua`DE@tƲXJm MNRq{ۏ? I}K>TzXGnR7(k$~dU+n{ņ&N:gQTr:dd:l$~0,уUY6 THg|vbgr\yHY.B]Fg ÎkdD0!d\$U!e[XA3[b&>66b>W 1g/+eI'Zb&&mbX&)eTT%GrJ_,XS]d<3hc&gvW|K8BcWHJj%9qHGWLyѕXi+HbI|2ID8ug1Ϸ6nxNq͵$#}5Stxk/6(6w9UZ04۹H0fBl]hRno+-7&?ik^ö\|#f L H`jq7]D=Pl0Kj͙2ۦGBb7qoOowHrVgPѩl[1]XDGBz0Yз3zF-ş1KH?}eq9OjyDIIُ@!4r0NMZG]H,NLt_\~Fr:+*_fQTՔ, 84”j6FX8 \b#,S%|'أ dA):BH+5 cF0׌#PcPb '[Pq,QwcCK5+UlY @(堲Rz=շ x\5h.`P)X6(j#bPU|OmAcX,M5(5b, 5ܺ\L_L75&QץIvƦO:c^Uj}QKsQyƊ-7#(l5@t|`s6Sq-s53lK| zC Ꞗr>%GO]廬(U$92=t1uiS~ d'v_y'X~⃡&q!N G14z;8VwxPs XW:-ɲѕ^;:Z@ٽg 3:/]et'MUǧ:_`W XDr*x&Ezuv"<'w_bP <3j8@%Ю)@ӣ@_F.}?Tx➻}=rϯ){"2/xc#~IJK2? Z' գ/>uOS_NB_ 텉rL%Km]u[wTb__a<\(A\sp6xhf07! endstream endobj 2144 0 obj << /Length 2702 /Filter /FlateDecode >> stream xڵ]s۸ݿR&FSr:M;}d( 9G>v߻.)ٲ<$b߻P\apvͯ,H{vYH.+W,(zɓŵP%WyeֻuW%\J>efB[ӌ1MŦ…jq4fCV8EE OESl"im[ɯQ2)(MVu_(Kۉ&҈cS)@wu5f bX}3𣿝_Ds݊X]鏵p&TϬzr:uV=VLث&k Su${p;ben[aU;V08aR8b$*Y'"R!p]Ig\c kmve@]8tifN8^.j33ydGldLC97yϬwdi]5U]^N};T (0 (zIxwx9rH};!uIdtguo4SE,RV(~=ދLk}.zWyMI⛾?8Z9(:k{vAlwM;k=c7뤳bQۋ6J֗_mVO#5z6.?}5UUo*3C \!DY(w~n*t+/o9o:wQ]sUc&r%ܬ,Hd07j#Ba[h,N<,%B[?k{o-^$Qt,q}d V,&<6Q 3SO[&.º'x]Gޑ]uS}xձYtt!o!ay|-p1 OOd4<늾kZ"Ȁ某3qjw ?i J|9UJn)#%RXsPSzzѢ٭ #̓ps0X- G4 <?[kKc/pzA7C۪iQt$IIwK9~'vM#^8v0AU&=x-{TËʊ*$!xU0EG:z- )xnmpfҟYn]D?0X|*Gl8 @?wpDi=cv Igгrg#l endstream endobj 2033 0 obj << /Type /ObjStm /N 100 /First 971 /Length 2683 /Filter /FlateDecode >> stream xZ]o[7}c`30 [`(, ukK$og(Qq\٦y)pxf.8φX)#8E{7!Ԟ`B=D_{D.`CH 2 {6,x.&,&e21>DƗ8z#I"mJ\_ xk_ymsD + I>50?Z\\Om%#W)+󒘘B 'B],V _5GJIHxC` abxl"h}]#'%s}vkCV0UAɳIR6L⢒ Kc\_aE` U`2J)lR{(=R uޒR2ܡ0XX\$zET1jo $@BQ{,SLj+i~(0ZRD+ru} : 5`k_F +<|> fP0,06&[A>4()MhUٱp4:?99<7oSvK30l 8GWo~[{gLX {m>ln'&5@ fOp$?lL|x-QҖH[w9U\d>٨%,Vԛ5G2)wux0CY.\/ ~],ܡ_-'xTN" K[B/-}KKߥwiird/$&$k=yӦ(6EiSxMoJ> /j޾Yxy >ǐzdd.9>Z^*!Kk;7[1aB.gPҵlZ/,eh䞢zzQZ-95sh%%DE?-~]4285eA2P9C"` !9zp1> stream xZKs6WR{LM[S[Y(HbE">2m%0tۋIPw}-bg`?88(\EpeYɇl/Vi\͜V\1Bz! 3{u!^$tiq E!G; ;+xηz F ~<|꣬ W,TYȺ0 c 0-B9= D8 .^%O}gR"x%͔DꏢP&YW.b༫wa{>H7Ϥ jF|_-Y\-֭Z "- ۃDN=y_ :H4Bj&hvܘHީOw6U<ْR{$El0OEDEX [#!2*,!C2Zd 1Elةt|Ўևg:矟?7ځm y71T Fϻ$5O uMCUd^IaM`^$&L]BT[7['ʞWIg:b t7K04 I_ٲic{f4JSDmܸ׸Z3I2bMriO_ m]Kiw`2:G(X K `3(r( XCvDbG+ M#ZAquQh7CU` WA/\puC6p RW-pj{p%Eapu1:C(\]d+ZvJ\FG =D II-¡q!Oh{k-΍|x˘)r–!lu>pQ 6 dCYY%v0: $EP!:Z ;)Uv&=*22&?GK4NqÑVx.84e}|~glC^ZrſxKAr+z/iҬj*n ro_:#C2%؜|Mq\]?vbppbΌ42Z7V쇘AmVk`3FQo` OZUۨv,?6[LZ3TJ>l^EC@  h ~*տ} EKc/>Ώ?vg%dV3Zdm#)wi 7f*zg!V+WyUVX=m@ 8qn&mVӪc8[3?RQQHBgҚ7kl}y$bdJzJkԮ?4e \ tӌZ̠."Qkl"'&?2 ɖ #f[vfՓgVsY7Lvwzgͫ)l&`d:5b_o="j8#zH9~'GY> ɜz*4b4ϑo\ n_nYFxY{ᴴX1[]+#JI_7+%,V_O$SEsk7<8KpkW_f&AGQ[ Ն endstream endobj 2188 0 obj << /Length 3100 /Filter /FlateDecode >> stream xڽZKs8W|39y73֦v&%)MA'~ D(ދI@Sۅx{ۋߤ/",<_"xrq^|\ثuzw\,BX; :6 etpyMFۋ/Y `No/>~kn.“޳Ň?.\%N4ii˕#N_T[~{iAgmeݪ]V+^V'q8痴ŇӤ)-"7@qWztdH, z-Jd`WXu7fKᵫ?ZY8ګ>_= #<;xwoo|ր^ nL.rb1R% %)XbnJtS]d~*W؎%|2eM( q$p8 H]#"d7l[|\I40}L`4xOaS,dlW82 mw/bQ&c^G O vـ gy(= ;iZpc[iBbD+coh-̽Jb-zGEU ׌p^\b[HP J0aMTj(2T`|#xCQU}!dYv֓ ;VKD MjJQ \54-‘nD+&.Ӣ."'og}ŵk Z.dNbw㷌3Wcq8J\T| v\hO9#I [h(9 n1!Q0GGL:.!eL䪢тM$[2Ol R/A:̡*O沈l8 lpdVd5Px7A\KvdU*\h!0:5}{r>.Q*+)g[Cv: Fv.;͒Ҫ-z2\Ò:˛"2i0%LTQQǯd]ix.F{nn%1`hm~i3Cj2'@\H4GQmʣC+֋OVؼS(dDT Bi-D2Wy0fDS\#49?҄Oq!P 渙I &0#ÒpGw9? !ԺP>rFבuk02GW!7VwSm4Q+I8H ӹIQBr((s{^z)774a8T:յ凂ϧrI$QMJ"Z'QF ]Jm^Ҧ!thL$K0^e\:XsW\y X:+CB ?I}e3zƅH_x4(Aŧ\ >y\(l &4X߄Kyׇ$j`< cl/̦5:޸aI(wPxEkWr-˅, OԪ" aT;PEnRZ430eda^pBGa[a+.~]WdpM6>!4G+TA?0*~ygԑ8e6EQàKUxt0E{}Bziˆ=~6 d8@CP7tYtzrY}2#xBP.fij:C𹰫J:\nrX[`MM_ᰭN!ަ~ޯ)c"p\>-,: }s͹ɣ9NhkgFi>NaS_wK}g U zӫPwrU@]mq 'H@,X\,|?-+C餆cD }V>+8vUhs+fgOZ=q$x/pn8)Z!ԏd̹,N*9VbdiD10$`|w: kWE$@xr] 9R.[PZv d)?MUc:Ÿ3C.P F ~¤úGwb&Q`RlܧW5HXhۈYc|~暠TS2|agptAЮE%_oV4x$R\pЀqvǥ}KrD Z8462׃82cnWOZ & r f/Uz0ß5kѬ<ˉotԅ?dY}reτ ٬d@|{qPҥLoҶ> stream x\[o~[b=;7}HI4m@ $KK#DjIj.33gxeSrv`3g %vA__WELbvQX1|lq^|:3:\D0Z 3Z!av 7<y۫W k&dX~.p%2"`pxW$̡-YE(#n$Q`ft(bsVҳQ|ڲyctO4debp{3Ĭ4U!Fx8B2fzmz^E2ͪq*)Xu|_3ksF~U_H#&ǴL4.Kwhg?H抄0ArWD$OV$ J(I})Iur,j6VQ3$ |(ʟٔEcPI"@lʟh^4" ,4ˮ^oLd0*]wI101DA4{~^!aR},O&Vr.<j8]!;h %hV];}`W,ՕR ]q?YK$*(YW*pl8ʟٔEcP%3FWDcLV͟jl}&\sK>͒J_JUϳ+"'+{ #"j I<\{gkWDΦ,*¢z=1YK|D3p&^I>oߏ_kƗ v\ɟ^ H1:[Fa-A٠ڕ?)0'b8m8pڅI, #;FlՋ_!砎.>ltّfd3]aI:e?<(W/:]}g8 31v:{iEc}ɁgCrWD$Ϧ,CR"| žƘ%n-Biw(":GGNBfg]t6tODde/A$T QeQ/.љDggWDpNUv1QG~!ouLb#ݥy2DQ>hy/P-lix>vK,[[S]]4NV(ϼpS%]fҽ]a ̇6t0 g>f0r2i FL )BPrp4;1Ôx)K?U݉`kYk I bMESSaH)fy_wC0]q{mͼ%*Kn_w˪8H-pAy:{ި~aCҕ<ZAX, `&/UXkq4ERA$4 q-WΠ]xo$_D ̡es\ujձԛ uZr]1iG6 ˴k :08l.,#X EJRDIL-yBGQ{]MKWOrss捒$ . V}BE!kvVaa!΂/:磻=]()[#@dޞ}z9d4g !e@Fֻ&C:VxS;[ekO"Ng`vg\,[wP|JGۻ5z5{҇^E~>;'U f0l5`Q\JR{ 38]{2.W?7sqHVS¡%n+wV$oc f' mWV8$iL1. AQ&oo smUɪȑELmr*4?ɛ$5 I,^JnaӘaf0ơiY5RS)=:&,ל.oJq(m-Eqvlz" ȝՀm ([abnmJ<uY[U>wޠ /~6e q) }Z꛼͵;.̓00rVw_lA=r5j}C 3E4'6fU:W늸O]( .:7 I_=Gw8wgtF@M:0`aѕ_sY/BQ73W ^SؕU'I Vuﯼ~[Cn.۔NA҂cBzn@ NPs_0lIKu]/] vV|1;^ XkKS X:T1TwL "" >ȈGAnnǖ0IXpz Uݲ4_;-) , 4.&pT /MW٣}(rKo[r8S(˴_b͋B<[۠'8%ǽ?Q9j[ EĪF ?ӅtڞmqUlߵu7'k}67\'7S茩"HߎQ RWPO8([~e–ަ=d.IslL;5\RLxڦ;b \6Up}NRfm-li;qS=4`փ:{]l1EBmX7TdC4U]Wvߍ,Xݗ}JD3܁J8 æ = W/\ 8$9-M8M9>w1\2_`iNݴ\ %8}k޽I1*Iwj'dOgB| :dCXt ы[&BBh[OKm,!#T*z)"z}PcDB0YŧKB' U}TEn_uhz3qi1bּkt^6n:~0qƲntB b#1ůW}:>ِu?+<:-1[C`QLå|:◮G2snhaɒ !rɦr}UWU4**0Tx ~s,LTW QH؝r`Mth :s72 ^?)HZ$b/W}0T@@e:(uRvXW,I}T jT6K--U+:z73/%O/gĢ endstream endobj 2159 0 obj << /Type /ObjStm /N 100 /First 997 /Length 2618 /Filter /FlateDecode >> stream xZQo7~c .9ɃQ M#wA7P[J$i}DImgl<˝% g!| *B4 bbB2 )BhbJmAʐ.y%:HQۢ7>FjG6nr&gmt,TaTJԻbV)b'rmÏPC:!~26d)/{ &$6!MTcHx"W<)PaOz1e}"{A#: X2.h/9K}`q3Ld&hqҩ\{GQHZRDskG):|BeL%XB/Y@'AFm):Lj0B02B*nd8mgS#&Q*]>ὓd}“I>T=&AJbrgX@qOs)BM ^,V+Kؔj4)9U=xs&Km0ul< 5KT7o[U7!xƒ+ꐤ\[0FmeS9:>>^||כbu/_o_~!W?_/}8yem]9لubYZVR#s|ltOz19nfu9\z#zPxCK:;Tz]{^GL@DG' ذ ]mDm"ڔ`iۈVT#UFP$49*0٠Ë́otZN?qHENa H/RoǤ neL/Xi[Z[U*=`57;ڳz\p֯t1{\83^RH7=>Qfuq{ zP[F~\t).qpZ*mRB>c=TjjSoG6*eL4d"I=vݶLE|*GQX.Th20Pe@̢|m76M endstream endobj 2304 0 obj << /Length 2621 /Filter /FlateDecode >> stream xZ[s~ׯ#9c!vةD̴; %}pi%R> s>. o2-RFB[haAI&;DP.qEݮ Fsaw$$w߾v8ygΘesP:AȪBmjKUfY[|wPkUiY`KS]N:`0+(Rص\ﱫ֖;Jl ȵ"VPj+2PU{h%A<Ǿ~*C5CCYDP'K(`GŖ\wF.8`Uyv-ܟL=d[-7,QՏ0zixcf bYmTXoΩ|3H >x(ф9٨95v= & ) q19c;'" "UFT,QhB7wnRStBBNfϣ !z7I:6&яp54ec !,\TLI,t`FaEݞNe,AfMlTlѺLƠE`kˋMں[)M+ZtSViLhUb#s" ie8%EἒA_$hv %8HFa$4 F`#(H Hέ?{ga$$mz ]0~%fbQxu~lFjUw| F_,gsq:9*0׹C'uA˚U=@QG(Y,^,̽']{}RYRnA*,4h!hLt0!%m8w`dJGh.y7(jŒ=v(#%tAjH;j5@7 V;6"fŽoK]g(PtJ Hb`0eU .to^64mwRWk+1PS5a+w8ԓHwtJ#7>oJo G\e[ pg2KޫnY_vF.Hq8_L:O0i(A&BR}F}EDTޙqͬlKDz¹+comnHִСzv.]_$^Tq.UDHwM$1V!-t-J mV:E(>]L؈JS 1fI,&IqQ$p0؍ˣH[=p'G]ǬA5vwyݟ #j#Y,g .X=#$&3$bLݼ)\F75?\EۇBյKw9f&phxIX_zWao65`iݴOuٻ]k3 e[ej5[ }6WW{3*ٽqi?>!/{M%`sjZg%{al|1f j~:L6FROS#U2u20/M/~vJZe{6`i.psTw5m-E4=,dJ*Ϟ|*y* \[ޔ2esPmo+鈇n."!4bpvhUܬ<$`=}-ZaL']>@$gYGhUny w> stream xڵrF]_} X%¸X$7TCpHNhf\Wy 3wYۇ߻NH4nFv8g._ʣܪo? vH;;c;=XL#zrʼnn⤋. 9 ";^·1ulϏ`//s0Θd@YЖ'TDUjTY0iL\kXb\CfQB{ZwA0|3SsWyB\=7Sg{^8A n}x06k'pFȈ{0V tCKVgi; -ORAT[BnbIusEFVU{jhd!ahHhf=gtI,MB 9g6hUhI-C |'mЈVA=Ne5#*dNuB|ĺ[FL}e'5F/z3Y p`F'rR-6%﬚ BnOj@> Pa}ꬴ$a-Y0cVQV.Xm/WWs1;vҡ/J|Z aG@k>,4E_xރERv DsF AQT(gWb+ 5C/"d <^׫d2:^""eR ax+X?mvQY0E30`cy'̦9wO8۷7o^]f7Pa\DVU7@#7gLx/ tUnQ`lN+n7:F[m2id \8y_VI̾ld!ت rcPKC^RgP&)ݰ<5TҞ$ h[d5Ю\+Y6Ƽ}w3.IjcQ4@ 4$w[LL+"4BByqdgl7O|?HLSo.BlƉx"Yu6b\9ڠf/:>+~2 nva0~|3"9lq8UFYMn HYc2ڒ-5c{mdv(ۘ,bU~ c{J6 RՒ21b(lڰ`g|TUqjlT 4ZMT^|1q|,;I%+kxįsTj (&2OAu je7ٲ j#yPn?j°~D6$g_|Q E/KjY5_^ml4w$leѨȕ_“K >HxbK * ) IRK##Ɖ w!nV9!F9ԸGC=8^a ;D_T@gjOjuB %j#PIEjXR44uUjdPƧm0&RZQp"s d-(xAdsD|*D QEW9 A"X'xᶥ/Y_I(xwt:# q0t5[6ؽ-Z! >:Y&ڦ.(O-'1IO4T h[LO \߼ZIO62Z#z˞/hYGĠ{ɤ#4zVOw'E]瞥\:&};|7GY}9ׇ^}Dj0NW15ޞ7Pc)YN|=uV 9BKƛp9|g32vjBOh/؛Kzf͓IHCdvEQ]œ:CI9x~zs^ w?/@uՑt8;?CJAqAX!8 kaDNRR"gѐ^+a?Y*̮,G1[]< Vkێ(zrzlPA^rzH:"6 C~ok\+A*M$TDŽIgʐK]+d/N yjav,1㝺Gvv?fNuh'S';:K endstream endobj 2360 0 obj << /Length 3402 /Filter /FlateDecode >> stream xڵ[Y6~_}F4ΓwM6T탓JQ"$L2+[߷5'8-.߼x#EH4fFn8X.;^qvH`v K/N#|wF$ ͻ" dhfG.oo~̵2tӀxBÅ]x pUwEdFtE{+ZU{ݪ& UPϛZ125u[v$sӼ׿RT%S65ա+*kZ54C0 G<4*R<;O:eE͌~-묮jw? 6kĆ6{+3]VNQ5ϪTJ=.F)S=<**{ߠK, ^Ia$ST!WY(YRMW^-m9;P^7d +,'ӂʜUL,tL:+ S@Y؝gt: '%A؀ KsA#Fժ\sJf&lt9?#TajDˍ`laQ٪EeܻՇԪl# 0OCi/SE<?-m:PGPPE)-./z./RB [O? P]7׭W{Qw;u%|Uv;kee Q0~,aCkesV 3n~~a"EtPz=y6~Qwh2B@:`"o'ؚĀ[zTemw_cp8nfR-Wrݬk?VWk&?{vs2mwsokqWp } O]ٷǰQEʑ ܐ!53U*ؖMgLdOg١8 *6.N쪨NJ+@CKg'94⣙hJQZLQbc AXe -!Ad-ASB  l6͜iW|jDhj`sljY1:Ku=~ ttO%Dsl9^&0>g m@:lO¶q@r)zUh 5??UqYw`f [B4klj )A<։j"Eb;Z>AD!ǪyyC=wN7RMp y].p؎_ue]c}2IVN合[BR ''Ec38PHe<Ʃ!I(zAvI4g8Y-)?Αdg5*k95mݭ[cOϫɞL{FY=z-|?{X!@?`i.j،_9'N>Fv",q-wF߾.ØV^0k ,\`~z)kAj3ASbHXĜ7wUޜoՙ(N) uv1d[i^g3,$ȯU_¯w5M_Y}4vH;L\ZmƐ\MoS*j̲0b&¿0/ƥ~q /L*lY8CUq^D8z{^ HI\OSjbf㬢k~-) q1QHHBz2z?G>WŔ, cJBa\g`K׳.í\R9oE[iMBzů.:;ʬ&Qnn` eWFJIl`JB8gXMg:~տ޻$ ?5d1%(.fc~,gr}4_y~Bi42J.eI$6_Ό0~إ+/gh" dvT2??Mu X?snah.03[z eYGs 0uI[݃VB.isxgk ;]RO k endstream endobj 2275 0 obj << /Type /ObjStm /N 100 /First 971 /Length 2325 /Filter /FlateDecode >> stream xZo7~_ރ$g? @"w"w5ʊ+^$I N*+x%gX3!p47RT@:7!֑`2$u ;@\G0o:Ցl$ Āet z<ˤ7E2Mʢrdj y@-I ~MNH:%U)J:>0yDTBƓ3g(ʀNl(8QCAAPd(*eCEQ`j,ΡWa*D%`3 =9C#Ω,Ƈ50VH$x,.YmEx,RNJ!RqG u %]MgIa{J +*򺭥a:c討HbbƦ@jglcd_l" Vn@ z31*U^u3aC€MZ$I 2ձI<$O >RcdRu SCJc X$uqja:4ϫ/1'8asz2g=<V\Ї +>٤ޜD26Ff=z;I,]쬮нo{__w݇,— uo1'z)H`d~Ov^m{#%XFY4\>d3!ڌH0 X-<岟n r` tޏNA/r$>-ڡEJQ86E{F*)2%-#1%!iWkger>Z6U(qE jXhW 0ݑQԍ zW#n hk9ډ"0i"uϢ}CeO}$-Z5*ܨsԨ<7*hIY(Z}ʰwʜ٦@@}O t/e-5nw_i2~Us|pm݊j#mW]Z ¾mGt˜9dΨ90#FF`(G4D͙r3"Rb(+vN#w1 b׸JAItL p*BPUJ8TWNɎt̚y=EoFӗ)c,(Q&T%5[&:cmEf.ͺtmd!FZR5m/^cImƙ"<6 \DhU9ܨQ9@9Ό,{xL3QVwLȾuAE4ZC;v)5* Ët{#/1?%#i>}f}H~,Џ/vBhxW! _wA}'wB(3"Bn/Iפu ex~@PR[mc6P*8MS{Prϳ0 Hc+W`VG$F&jls^<&"q{e%ؤ! 8x>^ endstream endobj 2397 0 obj << /Length 2438 /Filter /FlateDecode >> stream xYݏ N1C{;{hw{ؽVMߗ)3YТEQE }.إq=Mvf\x4gU_Bw Ȳ` 2bHp=DzѰ@ 37^~~k0bm0׵DN.897E9 c薄_֗`i_M+k]5 (CxYE_I"\v%'Yv9hE}]kY=T&v8,څ8H#e~{P9oB9P쎱7ٱe϶pIĜ3P?,llƜ74YnYK{dkX.ϗʮK!Q/]{iҏ,׺GoUTAQK#{ՋںyX"ktҍg8ysޗ1BkĚݫB՞A}V:kJ槱:Β#5ej~(Kk&шԪZa_xIɍ;9UsIk~4ߓ`( D3M:Y[كt&7n Gdh}1\oe6/NUx̵ɇ󪿳h8@&؅a8瞄H@.̷+DϦUEk !KOoՒt݅hyոg3_O%a/c%)@ӔGG˔,sH@g!z0g\bHZ3}*Hڊ3<. c#K='v]r\EpPdI@C@uqEg%>v 2'В# DŌ+Uue˺B(Z {ZE!dA2M %~-/9܄8 aAch@+q{TdM%C\{jjAaM;U;vdnNwg 1`QUF`8sѹȝlם30XrU×p;z m(f {> |vk&9wr*g+nt5c0fW#6&g*il>6g-lЎ`[./r_Vac+`)+Pqv1F @Km!7Y^}lroFl:N&M݆^|h΍ QHcC6їEH/2nm舧XLPL %kUiGHT PbCQ4@'tvnuu9k9db-5${踸x(R=1~cdYZc&Ц'Ol}u$P 6 z0lˮ24 ooؕm|KMvK7u7C~5YMkWj?z59v ̎=ɥ㌽ڋl*0R{n)/Ƴݭڀ`=ho11[ Xb@dZACOըVH Io,aE+l A{/5e ~nӲh{)sWj&erzU*B$fz@s- sz+:Lv`e%;.>`iU?h-syP] !v@̑Wen+ITMsaSt}Ui=bhȾ~56zȶpT $QN0l_Ȝi<7zg7@*Ƞ#)84v> stream xrF-` ox6ۥ!9e<ڃ\O9QGyu#s@8wb n%/zEG6WնnH_i .h-~t;r{>BFb *FkV?, [8~ӨdvqȚNm"c)#Qy p(" Qd;*%Q,bdp-a5AJޘ [V;Uɖ7YGa O=U驾Vؾ!ja5YY2^V✁5p(vA(h ྀ0]t{@UK"*ژ4 s]Y_ ܈|I+5Y%g)^񮶏ϧ /?T$ջw]4L5 J&Rjf#۩'s7H_Nn 1a2fO>eI;6p93G J(}Ag +ՄݪRQ5}kz8"D%#?! FS느fi 0GvK-fn:2FkygMNUx\đ0]r<KX iS~MɃ`IiKX\t7>D j =X;^]op!fa9yߠ*Bo@PM Ԧ_Ręg;i%K!!ɘQ q=KB'L 0Yńt5c9th:5 mȤz}D0*wblJs.% !ޓVnLf+粔msL=ulJYq|Lsd:4̚GcŨ*!)Z9$FaLǎ3S ' 9+syN`ݥ8]S$O'I7I9G"G~+Vu()ݡC5&7P&L9y 􄽓z&cL~SŮk٧ѦGAu@,Y`:v l3kxB}L L>82CkSS ]ֹcu'_tǯ#fJiN6 –[$OQg1Ќwޟphjr8xfL}*%L 9JN}MŅl+ӧC"O,wb,fQ\ϴo ˊX3<}wI46o=C?26Sso͜fxAm+ËR;ΒsMqdxL ƹH}GC endstream endobj 2437 0 obj << /Length 1835 /Filter /FlateDecode >> stream xYK6 WVy&VLi&M|@KY=\QARuvdA#;[w^f ɽ< SgqKrgU:˶楘YCYw!we2 Ab "̖s 7^f``8 SԳ/S;|+I ƕiI1q"]yxz6HvCk=1ncȬ)iun[l*> +VҚ(%M 5 ;(w*mqoͩ}Kt)jQΪ:p}*PiV[PZD٫cߕ3 [)ź➕yymEGJliW j6mW i,RK$vfws p=zC ʁ}?,&*|වsb_Fbgێ+%؞tN3q`'Bı{CkxrpݰзZJ A]^";j0-p-V;pC'Nlluwဦ+ Rrcd+C-/8 iMũ2u|k#EJ2u"QՊhEՉm ;@& eF^~v`{!zz00{!//wzjyEo0z!Y> L=Zr);I4Q+^Cfp̓1;}&+Zho1Ei:4` `q7Zڔ"< {l7?n)'"-:~z_m͹$ε*G["OMZ/| K@yID(Ea?H]6mUrᕞh?y[p6r( 3v0JZ"5L]sP2:(=WaFBma(L +MX)( G8’RZ8f3Y񆶱"Ԉ] ^>rQq #9HQ[N,DV덁2L>gTUjG(OMF:Ɠ:T C "$F?؊U64v⳪ 彨@SeꨫneXl o!{[lP&U0% `ԅ/֚Cv! VӬ38{s"ˢUEg>]|ƦX_F#>HM3/͖l0`Mkb9b0*%&;N=͉z`H36D֌T,5J`&˴i[f&rFyF(_0JS %T#s)աkrGX}`~&*ruyyY:&@G-d8"umx/0)q~w6][SzvM+1'+!߽~G:Ms͡^̖[cta;9u>:XQLd ~'lأERSQ>CV64 rLhLz&I ~:7on޾?WC\Be\A/CC"L=t}L3^Τ^.%TgDIr d)@j$vq6U ^ݎ.{a>Zꀃmé!k3KFi)4! _hƢ'iNc{}'jni> stream xkoμ%Eq8b@)J"J <ٙC%="-gwgg=Cz&f8{#YlǁA,ga 3[,g6[_?p@j/ HL/t 7x1n:\~"1s\/bfhWng#lW0.fgT{DUdHk5QVoBN*iLVeHVeٕA ڲ57 n*UyRnU>* Iy#Ksչ[>}1FVqv!oGQ4p:ߧ6VRg]ae~C[֮w#j6=,i9lIK@ ewѱMU+MGd6+SȔjzrXY-#^\o5C4&1MJ&vH@tW2UYc D7Vb n>;@#\ϵ06*1|nb8ak/y@$ĕjMJ> b -o"aրmcA$eRT`jH3/wmCCU_4S6J۵h u^U^N&o *_nU-}DHӋх81q,ŶRQe=)=T,8P -|9ֻlwN*I|ߞ7w׋/oclaezCjY /B8H UѴ=kÔ{ʥa>:RFۑ# c ~s] ӽFG Uu%.)+kA6H1 P.y=%(x&&/=GE/38} L&+͚쉓Ԧj%c^uJ{*x\Le:&+ORY/F&N9v(>cEܱbHѐ[l]1$#0KpC`mM>GsXPKVYҴ57VCrV=/ttc-t|;: ~`7 h]L7k2i63D{&P,; `φs/\8w^SiC^+4`EHηÁ3@?7Y.dxϖAQqۀh h%Yst_'cOohxT561h +w^ O# @7h#pܹc-oMRb\>Ϸϡ[0 4k KۨTmbhU>0=Gߩ۱?;_^*r%c\xn$2Yc=FEx_) d86C|j.N}o!RkՉY4`h#ۂ$JUzj5 aAI H6t^{1r1 ż.+;qAK @K9Ly]pTU$ނ:ǖ8gP 4!}tV`p[ES=kBe\uÁ$955xISOȄ]u_;.PؑWX`mR?҃!UF0\jO`U9^_F^ NiYTpg6{d|_#XGCoM*#G7Y}Ź!啷ɶ4B 7@&7 lH0y}-G{X*t@~ӳ>:q rr\SXԮV{옽~gAPZiˆ'5CV#!K(:zȡKoCp霞TES:4eN[R{"DHPb hJ vK] [+џ/ fP'_ǍQ/;,3 Oܹ!%spzL灑'si(v,,/O #S <}pjMaQzs]@'BcK^HɄB$4:gtU@&L^q[Qs<>.xƼ=!`ڱ%e~KՔwNEh^0f(`M'zΠj"v hwd@l^RW&b3_ [j\uqlo9kb(;E+f AtX^o2DvI>04נwKdTU؁^[pSl)c }8v\w8:Ȯ.@=1<)X++ʚPBtw{G؉s،O1݃Joc@%f )Ɏ;(ypW=SEOʹ;Rڑoﯯ~\ܽxw7'v~r/<`Jv[љ X7gRƥHΑrY)/3 F]%\t>>hjr! ox6QN5~6jͯ_+_* lv2 ܫɱIۛI*:ɒbx`}w E"AB>°pCwpj8L( QD%]6 f@7 R721!g*1Z 8P/cy 2Dsq2>"PIy1# 曜Gr^GJ:Ĥ@ QѮ#g:4/</&P #GqZ 8' Z :c-~R^IôxP~ܓdB*'Q~[Xԇ(qrRNҋ~^i3X-_ӧs'Xy_T) O5mS{oJ.t]Ov}52m9i+WfZWMRaEӪbh>`c8C1{Ӗ>l O{kH endstream endobj 2461 0 obj << /Length 2889 /Filter /FlateDecode >> stream x[Ys8~J[1}Ȏ֓HTeTDIH )%?b n|}hckiakx;]+@K]k~=bM֗ DG>ڳ||yȷ)߿{+n&7-r—̚mn9 |.>r)r Seh9AقiPZS$1^.::e7NYYTM 6PUF|]&%Vٛ$(k@aD`9iґ$6h b3nUa9)LFŧ~~$x:e0^_ב^l$=R<(O l|Ml#. t bK2[eiڭW3So0^V~ _ų|In3>?&Nk ,aT]pv&jCjBHx}h뺈U𻾇\4?دP&—\ #B#plACW&C[ڹR- 3窖 h.L dn%c!E}k56Q<|%.2 N ]PX:VoY Ts'/ JD]7Q;ncaEE4.wVZw}z >lI,?=;e@Sy08ǧCS.LF.FnmoX/^z.;a]`\v [O.bJv:6 dy$f v)sA#;"i4r=nq{./fQGpKV|΁?ۀ-'I ێ4a %6 ^?p\$3#hǃ-x= #Z!(Ӿlp]77]Q)84T*D!v|~:r\Fņoiq@pyx/SeDmg鞟4l; d'zӵ2t#c# s;s0; g2b15w}BHygZ.DɺoHvùV<ӀҞS-h> 3 jiu Wr_ ǧkcNE8H6HI3i8.Ff {%߹J]߭,\vC}ַ.\X mׯGUЌr4V_Y^,,4qP\'9*497 xр nWܗJ!d)[1;|NDZ"&y%NxK #ˏ_/cyqֻhucS";Fׁ#yi{D_{J[rӡ԰ONk'4N m+0+<> stream xZQo~ׯc 9I6@  pθ;7Ibu7Z Y,p#$(it b#nQi-Rj-Rn-1X[KuL9:s&ZZZZbSuE[Cv5Rb0Wu1$< QCIj I޲1I$bM0b$ՆwQC0 T! r6TD.Q5WGx^S4 z$v)6I PM'ڛq/e<&ހ8IlF2qT'`- /#A2rZ#[%s3St c z!1 ;{U#YQv` *.c8K'9G{"nAFrm85jdq {,H#t-TpIr%7tpR)zٟ-l߮?fp'ߜ-^.GJ3}fRH *^G?_xvqѺ_<_o֋W~_?aܼ_|s? tATG='(eJ䣌|A R(([NLz..Usv%-*^藨Hxm9>[ x\Z!ŋ/{wpHN/WwZwVؖvjw(/&o7Pq<O%-:AAeo|`5:0BBBz0=Cfkml=U<<&z4jPkd(=kyܼ8xn}v_ۛvunm_ۼ4H%>L Pb"t-&-Zh][wV3 w`5_NE6b+҃ TNLT7գ  %Vhz4MDvPUҫ ]cufx*TGqX"G l~3zb'4[AmmUS۪@h"*Щ|Nra`N@I@SScjb`B' ;|w\^3B:@)go2xWH)#ij'OTx+=r;cvNJNp8OP:);uwtƑʙSN| cg{n7(^}2œrK n? endstream endobj 2468 0 obj << /Length 2385 /Filter /FlateDecode >> stream x]]oF} ud<C괁*D;Dm5LDzF6܇3<:ˑL|ͨ.qbp](MqhX1WǧY9|S6GKc܃mr7$tEG_ s Z?ހ+U1]7%Y%\hzZ\6)q~Y^,0x\YWz+eq݊t/~<2>q /.>d-sxb x鰚Rꯘ_W7I4C#Œ7(€#Ŷmhv;Eey5ZuoQx@idsP΃4Bgl[9kJkcyS{}hwKPES"8\ԮFtY&5JF.h-LJ HWPbN6C\,QL.ēA'&5D)s>]2MPfSIRh']_ѷ2󃭐iEQY+kUfi* Ћ*T*樬$T}^n6L==uTşH>ZF#ěGxhIϛVGR)MjxKN#䏚Gnrܧ']SkF'YS&tL6KhΈM;|)8Zc|`d;V9ceb +x[ɶOM}rҽL\ޟ?Ti?K}w[g>6ỉ&a7ÁVa=C{A﫳7Mu޳--#x`VB$1}p,uh@dsԆPG*Xs4b|b`Y@U^Vbc %۱ZIEc^V<4M0X0h$.3]=u5Iɛ,݆EŚ|/UMiͦmC'ղ=TL<9@@1>pnl|Κ&ƿvuyęYޭgP,GhZ|zy~o Wx -|Xf;eAǎtO\Sgzd_f޵.K2=n6EhL6SukX7STBh*E@Ts42aom9xbx9xy1`n::eh2@ds~3]BI^wh `9) BM(lNNHMfOdӁtB: &%PDQcV`т %۱qIyZsE ^ l= |:C`ʰ-|XdDs඄` ܭcDk؞shE@Th.-1>0Pk(mFgЂF -1>0`A.럘e /C)&#Л%mr1>Ph0"^R"lNJ0/_` fy_*stP ~K-|p9B3'"K{ 6l*,'Ԙ"ڽ.J5 #'>ez+&lNiJrI vMl֭J:[ezf%,i-xphX!f>e,8=ࡑmA9C F l΍*"B&R K&jFNI^~?if7 DJZ}[~ 9%kh endstream endobj 2534 0 obj << /Length 2570 /Filter /FlateDecode >> stream x]]s6}#uj!YOiFHé$l7/HP@ +Ԟ)8<<! g^ #/2!4,SnΧٛQ9ϧuii[Z4W iF-XS!Uzm7u[g)[M3mSr eϲ5FFԻ&2C Lq5r}"MF&[E/'[>e6$2l뵨2UI wR4k{W,p{ i.U¡x`[hҷ1e  pmnںmvٍ\nS~ںrT,Ez+6jNO~8~٭E-7BSiN &%4S(V%Q&"tpt#Wh0Gڢ%  l3kDpy|;YEE923o}*F5p9;y,@ZdelDIm֑N!lJjV%]AG@TRQh.t4Y}|`dwU#*Myd; 1;fID oi?a?!-#|1b=sr<<ώGGa[^L:=i=%Ll.7ɬvz9ia*O[tppG?mr[Fc3Uۻ-uůearurvZM[q1Q6^ڻUmbqvU,`?`w2fܧ#w!Ue(AMXǤݳsAúB0Րgoaú)bn7y{nXEf.gW} 1m21$.懏L0وaPnmML|U' YΧs1|2`1HVYU[Nڪ w|?^aoi@edcvLlM*mZhu*.yS.H9BmI7MT!IҽEʸ\V^NBuaErwS{WtQ:@dc'vSӾf"ߡ ;L~(2.8˙*|X0d#7aھ*:审WoPO?"vsz3uxL (՘ aYm<<-]4:/flLj(C/ҖeP0}ET3H–ٙ`Ms4񁚂hJ bUveFg/GGN~>zd:@dctlzo:0?z^.5Xsf(j&3ιJ>,Id#٭%I;sk!_a>kU`o+zY4*]1VzGX|% YHT*_eGMߏeB[vCd.0֥٘5Lc/=`}';\_RlLJG_)Ϥy%S*&٫ b>/1pɄBF -}q=nh,>>0P;:9Αđsd<ƐlÃ9gV6զMzwzo[r\%wNq/HwVEzZEɒ&#lI}5'!"z|*n@,-}|`ZƤ%!HQ辚S))'eptOT;L1lbTڣCbC WQ:S>0dc dֿX&D2||B`Q }r&E2||b`QQ4 JvGwEFxbO>,xp1?0 O )YH0b"J= @> stream xڥW][7}cйfF@ K6!ƤKS;xoCBrW\iHUёrj*Za fHO3i6NIx$55pUԻ#-HO92,4ՐS.6 Zҭ1Y ;&h TjupqlH6lBCX 2m hDFCc=AQFE(DG=AiC=Rq\G=8a58A zJPmHciY0+Y#W!c¤# *cj5IZ zRG,.AO#P҈>4b\MANsM)QKM rRz!ArT4h rAUMu-)V֠%%+AKP~G+<[7}'gjsIZ$\-|?E>[˟$O'jSdK2{ុP~r ZyfZ0I7s0I7%GjSde%נ'JnAOq\Vp ɸ4Ep[4Ep[=hze endstream endobj 2604 0 obj << /Length 2602 /Filter /FlateDecode >> stream x\]۶}_Ig2Rc$}p78 -AJԆi{/ P%R"Îxqx !<8A␆x1 >#gjfuHh5"$cUCF#sAx\^tu3@#]tyfF<Ǫ2#B8^W5F(ˏ} E(\(q@q`i}iF٧}[!iV@դC'UsMU+noG!ƃiE"I޼ 6-'W  ﻌdp>` '5g"p'}Gy8#8F ҌyCt9;/KK GIӾ#%`m(aaJ5%H257n{ p"evdZUf8>do.@QiߑKg6\2mVAlyP _$˧KC!HHo,5; ֆ%,€KZҷ]_H n `0#DxhQDdJdMLxkU%7_4; FQ*?﬎q֛8~-C]yiߑ;g6%ֳ*'rv;3J۵/N_U ,|ʹ*R&}G8#)TzcӪ_@wC|^MXόPۻ滶yTtMDM"r{"r0O_Q]zs^Ӿ\p+h/ѫ2fɗwM9I#̬yj]TϨVjny[ & F 8F<2H }ҢY|Prm>3:]-ySաG[lė:L "zAٺcc}/z~ZH{<Ή9{M; & g?Ӵ(gH &oU7JujCh)B7_0ؽ j&B=𦩦}GQ9QU!ɩx㛛Гo6;2 q׵7g4;:@8&_Y[#>OEɰ ("ߛ F#o]{iߑg6ۜ2D"͕'ܛ% J"J ˚Bс}7: *#&uyMskfX PSF7:(D_hw#},cF#p71 q:A )_!ea q4j?U|A1Aor5ZdHOHc\'ٺ?;Q`L!O-~zI: `^98uvMGj|,~`ӪX o~ endstream endobj 2651 0 obj << /Length 3081 /Filter /FlateDecode >> stream xZoB@b(z>\kW=%ɒ+ɛK{g8^&p^Q4LهnFr.sxzܘFϣ|G83|8<mk<< ?8L2 ,`˜~4"0Ƴ67eN/g=3_Zp8t0[Ɗy`U2H-Z\^dK6e0. &% 3z&YvN*,(/kVϸՄU^*q& ,1c{YrW(Rf4x"^qP :|ZS$ERJBZ;6_j ~t,.3-iLd*BWW+l/s`x3Gm6<+gXؖbR;%=|~+RӇeA),fu^0~pLs.@F&/O7cX B#N=??<ߍY- (s?d*slS<Ϩ:"#؛j:0!vsZl,W5e 3TPQRi.i48*R/m1>i>u9=B/=o7O<j*9KIٶI7!,W8MрX&aɥP5t7*R"3/wGe\Q* &5,v!ȭ5dk*wu% \B6hN|l0rk 5G`#ҿIPv}NmB=mGY,#{>O >A/u!@XijWwo#v}{7x3l6Q54J0OUM<L[;؍UBI(޴P5tH )QX ɒQP\EP-vM5<1б^SA)P՚-kCk00%$4>G&\í*f.;k.VJ:腹-H(i,MfE낀V=פs}u{X,"EuF kЀADCVHFns@]Ϩ_Yז$tW!b8Z5Xdѣ BRDlQQ uturm_%͘i> +J(2mMCu |i\\፞H2w.$ ۵Fꐼ뉒vwv8=h[#\vѡ8ㆄv9%n15xvB\` Fx#]NgXG:>bFSlc1Mi%`28/$)*=t%YhHIxQ CS)s*9{I ceUlն%nZxc>Rϻ ȉuX$Do N 6;:9^:AC `2uG; 9狼R*0Ǽu >+{bHlΝPih> stream xX]o[7 }ϯc`]}5݊m@t fpt;d.mA;l)sEJ[QHp@- )$d1c9L*P45PLyaZjXL#ӌfaYTȡ7Ӕ 45W̌We e1 |NTp:"r.sS*Hl {t!rl-n;5`M$Odw񠖮0,;5胖uYuWNd:@L7z5ln:ؐb: 5Ѝ:U˰1tPSR&2*YMGtj)k,XVaf*[ bUؠa:M2lh !FC@6lg *lH2l+SUfgNd*mtqz\Lɛ`*gOEa¦difpK4I-A͞bQ4\\Bk \faBJ0iĚD8-&/Cj+g]&$蚘^$!{+A~W`b+^Y^~}'uXaHG™[D#{]&"֨)9IJ7(% 9cRZ"ΘܹBGwƤT .;cRri8cRRZ+]`T3&m#.'fΐd걒3$؇Xܷ׍L3$#'gHFLDj az1Mkv!.\'Żj~؄0=4L/n»i_f'i&ͅJvr=_\\,qpP2adIpn!-+LztEU-c*BF&|M3=^_.f8OMϦ} @9VqEte;sE6rlǴkl͛o۷q:ǒj}>msz`n28sJ7qn<)2w,ևavb)ޮ6g7a×oQ. 6M=)="Q>NhY.e&fjevl~΍Ci&\fXZ.by!JUY8т/-=uDe>08ȉd'"JqU'8 6zD`iQQ8v>0N`un3:0f/f3&1As 3;ҵ:Y=T މ1;c&.9F3% O>0QJ n ?y]qO>p%0fgL1A I`.>1\bךxcr/pAw>k e`OK(x F)׏M_BSѧf2С~䖾qA^F~C?|YSU'ڌ{S:Z$lnO0N}©FVnr9)A憧l9[,O_2Dg=3[ux'A(DJ8{J|on}+ , $Ol`|o=뽛Fgt@Dzml%C x*˒ϢqlϠo("QX`p3^^P~ endstream endobj 2682 0 obj << /Length 2515 /Filter /FlateDecode >> stream x\mo8_iݧ$f͋NUD:AKCF[Ɛnh2&4r=E]{~:xsGTz7 OH$5󔆣"M}}ʖQ~i<ZKfZs(2vxD?`k?aSx߱½=#$'7i 4: Dhy_Q/J Vy5ɻ8 FJLgxG;>G֚PvB$uys=_)ᕯUkn VEڳ2w(}T>GQjӪm^V%\CG\ُDw 0? OIdd4ĵv^ςQi(i"Ztg"~hk D7yda*:k 9G4NԯWUA$i7QKm`ve/_ɪ6 =Exb/>?F0 50oӇU'q$]![>i%G񘭒жNPkpEV\ IF!u݌xw@`Wv}Xqk<ʗh+q7`W(sΫv仹UweGBp-fi84"ŧKJ:rVvDdaŌǓϷק'ۡ\e# tS JmE,L@E-_ x jJᠶ/څy5۶ DnO7'a(IDtFG#ICR!Vbg$(\ o4 zKtgzt#ߑʎD}~\FGme Tj2~;U1` q2h]A2OF|G~8+; "uA5jzy%[CdVpNǎ|Gv8+;R=A:<]cW }O^BhߣfSq#ߍSʎU}MOoNC, ekҲpY>6ܷydط;b칯t"q;d;ܕd۸_\{•e7vz^^]tryu|}'Ť&X[#ŜC1s=ʧ_>NZAvq›L94pAz~ç,:cqW KNƽ|G9+;{0{|sslEuUח= ^_ns;p /Sn:Dy<4wVXUdhwc^[Оmci7|tdX'p{5&q-ߑLʾB-D!ߧiXMGSަ*d]6;Q]UC23U\+aOYQĶ0~L끓9f]#wA AA^ߨ KG*Uj3b`5%HDQ"g}EEbaPE"YGEܿ PG1:}3WU "HCr5e4$([@c)쩙juRj^+T(lU4A Nϝ'6a |G>83ئ.ߖceݝ Ie)*6wZ/ S)Y͇(-^c<"Bl> stream x\K۸ϯQZxHNήw{76vMq(j%%OT{(4SAhv'?]ՏD#-Ln扐Hj( [EYr;~,fMkZ2Ӛ+RFAXې)UMWon~"'d;E/n?d~N0:MږD(H>\ ;1OR'JlN "%:_1f˅#=bDn)G̱kA3"M}*lYya(Mb*$:MxMx.כ'j95TsnDPnEVyjU'#vF b!fI2S]ngEY<3neɥͳr,8W0;m`eH:8! _S; }(Vv P%c f[m(GeؿvB#K]!Pm mbYo ?z!*[ $1= (UڅMFpEN#&rX\O@m2g^۽vێAreu\ìzXt{16'^R+⚊ O*ЄXĥVvUAR7Zjd"e/ pM [+1g3EiF\pqO8Ym]C>hfy4ballF:;Ύ{])idXO9|D)|_MttBp6Sxg+P5[qB>oR{OLHdJM~ 2'oAn2g.\bB]ME ΐlw2NC k30YSE]@ZTy[ kz(lS*tCn RV#(U{a'ɖE7:8Ȥ"^|R/>peGgPqg\Ag|Xem2Ӳ҃I.a=0^PAJ*=*2Ki쮋xn3^ߎ묬yW-k'&A}S찛.'tQNzbOg&AX=DhIHYug\ڷ8 a ".R/WMc)rQû9/7.n[BX&|T_ a'^UHwk;.%5/[B1wX6N3\Y@Ȯ2-I t(ɐX\CS'CLwSG5J G6e`x=4zep[X9vکnp=>b̲SO$f;Ïw>~wSRD \W|@]>05 b%jgj~㨚aB&H0WvWSp$:W{/5[R5PAQM*0m]'F>?c#uiʪ/Бݧċs9,1ԱXO`=XO[c==aԲ : HfNN.hxKAs RTc&|*wwi" T@~)댡R(-4F#I ]U9hHy Vv[F0G]oZE.-(SJ7Is oyf=Ne&fW8f#޲@+;GP%hy$עS*" "X:(m'vQ#4*@+;<tg3QLt\cR"W͇f WBUKq_Nk2?drt endstream endobj 2673 0 obj << /Type /ObjStm /N 100 /First 968 /Length 1696 /Filter /FlateDecode >> stream xY]oT7}_GxX_3*B ZVBJmp>@NzW'7oP!P<&Yo'ı/Ř64"k)Ԍh|5-Y^# hݑ+pYW_(2=:~uq>]"+?{jiBsׄ=_1~YBww\ =;MzU:kW\:Z' `Vj2N,*Q~F0J&12JU' Ư^(L$2dDhK 6pBn]*m/j j$#b2#4XiPoV0*-ckL endstream endobj 2771 0 obj << /Length 2137 /Filter /FlateDecode >> stream x\MoW~ l6 qNށª%GClϊ*,QOŢJj\l \|Ň?, +DҰBU7]/?]ZB֒\)`cC&.ҫ~Cq]p} bႜ:JQw7p~*0F_ƖB(v)~ Xcdu ) 5:dw"MA\kSUq*o1α$2Լ~磨$ĝLR!.,sA^Cmzvpcٓ@t [FċɦŚdUoSmSգ)?MQa)ͪޡ='i|D d>b||P/AMpN̷EJID f:T}}z'o1_y``?pbUؼyIO~;^|`Mv"DCN!?^cpNߎ6|g [k6U{U}Xtw_oqwhu96Uחd]^Uw]W D,} xqgחT/X=ce;erI쑾BWc.)mlu{`4C26M`-@zTx 0c;ޯq.&D,g~u7QmՄ'ۡ+vz[+I4SxR`s_'a$G:`};?z,3٢dLR_-Ua<=TnG༶'WYvհ4;6@3O({.62rJ"L6e`n-dx3XE äMHyTŏsnle $]hL5YM4e֬|d`)ikծ^W o:&""ӽŏPH| >Pld1O޲#JNryøcYRPYӾKy5)vfiɰgχ>2_; &=$dx07<7%Q-f#&"U(FO)Z1=&ET"` 쳮l񁶀b2o5窟&q~f9|Sk}fc9}и:>+(#17>|O&DZn"41.NH|k >Pld1O5#L6)Cl隻_ Ai5}A&QZBXar&O &#&.$gI+/P=WsW Da$<OJJYrhqZ;\e>]pl^rt\as_R"_Ε+4*+'_u0CXj쫦~Fg쒮%yTMv/W.M>qo8׻Ĭ/ql$s vp ufg;ߩi=veKg9ftI.ʞjH| >`)C+R+^Pd!2'@mdcfsޡ.8PηΛMYi5vX:.*oU:Jl0HɌ3e4lc5~(v߯2>%&l|Խl;W)4WF6C|,1b|1dS|YD벽\mĘe0*"L~/!-1>Pld1@+MMqhQٺk+`rD}M(l|T!ɻ Fpf#)",Jm4l7c8egת@1>˥ lpĥxheS0*l04| >`)(> stream xڽZK6WHmE0 {rԤ*v=L\SҰƙM忧4cI4sF@ヨqs3~9{#‰I,pk'DĞ L;i6 C'iᡴ$8(S/xo1~4{:c Dv×*fwBO%~9_d xϝOͨ~6\ .6J`&+7uUER+1FźڕզT7~x3s*t#Wj|$U2u#Q'D ^)18@| PHH}'P ™pGSKgu{O֣2aЊJկ!s]]<6t23~'Fd&HL庇2YPޭd;!qwXǙ%"F OfqFHIkd^Oh$t|mA {Q<8}#m9X.<[gW6٦yde{5ƏH4aVԏmpD4)lc6h}#Qm%pk&)`Q=B!HbtӤM ,$h4L &MfʧcXhzA?^ ٤حрP?6hDrJ̄WUUrp5[n!-$@ghJRꦬ'̟uWU\=UYxnF$1z5 6xʎM|euk ޡ֫M L&uvyR}Vk" ˪6DկqAӜS5yW.DZYIn[P WJDfSZ[Aa,YS|G|kCexh9Z&Ƙ'9wրu]ƔҚݙ9_Uz!-!x|!~dmRgGԺQt; ;S0L$ v>=L9.A*UgHm޵F> stream xڭX]oTG }_1sǞ/O!-R+U FyHFMvFcoH]P=;xlrn!ΕB{0~@%P* -p3ML#!WӌPRqo)ubMCB :C)Q[=8W]]K÷lfz4teK@fc &n@jS\OjBR5H)0+UّM_KtHu\d:&u/ A I@Ec%NmٖfYRRΪJ Al n`C`CohLS3H@:RDt26RMWBR \tQ4r"ׂ BJѲEtNw#%5& ێ%7 ҞiEL [ؔ| h/F`H4aaU=A @j" $%Kp$%xJFةJPLJt8?9@xY4D Q~P[lW%G1,oNg}L=VS\"æ+9p`{-;#GuN|"3{^N[S_*Qd@ɳrLӞϑ=j}D\HKt[}W] bNgazx w./^-fXn7ltجnͮ֘pFkq {gk,erEOvMݲަnr6=^/k[=N?Lϧ'x@[:UαRn=4"%&7l,Lr:~9zn_7Mo޼kl,֯©+XP% ߬SY$]ҞQ & GqbKcI)&f5M7/n$tt\ѽ`4 iN0 Rc(Hԓ@ F:G?;9AiҝyTˈ>gA1prRvH 7Q.z3r"uR,X:9(һwEmD}PI fwڇGwQ75p%:$7sB@^qOLNNF +NJ8X Dq;I I S\ X֛ʱ{KؽY>|Dڙ\g&&]ׂ[!'I6(8&{x7H8k! x.,CCq_X0bٮgחWG/vͦ%}i zPǩB+ά/jc~9~}5~;gP#O=JՆ`Zy;/osiwC_95p6/r^/V/#G/.zwoN0.P ~ڳi75 fR2W${9 67{I`Dg9`bg DނQj\ͻ2gT޽1GQo endstream endobj 2862 0 obj << /Length 2014 /Filter /FlateDecode >> stream xڽZm6B@E"z8 [4] -ڒOo"%[ٌ`# _qǫ^|C4Ғv fT$Gwbγ۟bHsP((L'TţA6^^犀SZh9au}H(>\ {qxϞF Hsg@ lhFwbqM+aw:Ze/[*e]y]an[tF7{a0?dYe3kgsi2pm5=VN5H^5|O*vej 2K7uGi{fs]cc7k όK_xZ )y8V۬ TF:0='n͉=7drL j-]Jb<@Gs<˫|UuϥGpb‡c1WaCg"~Fބ4gA)p2!0f]f]Qt:#sRq1+.Cڤ?`c !seIBr 4k0R? pckLjHHH6Y$ÀSᶈ@M="3#WaE {T__E@ƐGSj`JzEWި"DmJ԰G$жL3.%M,&G6RԼXgjڗ0sJp 6z[}\5\gBTݩ5n ~~3}_w~ͫ_yss}nȘol{HBî?`c82X_GV&)b׎@T=$,>=//Hly}p;=Y/O}wz|8q6(9&&SӢ.O!2a]suBl9p8eƢ1RDFD G): 5Qĥ_8vߤshX}V°x0C§M@&Ye.C#GN\¤9̋--+I6@ctEKܒ+01IJ,e?T -w9;ZEpbO ]ݳ1ţUQFEB3+nRT賮'ii9v;ަʪNs]+:&~_viT*khNN9"Blwa"Ht%?0 endstream endobj 2903 0 obj << /Length 2062 /Filter /FlateDecode >> stream xYK=sDmLv{ 3 afPK-@zL_(ӽ݋CC$MUGGq{(CYB~ J2|Sݗї?ۓ,/?i$`wnH0 F&;;!qco[ ֓|z~!(0=l%YU'%2!t prTh j7~ ^e ޑ}S Ke(+qbC#F;}cC/2uuBqֆ9ÇԹoOfTuϰ`M PfTMQOr΅﷤M#5@3:KzVbebF'["674 qJ{r}l|.2:4Kz0L٭V#.[^kG غZhjQא-,mz@aI%b=|OI6ͩNW[ ۔(n؄Z0HDsr͓QDlg-PԻo]EySzq*|bؓ (ΖX[o~\}0,1$%A^WRL&ﺾ*+,+ljH+K{}k`0|቞BX Bta@!\ֹ/RDg aƬw<ۃڽeʈDwfR!"ƫlv y nM;um?.J{DkPղ]9`6)`hqa{Gr?5f~ fPhg1J8UJhZ#/pgFߔdZYxpѨqtه*(.VḦ&#I.-FMK&.·[uO?B]W["P1ȸeF̒trnG]JOfzR)tL4qtӨLg:Gi`(moØ|kX'H)|Pym&53u4O6v2;M$`xWG9>I8{%`|pTFj']PŽ;sBiy.դ|Fk%/PT{7C>4jY$P:?' ,+Ff`g"a=yc2JDZ:YrǗi-. _JPقf} G[CY}D͏^0H;l~Ș_u6 *w$ +3vuīXXup 5)RXF뤃dߪt2P(nƼS`XEn:U蹰B8ĝr2536!r|vo8KM C*ʸQ c.gn%Pkq QG9l@dK³{6QZeSd.v]1 b ʭRd߃mj!XP&Pмn8u۵v/zN8}VP[]'bNN0\\m N4N挟!oЛN,NÃf~Q.fvR>x}NU`q &zchlARx(| b94F?ܺs袌霁_"1~E= ʼnFZ KU/F\AUn; 8m]2(N;w endstream endobj 2913 0 obj << /Length 1632 /Filter /FlateDecode >> stream xXI6WEb=Zhnm^OI ˴MT-q;!xyIhOpoy;y?/\<,d x[/ND^*rqj_te (iP.W"zHO BN^qX}ϼ { w2/,a{uln}6)y #)1ĝޮ8c/cO˟o6̗%g8bJ@*pt%b"U]:?zZTI?mZpv=BcL[[u rLcaPv#KCgP;X̬" |$֥P/qC}]e RhYYd|N_7y~x+.dZqqq"D4jГ}dOn_*V-hC1Ǐ-}t] ʞ>2Gj,jΣoЊ8=v):/qDbntWK`;?鲴+R{*.4|h12ZYzKOغڴ$VIʪDK;ݺ: W0 2>A^~AJ9mQ; 0+tٸU^;2h{]1 ~D ޺\­Ag5{]^2rjjc}bo C_v;!fɈ;'޵~(l&&:6 E:4lX[ /[ڦ1DDW˲Ʋ?)%(צJIw^ًmʰ `r^}wi$,N$*LR}}yA%{ |@` IP%^Y19Ώ4aH~|Wv޽q3HQWއ%Bg^t}^>Vk}qǹJAnmthUK4ğ7G^e?8t9ia&Tc& = QŮ[_H(Trs/G ŝ%#eSgzrҙ(wl:Q%w ݡ*QZ`QG: ݊6Ǯ% }P1[>*BEn a?@" RXXIKW L6o8@D H f9߅B<,Iy,LADAT%LUnGibB>;"X{ #K0@9=ZZrM%}gn ĭɺ`< FnPA$Glhys<'trZK 4*jx͌`cL"\5j A ]lsSݍk>A,Q5<+''h ?a=&bʍiwʎGa%Wug-lfQX}1I `s"r+EaвZlٔ@g3;i`EN}TAg.&CX0"M&oqtQtS"~jyOY8ulkOt83i; w€WF0yc!W/D Yw. i endstream endobj 2917 0 obj << /Length 1518 /Filter /FlateDecode >> stream xXIoFW ɬ\Т@8ErHD@I`H&@ .ufHy8{ 5}.֋ N M6 Jr9ΉI+=V,&=6 lL= #B393!nvΰVw^`b <'C6q*NZq(Ft^ l|ܫmyxE5nMOdjW;@ic)I=H:664rS卾4LPrlX`#֍NjY0Ͼ*3PE[e5(Ɗ3rn;N){BPZe?67`ȥwJ)C AdiE0cJuA89`LilMwQ]$C ^sg>;E [c6ɞW<)!r?bt= $|]MkFӁ08pHQ\}eK+EM lsm18 o}xwPP0c<6mH'3u߿Y_&#N ~IчHO ЮT|_BN dٴy`o Y#+;`QNAw yoˢ+ V/ e$mFO<#? Y5aU#mCetWwiӕќBsCFUv'+;AVG8Έ+&p 0) 0 ]` nWWLV]jh(> stream xXK6W. "%E6}5m7XȲl $g>CaQҞD7od"1e5{;"H *6 ɢD3!j7bS.>>($JAZ0%' Je`LKwAb~[9]@$36ۇX y82*4kط>csdm(F '%iUԍp"J KDvEo^ z)-]4OEW\ _ʼ&Ai-R7O]y'%eo+:mKh[+KX@Ч˺7Rd,E„ؔb"!=96 OACϯC/)aYUou>:AI2qs[^r % }M[ǶB0pg)U91`b[c383b8<.lGZ]ѫgp=D1h42EʹϯE_غن"cwmmBR. - bTRL`i C-mR ;7dMg927t}VoH(6k_&7k콜T_HG-1@$ ܯrvX16y@$gx.ʩ-b~ylz5gdf +6O^KF$Q>:%AZ\q",?B̏uWt׀Eâ;oY] \:eolZ3,N[o>r s׋*fbJn?XhHR"CwmYtfgYoLM r*Q*o]Re Cy0 R Ҙ 0[> stream xXˎ6+" fE d1L,f0IC*bdIӒ[nd5 4{D=d8iͷ$*TO/QYLTP _hI]2;IFa17w[*d/HQI7l l@a&qv_2Jfn9#J7ol"gTj8ݏk#9PPDi8%OS{M$bn *\iv'wô?'}Pn|ھD0?`GjUojC=*V&7Uӵ}XN|lG^s+,*J%‚EXkKTq7v"(ΟvB-@%xgK[.vY `8-|z NE>$cʹ*KlN8&/\"1X n˰p|T7&{,$$~Աc~o ^# 1;(l~½`xUdZfRz~>qJJ^qon5wX;ʨ?&5&EZ8Cpp7঒U ,l:i}]A"[ EQ"LUd5pYbQ݆ *B=RR,Yz}69Z8ׯQ"c⛱nλV^T?YJ`'eFCut|9Qk]=,63eWC3u%;FNɰ*A܍ Z"Iu 1wD~Ēy8v`c=D˺EM>ί}Z ;l:ez/ Yֳ}mYϢÊjr`(ҍ{.]Za̦!/ywP s'vf50+!/J Uo#Z-g'w[2U ,13d͚PM5%\x |d$|SguvFipA!{>-1<7Xa y&tXAmx/v]-9هaԇ,L: r VyV5}sa}0l>=vng]\(M-BO&~%7F}J\>:Bn }910޳'TukE.-Z) endstream endobj 2853 0 obj << /Type /ObjStm /N 100 /First 967 /Length 1845 /Filter /FlateDecode >> stream xY]o[7 }`Y$E(u6`ۂ>m, C7]ӻMN@RG$ELT]p\crUőDTGb I9&a'$ +Af\3f7EWB$gz\a\);Rlf35 68Gُ599҆4㭖&MBn2Gdy( Vզ(!Ԡ!0l+-d,Q5M,d@Yh^&qoVLisy-N57V7 P0Z<8jg bVXCHb0!MIiNT|RMϢE+1,BcS9CiMjZb3FK H`T c+Da6r L ˘o65P[ eIks(LP+-G2 `-Y`QL1ܞ[P9Y)%%˕|%@`rVBXFDF/@+T%æPJf oOl;)g ^]^\=|?N aSN|n@ܫ,@ g)3{A)ySG=x)Xwx,X=HxuQ#,/l֧φ;q'?vjwOcɞ^Cw7xph̍(xԣ/KgkX^mo'c}Sr NLVW A:Q'ulRF:k,WUq5 ySrr؊prJT.(3 {Rk5prEJwF)ZfD̽@5ڥ JvW2chGO48}"\{Qw.kL$@IK##wV 4veepD k}[띸7pm s=2k){5׮@GpL( d$+"F~Hݰ:"Ss[UP3nD@Zs;nlX~Ύ+{ojwt(8-EHdōvQtf7 ] vziD|>( J*Zoߡ;B%Łs<0n2}ߊ>,"m=J0:uAԉ6zO*#@=hx(]]|ٕ,:ꙥ`$vB$8ЪؽrRnw,q<{bX(їBE8ݘg8EzQ.Km/ЩrHw)'cӽ۔2O6ߓxՒ]* ݪ||Heo3;u~Â%u*W>RY)F|P5CR&%ک ǔ2Sj`7b"4zlXc_$eQrߺDv>(rEhBL~auvL˳ans OwՏLmb@I endstream endobj 2938 0 obj << /Length 1130 /Filter /FlateDecode >> stream x͘͏8+,TkۀVm4F$ x2z ~~v?VS"QS$ZmXS)Z&싼\~[}Rclc7\$0S>XbBn àoM. :y| Ì Z.d_K&rcf==I|yCWvq*Muir? $5뵩;,N KqNs+Ĭ/d!.Ztnʫ˳>{^Chp׃.*V.+\PFQ0.1N1`]]VDv 2+2j"ƾvRIi>1+@αCSӋ{v# xϜP?e2} pS_&cN endstream endobj 2945 0 obj << /Length 972 /Filter /FlateDecode >> stream xݗK6z9dr+&Xز`S[YNoߑHʒ=g8??mAL>'~D!b H*,GWS4_C+Vckk[k56di3}?Ti|ׄADn,Aw;$)+hoѧɟ& 8 SLuItE%LneOtE}\P20cA8~d1[[oWkbk~(? ;\~檗})~P|{ؙ~ ؖKzaޥkZQ Ң$&=~$?G~/7X^kQa6sJˌR)k)+J4cPl,4MGK% ١0r|hNE튬;dۋ˸}p;DAFg?d".m6ۄ14L^`+P-O%&v>){1${\#\׋&RVa&L`!Tu]p^ hڮ~=Øhпmk}w@…EDMUZƱPI{(i! ܈Ɇd-DRoԎR !ib= ݡ U88п{N w Ja U|ș pwQ9e0lWP  \\ib}՘P5Utcu< fy]ԅfs-c*-eQ/vEɥt noK::Xkz@P;^[\[6tt)/[Wnql'.➿/n1v endstream endobj 2955 0 obj << /Length 2117 /Filter /FlateDecode >> stream xZm6_!>> Izll^nf7wW$E ˲-,$ɒLZE!Vpyfvn=Уru>qΧ6Y_~}'ٞ+f3GKAlN`Z] Ţۧ&&aPXɝx;+vG#r#z0Μܵ:harBly|΋]V\a=[ΜRD_-WJyTwiWة&$$ߌ #}g`ILwuZ)vC>yZ 'xKr1v؊T&+uˮ' qeL`M\;j$upF~^>Uz&gza^G WEԕnF9fp jg gus2xL"CIS_٤qf3CC&ǃ(ܟ/m2!.nt24Dy^]R0!diݳ(`SJ ph>WlEn儓V)p5mm;]R/iV:ѳi@R<lMq^ᵓToDxzԠI\Z |4*)BF3^@"̉5 1wԶrʾgqw}țm, Q o,<{ ]S!0BQR"TmD 6ḷr:vލ,Pk}3_#ȻIJY#F@YOϚ^z러G"<>$%l1a8,K)J(%Pz>tc[0]jw9 nPVboVBjfAd7? Q(ճRZd Y۴Fso"/Z T-SN\ME(5l7u\+!uô",m2_WuT7 CMkIRyz>||x᝭qn wvsA/OG.D/zn|UdsB˓8LS[;UVYBF]fjɊA(bm:ҝٜDIb2u+~`K2R06֦gr1q|3|!AMIIHԵLڴ]QUrS] /6/5, >srPz8ܸ,1(O9Jh Gy^t˽>m?İsv@p{]o0R`sp C Ån 怄pDO~xtpLбRatptOzHi/脡nT:krDT*|BԡV܍G"#H!F!gA]U.9PO:@uæLlLr 8ϥn#"GYWg4IqCۍ4D:- k2N0[aa ur@{C/_.Sm ѵ@~1ER,//1@7,a &2 ) H T5L= ƈ5}WAB`jyZmEY␷4uR KeT>i^"ӧ⊉\ endstream endobj 2961 0 obj << /Length 2357 /Filter /FlateDecode >> stream x[koH__զJ&tOըg96qxlN^ ! T]ιUE]tsuiz%'tOHzQ|*Lη_'LNV gK͕B.)U^z#'a(\)ѷ?~v0||q2 ǡs֭aI\ },V➇\X#cPt Άs  ]DG0DY\﷏ `Cl> gzp)u#2kN:9ept_<6~Tp]-~ "ф^ljU0?q"dVf?*a%ƞlaHqZ%TUS½xQZjrlׁnE[%~uz0W ˨ixHbYm4u)^/cA_dؒC-?jhb͐C0tG#t!]vXmg'Hg7&C=| 6c1C{ywx@vbW xJd3,zkY]L=ޏYL!ZɺAk_ѼX$`ċ&J9Qlšjn v[ ж c v76{/b e=ɛmA<6-d?["ǣfxmj!#b Jlq~}yi1M=0LĹV/.84uK#tD7%`KbeŝÙ GSGml0!!>s!ZW;05T@jaN%鍡v0Eé AZ&^rQ|A쯃h{̚&IGs#f|.Rl<6+䌧{?llyth.ڦ60m h0+ U%b`zz0OCӗ>\- ?&j6'+ECLD~9bY#"GRZ)sήVo =d9a1ϥE Uhr.gU:GjO +T/Dp l:ϼaQ?ave x(i*% aB/;eTk+5ߋŤ66Ș#m\=~DetYw˻tӥ" endstream endobj 2966 0 obj << /Length 1979 /Filter /FlateDecode >> stream xڽXKܸϯ&psIQO$l EC-USYYԃm9|zUN^?ᇟͣTyGO(I^`,XFh/O?"*::- RiK2V棇==FleY\>BQVel)/Q(Ix.zK]n*,*2FeA^,V]?y:]J8f!+|5ni'th'و|!`~!AiPYV),Ob 4cnGFu7o~=Lnd߁Ld{2.9#E<Ά .0ً7cŚǮA_ $+8 I|DžH'J,&nceH}e$% 0%D QO#fmа |2ߊaJ1I 9 -nlmNٽڪQ$UMFt+J9kP=9XjAA# $܀;AQ2daI2 ̻98-\dv)ҷS< :VZ3~y4`df&p)_^-DKYƨHMb†d`^ki\Զvt-M7>SPtfO-ډ=8w!d{V1/ J(YR΢lQ˩6ՆSk,c֝Hm (S LdI"/.rkgbl ÚFqrhǢuk"p߹sk\6bеtE %ώq^AoLLW#'9[ )b7KMSnb;O48O"Ogg=`$pj> uݭ% 5ݥ%1&qvo<ǡ ER!S(塎BCA  _pbl&!5dľNI1*x0PFؚ&oM̔v3>gfH /tؑa Z"T^*t `NoOhp|1E+CPMenⷩ|l]L`_]Nx>^t}>Tن+L_ jӐ$%I%gSc.K$gIBӄT4# K3 endstream endobj 2974 0 obj << /Length 1354 /Filter /FlateDecode >> stream xXK6WE[ =AM\ Z^ %G!YʮE{"=?g~^}Y(PHE4 6@D(R, FIM܄W{W6 bЎRQ0fy|2_pe~ܬ>(7R~u|{`UMB'MpW&}\c+0 3 ` 0 3Wֿ0>ty!!. H2&gR/C~A̽L,X-FCBcZxۮ.]mz0 ~vŋE/Y;3nS7ڠQ5/"B9kNCS` ZsmܦWp]R6sNbrlgfcVA3w{}Pt5CD(c.NU>xm{XmH$ݹYGuX+,l#_'7%/\v,ݭLX i@dOCak3 @,Hkdxm(1oxk[9n (bRFx*XM,Y3p1H剮 傲8wq8Ci0tґ{RH:ǃ՞Q?f9S,Ps6SJLT6LLXR]as}590>=?bC|i7Ö2Nx`>ᇰ١Ba[wٗ7Ϙy澎bˀn.{7%湷<|q:$: 6EQdn^Vm!SZ[OOnr8yjh8ER 7o 419եMiS0Kש endstream endobj 2982 0 obj << /Length 1258 /Filter /FlateDecode >> stream xWKo8W؋\T,")ivm{J CX,z$ͿߡH*,AO=iD 3|a޿wś^bAz\ 3O[mܫM`Z;EN1<æj}A@ { ;7߰o=8;ͽ F s^g'BD:OV& c?"[WIq_z.A%ź>4Ř.!R (EZrR*1+eO,FT͋[ ;OQ'HG<Q [<YΟ&5bbh/2GZ s bKsG%/1dAsc? #…; +XjbVu "cO{@@1+4F;1l2Y|jլ.eYTѥ!0:9#̴ m`f#ߑlA[f5Q:Ge$DOlӘ#)~y'e޲2m Ű - !ķJ@pi0Q\wyi[i5I'fz!}ڶ+$3kTK(d)ׇS}ԚC"D$ө0?0#p~a)`:LP .dȕtIު#'{b24o-o܈M9\TpWΑg8ɳi (/}c4ɜ)&#"R{QLIO3݅oR͹fW.p)^wߟ=h?tQ'2&73<4bXjK#0k@`)'"KO.gİЬw=M2F;D<0e,O> stream xX[F~@CquZUj4J$mzFk wOܪ}b {ٙo}oO~!XF)J%.ɔE*"6z?z[,?ܾ2UllJD+{E緋O pDPX)xG[*ˆIABƎ)K~]VU ono^}YY~4:"ǹcQݺ8L9L`XnAYT:,vж3Ǿ4np-9,ڮ[d@B)csUfO'4!s pcm3wܺ7{HYlpG @D qRgmq%}ҒqbIʥ`Fi:AfX;9,8$OEà $hf!+#b]w=T '4FoLL8DG#Ut41~BNUYЏ Tx oS'Ս>,R+ѽ30 do̦#a zc$<*"@q/mao:\0(|(|:Mp:k {C@~m c`ԋ@ \ g4A$W9'\7ތ LnۛAGhgJ:>[ȼ9o` )J17 x endstream endobj 2999 0 obj << /Length 1252 /Filter /FlateDecode >> stream xXKo6WE.V "ڢ{]ߒBe[,yE)A}")K$ CѓFp8񛇍]?7 %161MpZM`e@;fFK`WdQ <1p@NP)참 |`<@(A.ϋ So\pn}mD0ʖfIqXWuY}8FO X #2k:U1E:8TZIKMjg_ص7uï籩wM?zRr??VQXy*+MbGEYKA_`QNCOg᪥wX`A}TE ]]ol&z-@I$-͵(yP\,ܕkm/x=ouc,2b89|b5e۱kK# ,& S˺Q g4׮K*\]wyBh1S,ܚJ40C|+3zNvywK'̗cjG?aTp_\W ?bCC]h\6K}?9 8W+1`-J Il2c- , 4b:H[3§EiةD~I-|Tq}EBi>@rli$ .o sh8a:1af? !n_gl a(YlXxY> stream xYY~_! QnDIL9lc !y5j@G[_*F=~ÌxY:*ip h?$D&< ρHH" MYp_*o: 2N"Ӕd #OKaEw_pǀlfa4(aۀXf'CYQ£U?wt-uCH2[YA|y#^>?1QxbK ¸'.jSM0~XDDU,7\cmhGaܵ͠J4'׷;wy9yJF_1c8>gSn; l0:S O΍c,8 ]/ 14,aNؾX0i=E>'9±(TߟǪz׼UIDŽ]ch/PVRjǢ=;0t2l]zyf@7n{iか0t ,ͦ'۫sӈ“rm?Rʍv ef1ٚycN-7BY~;}߻ˈ|_"/;;h;a׎MiNJgrl4 6YI8uGESxHVm`us@->U"ͧ< s.?r.V[Hd>h^\(tS"#Շ R"$Lo'||h:7,f$k,'0Ef}։tM²%:9y0nmOh}y~IqF709-c"e>WNz}ʇlkp!!]h>ddr$wV!wZF]nw'1p`B Z%"8TXf˛FܧrSzDGi5zIni POb8.2p HMqa&M"){ݞɻ}<>=r1OReol̩ͻnXL#dp(^A eL cʯ \AE$Sn뫖U*>b'yK'Z6x"IHf&ܸĭ;è;&Y?og߆مoÅZW wݘ Cg[?ƽvp).c@d_]N}UnݪM?=m)=Jř͙L ;q/7 8tsdySp,i'ҺvFwKU^CD]ɫbۺb \pILO{ #Ƙ lT2n6vo^L^(?5dkK3g}ϯ \zx>cRfc&~;͛ FCC9L֫A~u[)3{=HOoν;1[=D+w/hAg\> M3~@l,pEW{Зn<#Fr@o~+K_z+1Kẁ'⪴-s;IR;cw ;n2E96{4RlvDHsv  cS7#fsi/dz +]zrS^O_>{%| E q*_5N 9n$ jD |-qTÑ~6CNe`#lܦ T/UiB"-lnq!Hm5:KNtːB=#ϥ"4{ceq[P9:^oͱwޝ^ߌIJ4|0[̉[~yVr endstream endobj 2935 0 obj << /Type /ObjStm /N 100 /First 962 /Length 1854 /Filter /FlateDecode >> stream xZ]o[9}CdQH ( Ŵ[un?0vοC%ΤFN<@-EG$X]pFu#N)HqID'cpRQ)rLN +TlNuEx9j5-\QI0J"!TlHqPPLd%SD `d*E$2^b JK5xYlC m(H36KU d;M )Wx41̶ ?b>x!ej x PWɼ+p@Hmj{UzfS" Jxsb͹ɚb8Nԥ`A7APu),E"x)e63$j8[#**H9 ^!9T ffJh^Н05gKvj[PF%ܨVkXlhi{ R6ڢE,#,XBJ,ҢA$# U\H୆NxIG*bi0ևpt^j5mY, gkEiA5jC+G!$jٳ nj5ngWV?a&1 auorRAE$؏37_njyޟ-b<ޮOJ7eQ_c X/Z}a}:w,HS{0sT/H ǚoܽA6+~qG$ۃ \FnflZ&)Pӷj! RGGy_?B7=Znޚ*${Bqj@nzuo%Ňa6 jcoތ尹m_k5]R5xFoS@"=?;tT.p3v ̙g:7Q}Srwx`:%qDIu((G{2>H f&AT:@ "&xEݓS0OP0?Wq[nfZ&=MPh}V'O[eWD׋ՇᔝWDB.քgo\rZ'4 %rz5ܕH 8I׽"c*QNB֛wsAQ}2GJhHG;R§-ViIwѻt{I`AfŮkf6}2(Mh%ѓ$oGYiF1|/n}MHMLslZ^3|L1>xǘg49wjNh.tk t-%N-G${.M B ~[IZ}v<=F:&F)AFO9f5OLܛ:͈`d(]'rd#^>u(Z9))U$i\iQq`ic]ߠp1C0br.O=|?OV endstream endobj 3010 0 obj << /Length 1596 /Filter /FlateDecode >> stream xXˎ6+tQ>% -&h$0dQ+K(%~}/zyd ]Q|]{xyx(8uv AID`{DqeLm܅?GWftH1311;P2| 3iv׊ q 3EWwqC߫#y ^rOo\p∢: 6cf6jw5aw8MoӇ> JP$=Fʚ(CmcQݻ|2LʌPdK%FKo = /a./UQeem";]Y6;Z?LG0!}Wp ]Jf{%X#.!Lkc6:թk_] kSfi qZF?s *4G\ZsZKȔ֠|N ?3|bhR^V7 `$$z/ JU=CYZND*}m ovBl˖jK}efPX4U^di([SNiUD449 k  m(M'NFlzoz̆2C0]jyT"+t .}r֮hN- h.)H:19h9TFpo+z]^SL$-X҃a> !ya!-G,D12CvAE@QLXqDta%PD#[j=]>nk@Xm*GҐ5@SݺZ:X s -/9E(b:R_v9_ )ȗ"9UՌa(SW[`x,,!1\c)yViUk\1t3OL +3W1^ycB)7VӲSu /,SZrQ‰b dn$/)Q~ji )! gKۈoV7lwLlug~)Q{{L)BB/TCgv4{ƈ|k-_RbRάĤ0^NQ Mg}dX ŬVRwRUjcFxZewb,~Sy&t0nk_uq:x>\62FjbtU}cO1 XQ9# endstream endobj 3016 0 obj << /Length 1245 /Filter /FlateDecode >> stream xXK6WE.boHCKķ`!˲M=I}"eK^zMО,73]#1e>y;2HK**I"Whn._;k%\)0 :C3!\ۏ&'&pDPRDnrGK{auwH(>Lq IDAXM[.St}ÌgNC>?WqfY^׫vJ,`}8=A\&۪-_reɫ{S3 z3:@B6Ga¢#(Qp#fF0qUn=8ov闻]v?n7Cۻ{R܁rKrO`fvWtg{M0s-Aoiz{$9ՌQݤ6?f8~wїvpK f$7(i6;9֑{xpҊ[%*ҙ;qģOf]ݓE$@JN–_2ԁgUҝ[ZPZS^=+6u:ma2*A^UqP7a QsyN:9. bTDTty(ѺJFs(k@='f}bjE&jՔ$E +pSTjb}\(R?}6e2= VDKGv/nJ]>;& Wbx4yMYn|7ڝSkvWec 1?lF;\HXDL T PU`bz*)% s g/`.L\!IEu_& u \]e\O^?cg/ЉcフmM'/T>ٛ6޴CeݗKAYC{?YU 16̓RZݷBi̟Zų endstream endobj 3025 0 obj << /Length 1962 /Filter /FlateDecode >> stream xYYo6~ϯЇEԁ}[y]-'BdՑ4!cE'p3C~2nz7)K#D,JUEp ޅ?|[>\A8H@:R(%J2+hj-$=Nqϗ^8Ż<»7g:M+Le N^ji&4xpc#gJVysև<k)͂4kXKRnv0/smk`IL}C[_զj ߹(~*h4r#)1q!|2,aDVD$u;7Xn5 -+a"2$T, HZXqlts{n.s]Sʘ>*Ě8p)Zo$ 7YY兰dlT ˦9 .n1KN6=Q R"1}0C(Ç,lw> Mٶܯ6wnUsS5~@AkmݒTܭjPZt}*PqHԌa rnx5nxL4ةWӬ+K;*ǨNeۻkp0١-e8KYD:fN/*Bp.ƿ|r=mnr U2]Tq^ee#|Gڎ 7 fa{-d0ǧkz鮷Ń/[?[;#I 8fefljm-S/xE (#P [zl,.M 3 폲 bۯۏ%Fb6"}^6 !B<3P=3pu]?t,5RsG!|vi6=m 2.Ij ƙ&tfF0H# ^v}el]-xь]6iߗ]q1;ijۅ?QêFX)y3WI>D.ʮ:[c ( 0C/Wm}GS6 dlrGĄ򖇦>x%/b>AoC{}Q z m`-ܫQQ`#% wUR r zR50 G c[[i&Xz t0 (LJLjqUs&<2ėRP{0d$ y@&R F4o070YY%Y +eI,2!'ywW4 '4753caPv 8 8 N9 8 N9 taKap40(|hlx|@bwJKD>7F$œ}/g$=}Wz-Z[4O3?w*L_ 4OfLgL3$o8҈D=RY]mhx$>$KBĆK=b#0 +P ̋VLg3#3'FY)w&G=}#\u$F"hQ b11#RY GslI&M, ϓ%ǚ?;Gx> stream xX׎6}MYDJBKb>6I3@*|}.j0?Q.ϡstͳ 'D¹<8\ 2as8e&rSҞQL rQ?pxZyu! 2@a%w|v FK'Q&9s.6n\`G)'(.EY5Kb5vv"J"κ$O?{tX?ܬEkT0 ]e,[ | -c{32N0]c&Min?nЩwVAAiײjeY)3:w)Urd!_tsFc6w@=יK{Z53aʣ"1ea& mwa *V^fԇ-.la1%"uĵd3*K+Sٸd2nvh)ydۯUZ$vR*^3?1emi75J'aby2!_.ߧvJGI"U:G=Mkii?iPz!fL뺴[)/ڵ#kEC8eL'tv3C2ߴ[.6{!-q>iI+Ö`ꪑnw\'UκdjKjZGJ}TTT4"2;q)΍6PeY+' y"8DL3?yp}j]DSTUg6=?M2Wd-`MMUi,?bLNVyhRHiϜ]yP)ȧ'rAz"FÜT[!~ 8"Y'ġti$k>Qi}d 1OlgF9",x\|dsH BIF@7 ^;-،x%-3o0ӫ<]^-!@ J NaIM{BUj~?MtsR19i0}`Լc=4,HҌ'A3U'u>\pNhϴˬ{( %^9I endstream endobj 3042 0 obj << /Length 2446 /Filter /FlateDecode >> stream xڭۮ|>T\R- iH$hrPllɶYrt;Jly>CJzgOzzwJ^&8"δd0&{.W, v⥀kD:b1Jv I40MO|~I|@;#x}z XƓ"R`^HIO:]eBDJd!C9]C|뱴2,%pjC %~3~Skkuq@ OeGs}?W4vax,^ZI{-v0*YD'MՖ(*a[5jq}g"cxi6^I):tPLκJ ڤq4~!ꝊKt-tn5R k]ծSײ}2'YjJ:*޴tpdLj+ T5z,W8=-ؾ`q-"Z'x-Kdh$#AZj  c=8Ǧq2@?> 5iuys~E \.+HQ<ǘ}zogH/pˇ e{K0Xv??UGztgGEK@Eёe=A70 8 Oc1;Ǩ04*Af+JCaC h7}Ej aY(>VlA@3wC߷a9WAr)Z9[%SЬ&X}Rs`[zJDM ! Ҁ qJǭ~;%z[ZhAY@^gcpPFp#:2f-> d2 l(Q.ڲC[2`Rp~t`q5v4 *xih!Xw#te1| ![nr,i,UM1 @( %~9ߴsm=@d@HWILvזQ,ʲ<=͸bmK7f̥Zp)3^nї K˯Pv|Q"80ƽ2x8br ࣇlǾ]; eFίڰѿL8_O$5liLĝ Wm&jމ8f&*yCP۔ NcMA#5ZGT~Nx+6h0AP|= J a Cq'dmqxq%= j!cdP.q1qX6A5sQyI9D3Q>g؋żbd"AQ׊QiPoGSf"f(u\vucmexI^pJ* \lw--Fdyyh NZV$V4a2 Rà ` 9ldVy1V&*Z)ℭTCքٜ#9>(.-E`Iǁi!]v/0]2Tj2VeڎVd: i@6N̳ f[ sIhi1ީ>3tw.W7SW NT]iLUhj.3^C@>1,_g²~uKΦ;w=_.PV7SwL^t ZP!~R"6nfm5ن:"귢,Q8Q?~y3bH&" W`1T&WI2]%9 \ƱKVѪ$ ;Éc wK4=V=Mw[FHdK;qT3x}h}ϿLK5?~ekI ,rg?dD OtϞd{KNH#w׌v}b#X[e,B;fNi% ^*c*%nbG[V'uur_|jATbzLH9o֟-XnLG R'(PڧѶC-L jO"zJ֏0 ?? endstream endobj 3054 0 obj << /Length 1206 /Filter /FlateDecode >> stream xWI6 WX|A:ZZD9eF0>b]Hկ՟+ B n(=?DHbHQ@ f<}>Xg5[O'لCƛ٧/5meӔkxFzөlʲص/j|A>c1Drg^S\m}:KxSGOUtE7p\*n]Q吩?X/"|$wRt*E9Nx̉Yx E^H@@{gޗ"UOCxCJeXg6ݰ{T4=ȪR}VV{#1, \Xt =ʟ\S6dN]@A_J i~4dcQ]ͭʹ3{esg^>TKvcQB陏6l#x˔p1.2lZ!44:J<&RδPޤr3U^Gy]d漷 ;WbkOLĘ@fTZ{./RaHF"NLt+XyS  -s&T搎"KS{r7꺧%"œB:SNYQW` cŦ٩ߛjR\ᝡytaHL*uciUW-`b\2 lia8(%LS̿k>nnO^sG2_(0ޜ3|ʮBfo.3Kڷ>F<8oaщ->N8&D@swlj"yެץC# gߥ+\aδ_5t \71wˢ;T/Gr mr9 FB> stream xYY6~_!/v3`mO@B~򬦺[!.dʽͯrDCnSƘ;Zْ>}թݥo6`-lo*ĬþkܫV5ZB:y6C񹴔`93mGw4]16ֱwu2l"x4l'+9˕V(,G Ԍn]`% J2+</Ngmt;Yabeɨ)͌a붂d#xv_MϽ2:rzfQF}NfD.%5*(C!Өa(‚j`Q7^F706붹.\/EwƗ-n~S_{T6v\݉Zatc;7پ_^瀻K9z#|iefkUP-cSh|Xdׁ=9('7Q?Hǣx+Z3\$'9x|D( GoQZ xo0 o=x6ԙb ɽzN; W$EO0WGUiLtozuheׁ2PI4ƽ~vX9B#:VϺh6hƗm=D|).!sK*N[fh&AOH\ΏlUR3uCAhi!uK0kTa Up.SDhms<'+\!c7˫֎DٷwshU]jfq6j8X\XvA5v4)Z[CwGa#mɋ\8Nv&mv=x܆mɦ \f5 ȂS@"">;*AШ,D#(͒ US|2Q\~(rfjvYƩm2T'-簉k/ۗ7gO޼z͋qHNE&_Zl;#,&A!,]۵bRvͪȯ„^)9CD ʭ,E[&.UԢ,M^[w+Ņ14  -W *Q{b'_Ŀl~[ /DEc(:qQbdGp;/H4V)W;d0k'[! 2 endstream endobj 3076 0 obj << /Length 2081 /Filter /FlateDecode >> stream xڵYm۸B@?T[y$E\ms!׬HlӶYr%y_C)K6^Op3!MmD}?1*IH*r9|$fte iJ2@T~,?ͤ% D2ZL5Q",zH&0]EOwj:>˄mDN5όJigElUQ-VM}/h[{͏ь1˜C+ Odު4X-5Ɨ{h T˶ k}d\t Xhk@05IzUa{koA .I%c&SO8RN`)¨jQIuWnk S*0=@_c vE]*0&㶨~{uNוMX^2FD7f PSJqyX @F~EXa2T} M'^P J pdSEBϜ,Eu)U[<^W32 Lͱ^&N+%QN)RS> -tt@=`$ D!._ҐG-DB⊙P‹vNo#8E:eު KCu-3}-]n6\&<ԛ!7+IDhcFs IN$cg&lffdFrA'_|]cp9媓_%YܐζzzG6@Y CW7Jh qR36[dD$}a )Qr "hBC*A%xZN!H^vbdb[!S(s@|9Xe}<&n tᥬ*n!Z(˔ַG3,ٴe`"_ p&[~Ss1]ÈL/Rp†lP/}=c¥6;&Lc\ax)lʕ:jCѵ%`6"Ⱦxҩo}QbA#lfVe1\_  5xRlJD勅f&ҾN;vu )+֌IJ6[A@80 Q38sGp);iv\/WT9VNֺ˦hNA+zt-H}.7t˝.5>3Pl.CuKB"irHn߁rzÕW@lWCo|B=یp7)D{Ǐ>-?O ׇ<%TlnG _5d&M$V51z^L}u2?~mc[cl7%.| l,АFsw\t=td, ""\+eul57QnDl^{6upT\5zx5^+L\/?zonG{)3~qReP`~AxHx$0]"ɩ-Gط endstream endobj 3082 0 obj << /Length 1974 /Filter /FlateDecode >> stream xڵXY~_! /cCԁvl0b؞ @bw3QKm;"TS#IY,V}u&&]}uu-yR*yrKdNJ$Eς%M>?F_v.sa ezU~b@DvIlWI{?$dUk|\( >Lxۃ#;|(|q4 ӆ}/|g܅!ޙ$4>ڧk&wxTzVy(aL^ȳWTB\kDAȇm}TE1iAdGĔ:5KAבc_eyHU WwzA|S7';b#j0g8UAhI@qapm(])*\)*BWڝsTGu#w>"Q }4*͠my1ʑb$U f1wgݟp7)]{ਂ |9XzhO?4DEYhxNjm}p|8*F0F> stream xZ[o[~ׯc pH X`/H[<5GPG2$H c++ys[Cr83P5e2Nvbpthb"hX_"G&#((2;R>8*dGIFeq5hX4~>,NBc̦mr4IQSrV:bHvZ1l3m&dbA0*T#2I)\84P"Q`{` QaU@UNt..mr" l˂4SdRKxmn[Q`ܬ kd3>WteQj)A4V.IL׊Qis; TJf /V bAK/Q `}PIiF lr%YF+^rJE8Q%MoX@`(]*#^M~rpB&?Sqd,oލ\12ssju^ρ[<4՚z,֬}MIJiMl4yM~鵛>oݝ o\w~F!On .r/fuuXu˜'ͮp~5AHa ^@a4ys~],5Z_vGx7//bkX3(lនO0G7GV}Mzr7xdz'}./hʆކ=-ްyް}3π`h@f#b1Pf $.ÿХ#?ڥNv]ѷ%q Cc t[7t~HDv Pgn( G>wX.ƌ;W\SV/,U]g5z1AHr~W+&Zc~0 d&Ȭŀ]x34z1ҡx?u i f3F˪mFk> &:a)@"DØ &d:tAwAMRzK;.Oˈ|1R|@keϦWvZ狫3&T ճԃ'8r_3f:N{S]uɷ"Ǟ P6X-#C6x\s.@1^9JDX ,È={x)XWPI2&!x{kprg Rr+-< 8Bužqު2H90^5D`Pә$l#g>g*݊=gP1*TjO9_x銒 M.a*Pa_b4ė|zs 寧ۏ(_Nz,G e(+RAqkq/ endstream endobj 3092 0 obj << /Length 1824 /Filter /FlateDecode >> stream xYo6_!`/v3$%6am7ub61Yr,_Nx#m_g?f)JcMbaSh9 Vy~ڋ\.>^+j$@:%!f0%4$Jբӌq +YAs4 n5>`#/?gؗ:RDpFPY^f]C+I>sIa/ E%X,CB目\>4PRxMsz]ڋ`b50O^tբQ#d.K06e2REOaF3r+[CI.hY[o!۝M_5ӕ.J1gIƌUrq mgxm :Yjc./2aЙ'X:(AI)Rr_ Rg6=|g:Ʉ!_ūWn53&8$qz:Œ#ӣ2(LS3&s棝Zcg{ٺlZn,fDD董\6wE+ő:]k7`[WAvj+?/Yv'VFߘ[ ZB _%1uh5B٢+#ETZ& .ne3 {K2ynpxRKGf C`n !kS`ߖÕZrԉtG#:X&<{ DG |'u,cƏFBޠOжe;LDB}xv53J̞P뷓Y8\Ik!^PaOg<̞CٳYWq/#-oj0Bķ),Q OXItzLBME<&9gG:eNs'Z3NyD$=zwhkܻ(rZjD0O{Sw7#6h8U%#Ta4"ǷiF+w)ʳ6|hw#X:p#M[G<>|LeOL HI0Rx41"a:zYh} ,>u62 FmA)(:z Q@"~AL(MҠfJsAAfnXpͫ㈿{a|C^.^XW2bW2M‡.$O@T o,qĎwBh~º,>g0h 1~+vԞ~9'4!MLd^+xY` < M6Qzd= [(=}w= zǫ꿇 "fnjׄNubٙ!Z 07xyL255x)V)"h6 d_iCˆЏd޸wcn!IO)1F'^8;u{U:죤3%$UXDL{^4~>CLD?ww endstream endobj 3103 0 obj << /Length 1897 /Filter /FlateDecode >> stream xY]4}_ۉ ZAK7W?^T*C(*U.?طȻkNus%S9<8᜝mnnuQ=8/m^Z+Xi$',7o7XuqRέPȂo👋=@HVe˜ĭO$KF)42ތ'/8Q49vʌޟ>7fkƺn[݄chbmw̐X#qМޏLnPH韣!Y Š6Wx eŲ$ϋ$"_aݛhxkK*/ݱ]la %xr*<wo,Q)"j6KKFu#+tߟAӉQeZv[lN6{ʋ9%JȰq9DTaa fˢ**[2jET80 Sg`K>^5;K" h2v^0I8+2@JeJ<6P0?T>v3#>X$Ah`؊YɤM v&5?w~Dlnp)?m}R<و0ĥ9U!{|'lP}iMn@Ηao3ОzK'>Y>ތd;{/2茕ywd)kfw7R,3M BWVT{3p$H_`oc3CNËϣ]]Od^ƽ ^qϤ91YygtORJfҫ楊 l 7VG^3{=9>A&ޏ(ɿƋP]S/+yAI7}o=JAIvX[\H&aO]mk.?2Ji7a&(~sbރpSUDg6t םe"Fn,&צ,% # 6F1ff)|A)BD<￟5n7[ka ~᠁T,SqݷOx0ԛzxYmC)|`Y :'] Nav3~[+lo |~Eu_srY2Rl)v, A/zAjsu?8FER{G_UD~pQl/K~j?؎w:xHNYxHt1^S*rݸ(xެί\]mqOOK8wD|͡|$nȇ5$WXA*)=bD8a7~|.4ߋ`*RLhaN7n0A!%YQrqѬM=D%.$:W+īDP^a[Xv&o#Y}\tTz؉G9Nu=Gy*~gGSqNn&pr1SM-]@zE;k+lVr2^71YAk8cOYXy^}а.*A*w/KK8WO7WQt*e|nq"38D{wʽǟ5Re endstream endobj 3114 0 obj << /Length 2304 /Filter /FlateDecode >> stream xڭZ[o6~ϯ/M.ؓfiiQ(mkW\I>A}7dO)r8phm"}s, eqEIτDEaqdQD)LIRFA(& }aij4z=wQL0L{r ZP ʸ)FňjEÒ`+?fS[/>ʭGKJ`Qj(\/~41om^oy7V C7e1?mm_fwe=a(IN^U4JhSfŒ."~/&-yLEHp XHf KR Vm˦vIb4q .YC#|XUo?[^Es46k,-ŋPEmӚ;fuFva6;k$ tL]1v;+:vp} h;S^%x\|R-c h8Z\qlEQ*rE1A v\U粪̧'iZ-_fŽAKu!!oCqFDߘFjzVts?U>]_9YR;6.I2(ZmP ֱyy:i?KZc6NQ 2yfK,5q_ÏMU5s40 QepGygxQ2ˠE80A8#z|Is C-3)D ]Gg(Prk{M;"3XB "='"IČ! iJ?E 5!T3B_ %fQ51`>ң cuoa3V}ZSB۬zYe,/,2QA$d*_rƨWr)̝q>WIT$[y]ԮKʮJyX#lr_7J\P2WpqJB@IxYerXOZx u 1@C3lsƟt#MtΧ >o]Xϻ"'5O)"c4,2e ,߂C2$0 Sa+XH s0Ю㥍i5Ɠ4V9Zfdp yb: A;ڡ"^;f*&4_k)A=/2/˸a#^)!5XOzNwүujjARgȘkBpp}֐,C[JG ּq2׼py2Cw܉\)VN20fBTR-) {?{P7TOTc%Xln Td)xUd5$=T0&~-VPƶ歧 0Ԃͯ3mx`+h(~锽tQ%7pqapndNM ?1[ʪV{Yu 3oP6쥪x/41肨?w}Ӛ<𕽂6H' jr5V.FB(ۖS(mbcӍBFq( Ŀ&%,b;Ƽ [SC=$=OW5b{y0 U7t+da yB@f^VW"8;H?J}*YO ,6h(Pp?M=?#u ܕre瓮aSWӟt0v~~ݙq Ԙ1=#Fza!nsPQhO J) S}Y2 Ұ&~ 4=0W>"':GPgHSCߢSr$ ~ >6qmޛJ@'c_h3kѯ|CyJc;WV里iwGa'wPȏ?M6c?,܌IcO4.V+cծv~:ǽ Rq*My TOenђ: km݉\gIxCګ> stream xڵX[o6~ϯyYR( tY[2ͰhْK%GN{09߹/~:{Qd$ nX އNks: R8-9-<b(I'a"3Ξ_}:cp@7 ߝH^, ]3J".a ޝqFt}:g 3 )&22 /4̭`mYD4A1&4XF"XF1 ?DQFw}SΔDžn\9-W8B|>8#il}[Ɇ/\ei~(|+K 0ϧEgrj;F9tĚ(1n ygq.ӲUVƥؒ[W0HUGLi*8pc\\&v|VV-k<^}L.uyœWv.KPxڽ1Ǵ˝v0A'QgvSŒeiDa,{bx-/3H0Il-mc{-nJ > stream xXYoF~ׯ *6{rI(к4pXyJ2y*J.U^Y Zvy"V`E)S&SUqڿoݯ4!N:׵"C.孧ܓ7}\8ܪ/ב/,|PsUA6wZe:_P{w˺KVL^ks, VbGAQ؊rPe^d]PSAӺܶئ]Pնu^觾yx譕0LN9>jUZ8yѢtDꖣP8L[qf+r8q*'X2e\$1ZXLʛԔp[]S)HkI}J)< (>y]+6uVB#$o <#-|nJd ܗgN8& Zola̱A䭉8::n`u+R2)$"P2uP:Ku="U[_~B"&2@ڭ:E hYLmf* C0b_=w?hMnCDn f>TB\"{R=WMcI< $ /51b\{.+Q9o<7uN#Dh!n$2k%H/6go^^^l.כo\y|D tiO~Ro1]ec=7T^x~UuSjE>1xN{;x9MeD]|[ժf N"yKH+2k>d8 Q<[4wv QH.x"l < aZ9 p<%7/Q;dzM2)m7l3c=HX#g`}~$tC6c9bhw'eq6ga3ew$ q[=p>L,+îG!p)iQu~[ų~7Ӑ #KhͶ24x_P1ΔP< '!B9DwM9ń =9waG z {*[P5xOؔ?M]Y2OVu} Xݸm@H!8T|/$Mbr I}1CiC,zeC, !IJm3x]m}~Nq NYp5h&M4:G5o%({%:] endstream endobj 3140 0 obj << /Length 1614 /Filter /FlateDecode >> stream xX[o6~E͒%JذMK}j Ch[-;)"Y{H|$xa$x#'2>ȋ;%ͽ@I3QPP#>_P@X.g_gG/p2È%%^H0Aa [gS0cSӆާvlç/.s|NB!bVf3WrUQE9-(EZМn6P*z*47FB1jcWu."?ЯF2YG ,1éuQr#%?eoEl|kT@$2R/E qihNbW!3h~KҖu-EnOFp[n=3ydE){YQB)rLI%m䧩G[E`toD蔎}_P+:|PIӖ%ERoQ nCz`ctdռvh:! C(/XV`f=4 3FIJa8I k拀2VB0Lj$;* YhjߘîvZXɼEUs"=OxtH˼6gg*age՘]P|ƾR ;isX/mF&0erc)fPʩV㮪+<ͣWprDU[iTz2vk+d3g:I*a6AdOsìA⨟5T`""r.rqEL+gT`(N1A4:b[`lNGq!]ꉉ8juz5ֺ++S t훛SqB RV{Eyl,tЕ (^J-R995):Q1W[3wVt JNB3a ;00\ڦ;5 ;\A#L9Έ6ft0.S{]YLgx,Hxn[ͨ_%FI"e nc]n!ee8 6(ΦJgu'U w'YNC =˳c~_ߨ@L|h/fzYI_I>j@Kυ;ɾ~ɱvd*Nz 厡2;*xWpm1|{sC !@wm dl'cd|LӇb7+rA]=Ȣi ̰nMqS/%{=)y>Na(qǪ~+<_bY /\HUw^BǓ̅Ί\Eec[8DGI (GyreV!#Y`:NlHK{2ȅ?+iw eatmzs0v`~]^]]Cps{=YXZG` ?laaۘBJ=//SSa'.bQ> stream xXK6Wr1$$Z&ݤI],k!Z#[w!j6'RpέC6AD#gwˆDwbc̜Ms/;:v|E1I|4a='SX rb@D63tջaCI ^S9!KfεN&zX!#"@]nNU}lVk`Y,XMs¹1>k/%Ŏ~(Dg܀:CŦT'1 6kݒ0$OCjx:@7O8/-tIՒl8vE]}\ q}iN(N1= C+RLw8D!Ǧ^3KK~'Klc$si aYx13;$H%EwT]!ܛ['BPx̟mo;|:I0b*Lkz[^ṥpKOk/=q/=K'14Kyۋ?^޼r:ǻ<-(YW=]>Ƞ1 endstream endobj 3154 0 obj << /Length 1307 /Filter /FlateDecode >> stream xXKo6CEŐzZoOv%JaCëu'Rp.vvޯ~߬\L%ԧfD$pX+#&snݷAd惢fN 4P!c(|d,v腄bZ]lV_WC| >8I<'"}ܬ\a5kO#PQXN#c7 6ݦU'[QoU&S\>}9NϏ{LҜ˽9﫝^!GE:(25 IVǦhfX ;oLN)E_Ieq!N.dkȔb;&"Gp2>dSRȗI(_&RzR%xPoZv͒ϽcΗdډwI79Ĉu29ዂzfX` <. ה}ha['Cum {[h0N> fbKu5? s!WiM"|z8 &ڜZ.>r e$2tcUۈ`Ӗ@i<C ˸R}X+Y>uFRc΀6,m[r+嵇"܂  Y1h4FX5ޥk S?rq65UmplF 0zN{4h Jn{mYˆMLVǼH!iyklV7z#+ivVղ LDCJR! oy4Vi@f?h!BODT!iÒ6d&<z,Rϧϡ`~|tyF_UNE}T$!J1W=-(?ob% endstream endobj 3163 0 obj << /Length 2007 /Filter /FlateDecode >> stream xڵYo8_!^C̒"ဴR`mb˶#; -ɖy58߿{C/aIb鐅+VGy1pp(b @elDB%&[G3ޣ,! 3Nǃ8ZD4S,dۛ׹Kmng36ܛ%1Iiߝ@s[Dj"[&N)uwlh!o3n#9(FNy*]7#=ΊhBgˢC0ʿQ"cd:t^%\" C 0㚓cE797ems1ҲiV/iYfsL96/AE*4 hk2הHmv͔=ҴmJo,|UCb !.uW.IxS⣏}b_l61PzcPV d2.T6-N)#ƅvN6onmZ9eyAҲ*ql:[8V]AQĒ ZPf.Mނ `(]滂> EK_Hn?fY)>캮qTeҿ 0cnquU6v'NsGq1~}dʁ!z/0p^tH̴S1oipHs+$ė Xչu&U &*_u/ pUYWfYkj[lM ZBK(0ЛMоTxB#95ܱܯ&3!T_IЄLH u rQDڦLJ(㷙7 ĿO`!'YZ@Xc8RJp 3Hm3n]p{spw?,u&4ʦ;Do*c>gmWML8TSw ]`gȟ *bR2)(|rRkih9# a Z#`ן~9\YU2Y.qiw~YT?^ 2ׄ̒&L;1GhЬ ȵ"h>:ͧЍ'5E@~]F Y 882-Xv1Kh,&6uyc.o`2y#3Ea9(D2ZYbAb`6ӼS*ZOpE-jiJ]T'TP!xŪ`Cut#bZ }uXO{Bb軉 Obd0Y:-xln/59'ANGpe} ;{p4@V&omu-2$~ GA #¿x:i91<\wei=1O&&(͙2Sz^_!MV6zWd a߻t3|er\O0أ8aa2MT`H IFYN)d0X\s| шf2jdM$"$r)H;>Ν2; W7' X婹> stream xWr6+8CN NMbrpZ[9 DB"I]}Hݦz`}x΃A zG(qX yԻߖ{#ͼHKH(Nȿ c4{=̐:^&3R #禎{Asv vx ֖ں<1y bXߊc;;&!zWKs4~&h7S' MBTQe='n/FH=PHѻ[ t\7BkI*Yc@N3cHvInCv7Vw݂#njd3rhlluE/'E.7 kN넎ՖEo,>d#HQt(At=$:~Q&]hF ڙ1e浢IƋB\]ǩ,Đcj)g^ϫOdMRJI"^:zY!mtzfrZ}nc1 .1;Z dv#[(+gRB󉻂;k&p9vi5xxL"M}%f~. ј(I?4pYS8 ^(Q,4vce;w7Y];[SyU i21ȪDcqܡ-[0Ak#2#E**QP.qyf#ٮnC+t v$Uf唍+γ7_R"!@naDR!ۘ<DgaAr~,r\ElFDTTƕSXA( 5[2V'Be>^x}Z߾_o>~Z-&m9B3N[>lT:xhk шϽl4މ AOq nJtuIeHe&ˉIR ^> stream xZMo7 б=X+R"%F-P495rp챱ǯ֛:f'|Yk4EQT]p1o%G9[~Q\dSR'*;L.W4\ ɕdbB FP`G+(*$VKQ> Q-4٦LM1h)/1!a*qLGx 5`Dx%YCkօ *(,nރr66m0S@96 b,R(j*JS6\ \DnQ_\dsi]VxEc.lmNY[ԕj"& q0P8 D1'#"d;Gb%:/Ak@l ] Z=J@ N6h6K倓baj 1`T,qn)䴴Mh+p16Z|27Aej3hp9Bp3׭ UfX+ ) aٛ+JM[q!g%%.d I߂w ojބׯfϞ5r㎏ĈBm܉qlOwL{{0cw 7GL4i:1lܩ͉ڸ6̀gWl5n8\,ξZNCxF(|0JL^ϗnCB53I/n_oWŰnWϿ>`ceWcUoPK\}na]ˣXbrqmbN^*B%mr1\_}=FCi;T"zyF.ass0/#uu #W4{XQhg`;j5^YnLkF0f}}?ۜbJ>zI H+v=aaH<>Xrg옂zca:PxFiHKdaÇfXW }PQUlBA>6l(bUj͏wbN&x>a',Hord+NcD)B 0 D(cd9E}=yEF-h@jBjvHXk; ТNGkØIqr3'PKv GN#pœ%;JOA (O1J2y!rAg:7O/AF ?ʈHlPl} c&ɝHtxY)zK)yiQxiwI ˛ast~:h V5Kv=Y 2Jۺ0bqeu_-Ko0mSAs hq5j·85hB.2sqAayA8X^,PX-vbo+{+>Y3.*8ΈpgtR)(ꁗX#S;WA$/kߗ`~4k'~>pT6!Hrɖ]H&NebzҤ *Ig" \ݡ2R`TS DF.? '=#qp"ec񈰅JDTSGۇmCw%N|E|j4٠Y?"*≷I-Amo |$#!瑋6D8|L/H#Q 8 endstream endobj 3178 0 obj << /Length 1416 /Filter /FlateDecode >> stream xXK6WE IzE}5m,%*S(d+rHg GG~ٮApHimwOQZ$QVh[GAreHgQibY< ftYwa9}" #r6@$ jaĊs |∡ QH8o8kƢAtӨhC)$l(gJ35YjvRZ;QaFE`BP9{N=jg#%u_jZ7)'z#n ;-UTPH`Y>0Az~wn?)e% \ƃrD;CDvxlu T&<>SV?ef8^˪af@V_Elbc8 xL (xRYLeQ,'r3k .ÝUٴ{m%&$G[V[,yX<Ó `1z~3y2xc ke՘fvQ V64ڍw%y#u9$sޡàdI>'(}I(B<4,qǪj0Iൠm0悞 g:Z2V9(=+;BzLQ7Ps7;]#p#Z,΋G)ko,t0RTc‹ *PUB> 2͆\)/K?kՑlt doMf*ʿS` endstream endobj 3184 0 obj << /Length 1052 /Filter /FlateDecode >> stream xWn6+t##")Eb Y2周 %[r8ɢ}+A~YAI2,E)N3ThE7ѯlVHuʽP k Xox0a"N׫+ FS#"Xd}-HROBVȼj=c *)Dӣm TMvMP(JJ[TIJHS*7 Y.ԊrL( 1oۇ۽ۮRp-1g"̒D?}S 7ۺTf~1$X %b].08)694ȝ.%3mєWj`~O\EaJe^S0{B5J#7o:f2V=.oK{ ct{C  \nL=hL˂^c-hhl=^5 7G I9$-l^8\G3iۘATr\ pFiʅkdi>c[yttmWuuFcBX6uX)Ò³a M6y4wYoLJwCP061 lTNI 5MS7 vAi  6On*Ox@сo 9i.)ㄾO\>3 ;6h2g+s풴yM/4 5 Sΰy^_|Ia+W=U5,lA!SjǶr^!o'[mʙ6= 7~~KM?B~Z-;}ޮ1}n_N;5&ϙ=A? f[p,+'PC)F~{( <;}SѾ]m^j+zިݕ8ycvG홚1_;c` Lr ooӧzp^;ܪ7n]׊97?(0 endstream endobj 3194 0 obj << /Length 2736 /Filter /FlateDecode >> stream x]}:ș5OH}$mg&iIr%sh[s#[)Kg{/ HY;ow/^$X< 0Hy羮2>|FN_aH"2=0% #%(7w0saIw~ w YTؚN1k6.XL4yS6C& :Xy\0*J-HTXzۍk 5_,o7UH?ʺ0Ej(^ %䱰3vMXV#V| s0!m[Dq,YնWƨ&_ovlA+ Ӥ͜t]G؋Y"Ηq=7=h}Wkm[')=e)kmO4wo6 Bړ$>;t&iM~皳BٵDY O+XppVVˑ AJW.ەӀ4(~ܔdYnSJQ,sdqmJ!)$=p<nlMIx,mu)%/,2<c5R Q }U8A?kY+bk]0M֐!6+ӂ^ /F7͍]F#4.[Yqj;7fеطkb&66mմ؄`hm~Pv'oP Xy6jﱠn9!T6ͪ+^˦+9WRttGGi)*w4v2X9X%{0P, ݲ2eo*wv-j  3lxt@#L72=Ev~(s[w qe9Βlw= ^+6@Uvh꼝 PߛI;> q*SQauFl#l"DN}-~ 'my C\Y;k ?𖆃ζ<S\A~\!^"4`6>mblЧ J/OSțB)3$L_<{x@g|uQcrC'PSuu,LcWjbod0YL71L|ϙ3mKD9ji)}30JD|zψb~[~tU| 1zǷ1+ujb/ $> lHY@' }f.>?j@t+=a[1*ghUy'Zp.LZLVJܗlR>ȅi{&WnR:Сj2_#A.lefttpk(Q'-N'@OH;ꔢ;0 UdMո( !fU*Utx>& Y&kdsXkM m#FiܵN UahRc~GS\|;Cȇfٛ R6y1!}^6XI>̥@W/*_ 4*m56v|5L09쳥N0@A)v ^=3"Coՙp@e&^"(7l2 uɡHȚMn|tnŅPuR/ Dwf̨x,5gHD%""U3竨O쌯OoO1o&ەM.{I=8DZ##sk.]M%vsB٨̺߶~̶^S?$1<67/& AXUn5бg5qARG>I}cw,t޺@cVYeRcﶲ:UD4Bs- I] z.t4*`^jV HF#U+lIφVE#d?JQkӿ:}O^}r JYO?дMҺj - 78_S~yǏH^l:4yL=A7tA9JS.4is1D86&i~ 8 &> stream xڽ\m8>Ua=wcʇ\vn].\j k1 8w]a:AE3#9N$'^MCS'i[g^bPG\Y05h= b׊&g+֪^vp^/xkEW}1GT{u1Ž3^t-kIt]:#\Ǹz8Oe]ߒEܾ4j~u >wEXiax:#3. <p-k pS-lP䋗d߿{x>7.y#xo귌&'sqȧŢ"Ė~ Z;{"d@U!˙!aL齲a  !ÄIQBxi귄k*I!5݅A=M0va ,6Zd'05ogc*GGY @N*NZ")*,UI6_(3՘<.T y>k0a:l4[햰)6}S_Zar'(Fw_> 6K2ΕSRT+LT .~̤U]gt:X{$Zi_TvMUQ7$p', nۙTވ[٣lZ<|5~^';z*Q( 1R26ڔ .4\e]hծ|9|s(S]=s@P.ZLƒuD $ V0ZZ:8 ^P'bɖ8wdqivMKX/DRYА'ϧߠBg{+y󡔠@8_v1F0Ӫ $<#Pt2G`nPA7:n]R< 0UCU&=z] 3NMBBYx)؝ZJI~R.I;G,Mbq]]C2㢶UmMkaQd$,edW`ԥ[OucQ&L])d!GD[P; ̊fg1݅\%Ev +%w9tG= E=YN:Q 'uVTӛ\vC<ϧ0%TqL޶E`*vPΡiOL=t/Wm(#5vي=H{Q dhgԞ&["iؚe`.`t$@Jڻhe۸suV$jP%9?Ť'S-j,i>义zN%PᘤJ{1ˈ¬ʑd6y`KȊMי#)lEj}֭}Q03Q6BGG5ە֮T?c[pJ"; ^TDT.׵[bY0~Xp,;<ݘSwK h<\6o kgM@ejyRbx<égT>oyux4 cJWgV/֞'^#Vogk 9_g4rzykkg 93xDESTؼgedW kɁVGӀ0p6SG(顺R{T^[YV|(f)t^z>AԤbWyOeXVQ "NFNyaL;݃4N+p`ʡsD~JH,TJ\šd.U j.J  d|QvMú@+YeCv =?`;/zlt} QŐL0.)Payt0ߡmow ;䝷Ccbӵcu:H#l߮hYb?~ΰv֠'J/{kEN(yLp e9g.Uon0//]mټ6] Gss\1cKfXeXK﫯ZfW(5g@.%lE-uj\׉3g$8+꬈g&Z=;hZ&&,2.Ś`-v֤q9r}ͥ+vfңI MIbu;vZ-73b9F댦~ΰv˄" ߳jq% Sq`i&kD.Vxrڮ5{UWezY 1ڨjUΚ*" YNyPV2`JۡT2YVTDδYM8z6HOb@-28i&֮@[Uؚ4h{w@l#ʼn=?_)}@+#)R4 !a endstream endobj 3257 0 obj << /Length 2105 /Filter /FlateDecode >> stream x\]s6}VY/v:xMǙl6~K:m%)'__@%P /&%^^@cuKYa?䕣> >ne_<5 Uk9!`HlO Y^} UDyrP/W\A5U>r8$'0zHDR΂A.K X D8 `_L7NDDwSl:g(`:jqTv-?We2lydW+Sn&qZR>me'32tO]|G8;;FD>,ؖuX2^vXihRu7mVz!zȍ[;UUM]^&:r p=QHQ!ΎQHX+d.|U\S:0 {˨N!\ed{,6rN1R  sO$]|G8;;F$(P-HUW]r j]X.;>e4WY7Y3Vsy^ǐ!؛:vuj$:0Ùu;S}[ԟ "dtpvfbr~+cKm=%8lH)(t{2>92)x cDr0t퍊.#ΎXFWHMfVkJ_N>Uzj۽y{o_I*غTGϧa# 7tHBS+,4 jU\ǭAL:^pjT5Liu}:Xyo ;*1 #H[&Mil i5jm[WOuZ_V1~7ܣEJc,9-ֹ7Iv%YC#ޜ5d@z#H7g54ceݒw{e0"Ǝxjˈ/[(#`D4L1cIY,:-O}f};'pvb>V7{OC_jI`]2ݻ^˕\|G^UG9K, g2ܽT&O돐?x6+2nF~MeD > f6n׍1fM y@!Ap " Y@Tל0dkٖRaVLl30 1а\?IHÄIχl9OCT$Y'Iٱ`Pr݃Wi$!bK}XS7mr9ãC4lF&3 Gwױp v@wA8aJs2 9 dȧ By nޝ)"p;~E.KD6~~ > stream xY]oTG }_1c=U@iZ"Tj! D]l =|4! 8  =w|xKI% K}<&@B-J&_ $vqeCZnfa @b@ k1U Ae Ui 0ɦXC-ZwZ|{T6LƴȔV+x FǏ%pI}V@С , W*`/s›-gl qd  4tUr73XdKj@aeU49e`=S7[S.HJCAI@2!]ԇɒaA ܮU Ӷq"ms0c~h?ڻHGG M?-v櫰o*\px9~9MgX[Qͦ OîѮSbEwO+τh l9c5<\9.Ϗ70=x0~ؙGB#b(5vrndw2 L^,6/6o6Om_2]آ6G%"@4IAbkS^KZ(vTM8.BJKJI, YV.kG6GgZ'%flyr}G+W'8X&0:N0w$Jvׄ,L|]Y)=z:>U\U(EՒbUI碘 ,zѽ:8വ9 L[bڙ~y{Zn޽{ˣ4.W7~Yqͭhh)f!I)7,Ekih Bn0DEMRB1ĕi.~85L7C{;t X mAͽK=V8g\昚82|`,p > FqsSaNg`| wH8G!B ئ;^`ܸ.7.Feո(vKM^5]UPtĎ*X/[ËO\-^ ɐK-ʖ FeFeOG.pAe*N0bN0zG]wk8Y168|{9#U:H[pFۦTyvzW\7@A*yPU{\VN0 %{di0Ru0EGnPI1T:A8liN/c^8CB)GMΐt*At=ZZ]nÊĉy-8B2;?|` .+?Y endstream endobj 3292 0 obj << /Length 1783 /Filter /FlateDecode >> stream x\nF}WQ/AQ$MڠA["Q6YruId.%QH33C4hjɏD;GâYt=|gt,"]-!Vp3scO.hpw4%s.R.4/w`D:`Iv3'HGtM*U@`hK(AY^NdݭGaV9D(p!5/SO4>.ĞKʠ?OcZbD=?@pՄ&+|UK yf+D)Ba`\zLj.dAz}K? Ax} {2[y?MsCk8úcP롭jg{/톆A~Mӄ3q⬋q4e$2@Xb-M*&dda0T.|x\*T3M^".de0HiYd9Onv6Y-;4dt=֔Onŀ4EU,'peu=RmT)OE$eeGYrEZOZw"}m-\ۭYٕ?'YWZ&\[b l$ST lb$pzfVST l_jH џk&'^IIl #r:7r||a-~Hljynsq:btxKFc!p$[4+*?~XM)t諦\f+7v)kxsEIޔ?}:VdE+] b1C(vwv)f,o=›R*8atB{ )G (8{^Z^f{܃8Iѥ`:.z饣%v6}/Ky]jϋ]m%9BqܫG`mzx :qsH8E2$:@KǛ/KR1X]>R0X X.>} PG4 . lS..WtI S.l5PpvjH#[$ӣʢLF0E2t>KLF0E2T>rKLF0e2> <Ѧm=GldZL=:x^1&x;o&I .Q|fiI+, isYI47b4+REGGA+Ffo!e3/\||`d; Z/Nņ{UGjMvD3iD `ddpxv^FH`FHͧ`FL#0z0 q{un endstream endobj 3329 0 obj << /Length 2122 /Filter /FlateDecode >> stream x\]oF}&QMm x(DC 鈔Du5MQ)ix33w.I>ћo/#XFIe4EB"iX=*UHm-Yٚ+4lP*=xo6Wh#ntir eҞϣ.~kdw '$R[u͈v9I5u>&; )ՇCN^Ni;g!d>iWy.s]o?OʁIC^|51><$%w!N}zd^&~J`aכU Ltdx/$H+I#c-"O""d$5GՅa[۶BT;d7R#*=X*,l3'M1$z`= J5L(H[9I;LsLxk~/C Ow_M"%e (cH "S[|ȇzNnnܿ~W7wܷv{{}N-ػ} *4ei?FFKRyx1InmdQd$. w[8`RU_/>=bId H c ɇ:"Urw)ɰD f~Sۄf7ڇyxp,ۮZ)+E^sWa 'L( B\Azn;z$vnkMe'.(AuKs^E| j]FDT 9]V|0 Bs _H1DogM%wR9Cee2Igi2mW()^be\źûvb &>л`}kw?mbNo_O|9x<;߬m|;c2L`d`f<\0`#[CT?X0`#[;X0`#[C"B5qx/ʚ4o",㷋e|課U"6uOʹ'hMcU2٬G b'iĨ{zqj#K &>pXT bb_yV}PqvnE2;7Jܦ%@s#[=X0`xхb'^t!ڥ⡄iÄ G ryo`4=>MKmwճXD*Mz ('(_/ivZ!*LGLAT1Nyo6z~3p]ahq(>g$yg".&oo0U0CۤF vio`4Fø/T,P"5"Fx i/(܂w?Y endstream endobj 3289 0 obj << /Type /ObjStm /N 100 /First 966 /Length 1227 /Filter /FlateDecode >> stream xڥWMk]7ݿ_?P=ͧ$0YBHhk]l38 CsHgF3{MgSv>F-^Ð& Xt5DΏf3Id5[?35ڤ,jF"Җ Ɨk@m0l4$ ~`d˃Q| K\,fH*7x m&3Yb41Xx%!83ixpb'%aY`xdQF#1# K@ L+$pęe‚3Gbp8p6%18+\`L'18[H Xp1(,X)lH d X=GgНGX1\D05|@䤥8X* 3/1pI i㑷t1}ߥ"$(-K4ۚF;1İQJl5%NlÊA1I,F<2nф%,EҫbhbH(e 1Ieq$P'p|.l6坰7.?~ŷ:HvQjd׸=l.yt5]&EX$[\#vbLPzQgzQYuӢ΂<*Gmv^%{QTմc׸!.*ǐ٤ycTL:ڣߢ̤ڣ~A>mggx"qD@ѳQiƷ(񈑏vmy;9}mN /}:N7у8?_n>^?~=ϻ>lbg.[{wA1Kx'{գQ<1p8R%.EY##H^&@tZ~&dcd~ud35`l+)Ř^őqTJQ|OWɨU*jb*,kŜ]9~"iT'猋G}΄JIsubє%FvqP݋\=nY529 mⷻKLI-GeKDg/MͱM!;=OȻ:2;Dd1HF;cuU#Ʊyu6\>*lqg.Ř_LEvL9G?)YpQYpP-G˨=W%ub>ܽB3Z> stream x]mo8_rVEI^`+ْ=܏?*SSGloR.pL>pfHI5lgz ŧOغ9|U̒8=xsڷsI0>EgPȶҵƳٲ rM㉿3vkZسw) %f,nic^gqRH{I'.PxŇm3Nϕ֜,껢ءt|eŵOQR?*Oj2O nD}:zQ@G⟢TGI p;+Ð^4c0b.E[m!,1\G|$`r8EbEyDä\zYN|pQ>';+TB}4K6i\탠G`7c AxB0$jςӤO6c;{=uS='zxCA)%#@2O!?f|y 7DO[ÿ!zj-:<[[ 3 o\ˈ'F!:~jjCDޗ,{(:@Eq6 &tn>^.6 +C 6߻#r02&ϗH`ڴlL; =b4mG]s#Ør0&K 45|`},2mFW2`Wh8m |}VJ$rb϶2om|^5䢓~K N/`Dy kxz Q4y_յ/T"?ٵ9Hq`^]hN "gAi+a5Q2M۪w|oy J8%2N, ?ׯ/w\mј'.`E1sP# )qdSOz8Up-U8?mǜ*T|*ᄆ.uY)/-TTHGkl# c0 @/Y:[Mo@_EW/ۮz1Fy7J<,c*R*_&=Ǘ)sQ,, l|.j]kHZ"ʁ|&eӘ4U|4jW7eOwcur=򙱁Vmv0\Y516*>r0jlpW,_ b@2~f,:-j (e+T|$+갂{ĥm=Wu푠'Po\ˣ ]7, !N'!|FNU7ͧݨmYD0::5r,O&y{nj!8PӁ6V 2N<DWB(x.I>1BNs(ذf,m8Fr95NemLV*>RVhcuu"rU ]1t^,qSCgЁ(Xa8v]ݸf̜P&ͦd olF̣J :)x%c*B&:~&:4k,n6.ũ-c]Ꮉ|)S2uBJ|֖Sj`E >263(b՞_}{|Y333:: l{mr k,,䗳۳+;;Zˉ|7x3G$)ǓuOcQA/$47P2A끢FL$*<XS5cGcԎp /}/~x~;޺ܚfvk7Us|Y tdU،5fl;L^  :sI$.]|v*mc#'kFuMۭ8g h)6Yf$[ַF'c˼cT|$c0vr 1U+@Te:8xJ2ö dǙ0c't&j$-{}fPTwܗ 1Hբyubv,3\׈'3c#kP|ݰO_Uqֹi{LF@}7tBI"w-\]>?I Rz΋eu:ϒҪ<כֱ{j k 1Pezh-*>.Xc{| s*Ѝ9Ѣ.$7pyz4W'G(#)58iic+1p79oXc{m3*x|gq?']Scd0؞ŌzYJGlwEdjN <xnͲmRt &4 0-2[fƴ#5gu]Y-⫫7=}@ВRV;:tt+b)]uqB]W4/_deazLZCHkRO"!l>b*>hcak}n+UK'w(sER (TZssL/N{EkJ34IUR{Ʊ.Dٌ{Imۓ}ڼ*,h5n\xyB0eITZ 듲,JݛZ)%?c> stream x\[s۸~L_i~d\Mf&S6CK̭,:}A E9B7Oi\xx<ُ/`d$,I2eVz}iy}3Zeڎ͕BQ *=z6栋_.3)ŧ80Fgۑw Q&E Y,$ 7$"xgw`iL 7xUX߳KGr}{/ܾ7?:~'_6庬jw,ǤZ#Lӝ&٘rĤp'roՋ1#x[*-Xl)??V\r ;ڎC8!ZK`vNfOVMj$PƑ!7h8a49Ć\8?+ [=4DieF{eC#FB*`;'Tn`+.'Tr{j m)c'۟}{9~}r>g>t@eE6##PqRgR`kHD (2d"_04]cfǒPF"!>PddZ#&\3î${ 7B/(l)1ͪȁl_[F`+imoʣqxUn@~?䡴5즎0 b#&#%uV ˓Rd9Q'mo@:rUr=?A:`=L8vA}tz+@IF։R‡'s}Eh{W.wlU^޻󯸠ErX\љYXT2r oy{U^#Qa~ukc% n`1e s^zn!_Emswo[#asJ n=!8Ut=J2)B|`1N@P;By;}r8W~e[h%e"кP}^xHyXABk[@ɡd$giE#$G$gSW'<J%'9e!<"9.!>Pr(>ɉ"Br}Dr)93n5-|`}c_\J]ٖL(y2^ -iRrdaO+Gey_-Հ#zR|yXi|nO-S Dt^2W 񁾚C2,!>P 0٘5)FdNˉ]5-|d0žNLcscvZ3C|dIDo6\KK1Ƕ􌺂3!>Pdd u~-|`C*AT%NTgx滿n< vV6?ӡ]5̻C|w'#Ġ䚮kĀP:RC껫Ysa{WR3V|"jGؤ/Gh8gIc}I/W}JWd's`C\Caĵ38|ۃ]7idFFHF֋:]G4!>P 0"Q$u|Xu]Dr\GbrZofp<ջ.~o|hyuÕߗ)2d#:j2^ db@1dD- |].uYo*ź(WC_˰öKfh 0!ܶE&moug6Ďͣ߻W,m:,#kxb\UZ0o XzZݾ9ͧCL6CÝ(D1Juuy,Htb n2^ db@1d{eKfKsJj0k,d>}4Y/ue21B|P=j0a}j]Rzi t-x (8lO$ aɣ2\c^?mjd IF։a"]äHF)z)04 d00 endstream endobj 3371 0 obj << /Type /ObjStm /N 100 /First 974 /Length 1232 /Filter /FlateDecode >> stream xXn\7 W)R#6ȭ@!HE.HCM`o=ؖfg%)SZoc⯶sk<=D&+3djd4Mm.Ǐ0LěDvs |ܶ&"mƒ}4#!h% keI j,cdm-6c:"F $yagcFCe##pM 1 ##1+y֤K`3'%D nʌNLa#OL!BA810K 1fO 1܁APY#1X> GU"C 2~Ȑ  3r-Kl"6FՈc<X~53MCDk7TlePbe 1E;D#[C9FnHz`1. iS.[NL1":Hl6ͥ)'EDEәE ~:_k_wlRȇj#tNNv!F&jyvE\#2e HIFQ!oWW{P+crݿLLCYO>}]/}ͯ\.Xc4Oח_>>4gb\~Wu`HPs8[{wU8kg/̗S?Lc[iM^% p,,F^_M{y>#\{ꈌ܋y65Em(.b2HFQcAVEL4(Mq)* RYuɢ4{QXZ.5%EM`hao)|ilNEM<ɽ LbUl*Xw\ptnEMV&Vc5ը^VÊHX"5FQӋH8 ).΢$]{Q]2-J' ^#[)EIz8-.jEˊѪv+:EST׿;E}l1SS<"OSZGSnE!'ECdCNdC氠rtaAe"y41j1Wjr\$;DL+jb\U\Qur <"^DZZsE1WDVCV`[Q[EMQ$h_EM2K^$ T;0 x߻ endstream endobj 3488 0 obj << /Length 2213 /Filter /FlateDecode >> stream x[o6)hc/EQl;MvNЗ`ز-ԖRN~RH-XdŢ#^E7yoyGqҟEamNfeiI]4HؾD r@T IM7a4 JF/!0z}!P,?>4 FJ.1PRE,M*]7k/m,48PXtWg9;v|vd:@ Y6cP?=LPG<#6z4Eɤ|_c8m2#8ZV~nR>w_䍥0n Tl&0` կ|.W j?e nǤ.I%[0RB(݆BvWҷ|[q܊8RcF4ZU H.h` (4ti]1#Qლ1rpi!vxmHq$0@a\A;>&{birl(N!ҩcxʢ0z_l%//8FC4j Rj8$:wӾg:a*a,{:8 5C1ZBKX`h'ҏF!Ra008æ/~@ip\lD-}F?K²w>P6D:؍!(lد;x=a`ô]6t~̠#GD)02-%0ِ(np5-y]زmE#K &@CP%&2)E !0l:P[{0æm; c%L" zh$ Da 8loNp 0t~LVk]JǁL]0@PMsW`Κ`h֨ F0gM0 .m}`x;,zA!X`P./Ӣp=L8&}63|T~Y1_{wv̮G@<Βrz /Z~MVSEc*}?u*=ugαBB<],̶͊6{mA=i'd &1|'% ꏿ4%0㧭IP0gM0p{:v֥Aq IXdX.XgYn-6Ewއw="23@`=.QAn4β-4Km-vi{1پ$Ifڑ]V3[efsʈ]Q@pB}K{j]jY5@H-X0vM"؛no2OOe٣Ʌl)&܌aG߳b|=Q \J @ycIw|~ud=֊ΛJBĔKGee"G!Jbe @F|i{MG퇉i?LNȳb\[wbvkn|͛]U֔IyH?v푫a"k#FcFXPt=7 vĖ6^HlY?noGHXCD|-XK baӁf:6m6Ş2 1ZsmWh\x"{,ܶX$\uz5:pg0up׭pz~( :STf;̷_& @PeGߓ_g{ap̷[ C$N0ds \}{Y7aݢtgKe!Ţ!# ( wɮ.quG<Z@P E'4PhQb@ֳbN1^_d2βIJ:㵿xt7q8vb ^į6UY BٖUyb#P^'eC} endstream endobj 3525 0 obj << /Length 2646 /Filter /FlateDecode >> stream xݜ[o8)`k`LdnS([I-,KY-S!5XC`Ǧ#R!#|c=DH$~([FgouL/Rԭ9)[S!$XJ|9BήDUy\ FGhFK/Tۡ:bL~>]!P|[T&@@ *gT.?@I$z8tVxַ^Xhjq A07NEhSV]iLEr!}sg|ؕ6_fxIVN꿻!{Jܴ#;q*m}߯]H7}4Z*Dh0tC9T3T>X >H7PyT ჋؁U`Ĵ]tn̽5̧GG7G RLjtc4 m}OC?b\oS[3W)Rqg`&L׎-ǫh?5OxUͮ;k+Ǥ8\ǘlH=G.vQ^J+fci֬Y8MaΫd=_g)sUu9Oo7Y'ѺнyEm^MZNMm}nY d`=1&X'̾m}`L .ɜx;jSƝ' &ʜsT]# L1=.ү4,fy%.gEDpT5fzBÿK߲. ,4 Kͧ|`KoʟV8#=`zf>y_- nV)P|HOz= ez|xe"m,[@sS޲S# ` $T) o  u/`D iֺJœ蛁` DIf/}~,8l0@ЎvвNӊStXڹ)-A%NR23Wh1OpHTpHLyَU4A[[ؼz --UWCدYl:`XTCi1Ŧq7G% Mn"(zhX0("$CدQl:`/ vMbӶID (DIа$B BL!$6׮H a&iۍ$Bb MdD C"Qɉ[ˉA[[&I bےزDx=ү(2H%Q09HدIl:`o vMbӶIBzDGa=4,e(' 8b5 ÿ7 DMd 7 G[%Mn"@zhX ӿI)MGd5M  ]شFh}MdD K"3NLÐH`h! 6'd8 aa j }0C;"a 1æ٬+9Al 6m8|D-<qC(P6\^Cbx CX|h}CWhy`Oq,pǓ;~'O j;vvD?H/̐{JܖyuimʛcfݹlڲHص!]w\.{w;r`Vr砘Y tyEw`= !H^Gt[p3RZnK1]=#}R<~JÕzjC Nf*JoS )7ƴ  2w>VY .7޵.r;FeD7&wR d>ɲ#V$7<ї9NWyQ=tu}OȽyoR>yX&ᶾgOl 7b:~Y Y' F[39kdh{c2gm08\e>/eW_iU!UVe~zXۛ[S垗r(v} 5G"<72z=v) ce0YAG?Uu)ߖuɏEyu"[~Jm/1H_ypC endstream endobj 3555 0 obj << /Length 2122 /Filter /FlateDecode >> stream x\َ6}[mfHh.: Ev2BƖi(EL}l:uL"֭Hʆ*/T'ՁDtW| @Ne뫻W8ZµgF,Qч:# x ?a ĬX %T",E$YK05@T@ 1"K^J7Ƿiv8DV!*ąh̐d[ ga8):t:%8$1"RTkB3HD-XB{>)22U,[͈}$H Y77.Ԉ}hF6_/bD% d6#hV@JJyNE%*vmRwN *`[⛑_26X%4 lE$: FET "i8*\8'[EՋ\kՄm<VwՉNzRg:FBRcn1de/Wۅa }ҟm?m;ص|Wv-rwb! =X8at,YCLjf.#5d "w$9YZ^h Ϊ*ryhdbSv7U5DXOwb Z+N(0e8mt,YC̮S;,YC9;,ي P\tݨj̈́^qS陣1TGe&{ Dx-v@Ӽx9],cmKm/Wm`.5nvB_^R},M}\lEZXfnтr}1_~Kt^~jD(}7\C dpQkLIib>Bur1yDNqwzAkAL^;Q b2s%F &^hN~(I1"yo1t.wK֐s.#R5LP$;r) 'Hp{߱c\=0o cJ*.zn!Cpoߑ`2@2!CDQ35{dK&"ԿjTa#N6C'[W ]sj.w\[3b&u17o+i&sg(+Ji 1xQ-h)`{qU`Hd%zIU^v*_ד27[dWqubPu~ה_;G#rvm79P}LAiIg2>Z}D~0||n׎#rvd>6ɑAZĵفVLLG[GF}Z}|L}>"7kGcy>ܵفVvVGܾ܈kj ֞ZYbW;+󢜜Pp_Xd\(1F% KЍ*۱uITc%GFȺ$89P}!c1!d?$D “c/k2dz4Og 2<ZzUKF{z0tD|>"7kG֣1D`4P~;pp cIR=|7=\8F8S#5dPZ8]|G2P%+xAqr=zJ7Knܤ.I?n B"U0Geʀu12pMvD8FwR/~9U~HUthXwXz|[{˖ᾰd*0M,KnhMR5PmpBpKsLEHdSfͺs80'NA;i??BF endstream endobj 3485 0 obj << /Type /ObjStm /N 100 /First 970 /Length 1252 /Filter /FlateDecode >> stream xXAn\7 )trDJ(" +Y50A M]PtaIZ襫jY< fa ĊH Zi Rz]Ѣ-QeH V  pĸX D`dkŖ#20ê*XPXK]e!CZo k,^7RH30|N|~\Tr*Rz}7=-aK|ǃVfixd74В%I*\,YhlsGe6>wVinsGEs;r5m|n(d}$6,i:+Zt PZ3N>QդOz%G&4I2W Nhth IVҁh(>t-*I-͑+<#ۦY2Mh9]F͎rW2\Kz%rnr9G2@?-E?-cԃr$8k|Rܒinncoɨiud4?Ȩi\sii[2jLQpNQ$G$iхphOS[I(R_,8Ւjp~HGK[jc*'#Cpݭ"I.{0'#Cs'^,%[Xn厃6fϗus8"=b1nɶْsmvvngK6lɳov = endstream endobj 3589 0 obj << /Length 2904 /Filter /FlateDecode >> stream x]ms۸_~jܩd)Q/9ǵNҌdsӋӻ__Pȅ\o/H'KuB7/G_3&9S&D$EsY2$ <4̌NE=ZjM2 f`&Ξ=LAǣ_DO4߾O(y|ތM=K85%?|,22#5r='y''ir1XB-VJrZ2Y;%D*S1K똏QJ鳣C:9H>n~>^ldz_X˿;Y?Ve5/f#룘3/E'ce>Ҽ:c(G34,Dl,̜Mjݳgqd& V6qff,mNa8Ur"ѷ3nNH#>>hEL*K[M.uiЇGYRTP3F>[w^)\uh9=·g'!- +|HaɶDjw, PqtcTnX j&[A*ψb* a'*dil2MVBg =қ"&>:cp[D34lHP Ntʿ e@+PVǣGK8#V MUYGZM6WSͤkIenXVo㬎&{yNL}}9t-}|d[-wۺ+A0m[5D)h!bq&\X5Wz+߭W[{t ZΡ;_/ݣ(e&])hd1WGM6/"ɱ닜U uöˁ=vܠTm=JAu%1 O6DX eBPˠ[Dfkh@  < 6)+ӽCSB->v#3{4cHcT5BpEWX0VwwHzAeLh' L=5ڋFC;1||1dCQ((m5/ADk'iĉC\̸%;tsU3H A&\%~Џk-MIi.fеsb(j;2eL&S)S42ATZHN10n3tUG='K[J OUsYxn+XBnㄌ'"dI]+lXNBr@-McĴ"dRny\XSps2oML4e4u=>4e(t^{}}1[O`dz|UfgjZnM!=xTCdQcל 3wv5[1LHF#댡l>>hv2/[پ;CC˙ti4i{V[I+myM>>Rhpfmp/n ,XNW+S־4#53S4cHcɆL\J8?~b8z10 ϧŤ>\)\K2P qfh22E 4N:hW<#=5reJg <ـٙPH߽?ϪZ/{nm5M>>Rh88Z{Wd(q>buS.c^9XL>7B ]zvtM2d!Snmak³xH[6, =- H}ǞLHnM`6G 4ِ`a)uKu3k٠%I=<~0 m˭><ΫXK"AsO.l˥><ΥX] "sqa?TŶKcw; endstream endobj 3655 0 obj << /Length 2917 /Filter /FlateDecode >> stream x]ms۸_~3 x'ٷ;9qR[dd5'S.%m}ADZn줗/XyKUBý{^3dx(Mt.47)Kl0)&74h-2MI&1/y/L{cfM/_'U2;;ļ&DYry(F pZ`[US볘VIjδ 2ʹV5olKi_^aj82JUMף,f;;R=/@oe. @baӏo(:)v߁lm})(&߶7$vѲ miF.?[TM}>`ynb,bF14#1?Pr<^Ϋ-Vm佝 4UROظ,pZ^W$ptJЕd*CB>L pRyJV .̼ b8 y7þ} uH//<@W@p]D"gGǧo_~8<~'ؠ}R,WU[ ri\F[mt4 a`LՒph(.j\&h9j2挝w űIp"4 Ξh(@ӈo0 [{E5OR9irG#oH4ehFD-&o9vxKrZ,Μj,_UGlaFg>`1S"W.nrZL>CrcV2 :n6zTMGU]" q܍f5Vϣ z @ưDXΫth݀3y"g@s؜z:YB]m|E@ێLa23X8'N|6?C0%=S9#]nh]yJ51ԥ]Q`siޖo=/Gc댢#pO#X"mQ݌ʢ\hbVLv-D(DymVD L>ү@@d DF@|@@DI;h3R'r?O@t}[DҶWD 6bC=Zh٤cuվGD"#eh!Q_{?;Ib&>P,`1b=tn ;xyKo\/4aFE>P-g$xƯGWwED ??qhD) @@ic&aG>o!srz>`42xX5l}ס`[^rxt]939j* <v}@Cx]<8ʦh^9C}3`#InA9ޒ֭U}@FB&\mm|CAmV >`!48ٕvgGe;S]m᫫7Ո<}-:gd6!Dso (9 \n\?Y'$MUɴBhH;P7jD/Ҝjt/Vn]&/l״~h fVGCQFVh:$Zl)h'SO7Vht9C RW>P-JHB7Awa<޾'[T 6f(ʿ->sSw}P3bJ 6FJ\%ΨwBp6l ߾} ZgvѰsl)'D]Ew<ܵ5;U!{kW"f8|@qFP`1b ~3Z{O `1u7& _| s: 6pT`M} ׊9Xmj@K޷t=rqU1-֮ O"#;wG1 "h7?+n iī,maG1x,"ܦh<y c;|vOc@ċ'ԈѰd2l &#ˢ_&d19:&S[آ1ٷd2l "B?\+bW˹-豨웇1 u;sI$}4_?qf"X> stream xڥWMk]7WdC# Lm,ښ,B(ہ8y ѹj9֛F{ٞ5x64v@&7DY%bvrF"6F0B|&'e c`tm4ь -0)=#b̢{<`]q SAmfߐ|ybsbGbqT%@i3";1X!ZwؒryΉMDj=1ԜG`EX(iՎlfbI<1rrA79|툐cjb1FA%!!ĐcPCHQvDkb()!G0to@Fb:vX̱缸8jXߴ/ֆw/_7٘b5v"7MF&vb3bŕ6&j1CMt,J Ff*3AZ"c\#N]UVZHhY'WIZVk3Z f8k4zqynavu]^U|jzx x3|#ǗGo4͇^j/[ҷuă/?bOwq\7ǻϷwGhb?7_u3 Y;{NVN_xtT3 5u=Im:V箒G"bCqHQ]d܋c=͋k*H%-tTʤ ՙ)rd ( E4FQu [# n*PՎMiJQBرEEM`iYQۛ*jb 4)n*OhWKoH5 ӫC黨Ix֢&ux5 #\nם9܎&:77:<, VSsX&֡ڳ]FfUD;&RwKr/j"p55ʹJ`+W#kEEQIh([wQJ]( Z\(lUf]$Vԏe$ԄU$AEI6ou_/8e{yV"ʇ~t˟$'I9/|˟$gIs/3 endstream endobj 3722 0 obj << /Length 2912 /Filter /FlateDecode >> stream x]ms6_ofAٻޜM3LQe24EL$Q!){_ A9"%J -wBEv}"]g΋OD]$pƷD̑J'λӋlLjt5Zj/% ꁁy28}/<|>j/x܉'޻D? z%y{H풐W/ˋMdF;^\0ZXλ3&\,`ycSmmN4cRiطg6>rXawIre'_ ;7:GZˇ "n]K\~8):\? |v:WU9DJaOm|ʱP|%gH*cT v{Y*n95/94]]f05 uO*kh#v3\&%~fk@fh@d;87%5lzC{l# vAh 74ʺf<|HQXOry?m.qV=f"Ѐul̀m| (ך2He֒aYz,Uǥ2ղ /K,@免+oL zkGzZXO`24-/v HS'S kB".l,*㻤X8Xfɖn{ի$k^GzZX\⳦5tXusnuo{˨\Y(\F6>pք^$RF ÀpM'! (sN?.oFqf <҆c R՚nvpt~{̒jIo8Z?ew"Ձ,8͠ma#H;n)67/?(vE9pqf>%a`mxGaE5KRMEGe5:_JMj sf}23`qiC[ wQn \tuqiJk>xG- '5޸Z>T2,W5˩(z(ӫB35ƷG kxi{;aZ)K [MuHcCp_k8g˷@J@r߮r=sAi$U?~H$haMEbg~:>Zk ]Nk>G ZX( feV.{6۾NU"NbǩLvuH&5a Z8U7hY$޾;6>3x$=>/W6n5V&l Y7BTVT~JjDchD|N-EVB[,ɟ$#:/p8pS,m|5q!B竟@CV7{=~~}ո;wg*V7>::Ƨc}{hG- ])wb̠zڿ|gʋd=^,"-Sy6j&5i#=-a IQ酳5 &l J֔G*- ^ &~%_ѿt>aM,*E&G }o榯WָGr- 7}A|t6 CWw0n+Uj3f.fIl&fpei#:CyN#"2J ήkx5gH7C kfOdz|bPw|vkvYfam|$ì ᅺbK|2 (#Ыjkh#aMF^JYE  [5<0<#xZ=,$\65'B-SZ=*dX)O?u=WHlwu(T Q޼yY}y#:\L%&UyߏT4:*Lde_-c<~z?Y}{_RIB~]7#ZTl?CPHЀ>ȃm<ȣ>,y W*n값؇F M.ԬTZ F궺O>i[z(#|" ?&#iB;>+:'BUs̼W|?U$vٿҾ ;0*V"cCI]<f71do9P1#7_LD ϼMA d?k P{{ 1#7{7̏ۜy:{}L4i ?;>c('z0| xo>'l WշG*-A˅|yD6slN[{0;!#[ŷqĊȭP+;KϽt\Dtz2ɓ@Q*OMoXj(wHG|'V~4sLޮGW+o0)l endstream endobj 3719 0 obj << /Type /ObjStm /N 100 /First 973 /Length 1158 /Filter /FlateDecode >> stream xڍ͊\7zTJUx0IiBx=s1B-f类tۧ[VjiGYq= 7b ŨEĕEz(RJPh;VTC+QM/fټX+O.C2z(i #O+sRxBC&,-FC¡5TbU`ϼQ6TCghamT0 *zzz ;TzL = =V =pU\c,I* MQlQaIP"6Q{UË*hxyƻa=ƛ.Tӵg^5LF ^%4=4<G߆K6>_<÷m n1የzh7&_f+&D̀j~i4|ߨjiw*C5BCšruw?lD_-4z`)kh n,k;$4AN,=4ҩj<-`L(X'N$a޽{}]ɏxF7Ǫ I`R9.RRI 9xtILgF~sp}i֤'xԤ';&I <iTkZGVhSDYH8IeKNJNx'> $l4rH!IOZ3Yp 07%,&ρ9xVȒ"d6i4>:͑4EhqZ4Ej RmISx y9i JlISX%W$Ѥ,d&-A'$\~ȳ\'zcq._.<.q?]˫ryY~~,_}ןW׻hq}#w׏>Voڏx[}4k{ s6LJoc/+d.Yؘ&Y&'V$a^T{Ku3K#$<;W|[!oS§,OY~ >f-|[)oC߲,OY~ >e|[)oS‡,eOY~ >e-|[w1oS§,Y~˞>e-|[Yo$ endstream endobj 3777 0 obj << /Length 2418 /Filter /FlateDecode >> stream x\o~_pIthnmh{EJ-4})I%B(%vldpf4 |_A"AE @" WI*rؤluc=ZJa=ITH5a+*[BXTOуp@~Y0o>5 'p'w \ /m=vlQo5T i ώvwU'$bfFR_Pݽ4[Yb˿0ǃR[>],e HJ1]|GƸ ;!\[Ɛ[e0CJeqrl4$ ^MԷgRtR9pM.KW}qߌ[IP1 6f58)[[CoveWKOo>s9vCLnv,bB[tvGAtu@ q +ɡfp7\=|Z܅`h/ /lRyTy P=Sʦ5 Qz݅w4WQXH?6]4raTwԱ7a2ySFQބ`&.2 kAMVM]|GexQ@LJZQ:@gwvuVU u"uvٮmBEh:;EGO7zow2 n_= 8|w{[TyKMq!%J $EMQsW|ZEisᎯ))JQyjƇi9YcZjNۑ:LJ3ujg-'UIϒzpvB!7hX+k̢︡wL!{f{cUZnj=1'=|Gfx*FwTS<51os0G0e~ ;?,jYP\(#c\aNEL1H[c܅pF aB߬~֭Jpy3.9 ;TpStyMIboZepW;*Y Ж>>Ў)aW:gn/ԭlwFG#MUM-=ڥ΀twv 9FD2I蝒zb{֧9cvՄ %W|]{֌!*nl|&fJ]|GSrv)DL? *ysGp@~w-ϳyo$;rЗVTwԅ7a2) oe"ݔOX u 3Do2Fv͌zD1dc݌Wf|cn_-.M͛$?~{Ҹ| yԥa~Tf{ԬOm{C-qMW=w#=3h٫,>LJ$C6co핍6\ks~3 'KӑZ endstream endobj 3820 0 obj << /Length 3005 /Filter /FlateDecode >> stream x]ms۸_v/FJɇkfrs97e#>M}AP ˹$=X>]H$4ya4M27ldibfV43p,`6lfj,~{2VJ2E) Ll h0pG+l{ķiGeMjTDZy|: :}|?>?J.NSJ&UoqVq9-|d?bkCmcl#mÆZ4a0#~[PNoa+@A=eu[>g^1YɔZL>>Lфma3GR8 YORI`5dMW%O_}8;߽\w<F<}|%vXᩒ0K꺸)+99?/aPn> # àZyȠм/)8gj[HiG+lqXFoì:o?,yvG+l}!sƮn8}}<{hz͓Xq&j #,*||.®1i[(bZn*r2^3J{MX@aCWU mIF튀h#-lhEZoiMV~ 'ZP/kJK@fV_gj6n8vA/N`WnI]i||Ӡ qTLWs<9n)WWE34\4a[eWDSTZKA(r)_}  43toٰi D/!~#8i۶ m4mdH~<ʁ\M\XևCLV&l h@ G3R¤^ IVf6Χe ,fj2hG_#rˍ2kJXqD u3(Čq'@z=Ls+<Ut`#Ja߷bX(+G+le=Dyq`dXO_g7ം ZXȑX3=2> 'Lp*A 8+z,[rwXN9C 2S7!Ҧb]G:Z ֶ!D.5C2@*W/EV؎O)"o>;~)E/Ʈ׫}  ltmGze{lfd@4fHfģi`p$%Y;uC;bzX~OQ0ٻdԍFIHѶY⮞k]3vOY{z p)6;ra9:y4z>XaCbDEKnl=O[|~|HW F34l4a[eWDSTZ؀!$1TF+b]%͢>>ҢXa_\#շe4QGR+le'os+l^Ģc ZԐΞnjMMph#-lG~;;Ʃ]ij>>jXa|PBY nПN<{)n4^;jS3(<͈Zu#OB|0]` rm4Ha2ft6~ rMX9ףG+l;&LgΘl  h ۑ0*/M5h?ݻ_ާ+w4.H.b_\6~}EkQmZe29eD-?lTDdiH;,lQow0K(G+lWIU;cڐ>skTSA]`:oD3:ha;8"{  ]>>Xa'̰v9|֜]lٷjf뢾UH#Iچ=Ԡe^X\_"}|$v^eDYY/^u@G>2+)G*-l)(6m'ge-5NZCJ~O7Y[Yu i>RфmAe4]xHU EH$ih5=y+=ppK|g纑;T_f&{Mfg\E|xE7͓`2dv{$Au<}pի B3;F|NGzhCu#n]<XQ\pU&n6 }=/s;aUo8 h7{#x]y'eZ\~\z^oh- endstream endobj 3774 0 obj << /Type /ObjStm /N 100 /First 973 /Length 1232 /Filter /FlateDecode >> stream xXn]E ݿ`{暈5߉g"cdG`#!NkE"Ͱ,1i# KSX;1fb '捦L&*c>LXpfa H _E<%18s,8ۜm$W M#1MX;1&31剭"tX0V* IbP.lFxzzL 3%1]PLdb` ;SH8#S ld c$C9S WbPb#6Crp cMX!יPO >L[3cinjiibFr%#6$&~l'2C7əK۰%ԞSrb! |%k]a=Ǧ  X7|r/+$ I̻Dculw[_ChoDXW*jQHU貎ыdnM(VxJV#d]YEe \[t8k=ڬYVFflE]샊KZV u4EN L Hɴ:W*ڽ:?:up:Y@mdrY=KFVF6~讋d>8A[虋3,YUGHF#e[d.DV4RFkd4RqHUh,Jh,g$*VDy%QBeEI2Wd:*3<*s5 Ca&SjQ9g]ShUѮhWLTRj6@ZD|]-j"(VBWD𻸨LEWDdv՘YzF&q q o\r ;.4ޯJVڻ Oq oj endstream endobj 3884 0 obj << /Length 2883 /Filter /FlateDecode >> stream x]Q6~_!66fHz^[ 5Y,˻BlɕM~&X-Q1Mmlx}!9s`?@0wBrʝqCCqspMdN([N ZsWf ] ΨL a˻߮h*>9{,{?:0p>Z`D].^9o~jBO)/]c,@ܣYNQCHY^|myҤC,B`woA%zE^H#(dj y݌c<iVV6<3@^: B)Mi:6fM| A98tJ>b40J ?#^g8)Ye*7Tʶl+Z~{)eudVVEzIx=}4;d !rҗYF2YYT, C|ihc6-ӣ*]|d110OCYħ0DX#| FxCܾpwx\y1UR5w]_n73d? C{n 6vH+FC3bd᳍)B( &:mI_7nSŚl@@M"C:3 y(eś'&>P`c3DyxtG0-M-LHGId!,ywa`xjOҚl@ـ"!WE?͝a$]EQiYiS&E,7Lӻn,w՞5E4;D"ӒH⪕3 8"TQYsgkjgaM|3ך3@gX3V9 ՒƖ3Z0g3vlpD ƻW]|%D@dIެ8.V(ވwX$hnz6S nQ1".z(C.7!/ jJ&H9_S&r*HNěKi{|ߥ895&SM!*6XaCT7eyUL!1~qoU7hR4(!bl>[7FJ}[>Z+R8%"-<. . rX1(>w N. Z< C.QuX j :ʶ(ŔDhxBh cuYˆdcw"j`o&"Dz)Z'%`D 85P! O`HRQPq6x)b:Ro;Zyow6fl1)`4&%&ǐqHd>4g]Yyطu/zî/b`) \$F7//i)eZ2`Ƭ=+9yNKb`) $%`4$&+ۏ+CpY9F{Vh+zî1/:fPU8Áp Ywwjjokgv,[@g5ُ[B2р{A6mpەޞm 80Pc%g};^ͺE87<ږ..DVOOVڙy(n)52z)LrW!Έ+ Hk lRGeE|iG1Lk2Sr2MkulU=F* zBX@=@M$!Ntɰ<m\|?ZAfvE\;$C|޸(:5=s>-hMw5:jwߖ&/*X\jhZ z@՚Κ6@m B꫇֌*&>`cp3Q20p0>r)7{Kx(Ўh;7=m+2_m/-Iđ{F(8[6a :@ ,.>RrZX endstream endobj 3934 0 obj << /Length 3189 /Filter /FlateDecode >> stream x]mo_Aܧov˷R un7W Zdwɥb/-N"YG3ϼr_t7G/D>ď\'kiNϟnVWN(j$t$V_џOx>{^AGg7G1yu 9Oԙ:(t+׎(/߯G; הD^zyK*@xE(V]9E,:) o84cZ>x45b7{FMRI=F"Tun8O|J")Lوu>O+7t m3iٕygfl",?8fsa*]e/OnΟ(t_425Π1Y7%LV4Y06&+g_%f"\ DփE w~bsC5nsuꫡ71쯧ܥ}c/:}ʹSV:13C`@;sXIßfyןt w?;')Bw#ð1gG:}#Zqu*OLɽaΊ|ln6qQZ$BuX1 W@Mu@}H FfHhHm *,v VUU-m*˥gɴVyt$ Ih`oчά( L u׵tqa\ٗ(6!9 ϊt@+3kcEOX(+s@k1候:6u65@ӄjcG8eڄ W$U<3n~`ZFS͙C2_aѬF406v nL0=QECN|06ȗrG3aPMp>lLcEM%ϲdVPPf{ 7ur JWXeeGBʃ7ź!|Uօ&~>Ph6`*BN( 0&u752fի :4_%2ѣ*#BSN4f0D,aÄf"aS={qDr4􁒇2#P~ě5t?^ۖqQ~dfgy}ln7L5|s`X < Py )G4d_XhreGhАo/|]VR=zz]o.rv=Wg 8 |:E0(=R _]: ^OpF`Cx1׹P1u@Cѹ^'Po4X]JBWնeG) -h-or4y2#om#Y]ȘrdH}RS'}2N8KgON|ܨʟ#-0x::t\:bB^)FT nŸd,jḇ~;?Ǵs:DF(w,VI*CN( 03\?$nд.29/t7NLu}+{2w2Β|mM'gnSY1qf8vnJSd^džs/S ˱i_Wd &:} LИmLM:}0#2(| ۬[4]eTw"mJ 0Wju@Ԃ\O4Wmonfhx]:3]fZ]oԹd4<[]aÌ5̬KĦޖiivsVI\y6V-G^]~8},pQD\բ3>RN|4Fy[ {KM{-xj'I0@CY@NP06G~ Lq%pd{E\Un'݌Hv)4kjJīaIyܢT0`fA]EF/ ȋg7ӀjVbaDkч ά XVCFG5ƳDžA|6])3,P+t@%kdL$YYq4֗6ҭcJsGOIL@ū|iZɡcC,zLx$bND06#"'&?Jo %珯?8?;lyVwU|>`fmWS$gmRlGѹߛjhwEO6 ӰpT@>zXg1 mRM yL47/ɰq;Z&h6 Ya>qyӻM7*.sm 2?燝,u.Nj1?79aT U-!4{̬P~r<֭ohMc>tg:*ў۽1ރ< `V- "h,'U5hJLaogI67]t ^Yn|Z'!;s< `V-pDÐChrBpGv_Uz&پ-?b͞@ꘞ3_uMs__8꬜W! endstream endobj 3881 0 obj << /Type /ObjStm /N 100 /First 975 /Length 1224 /Filter /FlateDecode >> stream xڥW5 ݿ;KO]@RU.r>ԾJ9ve,9s&'̙m6o_y\/j4F;٘%i :ܧDMMd5r`7D0c v=vHg趶Enk`diP@)sD "OL$fR1߈VнLT%<1$1ۉAl VbۜĐꐀG ='j<0<"F$+"d}xbH;f"ډj‰-D+x҂9" GC!"h$ ݉Afbа4'e 76U#FUg&*>,y5Eb~,֘mΑj~Ƌ7ox}}67'׷w޼p$_^|}=8Pz/`lsl{R?ee=Q#+u"WFME}0},|u&m*ʻH6UV쳘fTZ%OT^1Y UX]3BU2ِR1p^]*]5 g"<g1onZdE*귤Xv$o}s$o+m05pS_#XpNz„sbM8kƉX0N<5 īXpNE2,y 4XpNR}ms0N8ֺq)wVW>Q>?Qi|>c:$C:$C:$#:$C:$C:C:$C:"ca3XX^lFuSfT .D'|kQ|k"5 M% >:XNrx&OIXUI|p,w^f endstream endobj 4001 0 obj << /Length 2801 /Filter /FlateDecode >> stream x]moܸ_ |f"QRH4չKܴ@6*iG-M(k1עW|4y e8{vs/ %2 "Id*8Uǘ7z/n~ώD-Ev$\NL ' ~󛳏gLD\;,w?i|ޝ"F R}.gQ#5%i/E$a s&iӠɃHG6^JŒ$)^XmBfF1 #%gHjFtg ~ W/ԷmQ|o.6rޅ,S?vy<쇇>p}n|g|yMYʶ lh&bEl|$SB581sl'q5С견?+t$Hu០rngl¬5@}.=&.a_ >~vr{,"q,qGr+XJh _cjQ7e/0l Sh޴E]N\^qAx~v^]94$27Hu]iB5qeo j'3i ʲl u]рW P*oV}^>GQ&Ixs>q:8LcB,Ю54 Yhم"K2Q|7a2]Mބ5ʈt6M6>Rha]&d!atJv1Q;6HL(s0v/-8bj۪`ElSm|$S kuM6>Rha]V0"RlcnT>w}6. 7Hy(J #'3S&y7'Ƿt_聯79a(З8=(MH"}6|~$!_6GF.  ZKꖪ]uV-SHr""ư&QFoʰ {8HC'z~s( CJB/#vB7o"۬پo,m**ǁvZ ӑތ }Q\Ye#vQXLX4o#5vB󜑄| rЛ=5ę3?=|wW~rp(P4 ;A3fjuY?oX{<Bj\`12 :e>Πha4LS$AGAG؏{ZDD iIԟy||~ޯ.*&poz%фԁ7UH]u(ƇHiYy]oL+`+`wJ+5Ct-Xw6kF?LJ׎017΁;Y$Ԭ஫uG7|2Sc}0 7Hx(Cٛ2l|2º,("$LYPf0G9{톮 0w"k m|$:\͢U@9۬Nxav> ʉ䦴 țAl|A k_b#Ua Us0_RQL1QͱY6MXD\eMsqv:>gHy(ha]ha]#2J˟q"v' 1"RI.`:3S\Ws.FIojeD1)/CRA0mX/z9OmPpl8˗w_=oe>  .^3˜)F<+] =y~Z*vtpj?XN)zFGsXdNy9:.n')aٌno Xez;owH(~ցv#P\w%P + 7Ž”JmZfm=sI15}Lڛ H&Q$MHex(қ2l|2 kA9 oje)7ԗD_8wb endstream endobj 4065 0 obj << /Length 2254 /Filter /FlateDecode >> stream xڽnHQχb=M0C H-ؖ:LoEnRnΕ(ׯ*2.n \;{{}v0H*BH$ +GEyetz,ժаZj5W iFAl*=:7Շ~>E (|Rdz/b}(0F+ A0LCqun\{ kOIDއ`eB*34_.Vɤ~Xjo\o-7O o\^V̧ۻmͦ{͢s\L(GLn}XOWˉBzvmr5b}M$H+UH0K=7i]3kP,0ҀհVF>ϝԈ iZ'tζN"(HL(HrLŬgF`2},5a'_sO$Hc'ʽ#E9Q4 bhz| B%_U%)~.d_>NsÔw+Q+8;p mr8.\fIOL`fdzԃ%@?-Ùm,fd1Y hv(IN<WH|tC٦=b_hvͪ.&o>]6ћ+"ω <ߴezd^iO\n'fn0&iFg& ;5g`9Kt;}q$1issHpnNѰ,s3s* 9;=է $sxqHz^zѻ`<80 Ly.p==a;8XѯBsxr(;&,_Jw݆Sxz^w8M20(uj1],8OKpfdhhhp 1&JN8łd f&#:3f #xNf =%?=e5MbykGfU?ny}1۲?Gۻs}`.JuFղ PO}n].fjSn[`y'ށ ڬvYyO%Zx{u~ߜ۩H=iuWJEMDڳ8mo!fh~?l#EQPzg45]e498}7"ipti@{ D%N#<&È#:PITp਴K$HZ2DL&hX(o"SɄpf3LM $\3spt6K(H`hFKX<8Sͤ iCa9-= o#xƩ4N$ h%jJ,~f|fp]7zNB $ipFi|EcM&61CJf8tSF8>{J1&q{ "0JkywbR4|b m9}a2Eh]@54$'4A2:O%<٫a!9ҁ1;cw. tj Ca!75Y I!9҄`#o.Xj awy@KŌCwy68@{ R80 o(C(gHÌ#wCm;|P4Ɖ MаRv2PFOŌ#wCm;|P2fH K(NdSjh3PߍO(&,@g NBw Ah"q"a:4,!)2O)3GMgv-;|N"vƉLh4<2_lbȤÀ7e,AĚ2AaRȈ¤fj&sXL^LL0` D1;xIP`> stream xڽWn7 +)#6@6H]}tj8`.=;o8Zi֨WʊVX 4dYE^5kQud"rΔ[ @z2,Yf d=3ˑesZ#4]za 6 ;2K74]+֫0yϻG|K@|&C>M [1FYcFԽ\ࡆ/&@Q:"D;&QwLH K" jt 5 5C 3jXC5Ф jLƜjo DEMS-04)#Z 5B S[ h{vVJ`oL 5zwU:jzJwtG1C)FPcY`QxLn 0{ߓ^~={ߓ|/%y=^~O>{ߓ|/'x-^~O>{ߓ^~O={ߓw^+˭nrk_ơr?g?Yn!= onݎ -2|?w1 endstream endobj 4084 0 obj << /Length 2998 /Filter /FlateDecode >> stream xݝ[s8+lWŊ$tdrT%.rݲͦM{NWdʇ%v O!*/'?<KR *ˈ $8JoϫWOfΖQ9Ij4>=2Y=o7梓7'}}T_ɣ/8cE47gD`Dcwѧ (2z+1;֊--(ɠX",E$YK]l}.D u|x&pmCyJ*Q4A\@c$;Zo48Z1P GnC,Sҝ濖ܥ@@IPKTDr/X" <Ab2 TYu(Ս*j]96΋+! 8nSW/? c!, L6M*hN~)d&Cr$$ Tz]XNg31Ag ҩ%xz qIb$@u'(p2iIlp0i99;)Z%'LčFi41G18Cش݌p0i[9;)ZQߊ&CS$)S?"*g/=1q68ٴМM#Kϧ!MM;$L)'أ bf`v3; aaӶsvS:DL=i|D@HO@ef pԧ\j *|kMLM{8P%©Of's"0i[9;)ZO8An6.ѣyZef4m7#41=M OV07=TXðS&>զLˈL4 \`\L|J/!n"H$!b>e31 *m 0*g'?RK`-G&LͦFO'(Գ9Ntx|^6m3 S&:m0:>3k*4t1fvDtgL MΉ}P&%J]ZKR:M@' s~;[HI(f`sD,g03邙1 bf`)e1 Fڝ|;͠c|;(aW2:Y~\2|&0^o͹dS޸2FXeX3c|> F4Yѽ6=Huˤ%켭gzs_G]wdc\UJ0#yO^<:pjxAfIbf`0+=G~7;dibu~*YYV7Pxvluk5hcҿŻ;.XYel9$/f M{ < 9Z %ԁKɺ'VOg3t hU Gy[ Zi27,sf9 q[[/ _;ћ(JEQnBH3e m+h GʀAUUyD>:/V윂&2UV8zx6YqVWyqQ g6;XoQhx/qȳb uAw>}xo>^b;,"JolAt9&(}=oy/>%8e<s2H3#yOEKk=cmvNY (?oԜwe |:̡ke\/>xMx/Ꝫgq-Uʕ*n&k^xRK<_gߠ:J2cfv2p#TX`WTXم+iǻ+\c}µ.sX,c}`,f h! X3ۧł1 bf`IL }dMBZQv<$GiÌv1vkMm?TUwy¹3fWڽOqV;SԻ S4D,G a\]/sB!?S%^ovӼc (xGg- i5 agxX>'5]ܷƏ9;)To]@7=؄,@m@g'>TKH[D܀zhtTzԟA n&:>? bvs~> stream x]moۺ_ P$ޢ]vX. ]Q(\INa?~E;l+G9"6z!Ki0h'/1ĊzHET:6O͂|fg_u*$ لe`"/\\vL! ySɗ45P"() $|^OrBkJbi?&rH4Q[d='q̖" fGw[X<m2L6DH\2M L7yRܖ@P`ɺʧ")*.VavTo-v'Pl#%&;D¼9?EV%d&O[+km|u`h4,Dr;1v,MlUOPRA"[ô %iDulc܉3z{ `!+ݦ44旿SIvjI]P1UI$#o&{\1*ք FVLȫDfv$GJMvCEH"=ϛW_o?2ZAtͲTpzKYVP.؛?]RIT.jI8jႽtm c}q#u/Z_:&6>R3:cHJ(#&;`⯌Bj pLV/ZN ژ h6f u74ȪL&LQatySeJ, NBD? ̎Ce9QO‰xA3'@q<#'d9XPI,G2Ƽql.TSIΞ=`ufFю7c@a] p6}]dyZtdd\}5H xv!2drVCi_~㮯.۵ݛIsa{q͟z5W—ա|UasPFp/ G64!-DJ}93EyBMNɴlU}?Y,^zzj )U,URH3ɔZ{ģ<ل1axկ9|SAeF C z"/UYzO) 4! R^vW{/9WQC@ojk#Ն&;DmR#WuU·FDy|di}a,ę?^ wbU:I)yȉV|` Md1OpU;oP}`g|Gvod1hz3Fi odkc|3?Q=f6>njtiE8xuD[Mt&<_GN;= 2v?nϘqI}Qݬ-Vwqbd1o4 KFwll,\ FǵO+kD;H`(nN~\ +%rGJMvzn7hZB$IHn@低^oG@)r4!"lsFCn5ǽxfKyKYf4sȁuu:EV7B× t,^oU#捬3oh#&;ix8{Hۂ z4{4&Uw0U=DGKCh#a_oh7w˾uLᭁB%swE1H(S=Ld.gv1N^fYZ؅}Li(&l/!GKGB>SqW^ݔ;}Ͱ|dy#bwvFF>/l#MjmX{ 71p:dЌ97 endstream endobj 4161 0 obj << /Length 2358 /Filter /FlateDecode >> stream x\[o6~ϯ[m`.(L:H3 PPl9F$%EɣPKXǣ\<8{cܮ"v%p?"G'Fs"GSR]C?^AA_&I,w~q <#C`t XI { yjpOL py)Gs@R_e%buEo c8[eߨWnԇsoԧ>N eXd,03%"$ApI^:ȳ1PY<ȋz6#6>Lm˃} uOڧ<?1CbX5=\^:ByΑ7 Ӿ&0 .pU.S8ОA6"a( 1Csxޱw5AC33.\^I0 " 9*cV%= 0r alJ#B81L9B6'mOr}VxRd5+iX)09#B+X-@:=yL230- 0jZR|4d0YN!́Mi*ZRoS~esvZOK"bvY\^~jXEg֖oք^Fo caǜ_UZ?YV_wQzD=&Y@3Pgiwmg_Gs8 W'hmO@Z36qYV)*02 [)+ckh–&\ur6. [){yؤqz&'wi vSvht=T,L0Ez-Znt~o_&y.n/=W֪Q CP Iڞc۞.Dzbjښ|i#2&` ÀB6I'/I NPp lJ |jN'!D|Sq`cS=ѳI) 0fNm<+{ !bCj#qށov'l ۫t a, (jie\3ϊ>IkzI+zihć3ɃXB8ah5cN$! =_l;|3e ;`ھB|Å12HY"gkb{z} hkB@)Q(|E&l *BJb/7Tc *U|kjJ@%ybZ *޶.X1.Rq5BM}~~q~/[WvD;ǫhczeUkDvZ62;#^cZOUMP88;H|eo|3{'l Գ*Ú2(XSFPքThiMm|CeXV-cc!ky-ckn^\^ j 8F:qDGbR|7~$;łt $e1^VcegYvNQK9e^7 endstream endobj 4081 0 obj << /Type /ObjStm /N 100 /First 971 /Length 1235 /Filter /FlateDecode >> stream xڥXAoG ﯘ?ٱ=xCr(CJ$lH ! x9XҦ%|DF5jl; oB&x9 ͠45 C- ڢj8 o>5w ڞp۾FCc/E Vω)nmi1`M `ĸ;rC >4,087\PX48[$3 py&ǜaicvH!9,On,<V`L'%ư "ceMX<Н|Xc KbX ΁ |%p&6<53XBHW"i<1d g p@a"2HL`i}ܡ rVt&gIbpf+18[ԑ9BXJ>uW#xɞމEIbB8UbǞ#eaÊ,H¯~+1AځEY=GMTv?Q}ݐF3/}Q15q(hwL<;kdHypgU"&juvZW7ߝm%to)(ǸP񈕏O^viv|vzw>t8 .oDzǧ7Wo_دW_|=tkgԙO_5y_"8.'.8/vʵ}[[<&cn˷'q/UȝFE>d[{@ȶW FH^$GK&&0[t4&MXtUDAr4-jvQV-*V]-^jhVD|5hɌEME.mUPʅF0s0saP[aP{U#jS53Bj`磘_-/A,Zo$x]EM0EE Ɓ|ހ# ^>atc^D?aߍ0J {W#/o1ì/; endstream endobj 4197 0 obj << /Length 3395 /Filter /FlateDecode >> stream x]mEk(z ۤפwpڴW,z9})QX- w&,My8/n,vP_D$]q]p"f~*M|zth߫G *bȿ]A|_(/|}9 \MXopٷ (\q=_,iOI@Nh(">њK_,"Ec4h5󖄞z:~H\=BՏoFV*RRuݐp&\ x/?kyt/LOgU>x^^%J8{s_p$ /M-@s]")xKJ(qvx#EQr/R;p8ݍ<)7߿zfuww˜K_QD+`I+OX?|>q)[$ E.ۓ%Op=@h,wSZ>"ZaSfM8am滅m`'\q5"_&IW,R(s* l W>JzT7οSx_FL?"2^TCr3\煺1P)Im<@3kHY[#q/QM`֏"Me2dhqff,VE%Kb G6k-dY!;.҄P=#f SYe6UxHUM??thm6'YR#_ɠ9J#{\^ɱbۦA;$B{ G0T(=a#fdQr6q5S8lA$9lQ|׫..0[MNjP.ҝ:1rZWgt?IS7 Iڃd<HVG\BPÏOO s*~: . ~1^?¨X1^ "I.#| 8&7 OO',#(,Ҁ~3V!KFY(}X!׆(FA\oKu͚#0T&>}0̚NXmGZM4 p歡"ۖGpV1;B *} JSՆ&G:c 8K M:xݜ_6ZD8TY|M> 4K ӫPCYf*0;/w P2v[B3 1MEy@<xFMG̬%H ؃OP,s`A'7.,l @gO F4(|vgg#lm]+pjq_'v>r1 ă5a#fD9#+|ټ4+g+yHBIr`ƬH( B-G /,&baAUbn00`xH$<"7@@Qk(@.;G ׇ0pa>hfM㹄v Jw d3DI_B6/tO ֘m ٚ02{)Yƽ1isU?6`3F䊢^?@HTB-2̩YU@cHyn>50^1XW[ ǁ,zjYnsNgm.wy<ܽ|;2\Jw\iФ ywFX2{ 0$~ һxWD뛯a \ęn\R+9'k(Gͬ m"33joZh|'Bn+ K21ߙeLY`>hfM0Zo0hH*i\[ _@65Ğg> [^' #af=ܧ#xm,C{(pʠ4.Ԣ`EnGb˪ #! y,q8*J6&AC624)8{R}er[e>hfMyMG-GecBͩsoż?g~ Gm΍[[>lhfMC\zg"ps$BF8\3NξKu{R0 G維!O 4&ȠD]Ox18kAU0("8l+P'Ȭ O) 4J^{]3ܶCPC⹵C^S &O91XfNzADEy|7߿Ua95Sz6lٞV_֦O9XfG {:״IV6uTgm^evd^y@hfn߻?D1hcx@hZ5AF>R5^PPt+H:W_v禦|kM}HcWw~tYOLRP{i}1 jwҚ0°ƬiΖ0q°l+PBքѧ5f;apB/m\d ;MgfɊ'FC7,NV+RޛL~QB_;{5vEl,4)BawξPf퓚c[N\]rzX>KZYJ- K)BmIRU9ҺUvR(TFhV 0fVz=K'U 4B^\$Iv{hmb{v5Z jA{eOb-PV}$̎_<A:DyPV؞ƅ[Kp ,Ơ-0I9hgeYd M)Vô}$̚Xv@"%l&μ?flqւ}AY`~%aLE}$@̚c&Q3kDzbv>e|5UEƷ}$\̚E6C#Z='sB=P/RX3?^:: /mnH>}$̚儹&$^x>"Eû[nΏk7`tY=/2p; 3pC)I#qf74ׯe`g$JܻO5NiJkzܧc4&zxwt#ws:/IJ"ˬA|w R>y6ZcY8j )IsmmraJPFgѡ "˳k]iV(tzvru}[jX endstream endobj 4253 0 obj << /Length 2517 /Filter /FlateDecode >> stream x\]s۸}`jTyKNvMv>ev:HIȢKQ G%Wh:txtp/&˄&?_O$#*]$RUH^ˢNmҮК[}L̸6o܅o}l#72_}&}q>*:r)dgw9%D Cr:'ֵΒLgF=>%Xd<=`LLe&qld$Ϊ{gΣ$_gn;ov6KXǪ]Zj kY4鵵_N|q S~|Z 4(.xEHݧ~^` ߥSmX}|dFҥvwW߷aйFaS-WЪ7Yyq*_g[:ɽ0\8GFc4^ &*}|hS&$BdySn^|N"޿9 ]ջ%pҮدJXy]$ |~) 8֑Ȏ&Fhb81d'**ӄ uU6jwr?=tm_oQ-۲,1}|1hc&BvaF;c>V[hkض}e zSLޭ^yrv-ۧrb ozn:hI87tp+90w4Xf&Ӯ,mCw)^VKWH)WF:}|d߉F֋!)D6vE\&͌m|"on;{{wrq3sC$URx{f2ϰ&L,安m&7 m~q|ã1Z[+Oz#ewx. *<°m[)=OWTzk=Jǿ"憙k?k ! <D&LZ ]Pf{p2`)^sߗ[> b);P4qCl{5z*uE1shD88N2#~Em @#y·32pEwF5tf.C 妬p%~x xu}a4)1,lvHO=aQx:|z1lx:|hS+(f*t ' [*ـiݢxJlm>!q˷兏apϯ3m1.hc>2.d /il*>NxdzFӢKu¼N'StKU[B E#ŐH2 bN dECxCJ7/%W9n[>u.Al,쀏"#Lu{{f7^K G %; pj_e73)Aoۦz-.͉|<\[4_P|^x`4Kv L+M`P˶G%;`UΘJ81bXR Ǚ&{I,< LH_iB 5ӵh 8`a_*p@u@D+}|X&0t`| jtX4HdLPsJҲh`x gwd &h KˢG%;`$e̪6+oq]˩5.#?<##ccs.>Rz,&"=lCc5CSmZo府MۨS,s9Z,|Shb"B :?4 ߢӃGڃ:D2_1i-qٵK٢G %;DJ_1ɣTS\M>>Rx,UJdKV\Lwwɓt2hjjG#.&F)F4^ ҖhbbN8XF[_N?ɤwq??-j/[mrKGIh} hS5PyL3qbn7#ToyN!أ:Vqъ:!X3MЀXr5.e18n$M=GL}e endstream endobj 4194 0 obj << /Type /ObjStm /N 100 /First 969 /Length 1241 /Filter /FlateDecode >> stream xڥXjG S T;4#09BHrhbr0R .qh/o4^&foikm<;жmrRM $x]%20NADHĚDV[n{ imd4lPig V`| iyfudXĐ >+&$Րİyb{AډA[=$p`pMl6X!! $IL!ybH AڈH!E@D&~Đ ~ AhC<1PI :t'6[A͈6csб51> stream x]m6Bn Im\Ѧ pmb Dۺőu~})ۮ brܗkSg8c;;z8Z;~uX>YUl~:h/ QR vG% WWPy${7F^9 F ywVVcSdsB/BO;u(vH7:vj"M+ˇVB>)Vb`8J4yO''(%+<97kWǰ}V'/&.ಳׂUq`ر/>b;cp*,PC|ð06V',wsr`Ʃ9Kuwu?W{~kMekEU 47&UQ}&76VhoVMV6u2&ٷ狇ׯnJem80A0'xDm6>wYc=zojccuX-=*}Sod H 2;'CB k֚9co k*gϞ:7t5c3p_Ys֌}tHD|%`8γ''A~ C(yG'鎬mXR2ފu\?^,6gRڦ"ȗB;K!be+UbY6_ɫ}|.9\ލt |_Q OU?./(0˓K2Gf̷gl / z#|3gb^mgDi 6@I"-+O3oeCtE.xSjQ ȋW<О>975c3hbbq57t:㺈b@2p:SY%-2䟡q:4 b>+D#Nc-jQclNP:\snV ӎt)?/g]}͞VhSOY{)Z| X"HyN qkpEulgs?ftƽa #|3.3V9#Xk:XpASrm2ծ{T2 eixpZ M=1A<2BV ~8xvy9M0T+j1:,fN= Ɍ#|C{ݣD>Y8~*~}nC|C~Z3V9+2k:Ún} aX K#|CgX3V9uڎG#}ҎG/ ވaf$r-yW5k5lĿ; 7KYѷs!io4|,)Q Jwy栗s׃}߷ Tmn'{rTrHeԷH%}^b͞8F' alFKpl;,+Sඊn U㦡YyS"fr)#q"Ϟ^67 .scu SD\]QYx}fh>H+ng mfMvMGD(' #X 1A$ / *ԓP~{uɶLU|/!\#_J'E~o81ƞ.!WOٵi6kȒr1w Z:kȞ}{:ߐȦ^ "#z /ΪTi&c4eM%5* lX ڗ(֜17t:;#s౽*hs\@77}K.ʏ-G p2Hn|_eHF:B<JC#әoksE㧌ȈI[׼9V_ua<+uoKd+ X.k +Ɂ#Q_ښ!|X3Uݼ+=ݹ mT'~vC endstream endobj 4361 0 obj << /Length 2036 /Filter /FlateDecode >> stream x\[o6~ϯУ , aXڭ]mCV%'l)ۯߑI|BqTL}zsH8 pKeHR\O!X"*\'E1OluZ!i͕B!jEsх5/|}@#oPxS'$#rregwgذ(msy̐'Y\__>oI$xxonSg>t 8oDiv(:+V~ xi[u3E70m|ǁq%gB\4.Ehj}`7no;Hrޛ,CusȾr/eܞ wtg}D$9 C`-4+˸|x6{tumc1%7cL0!>Y¤$B\[;+'J(H tb)WGCR{:yZ2$҅/t$NA6HWA~:_=IB]ynQd{h |:G4JW5Dw7?[Mዪй7Sm፬17c፬1_=I0=N`'0+]J'jD,Du%w8ģ,\|CQ6=~$yYjg/~1vw endstream endobj 4305 0 obj << /Type /ObjStm /N 100 /First 970 /Length 1232 /Filter /FlateDecode >> stream xڵWˎ\E W.U( f,(Qh!(2)=a4@XA,{]cWLBYj+nFFH4My#'2L~u#|nې6b#т72[6{"ϋHD2ICۚnјeckll6؂L{~{?ƦC m<ӂ{Mojs2b0-<[71d!76aT$1aX3ׇjCԋw& VlC0_CaC ő"XBkb6L 1o 1ol4vc6kcP밲6V1 fuFa&[/e. e.~C0AD1߈xMC6`1w;A(;Ak'c2rͻZrbƹss#҈MZYԳBֳBug ;+WWu)h?642Ǿݻ7gkhYzi 5r7YRk)8j`\3fuɶh\uR5YG]qN"y .CgQBRfgleQ?52OUDzNw Y5\W$5T] =\#ӘEI0PT+yQ^"5r4{Q4/\߾oWWx3ݯ]g?O\̧i+o;ݷu;:}oA_ n~>`wyǗۏޞƾ=׷9QN0Ļ'y} 8>K+d Q$-&/VMLXGЭldL\ (Bg`ʰ endstream endobj 4399 0 obj << /Length 2509 /Filter /FlateDecode >> stream xŜr7}7dUa_R EI;ebUBrȖD\I4{q/T<7!CCu4>j|JpǛ_AFR'B"iX}U$Y$*[,n^UhɊ\Qbǁ*=,_7O]|s bG|`dW Fq*#ʤ}>o[dxi>vOg&k7# J%$a-?n֠+(gtLÎc$tv:FTt0e>^}:)ѓ,fR d2y)1{9φљV1PtEMNHω;+QD R"O}%7'4RӨ9$1;N>!1ߦTL[*yze`QeOS'W2Dv.-ݩ hZ 4M7q45!Fi4BB=M/v#$0АvBb .$zh%I7q4JDi82@MbAC݋O@Mcih,$EGQ!5 JX]Ϻ@CcA_Gh amaFC&H8Fjv[Chhl;hChhli|;F;F n"44j]v@Q_Mx5bv>06Qnw!.0> Ш a>rD0v'rF06Q9V# (F ШdFZ.2DȖ>c[jǶ3ޱ8Z eMdGF#0GJ2ǶWWL FdƑ?)dZ ŠMdLFM&.0d3D̖DG3͖#(lZ M7q6pi)xV j8;]91PC1pp?BB4F9Hj S"'!7 &;aAav^88Ǣw!VB(`UtQr#}y a};$r  ч@Z AA:vK&EbHam\( EF$ϒVRWL!y&x /[zuϕKD^♭A׼\IFW ٣`))^w:5W-%7˲=$q۰urq+fbߚ ; ChSӇM9 KŨjSn1'wαL.75rȳ]q~b]ƻBwSj Ee/]}`.f=*`_2XE1_h;Habk b֘Fl Z. %Lج3 '˝M[_nrzo֛ |Z]`ݙʰ\3%$)׿89bDt|.2mpvsgW,}| bzԏ(rt,a9z@f}HѺOe~~%y9~e{x:lMl bE;Ò7#v[G,sj~+.8 ؋}#>p>avu`"F},V7e 1uYy݀IZuygB$b:ޡYOhfdP8XZdbL> wQL*n\o%.w{ϻw덧"쭴tpًR.}}O4U2pN>0̖0 oܕ"2\DWhVL(1ɜh;*GkW endstream endobj 4435 0 obj << /Length 2847 /Filter /FlateDecode >> stream xڽ]s۸+xWyf  Nd[3Hw2DYl$%ίC@Q|+I_~G*eID #-ϳ7&[䗿}lJGA EؔfE1@l_`ryExvK.~R8 pjȃ8X>$KnN0?/pgX1%5Ǒ@aӟ|"EZZjo/=/6i_<[gwEZ^R<[T}ը+P(xծ^/BPn@MQO]xem1XT݇72ڏjP]nɪbv5$BI?i:ߛZ_q ( D0[0TZ% E,[гE89"!i@i(y'C1OJ5:$듑%֑`6Zȥ%z*aP)B\HRZ:P^K5|僆Kc.0Dd:hhf)ar#>I4UK4i^o\jд=F$F%z.Cp09ep$T-I.)LܞG| ؒLc2A""ILDϦF'L)c͆.3=h4M%jL!6LPA#f"z04z0S$M,ÑDS$dڬ#dSgiu1g#f"z84z81F'61C,tΚ I4UG !$S ߑ˚`YLDF&c$?d򄢰_;L/z4s ]gs鲦}KNH gp"\`H:RdM%jLMִ=s̚"z04z0C,7Lj:+_i4 0 IT`v%=^ÅRu8o\oPim`%Hk4cc)!%K$#,?^nx!T} 0f$:i&gAga"O)1Dma@9pWs2}d.yaƥ1 A] E\:h\F=̐$;.}\\;r$I嵶?f$(u͕f"z&4z&@+)r%> H&&kp!T]T>@ri`%H+D\:h\bOG(a@r9p0Br8pI\Z;s K3=, yᒁYK/z.Ԍ-p[;qH`/ E\h\0<qv\0 8Pǖ/^\H.UrtB?n`%H`:ri&A"S~B|Àr`Br8p0~`O tS "|ÀrK]?ÅRu1R׏[;s9|i&A1COE(̒K$50,}X&D' H* d0z^;C7/5/ QY(O:%,(̂@D0iJ/9oMDPJh2ٶ2¦q$qVfC~U%KLyW~߫{cxVf˼{fҬ\2l_5*n.oYY;C洎eGƦcqdfʈ"*cXf-.0&Dⷴ!f~deaVrYכaNx°l^yU?0:KN^ml/lqvs+dfʀ9A"*cX*'UP߱2&3UL]@ޱ*AX8MJ7KدvK-eC 7vKeےܬU0CU+YxmVÆ&$I]4L`~&^,+&x/u w4;n~ 3CF!\I!SI7YZlmn?B\?n;M3Hͩ >A05^HLmVHLd黍,3UFq[;VTV0tU1w gKD$6;ݭLgzXuu%YY)4Ot]ހxyfG察/Tg,Fb2#}G`cM^LKKX̊}ߏEpK6ӂ[Åˢ nq]/5xOz:ixn;^'fm֎DW˽eW)0dS' g-z^'ky7d#}G ^U͗<'áQ\Bgڔ"01] f2]e\4]e +٬ !֯%M`pqo: ~!<'n>5 z3y~#&;wd٬ 8Dw{?b:=51|ilP؄X[;toa VkKrv`*pnܺZ}҄"κco*=紻&ujC2,M/='M 5kԲ 㾨u_|=^`9 endstream endobj 4460 0 obj << /Length 3025 /Filter /FlateDecode >> stream x՝[s۸)ԕgjW^v:Iwn7v<ms"I%>/I :KppQޏxws)H?̻Yy7&Yo~J^K*-NBh}AFūɨzn.>_0]zV#Vo?{(Kn<(oMIÏ ^ C+^)WsǪґ'Q~R哈G~򡽪NҼHi^ۇ9^.Vp1d̳p\Oׯavu@Hw0^i8XL|Tx跱%@_w9_K#[씖 &=:ɇ@8{˜@VnmvPܤUMvm\{yR/&${y#FBr^]ěuzyq8_MM@Cwy\&Gi"Ar_2YDh5ҬXN~JTrX7vlS]כ(eװ=+<$!G"6;iF1x5V͐X#C$LqP00&F|#6;qOXԍ1-eX8jibSne.4BGeY~f>:+Ѝy WGNiQNXߟN`1[C#f(yX7enpCdy2mϙGh5pBn<*˴OѤ{hO +>aZژ/ *?r+;XɗX䜭Vs8[Sgٿy RI?tsS_ٞf-IC qum1=ޞ26wIv) kR=l44f f F_6`arEЁ>2hSF)E4 :26iYDž$[qGܬ&,sKv̀=,Uyti2[K#[lf` >.msقGc6M0sX䑡j J73?6emx"oV'"=U\vKΦz\>)s/tEY~Z;%3O7;w%y%~'}wIQtyˮH._&j/  &埫 p#jGe\;|F de'dJpBߓ~uoХuYft^akf;8ItCqc I9vOٗdj:eSvIoC7Y29/*I0*\4ZB@q~Y%SsXtҴ$7<(A@'}ba@'>TKHʑD"4Z@܇ 2_$.uF|qUdaՅU W؂dc\| hq\U^bquմdR_-сjhA3 kS%xM0; ZR=gT]8(5-rkA[{ɵՔFa"v@-4$"tFr>:pjZ ]X5ͼj'Z $0;WDpGRB6:qjZ2q}8NtZFN}h%XhVkÁ|*€D O8jYz2:1r3bpšO%ḩ@;@q|*EvpjZ2q=9rbմjEM}L Ta"vJ->%n( eԅRRGih_;ut4N} |`(L(BTV(nU:pjZ E91ӱjyaO60UD"4Z\?|*"t>uմdQ:FM-K k* D hD||QiԅRE uT:1Z"Y&bBʪ}s(S,QiɀԺAԺ?1Z", hսQ,JQBQii(dTLǪiUt")PĊ+F5 H(\yC̱0j:2a;1jh-O|L2Et"4Z: ADN.ux|N.tF NO-O71UK()L-rGdXT]P5H5 tZ&+%WH6a"v8-wI"B3 G%S{'.:FM-ǐj M'7|L8 ND'*09V>n|f`h-w6@ [9lў/em8 xc+~3#i^)q6J}S2Ρ'Cpo.vOOY~`#:t3өZA9QYW8IV3U$У7Fxwq{;ۍN~lC=V>Gb?&A@o@ 9@Pw?.#逽 UOu#/ kPhU2"hPҏS~pZگSu? fV`'Txh)4^gm6M0#J84#1&%>2֣bїDžb6M$cpN((ۑ endstream endobj 4396 0 obj << /Type /ObjStm /N 100 /First 968 /Length 1247 /Filter /FlateDecode >> stream xWU7 ݿ4/8F,ZĮ,"#TUBLD E.l97Nl\ZR^,棐0 VTWa@ kPV Ċx *¥@ʐ@z+Q&2@(Ni FeY \; j6߰Oy"vhF3hc3FTF9pBO2g`ZH[`XYG`l66L fasyZ`b{8FG鹳  M ױoօ wŁƊ"4l-^+y"V{Z~ "0Dp0ѩ;#hr]0`bg4j0$90[&/c,<0`̺b!znvV` c70" &ݝ#DMpv'ý=꓂ +k t\]NWW nO_~-ci~fed/_>?=xe2iL2#7,KqE=S,]wirq*zm̑U)2Uϣy:Z2$ZGOzc% T'B{&aUJƄdLPZ25PdLhY] 骖|_ ,:ٞݼ-WW\, 2a>ՏS0%'#u>LAFcϏ_߼r[㇏mh_^/Xt~rys˛; o\< C-W9]"AĖ?…49S8P4dK&R[U$JLB:u#wLר&$kI?Ckd!6AAS%)Mqg&ͪ)2j$/ҒAA+LEޫȌ=g :V;t{Gnzӝ"ޑ|;ޑG;Yl;.noȐ%+U 2}Ajķ>QPMD{pxV6m$xȂ uK^(t(ne|$B[ْnrI1~gRd2w&]KUǣG,b%lt &[r;6Z?j~I|_⾥$=ǒKbY2}I.|[$K9I&Cg+Ir[l{eG^&Ɋ'Eo  endstream endobj 4496 0 obj << /Length 2383 /Filter /FlateDecode >> stream xڽ\˒6W0TxLINy{x D*|t~@d!A) :Bg@痛n^ w|s̝8>q\_^]mϋQl嗻EidiN;D,WQOw7 Y :ق)ax t6sɣpypno~%mئ5U *R p@GC 6A)Ċj.[0Dq~Y/1\,_"8T~*5 pɳ}|\OOi&H1}86(6>=<,9[8Y"owa@G. QYi~fIeWAux^H{u͌t=c,X tȋ<1mDw`|&P6wg=k7N|&g2N!-mQ\j0z~{TA ΁]l ԿQ33J.Wr-K"tk%6qަiE9ZMJ~mXse4_uҜl/b2&C@b*.4.gP:s8:$6G}D2QQ_ jֱǾE3d3(63ɞnb'Ts;qe_ w0mN}$Lq$|(M4nE"6zULӉ@=hݯq{h*sF*g09ܳ3-!C}{h:2d綌qHnPrAhקBjsDn?"Mv{T$)H{m˓ Ho9>e΄y iji֋) ]@BfZݹ>/˳sW[|W'~ z%&)Z_VveX)o S# Hm00*Z<.1Zrpq['w+Z𨋩 )f"I! w; 88zIz7ud/:FtmS:Y S[:f0'Ô]$=rD ͽxf85>"q0]0ďn\w@Zx?"ݒbb8=buO`߰aEJmɽo&w{dKgx `tYȖpUfm|CgX#[:Pۚ3ΰFrFzaA k}8ڨ;,] CwNyo"IATt.P/pR߼4|?x|8a}e]T׼yZ endstream endobj 4527 0 obj << /Length 2168 /Filter /FlateDecode >> stream x\]s}=`fN3ݤNhPf  M ҇,5x@^g>\i}/,G2[?dB"LHf?Ǻʴi-Yݚ+4WiH0YQ y}_i3-jg[ݏF>P 0%rΕkUv}5~Ke2Y a'1R!.jKccEht$-{g3)0Dzn!wdvկ )Y'RN (F2N y:1||:1DK"V % OuoC͹I9;jLnt׻TOb|ӵzcYʣ\kg+}=}9Tݬ1&D>5s{%AZ)tdifM3s6q!(Jfk$0M[!ZIqדCqznv Oߐu q]yC}9ra#E瘘A=S\̄ /;~ &ohV+@QkH !3݀!7)h"6)~6d .!=26!M1FΌ.{Nqq h0y;0Z;/cGh;I\b\:;zd;ng #vg~쳆\ylz2oHFkHSyN,\:CzdC9Sƈߙ)G|Msh 7%5eTF1%P@3G6cȝqqq@;ȵFLɑf#,/ϑQv4v<#oM?gG!f0S̚њRIh5F\#pL鑩Mg#rg~v\ylGA(0Gڱ~"H'1ΎcG2g;;#c;1 dގ֎,BI(1܎1tv1cȝqq &2oGFkG,9Cc .=2zL1FΏg8؏@/V.8feTJ9Xw|ktd01dT81c[JdZ"Zx=^/e/-P`Ub*N e$]a+>dCBpVQD .^6+3p 'J %@(˸X+DOm*=0=dg Hh4s ܾ9I_s d;Jv&P#IUC]a&J %;sʶ`sVSc2=}|P3zܣҁf|g TeR2M}|P3M 0-r`I&JvFN.jdvLN('*~:Vd*}o,.=Ds×=5$?ԮΒ'Y' db@1bܮIR1CE21||ȶbpץ|,Y~b2y\Wm@lfMeIðfϩA39 #v[ӏ=vqQkAgag>EtVq$,ֆ&o6a?͆ǧi3.ݦqm0/_me endstream endobj 4564 0 obj << /Length 2206 /Filter /FlateDecode >> stream x\[~_GN*@66M8O [[nKIԬ)2#f  zJq/woFbK*:ɘE*6OE*z}jY-Y+4W^HSgoq.~#f' LD{ヘ0ⱎ>+ Q&ϻ觻U$H+)Tw c~Ś"dx80jV XZ@jDG0ḊGɲ<DUJ5r"(H=ez. N$cbޑ]O| o{nAig|%'b hbʬ E'k21 J➉Yd]Rnl 5eT2_Teq.1/ڃ }ѼFb,.>.Pe{ S nj3<5sK?ʧLV"=. Sy 821cC5 #ٕhUo(Ҭo1;XĚ(QPeNP#/e?H7?^e^"]o2=J~uz^zTŜC~#&:@ %5}c02\| dЦ F$# OpdS%#Mcȅ慧O'? b̀@f(yT@E3oƂiO{O_/رӫl)GL#wr_Ut%ùʤ<٥ey3StW &6A4%1U0]| dTX:P`HX1!MP !eRVnCq2=%s",{9rkM=ϳ2̇Χg^~U,Є,6i1Na0 wE X1bIlOv޳t}S] n6uk._icScjQ.:x+;"hL3[:<{HwMO%-cgՍi{-̞bqgqqVvLhX{haY!^H{x}L-YRu=~?gitUͱ@pVvLt(8;5~m]2"u7Fo+}oWezo&` p1:'3eWHo]óWۿ'NaW W 1CBIFbe&yj MZotTyMC8OڌyG=CߒN:uw>_ە endstream endobj 4493 0 obj << /Type /ObjStm /N 100 /First 967 /Length 1250 /Filter /FlateDecode >> stream xXˎT7Wv=mK# b I DZQ$D0Hs#IA6T>eשoNjNnj__af"ޘ=Մ͍ R]d xhq3IDD9'bg"&%2DV[#ݖ V[:hHB3Ya6b38ϠVڰT [#ilibpV 8َqg7X6 fȑ؂ۍE }`Qce >p > [ rMMc0\M8o 58=,e YϊZyȄ5C pZH!aD)hx^Ԃpz3$018sI x e g3 TV* d8Tc1L"CG#6Dy )ٔSIUIT2a8d@)dLSHE2thXxFBK~{بG/6[חo^xzuޗ&rָ]JRytEchW%գj5{Y#"(Y4"z+ƙIztypT"ӦQ#mCGKQ}stYAEM0zkLڗ5k}ɃP$ls8|b8}m<XηI;=޶;/~: _޾aNίo޼z~~n$?}=l[ǴiK".s.ߑw\}ȑ {H}ꪓ*}6#p'naS<"L=ޝ͋dǞG,Ӻ-Q&K'ԑG'dxz~H!/t~HnGd_ny~H C\~W5A_Rjd4 JLb*Y4 $73Tjr/E2r_uW/f ǜ?'H~[EQ\EQ?GQ^M:V XpIvfT;.iNيcϟv+~> tWw3bqX81ќgۻ~7`N endstream endobj 4604 0 obj << /Length 2317 /Filter /FlateDecode >> stream x\[o~ϯ[N@ghA_rAD-rD:T$ʄn9O2,` o8Mpٿ.} X&)J%M"$)KTj$j?UMk\Q2`]CuJ_V8!|Dܜ]}ʼ1:yZnA0L_ϰT? )%Jy -DTI'7HܼЁ&mk(ӌBHX4(SSO>>P`a;6?~;qN]1Ĝйg^mCMju2+?Ue`ۻl0밖MkU`ۻ"*W}Q/5pڇ>PEyS՛)#Q+atEs\RĄeU6uVsqNvٮlhv5鞷#ֈ`ώ>>ЎфʐBhÔvɖ;hMqImvgׁ,Z"U<@@0TVqŭNjN`$x7fmU&q,eZn7sĒJ Ju<@AH8D9ۯ=u (~9Y\;7|| 9rJ 9@nb,ׯ̍xE=| 9N# {b H SJ:fYm=>>PaǓFM]}Jl͐t'uVNE2MfˤhDD ;!DXJ4 8uJ4@C8dV e{^VTUv"ss"Wю -Mځ1c-RbX a:LͨSIi[E㝏TqޙQ\nyO;&ylw>>wPa'x a(=%䝴U\4@A2Q xMOtEc4y@E`HcvuM9|| NkaSOI1;x>>xфuʠ h:e[iESTF4a2M)*#V,ՈJ 9=tсw &e$I=]J۝Z چf?>IW7wUł|nۄp*&k;dYmK$H+0,)O䳣)i'_"dBS0M[C* FceIC 3ӖN?e&[6sw*Sھ "|_q~_,RLjWs:wa ]@Lw/[1AA!㷺Wہ <hU؆Ɓ"VC$lO*6ı5dy'ck]d잟@C<3XQ/'<'aA DՒЫ6@׫q)|l"!.nviwG>np3;e knj,Q oV4a2ȣ)*,?;"l.>>.PaB{=wٺ&|| A52 Qh:eGSTF4a2M)*#eH#lkR_r_ endstream endobj 4656 0 obj << /Length 2505 /Filter /FlateDecode >> stream x_s)VrF\]dn4MsVIl%J%ɧ c r]Lݙ<ĠI𜣋.jC0z (I.淅D0%l +b1aLoV{ZT{KÉ;y6Lշίu`/ZUWZo Jdi= (BWMȋ+FJB)ub1cUՁ[u6s7ҽO-y6+̽ޯw޽Ut8trlSo;0_ni1\χO3dQ )p|8,fOú_g͈5Х"B:NeYm[P mlML}j$ebiK-Ϸˏݔzׯ()yzߛ'Q]RđS#J^?ۈӚX{W7w,OhT5 94PzC,@q ơ(4<9@a\:cƮsSY} % $i"qGU]LAS+q998ajg̘6Be-m}.UEr&Ṕ,ST&sdi x.,sXv$ ö48 %E2KxIy99Xa^j9\v$p9ػ%H@Br&pcJ3K^ X˹̑2㹌-]˻Xv&d̓%D D̑2Sa)"@pn:@8.&=,8RNKfpy$Hvk$y,$d)qX&Dhx,&pKU]2Kec9={}},ABeHKHln l5[bT$s8Hvk$U}ABXlL8VL]8S#KcDpuq4;q 1M$#B(FQI4Rh#00na,,7֘&gYp<,JNEYZ0sfoúűk <@g&9 J0<2"cǎ3(4vL+$i"qF74S{fBsdiq a|1ucq [ Ɛ<&iq\H9(eT /1Gn {rwb)<>UfMOro³9*x%GlA"UD$ c> lLKV+¤ڡ>ذj ͯ,xZ|FYjT#qj#k =TMG6R{bLil1˿̎u*? G'G {$Fp@L7PQN5|r7>ذӐRd } / dn::>l,_~ R7>uॻGb)uw#GcM1Q>mh䑥+jS e1 3Mhz1뢕gEҁ}J.Z~ϮvƴyԌ bT:Zg C:O- 2uO- k ~HIk%Dg:b4> stream xڥXn\E+zvdewHQ!E6)=2flfϜUU6GMm>[F)hkƾل6Ml#zS 8n&3iy`i>7`mҦx<6-sY-M΢b#hȆ``=q2H1o66!; c@#I%i04_TS64M l G9Nxq> +h| $ߘ61lcp>mⱱ' D9%Ptm :6>6֍ Ơcc\ tDhcб|cd$ۘCZY4RB T !%MƸm ll L7晟yDL&'f136JdnAGƠcT`k:U*O\;g!$|^2aXz4]#kcXn X֕j?|\:tLvvywԂuE\٫WO5KϓF65Rw"YH3k}Jd'=P5rxϴ*յ/-LY\#Őp^ .Lŝ%FLubΉ/\5â(4qQl8f;W҅n=9*Ƅ*ŘtэU͊1amDL7.2ňp\簜K_+gDȑ䵗wvo^_ûodz70x}wgǻOwƾ=7e6h^gwwuMm쟞\Qg419?ptkHlY&Q$+īfHIY&U2ep1vn3c<)̸OώI52ƓKdx2G1Ԣ Ɍb"E擘Ř2΂1!}/=ڗڣ ٳ{9{d /|V;E8}ɰYF6h*8ȫ\4tT$er> stream x\[s6~q=S+_:LƝiSlX1 .I{Xza/jgam|>$EGw~xx=22H**I"eHLwoud?Uadh(\v *x]7]-/ 0 GDtxG #nti;r e>ۋ.% JE 1 -kf qnah+fπԈ `uqYŷͦ$zV^T#!g@G8|^ݦ֙8u L/:=%*!)ǦuxB !SH:9A\+a] X^2&+3jN2K89,o9i2>ɖpO1WF/G*bz9RX:-98 ʑ_cIr;I[$'[>$@f102}귗?<ڇ @[HD (2DU!pz0iGwQx\,cId H:C)3&}LleaO0Uv6Ӑѻ+c; / ap3_GA*E˓ANix?\n{ez~s6I7m`rhiҷy>zQnc]U1 e8 =Kb Jъ[ŐSe HRN2C|Oxu{ y +)sܤ W1VY~q~4UVծ\6eՌ8h)M8=Mvvy{-8olG[nm,WM}[Q dBQ ?{›!.}ZҷeؔP]iq7ׇuOOe wYae3\6vB9c a"^Xq'GǮ{Tx482`z{!Y e1tF0 I9c`d3AƄ˺GFwBr轳 E}n/D*ˮBڣIc4ݱj;Tiy~?޾>dY(GL\զ///HҪF7yN<,Qܣ:dmv\k;/BmfS[Y(I4/il ߡ /9C+zt3Pێ.g2f޷ϟɘnpkw9uZY`~v|.;At{i1ay'}v>-ɖQm:gal7wA~2 Zgh4{:Û4E_ sp%U><1jL767֏yچT'Sw7Vc:@WMVܹ~,ػaJnKVsyA|`U:.\eᨂ4ӉZ-T.t,CZV)ϹYZ:B𒜟uqIU6s){!gRM\knGf\ LpD51SdDtZg0({:#Y %{:#Y EJK5Zi2{i7CQOŹ«8Rx/PduSmږ"8_ JzxrkLjWb~U?Ea~ @0&6yz,\9(в+bpd3 43N lG.kbdzΕ"{o0 =uzkJ=Mv*J䝒]='Ɨ i/O>ĵk$I'v5$R+=u`)3RኌCx?WyBwP(O <@p=/H.-qZ endstream endobj 4720 0 obj << /Length 2285 /Filter /FlateDecode >> stream x\[s~46ԍu$HoDNӗD9z/WoG"W/5@{f;L/}"G`4A8{.F򩫿>^z(衯ģy'-~ Q}G< ǫ\A6jUN1k?k$[ϛjo=Oyo՗e.|lY[YLT7z0'p -PuR6wiUk>GlVАf=Gл_*7Yv~M}/}'^ӷF|*x^"_eº eAPVX#SIt mpD~hۺDG>(* vDLnX #aso;P"pc@#9_=&5A#j2>![al =᧦@ GESJUk9Ec^2{nt(u71]|ˉu4bT.0jyMu{_MsUlܒV}*/Z-b+E< d 3cbXF&VLdBDƙdq&C&Q.%Ύ P7Xm2Y<,j4LJcBMbmPՉ[cB# K-;UwG0 Tφj5g[*• DgTt-vvLt,~IWgӔ?և B-ʙ ~gdt-ɰuz ^;nL+tB#U:.;sVUጌ.%Ξ?db}?k{~fdĠHeD÷;g5ABqzd:;1($A}rqQO>HW鳳Y[΢3g5,h[QMU)3"T8sVAtW$-p&]|K29ې$.*@!o\)Xo endstream endobj 4760 0 obj << /Length 2339 /Filter /FlateDecode >> stream x\[s}4`\I d㴙lgzPeK /I}A II GCу7A@/ ~=S֣>GN D78[ͯ7H20owy[*Ԍ ߜ²ŠJM]SoT56 Da/ò*Z,T\Gf!fBg, | B0h9By3"?8X.LC+|JJ9`B 0 :5b.&B$G_)I$c5^S|l >| C*0j 10 S̶ro ]QEFqNxE6w%fv/RwΞ;2͆@z? |F3#piPW'  գmjm.| pHC̝:dS?ME,W6TsV7]JʇpU#2*J:ՑoaQk5u5jtwY=6&.yY>r2BΉ }grfa>gNa =e$#~.WITrh?וa%;W-]Y%E31zvb#ۊ!w: wbbX-b${4JYnW _ /P!pgg ̶TMwʇ8/8F|IhV* cQ? Ji6l~od%[YEf+C+DdY"7¾sf'jLfOf?!!Ff A&fm0Z?Bf#ds=mZXsd-sba^+5b]uS_9f 0a^*Yr\nWnL.oWs#ۊAe~)=|K18Ljޛ~'ç" ׍J_87mыӸ$>TtwGfʹ甘2u|K7&;)kD[o }-}dl[Ös 4ݡGHxۉч8?=y4+=/1"twx÷cks@7C"mhozcG2S{{eᳪl dgq[Ɓ59q@=H19@MW[~L sq/0Nmbg'Dz<_=OOOMC7d0O=|0&;' (hK'Qeڏi(8XF<3J$v:ŝQm2pȸo5ޏ0? :΃o@mFǷ4- 3 ~PŶ6^qV hZ` T{&/IV:jW^t4|/w:e X5INH ( =kyxE榇Q ݁C*LWqbj̷t|K߲%;_9hjW^6"Q=gF-l+V31t|K1mŨÑȶb@U:CǷN .b F]h@@ endstream endobj 4679 0 obj << /Type /ObjStm /N 100 /First 970 /Length 1250 /Filter /FlateDecode >> stream xXMU7 ݿ_?м؎[hJhX TUBLD}GzC7q;:dZFkIh{10Jd5DvMd @Ũ-0mZa̶c5fk>Nsar4$ 'X;X'Jl6@),$#VV >jNp .)KXp‚E፥Y aٞ[bpfbp :AF٘67Ġyb$`YbaXNϜ Ċ%Gy\DxaŖb81\8M, & XJ2<1FHb &4`B!d Aj͑&錕! p$18˔X#(tK!!y3QI y;,1)Q*Ʃ jlE%H4+"b+Jβ4VL%#^p=_7mtצGMȖ篞={|s=V#+ȯyqٻjdcw.T"ٴ;1@!wӏߴv[23ppZ ݐRy7[FOܴG|v~xy};}ן&py~2gOׯ^<$6`?^~ׯۣԵ3&u>Gv( wDض>(nocW \㢭jd};(V)Qgbu"꺊dT{1̋Z֮΂]qQ1NF/3CMpә7F* MPJegQ&@+JE.JBGQڌ( G%!Ź5^uеv㮭_䥸r &wut>$ 2NSfd"L endstream endobj 4805 0 obj << /Length 2203 /Filter /FlateDecode >> stream x\]۸}_Ga(N4Hv- -k[)iDٖ)Sl>ylS]1ۛo^A(8*apE@28+62ɴԭ91@R B[,}ATnvt+R’',w?%P%!0u?o`MePPԒb< 5(*+-[̿4Ίsfź:[T6_we#^Wjb g(gS5&n WR~W_Ue*[KB$\ @KN:S䲕|b B0tkݖ4% $ZOUə#!0 1A] 9b/";NӀ{ t`ǝ/v@)Ou^h{PuHYFcBA ?C/89B߽6Gy?NAc?Y/iɼIA`׹R/IWG38y4(f1mw M8Z b qM0PR%e9i#:>W{'BUD撔#Z =h#|LjƊXcPweZ3CQ$pٴ=7o:P' @3Cs#4?{[zF{t꤇ίakA^gVa7d,YqpKE_<cZq1=0=XWcĎ٭c=Pųh`>ٿ1?a%ޭ&WIgE5) ˝/sQV=.TYׁtn(1"_fy}giK_ f;g dzhdk1xbb1gZ/?ޥ]44/~ݍMyͳii4SFW41\@1ŀvM ?PhdTh,1zab#ۈA*d7eʔ^*d{Q[~TOi7/MvYgE]ލ-f?>ڪYx^Po'+O/X?7 եKmaͪto[n!-viTBSBA0 [$ ncXuI(4uKO!}M҉>\I 2 2XIh|(N$֯FoЭ: zUݚ7:4$~~ h짿gHLc?zoЭ~"vn2L'JL <7ENl?9گFG><4 /ŀB9(P)Bsb[ )bƾё!0 M~ hGt{F$oЭصv"xkn؀14º Am$쿌~[G֊~o&F<l~#JkMSua+t]<`mzfhMK=> %;'”}a_])Z<o7 %Tz:c^cލValQ@PGM]Pyu2e"xzJG#[͞x*zbcEFfY =FqO41\@1B$Ghđo} cspor+ d*Ѻhdk1  [Cّy,-\0)QJH; D4V {VMy8l_ô' endstream endobj 4846 0 obj << /Length 2356 /Filter /FlateDecode >> stream x\r6}WQZLxɤص/SS4EYmxIP)"Oitl  ~_ !Nn7d^zZ-VsRI"XMs@4{z*$K O0@@C+WC`ep+א{B!mc&k} STJ>ϢisO"*oOQLH7DeNfyk}`) 5XM 8OE, _r_/?yY?gr f?+( $}(5hrmd]DCGp AAH.w(x%QG1Vih\̈:p 6}.Q\5$;0> P hO7;qr((A6t 3=GFDK_88Re}6! `T6 @blxBqAmD9Ϳ1Dב}7t}cޱo_g-#@U11&gĘc#[o ;>?kɇc=ULuyhʂX}W3F4 a%|?@?{(*ĭU]&8qQYm xO?ctMYm 3FޔmR1o]0{ ‘VZJ8:Zn;!*T3yW۲hӍREZu.)Qe*g.15!Ns dmc=O,|#nnڼi|ל8R"9ojcP3FJV9jɏuʹ "VM+#>uz ZBOjnB u2D*cBߑ 0"@# rSS Hojc&f.1I.Qf_ ե7l[Rk o8ɬ?#AH,7%ii|ox#ǝ8ܐ|0uK\n C2?$#04lRn_9؟=|Gc8+kQQCyc/iV9C`|-,1ȑq\D^.7m~Y ?n(72MnESxsߑY0n4y6l~Ǚtx},',(k c-oUѹHggem)`!?G ~ew6~UDr=3y֗swo$SDSdhΓ%7u)䪪 (\<̼۬(Afyy9֏wclg[><״;2›H*uz6lJo;Û1*e1)XS;s҄ %[ J1Ǵ7(&ouooԟ6zFvDi)ڗf4CοzR:?l`䟨S8sÌ*`U-6^1)Qݤf.1xU%%lՑsm o1c.:fJMUdӿOVڇv\q9+kQBrͭatn/}x}jEP @=|Gc8+kAL $ضʧf0`v Ӡ:rМe鷃Dk$qH GU/Tόڼv}-.@4λ*{ёxR@eh7sZDOZ|,n7y); ;Uv bDno#mJo~;U?R Pk-gywû{ WgK&.+)qb;YYIy=ݼwn!$wtGғh É,K6*&.]7nYYB|o}l;o6٭/tݼ㬪ID".J:hu5)|ą͠?|t7)-l#3i_D젻Qc^xRYĀ"4MHç_ה_V>T}[H/ endstream endobj 4802 0 obj << /Type /ObjStm /N 100 /First 969 /Length 1223 /Filter /FlateDecode >> stream xWn\EWdewHQ!E6)= bJbgtu9[G}5  @0"ACEH="H/`@0 *&`0L*1()ZF2`e`\=e*!Oa,̞80FBL)" ̰H:" l ZTC|u60v0^4a~"#Mmy4"Z[(NjOPqjd)A #4 @2x'eew2r =9 d LVWWyH`HŐg@d3*=ycXP#FdpD+0Q`pzH)<Eu3("F ("EGW ˈ`wZw)V#bcI`XU^ā!0:S`NX{LZ`X0GYuJձx,;xEU3ϑ笌$G d̑{=#G6=U:"rdj3IksRf-Q&5QjշYf#EIMdb=6&#K4wk$ƵQTe!ZRBft3#d %Lðw%J]hR22r# aJBܰyMruUgBCqxz>?B??F=o~/n~`o?__>޿<Ѫ/7_}*o[ AsC{ | R)_V65و;r7Ŧ8fI ^@Nf̄PÎ|xxؒ[aK>:'=Oze֤1Ǿlɾͤ$lyvdZ$4IIhPw'%!csRڳ`) zeMdY]?j;UB!wˎ mڑ5s2%m9G+eSiۦvdtڶKeNpۺ#TҒ=IQ מ &[&[QR*N> stream xڽ[ےF}+ٹ_RTl'q%˖+E@KZ;ק$/3}zzzzX'8y>xz3`d$]"$%Ufet6yiUZ2kE+Fc]7o7V8!_GWH{໗ Freɻ1222C Dq>hkmK2U2JhU% %{D2`'Con*6nOb=O+4U8̕ĩJm>q`?z`jwr~BQWF(T(6Aji BWF(T4UќQtF4¸*+3jaΈG;C%3ΈFv ID toC]:VKĩ_$=fY>N5xt.㱻^yf\e6,Rw?'|=Y/^|qNPf2)'C`g7 d0|z$1_+;i$P/k4"V:-Lޟ]"dl] VɲӤFT0}zMM>"z懞 /C2qu+ǧ4=ABs &i!A0P`WA9a}HE.@2cq( ~z<[LZC2>_ WQx (,s(X=a,s?Ɖ5sV-/r'`4jyU(Π$jyUtF0كۑ 9dnE,+Iۮc:Auzu{/>v2~̳iZY^)?&Ey,,^S T:aHm.g185wh:r[noU:j&~STE; Vfˌ5ja"Y hΨ:#l Ag.mIŗnyQu3[vL'l=`'Y~`D#a*C ?zgأxR:#Y hΨ:#ٝ3`/m'a cR'(nGVmLVm\+7[roǬA+4hfi^vEd?eְA*ҟ+]zydKEDHQ:tK9nVE(:j]:}K?!Nwt;vtC0vqH\_Ka_SGs8^>Tʉ!/1>c/}ZmC#@v9?Ɖbؽ)KFkdʋxd34TJ*|+bQP oW_E4̈۩J|MKp0Ҥc z_jjg"V:_,!Y#8YCx[Z;<GO endstream endobj 4926 0 obj << /Length 2538 /Filter /FlateDecode >> stream xڽk۸ϯGP3S*4nvHvhtQxlM_RN#dhkHiKهfo^ݼQ\gwD"3<ݭrMrZzki8ɥ97EdQu󗻛0؊f*T޼f+ߛY[n3(BMnMK3x4T^k@Ku58FgFD"[öJYpQ0x¾]NTݲ|VVr"p!W\25^mwQ(PDrarb[>#Jm*&yᯋo9uJp ۫ǀ>dz[l೭XxЈysY w망=4+Rq'1AG^xx,ى#1qqFP`^kP~OpZOԆ (ӄ3qREVC0bzՖ 4¬:U]NPKaŘ,-Ř,-*dŸO,dam1$x1]1.1YXW CỤ̏=5L 7NS^33{?gtV_4y W88m\6W}~n9ni6h:oٛüeup}eU>&{ܓjWO`|>/O#ZCIv:bRWxWt,C{Xa>Ɔ' 4b9ʔ[ռ(ܨ"C)7X^ǧ}$+&9=E ! ɥ(%ѳ,0L3EG ocZDn \D"ĉLpDBo4!3B 9H,0L3 l&$8MDD&h8""B!HZ$Fd鐌Fxİ<8vnL6~"q4,8 R0hQ8/X @x; /;n"Eb)%2EC%W20$Fd9aGyİ<8vnT&6Ȟ"q4R$4H,0m<$2&ruH8FGeC!QjJr>F( 11=u7,*ğ{iLp8J8 ;歍#1 c l&RJ@҈8^(Ñİd8alq qlQ 2"q 4BA$DdDal"1=w7D1@҈8^Hap #1 cd G ocݍ`6 aXj'2A) q\@bDBq"$BcGxD88un R~"q4B4n#Fc zw9غM$Hh"1x"0ޞлm"AO$Nd%9Gh5*H,ȋ0GF5(ގ N"[%N=EDh8" EN^G=2F$'2&ruH`,HsU~nE,8LE3+ҧ kQ/pMy\ UbIK?n% HmYrn0Þ~,z:MuW̰*%^Bò endstream endobj 4947 0 obj << /Length 2054 /Filter /FlateDecode >> stream x\]o6}l`fIR1 K۴KmYQ(zTҢT}2e{K8ԹGԽDwaKPP]-=.}OpĻZx:^f^ `h&) @BlNe0}R\ ] Q#?">nד[^{0w#'Q_{ YAC'x~:NKKHI_"A6-F! DP",')G}0r!zVD(a'Mlmf$Y7(P!Z^6FC#EgZ>Y)q`KMAXCr;RG>< x D~'!_ .daՃa˫Ggа='Β·K;:2@Jwh[&Y pW-ጬN8t&e2-#JmZW=2?$@~%|%Q{x6Z৺bw.w؛SQuz?ޡ{ey.Nզߢŷ辸lM D!t=m%Iva>;¸a c6xo _`7JұiD;sK;@(uh1t7{&Tv+=R\ \Ikq`ǖV!H-0J%RI>A?K:F֣1bWz>0[ s(Z~q4J[gTu&l;+o gdu2$ȝ·L5f/9,9qN\#{aC-pm;Oo9dpX}w` 2dH[pFV'+-ķL3e28b4O- b(oÚ$Y@Q)A6,ӫx:?=zEɗNffsy?՞>p1'WvEC)e p3 ip0q~F^68.]mo`:$`~uo¥dٌkRHGcYgQ=N:@iI`GGJ%6:>(*i8Ve*ƙջ#%R"]뎬Nm[&Ú/pXz4X[ÓKQb䩡skzj`z/l8&QC:~?p5=4xvy۫/Ocώ+:>؝·̅5!t2KS5Y{>vwfw rbl(W<9 Gq?v$?95<ӜfK#ՋEݘ+ 0l0d)kbOO,]6>蜯懲oqٷ 8cO0Fۂh[ Ζl f{ \pW5j Y22ф˄5U}d)_ endstream endobj 4888 0 obj << /Type /ObjStm /N 100 /First 966 /Length 1256 /Filter /FlateDecode >> stream xڭXO7 ϧh&XZqh*!ʡ-訪 ~>]WVyc;;gMEh$֌F@YSƾiB64 9A𦺑46g5D9EFM)H)k-49-D#7⑺aPH~6!͛TXưucb@ebP#`c K6 lϖGn>h@!46×RlL3!3HkcX`X2 AF-#1v 1`$S⏧d:WZ`XhiD)C###$1!Hkc܄yc("FeVPN L˜`2(tEa%112b1X$LFE} 2'%X1|1,74m JaPlgHl۾'ͱXڙ,b=Mq;ͼ{=qxgLIytTX;/TWlu"muU%ϲ8+uY/Z$=Z<7+\/5>f\}bEb0HWSX#LŜ{gA[<>CORr}]]5e3!_ހ[\Ƈ%%%h{ Go^pmOv~ryw> >xt\^ݾɞH/.o޷}޼kO gm)`k(ɫ뽎w$!adC>a\yF0{G\=ɂg.)p) }ԋ,'ʫHv9)Ȇ/Īd4bN~;"=Mg1'YًdUd{ru1}V4$kd45DHFSE A݋eabGGIdb e+s/9/Ϗ>G"@g\**Tor__osĻ3H?bߵqLF%"ya )"=^C2磱.HTݎTdNŤ0f /gbNk1:@ 7S70dootè!#݌Z'"9g}H> stream x\nF}WQޗE  }qh[%Tߡx1Zjw'8x=yy59`h%m $JUj\O_mVb9z6]VK抢+;,$DTӳBN\^MXlne"YM`{`u<VA0L icEczy]EfHa(")h~Nu@:H(~μ_4PŒHSl 4:3-*JD ;)ARk"2 ';9Iz-}6Ιϳhܬ7.ٯn}p>xz5#O3bV76#&s&&y13mzG(͖|E6_`U >$?{[*H.X۬y{1EX@2 ,BYIo2DT@D{nH8#(  7(\3",oq 11 0>Z] O0ێ=K!# Bz^IauD?* Rܥ@ؾ\ !y_.Z9B if!!,4J> stream x]ms6_og* u:uΤi:eN$RKܯ?Pȅ@KHY 5vv~/3'BssPX9A$^.|_5'׌~  .n^GUo/>]1 ;ĥuŇ`Gv(xr_JoX0@cy{X~;1\~|?XJ?,D."o&8⒄3^juCDD"'+~Isû{DL{k~KQοpa o0 rB4tDKB/@009HQ;UgJ6ųzͳ`ظ/%!dv{szN5eG}Q.i>@O{S@7' d-C]/|a0g3t Yv (CCe}Q վ!C"C@j2x$@^p>AeG=Yyu'ڷ>dCQ6QkЦ 6YDǂ\;.)vzxP8lo I3_F=6baȍ, vQet a,X:͟mGT{LqAk2> |3g"rѱq>vS#/2#-M-&/LEڥ8GCdrxCƙC&BItḮIZ}]){ r c-l}l\7q"\{2XXRBr1{ u6n*:+7mg4]LD&ƈooںf,δ.ª^=hYpE ]P>fSvޏ]E\q Я}bz TBWv@|(g]|C;0VH"ߕvP$_fzNh| ۬8y<[<\jSWgNGI\b oYTħA=3D2{RT"cqЗD7V;G./W11gU9B#qq`} uBzun7Jq-(n,iӈ!n)X]˿AmGX%#en+wXPߐCjD43X Ze+Qeg@L/SAW#X3.XV)nwkTTy0VxJ{x>YB!<_M||Z˗eg_XoߐLlQ G}s95.t `,洃 K3^Gu'"Rn|7qVQ".ekX)X3.a cX5-ёU͡5qi%26]|i5VgZI<UӼ4nCǽ3m:7 $4]Mfɪ>?)eo]|C Cy"Ja+Jӂ'U^%|j|hޟ[;#5bPߌAUelM]|Ce aN~Ȑ>3ttck[9T_ڛcpI,~XW| K]x]ol2ek,XX:{d:6zZy50}?OXC%9}|$X3c(Gj1pR =Aì/Ue?k!E-ukc]N;zUZ͸-P[3.5 cBC34vޯÿ]frn*l }bgI^/NV|XqYtZZߐjքU`.q;膊0T0m>ϗshpib nLݩ祡 &S8[#xߐꐜۛ3hxDJ26s]|Ù&RNPքU 2.2 x^o k¶QHxU ½JA. (bB~DwUWy#xK!mE,2.7?oP^~ۜV|Us殯},媡?-yf:._։xSs6*˽.O⟼xC|̌:aȞ.$͟]P腺͟'ّy ";wnb5] ]jxH"pLһD wvIdi f6K\A)%T.'i:L-M;29dտYIQF #^?>u'SBEzf!=a2|1{CPj$b tƟ#֑GZ6O&^P HX8Z E T"$/# {՞vJ}5bI^\d;٢|`m9.2ȷWirXXO"b&ē#O6nϱKwzބ ֞ am nMX 4cA2ձ{̐׆C8'OE r`#k֠1'# W}ќU1#qب9F"etg,"<*|]O'G^sڵxyߙRkذ5Rc ~,$`{]fc,_|ܝm?_|" endstream endobj 5054 0 obj << /Length 2635 /Filter /FlateDecode >> stream x\]}_O Svu.^Or L폙5LwC7W}14Gs`g`߼~Op(hܯ?@A:a,C//l˗?֣C'E^( n4&ny C^fb{W,{?:yq`Eد7]b >)!ɹE,!34x{|'Vu{rf|گM?e`wO;R#]pvG9|M nA /6lSi_"dߖa-xC3_$F1Q'gh=Lt l>1rڭ7-pxӚϺ>eʚ ؘcmrb!XUCO9^?ekǖHfFUZ"= of c{ǟ$5JlW-sMs a?t endstream endobj 4977 0 obj << /Type /ObjStm /N 100 /First 970 /Length 1256 /Filter /FlateDecode >> stream xXn7ߧ k[Xʮ,F,"zUUBID߾gL0eD6H2߹z曟cnE-z z!Y0"¼Y_Bt* 0-D+~ </߃X\0L2 ?#7q3 Z~x!!XB6aY`x/$.aI!K# ƈgn g]GcMXp6d`|8Fx4yѴpܴ#Ӱ:2Vم F 1,[~Mc=6`/ȃc0ma1U# ˊ4ѰV_XG,_,#ma K{Xk2|`QQY|(Z|/ >/ >DW>:82BHLY48[yaJ+Aޡ\^ E=lh > bYLz"e=yyG||qsm(m髿> stream x\r}WSBU"lRqf79eCE$~) <88 t d_o.^&X& )IersbIkJIr;.zR\~k&i-Yךe<5`놄+fp}Ĵ ڃ(xqq'ʒuE"FI~z;)ѽ^l#3bT{K fy,r2U}Us[Tz}Y6 ltepH*S ~q|UmlXMh ONJک6%{D #L=ջ˥I|F2G8Yg Qf?1&#=pbQu6f>~-z77D.;h56q5G|E Lt]~7ư[0Y 1>40&j/SXE;o\{e; :,PB=*)%>~(SĄ\m|Z/*$\Q79t,ә?=Ӏpv&6/M+tjhB =AL#*>{]w#Mϝv=/>h7>g!6}@ &#Θuv)E_*}ck0ڴjY!\cmM}@:Vn2Nz}>/'`y_yqs:e:DݵÿN '}B((;xd12}@cD#댑Sh"Ug iSh"Yg [{WQ]?i+ʶJ6 0afDReфqmkOۊ_vY7Uk71ھgߎ|t+XٷVscRX~/fVV]^1Ud+¾[WU~6K˶҂dFKjM[;ve-eipiZEl"0dTvf p*.bim \ml!*c]lqӮ ]KE98J+}Ip@wf-,;z_ A?7]b&,7S@`t6" cCnN!7!UQxeoo2y.O&K!FjNHgFlk|z׍,}@7&$EugW\Ƨ'5M|-l7Rhd1HNÇ"P%ٙ/n_D>~ J3w˝ӖMm2Ͳ}@F#!l}@cfwo`Rnh:(DWB]<5l@Mr}@' LJ%d~ЃaDU_q>T\0Y.^]ئ|ZcP/Ç"Ug̦LE4uhhd1B8cыWqWv(Kj^bW\%SΔ䝩mnk 6yG endstream endobj 5140 0 obj << /Length 2921 /Filter /FlateDecode >> stream xڽ[o8)c7Q,!dg3@6XVa|r _ʺTl!J\<")GO~>?BJP=F@B(Qn}=ڬE~/I$قUg"-?P|1<WWUg7wg}w RGqKW2zݟbeB>vk dD>&jW I!;-DD Wsegs㸑[[@HDc!>1GRb8JϿllX+z1~`tcO;n-AcIy'"~%$B}~ ,IeYKݷc|~ޖn˭Ft4"JvFėY t𦣳:_ր1Z((v"fH-4F*W:Fef zp |j O;3O(H%,×о3 ,Ot|P-j'b>1GW:<܄?::~j{ V =Dp48T$~&NӋ/-gx2aӋ#-G,t7>TH=Oh=A#=Пa5_USXU(EJȢ^`(uӱ8F|-Ksud0`gST-{C4.ٜ։꤉gכ2ڝ}R[e;EkjzcA S{"czš>`6na P`6cj,C}`09[#V Ɓ>,m!Db 486CV[$jSDo 1(RތTF:ϾN5٬>FǫF'J~1c_1kl(GLϧ^MŌ GLݶ9B)82o\%z:0zeq˂0낕+/9yUV/1 - CI/Fz_: 4iV%)>wHϬt6>RKP\ډh\Ĥ*+}Υ_:.|R L1ٷmä1H$4WډhLr+x@Kdߙ6W*a҇ʾu*B3JFK)Sr=٘ŕʞ/ߙ=6L:3%p͔v"f&-TKIC×ʾ3K>lwHm0l|̤'DL4Z& CDI5ItH|VNtGdϴ ζ@VR $@r_w$AKGdߙIӍۇɾq(z>baFrDC$JO?))a WZ <~9ͣ-}8ȤY#-E@B4Z"#H/tHi۶}6L:3%$H 3ZES~GoMKGcߙv@}64:( ͐v"f"-1ES@JGdߗH>Lw@Mj{̣V &.Fư  a@-$M0NP)L0`uqgeᮾvA5KS7ϥNfwEV{sۛ[ Jt+u l\6#L}}Xj.2͗۩](a2\+&I$s `u@& a!Su-͓6i!fm}~0g׼|>5_7N L$cCy PW]SjOtlMkX>/a\"/vr_+nixwl~̟vE\%))|bqxk}v}"#U@κ'fX=OStn1]DN\DM!N) W]rU8XGqWnևin5l8]a&`g] 4d{ye櫗mOy.C'{̣t:o/ッqu,D<]?dO>-,܊O7?8e]|<Xfz-.A#$ #޾&oͧ;ܱocC-H?i.iIm/ۈ} y PW] yQYGvz5X(\5@mp` ;B'OPܭnV\Jni9}v'cn;4;/f4]V5I3 W2<.=#n6Y =OzA l Bڷڇ P .td)ݞWٟ1b^vOci{/zټ+{{ۨ䎕 p\Ou>uDXG}}L'ޓOW Nc\i92 t_W.l)Cy`WЭl_ h`p*|mHp<:4$Hf[Eݻe2-ҥ@-͗fe,_?3,ļ:&y}9**ߙS&Zo endstream endobj 5091 0 obj << /Type /ObjStm /N 100 /First 969 /Length 1231 /Filter /FlateDecode >> stream xXMk]7ݿ_?P=ͧ$0Y$BHhk0]l3ָKȦ瞫Ό4#pipmjkm7fjx+x&PP$Ȥ0%"M?+oΉ3&%@x@eW ҶJJ I`aĉ-XnVJl 4\xƱ xNsKƛ<!# Kk,m913yxPb yamX X!)a̒ZIc}2JIH 3ۉk`X= #!.1 BW^|r6ޔ|lKl6#KCF!a,7a31m"E2.춊1ߢ,%O*Ƅ\4ŘQjd'ŘMŘ(#%]\eWz\F(=b68m4 o@#F>]ח=9}'t8N7Q4?ߞo?}8?ľ?jD7b~w~wsylbWGѫ&9.6^T$#sg92(7p"yY$OW~^̮8­J겋1q.Ř]g1&q GcbӻbLp}őtUJE5evb6֣.vbE1ĩ3Tl9##S*\Řd oy1&QIt~[1ίz3Q=bMFFFKkצ5v1&RT<HBEqmaH- i- !ڊkd:w%h"YE\DIDE2J<-59E*Yp&(8 l}? endstream endobj 5177 0 obj << /Length 2907 /Filter /FlateDecode >> stream xڵKs$vŎUrX W)$A1K"dlLnu{Fgr$ϾyqwJ)䵟^>)$X5x38,׎UkCth奚[pYJrY9/no^>{'j>;YnLRT. Hrd)Ha&Cwa^1PPVD&Q}$Kd"1uBnYeYxݎ.̣QyI v 9"0+Ox$ko - #q"}& IcDI` %ɑ0Yy`R^Krx&ko - ='q"}& I I2vEI,:d'9 7aI2ĉ$hd&e12BOrd)LaV&;_t`.L&[&A9Md'g2<SO&1q{Od)La.wd.L&&g =2ILF'I0z,Y2'a֞t&93'&[&AZbO"EL42y.mg#KadIdarؼe$L$N$A#39j@{=ɑ0YY{2u.L&[&ai 'q"}& I L=PГY uV,ޅy$H@`)g4pHz*$'9&0+kA,ޅy$HhH>̤v0;GXГY u`r%(9 9aJPԹ"}( JǤLsiEJ'`RI0/P([(ABQgC$hd(at<TҊD%K{W(9 7aII"}& +*A_@Ϳ@%Kf$d̛;3y`rܼar"]&)bOE)"a~?,:L>Aa^1PP8^= EP42 ~pp+an?,:Rs9Ż0Y{c6oVD~H>̤3B20Kdfes]1LLG=3ILZ)~Z2%JAʲbHBderػ$uZ?HHF$ ZeX"0kIvκY 7a+~H>̤g*%I(*JdúYYcnTeg@$hd %2M3$Eԏ%K!d}Ż Y{c6o ONOvȤ! OA&pN#G c"q&2Fp8` :N!Ab0'$~sȑ$sXGY;|D b qغ!{`(. `׵-?.| endstream endobj 5185 0 obj << /Length 3136 /Filter /FlateDecode >> stream x]mo8_ aEJal{M.[$XRN/mzdC>lxgg3CJ;˶~;y}}Wj{VHBy=ⅎէr&K&>}=ڷ9sѮHH;;g~p}nXɿOe[U[_e7 o&uuSGI/_}rFXn ,ؾgnH\7\X;vx0.Bo {m."[pO qVQ~5^t'Qtצrw%9.Qc_B0@=s_8C9-8 '_:ϑХ~ 8Kmn^EWHb:t8V2@9 \!{Xv<$,|NH CH2%=''$.]hNeXO-RcR* RBp'DLJFOJ/(OxNPeHoJK!{H6ʲ猔n 0eF"0zFJ+z,H"¤]J"'u89!9)%˰aLJFGJ/ ]-aќԢJɱ.-%9[=%DzT=cd H FH_&TO9#aR.%ʴK-qRcR* RB8 I2%qzbĺE#]>]G!lT=g`6D@ e2jk 'vXu20rLGɅ&%Dz!T>礄`II2# RpMҕ Cceڮ"!u9 !9!% Y$$F:"D58V ]#^ƱdEϹ(ãzR0!I "]&i"2u8 ᢲ9%-0G`}e5.Wz;. Y?ԓ k՞ZnGS? =~KX?0 BsvbSjS|-6վԟ&wtuÍ7^ߋe}9ltEr hM72^kCA 88iN//>P"EO{h$c 5C3r´i|^493cS|U1N(H=栂"2zwtX."gqWv|O],=:sg)ߺ'0J,Wu``#s88YMT-Ej_E~$.MU%@חIS `6>y&qq~1e;crgS|1ʪ>W]WUɼ3^ 䏁a%(>'48 nD}0Y5Y8;R^OYj{>G %\Z!POʠkO'n=[P=__9֖6.^l0nc3G /%0w=KϤE2#4Aҍ~2=+ݚ\lC)S.s .Qwygvq5Ikb,><P%Q6`h$ZYX j<-DQEP'1MC+B0'/YSsʹklW<]p[(䫲$&.3G PZm$Ohn(DTorEYgW; ʶ~Pkc4#iVV uvU"M9%Ɣū1cL@+O!U_?AQUMJ͕^|P!}q?pmykiHA+4zq]9|/Rͼnp4ZmwRޛfмw =ww"2܊rqlpv[w*|F)d&N켃9e;cmbS|1* B]cm|s|wt |>6[?UvzW}?7\1 AQ+v?]vLJ<뫙6>ߌ)n&ƌ1GJa.qՅ{тU@k]]!s|ʪfoXTgzѥKp`A2F)>Ɣ7 c#MUUY`Y^=f'vjQE`TAg 7Ju[ymØLVVc$ݡ]Փ"')b >+$.vzVH W tc"Qf]`qHA+8< ߀SVGo8JKm6cvpڪӘ1HcUw7^-U=rgC`1rd1e;cPJ\li cvưƘ1HcS5 1>71[L0jo NM1w ݯ5=@7kVJN<=Z?P4o8k.z~޾ns+EyLS묪wG[N7sʘćgw=xF)9 Kʅyϗu~_m(%bSNyzJe]e"ڊkHI&+э| !BTE!叨3No EOX_(}h^fyܾ]E^KzAM:eڂeP'aUU!Mv&sb]IcY!) endstream endobj 5229 0 obj << /Length 2152 /Filter /FlateDecode >> stream x\Ys۶~[@N&Ilsx>MkT8ɿ "eɠ!܇6/}C7 ^<,@2̂2dpIa]$=]kYZ \uKl:3` igg~A?{@@>vY@8d|z4aC i{^"Cp$-p{"0"RȠTA$[|?hp03Xŀc?2dx ֐$:31w$9 _'rV]p)d."i3/j;æRe*ן,T>v[Oі_"]+UNzr #qzP;ss!JܧuibO^wB> RxXׅ)6I0?Gyb,-"=(z&9@yM=Ӽ0E_vM)4TEl6Ei[ ۩:,w\Q*%M)*KG o-iU3&@ˈ1cF8;##pgDQ7ixPvvz8%2[c.Q/G˛S'1#o.En1=Y6vva`&߱]kޑ _&H"Fߑ o2~⍌1#ނ5d~~ꍌ1#ނ5d qM=p4bg;DT~.Mn/롤N8K?]=U]6몿qsDJ7 b ;YN~i,i?2^7^;9BH\K$B-T{ퟛ|VHf]4O*;/sgWY V 2='pfBT~\6jt1uUuks9pBO_7oxmQhX.C\OAp uT7.\)rЧHP=&n}`{2dPߍ 2D=&d8;c@=@84W;ss҂s ?@X(D?wssD 0ڿ NS0xX&bwv)GWv3fZP4֝jߣ U]lW1$+!086w`d!@31g1>Zُ=sj&b!IC #ނ5d~ 1#ނeEߍ 2D?#Fߑ od@o#$JU=UM|b=']a'qc?[m)C߹zb}cm@? *tRhTEym4 !~jLE+5#YQ{q^ n !<OZpbSc`9 [Ӈ0@Yn00 5Vp(zj.j.fg:M8$I /Z]D Dgxe꾟 @c?@힇[N(K"h9 cС|v3tȑM>OtDiuDnCGxXpUMV=k)B?vРq :` ԣ"$4zR< V 8"Sފpw/«#*z_ABGځWƠB)߉zB۞p)o73{OVDu9"e!p @ca> stream xXOo5UnHUz !U JS|{8mIɂ!sȥ姶lFfcH4YMHIle@MpS]ɑh483g@'2+9ml+,ƼBpF"h" (0NXfbX)%oؘ 2K65̓Ơ1ecИsc !ƢAcH|@tc@I6\!b4 %F)#nDum  Aec1hLN1QDAc ҍAc! ص'djTVNމ\E4SEV y)v  KX0Ps$ia2B#tcTRRRtpNYlRlL3Z`9"T?PX[F47vmb>6 b=wcĂp|^b-lO?7, *ݛ7O;ypLDFw>ct5sH٭: 'rEV#v'8'{ϸ7w/ NNg>ΏI1TlˏH$F>>y鮽lgO/]$Oկ;Lt}6-v8>?yw1Ǿ?շ7ˑ/eP n1H307]чyP"WG_AE>kd1+~߬jsE2#sq=0z4܇/:9ߕ5r̞v<3:٭Ky]9J׳Ev,ܳ]jitSuKѝ5݋{h }Vק*z=8%Fyd'U]6wq zN4z'/n*h:2kϾFF޻Hpo^EO87-znپI\͢'7gfEOpgNTu{QC7䕲}R$#ˉ8QEլ弙Uɔ73.G̊ț3ofV$;V,bkWK%f5<\fU2|)")"}G(\QŒ>*֨oi1Hs]Y2 fEOjNX☳_0ΓgT3QsPTsPY+ endstream endobj 5269 0 obj << /Length 2054 /Filter /FlateDecode >> stream x˒6\MIU#4T*NI9Lnd!Kl*jGJ~DE 6@oLAx<|}wsoeaTwHV(GEuvMX7ᄋUd5Wi@ԐP>_Pǵpcun?eX=޼k#nt#$|r۰q?|A7A $Ƨ8 b{Z)m {hs"f]]~/V93%z:o,\~K9XP͕:A|?nV-( <{]++kKkBFzYPaIR4 1{y=ǍAZ2kP,0ҀVV)QࠑM6~\U}ωa"(HLPƑ^'7rhΌLb},KÖ _b;|́= 6 F@74l Hp*G3%<]Z30fy ÿCVۋ ;ND0J#L%pA<JqhosXw'iC%7u #4 $t(sw :9;}k%CAiFi |Id Hb7 6Uurwg~9;|%Gsh! H'&0A!OfZ!e$|;{j }_<N_H \ƙf@bbg]1[B`:ʚ 08{!|-L[Mv5!y! F\ {^@Z(EN_I]>;4Pj~KlTf/c |)Q3]m&` EKE_?1&C(4O~b2= ͇_ݒ6iع-14[oYl~]|}py۸ogaOq~x;=*oSy-2+N;J801O%%=c_]BXbˮ X O7^%91)Mב\_H 2:(UX=ev"z:v?#﯏.?V2p|z?'٦ߐ۹*Z*z^-5Ik) 4S\f٧b7je -Rb٩ݭP[{$pXW$"W$)C1$+&)?cv)d pusXw֧2"h!!ch,6^[VYL1LWY駕 &bL?1&Cct'&c`dPlL?-aZ^SOk9n_.')2Ii4 1 1-($c,!CL]U5=p]=wVĺ:R$XWh85Ae)%6s ~󩨖EKpIʳ(jO0G@C úCз>!v2X΁q"a4B!J-[[10 O `H akݢs[w=9;}j{ٺCpA!Ŀ‰ #dPMLӠ "a!s`h!7fCI 4ỲBDVX Ơ8:ڙ~t6PM/PG2Y;@ g=L۽Fmz818'Z俜?00 endstream endobj 5293 0 obj << /Length 2355 /Filter /FlateDecode >> stream x\[s۸~SWF0LY'nx7޵g_?)(DCIg!D9<#BS7G'B' (yr}0"P(Pr=Nnoxz|{Ե91@R!rpb*s?st-G V’-Ld0&\gѯGй bhHA% ds%ULmYrI|y& O-Vg,<_Vُ 9yWE64'$K:4^ uvG$LDQ]UW~9z.fͧ9e&~`^B bo7/;gdo_"r*i)eM,v]&nd_-jeƭ&~`9~ [v\Ɣ{Ĭ"VG]?0wv&み [q-/M:ۑ~䙗~ݷO,=;rwj} .jcUp*,/gl)8`Q!;hƷ&~ BF@B+ Z[M@n:58җAP']?]Zat vcDRqG%ěh;.bр E,W]$BE4g]0ՠт F4g]0Bl Rgs辵_OB(MIڒ)c 3Ab81b/b^|{1\7/8?,rzgβed) 5ҧr2/tKMmˏ}b5]GBQ>d迗iuˏe6f<6$ܮʴ\-~eZ  gtcRE3PP`+0tm]1zps 0#*g?>AVlGc=\= |8*Mݾ̆uF:H -뿤ٮ`9vO5@rWM~A,ay14& H51J~Vyw}X]axy7< !ThͼylB00&ކ՛ӱJo:=p`@I>YSqÙT[ަO+1`"d<!8*oᇍ9>ƛi#Yum0yUXQrkZxΜsj D-L;{Hh~=ɞPn/IӓtW3K9}Ȋ֘Fs39P|b~繂YN긘~َkEQZU4g]07Y -e-`DsCKQq;@ ?0ќuZcM#.6֔7Ŭo3m{)Lryֵ'B\ٍ$B6.1Sqw g镻Kbݾ A'm r3)^i~Uڃл&[{&̎/dȀ=u77jUXk֪Zc>bU|pwL|NGi`fK,#3dȖ`h` K0솢S2b./@=ѱByMK [JF4pvsr-±ObT?Sk>hQ56b?[nb4ifh'uX0:iw0Doo!b^G endstream endobj 5333 0 obj << /Length 2994 /Filter /FlateDecode >> stream x[s۸)V{Z#_Co.;&#ɶ&JrO_P%jO(pC .. \>xqz0H*BH$ +GEqqvrq5O>\ mϖ:+4WVls"*}>notzb`D1:8 ͙W Q&߳ $H+U({Tok7i;a% 4\!HFT 7 ߜrتj$d(HN&GD~&CwfUL1ݾKy5AwV iWRj8U Rh!d );bĕ|=]zLwǚЏ=0_faB+! R&rHRLmE);2);  h!VB0d0L @e0$u\Hb*=SXwkxv"h%0?Aۆ4biɻ|LJ =M)"GPV:C L&`(AB$ QFaߖBǸIh!0xa0{`%. 2hTIR0qB`pw`A+( ?whq( JB$}?J~=*tvg%&0?~?a/'q(¦޾/kGc郿Nbݑ׷B8yH^KqHYNBKa׷}^廏xKq.ťh!xVh h٣1 y"ܳopܹ\S7Piv{n᳥>`#7V& ;r:S94.OƩI4&pNMh t1D6\c 4Ԙe9Of)p|zz1ͦWu.!_O_zF]} قm*%>1ƌi)ͳf+"pN}aE Ys} vGOI䈘f >4-׎E$Y]gW/`=™ }F_+Bs1/pݨȚ#o9Q n> w бJb4> h&ET &ڞe1H([7nFJ#ͽ3urzq|{rqM^on$ٮ 't}t/~濁BgةׅG6]} `wh RvV^yM~͌D竼a vaYO<3ȡIh* G,wώbquq 'W4yix =yFe5=QCQJ~d]f ÏhJD]Ef H4CQL l@zI: F"3B>!h1$y{GOWd'H/n֖ y#i?r2~aJFb9>Qh,G)^ /6jD2&(&q]qgc2 $!H/ޓo_[ `}3\hmlZo>1Fl =ll}flE>6Uf6y HP_Rl2ܲh~G& Qb٘pL@0Q=cBy]dEW؋`=ӧ=&DŽRƣ2p`ccB)FJfs ֓x(GXU;x?V4F 'm$=ێRCL]ogK8XO2WKl@DpDzZ^y+DmJlH:@"z6.Vҭ)ڷ=-ئ1D] fk W`#VЈ\Y_8y1D EwѴ1]Eï9V+ldh bzpĥxZݺ-Z1>Gh3$|[ *ݬsa u1 VN~=٧tW)c8?Wh^mY^}޼k> stream xXn\7 WDȢ +Y 0AQ ҿ!N=dpx)鈺MhMm;~y5 n< M5 :8TW#m:;='ƚV[nm &$1j5tp=1F#"و(} 3qF<҅yL؆[|"B`&43 G5 K-,XDL"XbUrFQG{ގ{ ܝ07o^<NE^O )TˀdpLɐ"x!\|="bW-Gy l+rbSl=ڣX91|< sg;sEN}y l[uSVX9p}YQd[{߻ȉn\TpWKa9QFγ82qݫ+X \ѕ3.DU,+#09R"#][OU/2D,9J΂q"S!q5z!qXE;.-:+TQ0d?h!קBJ`IȾJ*"s`r}VSVۣH Ƿ A",r2:y EN (', endstream endobj 5381 0 obj << /Length 2308 /Filter /FlateDecode >> stream x\]s6}ׯ<!tw؉7IkϾdH-y))/H@@+$j7O%^$Nn\^\"X&Ier}a2Hr=MtvMZ%ڶhE+ V6$TB)>5xy=߀V8!`?D2y}M7:\|H2iO şr!yFRx"MB&ɳ goXvaK"C ӐxUxT SdSp6GQ K6mr`^}ysqжIbz\`d$]#7f6_e<,nzyJI(O20Γ{z|ߏa^")%Y+Z+Y ̑Ƌ 0=_Ռ-s l18ny㪋G忪8BGZhL&ۜJx6ż|nH,AmcumEKD򺐎KcVLgނuJ+W_UV(b:ERmX DymN<8y֭U)jfa3IWDsSls"mCT_?_껂WNDsCtlb|fԷ(oPf,AC|Ad[+N_s/Vƒ,-q%Q``/#i4Hß/O/fh (ٖ?a\ K >L0f]Hw/ڕ6d2CɶȬB}2nUGڜ %7 teH4/@3D#!b&I 0I3}wjºfP:(ٖ%xPr:*us4]B|.`F F l1 LZղ.M&sJe.0N̍bR&۬ 2|qqvs2i$WV2A6(\ۗ%YBc&cvD#] {v`]z /Hxa(9labq:K:wyc4YB|,P-p!Kzy\K)mYG,D@\~M(!l!_bbzFS0*%ۢ _)!3~x|`hF F F4>L""U 鲦h񁱈Fv ީ@d9~:Wۿ޹ ~H"-d(=|Q,p=~!vͣqJu|Z9E#]C^9w~GeC.OFu8&x|34G|xٍ'U얋ulӭ|LV:5SoӪ4X4>$!| 0>fbH뻎g>eEq;דCunl{:4+vC:PEX|gU6 Ë)|磑` ш &gUx/n|K|ybV]}/;2^ߪky2>yS[G*xcQ < 0>#h$7v{nI)8O m>FBtn;2  a@6kb$Ro'yOv~,CxP k{÷4>d 6u6. } endstream endobj 5434 0 obj << /Length 3177 /Filter /FlateDecode >> stream x]s6~_@;s$u4s-Q&?PdQ@{ǂ]a],vA{=9k/BQ@fĻx/e2_|zBj4 ),`KBXT}gDy soBI?ˤHG[E>q.4Ch)\@C/D&0R9Er.",ar,BsHMǻ8]Oq/8ODP*0PU%ISq 8p&@_eҖ)bƯ 0}D!ڌ_}(]¢j )ؒ0 [PIyDbǬCQp_0p;^a& àZ"H[ nP !G}4wܗ(8론&CZsOB - e"̼?&$@p;TtYR!TG0 d ewW`K7=B5?pXv"OC -:r8 }bcHQp_`M7WQ'c?" KR!^iCQp_`KAcMXUN8Ryc4/l*oGyuWU9gRn*sLY=w]|ɰVnki4҇ɋ6t'm=>t7|uׯa:]^4at4;ǕlMYa"trFB-C:?Z+k⏜!: _g;w= u7UKX_oNP&"[$Wo:ld1 WYݩ|KV$wWnne ktfn7l_1 .r6/%~갞+_:%{e |ɏ"$*_[na E\eR͍"4oBߒ ʚpAPWaրe]kKJTqPZ%y\γ|߇[BUrdu|K'UǥP[ooXJ!wY G;t6P韓CN`|o;BiW‚DT;_. $ rVE?`U 5J\,`U:m:"WRgXǷtDkeMsaA+=,n̊J/Tp琓l%a KИ]SJg\[rVٞ:=>IBNsZb"ip\.y:/^.7(^/_$Wҿ5Y+d n8Nl9p2f%e0A#a=5_܍tq˓+rD Nw5JQ ضY?|N.POe[Sxo%ZfXdMd&7aoBx-u2g mWCG[5-}We7g[RZYJaa_+:oFNq SUqf:50esݎ;<RjuXnr3(JnmzwjUmDs 8 {eMRLuHU/=-y| ίL_>.M-3-llQ TfTXy+re;bҊX 0c;oҾʶɧ3Dbg6G8rW.84=8p˚iPjPhj]6NS)ƻ!3 ~g[Vٶ0@JPՑ> stream xڝW͎5SqGZސ! #eQv#7e5驩mw\\6v|{cM`4&j2M9ٛz u;  7["Hb|Jd!6f m@z["E#ж̺0'm"n,V`}ÆƘ?eΒ/عKv,;KdΒ/ٹs11g/ >cW;,Y$ÔD0%lE wQA+-*G4jJܥvp%(\iQ+YEl%EȫS6^PUiXQ_-j8T5@Y&83 endstream endobj 5485 0 obj << /Length 2291 /Filter /FlateDecode >> stream x]r6}WQFNө7i6t5%W8$ [I]:8s.ig'Ξ|23H*LH$ ˔WEqv{:?ǓWhi;Zb4Wi,X9PP{݅pS|ký3r5*l=w2E9,#ʤy12hbyv\E|<߰l26DȖv*:BB&f wZ9_MeO=Vv4fk0N4D?Vz/v>"{)!O (*'hD C_G}af&yÑ_օJnF lDBP~?_Dra.GnN_ 4#)%өUL ZL|z{F6*bg%S1%QkD?Nإo\5SGk7Tت) &[0aaB,BK>99MI'gJ~J-/X~}Zp`w}\?v|RD=o܋à;*_̆fqg[jg9Q<Hj!ElTm$5ƌi겔c6Z9S)5C|7d#JImԿ3kǮgg?waVKfhdd}0#LEOr ߠi\//;n=iORW%sRtldf1CoMOWZ%%%хڜ{ؕ\T*CFTqšX7EDl]u*ؘj0_ސMll`E5t0fK|dW[ba5D\vZ)^o6mv]P!>PP[ a](XBH5cJ"i,K&fTJ6Z@~LfhU(H]C6uwp2o@oBVxS&u]PW'3X4X2>jɂ&ۢ.(AeWD7k ʢdڅ@d# ќߚ67I>L0z]1HkqO\2'!>Pe(وEB}՞EL!jDBG׸tIt2}C|P alx L׷ %Y/;l >\T};4u2YV.oO( جK1.6j+-:5swXXCFb8;lŚ.M\>,!>0PhS9ۊ60ebc %55ߊ5 hN>,`hc{@2ohǓY th+v f2 C|P2c_K`8my'AU% u4j$ C!*]nKҥP# % Ԉ)WZ *YC|`d# qHݣHs=%t4lU9bFK>NDzvӖ,!>PD(Fc q5Z>ЫPHpv6Z>x6\y6ʈJpOd9<;Nf'-:]0!>0Pܼt-ֻdF[XbG-.&M=V`d2[NrTe•xɂw%D``$# ABl5)dfp4|ߊs .;4H"g&JGgLQ^<ODSG}{W?}=(_Bf lȤu:/l5;X}*zEd:a}ӿg?D!yj|yWKb*#"~u3zusԗn"1Yq0h;֖g6M,\P>ȯpZ/D|/YwC2pv"$O;vfmxWۮ9~yo!d؍D*+ apSQD 6& i[kLl|}?sXVq1`_pk=}]L}龭Y9ZO|~B^|-=4mA4LO`,ݦaC2.tmmpX4H  endstream endobj 5539 0 obj << /Length 2026 /Filter /FlateDecode >> stream x\r6+<xLydm<#TI*}/EP) J བྷPppū닫_ABIep}d«"(a@aIyai>D! G ͟U߷ (䵭I5if*1خ8[{Y.'wI-k-/ye>8\?h5%0e$W'ss{cw7Tva 6c8!.&+qE4vlXqIZk-eXU햯yGY&w:,,8q%CRJ6x#ki%obp&;$F^? (]Qq$\fb\g+걸16PڛtݼY#~) wY#62޴h;JዪQB7)Zx#k ^g.%cIޛ}4Qcu"H"f!-j#i C3Z`J9bR/7"˟_NW(Icxk]U |ɧ2*7YI%p# JHԶٟǰy CcFƠC)"@WFUBsxPTd?D6Tˑ(PƑoK"&Svgđv@vv-Zq }>"9fJ}n #s;a4~96>\ms\U(Fi=N8;''Igd.8;߻ɂpև^X1L6̽IPt7٠z[%CcZd43Hi<G[G!1|78=b[)w6 rw?|Z> x`ϕ۰椃hlod`y"=;፬HSwY#gtFnKXAi'zT$-2^~ C{♶wc== T aԽpm9AL(tcltSڞW[?o ϻ`4>Xyy'AK'Y A` v9|osⱭwn8xC?ƤځFpCz745 GZw^8;'߻vBCw>q?LDC*pS%ԾtjSd w(3S%$GK,A,cqrHǢ)Z{N:m; 􀨴W3UcF?;JB7;3!'9ʴ;/㢰vV?\d?ngpu,1Qr|kዿx*tY# Ltp&;$pP?Qչp)B0dO?2_~dDIe=%;ەlU̜!vޤ{X{wTܕl8D.j'4Zfw`I׶5CyΆ .̗);nt&{ĔT n~kS7ewKr1NÌLf6m\F+yEl3OnQ&_]1$MQvWQE{Cdlv|^U(Ma**g oVY&IJB%.9Y\Ŷ(bP-([VICs goi;Ǖly89$ـba;\ PK*f6%5bmM%HUtFֈʛm|G1mH+4);-  endstream endobj 5482 0 obj << /Type /ObjStm /N 100 /First 973 /Length 1240 /Filter /FlateDecode >> stream xXjGS -`$EFݤ!_NtWn[x摟~M3M`6Ս=$!b#ڜF0n#bjul}ld!Ln'b&D-5<11֙f#ǞH Ur )1m͍E̱#g9B79rt삑9o 9o̲rCiC99n 9J%fn*YASDkcl͍ES3A TU]9#H!G/4"1EC{c1lc1BE}X &2B%CfaN-SDkcV2fMzʶaY6L#E̜*/,=[l8FXMap> stream x]m۸B/5CJD{R 6Ŗ|z6%EicI~b~Rg g/W_+8C~qE|FĻ_zf/XT#aZGFiHr=#>{꭫~"۫È{jZn=F0P~xwW­ظ/>gT Pbѽ}%n]&y", yuYP= }_JlK󻗯^HNUܧ(ꦮy@eI3 z&YB//}6KkfHAlgՉB%@UIU-5QR*cģ  Ljy &B/ e[Z=d_!G> #ku\%nT&Gs爅IE/+qMs΃I:Hcw&يCHt;|N%)CtI{R0:F|ƣ0 ?ϾBgKLGH8E$ljhj"tdL(S/dX*!P{FB(Wo?; `ujmg~7Czǒӯ;U"N;e-a-lX=]0DCaK?F7@h #C.]*r5,&/eU$<%rgUnxW"d>հmoF7z\JdyJVb-6pm*e6?&nƋ|Me9Gh^Lly5p`&J ΛV̍ܙWҼ51/%*i#$K6H+l ԾعHJ|M #n,ϙL;ߎTES8yTOEZ MY^r n,M lZ"]mS|Ƿ3a[eDTftуT&FE(xC-ugX*wutkA&˥t%_URTijb/@h cߝ--ZXSQM!) McALb ,d]>L|>0v1| W@ u%gFǷ4kaM1D5rzceb,<8ޢlLVR)o kaM(ᶈ&ԝM1q$?ˁBu߽ydQV R`& d+A$Zߒk΄ʠh])co {aM c.p5쒲 %(ɫk^P'Js`"n6:+uf.}|Ks\(QF\D6 +Zs|r)mL5mZgoNʶRL5+)̏)qƛHFM @za+yD\uP%XQJ7NPeP_kAWVEڔ}LN%VRDCθe-yh[-2:3M3𲦀qMǞ_b'KxL PK,:-efhlWLטUҮ5+a DBZФa/Bo|Q/ۉjy@uə1-ZXc =Lڭh@LV.8SFRšPLhwpRUL"C6Pb;> {`d*gfF9oZ[qA3_W1Zq[O@`x 3kgΚ5:R"cS*i3-LVQ;ERDm5@̙*p&l FU\p&l 86G_<a]@]M |P'_߾?lUU-|o\_t Fi; }_&|k ?cfz$"tg{2@. ~7A; IlwM6HH' §R?AL3 qN3znqwV*vq;a2HUpa/A]j{?| D&\˳^$8VNY;w50c&jqz%LOWT)rZ-xsV%ifZ<%d>!يjbG\ o>Z ]AB]io9"B-oPh <+ ;٬wWm{>=}b}H&|skjL&7]enoIkaM8 T!= Sޚ2; [2ZXViQV_NJگ)jp;r-L.+Zx0*Q?T#څq]K}m&]944 -mZX *,DAw5[+ ǷT&W krW^GMsJI7ț])qf}|K#ěu]ހA4ty͈-GęZ\'tчSPvcͻ|+.D*t5v`)f<_Ř^E1 endstream endobj 5623 0 obj << /Length 3459 /Filter /FlateDecode >> stream x][s6~`ީx뤩8u줙 MR[TI_P'tptxs[s [O=y#ߡu;߶\_ĺ*O?U]\< bہĦgN_/շN^ݞqB(l/3 W'?a+da|z؎\Y`DmG_ZN~9m|^^^R29VS{EѾ֬(}yK SfU=U"" c.,6ӳ>;qi'e %ǰ80KPI:xe ,a/&ucЊo44^1X`0֤1mfU0ė=i98jX/&VEG`$e/ga]QW¾ʀ*ILGaV0I%qP3&}Mh3#Li -ZԤ ZPuWmyѫ9fPLk_ 相(; GGCn&r1+ I_S̪1!e4}%pbsI -*ԓ~(Gg LZē"U XOX>1,o}3bn3Q%<Ce*U@㻈0~wAѼQY|4/uYL 0Kg|?EMlQfIm(|ߜ7kj.9xn۔ [eM>/>d4k>SJI8uoLMfV.; ѝ/Xd.Jp/(żBdC:ˁ,9|@NCrpYEaXS3hե c(iD1f0\ \Md?.G^ngr8$Lg5o cz88 8((u&Rՙ;u45ͬ3w8rl} @ϜYGU` }s}M7ƬÈ*-ev53ʮ}o\j>lM<.r\>?APu.B&Uq6E#Q&+hВ>ilu+Y:qȺ f t~pUZkqE3)*utFBbppG*I]F1&}M0j3FJreZCo ;$ָfM웲4\S" ^ss }Mh3AcHǚnnӁ.)od*dI}7i,i G"HxYLk6A kLY1G' Uxg$n|vABoK$hf{$ ULxu&51ͬ &b+[~":Zg ^U6b,_gOJǭk_ƀפ 4 ЊxzV(,^¤Vq?[5ZFsv>SwI +\pߋwĹE.a#NeUۗd]E9bP*MeUP9TJmx _8t+\܏ H4Jhӽf,UA-pfV/CnWr꥟Wo޾6~ۦ z<(J2t@T/$!fŠ}MfVE㱋vwrC#W D]J;۪Kx-1]~6庨k7 F=&MzfU!%&Ǝ,ԸL~0vwF6p =#aI>FQ|xu>j?<]p0V2鯷R8vcXUzz! K{6֯\A&a;_Ѝp endstream endobj 5576 0 obj << /Type /ObjStm /N 100 /First 976 /Length 1258 /Filter /FlateDecode >> stream xڥWMk]G ݿ_1FE+4& 46ƛuX1p>水c}pFNӂG" ǚ7X4,d#(@+1llaƤH8,scXyo |9U`ԛH _^*~ٛ IB> H)X2rS s#X1ncc(:-b,l(3aW΍eer C ö4A6%vr v; ^6YQ$aZYW#@B5n}!AjdӎVU$EMHgxByhxIulP4*4ߍ>㫻wU;zyَoNڣ7uƒ?NOX>tsϧ^x]a8cnD[,ƙGbie[,ƙ"b1#^lZ(f3QbpB*nes`| SǗk qgSBBq) q ax ũET$ ɹ,S)G`<-^$w\ Q9d^.0jŪdtbYEMp*EM73EM W3;7%jfVp5Uբ2 ^0EM 8*Ha-j#(ŢR (jި.XEMr#)j͢&91U5V -D,j"6srsΒ4}žN" endstream endobj 5676 0 obj << /Length 3144 /Filter /FlateDecode >> stream x]s۸~_>p佹I.k/ٞ2Zl$RGR}AREJ}99:pZ|X8x pHb *YqX}Jܧr2Tk(bR [7$ax52^O]エV8 A=`xTX/떋h( l(]!EHpJn(‴ʂQI'ͻ7ZBzؕ%PL] fT';鱚>'SV縬a"0, X֮);̷,2yٱag,:꡻fM muV4y2=lxŇ~k%::CP*p2tw6te8᛻kx?I㻯ά4VMa on5y6mrJ* ӲS*WOϰ\-Yu7>M1*su;RYYaJ5Ś́bf_LzeYvJ9iU1+ETYVl̖\#)?ru;YYr6Ph5˫y6i m;]1 g{>=Io< "ޕM66O4f(R ]vUv8BpE 6*9l@˪NsU'F̀K/o-L| Q9~5(7仡]Y w.b8÷aPu&5~.AKYU9t<:y>mCzEQJW#U\ F$~</_f(m Wi9F\'I#ӮxX7 ꫑B'+ޔ5:]pVֆBI9G rYV@cA3i٦ 5#UMBƇ|G>xSߛ1ᬬs c-/pg3},vӬqr'Er>/_nOuji9v=ܗ3MYc Iw46nPDɇ,92g'jɡOT%K/}%tY ø %m{@ꮬ H1AS j_D;ԛryEG)\Uk(crss{'ڪrlb p/oӓ8.!㭞 I=~W~|mRr:&󆌮|Gd*; >Mh@q>뜤Ejirܹrbe!"_Z'` Ąp{}/U^nY<Ʋw1L Ⱦz:Ah^qR(vBk 7/ 3laN3iI7&PWܛ+wtBVj!.e#y^o:6 ]MYcV_.'ޔƠu|'5ƈt]VO^hMIp~5 5iߜ,J|Y/gWtz^c-_?=lɮ^!&P}WsYp5QԷ]MT ~$ͪ6MVEyE)yhAP$e@bbi]m&FA Q[d֪ZvwDz9)Vdڬ+]Վ%(B8*А!z:~2#Nmn7~9E=֗Cֆ"cCIN[>C<7[önzB 89kS{#(F `:rW4w L~q$0KaT/bJ#A8! q Id澋-w-v^N{Ϻ}*G„ CAL*,Ac(G~5Gy ݞdxJB(^Ɖ> iK|xʟX<%<=pVbUQT9u>^p~hfE:eOVu> stream x[[o6~У a֥@6 T[N:v*-wRdYRI6χ!&8y5z~=`d$"IeHr=On/6|9xڶV֒\Qdžɔ*=p}kˈ@+U&#N#nt}"FI_%FG{k/ )5Zd9EF&ɳdъt3,XbId '^WB\OAgnTb<>v~d&(yŋ?jm[!6_O6⺊|_3}‡:~`_F;Jܐu@g F;u@g F;s!F :~3#[8 MwQ½~Z~>Օ;H& ?Sbg/t&_mT: /'?߹O޽x򙻟҇>ϊ|Bx-&j )I>6)l lR'"ϲfC|BgkB c.1*H(Bw *pcL"cPattkBx?9W+509K sxtc}MOP8(H/ YִΌH9 ?Mc"A?n x1W0zjbXRu(F6ʜ !HY .wb_ʹcB@REC!pExݦ5AlE[PM_ư\j&B)JV9v"Tif'`Hʄ20)z?,w~$f8g1Y A芡zO`N :~/#[8v= ^)21 wsC<ҕ^b{f- Ko^|,@G (/ӵ^n J?'ڕx=^0vv:ZSÛwf.2Z-r"a[K87D)9HQ+ynA'(c/Rl;0 K{t&!^ dyR GR >`01vƎlBXӪ( ahՔ 3B5 ȭe ӥ0O lMeZА[2GF8AU*-Θxͪ;`?G09^B[/<-7~6Hӏg(!W:&l92%5.$~۳7ͳralf ~ͩ[btY?P1d eBN Ȟ}i>]mz4\ܺ/!-l~HQX,mO.tJ?z"7i+5~I>PTϒ&pqQ -W'~۔"Ĭ:P:h+C"O{a>܉@ F;CYpΨ:c0̥9zgPHw>?-V?^'Z]^]KןAܶl_#חSxBq;]#.}[n2hI) -U'47sP(%klG^,L֬woA!N/\2(t%bBEY2>K .GaRʱJj"ӡK=V.R+lME:P@i`4 Z?Q1xr)jacո1϶ې" ̂! qH0Q ~ۻ endstream endobj 5753 0 obj << /Length 1967 /Filter /FlateDecode >> stream x\]F}ϯԇ&ъ"ZIJR<ěċ@86vN)/88s̜/^ƨq2Rh'"hXt>.ϳU2O'MdEki8ؾ!j2Ǝj|iĠRjtFsMDt6o ѻ-æĩcqxu,22' bp&#NuQDH}%|c%3U }p.`%y82H2E?+;R@l]@^nbo3ż0#A>;iVNNz1xfSlWhj3p1eslBmkNɨzzɽ g'6.>9YmJPMX0BHBvی8mXPZ/0M](k8v ʈbȢb%s~:ݽ^&+pCSTlQbNl8]\}>Pyw#>^*㈵*B/_<}޴pWbe.LU|L`zsEEme;`V"CS8ld) Fg'6؎qDBiԺ!ǑS0RU|R`R_hB쬸#%$W:sV`T`$LV5"ΪףM[X٧! >5|\H*3 >A[`TGfP`K2Ȩ#lI&5U|$-P{ bl>r0੥oN:^f E2aj9%lWth%\Z>nǷڞ|7#IԆc|c0JKA!M8Qpz28$2P> |^KoEŽ Z# q6J5쭈tw-A+5|`;$4^_حwD9E>qlk0`dzzN`W=lqX޾iNO`38w$#%'9BQǑ.ؒ -W02H2[ad^ IF`d0O8L"m,ld(|gn/ 4m`l(ۜ4t_~.'yN,c e'_lOUtCUg_O:b/WҦ?"A?e ;/k endstream endobj 5673 0 obj << /Type /ObjStm /N 100 /First 977 /Length 1256 /Filter /FlateDecode >> stream xXɎU7WmK- ]$DX$A,y"!:bT1"Q>\ns6[S_o;g#IjRshhS"P!Mޝ2c-p6r$| Rob{a qx' X 2SMQO8rd\Cb$,Nx9bԁm{æ: 8 qTM%mAZnRMv!A-sɠ9bRO 5 5WRe{~{Rdv񧟑=~i?ۋ7ϟ?wS:)!k`nq Gf,j`Z=[ 沛~:EגHm ~ Hk!?I Ӄ~8nvzt~}4O=_y_E{NˮNϯn߼|vN}巧޾m" Rk?ӗؤ3 G?}C^s^Eփ Fm-ba{Q,:㰄cuEq-u\UENkAUvbLܤKͮŪ`.U1bL0t#+qy{L5[jQa^XP j`FŘݻU7J:}bLjZL#o1ĝAx@٣.D`_`lS+Y f1$nnf4 EpLY̻ FW}L?ݪIA{50ݜd3Y<4f&6d^d&CU9\>CLv0b/dK3!LvugՌ<+n"'F!]5bܻV(z.:^Ři? Cnu73fzЋ`] Ţb֋1N{ jW> stream x\]o8}ϯ@ߢ؇43M:m"[$:rƖ/eR)2k.v:归q䷓ܜ`d(T&7Hf,I3fܞϞI9|{3:M-Y3)j@茦y!urqs ѣpB~̠?D2~: F/$!n_CP1@DJ?C܆hњz3!'+ |,l01^osnA1u.z].xmi2  Hכi󲹟)¦AlD"JxBQd^$ #BvLP|{qq Xe4Hֈ #…I›?$ؤo R +/lb{3 w]6"i(0ɆA 5*Ttz^# [_'EF L6$b)Gٲ1%T<^\|`dC"&qGsQf8r H>?d|^ f],g ^ ~C0@CD#kŠ)8'L6du0_E:a9rV9g_8F  L4V lhb@1dC\Jyy7^c'_7-{:)^Vmfž[{[sܥxl]2 S4V ehR@-b&%&#Y+$Hx'>PhdB!)ՖqFG2hGIӡZHj[VggVGTgɼ|15n'gl<,#C9~, KC)E]7)}$^M7ňYx7ɝ?_H_L^=oJ S: aպ\˧vM֒lj) 0M .88=J'7Yh'(fv۞3p'-| A4O^!+hq.6ӎ2sˡfQ]osڅjϻm< !!o^{.b7;v3L'3Z|XC*jCBL41\|`+zpj+QT+v Nh 6cşG+qvV+V~~/KϚoܤX'm̿ش{.S1RU%;!,mFqKԷ`*ZLgoMC\ yT.|.}6eUR?zv&֛]ΐ|wdCSDm[xol=Ζg/k9zɗmdz&:0Z(Aז @]^};7|9%Ĝ;L6d_#Q堻 C#Z8\|`8d}< 1bHfUx鱔ÔG֊|3.>P 0ـUOA,c˾ǀuOIL6`#^+@TCgl4V nhb@1dC=WH{e{$ƏyUӃW>["YPF`<拾.4Lʙo9.vO{ʫIg:ڮO\?MB e@=i:Bd{і\`! J$2{d ~_+QB|`dCHj'w|MMi4lҘ#>@}~O7 d PdZ!J? q!ƻ?8Y+4)i41\|`:I RnEϓW("LMe2lȪ)n x)?6l$7)R|nrh^s^F֊V P4-xP!h+穷'1BMj-.>0 Z1b $I tY-__owz3:#yqYF5t`RL6/X",3̶[|&DZ>}9[fE;8i+ue&eCB06d N:߲᫡M|OE϶ϻ~~ٞd,feU{Vt[MY"I]xIT{,Iq%G}r{8k^~믵ۢ>u.( endstream endobj 5851 0 obj << /Length 1732 /Filter /FlateDecode >> stream xڽ[Ms6Wԑf" 6q$mj/iC̉D$e :"MYa$Z<.Kz zoGf7r/ܛ=')7/l%du^K WҜhi*0P` "b2zt6wP¼h5z |oSI< w>sL_ꏷH=A}9xHK^.NF6~8pV«/"c'D ֶJ"g<"e,o~e?OC8>:=VQ˼5OpꉒH[OD(PwVo[ZZCN`=U2gCN.>|2E.|\v?v=>;}siYϜH;0|aD8^lq3„VN ĸ.a yXĀܝEq!R+{9#oIEvU9E]EȇW4~-PѺLa',,=p )ܦo65dcm|K2)kU錋%T5L:rFEߒ g2tlUE`D<cwR!T$"8\s S BI0Nyr z>pz@}h*RUkxxIS@8U;^WY|2%Sk eJ9 8l~y Jz@,'or]dZ?xo@g_<ߏjp!CsWt-p!.[LYCwxߒ g6dPC7 )Mo䲽]'.7B|gkMZn#qwL[1p-bw߆|g&TԱoɅ3e |K2Ң\b:V3Hv(f8p,ZT%˃ M]rWf[CI=Kl tրp@z,7Y*(|K)k F[a!.'(4owvQw-OZz^S]4C LkNkZiei0sv-u!Z|K2)kU匋%T5LzuFEߒ g6d@~pW vW7(8(/NW* םs}_QUaZ~?(C;g٥˺}]me'QwW/ .:fIBxa1uXwX10{! xCI+Y ˶* "aQ'+ vtx]^f'SO4;H-Õ;,CHEﳿf_0=C0"\|2衖r=ȡ;ImT >OǝnGjZ{t{ƞMBaw}a;͏]NYC.|K2)k5Eߒ g2T D:d8S!CUNvfNz3udǷl7&,M>Nx}1Leh^5>NIٜTI2}AixO!_GWI:yIbRJb1a0d:{R2/y 9}^>O + endstream endobj 5797 0 obj << /Type /ObjStm /N 100 /First 973 /Length 1230 /Filter /FlateDecode >> stream xڥWn\7 +ՈOIEdW Hhkda@`Cvt& IIG6h6ݛZ϶y5 c79I=nBHKDaM5əd%ag ڤDMFCeKډXۚ_y+_$яOEmjĔòM#F (Jkfb1<16 y-g xޜ홼xPb ݘb}駝GEX+1m,D-2XlʑNE!),D3G` Ì8Ѧ$h(#b8a!!ڦc[bmX%Vdw $訕Zy"Px&fM:6"yλXYdaJJb38KdޫR#c`7,MϪW}fqDjM@kBkc_0noe;$?jHޮxƷ8npoWvx{|ߞ#^\z8|o?fǏeb*H;ĻV>gb3 *! 9W&>N.ŽH)}{^$/뺊݊sFF9U=nZ$(bM|w6D*zH'"U0b*Qj*YV*kk ^\$N> stream x\mo_2Pmh^wrm %&N"}i;@~|ZJ)QhAO3ݝ١'?\x=21H*Y"$%ث"4}[.i~fJ-Y3+4Wl=0}9J^ ᦹ.łd#ntH2i_ϓwi wdUiUx9fעbT3i ZF2:3EXDQ80h;V9:DjDu#9tpyؤ͗z%jV5^]>_0Rr3&r7rU?<wU:S߁鼼3:U/hpî8<- r7Ntvpm=otL6dfUN Ӓ0ext@m.jrE6TcwY_[7awA]);>y|dxZ|d 4]|`!Sc6 {br\̐McQNyPuM.>Py0-szUNV*U@˧YQ<[/4#jxp JHpbUX\p V1:2n>8)Y~,]l.jK^ռ;hV=|XXhZ=춣rcQ/n{`?p\W7huE#:C?3@gD#:C;3@gD#:$43@gD#qD@7ٲnCeU e4zu;]cxO>&Eʐ48T{N#w5esFޮv`g!qW8Ɖ۽+,AS=|Xl mgWΈFuR6%=|3d} 2bM3='vP>|,I.Jбu_nV͸M 8ϋ D%RJEL4o9+fsBEIPA0- m>{ *DZQ4׾ яJMaZwW/0bki:L66:ywsеShztza@eu`#NN N܌/xϾdxMҙtsKnY4]|`!:k>|ҙvu_TM>,% XD%::ap(0j@J%Fh-(]N]|dQ b}LyUˡG¾(w|~p(/B(sr4@dCcq&i6=6wZ*_=µÅҼsK/ g !*RqBM]7)B]mtSL6d4_Zdx}󐃸#]|`!r;+V6?V\!U Q $8lC(%Xa Hh+=7ݲ€ܚhGӧL6!!I_w'%L6݊"y|: GSTL6DAI;$e P`>G0+Fsrd0ـ06sVL1]|`фjWZ,3]|`!2/j~U-%]ZM.>Pb0ِ [`\2]xT6/#m7hƒ  L5@6͑1߻p+{Q桟6P0/ fW endstream endobj 5935 0 obj << /Length 2795 /Filter /FlateDecode >> stream x]]o8}ϯcY")j]Gfڴۤ; t@eG[Je)IK4T$5'.ux}`oAbAEp>@"(V׈bβo5@"lZ""6$a|4<|/] g֐o8-2m[N0Ppg6F1o>6CaDL"i|OQ,4L(NrcMic[r7'$Lj'(fiߤeR_} NƇyqkadܱFk&> .l0uzi>scZy(##&>.aJ;Fyti8GQ$gɃ;@㍝1$P5NqȪdizzI~t%3$կF$lȋ$D<,Դ/gM6M"n$>pc-&zuv۵^%y.# J[J&>ANHݫfVQzs3TqDKN9zlCTO-\'4 uaPy(jUrg,7ɲ~&>@.2B1)xIlҼZ[XK*kxWd[᥂*ʑn|NWjx,B¸+-ҫ㾷qK^C9vӱNN>>{}>v#}|jW4M|nI)F,[^W/c{2XLjEu=|:qŸz`^bYu]ٵNz琒\l:.uM&>PPcd4`Gn}俘qGS˄7'o/TPŻO߾CJKgJ~ƨ$jMD",RJ3l]̳rm9/Tzϥâv=!|.IjlGﲒT=K`pұf9\b3ur8CB>ɚ'87L| }ތAu&>`cmΘ75@5uQC(v[N,iN>J'/,#R'K-Om!ҩ46 x(R_=ba%M*,mո%6wgD\&pB]ũ>P~`c]ǎ@(hTkVtqЖ`]:>-M+ro4"M p'>3&)ĥmY.EӼ(Wv-[v{{-Y^9,gl gr5:7/*>vd8'8ndj_ j2e*jucבl{*J>`c6QOv[ GۮQh)B!*-Oؚ@eH XUnLE~IXH#z0'ÍuxUugR-z=K&<6l) #N==K|KrN0>oG:Ʊ$l C|eGcVo@:L^DHlaZ%LcSQo>6>2wqsػ)2=&v=43,> j(\+ :O//.b ׋6{hh3Zgy5NJUi۾d*¶,kXw./9ݡ82 l UI{L]]󢉶CV6 H ʉQn)B9QJUTUI:Y]/vj̛dimdķP7թ7u@uQw|#+l"~ʲVXs֙yl0g m8חvLxt:('?Mٞe]/;Ø#(ckI%K)}>8L@3&L.tס?uh) endstream endobj 5884 0 obj << /Type /ObjStm /N 100 /First 973 /Length 1253 /Filter /FlateDecode >> stream xڥWˎU7߯-X$]$DX$A,F*}{d"uj]ǖk͖[Sh4t5f՘ٍg #Ȥ&7zB MuMF$lΉ0nmzpy@eW ҶJ)@P> stream x]]s6}=BE|t:;iNvk3ٌ(St(NfԠE<_$= '^\=`h"I%RWIye2Q`]k.)R\MCɄJu̾o8pDL+?{0_ei2[{ F\nr#ʄyLΏu{1i{y}!y"B"r9EZtuRbQrkOT `}7lY%=OI&2%Hsպn6lg wqY+~xVewUE<w.>hΠI;D8:l?ӈtEqYST1%W7]W)I"1.>>xY憎܏y~[<_EQ]5-< hm\~ #eM`.>P``cC"ڛeYT+$f Գ]k< &g몹YWf7~Ѷ2\lTT)rS$E -*қy]/av6.M1fyΕB<_xq"%Q 3se$_gl 䟪ֳҁ)a HM0=hO{_EZ66dIVfj'ԦѼ 66d ~Mw_g<im4\| s`cCiʯgYy9ͯq)VOct9ɾ}Ɋr}clu5ɲNԾmAykhvaf^96 :B );~f1;Fl:FD_ L=y.>aSh@Ɔ0("J)MS_RFF66?ASRnsh>v>є }.J8JIQ%e6 Fll1BRѼ 66dQXʾ"%%6FlluD!)T$W()z4@ Q06{&%6EF:K($q|@M C(%kOihԹ@Ǝ'(MW}*s%spkO `G#66`AC¯I=m.>`cCR$8bLO`cCHn W 66D#W jgѤK727<ůA*/%]|ѰqD}n=o/_ח&_/g_>6~X0B ?n>93ȼ|<~+h9b Ou˱X)&SS?z̟w endstream endobj 6063 0 obj << /Length 3263 /Filter /FlateDecode >> stream x[K6m@!n6d,i`` Kt[hI1=﷊Eʒ,8ƞ$be֓e[?nV ǭ,]+r1>)K<ԡu":,B`N½ߺ;T+o?l+-yqd(7z띭ŶY-^~rvYh{VE,H['9_K>o\Wb' U 'n~3VN)+9=U|U9l{%mKRtbD 뼻Ws>whf10|cWfje8 Kn1+qKܛfUmN\V*Hu!J0a4.1L2Gcfcz@<(#BZ|Z4˨y]$B/<-# 5]Rcf{, `cWja/1n4 d"[fke A"=6ȩW6 :@4[8D^(`< ?-,GҤ@:\DlUv KYrRU4 _׊z C9Nta4LۅUZ/>C"X|iɺfwps lO&#~;_ ǜ  W'VM Kc[WeAOE wmhԚ cWBja/&hէ^Z,,!6KNR]4me].ܵ@ ^^^.E^u_g7 OGySnJcẄ́p2T̈́sLcW*fjerLcW*feǃs9,LiW080gN`ZpۼzOl 9>:dҶun2m:|ՈT}P"zFIQ7lZ˽ۤR6>jhf|xo g2q+uNuPbQ7~;'-c[!UCOhZJ+=O+;=Y^uHɋU X[ނVi CL$KR xCjߧD6u 0o + zgvGn}1 bH46 -R#$="-m_9(zݶYq|.iqSUF7P!NȂ) YC2w )@DjsZzȫ,g^I<)[<\VkaZZR֯D0Xar>햴3 )nHu:FߓF{xϣ߯1:۶Ҥ [T>j-`Bhk'Q 5kf-FiRt/>e:IkC8Hz\(B |/E0h& R^ujVROM(`8 8 ⃗n~W&Ǜ5ҤpW|ۮR,) Ɋf,"s0nldՉvt|CxKbt ϕ>$UBneQkwܡ eKb[w[P n:a$HeYvU AlD"6H׀:eߩNdpZEwY?{-a敆(7z+O󌢸B@<=#v&9dF:B!y4PtA<ܕH-O`i! $t܋h0EHSߕB[4yhN9rm e/Xjl|w8QAƒ\͎%rZn]͐ۇd hJ#Ɣ'!UȜG,tNSޱx6i+;U{ݘq/!>y|Tp\ϞW&߰'mGRVN@4282o0p^jl+]-'zNʟَXeY 3 OD yUgg Cދ>i >A f sǽubT#\;T_EכD8pQAЩ3OyW]Q9KIAS'gvi h ձ~w7Q(L(yLA55zY% dRşSk%'L!@'uS_3YiN:wvQla'vX-㑍R=冁0odWjLkG>^wc&px*ylu(.ԯ]{C*윤1TD',}Й9ׂ<TLbz>!U%4nAV ˊMkܦ8AMo'cr|fXihxF=vC"rdu8*OnGul],*E1xA;ò kVg4О5Ab<n@P`%؜H~k0/**>*_ZFb3[b&(!NQ#[!B}8@嫚=,?;eAh.>19F.orͦ8bN&{*ty4Go>9h0wzR/D:B@;a+OjT@;&zPЗK?` endstream endobj 5987 0 obj << /Type /ObjStm /N 100 /First 973 /Length 1710 /Filter /FlateDecode >> stream xYMo7W吜!Yi@@[E:B):}CYGk ξ<gW\$gH4?RP*$CѐKH1əIdĘUL,ACL1&IUM)&j3٩&LX9{&IhJPU`B0D^w!B7u}p 1z+T!TuWVNqAI%RUlPu3M F:P槪HB*%qG%% đӈ8R:o|6(@JUE_q I666`CbǼdyH`#6:RqQ`p%t2$d$d+ HA%Λ-"`XuV!IՉ z.zKX68.jf,NÆ6ZP&EA A"ulb&o,uV#\$1 HeE=Hg丈>8S} rUg>J M9M&Ss?xm'GnKgm`Ga#[kh y 2(F0rfdN3rx̂94seJcK"Vn8ejftd`[CBƐPp6fQ ͠ ͭZ<[.6t\"BxcLzv8nnֻeWEKZΎ96/Oe~cF_ǍY?鞀@جu{ѯY?O/ߛcWFɈB.'7]aپoz"kO|G(;SD_-siKlĢuj#n#F0\#gAQF03Nύ`V60Flh@h1>c 6ccCZ4[anJ)49doSjgs+XlqBFj fxjm`c9i ^HUm 46d|~Co<: GG!7xt~Co:: GG!7~~WF?/&_2uoV}x'NH;!r% t% ޙ ޙ ޚ{\Iw= _f(A뷆h iOp(2PG6Xixf\tGݯ/߃כͻΖo]\=/cx!{mпr&I8ޒt&~w@G|HwEtkWZꢍ>G4uaT/,=&ݢ_Xt}6#|4h.MZ篗ͷ")Z"aD1P)e[2g_g=`\--wq7܋1-Q,i{}^-~6}62rJ6dr58!c?yM3~SMj jWM_Mgo_73=?% '6 (GG͢ ("a#u:h1kvסkoXoV[ ou1lV&pt >|q!Zb /ɽi@ 6^Vzaxa-(X,~N=9 endstream endobj 6101 0 obj << /Length 3281 /Filter /FlateDecode >> stream xڽ]sݿB/P3 $M/%)bM Iw EDX`_.߮../$/6(f D,֋zquHau0Y&^(BԻJ B 'h-b s?.8 e+wHp1<_/~m.`]IH0V15l~%RMCwE]ee=XRnjዕDFV`Ľ]Ǣڌƹ_^ vn)Jvft5]@(>2& gF}# 7ߏ@HF,S+TCeYT?/s}Z}`9.YZo[}mUV =yS[|kywh435dā~}(r5 n&cU>L1fs\RDˢZ!i!f%@"#N5a]YYdP(Ch9ŶԷː{QBK& 煎 ]VN4@Ϻ)lQt!]ߗEinjDy$!YD#U j֍\!  F p٭-vE5fԓ G̩3pE:;w*MSN3π z/ S GŐLy{؃8:zhm̭ҜDT>S,C _FVOV)Jp6QVgjT/ arw?Sg#'P ud||\@ńF9B$B)>.dRsB^L9pdhBtu@@T רah>5qs.&mt'$x*-a6;\jxfڬnE´2M94-KSH\C؊?EgLCCOGLzC qG/ƹ\HH%A"W-l[rrԗ-,1%%>0a;O#- jmg2{x,IPlV#㩡iQ'Nxn:n;!ÏYZ1}.PU`ԠN5UdY1We;R3Eb,9*:`.]HVZUKSfl] fP#n  {[z7TlQ`V[TVcjòDE=;D[4X6p`|>%!KBa$~gA8kFlwʉQxwnyT<]j!It7 O߃ #=F3F[vZCnUGݖ?֔r9@Iӱ zyI:;o87,KO4r5UpZсˡ]S-C!Lـa?5|4'ŷ255xoCQ {BH܂<4o;E pIJn`^m̰?z"€4 hy%2++y!YɧHcd5i B/}_gi^)xtੵ)% ,ŋA&W9gA1HM9{O?R9S', QqhP6{vOI005 ϓ٨>G<Lq[ 3{oa__w黟^}ݻW~PS'}yB=ǍfN\Ĥ>c} 'a endstream endobj 6122 0 obj << /Length 2969 /Filter /FlateDecode >> stream x]]s}[ OH&G2M_o -Q2'zN{rHp6OIs .ѷ7y q$qm#XKQt>,XMvw5jݚr  m(]b.Ru绛nj#tzh6wTmX?n6t! ! -igpIo[|iϾU``l r207b{c{*gslO<KǨ;&۝ܧE5lҘuR{CnѶGI$fe?[ _2YZۏZ=VYi t>}a$]@4Hb}!5D# QF۾pɻ`[[Źt<+m]d K0eMuX7ϱ,c_ܬ 5Qj@<4?)9Lk "t/:C@ _3<KPzXh}/8SE{zÛwp gÌXmꫝSsos <5Qgus%{}!BXhs~oo9CWls?MqԮyֶN6U'4|X쒬xHȳscE wT3 ${*?Yk J41\|Ocx3 >%VbxT46$|{,Yk lr`p=Mv1MIb.@*y^%2F& 9sc0i2PßC />ת %s0o3Ƥ21!vvpüqq =u+ʹ|}H7rUFgc{z/Yk [ =MvFMru5kD+;\|Ow#kADdhĀSbS:?櫉>Idd[ӶQ3T'{M.7M ,Bb|kv6ie0:&;G. :PcȕV? Q*+r r S_yqm6X_P#l)`d1Id4791 ]b(祖 F|?:*>:v=üM̓9؁o(ʳ[=mMv9l[yw%\]n$_Pf2`t=Mvc sW^#5n07n FC[=MvPOO/\q4 gOi5|d[\^/+hdG8W_$$B `d1IS479l|Sz^dE]4C=,Uk2nE~'hLr瀏i YrR/?a =ț86qTeohyb/^IWIDdHE?D$7V~=3>X9QKuN nbMb^7OY0!ͧ#wG0^@{FR0l3i osƕ~TٔWH;YI9@,>SdhA@)z+56Ӓ, c {|`rw=Mvܕ\X r+M^l6u79b0L‹q4-jDfc$]|O5#k71\|OcxPNaD_;Em@cyY즵,ҧUsS,@"ȟ’^ Vݵ^=zǞ3Zjҩ^_یj@Z ׮F~s? Nrqدպr'=q" ]5BLO͔9-Bo ')jQ"O&v]e&|a>s%̓./`f.1Ιb 8k`jV<{zΗ⑘! t19^ v-jD_P[œx,pҪ555"隂%b1Rg^PD&c-JP)7۫M lRmTvnb u!z!o9 SVg*-~[V50qu=ݴz64CPY:'D]ct7a>&Bkd<$9hJB憬:54.]OYplURoJQMlP_9 Kzm!1zz/֭NJC\UiJoR[wimMSOYʿ&})2]WVU҆}mbPxX yn h[/P58f;Ł$0]4qŨk? kt\  3.v Muq @2{:q 7ݮڧY)_3FLm3۞NN11uվçELRkruf.%<&tk7&FUSIϨq<љR`p@kFȵ1Ңǒ-,^2R4ugwPҟYK,M%̵&ϊݗe&HM1SoUR{̛c nU#sA sXܜ!U6U1ORX;'ng4>z6;BUHaoÊK9&P$*䥚 A<`gY"YݝFʯ71 @|doNEޛg%,.HB._MuFv"r})u퉱@@5?6 endstream endobj 6085 0 obj << /Type /ObjStm /N 100 /First 977 /Length 1761 /Filter /FlateDecode >> stream xY]oTG }ϯ3SEHR[tШ6dz(M5k{l?6TC lu5ƩrepJ$; q -noѠ8B%{KA(8Rhx0(CHr5*lXFrbq|m8.`!wD)M`9L<$7* pk1 <+ \DIA!6Pmz`e6y੝ k6(x#y ^%eM2BC#HCiTV$ ^48$AXIHAE 4xQA@GW-C:Zb k0M#\K̈@#;݌\`) ;cRZfј1ɍU%Ht:+Y؝$p|moWU GH:<ӓGaz6J3/;C0_Ϭ 3=-W٦ w))ԄbGw%oBo:5h%h[b [p-o eKl%kGVLj$M?Nx@GvܖK\uSlyVXCioohgb:~ys~4}6Ζĸ\>ӮޢX96;&zCDW3X7M>*܅Z/e,8:.E4OYpYc V]Wӝ%2%*M ʨ_ɬ aJC拍a7V,js0| ߽8_ Ws^l'Ii(pӌ9.`&Ù֛=6⛉ /B#Q-*f/7x}lZ֫|5?`?=P*fьH0$cBΆ(b Ѯi8htqE0K{2b홃Y>6lAP|#ڞ2ٵhƎ-Z"+Vǖ֢-"u!gv؄f儶 خC I_N;H|l>`N0PiȾLgnl:I"S0wNN0uZcRg'clN0g&ŋE:rrm{1֮vJC "AkEBm>Aj13_frl5ߌEia>Tm'ϜPSvLΠlK5Y**3&M3&6IAlټU'gLOΘb8qD4EosDJƈ[1TiΘHBggL gLOΘpcqQ>0(X33*gH839C竓? endstream endobj 6175 0 obj << /Length 2776 /Filter /FlateDecode >> stream x][s۸~܉\ `e3ݴ]O_ -Q&PN{rJr!ݝD ~xsn 3p۫g"95ˤ6dM.?2Sulk.)R\!J5y>n>^ g̥Ldջ8aĵʞL(ϫ\6FZ I3{u֔,{>erܫJz) \jY6qw7yd-z7ho hR0i Uf.̦fX6@ kO}#LS4<͑taF;lv #L3c_Nhњi5ьhmea^>N W& U=>0GI&L6F}4{(.ꢙOb=:i*l|lpZ"}UmCj E/I(Zٕr@ƨabRF3^7wUi2!||`1R},U=RCPn_0Z*d@]dct1b$6Bմ)?m;]j|\YL(L21+L6KAL7ظi5Xe9+=-(>>P0Q(F1o ޾51W\@B슲d@ dc$q3lw\oڥ xwNw7oݷwzCUuLG7ruU2c@c@ɞd$kI. i|n9߭|ס,+dɌ& 8'/XnԏTq=m)/`?=bx'rޒ .NƉ|?kj'`uG1W&(QP''Gc[J/GXO3=S9o92Cf2ubu# pvC!>7Tɢ^k*&O~E&-]kjeukߔ"<u^VYv)Fؤϛr-W. ywMdپr˪5ں?Jajpfc B,~m'UY˹yon%$WLɉqe9o ^.SԌK|X V&aM*zLc(\Lmdz639h 6UG#dcd}s~`Y3,P[dD#L61)Egwvy_ FiyN)QnJώ|Bؙ˫n?rOjQ&ݜ(` qnj|tj06EbSa:[L7}9]-~ߥg57˙ f׋ve1{ki 2trAnw 8٘y ]/J1=*8mztqɮTs)_Q~r$H>Яd#*z]lzճ]Ӕ.ԫCS} )Dj}!ݜ@2S@[d ޏWE: rK=MJe `(f ,>e.n"+4/-zV ڬت]op|n'YX5.CI!'(R_\<ސb8K9{89hfBt&4J|>>0dCOI3Pf['XyΊ\!N%"s1t񁺀$E&&w_PlZY~G u>Tx@nV'Y@KF7vSɌ&uCXd$~uuE>$vgK=TWf"[_rhO7=93l3c˓;s)ܙOu Yid9'4jDXe4gf:{(/,NwrjTn3<5K$w#d~J?ϵ.}A& AkgE`=ÿB{Y|;SR_Άa㑧& ǯ  0٘nC(ĒvV馩6D:#|nrJDKeed6}Ǟ ؍ydd1󥲅3jD> stream x\s8`oVGѷ`6[;]5ɭg*ElPcpz'8OzOO&n"XF J$:ɄE*"*{Vo?*adz4W\v xq]O[7xzC`U&o8Z~0I}kG"A0L67(V_>RfHa)#)SID$h}һ !NiIlCb5WB\NAP;߷׫MMNbXS݌24npې߆+Lp\7س{O^:ʎy \>=z^݃G%Raސ'0a)7fY_y$2^%@P,ڤ?Pަze/e>.-$E 'C ETI۫Ivx gZmf[Q lHߓevQ,`1`W& .MfuT.0qld(09p5$ R- p\S<522Dӫ!}O;EG0OS"ID 7,}jR$rPY<Q!CFr*ڷ/fnt) lH( }?fk"%# AEPIiuhEB$8\V;7o.|Ȅ&da;b֑x90XB# `#x [4yBY>_z&0c_&G8WFo.($,,)AQ3w|09``b6vK `u|/+ HaUv\ۍ˶.+ڶ:e7Lywq|Z\疣ӪJju4}G=%p}Oa(G= OM^u{zک;4;*bWٲ)%XA{+`USLu\Ѥ9h?vmZݒx1բ@=hcgn_MW| EOzoXȊS-oR,PkTMB 3j;5 WޔF˩"xAYwTT{ V@23avK5~|{Ηݐt[g>Ёw7y n b>vDO<>uKE8(pC@D7^ǫ1Re\ǥCsunNf8 t RXA8nnaVu6 e-vWCV7,mk48"\ ;g:8ZWɅ%;+H. EDܰ~גmiڥ ҇X}Ou ,m`{.7XR9FaHt/1A-N##KF=23%/K#%3 b$E{ i0f1Mmf{.7X%{g&_^9iGHť CRKa5S IҦh;jPnN[Z&)'ӆnU^a!ho*y|R_bXL)K'u?>ҼPc#}U*K ǧՎI]'}vҢ{R-"?zE6ÊHz\Xr"IVUmOWN7mMJ}&\I =#: 3"UY'mQ۬j.9 1?<ƢLˁ|DN6(rlrr2P+wp5}OkбޣcG'w>#n@{ے? Wg"\EoDS85%*z# r1z ޖ0Ц{ې.uRZ b #r lDSS L#~Eiu_3]䨷EmkεIKfJMU$Cy8REXe(i{GyPu؛xݲ*KwM74=Lu}ח(>-%c*,ɚ@49N/9e F=-7XKCf&673oBꫛqt䝂qr vT a*A j+"\h)?]Lj endstream endobj 6171 0 obj << /Type /ObjStm /N 100 /First 980 /Length 1361 /Filter /FlateDecode >> stream xڝWn\7 Wh.+I -AE[ F O1v{I 'Y:s,R<kdJ2Da_D,nD͑VR $T K6l&ՑZ:^RwuJNaaD@X:1D-%;6$C5( (mb5Clbeb:1С1O7úbx.ĵGaGG(1&f 8op,dFR%f-d VG,Oy%Su`jR&ưdbk ,MUyb}ĺk91h1N >N >| qHv}bpqjVOEk2@a? ,u(53Dx +cC8 glms e veb^W Ƀ݇ $T'+r^: F/G_Q>18UXcbDuUQ "}buCOA "ӉjkKi XQG ɤwڜl<^HjW͓'_'[͸!. HNL#ɣg8-tw{NNrJ;߰6j qZ q~W{Nl.r|Ogiy4-oCok.nv{{A7˫r{w#u{u}l!t+P.$YAO6=;4k Y^{?׿\߾,v~(O3 Bw3$*Y9==wov }w{y{q{OcaW(Wd7Hk н(Y))q)Hf3Fƕ(Ar[YlexArkPv1IĔQMA.:k̔y5ÛX9FV4*]mk޲jPm{l-zT%[tcg&?AMŕ&f%{j6TZԉ\JPL DCDP͘QcdF#|5k0,5@h2JA;4#9|583\(xEj;(`m} ٘_Q1E3DJ,AI=( URad$T8k J2jVi811eɽgr[&Gy8a.8ѹ3ū#s*\J>6ūcs\Jֱĭ;ΘH)1:dArL53C j@Ԡ GPm54H:sT͆ jx$i ^8@&-J]=x>n~ܞ1`*>~ # 7 endstream endobj 6289 0 obj << /Length 3835 /Filter /FlateDecode >> stream xڵْ6_T8Rqjv+&[6H )d/e;`h4}~~zg7/U xvqgzdMnvo*X#I 5 #DeM(g?}p`os&KWy\Y}Xy˳P+Kl6ߪ 3Uh[QU^_EziNn[' -m[Te~('&Ұr3}pJ(5^8[ͮ.>YƁI2twv۶4 ee0阈 u`mO9Y¼qظĝcu<0L+e׮FNv.ژ0\oXGֱkZnݻ1lڊڇdN MFVZ خD҂ _ÕѺ#,4D ՞h=.I'*(L|Ý88n{)F#1`6ű8Ba0M[O'F^gA/I,`W%?@ }l4C#HLP{1 "Q?v!] q'[T KaI@w>Aú}n5ϧtv'fa6N0_S~wdCᩓ Zw%C@P) @HpK&^X`C8},rϗG 2u`x,AP߄f*"eVQAP~2N-C'АZO*DZNdK&,ʾUW߯OdDn|xtx|P]޶SMj{KTe')W3gEAd3Gq`C5'i4PY2XY4w&I ,YQ*"R b81m5ֲ|r7z̅+l  2t 9R"9)x2 ==_P=uj  1c8go,<~2< !Q|p\LZ:F:*F,(/GHwlөQ VRpBNb cߔf}74\kgԟȂiȩE fUrtt龠`JYO^HY(AFA7S 1_;W b\a1>@Iχan5CpSc$F\s׋qBvH6 Tϖ7eLʟLK HU@Fp )a!@b4&N+kҺ E)ϓ8V5f7f+&ހ*5RpPە`\ԕ'(_+!r/,T%zx1 ͧěsQ6o5~'bLXf( Lˌ%ssͶT5Mgg59ć\(,%}xy Ȼv Ś6ZZ2%6Ȓ\{L@,-_P)6]u]y*o{"U"g< R8y L{Qn^:GꚴPZ_=(榓0\ܱ[Kf^ouf <9ǜXI"qlt^+pržB$G:"N@l3θ/\cčst#Ǔ1Q4j'20!dǷ)> lZ&;Bp4 l [%-UISJ} ]} G#ٌW:5i*ozQ:[uMZ>$Q9XQj4K̆)/:9'B'U}SRh|aޏ̛rPWe 5bCW4Hp6$& '!>^!ݩepj ᧮:Nȏs1PCs(|X}7ޕɹ鬏Š a -Gt}; ['њz'QF8V~.!>cM3=Ҝ@NnLߢuD91rO4?Mgb`~0UDt6֗l5,LflxMGlT,k{msBHfi/-(?oWpU֧}-^,}#GmOY\RA92:2h2Y gҙ^;ywyfZeY#4h3?ʰQC!KFwqfRDa~(fJ\0B}U NW7hW+o?]/V3d5 kW8& jIJ7q W1} XcTIUWJšU}O2) zt,}hzp 8@('*i0̔(_Gw tws!d$mhQn݀J eF!hzqbj/rA]q_VHyfG0f=r8Kz}uJ0¢Sw{ۊC]&+gj݄?Yo;~/V4|,{9sCF-Ϥ4W$?YPGi ʅ(RPp$84@!2--d^/Fzˌ\_cyLwi`m@3?=AE`$%-U%=}>UE@)aSI*_}^U/_;Bm͒:Q\,Xgܾz_iq4񈧾pE|'㿪DykB| AY$ 8pV/8vkuO'a?.'FgǞg _{6^8B #8O%uNcz:o2ܜ|2ZY<49!E9~|$ZΟ ?)+/sFィғA'u3x PD> .iȼd~3,ꞁAUUJÇ-D7Q )L1 endstream endobj 6303 0 obj << /Length 3022 /Filter /FlateDecode >> stream xڽkoD K2E[&nlE\Il$R%3ߙYD;NrCy֎oϞ:JDxºXE[Qkֻ b/;b-|D Z(^<7Hog.r,X9|r ;`c{޺9{{0]; j,18F3ؐPP47䎠vt[;wECgxPǶQ4u9 ӒMj#nG䰪6/6h7K/\tX^ ) ;Jx'rp/j&E#gQ$\y#QGD@- vͮP2%V5D%7eYY;ZB5{RlciqlmӖ}Fv{ye0f,F`&+<eNǺ io-Q54XVGw{o%߹fr`4Ij"ny)А;`3Qج <%46u7hYVN($`!xq3&7{F Ϸ}(ݱ; ={ L}745c@ TK7^4_.z_̓bD7@6cpvWhCX喆pe gjαQ8 B/X V{aS[q1$CB|5k@I`л9@Eh0Z %Ы q2}|OasZ$i/3rW/b62 "^ VJc$ /@0!'@H `m2JJtt>RÇCկ1̹ik?z@ Bv-7L% \k& nICGxndQ-n*peОR96WkkީdiVQ] ?`~4&15~Qgްaslhp@ޢ.H1_ZvPJpN-xF kΑE9S)%Gü@bzahI2N`NAq;9G!l !Y` DQRiT&_oeGPCu lϤL囪>h̚Ѓ`a`PiI0 LO{kXb W쉘mR#6ѷ30 21 HdZLVA2I:%/OtTKel^& ʠ98n|\5] VYj}Aڧ]mq1>Po 1dQ,^HuLE O=?#Hgz  ԰:NVb`[SnWHƇ&ė6 ,(g^~h^01Gxjt>-v";]7@ÃwsW4Il_^IKVe7 mԭa$5^Wv*E@ +m ۝aӾzEM>Nfe2KB_'C䈧@31h}߭GiLPzUL:bDXt)esۑ@vlȗ.=7<;fة_=lj[Ssptr ^efD1$ac72㛑5M@^l=ۍM_xe uS˫.?,'A[,w? acw 㘲:Ve(ܶ=B)Yd>rSȏC0v36o JBSlTAzqmINiӕ/dfp3E6>V״F{t{Q `f ۍoy^rΉI?/տt/+䯠j󑇣)]]Wm~ܙʲ:2?l|ًր 'Om$]ߛW+jQi sH?i8K>z a9"dV}18AɇKTXOw~<5}q>+7Wص8Gz(BP`'(/ i{CMm}Ҟ],K ̤鲒Th͈mQg@$aBgiW3WslM`v5S&@q=U8uOG ]0 C;r:/žk;a󏗗Y%i La|Uhj5ڤ(Q*4}G@Ŷh-.hqR(4 }ZҙN2OCN}KKʤNshM*wKl ҸR% X~De\5p I)0NVRhv(1]HD#Kq__uI]L\* ]O[8=fT@Z fUa+$zbqiK?T "Qj'GipgRo%umheoytAUk+V3U%Of_Z x3YLAκᑾi3?AlZyUyډa'? `C;Rчq_iuzfk80`"p xGRΑjf׀jE.DSj&esee3WKqu5 endstream endobj 6324 0 obj << /Length 3081 /Filter /FlateDecode >> stream xko6;hE= n&8mah%WgIaoCJ+֏8/+.9"glҲӣΏ^~mߊX;u<Sʼn,4?}n nxtp>܍pћߎ8@V³_m+,Qh(C>dqD/)*4gۋu~xc-įK@dȢkVs9AϑJXBp_#Eqǫ"k_lώqĺ%,N2|oE"qY$V]EWgzR{uw[hLq+OH/p_֒ yN `ю8G@*KOQ ~7mV%zL۳Sv̼DYLp]`K@"Ole䫼[BaVꚼ,ґPZ1nr;^[d=VU HC΄AH?u~ ?`~ t]% LƯe{㮘w ±)pB5%M6 NA,K[<}90D(=DqM6e\?h .z9*Xji`*:F44:iݘC!9\R,=wgUuXwUB X Mɀ/s]t}g=6jV4vUdFl1EGS,vN <{b -p"8,DcL:AHH(dE^ pe֏A7!ܑEq\&|ͷQQqQ':+c7'S5 t/vy ]8"l@M'$B*zۍV)o⨤JOe};&Ywkb A;+{Ee={w[Luv m2"nduψ֭4:xzv ۉ,woywoC7,[+89q İ$Mh^*¡ŒYFuԩAwq{ؖހ#5|ulÙA @z7L3Mxw~5 !&JvEvӏ}!4zOi|U4rĮy0?l5 V:v{(o9, #άnD>B6߻_D̉Ys~*~p>lp~vo+>He5N6N/<  .x KŕǓ7f]wNWԌ"|&l)spL2bWY}m-!Zul _."$u:8R9{{-u3>P0`n>\gS Ӊ}LJ\?_տ:<b|7.NŇw_~gan!ܽzre8? 60=@<~Exv6B:9wdb@}ߝ3k09/?P3*/)>FÕ N>CYϧ"XDϦOSߧQp Է]i ato#N`jwoWH}쪹 .y_˸keVf3wmMM> oE6\ W/&sV*ˠ; :lhMދuM/";y?3A@|0t %w8\uڸDVk]Wȑ\2ER/ 0wKi]Sϳ=q']~8<'ӋjKw﹧nӝ< Ekyf䡥Κvf\n6Y5`p9sxÞ3p8aYg ?N~*nu;6PSk>&ȒSaP ߟ.2\&o:ҙJ@BE8.yvLTN Lj\GWpsۥ3SKf'7z 01͗?S N)4T)fOOC8%ȪgRC{!wo1JSf-l?K;gN6 STZ7l3b-P]G}E0sKL7<˪ .P*5v Q٘a3rg@sWzq3zBd(R/e\@uf"͛ivٻHǞ=PBYnl C}Åa-Sڔ*Ql>־p68HL\?a%zsuLeҕtMݩaY44t[,P!SM@> stream xڭr8P]+ztL2)V*)bn5"oGGvlgO@xw^z͇0ȼ/(n^Y{]/m-jorbNv'; fä^G|]W* `kze};o^'E[K _W,~'. "!~QǣaQ`srH]!_HW0 l\4GYoRj(Kai9Y ҀUfhB~֩mAjq<"p8s'p|4ZS{y{ıؘ^4ݫV0^{)F*%&hN(B5<xHln04EAÑdinZBۏbYCH) g$Z`6L7w5hwii5AKF$5SF&Z /en=hY8ϾFQF8`npXIX3@8Pа0B򡓼tc;G 7c$ }:/s" ( jL_3uiXT=TF44Af2 |CA=okZCoZ-E{;YFM HYT`t8:d9\_,AVJyl.hDoT9TZZsGF}Pfo4> ~OCpZbEEȘ[^LY$Н5Y]GVf0E5u;4L EEإ;as,]mڞAZ]#/DVΪ?/ǀRڈ ˺=Yk2=ywTa&5 d$pKKC0KȜ i4tFCr5R]ߖ0Cb!VIBizNjq- X^e!"߰͊J4SMKpZ( Bn?tޔNv0trvC1^A 3(F5KJԿ<7y*GZⰭk?:G/D iPEUkfDk=엎>ڀk d;'wl /$)}+߱XRyDv5~8j@C8Glc?l P{Ikin1bCT# 0 F8e#$Ӯ+كCsl"OA`\=.ep.`^U/+0vLXt~wƺ~"s(Ɨ?Ej *ݸa0RizeևejhaqžZ^?~Vhf[YNm\~ 5] lri |pL0 H\v8ș`) ^Wr`EPj+Y;{3!C⽺Y7TTJ[{Z#>^ƒkE5tP?_A.hq æ^R`C|rS 'z&^0Cm%̼Ly,#j_AWeI@Gb ,[$M]4dY,L(vF͋+~^lO<"=dD)s[Z$ ?a&4kwS?ϲ؇ WW!4Cv{jkv|twe:萵kK[)ֽ$EIQ>\zփUW:1@L$Jq1[LDp&I aUjaey ߥ6bnu0>p F3}ŀ]Կ%|"!A[{C,+WZ{8*Sn]vy,\c( ]W w7W6Em("H^a endstream endobj 6275 0 obj << /Type /ObjStm /N 100 /First 981 /Length 2232 /Filter /FlateDecode >> stream xZo[_!:Dct;^`[q3κG'KS7SoC]")~)91c5{Ύ!jb4Lsc .QR\D!H0X)MNb*~S>Xꈶ/̉DXFGž5谁>#'AҷL[HoAŶVP.dPq)U($|T!U bE!mpEi 98 %R.fX@F]VR&)DM8D U'R$v3oeV_jFeykZ@Fb8(6T?L2┥8P6K3:d8ppQbR nN/-(њ]!V 1+ Jd=ĕU/ (V=J"x` ULf f"@`+PpFf)LC8d- 1RP\&@\ONoK\37Nps V]\_^:e+ܸq I\|cIc{#GLة8.ZŧK ]p#bjp^컧XG(7e =P#i|owa>mK7S7q7"j5ě-6kdx6[/Wz |>j{L|k{~['#v@ #@#G -}wdj:Lj5^~ ub޾}ߠ\]|&`Mc5x | hb5ψy*?$nMgFuD>Ԡg5< SI {b]X:Wgfެl{eT [LxN%HH(4yՐ}GBZ%r7G#8Y *A˯ȱ_^JfZ./fj>}_ 8%-# `ƣ@éY%S)mj>}m]+| )#Nb8Ŭ>ۦT}'7ܤߎ#&dJV4g^KBw>_f_|}$|.Q+  3\^2YPFjAG)Р@MNղN@uԞVgx;굅\Q09=cj^B ׀G1jڼ^X\ FB1/!>\{E+tmHONp=lsNXc[k#4~0[CFOZ#N(0w FpVQNCW(0$xJ +! 7"\s%܌d Fo`,Լh.VʍXV߶E%X>&3_: z Vx6x%:OClW)YJ'qdt  endstream endobj 6382 0 obj << /Length1 1428 /Length2 5932 /Length3 0 /Length 6897 /Filter /FlateDecode >> stream xڍwT}?RP i7FtwH66K.%U[JIARiPQ:"vh}[q(#DK$~X 76sMA@o1 /q`KoK\DܯUgHNIJ!  R(I}u{N[O"YSIr#Zӄ ^7uB Zʋ3ohk.K0QbuDAu]C@W|wo4}ǫ@߸Cq=j̧\S乑ռ|?`yik_bMgDhg!=zQ%0EV׭5oOCh}U',D?9>4n`W0~igOPƿʓ2tqeMZYI:7*N n H-5$Z|=I(d C4aj7=&XM5,"Z徰[`*{Ahr2a4Jȕt528Y1Ŏ]XbG;LoPM$ i:&P<}E|II' „w wePxxcO%[ !{˃KJ~—^|h(Iy~!'m˅b@*[O?en;ng_j:|Sa7ϟ;zwv:ҥڬ5] apb>ϦVW#Z j~ߨ:$]jR]v[T| miyoq)u'hf rIViIrbRTxxq9tI׶Wv1p*Ror\BV? PsXG\sl} T ; ]GMIs-j*zѨLd- ﵪlL^D ,-1Sfܤʝ,kӁjd$NH-y2ހ>$ ^9o]@ o42թJ-ctxCj徹x8Z7cmCvkQ#(w+D>amϻˬ܈c>P&GЏ_r_D oz-n-SP j݉)"dh!̝q=xfd Vu_ZsɯrY2`ٓx1B)q3W5},a4fl_`E3`U4tA*-_ɏB IԦFҐÎTHsfb\EKy$w/.>@X!(YG1Nf&wcy:VtdKU}j>Ҽxn"D~DE=<9w{wa2l,U6JLDZbH , '_EӖkW/A(9SYO^ӉpSd#AIz'Òx ]_Bb7Z|sR„d鸎ӊUeK阸g) 2on,cO;¸մԵbq$a9)ƭc%4}%$D{iÎ?nN bL[NIno=ʩO: 9Sd:vy%?GVNgN!c =^lh x$*'Vz*LVrRyjPq 9yv}~@hd'z]{M=) >ޘW$3WķMD޵eCvWkK]RY|V޷mic6SYiA}+ACi9|"LIb {})͟r(=״rEUR@s@_ڔGZ\dDiHܭzpvjV#p$faVee!a2Nw}v47E@[ךW;.DQ<(y6]clV z1% 5NKuf!g(@maXFV"e}O <0/i*U׷wO@t"jngZ1$sWg)Jpsˈ 7n4[k_ )}Rb|se jiH܁ꁷH\(~hݨ.eM. qC6Xʏy``T}9Wa(!Rvy]fޜ}<6=1WъGK2TPV<oCnR> Q㛰_byOOKMǸ7kbh0mf^}ؖ B>}2 s5D?jVF\҄4SM8ujjTw]U̻<_ft+Z*ZI/bbcLKh-UվlrH)LRY]fu= 8^džx_QS*kLTqh)W'oTʖ~8"sM{kfGOcM)ًꯟ}uִۃpJqnؚ_.H\V̳5~唞$F15hOcnER+b&%V\Z] cdX:%]s N7.? * MJ>q=]\JDe ^~ls&}zFWw#knIgٍȏJ!גkԨGnH^xlKΑc^.I\u{y;&?VBY(MӛNR߰={;CN*nC{- ^"w)`آS_0@M?^-FG?__<8S9/ܸu4Vbȇڣ=Y]tm9<lqݘp~.T^`oƷ]lK K鍋aiV)xؽ|qZ{-B R\ 2͋3NT{zkT i$/k̎1Oq\]knt4BtvZ]ū7+{I@^.QmM%lZ,Y7Ȥs F5- P)UNrgLܝw!?}Q_1Ŵrm*w@כ󪏗Jx;t?SmU ]ڙEߍI\o+hYQ2 %{)%ogMz-nW $uܫ{ (ti& Q}9R]q]{9OV)堇I9 9ႜ35'H4yC+#\w*-RFA_'_e[ =N݁}L ry[HQ'{W4vRDM^Ph)@w"R6lxk9Tٯ5ޖVH.s3KRL.J+(ZVxCnp8zݢF<4 rOm?OB":Y=J+x/LGRR%DXiiwnnj 0= A窦\$S,GZ+\-7=rݜ 4;™?44|%FwJғ-; ȋVж5Lm7?+2aկQO.R+{]7_eRK-qY`(%N{XmLJ,8V4\Ce/$E+\ӣ#ީ6%J' 1{R烠@Nް"Q3 ®v lt%{f=ǣ%RBM#r(1fUm+o5+<lL [E/f 40' s߫V"At3-<V^6:kp띎k:mbBh2y̑Wa/#׷oѥk~;˓eƖ1PwhjLz :c-xخ25Us9.FˢLRI$xZ B꜒f95*qÊXFKkc39exW3zeKWOx[?ېfg endstream endobj 6384 0 obj << /Length1 1406 /Length2 5979 /Length3 0 /Length 6938 /Filter /FlateDecode >> stream xڍxTS6ҤW{I B$t^7A)QtA4i_xZ߷~gywڜl&H'z&V" D89Mah8o;9 C"dqDcljh Px1@DBFDRDA 鿁H/@ wSsqEc} yiiIဲ vDzhW" 0)x\hOaa___!GEW]c q~Q=  q0_$08 A0!gh_`ݿDDOD0`G0!\(  4t~h G!1>0{뎀a DP0/¿`Yᬊ (_SyAs\w C8Cp6CyC`0&\ h@$-!!.@?f @O'ЀàQ !HDpр wvka'~}ugQ37w5ULM PSE J @DDD_'7VCG؟GFm HEsz ?c >goy~+*ޑ7;z={1L⿡Z o63#En ne4`~gCn"Q_L_>1e]d:t5?F8(UgoB$`8PѯƊ˜(/Er#= 3uC ~0,,^Wps oe;.j VQ.~='7GWEO1}URXW9,vdp|N9Ո׆;b2JWlҫnԖe1 XqG'Qzd{jM\a?%t&_IyUC:'Tw GӆiR۪-`5鈓W#1Hfˮܽo(% :o=Ʌ3!EݚJbdŦoMu dCgI.J~$*) 4yxMS2y oRE t]*oZR.U%疋T~SU޿[Musrc5<.g:dk.$3/NqF4e#5-ilu;OZ z_C[N؜n@I=%-D/K:8Ir~zalqTӖ<}+c=Ϊn.SB/O&c$@yR/A$t|Wd-Dz< 1h[AVSm0<Ħ}#̳[7SGX=sj٣_65*8R~4- 'kl˓?HTG#̑| ?)6ff7ȏS\^%3nxj|n+=錒@h>Y;%m}nh]ݘ㻐KU=>?dP3^5b">,2y¦Mfz'{|s>o EPdJivbqRhߨ<&̀7$9q40R"811t'0fҎB݉FI`NΚJ\ŋB([y~S%[0TzAwk: (͙i >c#$cȆ]dG[\ GR6ȗ)kkvl$ث a]&ŲۙvX&qDG9*K%>u'9 QSgUTxc!SJE3Yra׮㞈$UX]9Qߪw C=U'ۊGNbxz+DOX^ <׍)&>Ƴ6/ΗeY=>,IZi joׁt7}ICHyNAel YceƆz;ܕ~k~̙oQ(0%)8f1ahT%C.ċDqz6>OWMλB .3:ʊQNrTjQ]1rO4LVM*Kɜ7XRDXED[4[טV nqo\_1Y$a+_^}J'ہyD g^}MoN$ؿ*(=yч3" fpқg 8iz{o2p. M;>[H mER^$dml~Y׬K@-krWyzne6D~ز0gve ٷUgK |ʼz/ycg@;-KJzB3lo2GRYWSa9糗8Bqb*WRkPg ز.3{,O:1M9C;W÷fӋd`}Zyqp:qqִ3/'eIw|;5XM J]h/e<[x#Sf Â.&bmrT$ol1x* rP:K9<yЎF%#p($ m- !ve!5 }٘<:lRoX i<"VfDӣb~rPZ6M聭"P]{ΞL\LevJF'ծ{&GXW^,OnƏg)M<yjX`dHd:# /}>w67|O; ;YY;!\6~uJwc9pO^B讱vU oK(-,< v)si{<,|XG&ˈ8'ywr$e]B僟Mepgڶ1tzd!-&%Ze- rg*쒘R/JXdk7/ɭ>d=J7ZI#y|in))\i==*7?K|AO-0%=x&O!m⮳V!twiO/X!gPVja/.zj" Xp}z7ݓ )ޏ|{\ކYzzD͍$}ZFTW6ZtQށsO*`~EaX.e$P[cKF1gbf0$uU)Pc nq^VRՅ=jY쀹6Wά[%)]-yq-F/YShnLgi~uɆC <ۣ_ ;&є93?ŽƳ::aQ7,PDޜw3$^;zž%]% a|` DV(٠*][ oDAݟExoX9^8 J m5BB _ N7_c!亁c_tCxӱ[c+*7u>5ȏK []o3KGR)^v y/"z.CTߑH84+9@>yr"i^V]^ ehh؆fF7޵;Ɋw).N#gV],ZToLPNCb}#fؾkō6kɛQXS&֔ɤ8wnr??x竿Y87_1܈Sų,MmN}sCUd1sDϪ|@9BPᙖغR-As#[_A_n S,S'%ǩ~پ˙4ZsgPOWju% yκXgjóg|hRv6J~f̞^؉A<Ѻ3U5|1<%_[hyhno;,vdb>Cky>uL-|.6M[/FA 艹n] H.ϊ?t6V3"B0vC"n_6 ߯dYr*NUp6.JU1o>g:.uyoȞr}0Dæ$ԔHniMmsƕMd~XcN|U\&S:L: VOdg謹rt7ӫ]R/#lxHc?'s>ﶰ‹jD4szT7uC[[NFNMEn@ =C=r}N!*[gsi y=:$/`RiѩVaطz,E\}Jg]zΨ\y7??AiW~O2fN]eqĈF|pU[GP>3F`J:X)4m##~ W<^m1/LT; H\gКL-\Xj )O~y=3oT8?/M([I[ß~ XOyTp:#&_.,fv?m 56a D旽nWV(qw%Mt^\['cqlUEw#6H;D4 WWk -{eI { v*r^tD9KGJ+S-:1xjt eWlbt>5Qkq mTIDtI٥'3I˻Q[ҼJЀV_u8 Y#I9~ ൗ5򢎤WAv endstream endobj 6386 0 obj << /Length1 1606 /Length2 10730 /Length3 0 /Length 11555 /Filter /FlateDecode >> stream xڭveTݒ5-x 7XCӸC-[p }ܹ7fG:vծSi(TԙM@-M1vtP*0KMFnI JAm)@ h$v@M/_!cz^o:mN@k  ?@TV,$ Um#k52:f` Wi,X#z bBl@bd } ٚX;Ena{S;@L ;(5?xB-v`HS_%{yB@(W.c `gm_  WwU'TodggmQuZs46٢5(rf`;?즎v9!7%ad vPXה,w"H";q]ߡel^ a_;5Y7 Djq[W)Xa9Ȁ\* G5mMk-U˿`fgc7s5w͛US8oӿT^Ujڽ:y CBpg0sx|MauV4B@.ג.?~:}7i[_S55}46q@^#MPg&,Rt:~h۽K +X~ <7N=m}bО<&Zmec/DK>~: ~#h3'އ)$:' ve!m͇_[Č4F^qPWCU3#&C[0b~:~ e!0I (bI1=GfN/5q<ߕV*0U|c{oImIu Q1zP޿گYc>!יW'Ϲ*M@/$+w4r!Ho21񧘂=+˄ǭ!6N{(>ee\]owl\ Gnoz`2ϖN,lD}@_5oϤC1oK~/O8+)g!kk4$hm< рd佰=U@rOABugDk"Rqc~c޼h-$0O<$|V.#ҚN\ m0(2+T-EGZc}Gd̿~_P|Am/8ւo&{tQ4Hmg /Dۀvvb,&8@~tTʤ1\ W1 [>e Yڑƴe NI-T@#%>+Ɏ?L+%/'E&s|%8:i2MU+Ģ89 $OV:=9ED':y~1JD?h[NZ7:ۮc)Gl%w̋NSҺ:ip9$=H\ܖ)ǢMGu9lq-@-mpTFRS+׌ޢ]; DD82k*ZoNGtY2ӎýDTu{< GO.\]8$"VPuM|-=§47𧻓Rbs)PwF\wfPXG! }GhqR6eHܱf?H{79 ܢZ.c{.ՑDn^#v)"11[,lPYF6Uf |ssp΀wF9U?ږ.O:JN St"k&g<<@[Ο! ˟۪IÒMMU͈䁩'wO.=d*lˀIwpIjiuTHͰ;-U8"[|sOM\}mzx659 ћ="41'T'|X=+5zZ2]I1ntdҗKގAiS]GA[ Fc- B á(1!KO@h!|wHA)KARn#s '/E%CT6:aMi*!9!iYb7DEE3zSDJyEy#M)e`*ỉgQ3|aaA]Do}Tp սR6,A om-xUKD>Є"o ~oun X ";Fcɽ.`;N8'rz0Vj-=!8̖Gc..2Deʃ#7_#3`ʧnom.~-?\UU[\~-*N!qxtf6#gXn,%.@:kWnҁK^[("/'?5+mԃvrNL9O'-ai /TC|<R";:e)l1H$ @zΕp&$Ӭ{[Y&Om'һ <SdOfol{QjDwVA!c9~`G?0V&-΀ʝ@fBV:=UA$:E߾=oHYHRKƭш%Cߗ!^B}Hn_c`D,U|̓:~5$jzj1o-s[p=>j}G`Okw&IX!F@lcc=ެ_,2QGan&8q -#6<iPڽ.~~\g:oJPCP"a٦.BW-c J4UQx$8_&ykc=u`pHvw5K~^m^$RrxHgxv\A:`J>6*Bg;/H%ode ;"W}G!R^]5 @^ﶝO;åMuۈۘޡ5L,*mq%Q5ƩQ1B&GWv^t/dC h$>ă|ȈE[U].ZOIzs3M!Z!9H7C(LSOak#GؒOK9Ѕ=ؕ*xk\5-Xӈ;;'S ʒqdZA)SG# 1OPpXim 80֡N\qQqnR ig#Vq+;%D1:,:YRCL=:WzhGh"7P%V^S$eՊ')3N//%qsﭺ1JpU"-RhuA6 KS TN@|c7s0l>ޓ#esŽ)(RUbkv<[%;xif D|.`GƙQHfg'| tTL;{=9bf+FY+Fə7 ;ݺCұv)Z\KfaZB B]/>9E9 <.a_6y5$7?&'3c]_FmΗ^@8YuEWϱtD*1{'NM>iڣ$E\)lAٗA?y  /(eǔ"$cZCsvJiNVԨvm VTDO K|O0\|p=eeC[[LV;n+<-{FjdJ>Gs=H+PHWU-iԝhq$PGIP#z {sz`w-A[GH?X*LB+u$Xt;`2& *r ӛ@65yHoT?J&[ܧLӊC*pee +JJaf('d`*'cӯQv}=7ϻ"w'G(=(Es%,d>κ}bO*%>hyMsԸ:3Mqܗ鐄4 B[M)$[dKƄ:_1qٴ:ݒ?F UaOȎ۱g%Qu>~oJQ3[yKE_ey[6PfDoPq@'iYjg'psV d߰%e׮,XiID"gN0M.iޅZ5< )u3 @Y(aZiS{ ϫWh/wO<@F.z;wZaWD鮔Toh_nU{'F ꡈJMUN5g!%N1!\b3(ZU3.ġhhi dj%i*V)Ww y}OZ8*Ij1d gzwoi3>;is^z`f[.bv\K4ۍjK cZr]i+QKyDº]== ]\t׿ QNF{ݡFkؐ phe>hͪhy/`!Nj -nl/8gt5p}]ѳd=,Jr@ 6><4zC|4Z#Τl!Q: k,}Vx" i<&ͼŹx˃x1f-McpJ5hG<1jgd FFd—}*E?☘IYl[nr 1ؒ2$?&[XCbu<+1E,fMd06G@VW2׈)CoA_bEDM0<ʢ.`aw9<'O^``..]K6.H0蠊8ꖴ?"i;.D;wuo [+JIJVݽrWNuu5wڭڧѴ u>tmk_xmr.nxfNmV$ߺ{C$m4FZXk_oL& 35IמP>ӚR4ճp O:'M̜&O4E]·_նarvK͘w˲{4UK8l%ڭ9᱗[~YH*P[⯄1bZ/T'>rv3Q1d` ]|l9x>\rݫ>C+{vd~Sehă6^2QI q]S'2}ox-fogv.l9bhqa_SFT7/NobprFvl7o8Ĝd##~|̢\7,+aש*1mQ71Kw!^$|c-EWu~f{JVT,ZXGLI0}V+kzxiz|MEWM3ps(Qe&tX@0iC&wM!T /2e#}3?: s ?7Uw.IݠNsi&&b/M[]U~D,@ Am1!'ھ(#FR /s 큳1jrOK=i]ajg[BJ¶(1Ɇge"Jxi)\ ݲ̗:qYIH:\UNvîSWhxvGOL[*=T' gdNC95J<Wb/g,6ac=I[5Y D޲ Et֮mmstZ֘] )m ^|ޣ)$)%#ϋTވF_| d+꼠ڡ`Uo/vH;L}h:;kNI;U3CHw)4'mLJao$ ܸZP{m]&=M5tq%=oM[g}֟s/C~(5! ٬*laeB6qh5D jxye줇8gq{(2.W G6@K떷`EIy(v*i5)w^$ޔAފ{28w*!XZqȶ(9=)S@jtwQ\0\ ~a_c{8@E֥<z0❥U G'çks s…UD`[?J< 'g&2(U #$e'/2\ δ88%;z[~U2 YD}^8a-˹J\ȦZP.u0YC;U>1PV ps7m *Ċ?iч4N)\t/0:PF1G\+kMHL,bp* 7BOZEλ#w?j|#j[lw8<c)SQȴc*қ/n%F禚qi R%"Ǵ9W6Wm–r;PX :_|, )нX@"d:rEra.?UڨYǭs" B[+voC=`^s&m NX'L/p'*(p;b ]^)w?Z)aS&nMҷb $ cANKxˊ8sk0v汸OipRG5k'v B^:l#4j'$g`VϿ7ju`&f-`2ܱtRe]~ŝ*@ȊlC%M%YuIi}{-8޽7 \)[w1ZhdR` 0ED:e"Š!VJ@566Gq|K1:gP<;RU>וX]r@!\5 C@(g<2L9QEf aRVĜڈk/)ؙ{w83 7ĬqW8u)>5A'R,5w\Sy'?RX(Hwh%RƊoEg.yc*qPcYm+|L/T "hM&Z.# ɩu %HOSIClئ/nؕg+S"%0!SR´j.G.TNHa%Ƀkp]]S-u]E~lc!\e>V_6~)-Jm.ے4Ħ4zyZy@9Ni3R2+@**$gU$Dr01#qs!ce[N\3{RŻ#ik' qc)[&cM,iβr*zYߒխp""rMyaqIT},?O(|!,0Qgk`/K@`dTv!IF4É' GASfm!cQφ(z• .i҆79}HELRCY'),D4#J6p=%?z?&}Z8<nP^Hv`һdƼT\J[vxEES'Iܪ"Tf?qQ%쟸F6Cf߯' r} -H!MTBtK'BuUnfoB] ?Fòj|wdGdieL"gB#ǑAUӍcY ͭɏO0ek sdQD\Vm~IPrEGJ=|Ԫ^Y*gW@$W?)biYmG qo;jvһXU|jXAfhLY+Y*[epnUʉrhϾOpi9ykίc]2φNoEdwc9xi fy3*9C?6,ɛzژ ! KJҷi,>m|;Tʲ^:T \OJV[ Ly.ZGAmo\oTj\9w%D|mQT (u\}o\^3/\JCrT?-Be:0$Sh=WG\yȥFBUf &g_3It0=-G9aZ7"E$hU5WudnO%34?ʊV?9~/ $H˙Kc!{oOm @F҄Y'C}qd?O~ n 'IףB4}{mel=_s^{i8)վ8YO#ힽ)!vX?>G,M^?9GMM;} =셝\{Oj4#V_>H)DJ7I:OחQYƤ?j:{WhbV;3fk1 GC)1/Gs0E+ثV?9\R%fwv~Ta&4d 5W*x7JF#VfgYu:*P!*l`2LZL}v olB0a(VfܕB Yh"$ݴ=1EWId0ԣQ+zK~:z] +' CiME@تoɈ'r-ـBS!^.[}WTf {:,/{sXzUq(%"O#Rl0 I`<8J 9l^ȟ>^2-|. 8Z*߮:"aES4Xm*9BxN|\}j[Ů4mҐ~o ~Nzcuя}e,8컿pcl1$,evJ(SP!@ìۢ \CfLGyMQ ggRH;]fF]n3G){{e~]ùK(srkr١w x_$/Aۧx`, *I9x.Bnm 0͞q>)\>_mJxf%Hr{/?;i^~v%wc 蕦НwFk(UEo3g0䏧b#Ib^@}]a1 @'+ []8u0#/1$# Q<Ƿfs;k `{;MnO'Ԫ> stream xڬctf].;xqǶmmFfǶm}ƾ9wXcYU9ZJtƶ@Q[':&zF.4" GN.4p26prԀa Gsw075s|WQTO?!C@hekg q Q 8&V@໘ @ ht0;Z͍6@*?#[cJs%08nq掎S=pY9C_Bv#::999fNfNv4ؚ45r}az mN@7rvVss028M abӝUo`ggns'G =ߜFNs13(6&&;O }gf00rMdm|SO[oU=ZJ{1Vpks+Æ8N!`cWFz0;͝&V;]`en112?g+ҿTe5Ąho_흔?nO';oB&&Cas-c`[2#ӿ?W:FYQr21;^ᯪVm~Ye;` Mk0ە+UvmsVW7Lq}/}KR`ZQv/IzQ6(itKԢ<楷 4Uv&uߡ8\=Q=!bt 7Q$?=R v@d’4I>%Nrrw7|uaw\ N=Dt1( !0dM>=T90 ,i|-Gz=b ZL/) >%xp+Q" %4d} |p{S,~*,b84*"[r_i*b)Qï-p>PGKU^ٙXĥG_N?pQwpBzIY_.rOoXٮ7s 7ۼ eiPb֔qt|0GZLwВ$[8) ztC[EK4$7[Zn@t|(;%6RPO($IVC?D3T'qk /y =1=E`W31;a)c-m*B3E,(ſ댅ygxpT ƸN=zc/ԲwQ虆O[b<~4{=a ;tZ7tlS[Ür ,II"u"f݊_:\;rkЀa-rtkC(hڏˮ e(~^}̥*K{; Ypm˪4hH)LtUJZRUJE \"cAHJ&kgN*~@P6nc>BkG^Cpf+'pN;b}!U> :poExL#/ȘbށMF-.:!W o@1桐kbUy2NYz1t.15A4R(UcS/+!?s>V;U. xc]m9ݥ[/<}@}x jhYt$s>+'\ϐ<" D1|@ڊ y7/cnL,x {jH(*=uT/df+N|=AOKyP$9K$TĚ}[̆:(BRyf6@>|¸abb>š+)vAqYƖ:=Wy݀B3hH$f0zstMS dߜ )^e* @~Q$7p9~A9̒,95oq0dݐ|x&MfB^eX r.!M̨ei9R]#!d)lûKCȈrS50LSׁc'vE.aAd{Ĭ/olMW:S;"רzkZD/TF:kqi0vޛ\)ˤвJv9jgBMau /nE!}`8 \"Nً4#/to l JZ΁,Lߚmf I/9Be 7J'W:)yD7gm< dgrbyxU4aQ>z@[-Z*)9L񴑌ϐeey3Tg+$-av0f6:Do$[{$= m`fqˬB?뫈AXS-##J^04ӑH\s-6_}maЋDzb0Գ$7 uCX\aӬ Cuլ߹8{ARWA 6z xxtW{2 6DH ={t-kLSl2l6 i0A˿d2Img|0`g >ÚRfagU4\ vb`@(Zt+O$AdF{RV &KB<^h}+k,KlҾMM^3jv0S?86Y]_h[lVw}}ֈˡС%(ah$me$e L; A0M=~˄k .|C_~p~O_)dAȁ{sK~ )0`ǪDsbʶ 000~ eK jprLL]d,1˼: &) :Kcb\s`GTՃyyO^ ;WD6k:Uy"}{c6\`d#NaLzbnhZN^U@OHv]sP,!X.'*eҊ)֯O:uwjXR]!PajƠ~V1R|YUw ]F.J"!T{{u,/4tmq×biHzhQj] D?="]4ŇOiщH?_˘ўb5yDDz8/":d,F=UphqR+¨U^s'z(ڠ+57'/u~ NV!RcQ|> #Q۪v'34BhV$/ T2uJ#ώXE}J R1<ӣG=SMV41#5- C&'WE!'=yJHD޹_"f7y8=ظ9N0HVp6q(&ƗفFV_Ec0yq M(F`eF%!G|Q@!y Uj`P Ż22ƮA_MP_x>{KUGݻ{` Ƚ(.G9T%9h.1(cNWUY5sµ enWy Ֆi@[ /KNO?Ƴ!C<x`!57kf{MߑveX>㹈Omx+x~.t ]k>m>F 1Md|,#'l!Ln(\V[&#sa4l_SGmެ+mVrMv] n4$o"s%OLIޡ4ֻߍ(Tߖ'@7'd)zhc5> ޜJQضEhq.J|LBR)O]Kal,&f}%.0Sdd F"`eԍp!c`LqLC+G/f5L4<%nEW;^a.8z~@A;a27=-&քIk) >'zl:==^k5I 8=n~lpA"C^%j/S^qƴk.HM+k -ӱ8(;l\v|tɍ J &K [fݷdcX%ЉRXd $,l!8M}Nfy!@3)'=_R''2I=B&cNGJ`M{6s@=r H61fF6\jxhyHEVEe%$n᠅P版pTQ^;8yn: +zG>lNx)pNJs{ %ㄑ4&v△D2D5o2Iܾ[CR k}z ͇FJ9a!CݤZp6u&ej g:.*bs ~s Jnc05,,+-ef,,dJ&ՏfYZ^Q w.Ʈri57;a2kleU98 "mN cP SR5;Cs CSq9.>|#dND4BFh>0QL<0ơJkkm yNgakΰdXa{(|4b$] Ln`[JEBvޕ+kϚb5+h:Z88K8D7ѵ䮕?BFjnB)_JM[" ´S)k۳m6Y2ʦ 90ͿxnFN} |9̨̎;;0Ϻg LEnBWk(f^|Z*V/mab`!RFHUe4UιēZdXul[dI' jB&Q߅,TO.S 53ɒS"f^?̆WJ¡KuS]^Co4lO8`1o56Ɏ3'䝶0Lw9΅FL*dJxunnqO(5d"(HX]} n 5xjR- mb廆ެX TVe˹\>jtz \D=Qaui߫5Q͗% #]-Y2]U~6[VԝcW=*Tᛅ)6roSDInM{ʖ!hv^T0N7/h}/E_[2Ef^I=AEE!I㴃O̾ 6d'ۤdަ,Gs GD;!(Q'ļ*1r@m|Ȃz`{Pn;f$ͱ~*@"$! P}vB~[^I1Ϲ/#@!qbt 9ISgOS%6Uh=UGZZ{ZBz/Cg 8yՠ1%l4&RٍgVD&6~`U`z>9 /eﯲ=oGHDB/'(=Ec`F+jÙs+S1 =B 6^MLdbM0ïd%hgA0惘uf+}xI᯼ug3B -_,DD w!Jc_0id2o7MO0:+9"m,-rS]tb?~ȊI_9l|] `+8H|484 #mڽD$۷/XȒFEbn)QOc;0x%qe<7:S7L`m'`anf ͠3 g[vBu7]#6Zmz˲_xͶ颡3pJyp1RVe3RC+.V&35!2P!4nXׁUt3ڀRqۧngז ~9-BP4^y+t t6ʊ#'ڧ9v wݚZ %,MgIa xsDU\\2Dx&lpMkfMVi/_kiy$j4[]Y 1CJ]z!ڷIy㾿(>J@ hWxznM'7?Z[?x=_\<&׸J2Rn:# UX>0 侬$}hS 589 xÀn$7Uý5n,7 "Eڬ"S^q B(?La$j` R8X(3^:vIQ8CD*mg UEsT7 1 a2#ЯzS$)h&3lz`iq{0Q3I\G[CfMA^;rX1'zU~/iN̆]%Hv1q_ORUqr]{.EW|E1|*ti%ƎQKo|ȷMD@g~3lc-3,f_"Wȕ 9.Tg{3<zh8i>'_G[ 4=qsӗ]&jg>yNwԴP@Na[#U B8gBʑ ~!zH;Ux5ʴwDd_*HvaRKPKxmB{ ֊csP't.FN>,f`z5d猙zM"h;jݧxѢΑ15dVT[9a;$3e tWlF^,xDiu8365r5o4|+{ ӆ3ߩxqtv_'r LJ<ҫj.&T1ٯlvCF:'Hm γE?B~L!/O9;;!7ev(oHӝ_4f4(R bb}پ|5 /SϪ^ЇcsJr|Q,vH=J|ĀU!t;=W74b{, e3~͓r] W̤Jp)E +-nf'>Hx0.R;"E▞EM?Q7`TDPJ)O2lu V4|oΑ;yGK6 $-8jƧ;IbWwh)k#nwZn~isI=䝒jjR&ّBwyc˯")DA.IF۳7̽n2BT,2_?դD8T#u0!v˖i.t$(,ҁn2ǽ#no I!% uHx%zTሤp*bҁyF% "I aD k]5n#mg6L1׉'jfwkJʙgw)!:[$UUgJ:}*/jvAWbj^Xe!Tb,9sn|`|ډԉ"uwn:>?Vh6`4Z"_42r("7s#ifQ3F:RTmxH@n!*jI h5A`yXΙ#w#E[ٚՍ n0% ')0F~B xbas[*ż jIOҽRDf]y·G֯^̦:cU9E~0sLl pĞzSďWl2$yD)= ޜEX[P" 8K,UoPTQEO)_KtsݑCk>%z`Xߑ8:N 9\,B~Pu,V5=:].]Gl7EpM(&z,DE<%5unQIWKX׾CUʹ_w|QbJ)sPy8^*'_u:B g*ov%MBs*C?\d@2%HqL`%P)!a%CdZ/!(bq_XE.WF47!doe\C'([WԖ,w4~&wk ¬lX_h/gyhv_@D(R&*# %Zf8p[3gI[~7Q[Ƥcw*UI̶}W]#d2.|P8l=iy ~QmI${s¢(OG4=EKE2m[[9IW-Ba| 딄sSM>bۛ` LY1/#7XqtQe\=:_;.qy韺CA$$*Pt3b=$M} 5l8NJi1m:|KpBгrhL}^ tScv bP6B 'k3Kpp:qOgI.; c-ƠH$.YŢNNb[f>bΙyɑGjI[ jCnQAq wTR:^OҶe[zekJvo=7J"2+ޘcQp5ꏞMY"]U`X$Ģ?_:Wޢjtx%e*0FF.&V^y;=V*õlC`yNF;0whuOL?i8R1< `s{sɣ7uڌ=GTh.TAZ۾k6QlM"N11!QM!U|{&0M-ha#/rҗnӤ㊊J}vmVp\leV'8J(svs v X&W[xc9bHIbT^.Je4б!>/ߌlPvAslxz2SHC`;k$8ʏ>^nyZta |Gʠu}2" .t@UÚ}?rG [5,q$={б›Oߘ/eq*:6WSʫϩg ȢPãkѕFٷa a Ak2+.f jcm#5AOtOtLN8Yaw/h/Nb}6\э<ɲˑ^CAPtThږq,AˣАO }߹Q\^ Jf47#V,H8K}%T_Ÿ2x CIx=:K]8^*8B_FaP5UZcj ?X\[㉌_+vCe~S|]W^>}ALOUe3a;ztTwz;ʑ`-p~Uz^p g=aW470Pe *ųDA{ [Q؂:灹cJ]<m)-K5Szr8V+c") <4~'Yp.Lc_\n}2#hޫ7Le-)溡 'cFk`l,sQD I?a*OIud0$}wmލ<m+REgK׺ cZy|הi%qvKhBӁ^ :hod-'%():>M>=Q6HT%#c%Ij6JgM:氈K ]xc裷UfXZ.sɥ˖Y XF9/i-͛PwNO7KTNCh҄dNp|P;J$B'BFPxe Rg7ԈC3R6 )cEZAȖRUaU|^3o[G0/=S} UaԱ6DrqJEyGP3kU dPSƃM?H߷V,>}F_B Xd/7Uc6n{ߝ'/eg>hO1}feAM79ibniHҒޏmT?c,$([B՝ek32CwvņB1.q|h= !3FO+\ A@RKGH~CIOyc}s4?&R =6yy xjGVn q>EM6}GOc7U\۟E|",/swǾ2frȭtnꁴs *|+4?!D2J{9#rЧ1q֥Dא8g'd82A)t4qxˊطDC3Fhd~ 6Ya۹hu= nnt?qx!caI_ego{{VorVg!cn:(E3LըFԺBFcTK〮^<܋CXlDб f=u2E| 6Tmo\_T0[4r܌* #Z۬U Ws) b9ͦDprfP?w! U-zN)*c3aO㸒/ ޺&g^U̮`*Ȥ8qʐFKp9L&o|OfՕMq 0r{l pdzpoiB8atȬI4GcK;55 -{ӑ1^ޯԒ֎]ߖ*D_91]gZC?x6"=yutOj^mC?GԢeuA=ű݂P&ƒÆb}/XuVl*ZqlӐF) F_A)&H [ԑ0obNRxך,KR'sJ<2zQK j#xeΒ'@1fNLj2rρrԜ_0tZ QtY;Rnmv2Eg_׀A<8 '7_{"o:g҃x-FF!((2Z cb3$? Flg+l+l5mYdY>0:eat:|yЍQQ oEmq+wv4b4Czh2,UQI/]2m/&o?u_ZX z3ـ:Yb^$]n8j|Vv+8=EkE e#l| H e9bMzQ͈2" ;%E'1y$&I>,'b&_gu,>LU(\,볋e9 #$Tre~>cËULgg>|?%cLNAղ~l+#6yNF=h6ɭ{"q¼O`M >DXƙh' bH19'U(LG:x9z#fk8SљuLWQ ٛ9'༰d^(MLCF?8&LKJ,.żJ(`ʖpsÀh~ƧV3ϭ& !7R.er͎y Dp]־27y;xA1]{ٻ g ?ʇym(.RNsy9}_iMlފXeܜ)ەkUmEl@2L7FmXbNvFPf"N9"ۅC5It Wblb˝sLx I񔅃`tM?K |-ltз""i-h/9fal+8"}߫ʓCiOXoZ=9T겘-Ո(t*_60w%cUg/&/A:9()"dCǮ~âD#DէТ"NkhnjeXVXOP0T,'ϘF12P0On( 6 0[BZfiV~3`|jJK#'882 J˹%lTiM Շ@" SP&y|oȝV'$jJLf=(wy[$pS,MI"̼Dqx*.5 /)~nLޝ&C)xA R|c/I,H-.iH>sx%?RʹՎka9(N1]2,J+P+nz\(>D~7~+Ѷ)f@a}YU& cjnE;8[9T_;SW&s;s WQ46 3]0,'8=)4D<Dq*Y[d[pǚ[.U\SbhMӰ eoo]ƠmDg;3lP/wtl:=!|@ Ӻ|R{ex4`ӵ G-\~=.ڰx$i˞UX;|8?CšZ7iy@jJ=,ԯtMMEThQ+JvHJ Wǽ׸a86l¡68l50cEܕ>b>WtxM ,EAوrә= -%owkpek%Ny 4Mn<ĸ-=1v{py݊w ~<˩I" X{ wL՝&:;£9 'rˑDǧ7W{Y4WE Caʩ@}m:\(ra ЏMM%M"uEo7 endstream endobj 6390 0 obj << /Length1 1630 /Length2 8988 /Length3 0 /Length 9826 /Filter /FlateDecode >> stream xڭueX\k5w  RT wwN@wG5?ڲy6%,upebA-\@Tٴnv JG' B@W0@l .!!!T: bm `gbaa K @:ڃ\_(ׁ`0 ؁2Jj F5] hB@`0 A,!Zsar.`% ;X`g{3v: 8,bU3{!Ӏ!jtV/P۟^h^PW  t 8^r9:C*` X`kt'utt+?kQ_r\_r[CP9,;1"P;/% C S?'@yoF%N-fgY/-3v@g !v^C;.Vr EE6.nvοy'R X^f]lqhX_89 ӱl7v_xC#=9Se\uJjii' #rq  0dɿ96G`l4An/4_k{A+KPH軏鮵Ó\pa :E5ОB揟ۼ~(31h p;Xv9LK1c|NTslMjj<"Ow8#0Ҹ^;b;apk nFz~ģЉ S>z;_6CbJzF 4G^2EP;vܽKI%J4<%8%N#l>t-.:q`X6 hc÷+l11~"Vyc Sd+ 9 0wGߏq訪z^eTLe% edp)N1d^nׇ`YLez)Er4RK$ c)^&L ~R# 9uN9 ?  E@*\Nbq8~(`Fџg,yWKk:{%nUv!SP?Uۉ[\:5-92U5zVJξ(V)UnQ({*%8+['!!1];d=v4diGbf -xaH>c"e:kNG򐦂i):ʟԳDx6nIo&xY\/d1LTW1|1$ɑvދ\}~0)dm2iig[ǖRu_ zo~-ǚ[l[qw>dŝް Ua}iZ_*^Ix|!٪uc]'d\0jp~%-%fhB1=DW09W*goD_f#PhZ90YsC3"_20Vʬϼdp!2':3wHL#1Ha7r 6[ 7`,dFNQʛíT39^5e\isR*GUz13)kHįl}=WY=Vo_G6=[ĩ&;*{>1*狧@s<(65o*gQkSn5t9O$#XPʎz!Tru|7z KprMVeEv''.(c9R9Uu_;z5L%ΡP|2*֯9ݫ 0W7fE쑸"KsCw~?8Zghljcsi W;nlOt?1m%$ C@3d[3.5^zS2M"g~-.ɡ.,A}#Wy,Njm}dLw;5a0w;9aFe2u%s}rI $I So I+5[r J=鳤b?MbC6HX;,u Sn5/ fٵbN%@%3f6ł%BF' 4)_NN5 1;!Qz$iDkYtqU~]S02rT ^=[8ه? SE-1i]%+[l^Rv"NщM#_r-;A5ytKo0)P'*~_'9 JHc<̭Bo-ҳS-AS(pO L˅Xbc"Ҭ;C608J"Iˆ t Btً_ou0C +=*}S#FvXJ_Na+ѳWDiz9 @%^c}B OOPnQǽ$Bv aV=$5k)%mQ(y<\Ug`}e1}껩 B5?ft]FMHG_hnK zX"+S")(U$05YrثO+Y)4V`ߕt챴四VɿZqb<Ͽ{e'+7\}p'P/Q.vB3QXsy~ɽoߺFm<1ഊk <`kK,k{LLahV M!R}2x3*l`&hHJ݃J}'ɟvU=dc1rk4#U'S0vc#Rzn[J΅Y!c_Q6l䰍NT3'ü/Wݡ2*RZ9:Q2͗>6rsPҡ׌'{7*k Fף\H# Nu4 X0K7W=_nI~LZÚޜ ̻&c(O\NY69~眣qrn)b1r9#gEaHRO/o?u|Vc/r͋yjl?yPO>ʓ:i[s.D&1 (ƪ|y[G=; O%֋k ֬Z27rj` hb }- 6H1#5Dڤ[]ƺ{8[lg~x62hBrϺILz|b`܇J: `aF7+31~'S!{:+/#JΫ`d|? i:}MMˢP_PH=FTdo l$Xg)M~Pe!5!T}WCH$aP<6((G)rMIўJg3:Rkld-p>gwHljVO4і S]_wehny fƠJ:OPzUWh,\MggYxVߊwʳbYl؈x*Ͻk!n3@ C@VVA>Ez!|7mIâFGS"%1;^n:$JRwP|Rez1:&#W`CJUmP?,r7I}U7a̟$݆ΉXdqb/(3W2t]Q x{eͦ,*$(%9ӱ(&TttǫgYxц%&;)aM5IBRq–9yog$ АUĸR5R. .aykYuz"ɏp=l>қӨw=t1Jr I~jbgk\ Is*'H:r) OEc3+-#6@ z)>i[U2(jk] ]7r_ ;"m J\_[zxeKg˓T0.o"EHoЊwt/J0XS]=T1̯k:F%٠Hͧ p9n4mEc@n?;4r3DGosC* i|yp J#ԑ!,;s yBۗtrףRJOO3!|S6{Kp7-eu _ 4]e nLD5zX/vpO)©'p^#rzE&"N8S!˩;tXyDc6.?0}zʣxU$K#5Z;q+UƺF&UDx0Ni`v'6SntmaTM~PK("d }$&y84(G@C EYD<392_NͣHU`J5/,SrmX`j1Hɻe;^;|r-;R[QKs&`[.-|VDԶV|MbiM,j);LtйBM__# M{/^lk($Än0#Bq^g1S_cvi H=o+J>FQbK<#F1B^ k |Z.d66;YZڳ~; UCv423e58G Z P (ꓵi=Yي`f\jbn65Hi0P״CsgvળqXT]U^ēN#JY8BK`I m>$=eH'0 %|3L&NI>zbDx`{|@U6.cMt o~|S5'5ZT%,,(k\ g~nԨ5~~43E9cyB*d&q^ 'm+Op Zۓλɚa c G;ѾrǎӅBǑEEkmk j<iI1 (O5a}%SD,Uڰ&A#?js5Z`.k%!aZέ@i$T9mVe <'ƍ,95Rt 1V#RJrxB!B;ZxI[c^G"zV,9Af"ԫֲC|?=ɫ!(L[)S0w* (S)1Wއijo1p vb.amelP%erqH օ~wp:y7ĀԲku=9O.tMh'D|7Е.4[6gLLSL ,==+޸lg>6LluD 0ei3ʸm1M+{ruL*nWI󱆮Eý\#4^N2V QtoPY=^n(_lξeP+jkMMڤPw8nU?wv:+z *թa E,tbuP.;Q͌(w^R[Vԝ`sx((cܬ9a%odZe[.[_,裾yېzC v1WˑHGՕ˙4p. 1K-*#dA[ڮ`n[ڒ^f#2={"yӂNLҔԴCrqʮDswI"myZ Dg4L{Ljay2r*.6uޮ7}l|+Jbk〨ޜ<_9.gÆV_7:&hƒƄ^4e͊`QŚt$Z"#:Y5[܊d瑵_h?UL0_:ۭ53'd(+i@40W";ij]JmP[%ٻk/1 :ksK;:?V.UͥyVI] í(EqgKd6a<-Y~H?Wd9FzmB$V-͔$R֓g[)v @hDD1Q_ɉM@_uKee$\ (foOQޞ9GLNѬ 6 ʝc8$l3☽Aat֢6X2x}k^9-i eL?G&1_YF{ĝ&mRjoA/ӐZ؈IFI(}3'tN چyw yTU #wrI7'=.AdDAȤ)`Q!Tok myGlԒ՛9R} d!|{AV]N7=,%捓_E,A2G$SKI*7B&Opt ;j}[mNMQtOqEYN->@ SW 5mE_mu Y# !E q{|ؙ\囀 =M xb#>{G>Z |Sv}VENSrkEYCvC̠نj +֍IJ#s_[9 ./84!{);9h7&>")U7:x#Ժ Gs0Y~jXc(#sZV`<QhtIDՁ~N$I%H״AӀUO@LlTuF$S4Mfw ]WvFi? VRkoMlY>j|iP9᱊b@}q)/1j"(&;kba؊5; Ԕ\?F(3<,lֈJErw}C@| +HN$ouf/E_htP!ΐQ2jqʩpSVq#j0jw29:*8rbei/Xʀ\{|'b o*2j=p"2q endstream endobj 6392 0 obj << /Length1 1608 /Length2 12870 /Length3 0 /Length 13703 /Filter /FlateDecode >> stream xڭwePݖ5-hw wƝ݂ wwwwww3s7fzkS$ B&vF@q;[=3@IV^dq,lE A@: 4)"vf ZZzJg㤓-hmgo}@*9`ja +hJI%T@[5@ ca u~9alM,j͉K `p[| 쁎6NN '-c ;_>vwȰ})9-A 27U# 343vc0QtU0p6tfh7 g' [28 MNN0M}[;8X֦ ,5A,lZ)[S;3?&s:= v C;[kw QQ@S'AyoF_B;[[|,? 6C&~AC &8--܀&  csnjښ-lZ=F=3;T-l:!ɿ2oތŠb:H!kg__vnOzfNV=+ecbpq{b-krph4w/0bv&2cWCѿoGi@~yΘ72%=T50& 1l_XWa]jRP7>d'M{ ۚ3xKw:e+'FBcH9MH-&cJz/Є_\r0}`ցWS&$çGktDr7p5~uL'1fx$G"-/Hh~Ǻnܰ3'rw(2AX>LW7 ipU\:\dIv(PgfhZkԽp$W`# D>TV?/.pf_Z%aٟ#5' C\~$ba׺t8[Hc_<1x6bh3_.lUqӜ,|mn8ܠR`Znp/# IUͿ_c$97\UkQ FQwvB5pΘmns"S5ͱ)P=Ԃ&L ('sBqrSbci/*1fVNt;aPvܑFR"U3t 0Zj7v#Ob2cذL>sg[,O^̡x0 =_;fJCSwⳐ֫SBF}y:VƦùq&~;; ?%ldij)`ΦI:d&'J/<*ₖ-b'T10Y sh<ҘOn?[iSo=Hh WLwU"L I׳·tOSoKLOy兦_VMhh1qZCg~n? /`dR7t/al )#vrp0{EcR[j,mX qO^,6_βSY8󮔗;!.֠/ZIcfl&SZ^WLBK9;\8yLOҍ䭃_|6i0"":;Y/|B!IcU!u,KK,RSp6xEqE{4Cc:uL:g ݜ,@M2]|]aEMkV<_kb֠Hp/oi{̴䙢juES6֤.M"(A2 rV:iA/v$*27kc*U+;麷7*_EʼsziFqmr'V)2R=r2wo"G=K5 Z +uպQ4UGP#'=|F(l: ΅Gٚ\.R6H bڝZ\[` r7Ŵri2"/ 5jGPJchXWo÷pMt|(y`zrylޅ?J[j3L:P 6G寣JC^>K3z}[tT:`6Ben= /9}j/3ӀrjU{|WT@K<$)o} dA lU4=6QU.H V^r߷ s'+L/ UWM4q1ѯm{Bĭ̷EBϮ,:Ĉ<ڽDkvIHA6hy<+B{ U]9qTRFaR3et

2ȏc_w-i8"qVC[c'sh1m8&f5퉺+w1##aQ 3f]Wp8nw1R>$Do|MY#ì1Rt ߼T$¥K`2Ƕrk=h!߈lT,{*jR- C3P4L3NYQE/o_b鳽.ū&ɮ$XS=JnJv j(n .0K@.:pEH`Rݢz.6.9oaAm $9׶7V:bQſ6^T͒1fȱUk'dER'uYLȵ^)OXsW褜zh[٨>|%XIA^]*cT;|?5wKg:-rh9.US2go@hd(LR)o4@|UmxMo#Tt2OZht+ 0#ʗa%11̩0,3} -U:a$.:Ifo,pQk. A =a-eZW ݾ?'Ϋ[޷b?6ZG$Θ+u_mKP[b|EcZ TXzBl4)*Go1,xuI>Ωx-{80ٰc4H#/ǐAHT CD[4S"|%}Z!NeD09ѧ V2#&!];NY`ͅJl˯8rԕ_ ޾ٝ@yFR+l.WU;tȎl6%~fe*s{ 1ƚғOzf&kVl0}WBU{npv"LN FSS?εJ p]:U'"-CSDasC t/-}Mu;ס鉶 G9؈C/aoҾ$a{D^漓O`Hx6+l еmڐ}2.!U3b+^H8 U;7Pf##dm$@8h`JDHNf(Mb )j:j#GQk?zP}_o܏x"dMh5th#|  ?3euX(|ۼ|ZCԬ_Uy0#ᒼAqVjiơ'WI]z]404zlpI$6&S&Y$Wڌ?֗98y$򃞿D͑P!{& O*]Z MCT0ZYA!uBSol(\GNNZNB u 5я?0_3F]pKݹ\¯ tUVsPFn@`&ц[zd/*tדªkkK 'pwj֨(UVYkb;C bO_+Dऀ >n/ ʳYGZ&U&?7ծśō߻'!2NEkr9ymVK R|ܳ-jHBc MŇ)˃tl1;fD42ږ2lct{qn 1nT*>CF":n nwQՖY4w&Tr-}o7f_H|upGY4sZUHsZn Hs0/G>DϼJwRy&g_P9_ULo^FRXXC ۾ 5ޡI]gJ7Qias5mџHIUAݒX)d& nԦQZ7]jv7E mh`R +Zo"D ~t5r+䝲:>D2B @N>BgirQw%(ӨYae8rp#ƏHoRք6VY"̢U }kF%bi[R[(Q<5#nl ݺ;15&iR"Lg2!zMd+<31 #TLrH2մ!gV3[w/ly=pGFc\ɥXܛR`t=ӺERu;%Wϻګ}"mAMz}xopyYL `Θ gɩz[F(ļS$^KG%~iWΰt4\w@%c%{C{n9slؽO^uð][ne 8XKt{3m@jpƶ)o$@d[['@5vJˀDTם&%TmFzƧI5 1>FPdV=_UY??Õ]&SMH}&Ņ+H,XÛq\?8QK )&IKiǾk.䇂d2, gR0#HGCAT6a;|\mfgiV5|Ghq#f8VDgEEy$9xyګ, WE䟘WW@|;I#o gj-HX'(ZޤWTj݇,ʪl2g '`;Hû`[b+0V=Mf;LQK:8~èFh ܋D._sP˶/h0#3G:Q2jb-k}Zu5~VW}徬/uk*ng.Aoq{d )s^<cM*+|V̶,|aOL稽VT~vR7曖FcMLsX D/<0:Hbmz5C z JbYe:jE+h/}73x24E|Lk~tP9-UƠ> Z6iɬLRW<Ѹy|f_07t6UxLoMҗL?UI'Nryz:X Do=߬2+0T5FdmKANeH8WuE_EF gA ک-Aet!vynH{HVB8<4=_@1%0~XDWذ&Ҧl*mV|wiihtx =}a^#=˜9[Cu R$rٍDZ:lW Nދӛ̅6 A269DZ!ݙ 9Yi"M𥗟[dK?=8P֧5bDJ^/mJpd5V"y )̥T T` ˴@6RcsDbpI{HrXBTJ= ^CHna(?LܩAym;?Fq^͗; Q9iL.C?{aHnc$:F_IkLlVF(Oj;`J k(|bC ͰknZJ%$WTADc\ZƛVƯOW^$f47SvC7ɈFL6d!ǘ׷͑3#:_m>kۃ1ڰpY%/u kٔݢ')Ml;ʼn.~ln(rΧrQQr'4,P 2li^_c eO^>XMI@:OP|~MOl:ϔ3M^b{j͔:ͨ4z| |m =σYX ^@gJxZ6L)-;3wg)?;xfw ѿxrKq`$OexSq"0b#) qY!?|jц/F/l7ِj$f|0cwd KaC7x} 1?-[ ]u;)3"6jmQsN=c079dK6Y5D6![+O'< oYx aWE,fJ"lS,H%e6w7PD[@a#NJ@JJsn~M*tF"Yy2 M8@fa@U;=MaY^U%M+/1?Sz"&f%_=|;1[J Ղ s~_$m\O֫ 6H$Ӻ6g"kxMM/2-_[+SAIyZᴾҁպ:(/93 &-xL#akL{< }>0ɦ+&ƴ;$n`<_]\u1G6?%5]5A.zBB&00,u >wr9k>b6&1ts%NuvlFz5zWr#YAG/O>uzܤ@˜Z [̫Dg-s*"aO(pGK@sZc/UCtTZN_ rm' n=S˪$})tg$@R*6GTlgz 6ڍTa5g|/6p@ml6p3AK#)Hrh/ʵpV$x*_T]\A^k#%G'G=ϧCv;C\v]MY扻h~] j;9]=3Td#f>?b w 3͑K[CV$4%LՔ2,XS.G_ZN&[:j/43[{ ſqs)oE3 ?چ<*kyx>_D6(O-z|Ci,<DӵN]%Q1_ a͙noI:A%~ a+UtT?+ޭˠ7EZ\s &vB1u̐.ni0GChIAا4' +E^W5*Z=#:V!xeӾ85K'^?-A9"x(<7Ɠv 龫JoÐZ?HQ⪛yaDTtZ,Bm[uL=v q6lðe~@DCYL~g:WpDR㷣tE'UޞEUm~Qy2~&Oy*oۙy^\uey˯Ipg^]J{VZ2lyW%KqaİSŵ9N GpWIGf_Gnf+$F˚K{L*LCݐa"]*Hm,;q m{_ꔌ +"=pɱSɂE5)b*W!3) o_Fxx,`Ю}_s .}L|!v(ίshkDģx)a_]pV2zJfjgi*vN`ڵ&dAb:* :%n:c:_.FD*ѳd wKK7qPb˹*bul~o8ɒs! BX%(tΊ2, =Ee~Asu⬉bo7AX_<51;p6grὥq[ ,nt[3BO "SBknD{WO9;[Lhb\2;0_+>AsHt3 w>In8br9ZDuܶ0oQ<>Eݠs^,"'Yd:2-|~/)7 |,taa遺n5bjMRiXL/y {tGNXMP8ZqjUQ#~1>nﰉ>}F!聶-[5t[𧠤)%x_6wʽQ[gyc"_E*1Qd-:4me |ÔWCeSel6P*;39(~ȼW5h?'SC̮}GynCT фZ sF0GoA/3|߮*Xm!tCV}*}L!ku&ncrOߣL$>)5]@{#8"O6!0z%5j]n6?ⳗk@PH~n9DS>0MFP >;(Q, am^ @ӭto,>ņN营\MW%3q%fQj{ l8pnrB$ěkTUIT-ψĝd@HGŶp"qډԌ6Bb_CNvPp"0 F^}> stream xuSy<['7.] ckl1CBCŘya03!!K"Zɾ+{5TTvyG}?9iq;C 4%( ʊPmv#ۡV @@Pi8 M'I #LP:FPjC5Քk@"I!ἉA HIxN~ bǁS GBdm?D* r=zQ3 Ha }>{)@H7ًqG({r; cdwEHQ:BocLK@if#hPTu"q̷0~>Jha`:aA A0@^T`“;HA(%(+X5NA?( 8CPe:GP A@ n}ϳedDTPP`jt3j/- A'GJ ;sGId7o6>=?HA@uBՠtjjkTSHGy9s#O Cd‘Mq GA{i*cCІHd@AYM'Ed]|@槒'h"Gv+Q$_#| {wA ѐ!"Z'ҳ,nP(@aK幺ꮟ*$8.'EFM~35cTЉx/-zEB ^*v{ޘl$7䱋" Yw"D!憎ho/"mLiO*{7d-+?5P 2Pʖ݄y O`' -KMk"ajV:#hV;Mrm/ ݊$b'%XLWuڇ_?a]l᫫jp>4wqcҳ ¡zw,\M,FSR+/.()3U]nylW յV&rv͆ᄡ+\S#18Qj5ޭ#OfT)VzBXu{+pH׹mTn `n) #&&XTVĕǡcKW0qܑ3+.JZwLNqIHoA>&xi_yJT\-?庥;L;׼}s4م cWY˞xutЎёkL:z6 #"+:$]FϜz_806/9*qXIG'LϊnzXˆtj1̽o>g}ˆ8v8Yl 1$SҪkF,ݟD1dr_sggCɡ0Ru_# OK,<<'rEYT&%ݫDo)s̍dGït m]N'd$+06^hgY.{*-\[S^xp?hd#FTT ﰓ2FU\/3D*ضwZ$ݚ,dBVZ}ic˜V\)'&۾?&1.۲?Д%3)*Ba5(yM&I0jjժ}um, Q`l+lhعS|Yq! W8aS-Ua#NsYD *V׉IhAGi>=lKlk7uY+7׳t\2Wr6΅FE~ e }oqP"/E) I?d: Td,v\%CQ[oy:3[B0 㽃ZVjg?.T"UehS=L1ٵkph1ѥ[RLw4Z p] |,wT֩Cm[v8%<<>:eAרGY`ZP \)9jͅ)-j0,Ƞ%nЕ8ݺͺ6W V 6<$䜉:sMp f&aP~h1qq\e||sԸ[eqn&9^(5?To3w8fN,x &2W+J | -<A Ӂ^|Cvxc<ek{I-;c1.\v%ϝ Vȡe}r\$/PX>6XwpLU #oKSg2QUTDTt wܷX8#IN)厭t\JƼLm`PR p9 $ryI BRj<[5gSu^uA׬Q[^k:0YغOoY9LE )2n Mk1ٽkp͝}r%>o)Ů5`\68>_DݲԉIGS_ig&4/LzF;~Y5sr2'bdJe|Ơn:e. rHWH/UtiZ2tyQRrﳸK#BkԀz[=b=< 6fDq>iY{RR)&|6l7v`@Lf+]A 6w;@F锭-S·يނYܷBJ.|$)wwF[y=Q' d|TXUx[u‹gCMcn9T dCv4DU xtocI$ڔQ湬#'_im7gT/zR47~z@F4I&k0UUS96g$-^>%ݟvS֣Lb^Jt}UꚚ!_fs\[ I ' rS!N9ٶ-nIhÅ>w_|}5bUW ĎQ3{n`@lmp{ci|U׾_"U^;  .D@j BV/:܃;%rȔb #3֥㕝q0~&q+R^AXT5F eΛ}`Bh 6+ViP1 fI~ܳVqy1+9#=pf@?Ry endstream endobj 6396 0 obj << /Length1 1626 /Length2 15769 /Length3 0 /Length 16601 /Filter /FlateDecode >> stream xڭctf&vfUlm۶mbb⊪Sاϟ>ߏ5ƺ'9yϱƢ"SVc1w0J:ػ21~(L\T3)Ar.**1g+^4/_ PAVZ U-:c0. K{wokG5 jXl1%eE)@ ht6(ڂ 3 ` ``o4濱D\&G t}\&{ٛٺ_Z b rtͪ,.oV&vU,Z;Sҿtպ]@Or G[st 0&@a;U'__@.@[ f69\#3+2633tA;ź,ShXf#[Gr]?CK*%cbgdZu5Oߖ[B$h r5X׿@g[=/j)?tV 3 hoR/,2Jb /CC(E #* ab0qp{}f?W :+:<zfeW7s0gl\MN6ssvK.ߪ_3zWB3s\q Ʀ +ZK2#51~Z~$K<>cKӟ.",Fߦa8f1@κЊY߅f<ޟVQ5,!py p/Ģ|rD7hNEkh,yArD32}lz!??'YC;#Ƅsy[wE6}@0C6JCӽBfAS[bT 1XKb6YFs\+T<+K#,Gmc'mf9)T'gℷ;W\iP?⛠iq ah+(lA㨦0epwq=knx34_ lx~τ,Ā~KJЎ3;^D^S~l wu`Y˴)@<hlACU Xl*!@\퀬8Er b$3mwx'|D]=#*#dy[US Vx&G4JX4Ӫ G}yb' LZkן~L0+ *07N̴\0i K^z4'cє12_tH{yy d-uMsc?d?-lf曛ذk#8W"^:*Ԝs~cEfa?Q;i]v}ΤFBwM揜S%jۨ0 ף<GWTu׋>u e%/׀ZũP+pIt7DXrWJk{!ͯI^=8e// اi:$ʰ0kԍe1)}30BLLzm6H:#Ll5`xcM/T`{xA%f0D5ֱZr% 9)+%ܪG~ڱk2 ?ҿZ%lB|]#.4=\&.gd(~( ƫ@ӌckvaZNSI A<|~w:8_D~Kls>d"ˏ0f`A`_("zʑ,L~ǣdm.p.οt,q5nD*KܣKAlq>EY:vQ%94H\n'ZЌai]9/0Bn۰f_7,MմV7!l:Gj}*,IO;>,XI_.jM6Ro{u h/utt%%|Su7)ZDֽzjo򮃠ؚvX_&p9gbD{xUsKv`* uX(Uũ0ѕ_W9fb;+_z Aj/46,?έ KU'=1e3tm k{٭z'3.tuѨ#WXN;>\ܔ`xr2^(yfV39nqj*h^V8y=;:EW1Rmѯ r чWIƝ^38K/# ĥΫ& ۃg(k 86u`fҺ(߶^t{툟G%oB5}#!w/&yǘ;p vG}U mC)бUYq.qEɥ 31lJ/TȼL1KG ?.&|u mQ[WW]3uٿA#'Jx[rjVT9a@D*d4s4=n-U f);|0 B!vFgLطHz 3'(ӎZ^ WSUH'Okk3?~>Fm_$}egvۑ^\Vak-lDR<}Qs@ rݽ67Dk1zBއo~%^ZX?g'u#dh1@.1v_ݷ0!D'uXIV*`" a0` VRqF!^1Zk]Xnxqլ!eE_.da*\ I-84jgkc.q5 E|Zppm)ֲ͓Л#e,#vADϦj %!ƅ2z݆=P0z: HeoBs $ZЦ"wPT>RX'48Ҕ>$Cz_^Þp5o8)Sm1СY¯s b#f\ϧ8{nYϩ_ Uͨ' [Ԧ}Kx\:ֽ]BPg1fk5/z&6KlO flD zTXߚIJui Wt;k4V [8؆wLU38h s:ób!lE+ p3p5Ҧ>A3H)f\ݮɼ39N%AuAgtR}}g/{WM0\Lx2F} *ݝUtKѦWJ_2Tc8;!B.]]YjrUǫ+D%s^qn?z.SZwbAsU9DAM.{݆F٬*NF8}<@hp ~~niϒv+βQZN|睛d;2FoX;|n$}tcS4A}TVs<[S=#te:pLX*oD_p `[ni]| Kog~db a$Uw98q;dtWjJa? ]ݍ?};Wmrd! h,l#~k/ޛX׍͑Fr)/CL4Rx+Kgv&1 Zëga),.ůj%I]15|~Y٩YˍQZT,۝;R]EJway8LǞDŽ,>ϥ1yK%V3=*E@[ -m "Ȃ(ѱ|,ƤGu!qLw&0fvuD_M) /gu]WOySbtyb:vGno,kT zI$Y|x/suR6-ϑ '?4J?Jw=VCf|Қm0}F:Y=42o)OdWxF/To4=lFX'3(-idbg"BOJ#sd,."ڪ5PpEM2X(*5P:d_|:5?% bK} J y-E&Q K2[t>eǞf`&N1hTnyWm ˶D9\摴[+r-taj@<ԓH(ͱ׋f5r%_k`|7 9P)UWd2>#߷nqpVՙz<|;3]_NU}i$"ԥJ!.=bɰir %xDnlA4HZAS vZ=nb#b8(\+f`9p9}d z>7 x3%A(,$Սu?dxO{Xa];(zzaսVsC6`4X@j}o~A6uX<ޏrmݛЫ~T̾2fD$4Ȋ ؤE`zc掁6ƳYZXt,ZTlMcBAC3Oܖ} =sjT"-16OON?<}ɬR'2ͲG ZNS`Τ?<´2"\J4aZ#x|4૏kb MJ*i:r0TߡUa:`gy~f^g[" Ѱ:] n4m~eA(>âzcyHDZbfv]Xݚz(+o3Thp b@|{YjV ;ev$ tvkUg݉X/ F򇈂\ I⎬x`Hb%hNO^ @cYvz@?b#s-&fr70bJ 暜fWk-Lq6$1uq}hO˜n3| =ƿ4-G]>K)nWfj%Ј&qN?|:BآIm2kj<{`I\4=}^ 5ʦ=sw(9%F=ce7.2C^PvwFdqFThq *h: c)0.ci&s8f(iqm'\wG:IoV[>8|;q ky۬0{8u';DBܐ0Z5H/A"bBS|>d҈pLh6i%X lq7w:D(씳[BegN~i Ҝ^[` 6}Kc¬XهL'Q?)o Ŭh'ɅSk@-˝xyE.DE|O2+jq|$_#x'E 6crB͇ b %mI i>^րBdzIhL5~HaՅ+r#]KVIm kŚ'W7Tq,5kݦVIs蹈4YL(Q-U=MmL3eOsrI3j Z~^GCtsM^TRt\R^<7Z <z˃ݹcrP݋ GUd4H6k烁('zO]x̱HwC{9V~D,Weg&/Puwcm)/,PEPzպr$E"nXop h!8|z~u,5YkŶ8Pk+_B7 l1Tik'[؜̯y/O5S% )s&WArơTҐqiVD~Z4QKK] 奌"(e"eo- &i:2}IBl'ҩ>aiy"]۬Y@W_!Y/W\Jgn&e YԏyپoH4}6VJ&=ve*#3)XmjKEg} Qs'j*1߫^vs@-)tPK7 {zIr)~.7 Ѝ,信| XS)e/$[ղ(EgVNE?߂}"W=) 1ռINy9p;"~-9:^ObJJZߣaaEܾҰA7 x_%d43cMc]q X_v TWrޫ%F?zYq.fIOdđ D–x[kwk bx61«{6<+'c`sX <ƢCoz&ݜuP]HU 0>4Ÿu e,gwbC3ߋ37]Ɲ3m Va'F3b}5דOѵ;b /\3( f_``#$Dr9\\%ϛ{G+m7z]^xtɟ6e0P:-d9Ͱ1Ll Ha=VlNAzYz32s{̺8H!/M,Z%- r:mAe^$.\jNF4qZ+Ч볹1 n F鷒Y@N\'k{[{9g<,yRVX;`\K`(a,9>b#-nzU(J؄eup;d,A?} lcfg:Du˽2r ȘIIJ_J? &]_UUD~RSXTGYsCtjBB?)NjfՔOSrosVD>彐W-ZyOMŸ )>46b uS1ڍ~(T_~^hؒ ;ظfSusdm qyd |\.۱W[ލ,;-crQ$BP@45_JZꍄeDW'jS3YVupUhe%W14Հ>C`UpMsK#G3 7k B*'5~k̲\u|]QQwE!{rL7~ע=<N2:wSTK?K[v~FNy6"@)͒ ߳I:;2UV ~SSkg.ն|AVj,|vHh| <+C')wiܮ5%H9:e6Z/LUC 3iѤțW{uSb. 97HwNN]:>}ϖTe}#wUz5*Om;sӛ(<8.ӗ.DmT`6Wb~ȧnIӘz.d垸a.VǚqpOY[]>Y1Vφi43nя]eJW9")'$mNyGVx6& n:%$n_dw)rd>W9xM:&%6RMnyQ[$آʭ=颰#&~|. #/yCLh!N'̞A:9:SlGh r&[&Ȣn*&CO?`Q\r=5[ͺ|#dcnW_7adKl܀W!{=,`S|٩5%8 #A!1ӶH{#]"0#z_)cZk/v1Y7oo9-Ξ*鰏q NtgfX[^ Cgh;L𛫡.HYi_7O=BƟ8MrweTHɋ1ۆ_&VZ VvW[o]\ضa+N3s5R",D_yM'YQvFƀhzO{jFL$iuLƳc  %b $C3"|ĺ9,ڼcGRMhwD'&%iTme _@wT(fKA)SJYV]#d7W<ļ^7;Je:ח\B>c4$#:kb-fynhvMQ}l>eXb?fUsJM;w[0w9l+:hJP}!G]MV4#%!nND-7݈=&Jf`i1H\a*2*uA&3G82c5p˺o-,taku*ӑ^@|۪{Rvy[n ѡ6d<ΙU}fV'pWp ٬,Dc4f0FCD/z'F;|{az>"( 7# ڐjR}E ŠI܀HgePXϥ0+Л/x'`445sCz*"0 v&pn,$H+n6eOmiܑ8 W:}* J"XDĈ_$ƭ~fq@o"0ewq!Esj-*9FOdnL_S}M#4Ww,ܴ@ϾБwt5=f0T@<Ȅ3{*jrc-U}|#wXrRS}]fq@8 J-jzACNz/hhbH*a5o\vЋer>wd9 z>g0*gTn1&e쯳775IoETe-mgd[O_"xfk;2&ρ(T?~QF%W‡E1jXdJ;J[֛nء7:g8Yq(W*OC+1 ɥ- scT~ƶa6x5t:dhnD5<)Ɣ~KGbۧeNKY4>vrؕੜB(T>A^ؽA" .yqzHH}ت/mM')llF)\-Ʈ&RZskvZDE7 I:"&m]o&#~7RLIU1/^ 65ӍΨ 6ٍGyU+QĻc6uc䅓+z9iBa%GcnSq'sH> I;1ÏA<oJ X|%tڋ;* g' ct7I6sW ZE/7[eu o'~Y]dLsԬV^ S_8ɧRapZ7 eru0U '/%)nlb"zn, m.D;%B3+"Zq.w5SH ;$Do=${*wȦ~;MGixX`H;޽sv" "O2OEwqk)xcW!.M"oib~2Y.6|AcW[|]xCKY;o~# ;Rrvj80e14H"kՎ oЄv3ON89[7s](j^"`hwA5h u㧶)"/NnVT ^%NF2Еv>oU?q_At=,h3aϙa~iMd֛+*gzOUՍ͒Xꐤsox lM#"`^@QD /Րr".Ӳb[hS0k~:VۂќZJ"Mmm,“[8{,ѡKlwhy@궉[HK~V"ΥtĬ4~]3N{Ȱw N0<jcݵ+ &zv B7ޕ*=[E uZjl7BښQgp86B@t߈ N@b|Rz 3:S9h%TGF2vL]hz<}#fWWLkiBʡ8 7}&a/Ҟ[utùÅʵ2c`z=?T4-3R̨叉@lƋB#0Z %g_/1mvf"rv~Q4%яðymtuվԎ8|"Hǫx ٚ CnUC{^ [<9':,D!2ſY\c]y +3KQ\&k'WӾT1"D0_YZL'I &+(fdĔ0n>U#%=Պ%.';OB w wv#4<% 8̰m,{iBYr`@B݊ixDi 1Tu+,.&q- ^]3OU]!i}9D]g?j]K QPux1~3^c(gdG'Z=YV=  C&d%8!(@ )9b0OZ6 Eizlhl$Wu=Zv; }YH@N66hid5qk[3/\QiEht>\ L(!j !;~Y}ꚻ, 1Lo_g@-<«ϟ1ح$Idj9*Z6Hwo*98e֔˅͇mTh2L$A̝hgi{;F8qDN^/JATu2V1 !wsN9NإF 0а] l_o] , 6e!{/M(vP mYbOMlN\(fN9M iΉLS4;gL>8qST CQf[;\Ph%oR 4jG6l f^p' EQ&K n #fr?ycmާŭbPG*nFF'߅% }ZA'$vv'o8U}mgO%% endstream endobj 6398 0 obj << /Length1 1630 /Length2 20898 /Length3 0 /Length 21741 /Filter /FlateDecode >> stream xڬsto&vvرm۶wұm۶mcv̎m}̙uf{箪ꪧ^kS( ٛ%\x &* r*@ W_;;NĀ3777@ J]E?-L<h*p[J *Iu$dlPr54Y휁s{'ͿS{;3Jsf% 08;M-^zqN 'c;=pXڙڸC_FSwvq6utpͪ$&o.ߍ]l 7ifoOIu1s=\eY:;{_4\-, hadftv gzcݶW` 1gcfon K;8fEo܀Nj?3C' hǨ`7%Ne>$oE7qFK>Wh Wcۿd @Ϣ1v1?њ?Im_imt)Y~ٿvf@'K;_mV=3}4Gvfr?f+P y:?7`DD=\z._B,lbϳ@oL|_`LUc;? M]8k@)ڲ)oUFvK=vȔ`?3HCyZIQ@}FwG](C ϟϥ3ñ~,o}iB_2"-.N FrsE:LS*eP3]N0dnEOH~( hg'O߆GG~BRcx9=4|st^iӬEMVw_v%&Agμd%gZ6u c)I#U1h^>_Xhɰ^厳?j^ +aA%$5h&ą?ր'H!.-T0^+TkK R1Ԑ{D?o N|$$mFsR'LJՌ%R9mUkd Z0%]j 7Uj˶'F:>ՠO7C=qAhxYlƳiD[,@B['ҢIf:*N(^l5zabG5Bz4qGCF &SZ-FoN4yKa-Xꮿ&;?XJfAC4%>[RBA~ &~gkw*(|CSTFZ1ZB4Pti |75'I{f m_YOR\v[ (On̏EJ JV-1{͗Rt(VKP3Ð=e!(0u?˧$EW+6;VgC;K,aϻ +ZX cŁBq;H|qSP{C𻽊0EjQ =.Jz!^nS3fM-m؅Um-Ozْ\ 3j p%l?zq>~Ώ\ ZX He ;ȕ^Nj48^3VKr|٧kXԙ99xn6;?%ϳ[AY176|#pVYim3֌9 f#%&ε9N'`޽EW sPdUr1i-DG Jȧ<>sI|(" ƈ~@f"苻IzM< qȜ+PMa)-D(]jL,w&U6dEX)_y5KY?wjmg-ȓ5s7:Ͳp6&L1"Μ;PiJ (oZ mKj"P F1오n9V2MIit'[JIx%M%&89.DΠoa<)6=a"e%nֿnW܀.'2(Pjk|D(|i+Z[q߹N*.R@ŋÌ$FLc%mćQB5:d5-3nmjCF\iQV<Sϗl~C!Ĝ4UJIw2$c^Z(oV0AmM |$}" pCesI5Unv5N+QF݈>m}[OG'Չm0ͥ=/\^P%I=6&Ky?N/an~ҁ!֤t=SI'ͣA{IJ Sy>mKΰ/F߸u,_59 )!M'}1%7ǩɮþcaˈ%4fM|C@g[v%XS0~zr\NLA8Թ  24mHjۼl 8AlrxAi6OQhwv7]yШ\4[=#<ҧ*ѱxؚx%9hR7qᐼD'50Ue5ΪįbvlrPfy'B',\%p(=}.;p;MpF9Dg#P5fܱLtcZ Tygvv{ڵ(Rѯ*#@⠛X/#P򗆜by1V˔Ő)l Zw$My*p"L/$=UGT[>=$)u#l v1DNOJ^pȽ?%չޟ`8[j$ v4,o}7$] GP+@ R8F* <׏裟?0Nz{VgXq24/K5H%"D C9Mesj`,lyɅ3"n0oO À0Dɏ6RyqDz(Vq V7[`f\g%, 5NRhyz76-8&'zm'@ٕ۟+k.Yեmiٽ=VB:="o2= y0 WX/`kIt>PqF]=5HPkfN!3rBd^\w*q)aʈu{bͪf`5f. 8zx,xlD%UYA~5M5rԗ ;2*Vkd8!.n ~&vVKN5up!,ro߀X}8>r 2E=^fhd3qec8ֵS:p~fE+X̐#0C>w7OZ>G*ju i Ùt@s2Yf *?198r~Q `t\/cD  p?(S 1b;w勹O@5F@ƽDG ;XN6MUj.@G3K"~!{Is1~D/}ǏA g9#R5iGj +0 秜# MD'%axN4ik ]U+js8u4򩷓MQYMDLDq㮬mDz)x4&|ڟ_0d6TPiP^dI纰Ua[j`>HkQjnP+]ǎBea[;A_;XYz˥@FL\G*)rPzLSHE3Nm#*~* p'DA&! ~ML"+Ρ~,4ҝΌ;;z3='\u wn'Q޲eo8bDM+7R* L,RH1L$P |߱^pdm &dx17D'a-&1ߗ [$qDEC,9Ljp w)k>[84Ҍw^~\n'O L=]Ԁ3qzw# e ͋R][fLwkIWMObArF/"Js6:VWNg#p~t|ldɡ>8o s)c (/TWh>' SSXx˂Q% C@`kz,D#7jH䒎8g ,xol,[b#h\:q*)\ [F%)܊dyA: rC*!t`PӖqj5k[UV1.S(Fۺ֩{M15&&EhN۞)^FW\ WHݚ@RdJ[r9E1s;{-b6$d-=, vgEl|we4? :!;~x2J( 7=~O@Pdz`lL=$MČgYK!ȥ⺛0E?ou2~HG)ק^ob/$v npa7J:2,d&5XR%k@6Y^]'mk\UDWF|r~m}Xj%8#ʴ@XO!=&\߲`X;CjhxX`Hǽ-}GO2~n҆ZMtjfXީ tq.; Xa 2ë|l]v*B*ECsI5%MBG.,_R`z1=αAxbfY/0 42EVДPy1 mtgFyPR87 -2(9|5k1a3/>&K} '0 r:7f*|Ui̋ò3Ź,%S06$zmÝNx-8y12$> _{1S] Ǿ_|7?%9<+Fm=RB26 &ܙ@*ǘ95TQro?6$xeZC*>sDrSQi=,cM#ǜL\0zOViTE {7F'HY:*͚<2/i$TVqRTshh~0 Cq+_٬"ccy`>ƥF3 $Hˆwg U"yHR_T! ]nMCi)JV^z1|g]F^~[/Kys̄e[ -Rhڴ|2 ?ÇNOy+XP,e|mSR5.ʘSMFƹ)q7Uk]`l"oUvocX)_ eT4˗ƥy1ϣ9hG=Fψ\XG'7BbWq>.#\> h Ð1ޱH|zm;a,BY†.w&e^ؓw **ۥTH?|wW< B S3R0-fc.;\3T8~UsJyuf$胛օPA|[va>ԄʓyBp ܷ3%ڗEZrz:37.#i(/7;[lMVP'Qi^<_v--; WKSXAJ?gj+q}5KPDZ=,.[r3j+rVf*'_1R-"g|q=X> mSXS$g:H'stUhs vvsli(`mcٚӄ8obQ3 cNɺ O8<<`(*.yPI"M`[JkvpDL6CBߪ[F2pNnԡ.һxxJJP$޶&Cdtgƃm )d3=R~[C2 RP/^ u ]/v#3po: j/=P]3!{h_3;I m^@C uT**Jꨜ9M'jYh`!*@ÅUz+_=V=kt.(ib)Y d ײwkr&.,~jW;"5빁CV\:4g//G܉x6t!jޜa}(QHA_۟<ܨsݤ:aNm/R>ܯaB C0+˜9G"ΞǮ 'gZ\W~[yaP'${"ԸC[⶙F?|4+D{qx\s; %٪Lϱ?{ssrOOnW%-"ig[ʥՂj׫FJ7be- Y)x}v+YggUSLﶌTyi{iaucpкm&M6B_S+} "{!B sH" %ݏs9&^Y138d cee!/LgJBS5-w"7h\:,%h}D6w 'm 'QuaOo[P+;؎WfGQSPܠ2ũe,SZX+WʔﻐAWDTHs҇HƸI.B=)` AX<'p1hpzpגBE>7,,)4J,i*96+_8e)T 90MI% ڌ Cy{8GDX$*xcp+9]Foŗ"㜩xj0+Ie8ϥ^v/+LX̹ap$筧!5p57ŬERRT.waԩhEnLvqc|J { MWV()NH#Xx-yyݮ$:?-q=Yj´vGv(`U~ϋF[<%?(=")y4WxYkm!}I[Iƛ=HU2$(4TǹAd GK#Fd*iϦH,([#9tER^nNz1QsjhHI3o $,r;px1[sm2N\P4wLa!Ú;PA1Rc IW~1@O8Ա@aYqB $۲H,.M=w'?FE?i\8?Q().!q$A7 Rk̗Ƿ9J-'RV>omSIC#:I[%rCFB3oX8m!Iy>Eudk3;}f(ͅ-.^A~q$PlM<>:%!zgㄥqV !eIop Yi߯KVq:LVt|Vñ+P/yfUb;;.7 ɧ#/zeK ZuK ˴BS'WעWk1(a rCE40SƸd j`P'9p$G=cm,;=C"߾^8egLk^GJAoޔ֧+Z c$4guxejCVYק czL_{HYmT75#,q١mU>衕A8it䱀be͡"iR5Ҥ)AU&ɝ]˰}YRR)Q%% }(Ş|HrҬg`ʯe`.U_<`V9E>%0S%;+}W?L,IZ OlDq;8w"ᰇI֨#Ց|zE-?TʊD83m؅QBL [VKl߆d?A*>6N% 謊9lGz5z(`>ϝDKdWZt>^8R%術/F{}nEPV"X @O ANoP!Co:/e:'%Elt$Hࠏ[PbAs*Nq?`Y̠@<;Juŗ֡}CuVIvc>m {NP18V*>mS39!+vh4"F:jK8 {? G ɝW̏-ea,,kYq0ioRê-z\vx ;2жrJP?k{ = V.}+Ou5~G|)E(TpuQ2Q' R%~'BbB"d]:Gns}h)0D 9/˽ЂhbZܧ[:u{SF=hٜu7χ~u^1N2JfHKNo*(9U,n7[{9tn&g(QXVzyE#%}}sLJ i w֊PV:1Kn.IeUT*!jBǁD :>ZO#vӔߓVs;VK7C74R\s ND_pƫZVÜтFZ*dQ lTxSoM-9MpL;囡iq:~&! ~ q]6TXb0FI%*v%#~l@ ![Y^llpԺ;/Fh'Ys-?l?a=EU Ɨ9; |as_xdYlPl sxl\xj9/ oy[O +2$;#.κ(0U#t 2V1JRi]~աδ>i:w6vG3@vs~e\nv5P"VZfrNdLRɮmpM l* \V7@.1|~A%J]tDKGjdA[oI1ߏGSW^~zt Jo7yͳ7PY cf0׃GZ1<}! ʺ$%%̚,qSA2?k9~c4k}cpJ|)?Deţk%9F]/A| ѓbMhpblZB:Xs2hƹ5S髛zW< hxs54Db@%{0+(dGDqOt.3@˩|ҰQ#DUtuj v& պd]r.LߊM62$72y;)qd kDX Nޭ P(4 )W}[iDj)j Zi 2}S,6+t ]Z #Nrss3*Oyf SW})|_FCR~N퇈،)Hi6%]TU9ƦVEx5Fq?x4Syf 2$Yj7su̓q̦\.Ǧ9Bɔcl|Y!7bD낹~\,W|@hlvOuM1MH*f-=Zv:L1n˧=TWa,)=1CvW6n 3ʓGV?w@;% & &jO%"0ʉ +ft=uRL2QGRjGo7yt(>ៅC;y6=ڳpC'#@PH5DŽ7G3 }rʦI}c[2;}0k4ŸՈs-IK VͲ2 FId GKm6ȣ< Vz#tly}9epkIodˤ\#b"N 4l|(4z$H1#V^%N;z4#%Gah''0WVe^=y1+\1!*W~<㐞f2['+K?"pL,GwWdI瑧{'w#z U@p V[+џ n 9(gt U|R/.ON}R\6[TW[rޑe_7xqDȥ챫wCGl}d=6?usم!{rMk5jZ(l&ЍM7[oJR%Drz %Wƶ|:9heOv&6 5SZ/,%oi',H"qMI~Y&Af3VqUy[V4ӆ{bE CEraC=}[N=l!clq+ 7QãsXcW8'fxla$ #[ڑuRXo%U&Sb$!'fyV ӎ؋xB; 8q?/*P4'p=^m绬W0Wݼzە=Fo q8c VwMz;vv+c*t7%6#ٕ URƌ8n - EZ2f "I36kqNBdEI*܂ GW6z8niz/?0xS}v?t,w+d'%q͋vWlHvS@Y<쬐1X{q iG:.ح.{bH|PO=) >?`wgfFX:q/i- U6߷\/XG6(B&o\(Vw yM5%y:0 6+#:oF~3wt|7?' q5(D0UZCX4IzkV4H5`=j87|1Bo&v\=N,GGUL93 ǘܦ}pl3,(`$KZ>#Hpu)16U|׽Noњ5So}+4YG;iyE%#!f*R>_Sou篺n-w~eߍ<#EWzV,JӵGrc[rpI'<WO^h{7M P!`$B j{Ӝh!^_?pEcdWǽ}i:lF,̰Z]EH[ƗT֋nC|Om">?9teJ{f 3'KU*N~gb➻P5ʾ+!! T!kd^-I.s4K:6 q\rp38FtVQɝ&΁Z\Y-bi?7P&ZXA̤H%C#bQ}CxyuO;{&դUkM&یf=S~!+w>r CEYL X\yPn -Qi #nǜӹMHiCKjC۩'Qo7Twj7id`Ϣ%QT2Uc:n鋑0Nm5'GУ3BUHauW5$a?ltcoqZXe9 O?]>Kޝ1En2ǼsTz.P|ʆXK{dUpGŁbl㷡lN58o{+ЄBPZmf!<єAT٧?#2 ^HpM^P ifͮWJ)l @h٫3L4R e{AuЊ@Pm"A,x=;7#U魙#¶/0Y:s3;Ug}/*CN`x-Gؚ(T*RvB.|K9HJ/4̀ ,=xFĜ&qNmxj,M rU/Π ; Ƅ=yGvkG;2H`~f+TzεC`vu돭ϻ,Kg˂y^ɻ\2 ZYF^tWS:#_ J0UYkwCO·0P=^Sl蔷><]q]-W:iT)eH!FZPIUUo# Ah8.}=3~R%rӹוX.}$m.%wMMnx۸LMX4 }/-o#  }\fe0pJwҖ@ uc,e{GL -0uYFˇ@?Sso4"A[AC16ۧqƅ 7~Lde"3)PDʺ;/:Yً۾U~Yٟ2E`oYd\5ĀEHf^O.L"7ښvؾ QLE#crCEȓ/_KO` ,:h&pQQ87[ӢҞ% _#ٛHiͥV`Ŭm17wyh'$xtGywB :∸dPB?2GERg+^.Œ-9E/)Ҹșۡ<'۰©=8#HLt]a㝍[4uC wd?m^ؕF-"Ee-{؞5!+Yv5K1WizvWʺ+*I A>^PYKTTUEkKgm8Fi/UVXr6:ˇClA' 21ZqM;_ُn/MW?2 yC٤,#lkÉֱOឝP5.u\3 imA?F"KBJd5M P(~E1/>[ܲZ}=Zbp-{@,yP9]Iٵeq y;&k4H[k NKS2Spl{|๕/y>4SKE ̠\/[CuT_!]erkX#CC0}| ƾ.5c[֦ͅYPau|g#EkV8]aZ\4 jWPL~apA2te@5_}',ơmGiq'G3ƨ\úyC#>מ!vO yy˭ IyGq~Н$Hq[,O1)ȖĻ98MG lw{qWڻ0Z/oGcz.V)Kq D ͿQc>N.o-ï(ic)'b3)Wr{bsۤA> UmʜˏA4d)̳R.v|wBq L//8#r q&wߒźy4aT Ylعy[m[xxVBy,VFQ"X\ kD dT5N('* cV,X%>ֆe3y*$ (;SN@:Hz(>h?!LSAUkI]䔸vl(uFxT2}f3ߋX7r?k7Z=2i`&n$d(c׃%e\.UI{az$C#_h2ݜXHmRXtSiC{+(rNax uR%yq OvtQ#3̥Z|ih΄"eAV/0G8hwB)꓃othT"^ewr.+JBWPzs3ކL5ٻ-)w$q%Ӗғ{WU觴"3F@%h^bC%PSVa[[T 82ދ SIuCnY18n\bzrk7cVpC9(* {Z/t+'be,br!rCyҬUK{ qd'bH8CdIw蟴2b ZrH~W./&>TLTMS!KqY| +_U+<<͋\" 0駖cN[mÊӝ 0 xu:[D7^ *%5 zdoAzD~\zUy")qpyѫe* endstream endobj 6400 0 obj << /Length1 1644 /Length2 7940 /Length3 0 /Length 8769 /Filter /FlateDecode >> stream xڭxeXܖ5ZxKw)V N.ݝBbB("E?;ϝ?3Wr:{mYI4$!p3`bXۛ8kU e6 ·MO/#00*ЅB2Ps77 aN֖V.?WfJb X;YC!js+oٵa5 _qqr eemn #*%UY}umUd4-.jcp<7p?/6.~A k|L 7`;'0Ff$My.NN_ uc} ٤e#j_ ~Bv(i*w*Lok sPdMbؕ=#/2 lpFyO+/slk>y| u'pxkZK`o!qohp'zX,za =$ӯ{kWʙjDm7Oo.Tt1+\<b܎BCpb XǴM>~S؟?J͜Xl5F~O-[ax7iy)):&[J^VYDPyҪDQI;‡SJ+.{_m@-k-◣M~ƵFo+FQɁ9t 񴦘7uzkP׋TBQ 9gg&-]i|Sc۟W1=_w"*aŨ&=6old51Z jJ_K\1k ㆸG>%PB>aiXUn7|ihQ!kk6|;!}㇒Tᶐ!a5s&.7vr.ȥ+DCC˜듬)qVfͫ)tSА F:ԛs\ݵl.ԿQJ,]U ~E2U|xBJ9]:qH"AdI^UGX#C4^ z.2Zsxʖ[[fnM»%qRdžK@:ݓ' B'CR1~ltFֺ)zV3b0(l*;DH + Bf-w>.*k؞1TrƼ .C}lM.u>d׫&A.Z-VI6W`rao"[K_8dN:M~?bHCcaϧ^9e(܆ul$x- ]bX0Ʋ^(,EO>$RIK@:` 6ᝋPRExbE^) Fj]5mUfwHOE*[1!rhS1 TgܲT\Eܡ܄Ub,nt< uYՠSC ̀@f$3W3'sqf$I`F} fCX HoTI*bo ahNMA F_<RɈaj6?u EOsGH>M04p~0+ HDbM7GOԓEIaA8/Kf W~wƊږB6Ag˳fħ(AtqeU> p>1a:xlqAV&3>;h_ `#iv2)t,:huZex Q6`0:'U)óڏ^µ^}QC:GI;AXrקp'#,#}f~z=؁)c4,$njjiL {k#Ue-s@)xMqtkPNG$^݋j ءpUw5?SrVk=X7ׯ~ D )`D6FHû%,FH_ f{n`35"Rl} 6kume]2UIϋWf gɔH1R3 gq^M'3N&]3eayqX;qz!I?R8}K 4/6]8 ywl5\~M9] Ֆ'XKD79yZM;W#~^Z~c9ÿe5ƣڇ1/Qúɂz'˅lG;eb2Mwlh,{#{i3U6[r_֮e*Z?1y's_\UerFYiO4>#gS }OKPFj*&gHx?8M'u9p1OanYuB4aG㺆/T^V8hfpid y'%q*۽`}x{#CsX3{c|pۖVr)qY Ɓ|90{>R?ЂM&%r4O>#}?c>mH!a[s}XJo8բ; gzhHÖta#FVQ$%;:OD:-:~W dVUt1f%JkϔL5Dּ"WO)j\?7ZaNYQP8xIvkԼ@^>#W2LwG=@%l߄*X,)ob)0ūC&=-dPpe{ؔXSʀ/փDM^SRc箰IzQ3y:L,Y}EIx"BLy7"o@vێHR?[g~э֌Q4 lo"Z:bӵ)U[.ذ1E:mfJekH7^^BE򏷕Z88aL*'bX?J嘄¸5$ri PtIjUG=bmZRkU5>}I|$I8t-*YtLS=GB;;;x|8$jkρZjnbɜC; aZh IRM!%A Ul|x,og펐vNlM8ԡ(wlH˪.DY$OȜ"N)$2cpH5F&WT (y}}aN_>HPRu`»զš!m qZxΛqs}ʃ!maef?;O8>6*q %* t4*MYPd>`"Jߜ$,YQ|ǧ^1N)c+0 =PrR ScBjz=+3oG9G ۧl c/f 5pdjw0čEK Dg=ߑb_*.F1LzȣA=݌7|628<\&^ݜ2nb2HMlgSwڵ^_EQP`C!MdFbEimvsw6ٜ8k渮unFJZdxH?5%2Ā MD^iJ¼3,dOV]IH)u$lm)g;^o}%Łsb890 8j.}0.xF@CF:+T=o8;@w,{Q>ŻN WO) g NaZ[9G:? s:ѮZ*~&52U*kii禂G2np]kz-uqKK6+ȡo]w8𾄋/L";7yR8RA0]2zʼnKYոcb$;#ZA=|>(u <\)6>(xb+Bǭ+Ӷ%SbI" tNX5!ܷ߰3Q J\_J r_QN+O#I|DtI&T GSq}/_覐I0ְ I=83d sNP-ohVb89݀ K~_*ҕ$Nʥ)&#Z( ʷ"8bmkooH,F!mIhJqHѥ^3o.Wlm4㽓!Hv3:FKUwѪ2 t)- lVJހOZ;SDvO0Ir>u7uX ,`T,qVV%;>9r}#5ʘF7gҽC̤w"!BH 4Ӄ܋Qe@dz ,`Fm?ܣLSFϻ~3h]3J3s+ hKkvxv5`~/ФUArYrvl[Sx9w sm{aOSkSTT)܍[5NLN!;^rG9oZ0 &S˧"9xjȌϗkFzF =~ˆH7?_Fw7M)c̹:4zJ>bthɮ__#7^l|k+!"]1;)i$!&h@ #fUlEYI>ؠVAڈ= @ΰQWf>Ԃzm."[dQуs.=t# gAqr'f<+u5!xᝨU"YXN3bԢg=9\Ȥ KOE")ά:q(9Oh}OJőoʟ8>iV*<6v+Z5@@ *fN'gbةV9-y?+ ] GHwpTwL% [.&rc>EXcl9K~kPM,:!cKMMk[x~40޴x4j-KcSfM/3`L=,ʋ|ad۵秲W*_c3{I܏کr$Pp $4uqWiG>@tj82dwAtB&)6S3r6@U'\7ܗRʡFg>/uҴlLΓ&> stream xڭweT]ݒ-Nww 9!k@pwOp}oӯ=jV՚jMG&il sCٸ9j 'Kw7-g'5g!6-"I- g( ZdVnn@ uXXXek ȫ ::C`+Q@# a&`W@"4-AVd8X9A%AVW7 ]@nn }=3rt+W A\_w8bdnP7+W x!#? SO }vCX?3*kFzۿG5?"a (zC{ JM hǩ.<8Oڻf} g%'NĂ( *mzYgx!鋟N ,]3uVr:n"V`W Yc_\5MU)V6'Y*nFAU|*#OƑ׹E]"y&f^ ɛOs?(j{꾀e>=|B*Z#S(S3ƒF1~UJRۆCf~!N@!`\M'~>~o~?8n+ d,/vW;~Y^w#,ywZYg`WJYx#;сteyQ\NJ5jq]&f`+B =,I/Mo x }~< V RT; 7^v|;S =:4$mCMB!m&(6I}#)ن=hq2=(9v9 ﳽ/xުB$p3e& b> zkǿЩνiQ (:sc;ȧdvl QU0#{g&$tj~̵҂:+xWokU /~zOyZך$iVI"iu]wm z-7=qRyD֏ GXoOe/j_¯#|c Nx;E2]gXiݖ=!5/.^]+P9j[_+ɓH&hǶ}[>!/XC010!2bqq|z~ R5-s 4R%"(f /"m \?>8 >,'?O#Iv)S3B}e5C5cg9Ot+Tup ibSn ?*g o,$F7Ss]|}Ͼl>6(yo P#)+&&^DQ!sU%1~}Iq?eGm&3#Rybo8#7|x S0MUGOToqb)6i ɰvP0ѿ\鿖)I"D l|2-PSRUےNseQ[QBX6JpG`0bh2rhaGrX=ؔ 7`0\(T뒋>2';Wۚ忔cQ{ j҆ȄUBUĪs#; eRG=b|svJU.g7PIV8]DXm1o'ZX+tc9,_뚡4Ʒxuͽٺ㵻yձ2nNةi2Hft/FSS2*n#z98?8;ʤݦ l"'c1e*vx%SyNLs'f4/̇{dW N`MNzXzm ?.)anz{k@s崶5al9KNٮCQiH.tX] !V6Y c⚋9P~$q,w1 QYDo"o| Znꁕ?)H{Eߒ"BQ#Tvb>,m1[葀Ct ^y|SpEwݗ"bLb%=(Km.;v`ʎT.j'6]r}ӴX7'k/䁳v^pjضSo7nS$/<;urzǽkPoD\[IWөǪoH N|6 ̂ي٣oʹ~{\by>ag0[9WƊ/^0 :( 2 0HWSr6CW‰};,wu߱J˶RݬB;F!Ϫ1 PU$@P?[T/}C;s4NwKBRF rQ3ږ{U|/Ӷ,,E&@Lb<)-iUG66*Rj-se"_=Xm ['G~zVsz70'q9FeLO9gN#\p95hY2Zf!<5d-sԒ(0LƳ)ʨd'3P`Z>HK bq *(qYI Spmڹn|"yWn!\%epҨ*".+-ig$#7d)i*1rxD6蝅*E@̯\FwXF2# 68烥Uu$1Gd9y畣ۨ[; sXuudWCd:s$]EgDS2;8UDL!nXg-sia[QBP{ٟ}LʥC`R* DgXǔIDlFO/b4;Q ~"rȊuQqs}4G9?~C-rN:0_|0nR{+MSAπEoɰ4&P4GQFeӓf3A+̬iۊ &q'Ŭ$c+NR] ~oNsnG,1wA6tn4ioJgݿ,~!\3 t}v޾.18^G ԩg־s5 3?缈,1Wb ãqXO{nCdF箅@5K5}5LO/ѿPCi PvhmUeK8|(X x@=B;+lX&HQ=2?'-rmHk%'i4R`@\fV)Lzoˍ~g㲨(s{-–z33%/o~}bHIbW6KFï^5iG:.\##RMwǚZˬ%Le?} 涋7NhXdBw0$J&j25ըYP!X!6+G{]䀮u{SR}bZZp4RO7{![%Q_xғGA4Q1ŠBu2}1T9Dޛɟ6jC@fnlox*>,B] <}OJB:$yw\(ZDKsg`x[p1eFCᜆNwv..Яaʐ%- bE7^}mLhGna5ORZKû_ɤfBժxd3pҺ&1~e>?D_!Y~jbz̺a>: 1)í~mB3! 3\=MFO4&WټtDV>W:t{5/C+ 7Ӹœ&ut׷T6$2ToYWRI廋1g.pþHx;hWh몟c\}blQ6.LmoVdyV"As \??۠339E.X1G֨Y?1Ψ#r98DU!%uHQNΚjrL! On\<)1ƘxUkJ#'k%3 zdO^Gh *}5dcU#̪qmc*L~$2M^ (9K,meK 7!EL2 _[YQ?jlys#+/[mbv7Z9Y"<ڥOkOTSv-5U_Fs{87,< S1Uq, ub>ߦ%2Ŗ o[F(`*"5ƀxAۍ2gLAZyӐga +>c&#F{v>t XQcv^ƸȰ I"OBML(g?)es=M͐7 ?𪧽}!x0^5\;,ⱄm@naO_a լ(zUu;yR{i1ߣ {% N/ < Av\Ov%E < Lhvu3~m[߅X ui-Gi/:&}Kn&O9` _`HW,Op?ͪAhWU^Cn+] ý+;al9B s4ImNo5-n=#'9BC85L5 ;BQ?7k;3Noݩ(0{}D4²=FLŪl)5(f[w3.j>1T܎v5 L ؖPyCѨ=w9h@_Rpè1ʎ)\ lўbR2nstZ\m#~§'ȫGőv?N91[@-6(inc,z4qO#v\E([Lݶ1pMy2^mm~kN$w3R EjOu7J$a6ŗt ~?O!^6փ >^D^e*}u=f\gT N8)98X6ÖhPтnjy+)U I  /`b+ GhTKl溬4ԗdV Қ26\&b5KPF4*5lqK{[Qiy1S+?=98u!*4t6{L%au>~~anpAe(NNh{z@*'ɯi!Β;"&f6?6DD=f!X%I~ nLu3f9ZAb5^|Xto',DJHfӤuLA22 ]ꧪr5S( ?X_QDe#뗵Ҩ cn&E3B9x|Ux2#453׆a"qq_s,'ڊձ12vMfC$na6Tm !pMLjt=%;7Fetx)y;1.p㬸 B! t*Rl1~$VDy9aάS-cC=!*+͚h14M @TRpqwBn*C e^ Es{^㥃=_~?hb(h7`[ܮ54;^&G锛E)U1FAQL =3mw'YJK oD:+.Fc8{F}[<EyӦ4j׫I&ZBnf5 YfqKϿzD zvw𺰻T١+()W(a[Gg|R1)OF Hh]stxF@C w=⑿KeuiƒqIE}~Q:Ev3?0N-G}lMT-PVxIzzka+{HԪrFQ.qVBrY,+u%Ish7 ?9OQalOṚY#ݐX} ]N|#t+f[:v^) H}VSg{#yzc޾^++mZe둁 7A<D:0?]dF&ezpItJ3Xy YQnڎt͎9]BÒwrQ6<*.Jxή4SE`(7oKP!;ZbRo3΍o3*=4%Ze|A:y]I_އF:ɮ%WjhI 2̯GIDUHAt}ؕ1e]$s>+ˎJ4׮c]Z+3VO4EC&! ̎0e]n'͙﬙:2(tJqlnxWs.r*`ýCQ(Raf,z+đ෤@2/?K0|=DNqk/7ww(2 #$ % i- 9(CGl~.8_Yx8P0A./c!Qv_aK~ qg iS J{0<T?&3A %(/kD+!N16nF\9ڰpKtX2+#d3HeƩIi[<vhd*rիC&q^{mgM4v"[ru:;MYCϳlGR^) `m3%!a+"Y?CPd/V+`$cK ]k]AKK!NO!ӦeA6;[J쌻*,v>vO㗍*d#D|_^nd" r )n]qж6't-QOf ʆQ0}誕҄?]k\{K2+N0 <(N|7VTRakCr[°\n*"U@Np>"vVv8EϚdDj7U=&7]:6.UDCU:$[7JPkT ϙ>?sF m[c1qP bh"?{tzP<[[FJyBɽ6ib"OQD.}IZXjJI?|/VŃ|zwz ;v鰟tɑ3]'Om#B6<ڬ; i_yU8Tn'p5o~64ڤ dO3 sJ2@BGEg/p9ϋ@ 43TG#lCRwLdgN,t}Qt-1'fm@ĺ|5q iyN]dKV)LA/SVʛJ?.kzETx?.b}:!H|ߴVH1q;+ Q' '?;0!Zԧ<> stream x[oI?iJ$$BXXN3I|8v믪zW8I z2SL0fa1[&A1#)FSGfZHD`F= <3&cƥ9 04Y3+0Y1 ɬHf=LF6gҝɠS8Yh LN2ga0+$0 f^kdޘ= 8b#^!B͇ ɀp1]LhL_Hi@C z1$ǫQ(#ZP3w&" R)ZA$Pf5X`8UGJEK+Jj&:B5)u$2 R:' +;Y&(GR;[ ,trE7*0(q SQbʃ;@Tj0!fZHV%Q'P6HJ oPH{/$B!HI tg`5g ]p -ȑFa s ¡UĖHZQ3Qd! @B@S$c"&ɝFb$EңkZ)i${x?el| L0~?#̉&+`\#fM|d !63MTkp0a3~,1Rt3t*]|k)/GY5a7շ KR>E&~o{p\?N ;T(g Ca͇E(IX.p$Z‚'ҩk#{Zq:J4C݉K:>I2;iƚ5hB @ ?vN?vN;O؛KŞVw;d'g?xL \g Z}&>'n50aaתwu Aq%^|6{'~#0p6nށ9{=e&ם>pFÿ#ZtHOþL;~})vai*X\A4~޴~u9oƪ͓Nz7yp>N)d; rzecJɘ\ P)Vu8$Osa۸ߎ^ :kKP4G[M,JRi@%WaX Z=$PEgx-A]0㵀fञMj>yq2k6`e_/"t^`+]ƼϬp,qWlvi$7'|EuH Wzl)vS3 eOz$ OZ ej-.Iޝ?y:5T!R">Bie+mR$GtRmW[6ՏP }h.շVt)j)JЏ+ٰ>hjSN>z{$#_rn rIݥaXQ^5ƽ1r[5guCPUwkOmolC/\=_t ~E{/ 6ʢ9o-YEop./˃n5fUB[id&?dJDR5%$ad"F B !@SU]532R% I ~ݧkUn}Nl;iKsV^^ߗ+-жZ%_/ 3SBҊ0IAU3p~Z!|Nqr3ҫ\ Z_lǽx±ǟw?zqV:N3v^>nx2/iς"~PD&u5Kon', /R9ܜΔQ.xOlQ?+w -xK7\]gm&lAD\ܺЂ~~q 5=zqz Q2|oTėz}ATܬ']PTʶbm6eC5b/{5BD2kłZ&䞒D E_X'Q5τ'➢L$QV?IdVٰUƚ$;4IdFvQзL%Hp]RJב ƚ+$ 0eJm2:dq"K7ܕr{ĔW uNST̑!qTyED(ѓcɪ ;DHK2yID,gbK\[T$ NZJm@&`ltYϢ>wIf"USlL m{ l&AWdLx!_(85ĆFhT]6[4P 1= c雮kL;Tߌud T %ʣ2 g -&P!1QH4nQ>[&K @eU.@r ve(2!G_r\Th*l}$wZ5m4'jXoTq Ij}۶NY))*:NSew}pM]tˈ t:VP33D(gw>\;{ LuVh+-P2/*wKowgY&oҧT(d sw.rltIP4DrӨ4E&XN' Nw鴖[{~~ғ'8Cc/GW\Anqhn!jA$xߝo0`h`  Y endstream endobj 6411 0 obj << /Type /ObjStm /N 100 /First 914 /Length 1663 /Filter /FlateDecode >> stream xڅEDUYQBBHBK$cOؽ9N']z+^tOL}轭׎~.!,=_7Cm ;L\cp/\ QusqnmsecoJ3:ءܡ;l^aq^;;!܁ǎq ڑA;"qkC/k#X!֕ Nj\pxy,簫patOrv&E^ Êcp?zaVpxp9,a 89 Psx0*qyyB4TAР* 1iP hPA4T hP yd*Ӡ5 ZAР m hдQMi4hFAa4A P 4Eg޳Ѡ c)/~A΀Aw+ :oiB.8Ko]}ʝ5Rm]6bZIkbnb9U,4hIe[KJ;OZ} o^w Z{d?{~g`ϒ g~nV~fm3co5nZ2k^{f?J#׌G~(K`?2K^^JK^6^dfK=}{ɾ=c6tWOZ}Y+u'W(mWVelve]ݵ(ku-vעZEֵ]kYbw-ʮEZd]ݵ(ku-vעZEֵ]kYbw-ʮEZd]ݵ(ku-vעZEֵ]kYbw-ʮEZd]ݵ(ku-vעZEֵ]kYbw-ʮEZd]ݵ(ku-vעZEֵ]kYbw-ʮEZd]ݵ(ku-vעY5Vƾ֪|Fֵh}yeA+yknQj?N A+ÁeZ=ҭU;OZ݂V7{/{`{g~,3s%{ g~nV~fm^K[^7{-k`o{d?{f?J#׌G~#c?6{)K`?2K^^J=ld{;{`_( endstream endobj 6412 0 obj << /Type /ObjStm /N 100 /First 883 /Length 1708 /Filter /FlateDecode >> stream x}G %37ЫRJ "B>~ޕ5ѧ ǻHif?޷6ax+mvюwݸ {l7ečc?AmgoGG۱#Nu }])c*HM1|lw,b 1Ul(P+ ̸~`kQccߨkÅN7=st)0E)(L \ !6`E~ X| (# 7FB#)I1ߓ2/V@a<1kGPiG$A0APA,hPbhP= Aa2o4d ǼǦ|Das4.HRQ% @8n"M f'gP" >-1p! 0r$}GRgQͤl&es"Xv2Bx\?~a>|x3-q^hŋֳEZvRKe8bZErѺϭ^h#h%m]KK-Z=*ُWg%A+c?(ُ~d쇳#coJ؏9{+k`o{sZ2dfK^{؋7?WgiKύ?}7/OA?X$xg]f." Y%/U^wgkJ -Ci􊂲F>ru gC! J|V8C\j#г#kl25];]szh^.G*qgR)}(M_I)3_Yw] nikQ:7 /Z%scq7ōW- Z-b*i7̍X쟫3=[*G|eMܦei L27fYy]Ɛ1b̋V0.7fYy CɌYܘe1U+̦mZ-hv~EJkXdX237c}0cX܌K%fqk*S`{\=w*́Xz>8d,K%s`qꌶ;4.48얳Eُ}irrV~d[{؛גWg%{ -c^Kk^%׌8{)K`/{q\^2dρdsɞ{س='gO%{ )cOξ{`O{ɾξ[`/_ endstream endobj 6413 0 obj << /Type /ObjStm /N 100 /First 887 /Length 3135 /Filter /FlateDecode >> stream xڍZ]6}_cEvRUv*L7݃. oc1)RsrթOIL$J$DЄ*4/Oh^$,+.$~I"Jd9*D)K9lHHP ɨK*@r=L9f QaQ" ÔBXuJ  51J̢ڄY4zQRHj[Xj(9i(BXGL@ SRG%>4$2RcR@FR(n ODԑ3TTC#gjϦ[V/{^6-V +ţg+ bVe_elh[6=9ǜ [rpKómcNzDylÙ=V.]j.hcҥB.]RFmqV/ iԖʊtYy̖2{mE[PVhsb=E{Q칇aImm~ry ◩y[_eK%$Mdv*,;uS%!KcW4TāMx֬—8|IIU8Sq03LVRBB)\J6F$d:!ttaͪ}^LߴV7dqu(1G\ 1#\>kEjcWۅCrܺ z^.[Cȳ-ԱźJB$wCChwúuZ,igƣ:pw[nu8ϔwuwý@j7L9YG,i3.}1.ǷG@=9vݐ+^֏|2.f# uCﮕphc :N=PЊǫ!~Yv|,}P}3w ^nZު!wNcُ0w_^Ӎ]|C=]V9W"RmVF ]If72Vn~ oHme[bԵ_~9!XkO]}c0nԃ~ r_,H nflby\_.fPlcG=2q6jn|z3j>ӽ}y{W}:?\i>&߽㥮O3l+pN>E]k6 0^H.M׫[4s%s BD\]V]|?1b7 E־_4[T%Y%([yv4U–{j0oL>z 7uh!C.u%^k}t2ߏO }| SMa3^x[>ˠAh_k,˓Nߵ醡?LzjwC}7dl=Rhט$zjx98cܸS=rx]? |]KZ7˱L'LE^!IOȥMoQdӲ'=밞 As0'8Q8Werv Mߪk.OI`X8)\n&8~G eЍ53"U,&|'r3č:@*oS/[ڔf>%vG8Sfj=pH{ԡ4=]h bpk?Vc}3MLы> ^Qn*ӲΪҟLe:_=\4im䍱@^ )(ۼOsX/i\l[NgjQLw=+9J=le0|8o*;*G[r4?+_}=2Ss շЃ S/_vNvV`.? .?bV]aN.30t4$+a =5{8ףbDwit螯ߛofPw:@G ơwfMUnH&m'b?0ƥIA"hX8evBjʏ>͞ Ϝ"S$uOBz BTL=^AjqFkJrԠ'r4RXZN,5 d=nArNsv^Ȩ}vVZ=K`w#d<E)#\ҷT70-"P."P#ijyoU#OŻeF}@fGx|SW*CJ;ttt/K9:w' [9|1Ј칺+V:GLw=5)̯XpU̻~D+{3mp^_e_mKx$ۮ|q^Xk Jl=dYt𘭩&VWB,1uT$Cw?ⓖ  endstream endobj 6438 0 obj << /Type /ObjStm /N 100 /First 1052 /Length 4834 /Filter /FlateDecode >> stream xڍ\Ms#9ׯ~_nAenEےWg/(WʗɾItINn*)Kԇj~΋=ǖ)N:oOi.O!D<)b:R7}jS=e7Ř]S5SblOqJ{JS=FPcsU&,NC2*l$:Zj-oUh룎у%8MSh)%;-aYguu]G-G3kֿUf[oPtt4 GԠS.QQGޜHFiGj=(@߼tt::ZBGtH/AGlʣj栣2ki .-Zr~DY[=>f L-z}l ]15P{r+rgvPO1ڽߧ>^}qxo^vd俧A˿ںe[_Fw ~8GPr?χ$k4xٟ|x~ihbmoyx=\I}?j6`ۗŌ.Jۼl<=븭?y[je=o~o\sz>}Cv𼃡var~]Q/`>-Lm>vn.?{j ݞ}!B~?_WpK؇j qJ҃`y+ihҗ[睭_Ǖ/Nݏ eu{s02(dwkoYq9NK._^?t:Wju{8_l&_1W+=ggJ .u9m~n&]O/y,xs?=+mjy4С 8:{yݳ-$29NW&9æ͏?q"}<\X$Vi;+3d̐'eMi|9=ﭢƽ56gmH~s~ uy7z3¸h?\vv);Р%XFx_.ۘPi0T Z6{y97/gx>%Yb9 [8\WG˼7+̀D'jP<^/fmA8VDE&&̛Mt6A~)6T\el"(5&& s6יXGClF&Td eCPfdtƐƐ7~_EƐM eG)DWh~H:S[,FdPј((1 DL*k )A9DB1QA tu#(4<"˛:0 f4~b`~^Dq4~e5sLl3<#(So"wD#(7FP4cTh`]%c.CJ" LPm :S3gV+%ie>(Cj$[[?l3ut dcH覙;+V%b":W /vMUk/Ǡ @ϮgJT+D UJYG6sut%ZW +M*D9̂2 Ɗ_fj1cfuPb$&RARmv EB*"!', ¶Q;W1sapY , E`sBPYA ̡uT[n~hi,|#J֗2Yc՝?kqpYZ"dYZaU2J@d5ԊYfnDv66bp, 6"=,ֈj148,Eo. #3GCwx¢14^WJWl^Dz Yt , [H-az3s+[ypjYX;x (!NcAEsQBYbgmeUQo2QR %9%"-Y(1Yeƕ̳ ʠdPQ#Y[%*:UthPR*2~='TPW*9^ V+UTcDwkeՌfDv4#$M!Y3BKfߴZD61X\׌ĶfulK "xv4 h$3o$WZ4dSB1^VY%A &1J QRl Ǐ Hu$~ŭK&q)q7,՛^Z{B/bxq24AV,CMP kTV!*k0[g_xpV) "q3n&MbKpBwݾ"_  F\qp)åOGƬ&O@e9M$R2PY2ܝf; 4Wg#Y[\Gx?_!.sr!YGuϛ=~7ށ guK>-qj#mC4GXbt8; 椹/M B݌0K_W4K+uB3/hυ{ X<.\ u]ąF~,hWˢT*9ۗUeU8{[쁼w47/} RBB2 K_s32'ehw틆huk #6뢣iM.р^ $.ȓD`O>ሺ{^:BۗRj5iB\-v qq#*!lnC 80E/::Bk#mTGh*ǃV*qrwhn4m:̆QhҰ섦* MUL'>R| y$цNf*  1 `:9J7]-I1t˳_L JYa**Z߆d~8\'6fVN"TX+0a|&qE? @eIα**0+u{l\q:,vU kebA>:^5^^̧ ӱ}sLX߾WW%k坾[*m0{VX{VX{VX˰YuSi@mӰTBY{Sث R9X(y3+`oY{}SX{}SXMԵ)5aV@gGko®^;ڙ΄Fv&4t33^P@q ڙWNWvrPr%X&QBQ9vͦ+ٱ^ BBɱDsEuw!X2>r0r!>eul *\nY=٣ ֗ؼ!#׷.p =|"g:z UpA_s\9} EN>uSxn |Zo\MTGhu?|"_躴0i8J%zG6u;^q笃tIsY[/S-6 uon4m햽1!q_[CY5GXq8RН8PН9NM#iCaJ\H7={%奛fMG馣فtӭ_E3+`,@B+v8߳5p= v[vz9z}Q, q;zUsa%~K~:_j8+v%7H ,ROƎhטQ _W|)_|EW_DFF  f7AWtEЕ(]t%JWl+DHS^G݆(`D+Q"J (=E`_\q2L K ,SR1(Ca}sLS,dOI,G u@lMQ5ʫ b\vڄ؝j"d`="f`Lnu!\eB솁 B JSp=N=+n2B[6Luip=ղ w(d޹7LuK7G"{$LQ"j.Sںa@ endstream endobj 6539 0 obj << /Type /ObjStm /N 100 /First 1050 /Length 4195 /Filter /FlateDecode >> stream xڅ8*R%| --X >L*r>qMqnz]~h~5Sc?ڰdGɏi8zzUjvѷC.vדcЫ8PXk=kcI-{s=l]OAݛ/Շ qǶF;_HVVbNOz.c'?F4cq6ڷ=ݷhsĴvm7kXL3&qEuuL9 m=vt޺asc]՛tvD1ܹzxM^ɲMuׯ՛Wo:HV՛Ɇ@  zsP5}kݍ՛Ǧmjr=be~\zh5GR qv4z+|e2 6A۔HBz\W=um=7_+oc_3OLm +x\j]{*GmOQbde[MYwi?~__~o߮dI"q>F1Qah0Nnm\ҩ1`l?/&?>yFƭ n3ؔ6+$ҁ9 #~jq۵]i+i3ҴEɍHSi*e?渉k)i*BFs ׁO8fY_R;OZE㍳тlds9W`VB 19%F:5jCԩ ӊv3:h2b!mHk7P x~K{Ur=#n܈s#bH_jJRJrJ!ֹ U)8\Y?ΓVj;ŋZ/o(A|pL {OJ+F1b<6 d,RN-Sed2mܨ06n4W7q-:Zu8`4n0:5"N @R'sbu_/a2i &=nZuk_a<~OAۨ\+a{P2hj9?԰w->kXkXw? B>,B>y2a!V)'`T4t܆TƍOdjV.Ռ}'R03.3#6 jCvi"J]TJr#<zK@5hJk OjZڼSu燺VC]x&X uLJVC]C] ZxVbQzPzPzPZHogFۭhAY-"k{Qdmo9nZɅZj!ֹXhuRKRJ!+Dg-ӔӔVyVr_4Z;G'^:񜩣>wRg9JKq(-uƝ%L@G_<^ O>y䴜˯F߲<_ΟziV`JFK8\Ge@8\{y/e0]Kড়α]_0r~E{- fCj6NZ9+slWخΡ]9?Csh0]Kg8#m^g| *dZdq~8vp ڍA;>8vo\r9?j4> BMXZ$B5aVOnv:yٸ_ͨM`sjS> -?pɫA{u&Ŷ-PE^Fmlw/[%N)\Ѥ:pM+ﲍo/Z%)Ey_eQ^@&J?crP)sl]6>\ۿFg]-SS `kXAU*5:EoZ8*(0ƥX!RL'qdЙ4֊J 0D\$J03L)h0 3SD\irJ&8(g0s3:3bf> stream xڅ-9 )j$ H h\ޟdyKH]ʳ^ە,uϜW~9˦_1΁]!h^]S\W*ȯcYc?`%9KaJόƼtwKᗉٍ̦1f3업):Gz M91I#vrƘ[oXZΙ%D,g~{kZָ<6.ߧ9G~yԸ{cx}$W1\:&|iIs;}TJWr_K!P{48'n,9왝S/GSأ1<]!}'o=]pf'h6e=&:Ovh'ц]-{ gأ ?m6hS.휡69{=sG["g_}Τmp(Oykp滔hWwg4٣E;Ig߇9-&kZ>Eڇ6qdy=ڮm 7ͥz9=Sow{.Th?u&cMh=Ko7_ӯg_I;kuO!'ʵu}2͡o~>{woF2l VSM8T3hF- !6;2j q h̦dvQ2 Uf3۔z6,2j5kk(w *‹ua2&>1{OM/tXTP62I5- _mbwX}ED·H@FW-" ŴIdi E[@G-R.2*"McUfLJDVf'8='8=\DnϼIhis7?ɋ :?$r /{A%N^( q2 ) +|w:H >2Ť""yxZ*sGVNx Ѩѩd7] Eљadh\TqRgm8i^s+E ͩ9hT hinse-{%Y\D> PVv~XhV8?SP< ~!H*puvo<UorFp+Z & *YׇDV^Ha4/xA&lrNE-}Xhe\|8lCp xDsVFq,^Q|ؓ_p{p4-NkcU :(+߽ca 1hGr-;Q~+?{kvqcSyOO8xi+a[?S/.rb/ǎvE?, ~!".rROOyY(ԨƇVnS3Oo> C.o>U-}Xhen;wk79\ ~o:7LhU1kVŗ)-πoq||]w,te|1s/)^2޸&f$jO=>4ڀj{VhfΥ/:_ÌVhWNn H}S@'$[|__de<Gd p!*;؜7 "LJLJi>oH[, P:>8>t@}p|h`:}-:Ŝ=2N P>8=4@}pz_>[Vۇvor|h[nѿ9*B+hK)TBdPy@ª"ӻ.п{}߽>Lþ$>"߫K{wa-ωxOĿ&]y<_=>pϿ{ODV>,4{IHHHH22;>$2GG_g<(}\>\>\~t</[lQ\/|at<V br҇T>?} ~`Go=Nx)e<x/e@8dka,"_?H?[#N.9N/yd󓎓/>@t.*F* uΛvή|hh\ :G{C\[zu~"8;wwo~9~="~~MBK9~%-"[ʭ_OO8??ᗏ b -킟p~ ~3O+!Ӆss?G}/Z'h^Γ.S'vstNY{Ω[%)פsMͩ|Àb7{b3/FZEV3f(]Fo2 `|Sd\ z_\ꇲ\ԥP`|U3 !RcZ4 LMS L)00!Z fXt0)]2E0>$2 ^Jy 22kQ^^!22eaN2kQ\e.D_MAyMAy qQtzs~H`rؠ lؠ lؠWB_M3`Co\I/G_KI9M lR``s[qd|ߛ! endstream endobj 6741 0 obj << /Type /ObjStm /N 100 /First 1049 /Length 4239 /Filter /FlateDecode >> stream xڅ\5m2[ZI ?A"m"\SGni-JiZt4<Ч {FԟZו?U:>S++O+~ͫm}6۷*JzWẮVpQYݚ?;>Gb b`|ڣvy(戰Ǭ?FqOϦ+ tj k].~'9n|f;RWoO^<1j}DiFvg†؊]3lk))HiTXǔx&eL2ū)WZV3֎\L򵆭Ɔ>tfa fmmr=fo$Fk^U++1+QfoZVb^UV_JY)*ViWS]-Lͫ>lZ1_iB *X:ܠQpNt 4AKTtS` w)wșh.zh=Q&pB3e)xI% r| &WZpR핖:nKo4!X + 7Zp]/ AS`  7*,notvu}I&Q&Qq{vvSđq,&]֯&ϡpK^K^,]ɻNˀ\B %T\JZJ~5+˭'~:~.0o'S1Ao1Ao1AoG޶5ۋ/1Z>{;4)w)6RRl(Av\t{q\oۊlWXdA`P;զn;ҳX4 =GhEi|s3_ds[ؑ^dG{mBA4Ln _٧- D /9]Y<sPYDhB:)E޽LbkgqbN12^xa X5T SsZ9 ̲ɻ]HҴҬ1:4i9CX=w;ѳ4dZ{qVL:'j%3ʂ8j#4]YM jVqVqVqVNԶ#|]衒DlĉZP-BL9 ~c#MY /MA2(5 @e"Ǻ饹bM>!RK/Lһ Ӗ]ȉwhv j0$ g&)9I9w4r3qGGriJLTl3LS 0dmi&S BJ4n(A,!S8U%fK3aG~B%!7K!9Y A2ٛe.8lY!' C8D yKoaH`n1pp}JǸ T9 k, b kXꅤ{܅$t*?aDsaal5_;FhBNg0T/T$GqwJRgʑ[sǟ$w+ʑRA^;0 @x { \}ȅA/fLf'o|w8oߞfe?T0?PpB @ م7o4MS&FCf`nQ&F2^xa~x'Zp!X T0` &)"o{&T0GTV` *L!XSD:.,K/,5N5*BFS֨` "7;T}I&nAkT0};(GܶR];. Î_^)_fR qPG.J:vq7Gf"h%G C=2*sKk2OQ7-B+ + K K+Xۊo=bqFڨ^+NBf K߀ \;,WN%BN%Kyo3Fu*XН KSR(\bN\b]XK/,sv*XN%9T\bN\b=4=o4!Sr*eKlP ".xailP&Ȼм#B i6d> stream xڅE*܈ A"m"\SIq4X:99%cquяs]?BvdRGiʣjGU9oλb+-Q֝]h涮hYV˽[ѭ֎ZX?F9ǘ7\Wve]1/a'Bmv^}]8]|7}n%jn+;[5m93i^9Qeԥ"ϕncJ22ef9IeY]#[S3 12{\ܲ޼ ~:{4~:{ݫYE;c6Ӹ^CL\dr6C\޲R<\;.m5)mt6+Ȗ̶Xm39u_ \Psx B\MϜQkAD|[%wru.o?O?v r=:BrrBBA(Wo/O~A^K^^Q'" 1Mb.cX< ̗hpF){]G""cFLtbzvXPN&$P2Ug c[nTaΆܹH,R$"eȼc=)n!°+ך:qnQUP \ `oKBCM]؟6Xo6E dyYW~٣zAU5u b͞1[Gyb%kU/o*|yW!Ǔ5ͯj ~UmLݩ<[nł~AN |M{{;^Nl^ӹڡtv5MCizzMSgNh u5k||]?}؂|~y[4ݩ߀_75W`3q[߀M}Wǘvjyy4 74? ~C3 􏝝2amo ~L~a?~3&̣ͣ4?i~?0\'[N[쬔߷ۭP̟i73mf~vv6ffTO;>NgE'ϴvͰkV6zpvvx=gEv5fe0jm\U gU< XKfuj oi*aLgi331f6~Xv_֙6޸:S δkƑ62kyo(cΙvܸ9kfδ]˙v81f#fW,s7-B`K`3mp]2̴IƀYߜPǽ`ʹƽY0o1ʹ;y6/ݫ-:P96fڢlq.Mޟ=LO/iᥭ#܉W2-i$I\.\.6p$lM^lM^%K^/^.ynIWM%&/&/XLI~5Q2y7y5y 0_$)~'S8c ㇆*Uފ$24LָF|oI@-q{]{h)]/-q\=m2^F#%}EJ`는z,rN^vOH dOȑB?Hl<ߕPVk<[bvZQtXFL ĺ bCƌc^#7tn[TR%"O)ԈSJDS{@R_ JBb!lTTSk lT'YgzlTGQg:;Q!߷n~mN~mU[Gtɋ#oTK4ܨd.uD:K`Ի'lr(eۤl?YD,I,H,H,Ke5e\{,岠\LKeKeKewKeeR.˾Iٻ],rY꽐rYꭐrYꝐrYɋrYm rYrYݑrY͑rY꽑rY@(mo~R{[;4ɋrYEweiPm{@\&Q.KCI`$0erP.K~2rYF,]\.qStD(oO=R.Kr%0̐B0C.D̷& 3$0>0̐hvJ|"!`\"|"9paZ RL O3̍ɋ L .a'f%9ϝʻ˭KΛگ&Mm橥p;FrynOOnL^~N~Sv%fz䘷? j=y {?/eoBPK>*V%A|nNXP~.[1ċW;+ԗ]ۉܹ^X1'd,uKbCŘ?F$rJ\)qA$$Q)^tL9ì FmKI_J<Ėѩ9+)C̦Gf=+bv t(X#tDgH~QY1_xV,G|o%c:z)ٕM_Y177ܨUPioJxT{$0^&ә82뮆,""5"H(,R!F]V(ޮLJ(8t3 ݎtec&Uԫݣ~|ΊAJvV Tbo:R$Km4"K(R!.]-Utz٣~(1y碨txv`RsQΦǏٮmD2 b<&pD=E^\_Eg}uoGڈc+mıE^Tq|ɋb7(' M endstream endobj 6943 0 obj << /Type /ObjStm /N 100 /First 1049 /Length 4323 /Filter /FlateDecode >> stream xڅ\ˎ- ߯ez[RYdxF`/PEQi6[,բ()]EKwUZў~\Ǖ=K*^>ҕOvmVqW2Fr^ڸWʒp_(ʭ{%^#%YQ\nKZq\ʰK KmHK{ ehT{8cD1^媡@Cj揫rUjjjӮRZactV30jzU\qsg 4+cH1 sQb&q:4h 4=eإv"-WL?{MLI񬍖FKhpKѲ 1.mlC|K-!Fc$d\h,F1إ&՟ѤKhi,c4 ɨ%E62B$`6ZQk>b*vi9F%!jF3ϚL.mhMGd C]' l& wfq8`fSL1 O) OfN~\| % &T@ˎ!rR4>e1!kIP3^<`;o>}Ͽ~W*&EVuDe Yf4DYD 5 ݧ?~.z} DXڨ"a 2Q0QU4rl齪m/tL %"e d2فtŴW+BVA)5&wNc?,7Q%P,^@PeW@PeTAUFPA x>0˒S2VPe U0TC Uj( >W8-$c 5PC1TPc 50504>2뒋޽lew([Լ@٢J~ѽ@62av[Լ@٢5o>PR@IհJ߱`<Ho "5CH%n@) ܽOWLE Cժ/TPTI^PF@PBP>@Cޔ'!l!ZekP̞ ^N l!!Vºﺷth^ m w Le+X)jy>6&+Mo=}`eVq]D.Ls3۸Eú[fÿ%qarkV[kgӔ:JCǛ}d7|Y=7cyoMoc˨|uz?coNpᶷbɼ7v; =:ZUo~d[ vG6}mthkssfh_+?'|9rtn=?ɸWVJzF)_fo=u|6P}ӇIfQ ϓmƿAz?m> stream xڍ\Io#ѽ9|8\;5_cr[ \RB l-PdkT֢gck1v=G [#"[+[sm/NqN|`..{)[።gk)b1D.Fl-e8ubkOe{Z_7O{<+yv_VgQG@D,@ Z"^mڽ^G/nW}tɍx$W0.8n$>? `*s]GVTCª3)CWZ۽Hǡ+LaT C 1hz;J˻s\pDUJATM#YDy(0Q*Cw0ΑTnk"RG"7NE4@oSۗj{io.3DqDADQhDgQyԡRmZۻ$L:)7"/)7Ze*='=ؾT3SX'])Gئ*/L`w]no$4In5]*l}:Od(2Z-A.C]ںn6]@eD9YQ'9}V:xN7.%#ږh$"d$mRZZ. B1 Bm/y5u 涎ɣn!q=!# c0#uqP0aF=H$$BՌTjT.`MR{8%! heIHj2Цwt*&G6D@SkkR[nA{SKHZ.͠?6'ۺ]Ia&a '%CY|?e} i<2u4Rf;vypx~Kjan?M]!;n?mo/wۿoa;n^:wq=MmNo>nwۻ_YG͗p__Jg?)|V凟O<鷡l8^9gS5>vywzE::7</T\,n9]$N5C Hy=1y*@=@9 g3觇Ozu;my=~=xzb_^1,%8QױH2ך<>3j'V0Nx)yn;(C;W@͞T87O>5}:1&Ǐ ^S^.ԃc iU 9:rtno:4l[M48SO! cvzz6mr Jљ)9PmȑFn١<.yWg&נѣLIj(󪡐fb#bQfcGܛG60|Q7QYq)FMD{O}z>7Mf  HRZI|$xVJDaJ7hTe%K1]~8X6fE2ޜQ^XZ+m\ bU%}" P--`2a!I&4&iڑGVVWP?Z]{,Sҵ3!}--vܮX$ ugnKD+w-j-5be {hbˣudȄ.Lr̄&̊ zxeCk7Kcv[yY--ź<6#oΤΘ`E噒RkLd,kEPMrtִG W/T뒖8iwp xYm8TƀBgӜI8_t70`o"Bm"{d[ٛ<{?^p 6߀r0@F ޞ+!4 amDLd҃;9q '?ިleo_FZ\Cۋ:Jb#DW:ueFf2v鲩9S&Sc >`fmj`Zj.oh%MP^ȄLh^ȆȤ_.7Blp"Fg!D#r 6߀K1"|&~\/ď 9µ3../h WmjaDӆ:~\ͯ@)%j/a_% \uybhD^@W[8>#ďO oNM)0>Zlࣅj//VZ&SrS o JUDLEʡaܙV$\ip) rRU@́^nw_z*v_N9.f3X.Tvwz_yk/_L|x~>|/f W*c>|o5iC[y l$i,x%CRǻ7Ln[$kki}.Wn{opQDagMtѴ ϖawfJ4~"c>ADm|8mi-O;UI.c-RQqəo|y]B}+ۇQQGE5Q%1~<^qwG~9I%KRh6ǩŘ)4RhICԫqyb`R@I%Nr %TNV8Yd%9O'^Ɋ&+gt!M`wydQ@ETn֨ZS{nTQEUUU:VU+F/kjU`UUV爵r*oIFz>%:o ^ A Z3Ss!i!khAsU>Ol:?r ),yIw^rWG϶Ƣ׋ME.L"}StkڔDcQ^$TwQ"݃I`W tFnC/\:eWjTp-\p{-s4*Ϭ^MWSTuw%]i~uj!LLݹ en,j׼cY}Vuc&ݘ+~CUzx$K uoOt%`ϟdFH:ƟU\?SR\˒ ub7ǒҤ4e{M|u,?K,y endstream endobj 7145 0 obj << /Type /ObjStm /N 100 /First 1002 /Length 2884 /Filter /FlateDecode >> stream xڕME\ =wëU - 3)XM7vi^?޺lO׭Rk:JIF)6 KQx*Q#5ǴGqL&9Z{U0>T&ߴ>?$OD㐨$$yT%e9|T5{h1J)>ay}uOd|GʞFX*]ͩ6t[5Ҏ=~~5fi }gGMR?S-gVRyhXM kzL0M4ٓ1^LI2ƋQ,1Qy9,h>>xoGSGURX=Qԭoj6h7s6_+9>cMۘ>CHcꢊ@jCrh|c8MVy%::Ol}eI19QʵrP:sЈye [Q4yþ~8ӹ?W8=rcRK)ʱC}9+vɡ#69Eԭ&W&|GjR[}woboqJc;qPd2|ׇ/??8(+M&2#3bSVUnƀPИR(1 c1Q :Z U}x]Kv8WWW.Ud/Y7YLnUUUa : 2ֲPXXe+ U:ZvSkYҊDWӎ✶[5f]/Uoy%4V4&UW8 |w;K͖N;_/e•tBUªbL1v;&6ca v`mBJVoee`ul;]IpݦMoVwv%:N̢w_ LQ(+)&~y%)VPR~%/U{\g(VX3XVeBT.D1U0kj{leP+֌+XV%1Iz^hb RkUP5zt *պ]EM`սiZd8pV[,7i M@imL2U8mw9Y;J+ֆ+0`V5e<&V WPVݽhf]lO0Z;YUkV4S Bb *Uս]g-gJVUa8ur[جY \6m22+1XAV!pGn[\ie%+`5j _M-h@ـ Pm/ٺJ TۆFlf؀| 4mmz@b#45hj;.ظ+S נAS!p9q3kԀmS$JS*Lmyf?V ׀SF!pWϫm `R&^$ndq3b x ,m=ꬺ`b#45hj{*Z`lHO 6y~bzAc#@5jۼ;cF5j նqw\綏ۿYWHS 6ym4!Ad#P5j۰;>Ad':Xu۬;>O]CeNuշQTȳ|Wt:pm6i$ s:pmhq \6 ZTV!Af':tu۠2#Oat:tm z[, ]':luۘ_֏wH$Nr:lm/5u2;dvRVM:MbfNuշ!w\4W[*;Tv2U͸1EꉙdNuPշw\fZS0 U6l㞃dNu@շ)̗v ىT6Ov_%wqgۘSP5-$3ZSV_b^cc8, 89w\,``J0%4 &!p'dTTTf3mmnU\`)c)c)3Յ97O_>=2Мp?o!OLK4_h|eJ+]i=yߢJW:ЏYi|5ŜV_|1M7:W9[Ow??˭¿w|N)44GIB'r[\2:G#e^Py~%_/ŗ2J[s&}Ϸb;c;}᧱~|~G"b4l63`t:/ow-+W1F Qg:kIyr9sipꬡ 1ݢWg(2E_YycƸB)YvA\\M"}VKlOb}|^n ܔ9OoP!w{+ h+?S ,ƿ>w?7V nN? G2MpWlRL;ϣs_\, (|CW? yN~;yp?JUuLt ,|m "@\:Π@c+HGW#  0m]8z;c1p,X>_<=_++2& endstream endobj 7262 0 obj << /Author(David Schleef, Frank Mori Hess, Herman Bruyninckx, Bernd Porr, Ian Abbott, and \311ric Piel)/Title(Comedi)/Subject()/Creator(DBLaTeX-0.3.4)/Producer(pdfTeX-1.40.13)/Keywords() /CreationDate (D:20130723174524+01'00') /ModDate (D:20130723174524+01'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012) kpathsea version 6.1.0) >> endobj 7246 0 obj << /Type /ObjStm /N 16 /First 148 /Length 592 /Filter /FlateDecode >> stream xڍOo@|=6,?V4"ـ.ΓK>< p r#xC&R,l>=RyA ?-7Fx6$\ [ brid3A&)JV$\ QCuD>&IC=۪FKF,KILg<ʛE$QIXaphI27y#hX[ \R 9uZЌ\Ku&9ʢ ˶8caaa2 NcD/w}Fj  UGf\AO:W=G!n++XR]Hw_u6( )' MRpN5i>>e?LR6W.iXFEzC%`CIcC 10c5K1h+/俙^.Jʱܷ$ZAX}:38f N$/pJqɗJ ^wUz< OYǴ/ E 5]|f8`O'E_ endstream endobj 7263 0 obj << /Type /XRef /Index [0 7264] /Size 7264 /W [1 3 1] /Root 7261 0 R /Info 7262 0 R /ID [<071976169CEB70C6B20C35D84D0680FC> <071976169CEB70C6B20C35D84D0680FC>] /Length 17115 /Filter /FlateDecode >> stream x-yp|sL23ӓ93l6r%J,H k,k!B%͂T ڏ7|t79jjjj~&IWiP[[y_-ZOj4^]hflejj5 -fhQ˫\ )j74ӰJuհF5 U;vUjծh5?qY3Ծ]jmEMY-i)۠Z[spNs;PkQ;;Rjg4wnUj5^j4~j'5A{j'4ښe?Yv\UK W۠vT3Zxjk?vT-2z6cԌvQZ<8ٗު QWީšWՌT˨ipV۪[3yWM-NqIiUۡqg\Z xY-b ^֬hU U ow^fQZ|VبVk]Mjjk&tZ/Ljqk쓍jI}r>B>8OEG\O뿓:d5+jhk֫E3nVm*xcxբc4 MnT֢ۤNnV۩VCj+4YlS;/;ԢC,ӔɝjIn8Ry^MZ>kռ>yY ^GM}''oS?&ujXZjwռ[:}j5uɇj{I}:S5.[I}7/ռMN_]P{O58jlZkƉͦ%ZjOjjⰪ?Y+[%P敵fԫrW|h(7-5 Z[ТJHPUj뚫arM3k" W5[!a֫mT}t%:hf;h}i=^V;tQ8-'5>Oh}q#zQm9G}i9wzal_>Taxgej'B#x>vh>j#>jW4_K5Z"൚䖭o୚w얈;x e}5 >_Zx(WP߮˖UWfԫв^|\mYU9VQkltk5WBJ-:]F3 BհF-͸Z5ZViUAL0*z5/[Rq"p4Q-:q&جLKت+4AZȋը/Z4aZn]P}ȕ\5^5Zj[5A7jTd6uk5Q8T+5hjգ5G^Ni5/Z_5@hjgOYTLz~'KpYM?j^ju?h^jkހjNT֪^jށj^hރj}kP͛W+GP쫦|Oռ6|| j~QIk5~jzCs}{5kƉys<8ճ_ƛjj>7aUv^1%P:fԫX|Wh6AqW/ RmBMm -jq75WBJͫY 4T[훯k5j>b7_Z]jW5[!敺:Xf6E0/i׌yj 6ygok> \>4ΞY_vVvygj> vyAi>U;EOjj'4a8GW3]uj4|Zj>wpR-ůŃV|X3Y5/nqռ4ԌV=td_V!Z:5$_W{W3RMړ4Eny'nޭ/NqO;5@zc'T'P ܦ^E#[[5[jwPVw9 >ql:}0W;#N5}V0Ws^7ҏueju: j>_ٟI\ϧԶ:*M}~Z)qd"4ひj>e4]œ\UKinPp櫧nݷߢoVsM|Uٺj+4YoS/;Eu4TۡNwFM)߫z9N0_|Kk=|ieza5k5ju)^OU};USg?vIMuj>k^6uIͦ0貛+~?fK>n~^N2'{[A_ zS/矃8נͿm=eAߚï@Pa4C I7񻍎lRse4WB Ұ VZh, 6 ۠ h v `?pq8'0,Kj<#:?Ni8g p.eW\pnmw܇cxO<^kx#|$5'J_ݾ؝:vׁo8v75v7o3v/an\^ ؝R^ ؝HnC^! al6;vB]RsdzߒԼ?ݰ> p18'$p98"\p57&܅{pmؖC%q<'sx/7{|/'Kz.9葃9葃9葃9葃{!{"w<ceRӽ?IDDHDDHDDHDDHDDl G@zG@zGzGzGzGzGzGzGzGz䠇{tROqHI0Cy=# =# =# =s 3I# ="s/߇iaEXEXEXEXEXl񏓚o=JHl ì0 ì0Ɨ0V?-s ϩmIYlzy/1d6RfkuI_h{6Y٘Y ?gٟeYBgݚ^xBlJĬ0l;qݞ8/5+b1&28[}]\7Yy G@b1+q"ClƬlƬlƬXzYaqYjg$ɲ#^-fEe֫ŬX̊ŬX̊ŬX{]=_N5g"^(fE` Ŭz0|k5@-A=4@#42X+Z`% `5 V:s_RW? |![`+l6;v. {`/p!8 Ghq'$p98|Mx݋p . :܀p n !><x 9 ^x =| >WJ<*8G8|=G$9#׌<$WW0aG!~G!~G!~G!~G!~G!~/y5@-A=4@#42X+Z`% `5{|_br{cCBzF8g`m}`3l Kٲ Fllll9l9cpNI8k+Ny8Us W*D@ 6܁px1< x 53| ݞxltFwaCnHESr%[r%[rn閜n閜n閜5 *ݢ-*ݢ-*ݢ-*ݢ-b-b-b-b-b-b-b-b-b-b-b-b-b} NvnDtKDDtKDDtAtAtAtfg\6e[6e[6e[6e[6e[6e[6e[6e[6e[6e[6ecC.ȆIn,׍_`&M /p@j=FƽLy) t/0 L/0 L/0BKcz!F1cИ^gL/x3] tLO#mrh7~2`ԉXcH|?m4Z)6}Ĉ! > > > > > > > 9qjZ,'ɟ]%\ R W "YYYY0 9h'q5AZAZZ8uF $P uP X /\nD>i4C aEa?/Maaaaa^ r0 Yaaaawx+<Lp;Hɰ Kɰ      0' 2|aXaXaXaX{C?gR"%bacԇ962}#aaaaaap`3|Q}Ձm `w[ݶtf0m%ݖV!m0p͇6õցAm9yωځxV[av Կv `7쁽8>#pq8'm;g p.eWDnM.܇3xf t9}|66Buc 튑vx#iq4v|]FRh좱+>Ec]kMREh]`3lVX".޺x3^eEo]u[o]u[o]u[e]uQEYe]uQEYe]uQEYW JG#.U4Nvǡuz4c1Eh3?R%]/A4]O:"t)B"tJbuJ7\jv*_=)AT֪W72=3-LOSN:SN:ꔾ:ESNQ;ESNQ;ESqDSN9MS:SN:jbu)VXbu)VXt)9w)~bpi{ɻI_BSySM7EޔW)]r)S\N3oW?nTat~#F7v%.-0vӰbGLXN-ōVpӾۑ2CkȏTs/먏T= 8*ޣhLƠb _>~r>Ǩ>*Ќ:,^K~S6J( qMB5hI]ߎĨ1SuRGSݨ1!/Ru`ZAʸ jSoāT\|4Z 23k0?c4?&0?6&uǯmmvahO7 cp $u9nwNmsb"L^9+.% &mČ8I7Q/%usVb3i(1$&IGEb&Jrb&HL#SI]AY=tWu֤>j[t0Ahv0uPQcNj0ŦPRx,B;84vaS4vAcof1uaRf,ut ! G[u0`G1:k&߻qa T73 =7P; 3M3:L333z 3z 3ϴBLmf}RL>oh<gbv 31IC 3t=C 3L0=:#M3 3t; 3P;C 3P;C 3\2Q'Nĕ~OjgvjgkgtћazgH!ygH!ygB3; 3;7O:h&X_sq˰" +!iXa d`-BzFa lm!fJC̏fEBf@;=;cpNI8 sp.E|08%W:܀p n ><x 9 ^x =| > z?H ?H2X+|A9|AOߵ3&~+"0(? ? ? ?sp7c?H ?H ?Ox?u+@5`AdA$~A$~A$~A_ߎgE ?H ~k5@-A=4B,VB VjXX uIģ\R3y`3l `;v `7쁽8 6x LcI$)soRVIYo$eUFRVIY[$emERVIYG$eCRVIY3$e͐BRV IY$e}UARVIY $ejO )+Gj)}G)+{M8=| > >#`>c>c/ "'}"'}"'}"зC#>#>#>#>#>#>#I7lJ>'GDODODODODODODODODODODODODODODOD/"3c>c>Gx%Epjј|0?7qFW)VVHkB7)ȩQ9pMrr%Bpʢ ))K)\\;Fpz ))(,rMrٜW)) (\,ryrٜ)))W)))s>$KhLW&Ep5q )W)*\J,rr%rrrrrqB )JvN999r88eZrr%ޕuʕu%rujx))K3Ő2D&eH`, -I8wp RI__U@B+dal 18'$pbv90'}0}(8+`k``[p]Cq>Cq>C+x.Цh?D`HD`HD`HD`HD`HD`HD`HD`HD`HD`HD`HD`HD`HD`HbY%b!b!b!b!b!b!b!O/!b!L'6D0m`!iCӆ(iX)n.4'7) #6v0mic "`Hdi# L@60ma´i L@6v0m`i {dz"´qiKץ70@i# K6/m_X~icK^U(_'_'7/ KpniKܗ6/mp_ྴ}i Kܗ6/mpߪq^'P7/mH_ڐviKח6oV}M rX+!iXa d`-B6iع9_sIC_>Fa lmaNa}A8cpNI8 sp.E \pn-C@rb tOi鞦{iiΧ9|iΧ9|iΧ9|iΧ9:X9{i鞦{i% 3uۓ}?M⧉&~i⧉&~i⧉&~i⧉&~iΧ9|iΧ9|iΧ9|iΧ9O?M4ӜOs>4ӜOs>c%'==ҫc Y{4q"&~iΧ9O?M7w` XeXe%X7W/˭o_ VٟU@B+daO~x܋Ol47& [`+l6;v. {`/p!8GpNi8g k\J/U܄[p]!@ ֳ Xg?(OIJ;Ow?tOw?tOw?t_}YtWw\4s~g~g~g~g0Ow?tOw&ixjtOw?" tOw?L3t?~~~ݲ8COXXEH"݋t/ҽH"݋t/J/ƊJ/:J/It/ҽH"݋t/ҽw/Jz yq0"ӋL/nI9Ŷ/r"狜/r"狜/r"狜/r"狜/r"狺L.⋜/r"狜/r"狜/r"狜/r"狜/r"狜/r8_|dLE9_ԻEa]Ի^{E0 pW^ij?'3py\+p 6܁px1< x 5>i?>g_17cz1ǘcz1ǘ[+Z1H#y1~w1~w1~b-M+<떑cq>} yy4Lݍ!~18|18|p.ccq>C@P M hX )H*X k k5ik@`]ˣr6f[av!֥],?bѹKX`XVn18V[  ct錙p32fē˘ 1.c\$Ip2&eL˘1 .cIp˭dL˘1?/3Ǵ{2&eLs˘1-31i<I㖉hrn[ƬYo2feL}˘1-c[ԷoS2eL}˘1-cJ[Ɣ)mS2ef˘͖1-c~^ll2febGbGbiGbAGͬ˘Y1.c"[f.l i(6}-cZk2eL_˘ 2nC 2e̎1m"[Dl2&=Y BC4B,w8~w-TB4SU%hMoealkp| W[x#|Ic/GO?h?@3J|8Ȁl t0=L8/.3mt=@t=@t=@t=@t=@t=@t=@t\ Hn]8[IO8H yH y V`}**+beU`zt=@t|,jtL1FǴjqVCdZ i5DVCdZ i5DVCdZkI/B]4@B+dalOp>O?AO|sX5@-A,pu,K+,n|V$D,am`Qv5&&kLL֘11Ycbd5&&kLL֘11Ycbdm50&k`L1Ycd 50&k`L1Ycd 50&k`L1Ycd g,Wp!iQ.eW܀p n' _+oqjZ9k欥aZ9S[9k欕?iSNOcur-˜,sֲY2g-˜,sֲY2g-˜,sֲY2g-˜֤q, ؞4hmm欵fZ9km欵fZ9km欵\Z9S-՜Ts*Y4g-ƜsbY1g-ƜsbY1g-ƜsbY1g-ƜsbY1g-ƜsbY1g-ƜsbY1g-ƜsbY1g-Ɯsv)ˤw~%_ȜrٟrnhZ9kuaΚ]{%^bz%^bz%^bz%%b֤i?pK&T{)V{%^{I^ұ${I^bz%H^"y%H^"y%H^"y%%^bz%^bz%^bz%^bz%nZ?vx^{%^{%^{-KKL/1KL/1KL/Kt/}j Zzh&Xa4C a5 YXU~+lHvލfbM[l| ll mCpQ8SpY8\KpU[p]' _l8 aqt "`Xqqqo9q9q9[?v`w1w/"0.!qlj'~)q$M7aAgq|4x'MOC!ǹqaqaqa0p>QZH7@CCMI}QNVފYyӆV[O+oe|KwXdy%gaɛ`]~#lͰ6Z^; >ow~/Ô|a|q1Gد#AykȑǸE_GykxIBpL%߆;pl~'A> |ʿނ _+lI$ӽL6I M@w/6'Mw^j{^j{^{W&M)^{e#ꥶxɠXIӟxBw5{^{^j{c+j{cj{cj{cj{Y=4yLKroHzo/Rk^/-$RKm/RKmoj{^j'I/Z<@w/ݽtKXt?ј,;7 po?AR~ė٤ )?v&M]Iӯ_$˶&~-~ڗ,d|)~:,??Loӡdx?NB6~yq^ja&ű=VƦ̱YW\ڤsV kellolt#6챇tl#VzZiǝG[^o9{[ξn9斳[n9{ܖs[~m9ҖK[l9{Ȗ#[>l9쾖ZΞk9{촖Zj9쪖Z^j9{젖Zξi9얖[Zi9{쌖3Z~h9삖 Zg9{xY>g9nYΞf9{dYe9ZkY^e9{PCYξd9FYd9{b9{XΞa9{SX`9 +X^`bU~/_$H|"E/_$H|"E/_$H|"E/_$H|"E/_$H|"E/_$H|"E/_$H|"E/_$H|"E/_$H|"E/_$H|"E/_$H|"E/_$H|"E/_IVM| +W_!B| +W_!B| +W_!B| +W_!B| +W_!B| +W_!B| +W_!B| +W_!B| +W_!B| +W_!B| +W_!B| +W_!B| /F:h&Xa4C a5 YX! al-Al;a=~8#pq8'3py\+pu7܆;p}x<'sx/7{|//U1^tC%Kė/_"D|%Kė/_"D|%Kė/_"D|%Kė/_"D|%Kė/_"D|%Kė/_"D|%Kė/_"D|%Kė/_"D|%Kė/_"D|%Kė/_"D|%Kė/_"D|%Kė/_"D|Hޖ#y[m9Hޖ#y[m9Hޖ#y[m9Hޖ#y[m9Hޖ#yۮ䷬V:X9y`3l `;v `7쁽80p 8 4p2\p 6܁px1< x 53|@|*ٿ @| /_ @| /_ @| /_ @| /_ @| /_ @| /_ @| /_ @| /_ @| /_ @| /_ @| /_ @| /_ @|mpL|2eė/_&L|2eė/_&L|2eė/_&L|2eė/_&L|2eė/_&L|2eė/_&L|2eė/_&L|2eė/_&L|2eė/_&L|2eė/_&L|2eė/_&L|2eė/_&L|rUƇUH6Zm7Zm7Zm7Zm7Zm7Zm7Zm7>L'+~zpO endstream endobj startxref 685564 %%EOF comedilib-0.10.2/doc/dio_funcref.txt0000644000000000000000000001306011752451652014211 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.10.2/doc/calibration_funcref.txt0000644000000000000000000002733511752251143015730 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_file 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.10.2/doc/extensions_funcref.txt0000644000000000000000000003047011752472152015637 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. 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_SOURCE 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_SOURCE 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. 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_SOURCE 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_SOURCE 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_SOURCE 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.10.2/doc/glossary.xml0000644000000000000000000001370311752502704013551 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.10.2/doc/install.xml0000644000000000000000000002742012017117603013350 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.10.2/doc/error_funcref.xml0000644000000000000000000002165712122634440014551 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.10.2/doc/mkref0000755000000000000000000000451411750003026012205 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.10.2/doc/comedilib.css0000644000000000000000000000015011562232662013617 00000000000000/* give a light grey background */ .programlisting { background-color: WhiteSmoke; } comedilib-0.10.2/doc/FAQ0000644000000000000000000001056711562232662011525 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.10.2/doc/mkdr0000755000000000000000000000500511562232662012045 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.10.2/doc/dio_funcref.xml0000644000000000000000000002557012122634440014171 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.10.2/doc/drivers.xml0000644000000000000000000054121712122634441013366 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-6208A Author: nsyeow <nsyeow@pd.jaring.my> Status: untested Manufacturer Device Name ADLink PCI-6208A adl_pci6208 Configuration Options: none
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_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_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 adv_pci1710 Advantech PCI-1710HG pci1710hg Advantech PCI-1711 adv_pci1710 Advantech PCI-1713 adv_pci1710 Advantech PCI-1720 adv_pci1710 Advantech PCI-1731 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 PC218E pc218e Amplicon PC272E pc272e Amplicon PCI272 pci272 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, PCI272: [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 PC218E PC212E PC215E/PCI215 ------------- ------------- ------------- Subdevices 7 6 5 0 CTR-X1 PPI-X PPI-X 1 CTR-X2 CTR-Y1 PPI-Y 2 CTR-Y1 CTR-Y2 CTR-Z1 3 CTR-Y2 CTR-Z1 CTR-Z2 4 CTR-Z1 CTR-Z2 INTERRUPT 5 CTR-Z2 INTERRUPT 6 INTERRUPT PC214E PC272E/PCI272 ------------- ------------- Subdevices 4 4 0 PPI-X PPI-X 1 PPI-Y PPI-Y 2 CTR-Z1* PPI-Z 3 INTERRUPT* 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 '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 PC218E PC212E PC215E/PCI215 ------------- ------------- ------------- Sources 6 6 6 0 CTR-X1-OUT PPI-X-C0 PPI-X-C0 1 CTR-X2-OUT PPI-X-C3 PPI-X-C3 2 CTR-Y1-OUT CTR-Y1-OUT PPI-Y-C0 3 CTR-Y2-OUT CTR-Y2-OUT PPI-Y-C3 4 CTR-Z1-OUT CTR-Z1-OUT CTR-Z1-OUT 5 CTR-Z2-OUT CTR-Z2-OUT CTR-Z2-OUT PC214E PC272E/PCI272 ------------- ------------- Sources 1 6 0 JUMPER-J5 PPI-X-C0 1 PPI-X-C3 2 PPI-Y-C0 3 PPI-Y-C3 4 PPI-Z-C0 5 PPI-Z-C3 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_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_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_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 Written to support the PCIM-DAS1602/16 on a 2.4 series kernel. 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. See http://www.measurementcomputing.com/PDFManuals/pcim-das1602_16.pdf for more details.
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_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 = signle-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 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_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_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_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 PCI-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 PCI-6251 ni_pcimio National Instruments PCIe-6251 ni_pcimio National Instruments PXIe-6251 ni_pcimio National Instruments PCI-6254 ni_pcimio National Instruments PCI-6259 ni_pcimio National Instruments PCIe-6259 ni_pcimio National Instruments PCI-6280 ni_pcimio National Instruments PCI-6281 ni_pcimio National Instruments PXI-6281 ni_pcimio National Instruments PCI-6284 ni_pcimio National Instruments PCI-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.10.2/doc/man/0000755000000000000000000000000012173531550012012 500000000000000comedilib-0.10.2/doc/man/comedi_get_subdevice_type.30000644000000000000000000000655412173531507017223 00000000000000'\" t .\" Title: comedi_get_subdevice_type .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_SUBDEVICE" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_get_routing.30000644000000000000000000000673212173531540015673 00000000000000'\" t .\" Title: comedi_get_routing .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_ROUTING" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_unlock.30000644000000000000000000000611212173531514014631 00000000000000'\" t .\" Title: comedi_unlock .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_UNLOCK" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_open.30000644000000000000000000000631412173531511014300 00000000000000'\" t .\" Title: comedi_open .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_OPEN" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_set_max_buffer_size.30000644000000000000000000000663712173531525017377 00000000000000'\" t .\" Title: comedi_set_max_buffer_size .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_SET_MAX_BUFFE" "3" "07/23/2013" "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 The new maximum buffer size is returned on success\&. On 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 \('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.10.2/doc/man/comedi_get_n_channels.30000644000000000000000000000631712173531504016313 00000000000000'\" t .\" Title: comedi_get_n_channels .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_N_CHANNEL" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_mark_buffer_read.30000644000000000000000000000765612173531523016632 00000000000000'\" t .\" Title: comedi_mark_buffer_read .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_MARK_BUFFER_R" "3" "07/23/2013" "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), 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 The function \fBcomedi_mark_buffer_read\fR returns the number of bytes successfully marked as read, or \-1 on error\&. The return value may be less than \fInum_bytes\fR if you attempt to mark more bytes read than are currently available for reading, or if \fInum_bytes\fR must be rounded down to be an exact multiple of the subdevice\*(Aqs sample size (either sizeof(sampl_t) or sizeof(lsampl_t))\&. .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 \('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.10.2/doc/man/comedi_get_buffer_size.30000644000000000000000000000626412173531517016513 00000000000000'\" t .\" Title: comedi_get_buffer_size .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_BUFFER_SI" "3" "07/23/2013" "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\&. 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 \('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.10.2/doc/man/comedi_trigger.30000644000000000000000000000634212173531550015006 00000000000000'\" t .\" Title: comedi_trigger .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_TRIGGER" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_cancel.30000644000000000000000000000635412173531515014574 00000000000000'\" t .\" Title: comedi_cancel .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_CANCEL" "3" "07/23/2013" "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 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 \('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.10.2/doc/man/comedi_command_test.30000644000000000000000000001204612173531516016020 00000000000000'\" t .\" Title: comedi_command_test .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_COMMAND_TEST" "3" "07/23/2013" "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\&. .PP The meanings of the return value are as follows: .PP .sp .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 .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 \('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.10.2/doc/man/comedi_data_write.30000644000000000000000000000727712173531476015505 00000000000000'\" t .\" Title: comedi_data_write .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_DATA_WRITE" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_get_write_subdevice.30000644000000000000000000000626512173531522017370 00000000000000'\" t .\" Title: comedi_get_write_subdevice .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_WRITE_SUB" "3" "07/23/2013" "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 accessible through the device \fIdevice\fR\&. If there is no such subdevice, \-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 \('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.10.2/doc/man/comedi_errno.30000644000000000000000000000731512173531534014473 00000000000000'\" t .\" Title: comedi_errno .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_ERRNO" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_get_board_name.30000644000000000000000000000632412173531502016266 00000000000000'\" t .\" Title: comedi_get_board_name .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_BOARD_NAM" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_set_gate_source.30000644000000000000000000000755412173531543016526 00000000000000'\" t .\" Title: comedi_set_gate_source .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_SET_GATE_SOUR" "3" "07/23/2013" "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_SOURCE\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 \('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.10.2/doc/man/comedi_get_hardcal_converter.30000644000000000000000000001062512173531527017672 00000000000000'\" t .\" Title: comedi_get_hardcal_converter .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_HARDCAL_C" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_get_buffer_offset.30000644000000000000000000000643112173531517017023 00000000000000'\" t .\" Title: comedi_get_buffer_offset .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_BUFFER_OF" "3" "07/23/2013" "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 .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'int\ comedi_get_buffer_offset('u .BI "int comedi_get_buffer_offset(comedi_t\ *\ " "device" ", unsigned\ int\ " "subdevice" ");" .SH "DESCRIPTION" .PP The function \fBcomedi_get_buffer_offset\fR is used on a subdevice that has a Comedi command in progress\&. This function returns the offset in bytes of the read pointer in the streaming buffer\&. This offset is only useful for memory mapped buffers\&. 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 \('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.10.2/doc/man/comedi_do_insn.30000644000000000000000000000645512173531476015010 00000000000000'\" t .\" Title: comedi_do_insn .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_DO_INSN" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_fileno.30000644000000000000000000000661312173531477014630 00000000000000'\" t .\" Title: comedi_fileno .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_FILENO" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_get_read_subdevice.30000644000000000000000000000625612173531521017150 00000000000000'\" t .\" Title: comedi_get_read_subdevice .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_READ_SUBD" "3" "07/23/2013" "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 accessible through the device \fIdevice\fR\&. If there is no such subdevice, \-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 \('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.10.2/doc/man/comedi_get_maxdata.30000644000000000000000000000637412173531503015624 00000000000000'\" t .\" Title: comedi_get_maxdata .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_MAXDATA" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_apply_calibration.30000644000000000000000000001323512173531525017040 00000000000000'\" t .\" Title: comedi_apply_calibration .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_APPLY_CALIBRA" "3" "07/23/2013" "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_file\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 \('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.10.2/doc/man/comedi_range_is_chan_specific.30000644000000000000000000000631512173531512017766 00000000000000'\" t .\" Title: comedi_range_is_chan_specific .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_RANGE_IS_CHAN" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_from_phys.30000644000000000000000000000711012173531501015337 00000000000000'\" t .\" Title: comedi_from_phys .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_FROM_PHYS" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_data_read.30000644000000000000000000001074012173531474015251 00000000000000'\" t .\" Title: comedi_data_read .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_DATA_READ" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_get_buffer_contents.30000644000000000000000000000634012173531516017370 00000000000000'\" t .\" Title: comedi_get_buffer_contents .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_BUFFER_CO" "3" "07/23/2013" "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\&. The number of bytes that are available in the streaming buffer 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 \('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.10.2/doc/man/comedi_strerror.30000644000000000000000000000770212173531536015232 00000000000000'\" t .\" Title: comedi_strerror .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_STRERROR" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_sv_update.30000644000000000000000000000611212173531547015336 00000000000000'\" t .\" Title: comedi_sv_update .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_SV_UPDATE" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_mark_buffer_written.30000644000000000000000000000774012173531523017405 00000000000000'\" t .\" Title: comedi_mark_buffer_written .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_MARK_BUFFER_W" "3" "07/23/2013" "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), 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 The function \fBcomedi_mark_buffer_written\fR returns number of bytes successfully marked as written, or \-1 on error\&. The return value may be less than \fInum_bytes\fR if you attempt to mark more bytes written than the amount of free space currently available in the output buffer, or if \fInum_bytes\fR must be rounded down to be an exact multiple of the subdevice\*(Aqs sample size (either sizeof(sampl_t) or sizeof(lsampl_t))\&. .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 \('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.10.2/doc/man/comedi_get_cmd_src_mask.30000644000000000000000000000673112173531520016626 00000000000000'\" t .\" Title: comedi_get_cmd_src_mask .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_CMD_SRC_M" "3" "07/23/2013" "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 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 \('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.10.2/doc/man/comedi_loglevel.30000644000000000000000000001014112173531534015146 00000000000000'\" t .\" Title: comedi_loglevel .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_LOGLEVEL" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_get_driver_name.30000644000000000000000000000635712173531503016501 00000000000000'\" t .\" Title: comedi_get_driver_name .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_DRIVER_NA" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_arm.30000644000000000000000000000656112173531536014131 00000000000000'\" t .\" Title: comedi_arm .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_ARM" "3" "07/23/2013" "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\&. .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 \('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.10.2/doc/man/comedi_maxdata_is_chan_specific.30000644000000000000000000000632612173531511020312 00000000000000'\" t .\" Title: comedi_maxdata_is_chan_specific .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_MAXDATA_IS_CH" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_get_cmd_generic_timed.30000644000000000000000000000747712173531520017632 00000000000000'\" t .\" Title: comedi_get_cmd_generic_timed .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_CMD_GENER" "3" "07/23/2013" "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 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 \('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.10.2/doc/man/comedi_get_timer.30000644000000000000000000000704212173531545015324 00000000000000'\" t .\" Title: comedi_get_timer .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_TIMER" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_get_gate_source.30000644000000000000000000000724112173531537016506 00000000000000'\" t .\" Title: comedi_get_gate_source .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_GATE_SOUR" "3" "07/23/2013" "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_SOURCE\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 \('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.10.2/doc/man/comedi_data_read_delayed.30000644000000000000000000000745312173531475016750 00000000000000'\" t .\" Title: comedi_data_read_delayed .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_DATA_READ_DEL" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_perror.30000644000000000000000000000744112173531535014660 00000000000000'\" t .\" Title: comedi_perror .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_PERROR" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_data_read_n.30000644000000000000000000000641112173531474015566 00000000000000'\" t .\" Title: comedi_data_read_n .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_DATA_READ_N" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_poll.30000644000000000000000000000651712173531524014316 00000000000000'\" t .\" Title: comedi_poll .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_POLL" "3" "07/23/2013" "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\&. If successful, the number of additional bytes available 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 \('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.10.2/doc/man/comedi_to_phys.30000644000000000000000000000756312173531513015035 00000000000000'\" t .\" Title: comedi_to_phys .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_TO_PHYS" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_parse_calibration_file.30000644000000000000000000000734312173531531020024 00000000000000'\" t .\" Title: comedi_parse_calibration_file .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_PARSE_CALIBRA" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_set_other_source.30000644000000000000000000001035612173531544016722 00000000000000'\" t .\" Title: comedi_set_other_source .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_SET_OTHER_SOU" "3" "07/23/2013" "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_SOURCE\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 \('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.10.2/doc/man/comedi_find_subdevice_by_type.30000644000000000000000000000674712173531500020053 00000000000000'\" t .\" Title: comedi_find_subdevice_by_type .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_FIND_SUBDEVIC" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_set_buffer_size.30000644000000000000000000000730712173531524016524 00000000000000'\" t .\" Title: comedi_set_buffer_size .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_SET_BUFFER_SI" "3" "07/23/2013" "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 The new buffer size in bytes is returned on success\&. 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 \('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.10.2/doc/man/comedi_dio_config.30000644000000000000000000000715612173531532015447 00000000000000'\" t .\" Title: comedi_dio_config .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_DIO_CONFIG" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_to_physical.30000644000000000000000000000706112173531514015660 00000000000000'\" t .\" Title: comedi_to_physical .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_TO_PHYSICAL" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_dio_bitfield2.30000644000000000000000000001011412173531531016031 00000000000000'\" t .\" Title: comedi_dio_bitfield2 .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_DIO_BITFIELD2" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_set_global_oor_behavior.30000644000000000000000000000707112173531512020212 00000000000000'\" t .\" Title: comedi_set_global_oor_behavior .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_SET_GLOBAL_OO" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_get_n_ranges.30000644000000000000000000000632712173531504016000 00000000000000'\" t .\" Title: comedi_get_n_ranges .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_N_RANGES" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_command.30000644000000000000000000000674012173531515014764 00000000000000'\" t .\" Title: comedi_command .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_COMMAND" "3" "07/23/2013" "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\&. For output subdevices, sample values are written using the function \fBwrite\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 \('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.10.2/doc/man/comedi_timed_1chan.30000644000000000000000000000626312173531547015527 00000000000000'\" t .\" Title: comedi_timed_1chan .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_TIMED_1CHAN" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_from_physical.30000644000000000000000000000730712173531502016201 00000000000000'\" t .\" Title: comedi_from_physical .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_FROM_PHYSICAL" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_set_filter.30000644000000000000000000000730312173531543015503 00000000000000'\" t .\" Title: comedi_set_filter .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_SET_FILTER" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_get_softcal_converter.30000644000000000000000000001176412173531530017726 00000000000000'\" t .\" Title: comedi_get_softcal_converter .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_SOFTCAL_C" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_reset.30000644000000000000000000000623112173531541014462 00000000000000'\" t .\" Title: comedi_reset .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_RESET" "3" "07/23/2013" "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\&. .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 \('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.10.2/doc/man/comedi_sv_measure.30000644000000000000000000000643012173531546015517 00000000000000'\" t .\" Title: comedi_sv_measure .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_SV_MEASURE" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_set_counter_mode.30000644000000000000000000000676612173531542016714 00000000000000'\" t .\" Title: comedi_set_counter_mode .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_SET_COUNTER_M" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_sv_init.30000644000000000000000000000675412173531546015032 00000000000000'\" t .\" Title: comedi_sv_init .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_SV_INIT" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_get_version_code.30000644000000000000000000000711712173531507016664 00000000000000'\" t .\" Title: comedi_get_version_code .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_VERSION_C" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_set_routing.30000644000000000000000000000711412173531544015706 00000000000000'\" t .\" Title: comedi_set_routing .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_SET_ROUTING" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_get_subdevice_flags.30000644000000000000000000001532112173531506017325 00000000000000'\" t .\" Title: comedi_get_subdevice_flags .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_SUBDEVICE" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_get_n_subdevices.30000644000000000000000000000616412173531505016655 00000000000000'\" t .\" Title: comedi_get_n_subdevices .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_N_SUBDEVI" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_data_read_hint.30000644000000000000000000000723212173531475016276 00000000000000'\" t .\" Title: comedi_data_read_hint .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_DATA_READ_HIN" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_close.30000644000000000000000000000606512173531473014456 00000000000000'\" t .\" Title: comedi_close .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_CLOSE" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_get_clock_source.30000644000000000000000000000757312173531537016671 00000000000000'\" t .\" Title: comedi_get_clock_source .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_CLOCK_SOU" "3" "07/23/2013" "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_SOURCE\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 \('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.10.2/doc/man/comedi_dio_write.30000644000000000000000000000723112173531533015327 00000000000000'\" t .\" Title: comedi_dio_write .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_DIO_WRITE" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_get_range.30000644000000000000000000000655312173531505015302 00000000000000'\" t .\" Title: comedi_get_range .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_RANGE" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_dio_read.30000644000000000000000000000732212173531533015111 00000000000000'\" t .\" Title: comedi_dio_read .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_DIO_READ" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_get_hardware_buffer_size.30000644000000000000000000000746612173531540020371 00000000000000'\" t .\" Title: comedi_get_hardware_buffer_size .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_HARDWARE_" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_lock.30000644000000000000000000000656512173531510014276 00000000000000'\" t .\" Title: comedi_lock .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_LOCK" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_get_default_calibration_path.30000644000000000000000000000674512173531527021224 00000000000000'\" t .\" Title: comedi_get_default_calibration_path .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_DEFAULT_C" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_set_clock_source.30000644000000000000000000001033412173531541016665 00000000000000'\" t .\" Title: comedi_set_clock_source .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_SET_CLOCK_SOU" "3" "07/23/2013" "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_SOURCE\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 \('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.10.2/doc/man/comedi_get_max_buffer_size.30000644000000000000000000000660012173531521017345 00000000000000'\" t .\" Title: comedi_get_max_buffer_size .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_GET_MAX_BUFFE" "3" "07/23/2013" "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\&. 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 \('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.10.2/doc/man/comedi_do_insnlist.30000644000000000000000000000665412173531477015706 00000000000000'\" t .\" Title: comedi_do_insnlist .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_DO_INSNLIST" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_dio_get_config.30000644000000000000000000000660412173531532016303 00000000000000'\" t .\" Title: comedi_dio_get_config .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_DIO_GET_CONFI" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_internal_trigger.30000644000000000000000000000736212173531510016701 00000000000000'\" t .\" Title: comedi_internal_trigger .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_INTERNAL_TRIG" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_dio_bitfield.30000644000000000000000000000635012173531545015763 00000000000000'\" t .\" Title: comedi_dio_bitfield .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_DIO_BITFIELD" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_find_range.30000644000000000000000000000671612173531500015437 00000000000000'\" t .\" Title: comedi_find_range .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_FIND_RANGE" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_cleanup_calibration.30000644000000000000000000000640012173531526017337 00000000000000'\" t .\" Title: comedi_cleanup_calibration .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_CLEANUP_CALIB" "3" "07/23/2013" "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 \('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.10.2/doc/man/comedi_apply_parsed_calibration.30000644000000000000000000000717112173531526020401 00000000000000'\" t .\" Title: comedi_apply_parsed_calibration .\" Author: David Schleef .\" Generator: DocBook XSL Stylesheets v1.78.0 .\" Date: 07/23/2013 .\" Manual: Comedi reference .\" Source: Comedi .\" Language: English .\" .TH "COMEDI_APPLY_PARSED_" "3" "07/23/2013" "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 \('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.10.2/doc/acq-seq.gif0000644000000000000000000004410611562232662013210 00000000000000GIF89a5,5̙H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲJ0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjzUׯ`ÊKٳhӪ]˶۷pzKݻx˷߿ LÈ+^̸cKL˘3k32ϠCM5=^ͺװc˾ ۸sͻ>Uȓ+_M͗K^6zM1S]q~N<07Ͼ=3vO>UG?|'3He%iDhQLeX٥azZ!V"^8bٝ4ζ P֨ccn8"$"McG٠Jd,:a@zXXvO9f%aNh$=Z9&QIL\te)%MNxO]]*h:r)(b i蟘^gO}fiZIhkjz鬔mS V>ꯨzg*+Ib^VFI'H2:ƺ"&KeֶW !Nq-ɪ i^G毰Ɖ+V+/W?J7 4[iL:' ZrNv4c@PYA M/"%YHF2B&3"f3bM<%*rQ/L&g1z-k_'K+ȖKXz%eG&2{UgYUӢ%lZVĚGuvQm{Ȓ5~x`܂ܘ rqRh3tujz.:U{{KķTTF>>M0WHNqTNVWNp8SXF< ep8wa"p<|#]Lθfpw]5x%汐K`|/Ҕ4&W?~Wt " 8$olEa6ϒ,P3Jӆ+4>T zr\*/>Ufڦy~Ot 5,*j[4[iۆW=Օ[ّNOz)MzuS-:j7mk}ns>3Me^D.oڕY(Ss2x3DO+s~{}JoOըDPލm:5xΣw&L';ڨm^{b?xcH+!RS{PܽWL>sq)K_IOm36XlWyGppG|fYЁvhvwpt5s8|tvf7GTwP (w(|vN}zX'X+gUy%Iur}!YVoƀUFu<([E)8vwQ&׃\8F?PzhXk,Pv7烹rȂ5axkP^QiCf|Hm(hUXsBNxjt~(ՆÕȆ 8P8uy{興1'c𑋺(腬E؇g؉x؅&ӘuF(8&%flcxوub`XH[H_mxd菏؉(7Ym)㨉8kؐti8r$y%YI،划Q+ɒ)9*)F#g7(#n/ ?̨ǐ^KFi3+T I~xHً=)\;`HFEnI@WYt+[%ɖ/r9|;eU9sO镮A - g먖ɉ֘ɑɓɔIy)}nyz-_Ltx9P (H625V)s)m7mc{׍v&3ifAq5ٔ雲192]!׋qɞ֝cewYAii҆ٞsc)ǝi#Z긖 ziJ+ (*~Jy "jI#bꉟy)l48ʛٕ@.ځ0 !;Z(:Z/sbIVELD/jH=ء]ڤ_f9=Zf Cit.p_tJU:\O iq*jWuDwG3vj9Wq3eک詠o33ا2Z(dʣ7O#htDŽ* }5XJs8jcr} h;Ǭ2)꠰9HswKHVעhp7uNU5꺮.)o}j('Ji؟4ɕzKHSnʤw|Z # +&ɱR|{r~皭'l}ZX7<6{49T;KMԪJKXZj5* x#vjtʢ9e8k~Juz?Ǯ`K+G5J:S+:P |ʀ:Ȧڵ)TV۶yg qD{w}%XtYr{A;O^QۛF 5}˪ESq(Uˢh{+s dzda@{2{˳[;+*ꨘ˲9۪ f>d ۼ$Vn7٫u ^8(*ۭ _kZ۲HiƩ˽hՋ+k+R i{B[d&"+kM; %Ѿ ;mJKFQG- )'< [3[[|8 h,|5.2j6|Gѹ'Z3ثcLT̗^`Laٚi$, 10F2`,tV,urdwh2ȄN('1F/)5 žRW*țVN|ʪ"<"iIAǞTȅX ʡ˾\̻˰l[Yg2l Lj\-z)\=O˞k ZB+z,C\ʹ̹|+ς3Ρ,N+, ]lϟ}ѹ -}\ϴ ]mL|Ҧl$] +MZ,35-7M@} !?-9i9|M L1_- K ӵŵO<͵Z7Lwy+[׵d)VݼljiΎӬִcmLܪå7֡Jzl8֗2MQӠ_maٰ,Y3, c)3oa]D-PG/u"ܼ}a-ۣ\0א ݎ֭3m*8܎B]/ĖR3 ~:37/Ԣ/slJMhnw=3}]. dvп">8 ,,̝13(>**%c;+=}ᷛKNJ=>^SnMa\_r ./]I.LnU= \2oײp~G8_Z:ewN"gA~`l~d ^[b>~ʽ¬N{0n| -~0eL0$./N.hd޽} I n`uvH ĎlDŞ0ny^./PNN1. gnܮ/.N8츍5'΁2n,h֩2o VM13#|>q^N"蛾/RO.Ӯ.c|=ڽ:/5OXON_-49mLu~ߦNNBoNl߇0pv|VO8Cȅq Vͽ܉>` E*L-z.u]myS^?_ӾöɟjϿN~lQdrA@@ DP…0D%VĘQ#ËhQȍ$RJ-IDI ˗aΤSNoӢPE]iTR m:1hTS~hj՛]~VXe͞EVhWrjW۟zM_fĊa&2Wb^ƜYfΝ)W:LϥMFϢbL<ԵȎgVx0ktq.unwi\ܾÃ/$RaD3mg8q#{n^yoz6߷{`< 0@ -c@"B 3 ڰö'D31E4ԉEe{CZ QFspFy$G 1<CpH \I%3ɝ=+FE.˖3.2G:s#at34i: ϊ; ;s?rВ .P-H7-NQ$!UNI)eS,щ(IMQ7-UP=ed"kV\{U4Wg5oN앱_W-T%Y3Kt6OuAlcu!Y[\m]uWdP ]Ь7*wv_uބX3USu D-vzr7Xc?9dGLW2WfeQb%vfKۋ?uTohnj*FYziM:jPDs2Ǧ:UylVsX{f[6ڴ玺욊fMTf=NO9nU;r'mWtLR|qRM\_PW_}wqWvl3>_W]r-~ ->]o޹XϽ]|Wy_IY_n}]5MzKO~t60 8ݫZ~ -A k yv> e|$ /| hІ<`JlN3ЊH<>ш0} ް^,ƪ(BbQL4#?w\;8IWC-.~pds ]E91T`ɸD R# b4Y>օ0zJB >R|tehGnMw] KPX8E[jNhc8d&xw[f̈́5r 's͛MsXς$77 MT9[K`SA:ǩͦR+i?hgf MkɟTɔy& 'CP\+"<6$* /)ZQ3CΔ$(Qť9jjSvT"v䛂ErfKyQiwp0L.h:]嵡-k HMr;P*WOv~<-cD<Ŗz _VxSVӪZr$1^린nO}1']XVpwcX(}W !_ɤ퓧dGF>2ʐq}QF"#YewG+jflü\,gyaaKiIYF-lI\sx+bS-./2φns93hN^,KLι7=f4b ,喛B }U}hgB{#ATsg$ Yj 9ةd8ۺjLނuJ5/񕳱KQ+lu't7]G붭4čM%HOz=휕ŭYY~T/E؄CRx^!_oo߄k/NUS+swrZ\oB}<47)`.o W9xE N8FzmbIy̙qw[.Rws#;.8IJխ{Z]g|EZj_Y{w,NmG߮h[8T)n̷M|rtmN&?kOq]yg=u`K}5=Shyמ!O1{)Џї?|ھ~﵇QwnpۓػwmMڽ?"y???(Ǻ0k/C@ꂿ+#˪c#^i0s@> ' lSlA ļ?+'2Et>S4 7 6\RA> A"ľL%Z!Sb@k'!@0l?ZtB==QYHK-\ʒIh{lȎ Kx4GFJ[FDLKdJ$G4{#K@-zEE$Lt8lռnj'$ڄLͪd˭DL$͢\NLT7TNrlNj C|Mˬ(NXF䞂̚MrIl;L9HSO?@Le2O-DPOƳ \KE5L?#<ѽPʸAEiP 8 ֳΣdCD NʘQ=X/{'h˺|Ѥ2HK(uNŽR=( R)S*M--8]RRq4h0~DW~4iU-w׈҉ŠB,5T4uMWEfD)SH=XxVG1HTÒmTOuS1Ć5Yan-X}ytٙ4HzV!=֖=[\\VYQ:ڔ`=aXڕém%?Gz׹uVw%z G[v۱mRrĭ۴ƪ\%#MRjLܻɆTho%ΚXe[B܍=8ڬ\N+YSZp}[mdݧ-G|[}]KRdʼ=] -Xm]~_K^BXuC[Z:n\1ߌo|S ^?]] UmܕW[{SY]]`;``@K `v}U E &^VM.\V}-O_S+5-"V 6im[m_VWNbe'b#f>-\&8Օ)F mBcS@6Q 9U1>V {`Gc?e<=.^e>\b5\Pe {"΀UvHfԙ-ff~dYe@qNc2rpdFe9X6笘QVvDUcf޼aweL^Uaj^,N_fsV6hUh|~5Fݱ{6Ox猞^!6ig&eNebChYviU~艶goygjhn钆erӝòխrje^6X=mji>jfyhk}Xhhnkk^Vig=RfkEԛ~k% N6&klʮ`.Ĺ^VɶD>iFmFgn&Fl^ lg>̾lfdm~͎mVfF g&^fn]-lkΖlfmfnnVbm^6.ono:nnonFnm+t:8pol@   lp pmLo&o\>da o !'"r5$W@%w#'r,+DO60q.r,Oee’r'o9W:s#<'r*/ >O= )>WCrnG1Ҕq2Wt(oJttBMg NtAtTOϊMgrSB/uX?tFpzygJ?uZu`Oua_ukq7O'7%W>sbvgE6tfvMvjnDm?Oþ>@վ+pj?rro)wo/ww=wBpqw_Fw?/h_ 5}1xD;px@N_g򔷉xxڰyvGxyzz/%7爞s7Ltx  {:wwzw{z{xEyo|#|B|Cozw|W{g|||Էsw{ o}?}t'o}v|l&P~y/}'7xkO}'Ъv~'ywÒOڏ|W~,X \aB&H"/Nl!G3bX@M%ȑ&+jTy&Μ='Ϗti(ĢH#beH"[TS_bȥb *K̭W?fM ԦnKe+ێf͖Uw/`[+ݰ]VM wqGPefI5ssh̝G3$ɏ+GNtuRx녌zڦqFkݱ-;5po7}s7ЧGϘ1îf~kwbIdL$JrY{iFZ4fegRTӏho9ڢ Jpi^ h}IUQޙҖ6aR&s8)kJz蟲٭*Vi5EFKhw+gjJ6k[6(ꯜ宝Ubۭ׾{9u[{95T0<ޛ0—200S\W(`dji$_!t2C'$r,P$&[1?g1?+VE<,?Gy =AW km0Ѿi,EN) ߼C~o_OD41}>-0nd(AꅯT2bO l nw#Gr `B?=}aZ,mmkX=ԩ颠n%jO-$YB|h1ʉSj^ YUC* CkLCч`4jQL\6&O+|EsdHj\c̸0"r[&3G.m>F#&KRrdd+DJ$oLiBYI*2㥋pK]Ғ.YQR;%*S30&SǴ&f "Y7id wtlx4뫧u|S '3Yh.b=w |GgNɜt Mjz|&*5e"r V\SN5gQHe,i^\KLJ|R;S Cj&ZϢ`[&\[\>fr˳&jukv6tcM`2 o}]_cs/'W+&81W9yk(|,o!q G\ ˁn5/M/=McV^ 9o.:Xwzr=ٶ] kSZ'ի+~.ӝ˞:w|}cE~Y{#7,g~!Oxb]߼]˘Qe_>X= 3.۞- _7lv=o/|)-Wv-6ٳ˗#]7Ng[W8W.?>#cd׻Tv ~\?^_⥝enݍ<`ڟR_1JK"V^)%_``  ^2` R)y8q` |`0)a &a*MZ  &8V`6a!!f`̡j! *"b!#B$Q%$F ^".E@y!J")Ҡ# a*e+,n"'&*bO/"(._by  ~ "n"/ eac3V($U(223v])c]#7c)&a<2!a=:#8c7 T5j"<9!5N)7b> <dc2#FDfC$C=>d"YQ9VdBN:?ZFR;z7BT?:`LIFLҤLPKHdPQ"MzcO I6O""J`*&UF%4EeW.eX>Tr-6[%!5" V%E*eG %T%]udY#N`Za.$^j\#`gY_C> 46Y^bhFi~#ca_eAraYAj:fjr\P &" )ߝ)tfr/*QoVZ serf(Qb.guIx;֑q'axeg-^вv#8 'ic nb&UMV (xvf_[qghZ"8(f.>|_&jj*(lei^nFf"Ph.(+N(Ai"~%&vRbjXh^y*yN-he%)Ҋ !Lߋ>#>)fwhM)yu( &niBt)&⣂{.Mi}Vg§}tťک nObɬz)LƩ)(:Nl*QƦ|)yZDzOςkjBзlh|4fڦm{)),nmVg+Vd_"|鱢i,k`~aH.^grB+~'ٌ-i斪0-. r2ĭr-Vj &.݊컊Sƪ^^ƪ^Ͼ^/bY*:Ɋ-Krn.bn"Qm^*8R&slnoگ0 pZInj\R0Jˮm8Z.~"L2Bb:p4/nؠpz.6( ~+rpZ_SؚP.qO # ,> pf"s`fic/Gog{_q Ol!!LcmyךW k52 EPVk*_22#_pF,[`nk(z rzNf ׫jqj0.Ko121rf)9i"13-_d / 4sovoߑk=o '4n_3@_hV>®ǰus3)ZJkR4p¯yvp.V,Gcqtv3J_H2ƾ4JM4tNJ˴BlMt4QjNQsMRKG5۞TS6utbu^W/KuXslf;uYYuJt[e*m56˵5[t\5WӴY,'as]_CtP,²&62SC6e{5R2Le ҵ* vh2O67r.g6\ƲiOl`vg1v2d@bsn6fkkgupl+rloLcdPs"[,IKwqlt-A s׶u.m4As2y!Hgh}xwq|#.}{tvl"og4V%z-U'3Bw.33HNK3;w88T#"Olo/&/{ZG6G0'OP;Gpi#V`s+גfvwh1oqBC;bN9={9wiw%87yW:[y nSfMs3V9q/cO_9 zӪ#oK06'?c1vg٫$_ kUyv2${GV?m;r5 ?K[(Pc{9:2ోv/x϶p/Y0{4s~D;48wD麕+)k߸U7i~!W77v?6ŏf<`ٓ곡~"L}ծ˻_׾3w*gh9/?7??GO?Wco?wfWƢShR~T*b7 .秎>m몚>@8`A&TaC!F8"D1PcG+n1#H'QT#ɋdҥH6 fə'IsOG&fAJF:!ӦTJi5kW_Qr%؅b*h٥ :Elݨtsn^T6`}>%㹄:;Zg lSΎ~f)Z2hUf^Y}0ڙ#Z~7_ 9=6"'޸ ?O]橫G>xawnWσ-/7=~׿wzޯI뮊yS%+j"p'6z@)@ ߣ/+pB+ 僯=b0B T,]4CqhdD-H@kKEz?MmI-t< ӎ=*4K˼K%\1)2|pTIl3",HSP*#$eOG|~/RQ&RO LV}3P%M3T͌KYG!%mHxu;j.: TWcOi*ɒv?4Xe/ t!A JpX 1A no`:B%4[-t 7A5 q>r}A]D!qqN gMtAd>%%(n]"~+[HыU_t^reY~ILV85Pr4!Ez#(wYLr@Dnt2@&/Y%9LL_t+a~2le eL2ɛsebLa2]^ʝ~$bN|1ULVdjrY4'Ig)FMol9O}j+gyNJp4AP uC!JMV1E8QnuF=R %IQT-uKRΔ5LmSTx8O TE5Q! STARDIV 5.0 To.;comedilib-0.10.2/doc/comedilib.ent0000644000000000000000000000013011754217371013616 00000000000000Comedi'> comedilib-0.10.2/doc/comedilib.xml0000644000000000000000000000671312043535444013641 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 É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.10.2/doc/calibration_funcref.xml0000644000000000000000000004720012122634440015677 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_file 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.10.2/doc/extensions_funcref.xml0000644000000000000000000006314712122634440015617 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. 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_SOURCE 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_SOURCE 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. 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_SOURCE 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_SOURCE 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_SOURCE 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.10.2/doc/funcref.xml0000644000000000000000000016412212173531403013334 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.10.2/doc/Makefile.am0000644000000000000000000001021412043533372013211 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 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) 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) 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.10.2/doc/reference.xml0000644000000000000000000005247112043533372013650 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 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.10.2/doc/doc_html/0000755000000000000000000000000012323207605013026 500000000000000comedilib-0.10.2/doc/doc_html/func-ref-comedi-trigger.html0000644000000000000000000000565012173531465020255 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.10.2/doc/doc_html/comedilib.proc0000644000000000000000000000000012173531467015561 00000000000000comedilib-0.10.2/doc/doc_html/acquisitionfunctions.html0000644000000000000000000005672312173531461020135 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.10.2/doc/doc_html/ar01s03s05.html0000644000000000000000000000415412173531460015263 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.10.2/doc/doc_html/func-ref-comedi-to-physical.html0000644000000000000000000000710712173531463021043 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.10.2/doc/doc_html/functionreference.html0000644000000000000000000004536412173531465017363 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_offset — streaming buffer status
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

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_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_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_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.10.2/doc/doc_html/func-ref-comedi-set-gate-source.html0000644000000000000000000001000212173531464021603 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_SOURCE configuration instruction.

Return value

0 on success, -1 on error.

comedilib-0.10.2/doc/doc_html/func-ref-comedi-get-maxdata.html0000644000000000000000000000614212173531462021000 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.10.2/doc/doc_html/func-ref-comedi-apply-calibration.html0000644000000000000000000001467412173531463022230 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_file provide the same functionality at a slightly lower level.

Return value

Returns 0 on success, -1 on failure.

comedilib-0.10.2/doc/doc_html/func-ref-comedi-mark-buffer-written.html0000644000000000000000000000767212173531463022511 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), 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

The function comedi_mark_buffer_written returns number of bytes successfully marked as written, or -1 on error. The return value may be less than num_bytes if you attempt to mark more bytes written than the amount of free space currently available in the output buffer, or if num_bytes must be rounded down to be an exact multiple of the subdevice's sample size (either sizeof(sampl_t) or sizeof(lsampl_t)).

comedilib-0.10.2/doc/doc_html/func-ref-comedi-find-subdevice-by-type.html0000644000000000000000000000667112173531462023071 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.10.2/doc/doc_html/func-ref-comedi-set-counter-mode.html0000644000000000000000000000671112173531464022002 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.10.2/doc/doc_html/func-ref-comedi-get-softcal-converter.html0000644000000000000000000001372012173531463023022 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.10.2/doc/doc_html/func-ref-comedi-perror.html0000644000000000000000000000725312173531464020123 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.10.2/doc/doc_html/func-ref-comedi-dio-config.html0000644000000000000000000000703112173531464020622 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.10.2/doc/doc_html/func-ref-comedi-get-default-calibration-path.html0000644000000000000000000000667212173531463024235 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.10.2/doc/doc_html/func-ref-comedi-get-range.html0000644000000000000000000000653312173531462020461 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.10.2/doc/doc_html/func-ref-comedi-get-subdevice-type.html0000644000000000000000000000646512173531462022321 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.10.2/doc/doc_html/func-ref-comedi-close.html0000644000000000000000000000540412173531461017710 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.10.2/doc/doc_html/func-ref-comedi-get-buffer-contents.html0000644000000000000000000000556512173531463022476 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. The number of bytes that are available in the streaming buffer is returned. If there is an error, -1 is returned.

comedilib-0.10.2/doc/doc_html/func-ref-comedi-to-phys.html0000644000000000000000000000776412173531463020223 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.10.2/doc/doc_html/func-ref-comedi-get-version-code.html0000644000000000000000000000633612173531462021763 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.10.2/doc/doc_html/func-ref-comedi-get-gate-source.html0000644000000000000000000000756712173531464021615 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_SOURCE configuration instruction.

Return value

0 on success, -1 on error.

comedilib-0.10.2/doc/doc_html/func-ref-comedi-sv-update.html0000644000000000000000000000533412173531464020520 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.10.2/doc/doc_html/func-ref-comedi-dio-bitfield2.html0000644000000000000000000001042212173531464021217 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.10.2/doc/doc_html/instructions.html0000644000000000000000000002133112173531460016402 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.10.2/doc/doc_html/func-ref-comedi-get-timer.html0000644000000000000000000000662512173531464020511 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.10.2/doc/doc_html/func-ref-comedi-sv-measure.html0000644000000000000000000000577512173531464020710 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.10.2/doc/doc_html/func-ref-comedi-arm.html0000644000000000000000000000634312173531464017370 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.

Return value

0 on success, -1 on error.

comedilib-0.10.2/doc/doc_html/func-ref-comedi-get-n-channels.html0000644000000000000000000000556712173531462021421 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.10.2/doc/doc_html/func-ref-comedi-get-read-subdevice.html0000644000000000000000000000554212173531463022247 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 accessible through the device device. If there is no such subdevice, -1 is returned.

comedilib-0.10.2/doc/doc_html/func-ref-comedi-get-cmd-src-mask.html0000644000000000000000000000661112173531463021644 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

If successful, 0 is returned, otherwise -1.

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

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

Status: untested

ManufacturerDeviceName
ADLink PCI-6208A adl_pci6208

Configuration Options:
  none





  

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_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.6.  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.7.  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.8.  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.9.  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.10.  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.11.  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 adv_pci1710
Advantech PCI-1710HG pci1710hg
Advantech PCI-1711 adv_pci1710
Advantech PCI-1713 adv_pci1710
Advantech PCI-1720 adv_pci1710
Advantech PCI-1731 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.12.  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.13.  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.14.  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.15.  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.16.  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 PC218E pc218e
Amplicon PC272E pc272e
Amplicon PCI272 pci272 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, PCI272:
  [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

                    PC218E         PC212E      PC215E/PCI215
                 -------------  -------------  -------------
  Subdevices           7              6              5
   0                 CTR-X1         PPI-X          PPI-X
   1                 CTR-X2         CTR-Y1         PPI-Y
   2                 CTR-Y1         CTR-Y2         CTR-Z1
   3                 CTR-Y2         CTR-Z1         CTR-Z2
   4                 CTR-Z1         CTR-Z2       INTERRUPT
   5                 CTR-Z2       INTERRUPT
   6               INTERRUPT

                    PC214E      PC272E/PCI272
                 -------------  -------------
  Subdevices           4              4
   0                 PPI-X          PPI-X
   1                 PPI-Y          PPI-Y
   2                 CTR-Z1*        PPI-Z
   3               INTERRUPT*     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 '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

                    PC218E         PC212E      PC215E/PCI215
                 -------------  -------------  -------------
  Sources              6              6              6
   0              CTR-X1-OUT      PPI-X-C0       PPI-X-C0
   1              CTR-X2-OUT      PPI-X-C3       PPI-X-C3
   2              CTR-Y1-OUT     CTR-Y1-OUT      PPI-Y-C0
   3              CTR-Y2-OUT     CTR-Y2-OUT      PPI-Y-C3
   4              CTR-Z1-OUT     CTR-Z1-OUT     CTR-Z1-OUT
   5              CTR-Z2-OUT     CTR-Z2-OUT     CTR-Z2-OUT

                    PC214E      PC272E/PCI272
                 -------------  -------------
  Sources              1              6
   0               JUMPER-J5      PPI-X-C0
   1                              PPI-X-C3
   2                              PPI-Y-C0
   3                              PPI-Y-C3
   4                              PPI-Z-C0
   5                              PPI-Z-C3

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.17.  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.18.  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.19.  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.20.  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.21.  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.22.  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.23.  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.24.  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.25.  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.26.  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.27.  cb_pcimdas -- Measurement Computing PCI Migration series boards

Author: Richard Bytheway

Status: experimental

ManufacturerDeviceName
ComputerBoards PCIM-DAS1602/16 cb_pcimdas

Written to support the PCIM-DAS1602/16 on a 2.4 series kernel.

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.
See http://www.measurementcomputing.com/PDFManuals/pcim-das1602_16.pdf for more details.




  

5.6.28.  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.29.  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.30.  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.31.  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.32.  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.33.  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.34.  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.35.  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.36.  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.37.  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.38.  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.39.  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.40.  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.41.  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.42.  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.43.  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.44.  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 = signle-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.45.  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.46.  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.47.  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.48.  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.49.  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.50.  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.51.  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.52.  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.53.  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.54.  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.55.  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.56.  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.57.  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.58.  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.59.  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.60.  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.61.  multiq3 -- Quanser Consulting MultiQ-3

Author: Anders Blomdell <anders.blomdell@control.lth.se>

Status: works

ManufacturerDeviceName
Quanser Consulting MultiQ-3 multiq3




  

5.6.62.  ni_6527 -- National Instruments 6527

Author: ds

Status: works

ManufacturerDeviceName
National Instruments PCI-6527 ni6527
National Instruments PXI-6527 ni6527





  

5.6.63.  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.64.  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


Encoders work.  PulseGeneration (both single pulse and pulse train)
works. Buffered commands work for input but not output.





  

5.6.65.  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.66.  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.67.  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.68.  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.69.  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.70.  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.71.  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.72.  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.73.  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.74.  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.75.  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.76.  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 PCI-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 PCI-6251 ni_pcimio
National Instruments PCIe-6251 ni_pcimio
National Instruments PXIe-6251 ni_pcimio
National Instruments PCI-6254 ni_pcimio
National Instruments PCI-6259 ni_pcimio
National Instruments PCIe-6259 ni_pcimio
National Instruments PCI-6280 ni_pcimio
National Instruments PCI-6281 ni_pcimio
National Instruments PXI-6281 ni_pcimio
National Instruments PCI-6284 ni_pcimio
National Instruments PCI-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.77.  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.78.  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.79.  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.80.  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.81.  pcl725 -- Advantech PCL-725 (& compatibles)

Author: ds

Status: unknown

ManufacturerDeviceName
Advantech PCL-725 pcl725




  

5.6.82.  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.83.  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.84.  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.85.  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.86.  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.87.  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.88.  pcm3730 -- PCM3730

Author: Blaine Lee

Status: unknown

ManufacturerDeviceName
Advantech PCM-3730 pcm3730

Configuration options:
  [0] - I/O port base




  

5.6.89.  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.90.  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.91.  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.92.  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.93.  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.94.  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.95.  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.96.  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.97.  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.98.  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.99.  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.100.  serial2002 -- Driver for serial connected hardware

Author: Anders Blomdell

Status: in development





  

5.6.101.  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.102.  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.103.  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.104.  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.105.  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.106.  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.10.2/doc/doc_html/func-ref-comedi-reset.html0000644000000000000000000000571412173531464017734 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.

Return value

0 on success, -1 on error.

comedilib-0.10.2/doc/doc_html/func-ref-comedi-dio-read.html0000644000000000000000000000761312173531464020276 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.10.2/doc/doc_html/func-ref-comedi-mark-buffer-read.html0000644000000000000000000000773712173531463021732 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), 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

The function comedi_mark_buffer_read returns the number of bytes successfully marked as read, or -1 on error. The return value may be less than num_bytes if you attempt to mark more bytes read than are currently available for reading, or if num_bytes must be rounded down to be an exact multiple of the subdevice's sample size (either sizeof(sampl_t) or sizeof(lsampl_t)).

comedilib-0.10.2/doc/doc_html/func-ref-comedi-data-read.html0000644000000000000000000001223012173531462020421 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.10.2/doc/doc_html/gettinginformation.html0000644000000000000000000001343712173531460017555 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.10.2/doc/doc_html/func-ref-comedi-get-write-subdevice.html0000644000000000000000000000552612173531463022470 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 accessible through the device device. If there is no such subdevice, -1 is returned.

comedilib-0.10.2/doc/doc_html/inttrigconfiguration.html0000644000000000000000000000556612173531460020122 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.10.2/doc/doc_html/integratingdriver.html0000644000000000000000000001130512173531467017374 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.10.2/doc/doc_html/func-ref-comedi-poll.html0000644000000000000000000000576412173531463017564 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. If successful, the number of additional bytes available is returned. If there is an error, -1 is returned.

comedilib-0.10.2/doc/doc_html/driverwriting.html0000644000000000000000000001704712173531467016555 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.10.2/doc/doc_html/func-ref-comedi-data-read-delayed.html0000644000000000000000000000730412173531462022034 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.10.2/doc/doc_html/func-ref-comedi-data-read-n.html0000644000000000000000000000634612173531462020667 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.10.2/doc/doc_html/func-ref-comedi-dio-bitfield.html0000644000000000000000000000622312173531464021141 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.10.2/doc/doc_html/func-ref-comedi-get-clock-source.html0000644000000000000000000001017112173531464021751 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_SOURCE configuration instruction.

Return value

0 on success, -1 on error.

comedilib-0.10.2/doc/doc_html/func-ref-comedi-data-read-hint.html0000644000000000000000000000712512173531462021370 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.10.2/doc/doc_html/func-ref-comedi-set-max-buffer-size.html0000644000000000000000000000640412173531463022403 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

The new maximum buffer size is returned on success. On error, -1 is returned.

comedilib-0.10.2/doc/doc_html/func-ref-comedi-fileno.html0000644000000000000000000000636512173531462020067 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.10.2/doc/doc_html/commandsstreaming.html0000644000000000000000000007307312173531461017364 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.

    Its stop_arg argument is reserved and should be set to 0. (Reserved means that unspecified things could happen if it is set to something else but 0.)

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.10.2/doc/doc_html/func-ref-comedi-range-is-chan-specific.html0000644000000000000000000000555712173531463023015 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.10.2/doc/doc_html/func-ref-comedi-from-physical.html0000644000000000000000000000747612173531462021374 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.10.2/doc/doc_html/secondprogram.html0000644000000000000000000001100312173531460016474 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.10.2/doc/doc_html/func-ref-comedi-set-other-source.html0000644000000000000000000001134212173531464022014 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_SOURCE configuration instruction.

Return value

0 on success, -1 on error.

comedilib-0.10.2/doc/doc_html/comedilib.css0000644000000000000000000000000011562232662023332 1comedilib-0.10.2/doc/comedilib.css00000000000000comedilib-0.10.2/doc/doc_html/func-ref-comedi-get-hardware-buffer-size.html0000644000000000000000000000777712173531464023416 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.10.2/doc/doc_html/func-ref-comedi-parse-calibration-file.html0000644000000000000000000001015512173531464023121 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.10.2/doc/doc_html/func-ref-comedi-open.html0000644000000000000000000000571112173531463017547 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.10.2/doc/doc_html/func-ref-comedi-do-insn.html0000644000000000000000000000603512173531462020154 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.10.2/doc/doc_html/install.html0000644000000000000000000002603712173531460015314 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.10.2/doc/doc_html/func-ref-comedi-get-hardcal-converter.html0000644000000000000000000001265512173531463022773 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.10.2/doc/doc_html/func-ref-comedi-lock.html0000644000000000000000000000660412173531462017537 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.10.2/doc/doc_html/func-ref-comedi-timed-1chan.html0000644000000000000000000000610412173531465020677 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.10.2/doc/doc_html/drivercallbacks.html0000644000000000000000000001216112173531467017001 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.10.2/doc/doc_html/slowlyvarying.html0000644000000000000000000001637712173531461016606 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.10.2/doc/doc_html/experimentalfunctionality.html0000644000000000000000000010760512173531461021156 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 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.10.2/doc/doc_html/func-ref-comedi-get-n-subdevices.html0000644000000000000000000000530412173531462021747 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.10.2/doc/doc_html/func-ref-comedi-do-insnlist.html0000644000000000000000000000610412173531462021045 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.10.2/doc/doc_html/func-ref-comedi-get-subdevice-flags.html0000644000000000000000000002315412173531462022426 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.10.2/doc/doc_html/func-ref-comedi-dio-get-config.html0000644000000000000000000000655712173531464021413 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.10.2/doc/doc_html/acq-seq.gif0000644000000000000000000000000011562232662022272 1comedilib-0.10.2/doc/acq-seq.gif00000000000000comedilib-0.10.2/doc/doc_html/func-ref-comedi-from-phys.html0000644000000000000000000000670512173531462020535 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.10.2/doc/doc_html/func-ref-comedi-get-buffer-offset.html0000644000000000000000000000570212173531463022120 00000000000000comedi_get_buffer_offset

Name

comedi_get_buffer_offset — streaming buffer status

Synopsis

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

Description

The function comedi_get_buffer_offset is used on a subdevice that has a Comedi command in progress. This function returns the offset in bytes of the read pointer in the streaming buffer. This offset is only useful for memory mapped buffers. If there is an error, -1 is returned.

comedilib-0.10.2/doc/doc_html/func-ref-comedi-get-max-buffer-size.html0000644000000000000000000000643012173531463022366 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. On error, -1 is returned.

comedilib-0.10.2/doc/doc_html/func-ref-comedi-strerror.html0000644000000000000000000000760212173531464020472 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.10.2/doc/doc_html/func-ref-comedi-cleanup-calibration.html0000644000000000000000000000626412173531463022526 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.10.2/doc/doc_html/func-ref-comedi-apply-parsed-calibration.html0000644000000000000000000000771312173531463023500 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.10.2/doc/doc_html/index.html0000644000000000000000000011626212173531467014764 00000000000000Comedi

Comedi

The Control and Measurement Device Interface handbook for Comedilib 0.10.2

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.10.2/doc/doc_html/boardspecific.html0000644000000000000000000002254412173531467016451 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.10.2/doc/doc_html/func-ref-comedi-get-board-name.html0000644000000000000000000000546212173531462021372 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.10.2/doc/doc_html/func-ref-comedi-set-clock-source.html0000644000000000000000000001055412173531464021772 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_SOURCE configuration instruction.

Return value

0 on success, -1 on error.

comedilib-0.10.2/doc/doc_html/constantsmacros.html0000644000000000000000000002654412173531461017073 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.10.2/doc/doc_html/convertingsamples.html0000644000000000000000000000770212173531460017407 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.10.2/doc/doc_html/func-ref-comedi-internal-trigger.html0000644000000000000000000000733012173531462022061 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.10.2/doc/doc_html/instructionsconfiguration.html0000644000000000000000000001634312173531460021201 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.10.2/doc/doc_html/func-ref-comedi-command-test.html0000644000000000000000000001202212173531463021172 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.

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.

comedilib-0.10.2/doc/doc_html/languagebindings.html0000644000000000000000000001674512173531465017161 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.10.2/doc/doc_html/writingprograms.html0000644000000000000000000001453412173531460017103 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.10.2/doc/doc_html/func-ref-comedi-find-range.html0000644000000000000000000000705212173531462020617 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.10.2/doc/doc_html/func-ref-comedi-get-driver-name.html0000644000000000000000000000550712173531462021576 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.10.2/doc/doc_html/datatypesstructures.html0000644000000000000000000004464312173531461020014 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 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.10.2/doc/doc_html/func-ref-comedi-cancel.html0000644000000000000000000000610612173531463020032 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

If successful, 0 is returned, otherwise -1.

comedilib-0.10.2/doc/doc_html/func-ref-comedi-get-routing.html0000644000000000000000000000703712173531464021056 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.10.2/doc/doc_html/func-ref-comedi-errno.html0000644000000000000000000000713512173531464017736 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.10.2/doc/doc_html/func-ref-comedi-sv-init.html0000644000000000000000000000713712173531464020204 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.10.2/doc/doc_html/comedireference.html0000644000000000000000000000645112173531466016771 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.10.2/doc/doc_html/func-ref-comedi-set-buffer-size.html0000644000000000000000000000734112173531463021621 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

The new buffer size in bytes is returned on success. On error, -1 is returned.

comedilib-0.10.2/doc/doc_html/func-ref-comedi-set-global-oor-behavior.html0000644000000000000000000000657412173531463023241 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.10.2/doc/doc_html/asyncprogram.html0000644000000000000000000002744612173531460016360 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. To compile it run:

      gcc tut3.c -lcomedi -lm -o tut3
    

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. Below is an extract from tut3.c showing the relevant commands:

      	/* 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");
		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);
	}

	/* 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);
				col++;
				if(col == options.n_chan){
					printf("\n");
					col=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){
		printf("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;
}

    

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.10.2/doc/doc_html/drivercaveats.html0000644000000000000000000000771412173531467016520 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.10.2/doc/doc_html/func-ref-comedi-get-cmd-generic-timed.html0000644000000000000000000001003112173531463022627 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

If successful, 0 is returned, otherwise -1.

comedilib-0.10.2/doc/doc_html/comedikernelgeneric.html0000644000000000000000000005664012173531467017656 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_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.

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.10.2/doc/doc_html/func-ref-comedi-maxdata-is-chan-specific.html0000644000000000000000000000543312173531462023330 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.10.2/doc/doc_html/func-ref-comedi-command.html0000644000000000000000000000663312173531463020230 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. For output subdevices, sample values are written using the function write.

Return value

If successful, 0 is returned, otherwise -1.

comedilib-0.10.2/doc/doc_html/func-ref-comedi-data-write.html0000644000000000000000000000745412173531462020654 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.10.2/doc/doc_html/func-ref-comedi-loglevel.html0000644000000000000000000001004612173531464020415 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.10.2/doc/doc_html/func-ref-comedi-get-buffer-size.html0000644000000000000000000000566612173531463021615 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. On error, -1 is returned.

comedilib-0.10.2/doc/doc_html/func-ref-comedi-dio-write.html0000644000000000000000000000736212173531464020516 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.10.2/doc/doc_html/func-ref-comedi-set-filter.html0000644000000000000000000000720712173531464020667 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.10.2/doc/doc_html/func-ref-comedi-unlock.html0000644000000000000000000000553712173531463020107 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.10.2/doc/doc_html/comedilib-glossary.html0000644000000000000000000001622212173531467017440 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.10.2/doc/bindings.xml0000644000000000000000000001244612043533521013501 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.10.2/doc/command_funcref.xml0000644000000000000000000006746612122634440015046 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 If successful, 0 is returned, otherwise -1. 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. For output subdevices, sample values are written using the function write. Return value If successful, 0 is returned, otherwise -1. 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. 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. 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. The number of bytes that are available in the streaming buffer is returned. If there is an error, -1 is returned. comedi_get_buffer_offset 3 Comedi Comedi reference comedi_get_buffer_offset streaming buffer status #include <comedilib.h> int comedi_get_buffer_offset comedi_t * device unsigned int subdevice Description The function comedi_get_buffer_offset is used on a subdevice that has a Comedi command in progress. This function returns the offset in bytes of the read pointer in the streaming buffer. This offset is only useful for memory mapped buffers. If there is an error, -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. On error, -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 If successful, 0 is returned, otherwise -1. 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 If successful, 0 is returned, otherwise -1. 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. On error, -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 accessible through the device device. If there is no such subdevice, -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 accessible through the device device. If there is no such subdevice, -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), 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 The function comedi_mark_buffer_read returns the number of bytes successfully marked as read, or -1 on error. The return value may be less than num_bytes if you attempt to mark more bytes read than are currently available for reading, or if num_bytes must be rounded down to be an exact multiple of the subdevice's sample size (either sizeof(sampl_t) or sizeof(lsampl_t)). 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), 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 The function comedi_mark_buffer_written returns number of bytes successfully marked as written, or -1 on error. The return value may be less than num_bytes if you attempt to mark more bytes written than the amount of free space currently available in the output buffer, or if num_bytes must be rounded down to be an exact multiple of the subdevice's sample size (either sizeof(sampl_t) or sizeof(lsampl_t)). 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. If successful, the number of additional bytes available is returned. If there is an error, -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 The new buffer size in bytes is returned on success. On error, -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 The new maximum buffer size is returned on success. On error, -1 is returned.
comedilib-0.10.2/doc/comedilib_html_config.xsl0000644000000000000000000000113411752741523016213 00000000000000 comedilib.css ansi comedilib-0.10.2/swig/0000755000000000000000000000000012323207636011445 500000000000000comedilib-0.10.2/swig/ruby/0000755000000000000000000000000012323207637012427 500000000000000comedilib-0.10.2/swig/ruby/demo/0000755000000000000000000000000012323207637013353 500000000000000comedilib-0.10.2/swig/ruby/demo/cmd0000755000000000000000000000356511562232662013775 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.10.2/swig/ruby/demo/common.rb0000644000000000000000000000500211562232662015105 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.10.2/swig/ruby/demo/inp0000755000000000000000000000077611562232662014021 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.10.2/swig/ruby/demo/outp0000755000000000000000000000103011562232662014202 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.10.2/swig/ruby/README0000644000000000000000000002676511562232662013247 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.10.2/swig/ruby/Makefile.in0000644000000000000000000003406712317502704014422 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = swig/ruby DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am README 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) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ 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@ 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@ 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 .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile 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 $(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.10.2/swig/ruby/setup.rb0000644000000000000000000010657011562232662014045 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.10.2/swig/ruby/lib/0000755000000000000000000000000012323207637013175 500000000000000comedilib-0.10.2/swig/ruby/lib/comedi.rb0000644000000000000000000001625611562232662014714 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 comedi_to_physical comedi_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 get_buffer_offset get_softcal_converter get_hardcal_converter }), # 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_bitfield2 get_cmd_src_mask get_cmd_generic_timed }), # 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_file }) ] # 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.10.2/swig/ruby/Makefile.am0000644000000000000000000000157711562232662014415 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.10.2/swig/ruby/ext/0000755000000000000000000000000012323207637013227 500000000000000comedilib-0.10.2/swig/ruby/ext/MANIFEST0000644000000000000000000000000011562232662014266 00000000000000comedilib-0.10.2/swig/ruby/ext/extconf.rb0000644000000000000000000000013011562232662015134 00000000000000require 'mkmf' dir_config('comedilib') have_library('comedi') create_makefile("comedi") comedilib-0.10.2/swig/Makefile.in0000644000000000000000000004651412317502704013441 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = swig DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am 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) 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 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@ 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@ 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 .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: comedilib-0.10.2/swig/python/0000755000000000000000000000000012323207636012766 500000000000000comedilib-0.10.2/swig/python/setup.py0000644000000000000000000000121611562232662014421 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.10.2/swig/python/Makefile.in0000644000000000000000000006054612317502704014763 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = swig/python DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp 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) 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 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@ 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@ 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 test_comedi.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 .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-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 $< .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 `$(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 @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.10.2/swig/python/README.txt0000644000000000000000000000454011742015002014373 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.10.2/swig/python/comedi_python.i0000644000000000000000000000002411562232662015716 00000000000000%include "comedi.i" comedilib-0.10.2/swig/python/Makefile.am0000644000000000000000000000114311562232662014742 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 test_comedi.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.10.2/swig/python/test_comedi.py0000644000000000000000000000440711562232662015565 00000000000000#A test-application to demonstrate using the Comedilib API # and streaming acquisition in particular, from Python. #This script is completely untested! # author bryan.cole@teraview.co.uk #set the paths so python can find the comedi module import sys, os, string sys.path.append('./build/lib.linux-i686-2.2') import comedi as c #open a comedi device dev=c.comedi_open('/dev/comedi0') if not dev: raise "Error openning Comedi device" #get a file-descriptor for use later fd = c.comedi_fileno(dev) nscans=1000 #specify total number of scans #three lists containing the chans, gains and referencing #the lists must all have the same length chans=[0,2,3] gains=[1,1,1] aref =[c.AREF_GROUND, c.AREF_GROUND, c.AREF_GROUND] nchans = len(chans) #number of channels #wrappers include a "chanlist" object (just an Unsigned Int array) for holding the chanlist information mylist = c.chanlist(nchans) #create a chanlist of length nchans #now pack the channel, gain and reference information into the chanlist object #N.B. the CR_PACK and other comedi macros are now python functions for index in range(nchans): mylist[index]=c.cr_pack(chans[index], gains[index], aref[index]) #construct a comedi command manually cmd = c.comedi_cmd_struct() cmd.subdev = 0 cmd.flags = 0 cmd.start_src = c.TRIG_NOW cmd.sart_arg = 0 cmd.scan_begin_src = c.TRIG_TIMER cmd.scan_begin_arg = int(1.0e9/100000) cmd.convert_src = c.TRIG_TIMER cmd.convert_arg = 1 cmd.scan_end_src = c.TRIG_COUNT cmd.scan_end_arg = nchans cmd.stop_src = c.TRIG_COUNT cmd.stop_arg = nscans cmd.chanlist = mylist cmd.chanlist_len = nchans #test our comedi command a few times. ret = c.comedi_command_test(dev,cmd) print "first cmd test returns ", ret ret = c.comedi_command_test(dev,cmd) print "second test returns ", ret ret = c.comedi_command_test(dev,cmd) if not ret: raise "Error testing comedi command" #execute the command! ret = c.comedi_command(dev,cmd) #I think this will work but it's completely untested! datalist=[] data=os.read(fd) while len(data)>0: datalist.append(data) data=os.read(fd) ret = c.comedi_close(dev) datastr = string.join(datalist,'') print datastr #heres your data, as a single string! #if you've got Numeric installed you can convert data into a flat Numpy array # with: # dataarray = Numeric.fromstring(data, Int16)comedilib-0.10.2/swig/comedi.i0000644000000000000000000000602512273706163013005 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 "carrays.i" %include "typemaps.i" #ifdef SWIGPYTHON %rename("%(strip:[COMEDI_])s", regextarget=1) "COMEDI_.*"; %rename("%(strip:[comedi_])s", regextarget=1) "comedi_.*"; #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); } %} #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); %insert("python") %{ # Trick to allow accessing functions and constants with their original C name import sys class __Wrapper(object): def __init__(self, wrapped): self.wrapped = wrapped def __getattr__(self, name): try: return getattr(self.wrapped, name) except AttributeError: if name.startswith("comedi_") or name.startswith("COMEDI_"): return getattr(self.wrapped, name[7:]) else: raise sys.modules[__name__] = __Wrapper(sys.modules[__name__]) %} comedilib-0.10.2/swig/Makefile.am0000644000000000000000000000034311562232662013422 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.10.2/missing0000755000000000000000000001533112077265432012022 00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2012-06-26.16; # 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 'automa4te' 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.10.2/Makefile.am0000644000000000000000000000243112317534741012453 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.10.2/compile0000755000000000000000000001624512077265432012006 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.10.2/etc/0000755000000000000000000000000012323207640011242 500000000000000comedilib-0.10.2/etc/dt282x.conf0000755000000000000000000000454011562232662013100 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.10.2/etc/Makefile.in0000644000000000000000000005255212317502703013241 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = etc DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am 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) 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) 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@ 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@ 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 .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-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 # 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.10.2/etc/modules.conf0000644000000000000000000000066011562232662013511 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.10.2/etc/hotplug/0000755000000000000000000000000012323207637012732 500000000000000comedilib-0.10.2/etc/hotplug/Makefile.in0000644000000000000000000004623012317502703014717 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = etc/hotplug DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am 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) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ 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@ 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@ 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 .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: comedilib-0.10.2/etc/hotplug/usb/0000755000000000000000000000000012323207640013515 500000000000000comedilib-0.10.2/etc/hotplug/usb/usbduxfast/0000755000000000000000000000000012323207640015705 500000000000000comedilib-0.10.2/etc/hotplug/usb/usbduxfast/usbduxfast0000755000000000000000000000206411562232662017753 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.10.2/etc/hotplug/usb/usbduxfast/README0000644000000000000000000000123411562232662016513 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.10.2/etc/hotplug/usb/usbduxfast/Makefile.in0000644000000000000000000003660012317502703017700 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = etc/hotplug/usb/usbduxfast DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am README 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) 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) 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@ 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@ 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 .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-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 # 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.10.2/etc/hotplug/usb/usbduxfast/usbduxfast_firmware.hex0000644000000000000000000000406211562232662022427 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.10.2/etc/hotplug/usb/usbduxfast/usbduxfast_firmware.bin0000644000000000000000000000174711745262424022424 00000000000000ЅЄЃЂІ2 ttttttttthtp` T`t"tt $t%tttttttttt t?(t0t8tup"ttt^t _t$\t`tuu"#supttT`tؐtttttT`uuuuuz {ؐ|t tؐtttDupt_t ЅЄЃЂІ2""comedilib-0.10.2/etc/hotplug/usb/usbduxfast/Makefile.am0000644000000000000000000000022211747722200017660 00000000000000EXTRA_DIST = usbduxfast usbduxfast_firmware.hex usbduxfast_firmware.bin if INSTALL_UDEVHOTPLUG udevfirmware_DATA = usbduxfast_firmware.bin endif comedilib-0.10.2/etc/hotplug/usb/Makefile.in0000644000000000000000000004627612317502703015522 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = etc/hotplug/usb DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am 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) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ 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@ 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@ 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 .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: comedilib-0.10.2/etc/hotplug/usb/usbduxsigma/0000755000000000000000000000000012323207640016050 500000000000000comedilib-0.10.2/etc/hotplug/usb/usbduxsigma/README0000644000000000000000000000042611745262424016662 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.10.2/etc/hotplug/usb/usbduxsigma/Makefile.in0000644000000000000000000003660712317502704020053 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = etc/hotplug/usb/usbduxsigma DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am README 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) 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) 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@ 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@ 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 .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-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 # 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.10.2/etc/hotplug/usb/usbduxsigma/usbduxsigma_firmware.bin0000644000000000000000000002000011745262424022711 00000000000000iЅЄЃЂІ2tڐ tuuhtڐqtOx`T`txvuu`turt"™0"…˜0噐"TD@…҅"TD`…҅$"tttttttttАttАtt^t_t\tuu" …҅"¯T p@‡xt3҇tx‡tx##$Tpؐt]tүЅЄЃЂІ2tڐtڐt"tڐtڐt"‡҅t…҅t3t3t3xt3t3t3"¯x##s+~A!aQ1q I)iY9yE%eU5u M-m]=}C#cS3s K+k[;{G'gW7wO/o_?comedilib-0.10.2/etc/hotplug/usb/usbduxsigma/usbduxsigma0000755000000000000000000000206711745262424020266 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.10.2/etc/hotplug/usb/usbduxsigma/Makefile.am0000644000000000000000000000022611747722200020027 00000000000000EXTRA_DIST = usbduxsigma usbduxsigma_firmware.hex usbduxsigma_firmware.bin if INSTALL_UDEVHOTPLUG udevfirmware_DATA = usbduxsigma_firmware.bin endif comedilib-0.10.2/etc/hotplug/usb/usbduxsigma/usbduxsigma_firmware.hex0000644000000000000000000001142211745262424022735 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.10.2/etc/hotplug/usb/Makefile.am0000644000000000000000000000005011745262424015474 00000000000000SUBDIRS = usbdux usbduxfast usbduxsigma comedilib-0.10.2/etc/hotplug/usb/usbdux/0000755000000000000000000000000012323207640015027 500000000000000comedilib-0.10.2/etc/hotplug/usb/usbdux/README0000644000000000000000000000122411562232662015634 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.10.2/etc/hotplug/usb/usbdux/usbdux_firmware.bin0000644000000000000000000000335211745262424020662 00000000000000WЅЄЃЂІ2t tuuht~x`T`txtt"tttttttT`ttttttttttttېzuuېuz |ЅЄЃЂItxt"u'u""uuuuuҌ"T|Dz0҂‚Ҁ€#‚zҀ€|z}Ҁ€0M{z}Ҁ€0Mҁ"uuux{"tttttttttېttېtt^t_t\tuu"[` m]\`Zp   p "xyt## ####І2T pbttTpt]tЅЄЃЂІ2ttt"ttt"x,#sGZ`f0 gb7Zx`Dx75xz # 7t_tЅЄЃЂІ2"TD0L…z0҂‚Ҁ€#z0҂‚Ҁ€#҅"btt"xH#sDB@%8xyx tt"7_tЅЄЃЂІ2""comedilib-0.10.2/etc/hotplug/usb/usbdux/Makefile.in0000644000000000000000000003654412317502703017031 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = etc/hotplug/usb/usbdux DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am README 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) 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) 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@ 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@ 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 .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-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 # 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.10.2/etc/hotplug/usb/usbdux/usbdux_firmware.hex0000644000000000000000000001021211562232662020665 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.10.2/etc/hotplug/usb/usbdux/Makefile.am0000644000000000000000000000020211747722200017000 00000000000000EXTRA_DIST = usbdux usbdux_firmware.hex usbdux_firmware.bin if INSTALL_UDEVHOTPLUG udevfirmware_DATA = usbdux_firmware.bin endif comedilib-0.10.2/etc/hotplug/usb/usbdux/usbdux0000755000000000000000000000203011562232662016210 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.10.2/etc/hotplug/Makefile.am0000644000000000000000000000001611562232662014703 00000000000000SUBDIRS = usb comedilib-0.10.2/etc/pcmcia/0000755000000000000000000000000012323207637012504 500000000000000comedilib-0.10.2/etc/pcmcia/comedi.conf0000644000000000000000000000330011562232662014527 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.10.2/etc/pcmcia/comedi.opts0000644000000000000000000000000211562232662014563 00000000000000 comedilib-0.10.2/etc/pcmcia/Makefile.in0000644000000000000000000004144012317502704014470 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = etc/pcmcia DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am 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) 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) 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@ 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@ 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 .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-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 # 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.10.2/etc/pcmcia/comedi0000755000000000000000000000106011562232662013607 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.10.2/etc/pcmcia/Makefile.am0000644000000000000000000000015611562232662014462 00000000000000 pcmcia_SCRIPTS = comedi pcmcia_DATA = comedi.conf comedi.opts EXTRA_DIST = comedi.conf comedi.opts comedi comedilib-0.10.2/etc/udev/0000755000000000000000000000000012323207640012205 500000000000000comedilib-0.10.2/etc/udev/z99_comedi.rules0000644000000000000000000000317312017111107015150 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.10.2/etc/udev/90-comedi.rules0000644000000000000000000000004411562232662014673 00000000000000KERNEL=="comedi[0-9]*", MODE="0666" comedilib-0.10.2/etc/udev/Makefile.in0000644000000000000000000004534312317502704014205 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = etc/udev DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am 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) 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) 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@ 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@ 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 .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-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 # 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.10.2/etc/udev/Makefile.am0000644000000000000000000000027012017121175014156 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.10.2/etc/das1600.conf0000755000000000000000000000335511562232662013126 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.10.2/etc/Makefile.am0000644000000000000000000000020511562232662013221 00000000000000 SUBDIRS = pcmcia hotplug udev doc_DATA = das1600.conf dt282x.conf modules.conf EXTRA_DIST = das1600.conf dt282x.conf modules.conf comedilib-0.10.2/testing/0000755000000000000000000000000012323207635012150 500000000000000comedilib-0.10.2/testing/lib.c0000644000000000000000000000042111562232662013001 00000000000000 #include #include #include #include #include #include #include #include #include #include #include #include "comedi_test.h" /* nothing currently */ comedilib-0.10.2/testing/inttrig.c0000644000000000000000000000321011562232662013712 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); 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.10.2/testing/cmd_3.c0000644000000000000000000000431311562232662013224 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; if(!(comedi_get_subdevice_flags(device,subdevice)&SDF_CMD)){ 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.10.2/testing/README0000644000000000000000000000160411562232662012753 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.10.2/testing/Makefile.in0000644000000000000000000013241412317502705014141 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ bin_PROGRAMS = comedi_test$(EXEEXT) subdir = testing DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp $(noinst_HEADERS) README 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) 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 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@ 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@ 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 .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list 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 $< .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 `$(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 # 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.10.2/testing/insn_read.c0000644000000000000000000000330411562232662014200 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.10.2/testing/bufconfig.c0000644000000000000000000000477211562232662014212 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.10.2/testing/mode0_read.c0000644000000000000000000000143111562232662014234 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.10.2/testing/insn_read_time.c0000644000000000000000000000233211562232662015216 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; 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); } printf("read time: %ld us\n", (long)(t2[0]-t1[0])*1000000+(t2[1]-t1[1])); return 0; } comedilib-0.10.2/testing/comedi_test.h0000644000000000000000000000032011562232662014535 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.10.2/testing/mmap.c0000644000000000000000000000600312142173735013167 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); 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.10.2/testing/info.c0000644000000000000000000000357711562232662013205 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.10.2/testing/Makefile.am0000644000000000000000000000045011562232662014125 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.10.2/testing/cmd_1.c0000644000000000000000000001606212321566700013223 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); 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); } 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.10.2/testing/main.c0000644000000000000000000001072612142173735013170 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.10.2/testing/select.c0000644000000000000000000000316711562232662013524 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); 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.10.2/testing/cmd_2.c0000644000000000000000000000255411562232662013230 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); 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.10.2/depcomp0000755000000000000000000005570312077265433012010 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2012-10-18.11; # 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" 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.10.2/AUTHORS0000644000000000000000000000140112043534270011454 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 Jan Gukelberger Steven Jenkins W. Trevor King Luc Lefebvre Tim Ousley Éric Piel Bernd Porr Alan Woodland [ax_tls.m4] Bean ZAHND comedilib-0.10.2/config.sub0000755000000000000000000010612412077265432012407 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012, 2013 Free Software Foundation, Inc. timestamp='2013-01-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 (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc. This 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 \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx | dvp \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 \ | ns16k | ns32k \ | open8 \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i386-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 ;; mipsEE* | ee | ps2) basic_machine=mips64r5900el-scei case $os in -linux*) ;; *) os=-elf ;; esac ;; iop) basic_machine=mipsel-scei os=-irx ;; dvp) basic_machine=dvp-scei os=-elf ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i386-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* | -irx* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; 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: