From f40fe02008aa8122004baeb74af381056d2675ab Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Thu, 19 Jan 2012 18:50:54 +0100 Subject: [PATCH] reorganized directory structure: merged libmtr and vzlogger and removed vzreader --- Makefile.am | 6 +- Makefile.in | 5 +- bin/logger/Makefile.am | 22 - bin/logger/Makefile.in | 592 --------------------- bin/logger/src/configuration.c | 273 ---------- bin/logger/web/config.html | 18 - bin/logger/web/favicon.ico | Bin 15086 -> 0 bytes bin/logger/web/jquery.min.js | 4 - bin/logger/web/logo.png | Bin 7879 -> 0 bytes bin/logger/web/style.css | 15 - bin/reader/Makefile.am | 14 - bin/reader/Makefile.in | 484 ----------------- bin/reader/src/smlreader.c | 171 ------ configure | 4 +- configure.ac | 2 - {bin/logger/include => include}/api.h | 0 {bin/logger/include => include}/buffer.h | 2 +- {bin/logger/include => include}/channel.h | 2 +- {bin/logger/include => include}/config.h | 13 +- {bin/logger/include => include}/local.h | 7 +- include/meter.h | 2 +- {bin/logger/include => include}/threads.h | 0 {bin/logger/include => include}/vzlogger.h | 6 +- src/Makefile.am | 27 +- src/Makefile.in | 185 ++++--- {bin/logger/src => src}/api.c | 2 +- {bin/logger/src => src}/buffer.c | 0 {bin/logger/src => src}/channel.c | 0 {bin/logger/src => src}/config.c | 0 {bin/logger/src => src}/local.c | 0 src/meter.c | 2 +- src/obis.c | 1 + src/options.c | 25 + src/protocols/d0.c | 2 +- {bin/logger/src => src}/threads.c | 5 +- src/vzlogger | Bin 0 -> 201324 bytes {bin/logger/src => src}/vzlogger.c | 8 +- 37 files changed, 170 insertions(+), 1729 deletions(-) delete mode 100644 bin/logger/Makefile.am delete mode 100644 bin/logger/Makefile.in delete mode 100644 bin/logger/src/configuration.c delete mode 100644 bin/logger/web/config.html delete mode 100644 bin/logger/web/favicon.ico delete mode 100644 bin/logger/web/jquery.min.js delete mode 100644 bin/logger/web/logo.png delete mode 100644 bin/logger/web/style.css delete mode 100644 bin/reader/Makefile.am delete mode 100644 bin/reader/Makefile.in delete mode 100644 bin/reader/src/smlreader.c rename {bin/logger/include => include}/api.h (100%) rename {bin/logger/include => include}/buffer.h (98%) rename {bin/logger/include => include}/channel.h (98%) rename {bin/logger/include => include}/config.h (96%) rename {bin/logger/include => include}/local.h (89%) rename {bin/logger/include => include}/threads.h (100%) rename {bin/logger/include => include}/vzlogger.h (94%) rename {bin/logger/src => src}/api.c (99%) rename {bin/logger/src => src}/buffer.c (100%) rename {bin/logger/src => src}/channel.c (100%) rename {bin/logger/src => src}/config.c (100%) rename {bin/logger/src => src}/local.c (100%) rename {bin/logger/src => src}/threads.c (99%) create mode 100755 src/vzlogger rename {bin/logger/src => src}/vzlogger.c (99%) diff --git a/Makefile.am b/Makefile.am index 41c10f0..290818e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,7 +1,3 @@ sysconf_DATA = etc/vzlogger.conf -SUBDIRS = src docs bin/logger - -if READER_BUILD -SUBDIRS += bin/reader -endif +SUBDIRS = src docs diff --git a/Makefile.in b/Makefile.in index 7e49628..d67e29f 100644 --- a/Makefile.in +++ b/Makefile.in @@ -32,7 +32,6 @@ POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : -@READER_BUILD_TRUE@am__append_1 = bin/reader subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ @@ -87,7 +86,7 @@ AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags -DIST_SUBDIRS = src docs bin/logger bin/reader +DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) @@ -221,7 +220,7 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ sysconf_DATA = etc/vzlogger.conf -SUBDIRS = src docs bin/logger $(am__append_1) +SUBDIRS = src docs all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive diff --git a/bin/logger/Makefile.am b/bin/logger/Makefile.am deleted file mode 100644 index ade62ea..0000000 --- a/bin/logger/Makefile.am +++ /dev/null @@ -1,22 +0,0 @@ -AM_CFLAGS = -Wall -D_REENTRANT -std=gnu99 $(DEPS_VZ_CFLAGS) -AM_CPPFLAGS = -I$(top_srcdir)/include -Iinclude - -bin_PROGRAMS = vzlogger -vzlogger_SOURCES = src/vzlogger.c src/channel.c src/api.c src/config.c src/threads.c src/buffer.c -vzlogger_LDADD = $(top_srcdir)/src/libmtr.a -vzlogger_LDFLAGS = -lpthread -lm $(DEPS_VZ_LIBS) - -# local interface support -#################################################################### -if LOCAL_SUPPORT -vzlogger_SOURCES += src/local.c -vzlogger_LDADD += $(DEPS_LOCAL_LIBS) -AM_CFLAGS += $(DEPS_LOCAL_CFLAGS) -endif - -# SML support -#################################################################### -if SML_SUPPORT -vzlogger_LDADD += $(DEPS_SML_LIBS) -AM_CFLAGS += $(DEPS_SML_CFLAGS) -endif diff --git a/bin/logger/Makefile.in b/bin/logger/Makefile.in deleted file mode 100644 index 6ca136f..0000000 --- a/bin/logger/Makefile.in +++ /dev/null @@ -1,592 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -bin_PROGRAMS = vzlogger$(EXEEXT) - -# local interface support -#################################################################### -@LOCAL_SUPPORT_TRUE@am__append_1 = src/local.c -@LOCAL_SUPPORT_TRUE@am__append_2 = $(DEPS_LOCAL_LIBS) -@LOCAL_SUPPORT_TRUE@am__append_3 = $(DEPS_LOCAL_CFLAGS) - -# SML support -#################################################################### -@SML_SUPPORT_TRUE@am__append_4 = $(DEPS_SML_LIBS) -@SML_SUPPORT_TRUE@am__append_5 = $(DEPS_SML_CFLAGS) -subdir = bin/logger -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -am__installdirs = "$(DESTDIR)$(bindir)" -PROGRAMS = $(bin_PROGRAMS) -am__vzlogger_SOURCES_DIST = src/vzlogger.c src/channel.c src/api.c \ - src/config.c src/threads.c src/buffer.c src/local.c -@LOCAL_SUPPORT_TRUE@am__objects_1 = local.$(OBJEXT) -am_vzlogger_OBJECTS = vzlogger.$(OBJEXT) channel.$(OBJEXT) \ - api.$(OBJEXT) config.$(OBJEXT) threads.$(OBJEXT) \ - buffer.$(OBJEXT) $(am__objects_1) -vzlogger_OBJECTS = $(am_vzlogger_OBJECTS) -am__DEPENDENCIES_1 = -@LOCAL_SUPPORT_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) -@SML_SUPPORT_TRUE@am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1) -vzlogger_DEPENDENCIES = $(top_srcdir)/src/libmtr.a \ - $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) -vzlogger_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(vzlogger_LDFLAGS) \ - $(LDFLAGS) -o $@ -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(vzlogger_SOURCES) -DIST_SOURCES = $(am__vzlogger_SOURCES_DIST) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DEPS_LOCAL_CFLAGS = @DEPS_LOCAL_CFLAGS@ -DEPS_LOCAL_LIBS = @DEPS_LOCAL_LIBS@ -DEPS_SML_CFLAGS = @DEPS_SML_CFLAGS@ -DEPS_SML_LIBS = @DEPS_SML_LIBS@ -DEPS_VZ_CFLAGS = @DEPS_VZ_CFLAGS@ -DEPS_VZ_LIBS = @DEPS_VZ_LIBS@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -OBJEXT = @OBJEXT@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PKG_CONFIG = @PKG_CONFIG@ -PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ -PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ -RANLIB = @RANLIB@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build_alias = @build_alias@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host_alias = @host_alias@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -AM_CFLAGS = -Wall -D_REENTRANT -std=gnu99 $(DEPS_VZ_CFLAGS) \ - $(am__append_3) $(am__append_5) -AM_CPPFLAGS = -I$(top_srcdir)/include -Iinclude -vzlogger_SOURCES = src/vzlogger.c src/channel.c src/api.c src/config.c \ - src/threads.c src/buffer.c $(am__append_1) -vzlogger_LDADD = $(top_srcdir)/src/libmtr.a $(am__append_2) \ - $(am__append_4) -vzlogger_LDFLAGS = -lpthread -lm $(DEPS_VZ_LIBS) -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bin/logger/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu bin/logger/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): -install-binPROGRAMS: $(bin_PROGRAMS) - @$(NORMAL_INSTALL) - test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - for p in $$list; do echo "$$p $$p"; done | \ - sed 's/$(EXEEXT)$$//' | \ - while read p p1; do if test -f $$p; \ - then echo "$$p"; echo "$$p"; else :; fi; \ - done | \ - sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ - -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ - sed 'N;N;N;s,\n, ,g' | \ - $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ - { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ - if ($$2 == $$4) files[d] = files[d] " " $$1; \ - else { print "f", $$3 "/" $$4, $$1; } } \ - END { for (d in files) print "f", d, files[d] }' | \ - while read type dir files; do \ - if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ - test -z "$$files" || { \ - echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ - $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ - } \ - ; done - -uninstall-binPROGRAMS: - @$(NORMAL_UNINSTALL) - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - files=`for p in $$list; do echo "$$p"; done | \ - sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ - -e 's/$$/$(EXEEXT)/' `; \ - test -n "$$list" || exit 0; \ - echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(bindir)" && rm -f $$files - -clean-binPROGRAMS: - -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) -vzlogger$(EXEEXT): $(vzlogger_OBJECTS) $(vzlogger_DEPENDENCIES) - @rm -f vzlogger$(EXEEXT) - $(vzlogger_LINK) $(vzlogger_OBJECTS) $(vzlogger_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/api.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/buffer.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/channel.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/config.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/local.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/threads.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vzlogger.Po@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -vzlogger.o: src/vzlogger.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vzlogger.o -MD -MP -MF $(DEPDIR)/vzlogger.Tpo -c -o vzlogger.o `test -f 'src/vzlogger.c' || echo '$(srcdir)/'`src/vzlogger.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/vzlogger.Tpo $(DEPDIR)/vzlogger.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/vzlogger.c' object='vzlogger.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vzlogger.o `test -f 'src/vzlogger.c' || echo '$(srcdir)/'`src/vzlogger.c - -vzlogger.obj: src/vzlogger.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vzlogger.obj -MD -MP -MF $(DEPDIR)/vzlogger.Tpo -c -o vzlogger.obj `if test -f 'src/vzlogger.c'; then $(CYGPATH_W) 'src/vzlogger.c'; else $(CYGPATH_W) '$(srcdir)/src/vzlogger.c'; fi` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/vzlogger.Tpo $(DEPDIR)/vzlogger.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/vzlogger.c' object='vzlogger.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vzlogger.obj `if test -f 'src/vzlogger.c'; then $(CYGPATH_W) 'src/vzlogger.c'; else $(CYGPATH_W) '$(srcdir)/src/vzlogger.c'; fi` - -channel.o: src/channel.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT channel.o -MD -MP -MF $(DEPDIR)/channel.Tpo -c -o channel.o `test -f 'src/channel.c' || echo '$(srcdir)/'`src/channel.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/channel.Tpo $(DEPDIR)/channel.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/channel.c' object='channel.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o channel.o `test -f 'src/channel.c' || echo '$(srcdir)/'`src/channel.c - -channel.obj: src/channel.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT channel.obj -MD -MP -MF $(DEPDIR)/channel.Tpo -c -o channel.obj `if test -f 'src/channel.c'; then $(CYGPATH_W) 'src/channel.c'; else $(CYGPATH_W) '$(srcdir)/src/channel.c'; fi` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/channel.Tpo $(DEPDIR)/channel.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/channel.c' object='channel.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o channel.obj `if test -f 'src/channel.c'; then $(CYGPATH_W) 'src/channel.c'; else $(CYGPATH_W) '$(srcdir)/src/channel.c'; fi` - -api.o: src/api.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT api.o -MD -MP -MF $(DEPDIR)/api.Tpo -c -o api.o `test -f 'src/api.c' || echo '$(srcdir)/'`src/api.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/api.Tpo $(DEPDIR)/api.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/api.c' object='api.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o api.o `test -f 'src/api.c' || echo '$(srcdir)/'`src/api.c - -api.obj: src/api.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT api.obj -MD -MP -MF $(DEPDIR)/api.Tpo -c -o api.obj `if test -f 'src/api.c'; then $(CYGPATH_W) 'src/api.c'; else $(CYGPATH_W) '$(srcdir)/src/api.c'; fi` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/api.Tpo $(DEPDIR)/api.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/api.c' object='api.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o api.obj `if test -f 'src/api.c'; then $(CYGPATH_W) 'src/api.c'; else $(CYGPATH_W) '$(srcdir)/src/api.c'; fi` - -config.o: src/config.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT config.o -MD -MP -MF $(DEPDIR)/config.Tpo -c -o config.o `test -f 'src/config.c' || echo '$(srcdir)/'`src/config.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/config.Tpo $(DEPDIR)/config.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/config.c' object='config.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o config.o `test -f 'src/config.c' || echo '$(srcdir)/'`src/config.c - -config.obj: src/config.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT config.obj -MD -MP -MF $(DEPDIR)/config.Tpo -c -o config.obj `if test -f 'src/config.c'; then $(CYGPATH_W) 'src/config.c'; else $(CYGPATH_W) '$(srcdir)/src/config.c'; fi` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/config.Tpo $(DEPDIR)/config.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/config.c' object='config.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o config.obj `if test -f 'src/config.c'; then $(CYGPATH_W) 'src/config.c'; else $(CYGPATH_W) '$(srcdir)/src/config.c'; fi` - -threads.o: src/threads.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT threads.o -MD -MP -MF $(DEPDIR)/threads.Tpo -c -o threads.o `test -f 'src/threads.c' || echo '$(srcdir)/'`src/threads.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/threads.Tpo $(DEPDIR)/threads.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/threads.c' object='threads.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o threads.o `test -f 'src/threads.c' || echo '$(srcdir)/'`src/threads.c - -threads.obj: src/threads.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT threads.obj -MD -MP -MF $(DEPDIR)/threads.Tpo -c -o threads.obj `if test -f 'src/threads.c'; then $(CYGPATH_W) 'src/threads.c'; else $(CYGPATH_W) '$(srcdir)/src/threads.c'; fi` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/threads.Tpo $(DEPDIR)/threads.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/threads.c' object='threads.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o threads.obj `if test -f 'src/threads.c'; then $(CYGPATH_W) 'src/threads.c'; else $(CYGPATH_W) '$(srcdir)/src/threads.c'; fi` - -buffer.o: src/buffer.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT buffer.o -MD -MP -MF $(DEPDIR)/buffer.Tpo -c -o buffer.o `test -f 'src/buffer.c' || echo '$(srcdir)/'`src/buffer.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/buffer.Tpo $(DEPDIR)/buffer.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/buffer.c' object='buffer.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o buffer.o `test -f 'src/buffer.c' || echo '$(srcdir)/'`src/buffer.c - -buffer.obj: src/buffer.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT buffer.obj -MD -MP -MF $(DEPDIR)/buffer.Tpo -c -o buffer.obj `if test -f 'src/buffer.c'; then $(CYGPATH_W) 'src/buffer.c'; else $(CYGPATH_W) '$(srcdir)/src/buffer.c'; fi` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/buffer.Tpo $(DEPDIR)/buffer.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/buffer.c' object='buffer.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o buffer.obj `if test -f 'src/buffer.c'; then $(CYGPATH_W) 'src/buffer.c'; else $(CYGPATH_W) '$(srcdir)/src/buffer.c'; fi` - -local.o: src/local.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT local.o -MD -MP -MF $(DEPDIR)/local.Tpo -c -o local.o `test -f 'src/local.c' || echo '$(srcdir)/'`src/local.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/local.Tpo $(DEPDIR)/local.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/local.c' object='local.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o local.o `test -f 'src/local.c' || echo '$(srcdir)/'`src/local.c - -local.obj: src/local.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT local.obj -MD -MP -MF $(DEPDIR)/local.Tpo -c -o local.obj `if test -f 'src/local.c'; then $(CYGPATH_W) 'src/local.c'; else $(CYGPATH_W) '$(srcdir)/src/local.c'; fi` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/local.Tpo $(DEPDIR)/local.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/local.c' object='local.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o local.obj `if test -f 'src/local.c'; then $(CYGPATH_W) 'src/local.c'; else $(CYGPATH_W) '$(srcdir)/src/local.c'; fi` - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(PROGRAMS) -installdirs: - for dir in "$(DESTDIR)$(bindir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-binPROGRAMS clean-generic mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: install-binPROGRAMS - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-binPROGRAMS - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ - clean-generic ctags distclean distclean-compile \ - distclean-generic distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-binPROGRAMS \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ - uninstall-am uninstall-binPROGRAMS - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/bin/logger/src/configuration.c b/bin/logger/src/configuration.c deleted file mode 100644 index 5651328..0000000 --- a/bin/logger/src/configuration.c +++ /dev/null @@ -1,273 +0,0 @@ -/** - * Parsing Apache HTTPd-like configuration - * - * @author Steffen Vogel - * @copyright Copyright (c) 2011, The volkszaehler.org project - * @package vzlogger - * @license http://opensource.org/licenses/gpl-license.php GNU Public License - */ -/* - * This file is part of volkzaehler.org - * - * volkzaehler.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * any later version. - * - * volkzaehler.org is distributed in the hope that 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 volkszaehler.org. If not, see . - */ - -#include -#include - -#include "configuration.h" -#include "channel.h" - -extern const meter_type_t meter_types[]; - -void parse_configuration(char *filename, list_t *assocs, options_t *options) { - struct json_object *json_config = NULL; - struct json_tokener *json_tok = json_tokener_new(); - - char buf[JSON_FILE_BUF_SIZE]; - int line = 0; - - /* open configuration file */ - FILE *file = fopen(filename, "r"); - if (file == NULL) { - print(LOG_ERROR, "Cannot open configfile %s: %s", NULL, filename, strerror(errno)); /* why didn't the file open? */ - exit(EXIT_FAILURE); - } - else { - print(2, "Start parsing configuration from %s", NULL, filename); - } - - /* parse JSON */ - while(fgets(buf, JSON_FILE_BUF_SIZE, file)) { - line++; - - json_config = json_tokener_parse_ex(json_tok, buf, strlen(buf)); - - if (json_tok->err > 1) { - print(-1, "Error in %s:%d %s at offset %d", NULL, filename, line, json_tokener_errors[json_tok->err], json_tok->char_offset); - exit(EXIT_FAILURE); - } - } - - fclose(file); - json_tokener_free(json_tok); - - /* read settings */ - json_object_object_foreach(json_config, key, value) { - if (strcmp(key, "daemon") == 0 && check_type(key, value, json_type_boolean)) { - options->daemon = json_object_get_boolean(value); - } - else if (strcmp(key, "foreground") == 0 && check_type(key, value, json_type_boolean)) { - options->foreground = json_object_get_boolean(value); - } - else if (strcmp(key, "log") == 0 && check_type(key, value, json_type_string)) { - options->log = strdup(json_object_get_string(value)); - } - else if (strcmp(key, "retry") == 0 && check_type(key, value, json_type_int)) { - options->retry_pause = json_object_get_int(value); - } - else if (strcmp(key, "verbosity") == 0 && check_type(key, value, json_type_int)) { - options->verbosity = json_object_get_int(value); - } - else if (strcmp(key, "local") == 0) { - json_object_object_foreach(value, key, local_value) { - if (strcmp(key, "enabled") == 0 && check_type(key, local_value, json_type_boolean)) { - options->local = json_object_get_boolean(local_value); - } - else if (strcmp(key, "port") == 0 && check_type(key, local_value, json_type_int)) { - options->port = json_object_get_int(local_value); - } - else if (strcmp(key, "timeout") == 0 && check_type(key, local_value, json_type_int)) { - options->comet_timeout = json_object_get_int(local_value); - } - else if (strcmp(key, "buffer") == 0 && check_type(key, local_value, json_type_int)) { - options->buffer_length = json_object_get_int(local_value); - } - else if (strcmp(key, "index") == 0 && check_type(key, local_value, json_type_boolean)) { - options->channel_index = json_object_get_boolean(local_value); - } - else { - print(-1, "Invalid field: %s", NULL, key); - exit(EXIT_FAILURE); - } - } - } - else if ((strcmp(key, "sensors") == 0 || strcmp(key, "meters") == 0) && check_type(key, value, json_type_array)) { - int len = json_object_array_length(value); - for (int i = 0; i < len; i++) { - assoc_t *as = parse_meter(json_object_array_get_idx(value, i)); - - if (as != NULL) { - list_push(assocs, as); - } - } - } - else { - print(-1, "Invalid field: %s", NULL, key); - exit(EXIT_FAILURE); - } - } - - json_object_put(json_config); -} - -assoc_t * parse_meter(struct json_object *jso) { - list_t json_channels; - - const meter_type_t *type = NULL; - const char *connection = NULL; - const char *protocol = NULL; - int enabled = TRUE; - int interval = 0; - - list_init(&json_channels); - - json_object_object_foreach(jso, key, value) { - if (strcmp(key, "enabled") == 0 && check_type(key, value, json_type_boolean)) { - enabled = json_object_get_boolean(value); - } - else if (strcmp(key, "protocol") == 0 && check_type(key, value, json_type_string)) { - protocol = json_object_get_string(value); - - for (type = meter_types; type->name != NULL; type++) { /* linear search */ - if (strcmp(type->name, protocol) == 0) break; - } - - if (type == NULL) { - print(-1, "Invalid protocol: %s", NULL, protocol); - } - } - else if (strcmp(key, "connection") == 0 && check_type(key, value, json_type_string)) { - connection = json_object_get_string(value); - } - else if (strcmp(key, "interval") == 0 && check_type(key, value, json_type_int)) { - interval = json_object_get_int(value); - } - else if (strcmp(key, "channels") == 0 && check_type(key, value, json_type_array)) { - int len = json_object_array_length(value); - for (int i = 0; i < len; i++) { - list_push(&json_channels, json_object_array_get_idx(value, i)); - } - } - else if (strcmp(key, "channel") == 0 && check_type(key, value, json_type_object)) { - list_push(&json_channels, value); - } - else { - print(-1, "Invalid field: %s", NULL, key); - exit(EXIT_FAILURE); - } - } - - if (type == NULL) { - print(-1, "Missing protocol", NULL); - exit(EXIT_FAILURE); - } - else if (connection == NULL) { - print(-1, "Missing connection", NULL); - exit(EXIT_FAILURE); - } - else if (enabled == TRUE) { - /* init meter */ - assoc_t *assoc = malloc(sizeof(assoc_t)); - assoc->interval = interval; - - list_init(&assoc->channels); - meter_init(&assoc->meter, type, connection); - print(5, "New meter initialized (protocol=%s, connection=%s, interval=%d)", assoc, protocol, connection, assoc->interval); - - /* init channels */ - struct json_object *jso; - while ((jso = list_pop(&json_channels)) != NULL) { - channel_t *ch = parse_channel(jso); - - if (ch != NULL) { - list_push(&assoc->channels, ch); - } - } - - return assoc; - } - else { - return NULL; - } -} - -channel_t * parse_channel(struct json_object *jso) { - const char *uuid = NULL; - const char *middleware = NULL; - const char *identifier = NULL; - int enabled = TRUE; - - json_object_object_foreach(jso, key, value) { - if (strcmp(key, "uuid") == 0 && check_type(key, value, json_type_string)) { - uuid = json_object_get_string(value); - } - else if (strcmp(key, "middleware") == 0 && check_type(key, value, json_type_string)) { - middleware = json_object_get_string(value); - } - else if (strcmp(key, "identifier") == 0 && check_type(key, value, json_type_string)) { - identifier = json_object_get_string(value); - } - else if (strcmp(key, "enabled") == 0 && check_type(key, value, json_type_boolean)) { - enabled = json_object_get_boolean(value); - } - else { - print(-1, "Invalid field: %s", NULL, key); - exit(EXIT_FAILURE); - } - } - - if (uuid == NULL) { - print(-1, "Missing UUID", NULL); - exit(EXIT_FAILURE); - } - else if (middleware == NULL) { - print(-1, "Missing middleware", NULL); - exit(EXIT_FAILURE); - } - else if (enabled == TRUE) { - // TODO other identifiers are not supported at the moment - reading_id_t id; - // TODO: at present (2011-11-05) aliases for identifiers don't work because "lookup aliases" is not (re-)implemented yet in src/obis.c; for now, only the obis identifiers (like "1.8.0") are allowed, so - if (obis_parse(&id.obis, identifier, strlen(identifier)) != 0) { - print(-1, "Invalid identifier: %s", NULL, identifier); - exit(EXIT_FAILURE); - } - - char obis_str[6*3+5+1]; - obis_unparse(id.obis, obis_str, 6*3+5+1); - - channel_t *ch = malloc(sizeof(channel_t)); - channel_init(ch, uuid, middleware, id); - print(5, "New channel initialized (uuid=...%s middleware=%s obis=%s (%s))", ch, uuid+30, middleware, obis_str, identifier); - - return ch; - } - else { - return NULL; - } -} - -int check_type(char *key, struct json_object *jso, enum json_type type) { - char *json_types[] = { "null", "boolean", "double", "int", "object", "array", "string" }; - - if (json_object_get_type(jso) != type) { - print(-1, "Invalid variable type for field %s: %s (%s)", NULL, key, json_object_get_string(jso), json_types[json_object_get_type(jso)]); - exit(EXIT_FAILURE); - } - else { - return 1; - } -} - diff --git a/bin/logger/web/config.html b/bin/logger/web/config.html deleted file mode 100644 index 904b7b0..0000000 --- a/bin/logger/web/config.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - vzlogger - configuration - - - - - - -
-test -
- - - diff --git a/bin/logger/web/favicon.ico b/bin/logger/web/favicon.ico deleted file mode 100644 index 402bd961b29a35b0bc4b141fc21b1bd397e1c82b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 diff --git a/bin/logger/web/jquery.min.js b/bin/logger/web/jquery.min.js deleted file mode 100644 index 198b3ff..0000000 --- a/bin/logger/web/jquery.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v1.7.1 jquery.com | jquery.org/license */ -(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
"+""+"
",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
t
",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; -f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() -{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file diff --git a/bin/logger/web/logo.png b/bin/logger/web/logo.png deleted file mode 100644 index f72cef22ca2868af188ed4af0b4aae31380a9c33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7879 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 diff --git a/bin/logger/web/style.css b/bin/logger/web/style.css deleted file mode 100644 index eff9f39..0000000 --- a/bin/logger/web/style.css +++ /dev/null @@ -1,15 +0,0 @@ -html, body { - background-color: #0292C0; - font-family: arial,helvetica,sans-serif; - font-weight: lighter; - height: 100%; -} - -#wrapper { - background-color: white; - border: 1px solid black; - border-radius: 10px 10px 10px 10px; - margin: 50px auto 20px; - padding: 10px; - width: 90%; -} diff --git a/bin/reader/Makefile.am b/bin/reader/Makefile.am deleted file mode 100644 index 30838ec..0000000 --- a/bin/reader/Makefile.am +++ /dev/null @@ -1,14 +0,0 @@ -# what flags you want to pass to the C compiler & linker -AM_CFLAGS = -Wall -D_REENTRANT -std=gnu99 $(DEPS_VZ_CFLAGS) -AM_CPPFLAGS = -I$(top_srcdir)/include -Iinclude -AM_LDFLAGS = - -# SML support -#################################################################### -if SML_SUPPORT -bin_PROGRAMS = smlreader -smlreader_SOURCES = src/smlreader.c -smlreader_LDADD = -lm $(DEPS_SML_LIBS) $(top_srcdir)/src/libmeter.a -AM_CFLAGS += $(DEPS_SML_CFLAGS) -endif - diff --git a/bin/reader/Makefile.in b/bin/reader/Makefile.in deleted file mode 100644 index 688d784..0000000 --- a/bin/reader/Makefile.in +++ /dev/null @@ -1,484 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -@SML_SUPPORT_TRUE@bin_PROGRAMS = smlreader$(EXEEXT) -@SML_SUPPORT_TRUE@am__append_1 = $(DEPS_SML_CFLAGS) -subdir = bin/reader -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -am__installdirs = "$(DESTDIR)$(bindir)" -PROGRAMS = $(bin_PROGRAMS) -am__smlreader_SOURCES_DIST = src/smlreader.c -@SML_SUPPORT_TRUE@am_smlreader_OBJECTS = smlreader.$(OBJEXT) -smlreader_OBJECTS = $(am_smlreader_OBJECTS) -am__DEPENDENCIES_1 = -@SML_SUPPORT_TRUE@smlreader_DEPENDENCIES = $(am__DEPENDENCIES_1) \ -@SML_SUPPORT_TRUE@ $(top_srcdir)/src/libmeter.a -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(smlreader_SOURCES) -DIST_SOURCES = $(am__smlreader_SOURCES_DIST) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DEPS_LOCAL_CFLAGS = @DEPS_LOCAL_CFLAGS@ -DEPS_LOCAL_LIBS = @DEPS_LOCAL_LIBS@ -DEPS_SML_CFLAGS = @DEPS_SML_CFLAGS@ -DEPS_SML_LIBS = @DEPS_SML_LIBS@ -DEPS_VZ_CFLAGS = @DEPS_VZ_CFLAGS@ -DEPS_VZ_LIBS = @DEPS_VZ_LIBS@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -OBJEXT = @OBJEXT@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PKG_CONFIG = @PKG_CONFIG@ -PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ -PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ -RANLIB = @RANLIB@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build_alias = @build_alias@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host_alias = @host_alias@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ - -# what flags you want to pass to the C compiler & linker -AM_CFLAGS = -Wall -D_REENTRANT -std=gnu99 $(DEPS_VZ_CFLAGS) \ - $(am__append_1) -AM_CPPFLAGS = -I$(top_srcdir)/include -Iinclude -AM_LDFLAGS = -@SML_SUPPORT_TRUE@smlreader_SOURCES = src/smlreader.c -@SML_SUPPORT_TRUE@smlreader_LDADD = -lm $(DEPS_SML_LIBS) $(top_srcdir)/src/libmeter.a -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bin/reader/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu bin/reader/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): -install-binPROGRAMS: $(bin_PROGRAMS) - @$(NORMAL_INSTALL) - test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - for p in $$list; do echo "$$p $$p"; done | \ - sed 's/$(EXEEXT)$$//' | \ - while read p p1; do if test -f $$p; \ - then echo "$$p"; echo "$$p"; else :; fi; \ - done | \ - sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ - -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ - sed 'N;N;N;s,\n, ,g' | \ - $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ - { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ - if ($$2 == $$4) files[d] = files[d] " " $$1; \ - else { print "f", $$3 "/" $$4, $$1; } } \ - END { for (d in files) print "f", d, files[d] }' | \ - while read type dir files; do \ - if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ - test -z "$$files" || { \ - echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ - $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ - } \ - ; done - -uninstall-binPROGRAMS: - @$(NORMAL_UNINSTALL) - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - files=`for p in $$list; do echo "$$p"; done | \ - sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ - -e 's/$$/$(EXEEXT)/' `; \ - test -n "$$list" || exit 0; \ - echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(bindir)" && rm -f $$files - -clean-binPROGRAMS: - -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) -smlreader$(EXEEXT): $(smlreader_OBJECTS) $(smlreader_DEPENDENCIES) - @rm -f smlreader$(EXEEXT) - $(LINK) $(smlreader_OBJECTS) $(smlreader_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smlreader.Po@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -smlreader.o: src/smlreader.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT smlreader.o -MD -MP -MF $(DEPDIR)/smlreader.Tpo -c -o smlreader.o `test -f 'src/smlreader.c' || echo '$(srcdir)/'`src/smlreader.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/smlreader.Tpo $(DEPDIR)/smlreader.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/smlreader.c' object='smlreader.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o smlreader.o `test -f 'src/smlreader.c' || echo '$(srcdir)/'`src/smlreader.c - -smlreader.obj: src/smlreader.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT smlreader.obj -MD -MP -MF $(DEPDIR)/smlreader.Tpo -c -o smlreader.obj `if test -f 'src/smlreader.c'; then $(CYGPATH_W) 'src/smlreader.c'; else $(CYGPATH_W) '$(srcdir)/src/smlreader.c'; fi` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/smlreader.Tpo $(DEPDIR)/smlreader.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/smlreader.c' object='smlreader.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o smlreader.obj `if test -f 'src/smlreader.c'; then $(CYGPATH_W) 'src/smlreader.c'; else $(CYGPATH_W) '$(srcdir)/src/smlreader.c'; fi` - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(PROGRAMS) -installdirs: - for dir in "$(DESTDIR)$(bindir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-binPROGRAMS clean-generic mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: install-binPROGRAMS - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-binPROGRAMS - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ - clean-generic ctags distclean distclean-compile \ - distclean-generic distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-binPROGRAMS \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ - uninstall-am uninstall-binPROGRAMS - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/bin/reader/src/smlreader.c b/bin/reader/src/smlreader.c deleted file mode 100644 index 591e449..0000000 --- a/bin/reader/src/smlreader.c +++ /dev/null @@ -1,171 +0,0 @@ -/** - * SML protocol parsing - * - * @package vzlogger - * @copyright Copyright (c) 2011, The volkszaehler.org project - * @copyright Copyright (c) 2011, Juri Glass, Mathias Runge, Nadim El Sayed, DAI-Labor, TU-Berlin - * @license http://www.gnu.org/licenses/gpl.txt GNU Public License - * @author Steffen Vogel - */ -/* - * This file is part of volkzaehler.org - * - * volkzaehler.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * any later version. - * - * volkzaehler.org is distributed in the hope that 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 volkszaehler.org. If not, see . - */ - -#include -#include -#include -#include -#include -#include -#include - -#include - -#include -#include - -#include - -#include -#include - -#include -#include - -obis_id_t filter; - -void transport_receiver(unsigned char *buffer, size_t buffer_len) { - /* strip escape sequences */ - sml_file *file = sml_file_parse(buffer + 8, buffer_len - 16); - - for (int i = 0; i < file->messages_len; i++) { - sml_message *message = file->messages[i]; - - if (*message->message_body->tag == SML_MESSAGE_GET_LIST_RESPONSE) { - sml_list *entry; - sml_get_list_response *body; - - struct timeval time; - int time_mode = 0; - - body = (sml_get_list_response *) message->message_body->data; - - //printf("new message from: %*s\n", body->server_id->len, body->server_id->str); - - if (body->act_sensor_time) { - time.tv_sec = *body->act_sensor_time->data.timestamp; - time.tv_usec = 0; - time_mode = 1; - printf("sensor time: %lu.%lu, %i\n", time.tv_sec, time.tv_usec, *body->act_sensor_time->tag); - } - - if (body->act_gateway_time) { - time.tv_sec = *body->act_sensor_time->data.timestamp; - time.tv_usec = 0; - time_mode = -1; - printf("sensor time: %lu.%lu, %i\n", time.tv_sec, time.tv_usec, *body->act_sensor_time->tag); - } - - for (entry = body->val_list; entry != NULL; entry = entry->next) { /* linked list */ - obis_id_t id = obis_init(entry->obj_name->str); - - if (memcmp(&id, &filter, sizeof(obis_id_t)) == 0) { - int unit = (entry->unit) ? *entry->unit : 0; - int scaler = (entry->scaler) ? *entry->scaler : 1; - double value; - - switch (entry->value->type) { - case 0x51: value = *entry->value->data.int8; break; - case 0x52: value = *entry->value->data.int16; break; - case 0x54: value = *entry->value->data.int32; break; - case 0x58: value = *entry->value->data.int64; break; - case 0x61: value = *entry->value->data.uint8; break; - case 0x62: value = *entry->value->data.uint16; break; - case 0x64: value = *entry->value->data.uint32; break; - case 0x68: value = *entry->value->data.uint64; break; - - default: - fprintf(stderr, "Unknown value type: %x", entry->value->type); - value = 0; - } - - /* apply scaler */ - value *= pow(10, scaler); - - /* get time */ - if (entry->val_time) { // TODO handle SML_TIME_SEC_INDEX - time.tv_sec = *entry->val_time->data.timestamp; - time.tv_usec = 0; - time_mode = 2; - } - else if (time_mode == 0) { - gettimeofday(&time, NULL); - time_mode = 3; - } - - printf("%lu.%lu (%i)\t%.2f %s\n", time.tv_sec, time.tv_usec, time_mode, value, dlms_get_unit(unit)); - } - } - } - } - - // free the malloc'd memory - sml_file_free(file); -} - -int open_socket(char *host, char *port) { - struct sockaddr_in sin; - struct addrinfo *ais; - int fd; - - getaddrinfo(host, port, NULL, &ais); - memcpy(&sin, ais->ai_addr, ais->ai_addrlen); - - printf("Opening socket\n"); - fd = socket(PF_INET, SOCK_STREAM, 0); - - printf("Conntecting to %s:%s\n", host, port); - if (connect(fd, (struct sockaddr *) &sin, sizeof(sin)) < 0) { - perror(host); - exit(EXIT_FAILURE); - } - - return fd; -} - -int main(int argc, char **argv) { - char *host, *port, *obis; - char buffer[16]; - int fd; - - host = (argc >= 2) ? argv[1] : "localhost"; - port = (argc >= 3) ? argv[2] : "7331"; - obis = (argc >= 4) ? argv[3] : "1-0:1.7.0"; /* total power */ - - filter = obis_parse(obis); - - obis_unparse(filter, buffer); - printf("Using OBIS Id: %s\n", buffer); - - fd = open_socket(host, port); - - if (fd > 0) { - sml_transport_listen(fd, &transport_receiver); - close(fd); - } - - return 0; -} diff --git a/configure b/configure index f1e1764..de892e9 100755 --- a/configure +++ b/configure @@ -2770,7 +2770,7 @@ am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' ac_config_headers="$ac_config_headers config.h" -ac_config_files="$ac_config_files Makefile docs/Makefile src/Makefile bin/reader/Makefile bin/logger/Makefile" +ac_config_files="$ac_config_files Makefile docs/Makefile src/Makefile" # Checks for programs. @@ -5860,8 +5860,6 @@ do "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "docs/Makefile") CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; - "bin/reader/Makefile") CONFIG_FILES="$CONFIG_FILES bin/reader/Makefile" ;; - "bin/logger/Makefile") CONFIG_FILES="$CONFIG_FILES bin/logger/Makefile" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;; diff --git a/configure.ac b/configure.ac index af9e7b3..11d62d0 100644 --- a/configure.ac +++ b/configure.ac @@ -13,8 +13,6 @@ AC_CONFIG_FILES([ Makefile docs/Makefile src/Makefile - bin/reader/Makefile - bin/logger/Makefile ]) # Checks for programs. diff --git a/bin/logger/include/api.h b/include/api.h similarity index 100% rename from bin/logger/include/api.h rename to include/api.h diff --git a/bin/logger/include/buffer.h b/include/buffer.h similarity index 98% rename from bin/logger/include/buffer.h rename to include/buffer.h index c233b7e..ed92953 100644 --- a/bin/logger/include/buffer.h +++ b/include/buffer.h @@ -31,7 +31,7 @@ #include #include -#include +#include "meter.h" typedef struct { reading_t *tail; diff --git a/bin/logger/include/channel.h b/include/channel.h similarity index 98% rename from bin/logger/include/channel.h rename to include/channel.h index ba0bc92..60ead40 100644 --- a/bin/logger/include/channel.h +++ b/include/channel.h @@ -27,8 +27,8 @@ #define _CHANNEL_H_ #include -#include +#include "meter.h" #include "vzlogger.h" #include "buffer.h" diff --git a/bin/logger/include/config.h b/include/config.h similarity index 96% rename from bin/logger/include/config.h rename to include/config.h index 1ece813..fc23758 100644 --- a/bin/logger/include/config.h +++ b/include/config.h @@ -23,13 +23,14 @@ * along with volkszaehler.org. If not, see . */ -#ifndef _CONFIGURATION_H_ -#define _CONFIGURATION_H_ +#ifndef _CONFIG_H_ +#define _CONFIG_H_ #include -#include -#include +#include "meter.h" +#include "list.h" +#include "options.h" /** * General options from CLI @@ -89,6 +90,4 @@ int config_parse(const char *filename, list_t *mappings, config_options_t *optio struct channel * config_parse_channel(struct json_object *jso, meter_protocol_t protocol); struct map * config_parse_meter(struct json_object *jso); - - -#endif /* _CONFIGURATION_H_ */ +#endif /* _CONFIG_H_ */ diff --git a/bin/logger/include/local.h b/include/local.h similarity index 89% rename from bin/logger/include/local.h rename to include/local.h index eedd6e7..e843436 100644 --- a/bin/logger/include/local.h +++ b/include/local.h @@ -22,12 +22,13 @@ * You should have received a copy of the GNU General Public License * along with volkszaehler.org. If not, see . */ - + #ifndef _LOCAL_H_ #define _LOCAL_H_ -#include /* required for libMHD */ -#include /* required for libMHD */ +#include /* required for libMHD */ +#include /* required for libMHD */ +#include /* required for libMHD */ #include diff --git a/include/meter.h b/include/meter.h index f951812..3d3893c 100644 --- a/include/meter.h +++ b/include/meter.h @@ -36,7 +36,7 @@ * The 'interval' column in the configuration as no meaning. */ -#include +#include "../config.h" /* GNU buildsystem config */ #include "common.h" #include "list.h" diff --git a/bin/logger/include/threads.h b/include/threads.h similarity index 100% rename from bin/logger/include/threads.h rename to include/threads.h diff --git a/bin/logger/include/vzlogger.h b/include/vzlogger.h similarity index 94% rename from bin/logger/include/vzlogger.h rename to include/vzlogger.h index 01039d3..9514a5c 100644 --- a/bin/logger/include/vzlogger.h +++ b/include/vzlogger.h @@ -28,11 +28,11 @@ #include -#include -#include -#include +#include "../config.h" /* GNU buildsystem config */ #include "config.h" +#include "meter.h" +#include "common.h" #include "list.h" /* enumerations */ diff --git a/src/Makefile.am b/src/Makefile.am index ccbb652..3e271e2 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,13 +1,14 @@ -AM_CFLAGS = -Wall -D_REENTRANT -std=gnu99 -AM_CPPFLAGS = -I$(top_srcdir)/include +AM_CFLAGS = -Wall -D_REENTRANT -std=gnu99 $(DEPS_VZ_CFLAGS) +AM_CPPFLAGS = -I $(top_srcdir)/include AM_LDFLAGS = -VERSION = 1:0:0 +bin_PROGRAMS = vzlogger -lib_LIBRARIES = libmtr.a +vzlogger_SOURCES = vzlogger.c channel.c api.c config.c threads.c buffer.c +vzlogger_SOURCES += meter.c ltqnorm.c obis.c options.c reading.c -libmtr_a_SOURCES = meter.c ltqnorm.c obis.c options.c reading.c -libmtr_a_SOURCES += \ +# Protocols (add your own here) +vzlogger_SOURCES += \ protocols/s0.c \ protocols/d0.c \ protocols/fluksov2.c \ @@ -15,11 +16,21 @@ libmtr_a_SOURCES += \ protocols/exec.c \ protocols/random.c -libmtr_a_LDFLAGS = -version-info $(VERSION) +vzlogger_LDADD = +vzlogger_LDFLAGS = -lpthread -lm $(DEPS_VZ_LIBS) # SML support #################################################################### if SML_SUPPORT -libmtr_a_SOURCES += protocols/sml.c +vzlogger_SOURCES += protocols/sml.c +vzlogger_LDADD += $(DEPS_SML_LIBS) AM_CFLAGS += $(DEPS_SML_CFLAGS) endif + +# local interface support +#################################################################### +if LOCAL_SUPPORT +vzlogger_SOURCES += local.c +vzlogger_LDADD += $(DEPS_LOCAL_LIBS) +AM_CFLAGS += $(DEPS_LOCAL_CFLAGS) +endif diff --git a/src/Makefile.in b/src/Makefile.in index f517531..1a503e2 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -32,11 +32,19 @@ POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : +bin_PROGRAMS = vzlogger$(EXEEXT) # SML support #################################################################### @SML_SUPPORT_TRUE@am__append_1 = protocols/sml.c -@SML_SUPPORT_TRUE@am__append_2 = $(DEPS_SML_CFLAGS) +@SML_SUPPORT_TRUE@am__append_2 = $(DEPS_SML_LIBS) +@SML_SUPPORT_TRUE@am__append_3 = $(DEPS_SML_CFLAGS) + +# local interface support +#################################################################### +@LOCAL_SUPPORT_TRUE@am__append_4 = local.c +@LOCAL_SUPPORT_TRUE@am__append_5 = $(DEPS_LOCAL_LIBS) +@LOCAL_SUPPORT_TRUE@am__append_6 = $(DEPS_LOCAL_CFLAGS) subdir = src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -47,43 +55,29 @@ 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__installdirs = "$(DESTDIR)$(libdir)" -LIBRARIES = $(lib_LIBRARIES) -AR = ar -ARFLAGS = cru -libmtr_a_AR = $(AR) $(ARFLAGS) -libmtr_a_LIBADD = -am__libmtr_a_SOURCES_DIST = meter.c ltqnorm.c obis.c options.c \ +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) +am__vzlogger_SOURCES_DIST = vzlogger.c channel.c api.c config.c \ + threads.c buffer.c meter.c ltqnorm.c obis.c options.c \ reading.c protocols/s0.c protocols/d0.c protocols/fluksov2.c \ protocols/file.c protocols/exec.c protocols/random.c \ - protocols/sml.c + protocols/sml.c local.c @SML_SUPPORT_TRUE@am__objects_1 = sml.$(OBJEXT) -am_libmtr_a_OBJECTS = meter.$(OBJEXT) ltqnorm.$(OBJEXT) obis.$(OBJEXT) \ - options.$(OBJEXT) reading.$(OBJEXT) s0.$(OBJEXT) d0.$(OBJEXT) \ - fluksov2.$(OBJEXT) file.$(OBJEXT) exec.$(OBJEXT) \ - random.$(OBJEXT) $(am__objects_1) -libmtr_a_OBJECTS = $(am_libmtr_a_OBJECTS) +@LOCAL_SUPPORT_TRUE@am__objects_2 = local.$(OBJEXT) +am_vzlogger_OBJECTS = vzlogger.$(OBJEXT) channel.$(OBJEXT) \ + api.$(OBJEXT) config.$(OBJEXT) threads.$(OBJEXT) \ + buffer.$(OBJEXT) meter.$(OBJEXT) ltqnorm.$(OBJEXT) \ + obis.$(OBJEXT) options.$(OBJEXT) reading.$(OBJEXT) \ + s0.$(OBJEXT) d0.$(OBJEXT) fluksov2.$(OBJEXT) file.$(OBJEXT) \ + exec.$(OBJEXT) random.$(OBJEXT) $(am__objects_1) \ + $(am__objects_2) +vzlogger_OBJECTS = $(am_vzlogger_OBJECTS) +am__DEPENDENCIES_1 = +@SML_SUPPORT_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) +@LOCAL_SUPPORT_TRUE@am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1) +vzlogger_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) +vzlogger_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(vzlogger_LDFLAGS) \ + $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles @@ -92,8 +86,8 @@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(libmtr_a_SOURCES) -DIST_SOURCES = $(am__libmtr_a_SOURCES_DIST) +SOURCES = $(vzlogger_SOURCES) +DIST_SOURCES = $(am__vzlogger_SOURCES_DIST) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) @@ -150,7 +144,7 @@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ -VERSION = 1:0:0 +VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ @@ -193,15 +187,19 @@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -AM_CFLAGS = -Wall -D_REENTRANT -std=gnu99 $(am__append_2) -AM_CPPFLAGS = -I$(top_srcdir)/include +AM_CFLAGS = -Wall -D_REENTRANT -std=gnu99 $(DEPS_VZ_CFLAGS) \ + $(am__append_3) $(am__append_6) +AM_CPPFLAGS = -I $(top_srcdir)/include AM_LDFLAGS = -lib_LIBRARIES = libmtr.a -libmtr_a_SOURCES = meter.c ltqnorm.c obis.c options.c reading.c \ + +# Protocols (add your own here) +vzlogger_SOURCES = vzlogger.c channel.c api.c config.c threads.c \ + buffer.c meter.c ltqnorm.c obis.c options.c reading.c \ protocols/s0.c protocols/d0.c protocols/fluksov2.c \ protocols/file.c protocols/exec.c protocols/random.c \ - $(am__append_1) -libmtr_a_LDFLAGS = -version-info $(VERSION) + $(am__append_1) $(am__append_4) +vzlogger_LDADD = $(am__append_2) $(am__append_5) +vzlogger_LDFLAGS = -lpthread -lm $(DEPS_VZ_LIBS) all: all-am .SUFFIXES: @@ -236,42 +234,46 @@ $(top_srcdir)/configure: $(am__configure_deps) $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): -install-libLIBRARIES: $(lib_LIBRARIES) +install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) - test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" - @list='$(lib_LIBRARIES)'; 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 " $(INSTALL_DATA) $$list2 '$(DESTDIR)$(libdir)'"; \ - $(INSTALL_DATA) $$list2 "$(DESTDIR)$(libdir)" || exit $$?; } - @$(POST_INSTALL) - @list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \ - for p in $$list; do \ - if test -f $$p; then \ - $(am__strip_dir) \ - echo " ( cd '$(DESTDIR)$(libdir)' && $(RANLIB) $$f )"; \ - ( cd "$(DESTDIR)$(libdir)" && $(RANLIB) $$f ) || exit $$?; \ - else :; fi; \ - done + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done -uninstall-libLIBRARIES: +uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) - @list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(libdir)' && rm -f "$$files" )"; \ - cd "$(DESTDIR)$(libdir)" && rm -f $$files + @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-libLIBRARIES: - -test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES) -libmtr.a: $(libmtr_a_OBJECTS) $(libmtr_a_DEPENDENCIES) - -rm -f libmtr.a - $(libmtr_a_AR) libmtr.a $(libmtr_a_OBJECTS) $(libmtr_a_LIBADD) - $(RANLIB) libmtr.a +clean-binPROGRAMS: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) +vzlogger$(EXEEXT): $(vzlogger_OBJECTS) $(vzlogger_DEPENDENCIES) + @rm -f vzlogger$(EXEEXT) + $(vzlogger_LINK) $(vzlogger_OBJECTS) $(vzlogger_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -279,10 +281,15 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/api.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/buffer.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/channel.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/config.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/d0.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exec.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fluksov2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/local.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ltqnorm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/meter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obis.Po@am__quote@ @@ -291,6 +298,8 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reading.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s0.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sml.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/threads.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vzlogger.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @@ -488,9 +497,9 @@ distdir: $(DISTFILES) done check-am: all-am check: check-am -all-am: Makefile $(LIBRARIES) +all-am: Makefile $(PROGRAMS) installdirs: - for dir in "$(DESTDIR)$(libdir)"; do \ + for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am @@ -520,7 +529,7 @@ maintainer-clean-generic: @echo "it deletes files that may require special tools to rebuild." clean: clean-am -clean-am: clean-generic clean-libLIBRARIES mostlyclean-am +clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) @@ -546,7 +555,7 @@ install-dvi: install-dvi-am install-dvi-am: -install-exec-am: install-libLIBRARIES +install-exec-am: install-binPROGRAMS install-html: install-html-am @@ -585,22 +594,22 @@ ps: ps-am ps-am: -uninstall-am: uninstall-libLIBRARIES +uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libLIBRARIES ctags distclean distclean-compile \ +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-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-libLIBRARIES install-man install-pdf \ + html-am info info-am install install-am install-binPROGRAMS \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ - uninstall-am uninstall-libLIBRARIES + uninstall-am uninstall-binPROGRAMS # Tell versions [3.59,3.63) of GNU make to not export all variables. diff --git a/bin/logger/src/api.c b/src/api.c similarity index 99% rename from bin/logger/src/api.c rename to src/api.c index a5c11e1..9c17271 100644 --- a/bin/logger/src/api.c +++ b/src/api.c @@ -28,8 +28,8 @@ #include #include #include -#include +#include "meter.h" #include "api.h" #include "vzlogger.h" diff --git a/bin/logger/src/buffer.c b/src/buffer.c similarity index 100% rename from bin/logger/src/buffer.c rename to src/buffer.c diff --git a/bin/logger/src/channel.c b/src/channel.c similarity index 100% rename from bin/logger/src/channel.c rename to src/channel.c diff --git a/bin/logger/src/config.c b/src/config.c similarity index 100% rename from bin/logger/src/config.c rename to src/config.c diff --git a/bin/logger/src/local.c b/src/local.c similarity index 100% rename from bin/logger/src/local.c rename to src/local.c diff --git a/src/meter.c b/src/meter.c index b79542c..f32bb8b 100644 --- a/src/meter.c +++ b/src/meter.c @@ -24,7 +24,7 @@ */ #include -#include +#include #include "meter.h" #include "options.h" diff --git a/src/obis.c b/src/obis.c index b0df1f4..bebf853 100644 --- a/src/obis.c +++ b/src/obis.c @@ -93,6 +93,7 @@ const obis_alias_t * obis_get_aliases() { obis_id_t * obis_init(obis_id_t *id, unsigned char *raw) { if (raw == NULL) { + // TODO why not initialize with DC fields to accept all readings? memset(id->raw, 0, 6); /* initialize with zeros */ } else { diff --git a/src/options.c b/src/options.c index 778c36d..aa4237f 100644 --- a/src/options.c +++ b/src/options.c @@ -1,3 +1,28 @@ +/** + * Option list functions + * + * @package vzlogger + * @copyright Copyright (c) 2011, The volkszaehler.org project + * @license http://www.gnu.org/licenses/gpl.txt GNU Public License + * @author Steffen Vogel + */ +/* + * This file is part of volkzaehler.org + * + * volkzaehler.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * volkzaehler.org is distributed in the hope that 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 volkszaehler.org. If not, see . + */ + #include #include "options.h" diff --git a/src/protocols/d0.c b/src/protocols/d0.c index dcf4aac..8708066 100644 --- a/src/protocols/d0.c +++ b/src/protocols/d0.c @@ -65,7 +65,7 @@ int meter_init_d0(meter_t *mtr, list_t options) { } /* baudrate */ - int baudrate; + int baudrate = 9600; /* default to avoid compiler warning */ switch (options_lookup_int(options, "baudrate", &handle->baudrate)) { case SUCCESS: /* find constant for termios structure */ diff --git a/bin/logger/src/threads.c b/src/threads.c similarity index 99% rename from bin/logger/src/threads.c rename to src/threads.c index 3e521ee..42999d2 100644 --- a/bin/logger/src/threads.c +++ b/src/threads.c @@ -26,11 +26,10 @@ #include #include -#include - -#include "threads.h" +#include "reading.h" #include "api.h" #include "vzlogger.h" +#include "threads.h" extern config_options_t options; diff --git a/src/vzlogger b/src/vzlogger new file mode 100755 index 0000000000000000000000000000000000000000..0e0be4ac90c712747502508721106d05e2ae1dec GIT binary patch literal 201324 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 #include -#include -#include -#include - +#include "list.h" +#include "meter.h" +#include "obis.h" #include "vzlogger.h" #include "channel.h" #include "threads.h" #ifdef LOCAL_SUPPORT -#include #include "local.h" #endif /* LOCAL_SUPPORT */