mirror of
https://github.com/3cky/mbusd.git
synced 2024-12-24 16:37:37 +01:00
Initial revision
This commit is contained in:
commit
0696cbd292
26
COPYING
Normal file
26
COPYING
Normal file
@ -0,0 +1,26 @@
|
||||
* OpenMODBUS/TCP to RS-232/485 MODBUS gateway license *
|
||||
|
||||
Copyright (c) 2002-2003, Victor Antonovich (avmlink@vlink.ru)
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
- Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
- Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
||||
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
182
INSTALL
Normal file
182
INSTALL
Normal file
@ -0,0 +1,182 @@
|
||||
Basic Installation
|
||||
==================
|
||||
|
||||
These are generic installation instructions.
|
||||
|
||||
The `configure' shell script attempts to guess correct values for
|
||||
various system-dependent variables used during compilation. It uses
|
||||
those values to create a `Makefile' in each directory of the package.
|
||||
It may also create one or more `.h' files containing system-dependent
|
||||
definitions. Finally, it creates a shell script `config.status' that
|
||||
you can run in the future to recreate the current configuration, a file
|
||||
`config.cache' that saves the results of its tests to speed up
|
||||
reconfiguring, and a file `config.log' containing compiler output
|
||||
(useful mainly for debugging `configure').
|
||||
|
||||
If you need to do unusual things to compile the package, please try
|
||||
to figure out how `configure' could check whether to do them, and mail
|
||||
diffs or instructions to the address given in the `README' so they can
|
||||
be considered for the next release. If at some point `config.cache'
|
||||
contains results you don't want to keep, you may remove or edit it.
|
||||
|
||||
The file `configure.in' is used to create `configure' by a program
|
||||
called `autoconf'. You only need `configure.in' if you want to change
|
||||
it or regenerate `configure' using a newer version of `autoconf'.
|
||||
|
||||
The simplest way to compile this package is:
|
||||
|
||||
1. `cd' to the directory containing the package's source code and type
|
||||
`./configure' to configure the package for your system. If you're
|
||||
using `csh' on an old version of System V, you might need to type
|
||||
`sh ./configure' instead to prevent `csh' from trying to execute
|
||||
`configure' itself.
|
||||
|
||||
Running `configure' takes awhile. While running, it prints some
|
||||
messages telling which features it is checking for.
|
||||
|
||||
2. Type `make' to compile the package.
|
||||
|
||||
3. Optionally, type `make check' to run any self-tests that come with
|
||||
the package.
|
||||
|
||||
4. Type `make install' to install the programs and any data files and
|
||||
documentation.
|
||||
|
||||
5. You can remove the program binaries and object files from the
|
||||
source code directory by typing `make clean'. To also remove the
|
||||
files that `configure' created (so you can compile the package for
|
||||
a different kind of computer), type `make distclean'. There is
|
||||
also a `make maintainer-clean' target, but that is intended mainly
|
||||
for the package's developers. If you use it, you may have to get
|
||||
all sorts of other programs in order to regenerate files that came
|
||||
with the distribution.
|
||||
|
||||
Compilers and Options
|
||||
=====================
|
||||
|
||||
Some systems require unusual options for compilation or linking that
|
||||
the `configure' script does not know about. You can give `configure'
|
||||
initial values for variables by setting them in the environment. Using
|
||||
a Bourne-compatible shell, you can do that on the command line like
|
||||
this:
|
||||
CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
|
||||
|
||||
Or on systems that have the `env' program, you can do it like this:
|
||||
env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
|
||||
|
||||
Compiling For Multiple Architectures
|
||||
====================================
|
||||
|
||||
You can compile the package for more than one kind of computer at the
|
||||
same time, by placing the object files for each architecture in their
|
||||
own directory. To do this, you must use a version of `make' that
|
||||
supports the `VPATH' variable, such as GNU `make'. `cd' to the
|
||||
directory where you want the object files and executables to go and run
|
||||
the `configure' script. `configure' automatically checks for the
|
||||
source code in the directory that `configure' is in and in `..'.
|
||||
|
||||
If you have to use a `make' that does not supports the `VPATH'
|
||||
variable, you have to compile the package for one architecture at a time
|
||||
in the source code directory. After you have installed the package for
|
||||
one architecture, use `make distclean' before reconfiguring for another
|
||||
architecture.
|
||||
|
||||
Installation Names
|
||||
==================
|
||||
|
||||
By default, `make install' will install the package's files in
|
||||
`/usr/local/bin', `/usr/local/man', etc. You can specify an
|
||||
installation prefix other than `/usr/local' by giving `configure' the
|
||||
option `--prefix=PATH'.
|
||||
|
||||
You can specify separate installation prefixes for
|
||||
architecture-specific files and architecture-independent files. If you
|
||||
give `configure' the option `--exec-prefix=PATH', the package will use
|
||||
PATH as the prefix for installing programs and libraries.
|
||||
Documentation and other data files will still use the regular prefix.
|
||||
|
||||
In addition, if you use an unusual directory layout you can give
|
||||
options like `--bindir=PATH' to specify different values for particular
|
||||
kinds of files. Run `configure --help' for a list of the directories
|
||||
you can set and what kinds of files go in them.
|
||||
|
||||
If the package supports it, you can cause programs to be installed
|
||||
with an extra prefix or suffix on their names by giving `configure' the
|
||||
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
|
||||
|
||||
Optional Features
|
||||
=================
|
||||
|
||||
Some packages pay attention to `--enable-FEATURE' options to
|
||||
`configure', where FEATURE indicates an optional part of the package.
|
||||
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
|
||||
is something like `gnu-as' or `x' (for the X Window System). The
|
||||
`README' should mention any `--enable-' and `--with-' options that the
|
||||
package recognizes.
|
||||
|
||||
For packages that use the X Window System, `configure' can usually
|
||||
find the X include and library files automatically, but if it doesn't,
|
||||
you can use the `configure' options `--x-includes=DIR' and
|
||||
`--x-libraries=DIR' to specify their locations.
|
||||
|
||||
Specifying the System Type
|
||||
==========================
|
||||
|
||||
There may be some features `configure' can not figure out
|
||||
automatically, but needs to determine by the type of host the package
|
||||
will run on. Usually `configure' can figure that out, but if it prints
|
||||
a message saying it can not guess the host type, give it the
|
||||
`--host=TYPE' option. TYPE can either be a short name for the system
|
||||
type, such as `sun4', or a canonical name with three fields:
|
||||
CPU-COMPANY-SYSTEM
|
||||
|
||||
See the file `config.sub' for the possible values of each field. If
|
||||
`config.sub' isn't included in this package, then this package doesn't
|
||||
need to know the host type.
|
||||
|
||||
If you are building compiler tools for cross-compiling, you can also
|
||||
use the `--target=TYPE' option to select the type of system they will
|
||||
produce code for and the `--build=TYPE' option to select the type of
|
||||
system on which you are compiling the package.
|
||||
|
||||
Sharing Defaults
|
||||
================
|
||||
|
||||
If you want to set default values for `configure' scripts to share,
|
||||
you can create a site shell script called `config.site' that gives
|
||||
default values for variables like `CC', `cache_file', and `prefix'.
|
||||
`configure' looks for `PREFIX/share/config.site' if it exists, then
|
||||
`PREFIX/etc/config.site' if it exists. Or, you can set the
|
||||
`CONFIG_SITE' environment variable to the location of the site script.
|
||||
A warning: not all `configure' scripts look for a site script.
|
||||
|
||||
Operation Controls
|
||||
==================
|
||||
|
||||
`configure' recognizes the following options to control how it
|
||||
operates.
|
||||
|
||||
`--cache-file=FILE'
|
||||
Use and save the results of the tests in FILE instead of
|
||||
`./config.cache'. Set FILE to `/dev/null' to disable caching, for
|
||||
debugging `configure'.
|
||||
|
||||
`--help'
|
||||
Print a summary of the options to `configure', and exit.
|
||||
|
||||
`--quiet'
|
||||
`--silent'
|
||||
`-q'
|
||||
Do not print messages saying which checks are being made. To
|
||||
suppress all normal output, redirect it to `/dev/null' (any error
|
||||
messages will still be shown).
|
||||
|
||||
`--srcdir=DIR'
|
||||
Look for the package's source code in directory DIR. Usually
|
||||
`configure' can determine that directory automatically.
|
||||
|
||||
`--version'
|
||||
Print the version of Autoconf used to generate the `configure'
|
||||
script, and exit.
|
||||
|
||||
`configure' also accepts some other, not widely useful, options.
|
467
Makefile
Normal file
467
Makefile
Normal file
@ -0,0 +1,467 @@
|
||||
# Generated automatically from Makefile.in by configure.
|
||||
# Makefile.in generated automatically by automake 1.5 from Makefile.am.
|
||||
|
||||
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
|
||||
# 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.
|
||||
|
||||
|
||||
|
||||
SHELL = /bin/sh
|
||||
|
||||
srcdir = .
|
||||
top_srcdir = .
|
||||
prefix = /usr/local
|
||||
exec_prefix = ${prefix}
|
||||
|
||||
bindir = ${exec_prefix}/bin
|
||||
sbindir = ${exec_prefix}/sbin
|
||||
libexecdir = ${exec_prefix}/libexec
|
||||
datadir = ${prefix}/share
|
||||
sysconfdir = ${prefix}/etc
|
||||
sharedstatedir = ${prefix}/com
|
||||
localstatedir = ${prefix}/var
|
||||
libdir = ${exec_prefix}/lib
|
||||
infodir = ${prefix}/info
|
||||
mandir = ${prefix}/man
|
||||
includedir = ${prefix}/include
|
||||
oldincludedir = /usr/include
|
||||
pkgdatadir = $(datadir)/mbusd
|
||||
pkglibdir = $(libdir)/mbusd
|
||||
pkgincludedir = $(includedir)/mbusd
|
||||
top_builddir = .
|
||||
|
||||
ACLOCAL = ${SHELL} /usr/home/avm/work/mbus/missing --run aclocal
|
||||
AUTOCONF = ${SHELL} /usr/home/avm/work/mbus/missing --run autoconf
|
||||
AUTOMAKE = ${SHELL} /usr/home/avm/work/mbus/missing --run automake
|
||||
AUTOHEADER = ${SHELL} /usr/home/avm/work/mbus/missing --run autoheader
|
||||
|
||||
INSTALL = /usr/bin/install -c
|
||||
INSTALL_PROGRAM = ${INSTALL}
|
||||
INSTALL_DATA = ${INSTALL} -m 644
|
||||
INSTALL_SCRIPT = ${INSTALL_PROGRAM}
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = s,x,x,
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
host_alias = i386-unknown-freebsdelf4.8
|
||||
host_triplet = i386-unknown-freebsdelf4.8
|
||||
AMTAR = ${SHELL} /usr/home/avm/work/mbus/missing --run tar
|
||||
AS = @AS@
|
||||
AWK = gawk
|
||||
CC = gcc
|
||||
DEPDIR = .deps
|
||||
DLLTOOL = @DLLTOOL@
|
||||
EXEEXT =
|
||||
INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s
|
||||
LIBTOOL = $(SHELL) $(top_builddir)/libtool
|
||||
LN_S = ln -s
|
||||
NO_PREFIX_PACKAGE_DATA_DIR = share/mbusd
|
||||
NO_PREFIX_PACKAGE_DOC_DIR = doc/mbusd
|
||||
NO_PREFIX_PACKAGE_HELP_DIR = share/mbusd/help
|
||||
NO_PREFIX_PACKAGE_MENU_DIR = share/mbusd
|
||||
NO_PREFIX_PACKAGE_PIXMAPS_DIR = share/mbusd/pixmaps
|
||||
OBJDUMP = @OBJDUMP@
|
||||
OBJEXT = o
|
||||
PACKAGE = mbusd
|
||||
PACKAGE_DATA_DIR = /usr/local/share/mbusd
|
||||
PACKAGE_DOC_DIR = /usr/local/doc/mbusd
|
||||
PACKAGE_HELP_DIR = /usr/local/share/mbusd/help
|
||||
PACKAGE_MENU_DIR = /usr/local/share/mbusd
|
||||
PACKAGE_PIXMAPS_DIR = /usr/local/share/mbusd/pixmaps
|
||||
RANLIB = ranlib
|
||||
VERSION = 0.1.1
|
||||
am__include = include
|
||||
am__quote =
|
||||
install_sh = /usr/home/avm/work/mbus/install-sh
|
||||
|
||||
SUBDIRS = src doc
|
||||
|
||||
mbusddocdir = ${prefix}/doc/mbusd
|
||||
mbusddoc_DATA = \
|
||||
README\
|
||||
COPYING\
|
||||
AUTHORS\
|
||||
ChangeLog\
|
||||
INSTALL\
|
||||
NEWS\
|
||||
TODO
|
||||
|
||||
|
||||
EXTRA_DIST = $(mbusddoc_DATA)
|
||||
subdir = .
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
DIST_SOURCES =
|
||||
DATA = $(mbusddoc_DATA)
|
||||
|
||||
|
||||
RECURSIVE_TARGETS = info-recursive dvi-recursive install-info-recursive \
|
||||
uninstall-info-recursive all-recursive install-data-recursive \
|
||||
install-exec-recursive installdirs-recursive install-recursive \
|
||||
uninstall-recursive check-recursive installcheck-recursive
|
||||
DIST_COMMON = README ./stamp-h.in AUTHORS COPYING ChangeLog INSTALL \
|
||||
Makefile.am Makefile.in NEWS TODO acconfig.h acinclude.m4 \
|
||||
aclocal.m4 config.guess config.h.in config.sub configure \
|
||||
configure.in depcomp install-sh ltconfig ltmain.sh missing \
|
||||
mkinstalldirs
|
||||
DIST_SUBDIRS = $(SUBDIRS)
|
||||
all: config.h
|
||||
$(MAKE) $(AM_MAKEFLAGS) all-recursive
|
||||
|
||||
.SUFFIXES:
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
cd $(top_builddir) && \
|
||||
CONFIG_HEADERS= CONFIG_LINKS= \
|
||||
CONFIG_FILES=$@ $(SHELL) ./config.status
|
||||
|
||||
$(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
$(SHELL) ./config.status --recheck
|
||||
$(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
|
||||
cd $(srcdir) && $(AUTOCONF)
|
||||
|
||||
$(ACLOCAL_M4): configure.in acinclude.m4
|
||||
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
|
||||
config.h: stamp-h
|
||||
@if test ! -f $@; then \
|
||||
rm -f stamp-h; \
|
||||
$(MAKE) stamp-h; \
|
||||
else :; fi
|
||||
stamp-h: $(srcdir)/config.h.in $(top_builddir)/config.status
|
||||
@rm -f stamp-h stamp-hT
|
||||
@echo timestamp > stamp-hT 2> /dev/null
|
||||
cd $(top_builddir) \
|
||||
&& CONFIG_FILES= CONFIG_HEADERS=config.h \
|
||||
$(SHELL) ./config.status
|
||||
@mv stamp-hT stamp-h
|
||||
$(srcdir)/config.h.in: $(srcdir)/./stamp-h.in
|
||||
@if test ! -f $@; then \
|
||||
rm -f $(srcdir)/./stamp-h.in; \
|
||||
$(MAKE) $(srcdir)/./stamp-h.in; \
|
||||
else :; fi
|
||||
$(srcdir)/./stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) $(top_srcdir)/acconfig.h
|
||||
@rm -f $(srcdir)/./stamp-h.in $(srcdir)/./stamp-h.inT
|
||||
@echo timestamp > $(srcdir)/./stamp-h.inT 2> /dev/null
|
||||
cd $(top_srcdir) && $(AUTOHEADER)
|
||||
@mv $(srcdir)/./stamp-h.inT $(srcdir)/./stamp-h.in
|
||||
|
||||
distclean-hdr:
|
||||
-rm -f config.h
|
||||
uninstall-info-am:
|
||||
install-mbusddocDATA: $(mbusddoc_DATA)
|
||||
@$(NORMAL_INSTALL)
|
||||
$(mkinstalldirs) $(DESTDIR)$(mbusddocdir)
|
||||
@list='$(mbusddoc_DATA)'; for p in $$list; do \
|
||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
f="`echo $$p | sed -e 's|^.*/||'`"; \
|
||||
echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(mbusddocdir)/$$f"; \
|
||||
$(INSTALL_DATA) $$d$$p $(DESTDIR)$(mbusddocdir)/$$f; \
|
||||
done
|
||||
|
||||
uninstall-mbusddocDATA:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(mbusddoc_DATA)'; for p in $$list; do \
|
||||
f="`echo $$p | sed -e 's|^.*/||'`"; \
|
||||
echo " rm -f $(DESTDIR)$(mbusddocdir)/$$f"; \
|
||||
rm -f $(DESTDIR)$(mbusddocdir)/$$f; \
|
||||
done
|
||||
|
||||
# This directory's subdirectories are mostly independent; you can cd
|
||||
# into them and run `make' without going through this Makefile.
|
||||
# To change the values of `make' variables: instead of editing Makefiles,
|
||||
# (1) if the variable is set in `config.status', edit `config.status'
|
||||
# (which will cause the Makefiles to be regenerated when you run `make');
|
||||
# (2) otherwise, pass the desired values on the `make' command line.
|
||||
$(RECURSIVE_TARGETS):
|
||||
@set fnord $(MAKEFLAGS); amf=$$2; \
|
||||
dot_seen=no; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
dot_seen=yes; \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||
done; \
|
||||
if test "$$dot_seen" = "no"; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
||||
fi; test -z "$$fail"
|
||||
|
||||
mostlyclean-recursive clean-recursive distclean-recursive \
|
||||
maintainer-clean-recursive:
|
||||
@set fnord $(MAKEFLAGS); amf=$$2; \
|
||||
dot_seen=no; \
|
||||
case "$@" in \
|
||||
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
||||
*) list='$(SUBDIRS)' ;; \
|
||||
esac; \
|
||||
rev=''; for subdir in $$list; do \
|
||||
if test "$$subdir" = "."; then :; else \
|
||||
rev="$$subdir $$rev"; \
|
||||
fi; \
|
||||
done; \
|
||||
rev="$$rev ."; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
for subdir in $$rev; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||
done && test -z "$$fail"
|
||||
tags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
|
||||
done
|
||||
|
||||
tags: TAGS
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique $(LISP)
|
||||
|
||||
TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
|
||||
fi; \
|
||||
done; \
|
||||
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \
|
||||
|| etags $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP)
|
||||
|
||||
GTAGS:
|
||||
here=`CDPATH=: && cd $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
|
||||
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
top_distdir = .
|
||||
# Avoid unsightly `./'.
|
||||
distdir = $(PACKAGE)-$(VERSION)
|
||||
|
||||
GZIP_ENV = --best
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
-chmod -R a+w $(distdir) >/dev/null 2>&1; rm -rf $(distdir)
|
||||
mkdir $(distdir)
|
||||
@for file in $(DISTFILES); do \
|
||||
if test -f $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
$(mkinstalldirs) "$(distdir)/$$dir"; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
cp -pR $$d/$$file $(distdir) \
|
||||
|| exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
for subdir in $(SUBDIRS); do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test -d $(distdir)/$$subdir \
|
||||
|| mkdir $(distdir)/$$subdir \
|
||||
|| exit 1; \
|
||||
(cd $$subdir && \
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$(top_distdir)" \
|
||||
distdir=../$(distdir)/$$subdir \
|
||||
distdir) \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="${top_distdir}" distdir="$(distdir)" \
|
||||
dist-hook
|
||||
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
|
||||
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
|
||||
|| chmod -R a+r $(distdir)
|
||||
dist: distdir
|
||||
$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
-chmod -R a+w $(distdir) >/dev/null 2>&1; rm -rf $(distdir)
|
||||
|
||||
# This target untars the dist file and tries a VPATH configuration. Then
|
||||
# it guarantees that the distribution is self-contained by making another
|
||||
# tarfile.
|
||||
distcheck: dist
|
||||
-chmod -R a+w $(distdir) > /dev/null 2>&1; rm -rf $(distdir)
|
||||
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf -
|
||||
chmod -R a-w $(distdir); chmod a+w $(distdir)
|
||||
mkdir $(distdir)/=build
|
||||
mkdir $(distdir)/=inst
|
||||
chmod a-w $(distdir)
|
||||
dc_install_base=`CDPATH=: && cd $(distdir)/=inst && pwd` \
|
||||
&& cd $(distdir)/=build \
|
||||
&& ../configure --srcdir=.. --prefix=$$dc_install_base \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) check \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
|
||||
&& (test `find $$dc_install_base -type f -print | wc -l` -le 1 \
|
||||
|| (echo "Error: files left after uninstall" 1>&2; \
|
||||
exit 1) ) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dist \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distclean \
|
||||
&& rm -f $(distdir).tar.gz \
|
||||
&& (test `find . -type f -print | wc -l` -eq 0 \
|
||||
|| (echo "Error: files left after distclean" 1>&2; \
|
||||
exit 1) )
|
||||
-chmod -R a+w $(distdir) > /dev/null 2>&1; rm -rf $(distdir)
|
||||
@echo "$(distdir).tar.gz is ready for distribution" | \
|
||||
sed 'h;s/./=/g;p;x;p;x'
|
||||
check-am: all-am
|
||||
check: check-recursive
|
||||
all-am: Makefile $(DATA) config.h
|
||||
installdirs: installdirs-recursive
|
||||
installdirs-am:
|
||||
$(mkinstalldirs) $(DESTDIR)$(mbusddocdir)
|
||||
|
||||
install: install-recursive
|
||||
install-exec: install-exec-recursive
|
||||
install-data: install-data-recursive
|
||||
uninstall: uninstall-recursive
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-recursive
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-recursive
|
||||
|
||||
clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
dist-all: distdir
|
||||
$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
-chmod -R a+w $(distdir) >/dev/null 2>&1; rm -rf $(distdir)
|
||||
distclean: distclean-recursive
|
||||
-rm -f config.status config.cache config.log
|
||||
distclean-am: clean-am distclean-generic distclean-hdr distclean-libtool \
|
||||
distclean-tags
|
||||
|
||||
dvi: dvi-recursive
|
||||
|
||||
dvi-am:
|
||||
|
||||
info: info-recursive
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-mbusddocDATA
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-recursive
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-recursive
|
||||
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-recursive
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
uninstall-am: uninstall-info-am uninstall-mbusddocDATA
|
||||
|
||||
uninstall-info: uninstall-info-recursive
|
||||
|
||||
.PHONY: $(RECURSIVE_TARGETS) GTAGS all all-am check check-am clean \
|
||||
clean-generic clean-libtool clean-recursive dist dist-all \
|
||||
distcheck distclean distclean-generic distclean-hdr \
|
||||
distclean-libtool distclean-recursive distclean-tags distdir \
|
||||
dvi dvi-am dvi-recursive info info-am info-recursive install \
|
||||
install-am install-data install-data-am install-data-recursive \
|
||||
install-exec install-exec-am install-exec-recursive \
|
||||
install-info install-info-am install-info-recursive install-man \
|
||||
install-mbusddocDATA install-recursive install-strip \
|
||||
installcheck installcheck-am installdirs installdirs-am \
|
||||
installdirs-recursive maintainer-clean maintainer-clean-generic \
|
||||
maintainer-clean-recursive mostlyclean mostlyclean-generic \
|
||||
mostlyclean-libtool mostlyclean-recursive tags tags-recursive \
|
||||
uninstall uninstall-am uninstall-info-am \
|
||||
uninstall-info-recursive uninstall-mbusddocDATA \
|
||||
uninstall-recursive
|
||||
|
||||
|
||||
# Copy all the spec files. Of cource, only one is actually used.
|
||||
dist-hook:
|
||||
for specfile in *.spec; do \
|
||||
if test -f $$specfile; then \
|
||||
cp -p $$specfile $(distdir); \
|
||||
fi \
|
||||
done
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
24
Makefile.am
Normal file
24
Makefile.am
Normal file
@ -0,0 +1,24 @@
|
||||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
SUBDIRS = src doc
|
||||
|
||||
mbusddocdir = ${prefix}/doc/mbusd
|
||||
mbusddoc_DATA = \
|
||||
README\
|
||||
COPYING\
|
||||
AUTHORS\
|
||||
ChangeLog\
|
||||
INSTALL\
|
||||
NEWS\
|
||||
TODO
|
||||
|
||||
EXTRA_DIST = $(mbusddoc_DATA)
|
||||
|
||||
# Copy all the spec files. Of cource, only one is actually used.
|
||||
dist-hook:
|
||||
for specfile in *.spec; do \
|
||||
if test -f $$specfile; then \
|
||||
cp -p $$specfile $(distdir); \
|
||||
fi \
|
||||
done
|
||||
|
467
Makefile.in
Normal file
467
Makefile.in
Normal file
@ -0,0 +1,467 @@
|
||||
# Makefile.in generated automatically by automake 1.5 from Makefile.am.
|
||||
|
||||
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
|
||||
# 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@
|
||||
|
||||
SHELL = @SHELL@
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
prefix = @prefix@
|
||||
exec_prefix = @exec_prefix@
|
||||
|
||||
bindir = @bindir@
|
||||
sbindir = @sbindir@
|
||||
libexecdir = @libexecdir@
|
||||
datadir = @datadir@
|
||||
sysconfdir = @sysconfdir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
localstatedir = @localstatedir@
|
||||
libdir = @libdir@
|
||||
infodir = @infodir@
|
||||
mandir = @mandir@
|
||||
includedir = @includedir@
|
||||
oldincludedir = /usr/include
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = .
|
||||
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = @program_transform_name@
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
host_alias = @host_alias@
|
||||
host_triplet = @host@
|
||||
AMTAR = @AMTAR@
|
||||
AS = @AS@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
EXEEXT = @EXEEXT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LN_S = @LN_S@
|
||||
NO_PREFIX_PACKAGE_DATA_DIR = @NO_PREFIX_PACKAGE_DATA_DIR@
|
||||
NO_PREFIX_PACKAGE_DOC_DIR = @NO_PREFIX_PACKAGE_DOC_DIR@
|
||||
NO_PREFIX_PACKAGE_HELP_DIR = @NO_PREFIX_PACKAGE_HELP_DIR@
|
||||
NO_PREFIX_PACKAGE_MENU_DIR = @NO_PREFIX_PACKAGE_MENU_DIR@
|
||||
NO_PREFIX_PACKAGE_PIXMAPS_DIR = @NO_PREFIX_PACKAGE_PIXMAPS_DIR@
|
||||
OBJDUMP = @OBJDUMP@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_DATA_DIR = @PACKAGE_DATA_DIR@
|
||||
PACKAGE_DOC_DIR = @PACKAGE_DOC_DIR@
|
||||
PACKAGE_HELP_DIR = @PACKAGE_HELP_DIR@
|
||||
PACKAGE_MENU_DIR = @PACKAGE_MENU_DIR@
|
||||
PACKAGE_PIXMAPS_DIR = @PACKAGE_PIXMAPS_DIR@
|
||||
RANLIB = @RANLIB@
|
||||
VERSION = @VERSION@
|
||||
am__include = @am__include@
|
||||
am__quote = @am__quote@
|
||||
install_sh = @install_sh@
|
||||
|
||||
SUBDIRS = src doc
|
||||
|
||||
mbusddocdir = ${prefix}/doc/mbusd
|
||||
mbusddoc_DATA = \
|
||||
README\
|
||||
COPYING\
|
||||
AUTHORS\
|
||||
ChangeLog\
|
||||
INSTALL\
|
||||
NEWS\
|
||||
TODO
|
||||
|
||||
|
||||
EXTRA_DIST = $(mbusddoc_DATA)
|
||||
subdir = .
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
DIST_SOURCES =
|
||||
DATA = $(mbusddoc_DATA)
|
||||
|
||||
|
||||
RECURSIVE_TARGETS = info-recursive dvi-recursive install-info-recursive \
|
||||
uninstall-info-recursive all-recursive install-data-recursive \
|
||||
install-exec-recursive installdirs-recursive install-recursive \
|
||||
uninstall-recursive check-recursive installcheck-recursive
|
||||
DIST_COMMON = README ./stamp-h.in AUTHORS COPYING ChangeLog INSTALL \
|
||||
Makefile.am Makefile.in NEWS TODO acconfig.h acinclude.m4 \
|
||||
aclocal.m4 config.guess config.h.in config.sub configure \
|
||||
configure.in depcomp install-sh ltconfig ltmain.sh missing \
|
||||
mkinstalldirs
|
||||
DIST_SUBDIRS = $(SUBDIRS)
|
||||
all: config.h
|
||||
$(MAKE) $(AM_MAKEFLAGS) all-recursive
|
||||
|
||||
.SUFFIXES:
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
cd $(top_builddir) && \
|
||||
CONFIG_HEADERS= CONFIG_LINKS= \
|
||||
CONFIG_FILES=$@ $(SHELL) ./config.status
|
||||
|
||||
$(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
$(SHELL) ./config.status --recheck
|
||||
$(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
|
||||
cd $(srcdir) && $(AUTOCONF)
|
||||
|
||||
$(ACLOCAL_M4): configure.in acinclude.m4
|
||||
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
|
||||
config.h: stamp-h
|
||||
@if test ! -f $@; then \
|
||||
rm -f stamp-h; \
|
||||
$(MAKE) stamp-h; \
|
||||
else :; fi
|
||||
stamp-h: $(srcdir)/config.h.in $(top_builddir)/config.status
|
||||
@rm -f stamp-h stamp-hT
|
||||
@echo timestamp > stamp-hT 2> /dev/null
|
||||
cd $(top_builddir) \
|
||||
&& CONFIG_FILES= CONFIG_HEADERS=config.h \
|
||||
$(SHELL) ./config.status
|
||||
@mv stamp-hT stamp-h
|
||||
$(srcdir)/config.h.in: $(srcdir)/./stamp-h.in
|
||||
@if test ! -f $@; then \
|
||||
rm -f $(srcdir)/./stamp-h.in; \
|
||||
$(MAKE) $(srcdir)/./stamp-h.in; \
|
||||
else :; fi
|
||||
$(srcdir)/./stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) $(top_srcdir)/acconfig.h
|
||||
@rm -f $(srcdir)/./stamp-h.in $(srcdir)/./stamp-h.inT
|
||||
@echo timestamp > $(srcdir)/./stamp-h.inT 2> /dev/null
|
||||
cd $(top_srcdir) && $(AUTOHEADER)
|
||||
@mv $(srcdir)/./stamp-h.inT $(srcdir)/./stamp-h.in
|
||||
|
||||
distclean-hdr:
|
||||
-rm -f config.h
|
||||
uninstall-info-am:
|
||||
install-mbusddocDATA: $(mbusddoc_DATA)
|
||||
@$(NORMAL_INSTALL)
|
||||
$(mkinstalldirs) $(DESTDIR)$(mbusddocdir)
|
||||
@list='$(mbusddoc_DATA)'; for p in $$list; do \
|
||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
f="`echo $$p | sed -e 's|^.*/||'`"; \
|
||||
echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(mbusddocdir)/$$f"; \
|
||||
$(INSTALL_DATA) $$d$$p $(DESTDIR)$(mbusddocdir)/$$f; \
|
||||
done
|
||||
|
||||
uninstall-mbusddocDATA:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(mbusddoc_DATA)'; for p in $$list; do \
|
||||
f="`echo $$p | sed -e 's|^.*/||'`"; \
|
||||
echo " rm -f $(DESTDIR)$(mbusddocdir)/$$f"; \
|
||||
rm -f $(DESTDIR)$(mbusddocdir)/$$f; \
|
||||
done
|
||||
|
||||
# This directory's subdirectories are mostly independent; you can cd
|
||||
# into them and run `make' without going through this Makefile.
|
||||
# To change the values of `make' variables: instead of editing Makefiles,
|
||||
# (1) if the variable is set in `config.status', edit `config.status'
|
||||
# (which will cause the Makefiles to be regenerated when you run `make');
|
||||
# (2) otherwise, pass the desired values on the `make' command line.
|
||||
$(RECURSIVE_TARGETS):
|
||||
@set fnord $(MAKEFLAGS); amf=$$2; \
|
||||
dot_seen=no; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
dot_seen=yes; \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||
done; \
|
||||
if test "$$dot_seen" = "no"; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
||||
fi; test -z "$$fail"
|
||||
|
||||
mostlyclean-recursive clean-recursive distclean-recursive \
|
||||
maintainer-clean-recursive:
|
||||
@set fnord $(MAKEFLAGS); amf=$$2; \
|
||||
dot_seen=no; \
|
||||
case "$@" in \
|
||||
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
||||
*) list='$(SUBDIRS)' ;; \
|
||||
esac; \
|
||||
rev=''; for subdir in $$list; do \
|
||||
if test "$$subdir" = "."; then :; else \
|
||||
rev="$$subdir $$rev"; \
|
||||
fi; \
|
||||
done; \
|
||||
rev="$$rev ."; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
for subdir in $$rev; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||
done && test -z "$$fail"
|
||||
tags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
|
||||
done
|
||||
|
||||
tags: TAGS
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique $(LISP)
|
||||
|
||||
TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
|
||||
fi; \
|
||||
done; \
|
||||
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \
|
||||
|| etags $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP)
|
||||
|
||||
GTAGS:
|
||||
here=`CDPATH=: && cd $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
|
||||
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
top_distdir = .
|
||||
# Avoid unsightly `./'.
|
||||
distdir = $(PACKAGE)-$(VERSION)
|
||||
|
||||
GZIP_ENV = --best
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
-chmod -R a+w $(distdir) >/dev/null 2>&1; rm -rf $(distdir)
|
||||
mkdir $(distdir)
|
||||
@for file in $(DISTFILES); do \
|
||||
if test -f $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
$(mkinstalldirs) "$(distdir)/$$dir"; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
cp -pR $$d/$$file $(distdir) \
|
||||
|| exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
for subdir in $(SUBDIRS); do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test -d $(distdir)/$$subdir \
|
||||
|| mkdir $(distdir)/$$subdir \
|
||||
|| exit 1; \
|
||||
(cd $$subdir && \
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$(top_distdir)" \
|
||||
distdir=../$(distdir)/$$subdir \
|
||||
distdir) \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="${top_distdir}" distdir="$(distdir)" \
|
||||
dist-hook
|
||||
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
|
||||
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
|
||||
|| chmod -R a+r $(distdir)
|
||||
dist: distdir
|
||||
$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
-chmod -R a+w $(distdir) >/dev/null 2>&1; rm -rf $(distdir)
|
||||
|
||||
# This target untars the dist file and tries a VPATH configuration. Then
|
||||
# it guarantees that the distribution is self-contained by making another
|
||||
# tarfile.
|
||||
distcheck: dist
|
||||
-chmod -R a+w $(distdir) > /dev/null 2>&1; rm -rf $(distdir)
|
||||
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf -
|
||||
chmod -R a-w $(distdir); chmod a+w $(distdir)
|
||||
mkdir $(distdir)/=build
|
||||
mkdir $(distdir)/=inst
|
||||
chmod a-w $(distdir)
|
||||
dc_install_base=`CDPATH=: && cd $(distdir)/=inst && pwd` \
|
||||
&& cd $(distdir)/=build \
|
||||
&& ../configure --srcdir=.. --prefix=$$dc_install_base \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) check \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
|
||||
&& (test `find $$dc_install_base -type f -print | wc -l` -le 1 \
|
||||
|| (echo "Error: files left after uninstall" 1>&2; \
|
||||
exit 1) ) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dist \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distclean \
|
||||
&& rm -f $(distdir).tar.gz \
|
||||
&& (test `find . -type f -print | wc -l` -eq 0 \
|
||||
|| (echo "Error: files left after distclean" 1>&2; \
|
||||
exit 1) )
|
||||
-chmod -R a+w $(distdir) > /dev/null 2>&1; rm -rf $(distdir)
|
||||
@echo "$(distdir).tar.gz is ready for distribution" | \
|
||||
sed 'h;s/./=/g;p;x;p;x'
|
||||
check-am: all-am
|
||||
check: check-recursive
|
||||
all-am: Makefile $(DATA) config.h
|
||||
installdirs: installdirs-recursive
|
||||
installdirs-am:
|
||||
$(mkinstalldirs) $(DESTDIR)$(mbusddocdir)
|
||||
|
||||
install: install-recursive
|
||||
install-exec: install-exec-recursive
|
||||
install-data: install-data-recursive
|
||||
uninstall: uninstall-recursive
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-recursive
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-recursive
|
||||
|
||||
clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
dist-all: distdir
|
||||
$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
-chmod -R a+w $(distdir) >/dev/null 2>&1; rm -rf $(distdir)
|
||||
distclean: distclean-recursive
|
||||
-rm -f config.status config.cache config.log
|
||||
distclean-am: clean-am distclean-generic distclean-hdr distclean-libtool \
|
||||
distclean-tags
|
||||
|
||||
dvi: dvi-recursive
|
||||
|
||||
dvi-am:
|
||||
|
||||
info: info-recursive
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-mbusddocDATA
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-recursive
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-recursive
|
||||
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-recursive
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
uninstall-am: uninstall-info-am uninstall-mbusddocDATA
|
||||
|
||||
uninstall-info: uninstall-info-recursive
|
||||
|
||||
.PHONY: $(RECURSIVE_TARGETS) GTAGS all all-am check check-am clean \
|
||||
clean-generic clean-libtool clean-recursive dist dist-all \
|
||||
distcheck distclean distclean-generic distclean-hdr \
|
||||
distclean-libtool distclean-recursive distclean-tags distdir \
|
||||
dvi dvi-am dvi-recursive info info-am info-recursive install \
|
||||
install-am install-data install-data-am install-data-recursive \
|
||||
install-exec install-exec-am install-exec-recursive \
|
||||
install-info install-info-am install-info-recursive install-man \
|
||||
install-mbusddocDATA install-recursive install-strip \
|
||||
installcheck installcheck-am installdirs installdirs-am \
|
||||
installdirs-recursive maintainer-clean maintainer-clean-generic \
|
||||
maintainer-clean-recursive mostlyclean mostlyclean-generic \
|
||||
mostlyclean-libtool mostlyclean-recursive tags tags-recursive \
|
||||
uninstall uninstall-am uninstall-info-am \
|
||||
uninstall-info-recursive uninstall-mbusddocDATA \
|
||||
uninstall-recursive
|
||||
|
||||
|
||||
# Copy all the spec files. Of cource, only one is actually used.
|
||||
dist-hook:
|
||||
for specfile in *.spec; do \
|
||||
if test -f $$specfile; then \
|
||||
cp -p $$specfile $(distdir); \
|
||||
fi \
|
||||
done
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
5
TODO
Normal file
5
TODO
Normal file
@ -0,0 +1,5 @@
|
||||
To do:
|
||||
|
||||
* Broadcast MODBUS messaging implementation
|
||||
* Response receiving by length (currently by timeout)
|
||||
* SSL secure connection handling
|
13
acconfig.h
Normal file
13
acconfig.h
Normal file
@ -0,0 +1,13 @@
|
||||
#undef ENABLE_NLS
|
||||
#undef HAVE_CATGETS
|
||||
#undef HAVE_GETTEXT
|
||||
#undef HAVE_LC_MESSAGES
|
||||
#undef HAVE_STPCPY
|
||||
#undef HAVE_LIBSM
|
||||
#undef PACKAGE_LOCALE_DIR
|
||||
#undef PACKAGE_DOC_DIR
|
||||
#undef PACKAGE_DATA_DIR
|
||||
#undef PACKAGE_PIXMAPS_DIR
|
||||
#undef PACKAGE_HELP_DIR
|
||||
#undef PACKAGE_MENU_DIR
|
||||
#undef PACKAGE_SOURCE_DIR
|
1
acinclude.m4
Normal file
1
acinclude.m4
Normal file
@ -0,0 +1 @@
|
||||
AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
|
1087
aclocal.m4
vendored
Normal file
1087
aclocal.m4
vendored
Normal file
File diff suppressed because it is too large
Load Diff
148
autogen.sh
Executable file
148
autogen.sh
Executable file
@ -0,0 +1,148 @@
|
||||
#!/bin/sh
|
||||
# Run this to generate all the initial makefiles, etc.
|
||||
|
||||
srcdir=`dirname $0`
|
||||
PKG_NAME="the package."
|
||||
|
||||
DIE=0
|
||||
|
||||
(autoconf --version) < /dev/null > /dev/null 2>&1 || {
|
||||
echo
|
||||
echo "**Error**: You must have \`autoconf' installed to."
|
||||
echo "Download the appropriate package for your distribution,"
|
||||
echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
|
||||
DIE=1
|
||||
}
|
||||
|
||||
(grep "^AM_PROG_LIBTOOL" $srcdir/configure.in >/dev/null) && {
|
||||
(libtool --version) < /dev/null > /dev/null 2>&1 || {
|
||||
echo
|
||||
echo "**Error**: You must have \`libtool' installed."
|
||||
echo "Get ftp://ftp.gnu.org/pub/gnu/libtool-1.2d.tar.gz"
|
||||
echo "(or a newer version if it is available)"
|
||||
DIE=1
|
||||
}
|
||||
}
|
||||
|
||||
# grep "^AM_GNU_GETTEXT" $srcdir/configure.in >/dev/null && {
|
||||
# grep "sed.*POTFILES" $srcdir/configure.in >/dev/null || \
|
||||
# (gettext --version) < /dev/null > /dev/null 2>&1 || {
|
||||
# echo
|
||||
# echo "**Error**: You must have \`gettext' installed."
|
||||
# echo "Get ftp://alpha.gnu.org/gnu/gettext-0.10.35.tar.gz"
|
||||
# echo "(or a newer version if it is available)"
|
||||
# DIE=1
|
||||
# }
|
||||
# }
|
||||
|
||||
# grep "^AM_GNOME_GETTEXT" $srcdir/configure.in >/dev/null && {
|
||||
# grep "sed.*POTFILES" $srcdir/configure.in >/dev/null || \
|
||||
# (gettext --version) < /dev/null > /dev/null 2>&1 || {
|
||||
# echo
|
||||
# echo "**Error**: You must have \`gettext' installed."
|
||||
# echo "Get ftp://alpha.gnu.org/gnu/gettext-0.10.35.tar.gz"
|
||||
# echo "(or a newer version if it is available)"
|
||||
# DIE=1
|
||||
# }
|
||||
# }
|
||||
|
||||
(automake --version) < /dev/null > /dev/null 2>&1 || {
|
||||
echo
|
||||
echo "**Error**: You must have \`automake' installed."
|
||||
echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz"
|
||||
echo "(or a newer version if it is available)"
|
||||
DIE=1
|
||||
NO_AUTOMAKE=yes
|
||||
}
|
||||
|
||||
|
||||
# if no automake, don't bother testing for aclocal
|
||||
test -n "$NO_AUTOMAKE" || (aclocal --version) < /dev/null > /dev/null 2>&1 || {
|
||||
echo
|
||||
echo "**Error**: Missing \`aclocal'. The version of \`automake'"
|
||||
echo "installed doesn't appear recent enough."
|
||||
echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz"
|
||||
echo "(or a newer version if it is available)"
|
||||
DIE=1
|
||||
}
|
||||
|
||||
if test "$DIE" -eq 1; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if test -z "$*"; then
|
||||
echo "**Warning**: I am going to run \`configure' with no arguments."
|
||||
echo "If you wish to pass any to it, please specify them on the"
|
||||
echo \`$0\'" command line."
|
||||
echo
|
||||
fi
|
||||
|
||||
case $CC in
|
||||
xlc )
|
||||
am_opt=--include-deps;;
|
||||
esac
|
||||
|
||||
for coin in `find $srcdir -name configure.in -print`
|
||||
do
|
||||
dr=`dirname $coin`
|
||||
if test -f $dr/NO-AUTO-GEN; then
|
||||
echo skipping $dr -- flagged as no auto-gen
|
||||
else
|
||||
echo processing $dr
|
||||
macrodirs=`sed -n -e 's,AM_ACLOCAL_INCLUDE(\(.*\)),\1,gp' < $coin`
|
||||
( cd $dr
|
||||
aclocalinclude="$ACLOCAL_FLAGS"
|
||||
for k in $macrodirs; do
|
||||
if test -d $k; then
|
||||
aclocalinclude="$aclocalinclude -I $k"
|
||||
##else
|
||||
## echo "**Warning**: No such directory \`$k'. Ignored."
|
||||
fi
|
||||
done
|
||||
if grep "^AM_GNU_GETTEXT" configure.in >/dev/null; then
|
||||
if grep "sed.*POTFILES" configure.in >/dev/null; then
|
||||
: do nothing -- we still have an old unmodified configure.in
|
||||
else
|
||||
echo "Creating $dr/aclocal.m4 ..."
|
||||
test -r $dr/aclocal.m4 || touch $dr/aclocal.m4
|
||||
echo "Running gettextize... Ignore non-fatal messages."
|
||||
./setup-gettext
|
||||
echo "Making $dr/aclocal.m4 writable ..."
|
||||
test -r $dr/aclocal.m4 && chmod u+w $dr/aclocal.m4
|
||||
fi
|
||||
fi
|
||||
if grep "^AM_GNOME_GETTEXT" configure.in >/dev/null; then
|
||||
echo "Creating $dr/aclocal.m4 ..."
|
||||
test -r $dr/aclocal.m4 || touch $dr/aclocal.m4
|
||||
echo "Running gettextize... Ignore non-fatal messages."
|
||||
./setup-gettext
|
||||
echo "Making $dr/aclocal.m4 writable ..."
|
||||
test -r $dr/aclocal.m4 && chmod u+w $dr/aclocal.m4
|
||||
fi
|
||||
if grep "^AM_PROG_LIBTOOL" configure.in >/dev/null; then
|
||||
echo "Running libtoolize..."
|
||||
libtoolize --force --copy
|
||||
fi
|
||||
echo "Running aclocal $aclocalinclude ..."
|
||||
aclocal $aclocalinclude
|
||||
if grep "^AM_CONFIG_HEADER" configure.in >/dev/null; then
|
||||
echo "Running autoheader..."
|
||||
autoheader
|
||||
fi
|
||||
echo "Running automake --gnu $am_opt ..."
|
||||
automake --add-missing --gnu $am_opt
|
||||
echo "Running autoconf ..."
|
||||
autoconf
|
||||
)
|
||||
fi
|
||||
done
|
||||
|
||||
#conf_flags="--enable-maintainer-mode --enable-compile-warnings" #--enable-iso-c
|
||||
|
||||
if test x$NOCONFIGURE = x; then
|
||||
echo Running $srcdir/configure $conf_flags "$@" ...
|
||||
$srcdir/configure $conf_flags "$@" \
|
||||
&& echo Now type \`make\' to compile $PKG_NAME
|
||||
else
|
||||
echo Skipping configure process.
|
||||
fi
|
34
config.cache
Normal file
34
config.cache
Normal file
@ -0,0 +1,34 @@
|
||||
# This file is a shell script that caches the results of configure
|
||||
# tests run on this system so they can be shared between configure
|
||||
# scripts and configure runs. It is not useful on other systems.
|
||||
# If it contains results you don't want to keep, you may remove or edit it.
|
||||
#
|
||||
# By default, configure uses ./config.cache as the cache file,
|
||||
# creating it if it does not exist already. You can give configure
|
||||
# the --cache-file=FILE option to use a different cache file; that is
|
||||
# what configure does when it calls configure scripts in
|
||||
# subdirectories, so they share the cache.
|
||||
# Giving --cache-file=/dev/null disables caching, for debugging configure.
|
||||
# config.status only pays attention to the cache file if you give it the
|
||||
# --recheck option to rerun configure.
|
||||
#
|
||||
am_cv_CC_dependencies_compiler_type=${am_cv_CC_dependencies_compiler_type=gcc}
|
||||
ac_cv_prog_cc_works=${ac_cv_prog_cc_works=yes}
|
||||
ac_cv_prog_cc_g=${ac_cv_prog_cc_g=yes}
|
||||
ac_cv_lib_cposix_strerror=${ac_cv_lib_cposix_strerror=no}
|
||||
ac_cv_exeext=${ac_cv_exeext=no}
|
||||
ac_cv_path_install=${ac_cv_path_install='/usr/bin/install -c'}
|
||||
ac_cv_prog_gnu_ld=${ac_cv_prog_gnu_ld=yes}
|
||||
ac_cv_prog_RANLIB=${ac_cv_prog_RANLIB=ranlib}
|
||||
ac_cv_path_LD=${ac_cv_path_LD=/usr/libexec/elf/ld}
|
||||
ac_cv_prog_CC=${ac_cv_prog_CC=gcc}
|
||||
ac_cv_prog_LN_S=${ac_cv_prog_LN_S='ln -s'}
|
||||
ac_cv_header_stdc=${ac_cv_header_stdc=yes}
|
||||
ac_cv_prog_make_make_set=${ac_cv_prog_make_make_set=yes}
|
||||
ac_cv_path_NM=${ac_cv_path_NM='/usr/bin/nm -B'}
|
||||
ac_cv_prog_gcc=${ac_cv_prog_gcc=yes}
|
||||
ac_cv_prog_cc_cross=${ac_cv_prog_cc_cross=no}
|
||||
am_cv_prog_cc_stdc=${am_cv_prog_cc_stdc=}
|
||||
ac_cv_prog_CPP=${ac_cv_prog_CPP='gcc -E'}
|
||||
ac_cv_prog_AWK=${ac_cv_prog_AWK=gawk}
|
||||
ac_cv_lib_util_uu_lock=${ac_cv_lib_util_uu_lock=yes}
|
1121
config.guess
vendored
Executable file
1121
config.guess
vendored
Executable file
File diff suppressed because it is too large
Load Diff
29
config.h
Normal file
29
config.h
Normal file
@ -0,0 +1,29 @@
|
||||
/* config.h. Generated automatically by configure. */
|
||||
/* config.h.in. Generated automatically from configure.in by autoheader. */
|
||||
|
||||
/* Define if you have the ANSI C header files. */
|
||||
#define STDC_HEADERS 1
|
||||
|
||||
/* #undef ENABLE_NLS */
|
||||
/* #undef HAVE_CATGETS */
|
||||
/* #undef HAVE_GETTEXT */
|
||||
/* #undef HAVE_LC_MESSAGES */
|
||||
/* #undef HAVE_STPCPY */
|
||||
/* #undef HAVE_LIBSM */
|
||||
/* #undef PACKAGE_LOCALE_DIR */
|
||||
#define PACKAGE_DOC_DIR "/usr/local/doc/mbusd"
|
||||
#define PACKAGE_DATA_DIR "/usr/local/share/mbusd"
|
||||
#define PACKAGE_PIXMAPS_DIR "/usr/local/share/mbusd/pixmaps"
|
||||
#define PACKAGE_HELP_DIR "/usr/local/share/mbusd/help"
|
||||
#define PACKAGE_MENU_DIR "/usr/local/share/mbusd"
|
||||
#define PACKAGE_SOURCE_DIR "/usr/home/avm/work/mbus"
|
||||
|
||||
/* Define if you have the util library (-lutil). */
|
||||
#define HAVE_LIBUTIL 1
|
||||
|
||||
/* Name of package */
|
||||
#define PACKAGE "mbusd"
|
||||
|
||||
/* Version number of package */
|
||||
#define VERSION "0.1.1"
|
||||
|
28
config.h.in
Normal file
28
config.h.in
Normal file
@ -0,0 +1,28 @@
|
||||
/* config.h.in. Generated automatically from configure.in by autoheader. */
|
||||
|
||||
/* Define if you have the ANSI C header files. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
#undef ENABLE_NLS
|
||||
#undef HAVE_CATGETS
|
||||
#undef HAVE_GETTEXT
|
||||
#undef HAVE_LC_MESSAGES
|
||||
#undef HAVE_STPCPY
|
||||
#undef HAVE_LIBSM
|
||||
#undef PACKAGE_LOCALE_DIR
|
||||
#undef PACKAGE_DOC_DIR
|
||||
#undef PACKAGE_DATA_DIR
|
||||
#undef PACKAGE_PIXMAPS_DIR
|
||||
#undef PACKAGE_HELP_DIR
|
||||
#undef PACKAGE_MENU_DIR
|
||||
#undef PACKAGE_SOURCE_DIR
|
||||
|
||||
/* Define if you have the util library (-lutil). */
|
||||
#undef HAVE_LIBUTIL
|
||||
|
||||
/* Name of package */
|
||||
#undef PACKAGE
|
||||
|
||||
/* Version number of package */
|
||||
#undef VERSION
|
||||
|
67
config.log
Normal file
67
config.log
Normal file
@ -0,0 +1,67 @@
|
||||
This file contains any messages produced by compilers while
|
||||
running configure, to aid debugging if configure makes a mistake.
|
||||
|
||||
configure:584: checking for a BSD compatible install
|
||||
configure:637: checking whether build environment is sane
|
||||
configure:708: checking for mawk
|
||||
configure:708: checking for gawk
|
||||
configure:738: checking whether make sets ${MAKE}
|
||||
configure:860: checking for strerror in -lcposix
|
||||
configure:879: cc -o conftest conftest.c -lcposix 1>&5
|
||||
/usr/libexec/elf/ld: cannot find -lcposix
|
||||
configure: failed program was:
|
||||
#line 868 "configure"
|
||||
#include "confdefs.h"
|
||||
/* Override any gcc2 internal prototype to avoid an error. */
|
||||
/* We use char because int might match the return type of a gcc2
|
||||
builtin and then its argument prototype would still apply. */
|
||||
char strerror();
|
||||
|
||||
int main() {
|
||||
strerror()
|
||||
; return 0; }
|
||||
configure:904: checking for gcc
|
||||
configure:1017: checking whether the C compiler (gcc ) works
|
||||
configure:1033: gcc -o conftest conftest.c 1>&5
|
||||
configure:1059: checking whether the C compiler (gcc ) is a cross-compiler
|
||||
configure:1064: checking whether we are using GNU C
|
||||
configure:1073: gcc -E conftest.c
|
||||
configure:1092: checking whether gcc accepts -g
|
||||
configure:1131: checking for style of include used by make
|
||||
configure:1165: checking dependency style of gcc
|
||||
configure:1235: checking for gcc option to accept ANSI C
|
||||
configure:1289: gcc -c -g -O2 conftest.c 1>&5
|
||||
configure:1313: checking how to run the C preprocessor
|
||||
configure:1334: gcc -E conftest.c >/dev/null 2>conftest.out
|
||||
configure:1393: checking for ANSI C header files
|
||||
configure:1406: gcc -E conftest.c >/dev/null 2>conftest.out
|
||||
configure:1473: gcc -o conftest -g -O2 conftest.c 1>&5
|
||||
configure:1572: checking host system type
|
||||
configure:1593: checking build system type
|
||||
configure:1613: checking for ranlib
|
||||
configure:1652: checking for ld used by GCC
|
||||
configure:1714: checking if the linker (/usr/libexec/elf/ld) is GNU ld
|
||||
GNU ld version 2.12.1 [FreeBSD] 2002-07-20
|
||||
configure:1730: checking for BSD-compatible nm
|
||||
configure:1766: checking whether ln -s works
|
||||
ltconfig:603: checking for object suffix
|
||||
ltconfig:604: gcc -c -g -O2 conftest.c 1>&5
|
||||
ltconfig:629: checking for executable suffix
|
||||
ltconfig:630: gcc -o conftest -g -O2 conftest.c 1>&5
|
||||
ltconfig:776: checking if gcc PIC flag -fPIC works
|
||||
ltconfig:777: gcc -c -g -O2 -fPIC -DPIC conftest.c 1>&5
|
||||
ltconfig:829: checking if gcc supports -c -o file.o
|
||||
ltconfig:830: gcc -c -g -O2 -o out/conftest2.o conftest.c 1>&5
|
||||
ltconfig:862: checking if gcc supports -c -o file.lo
|
||||
ltconfig:863: gcc -c -g -O2 -c -o conftest.lo conftest.c 1>&5
|
||||
ltconfig:914: checking if gcc supports -fno-rtti -fno-exceptions
|
||||
ltconfig:915: gcc -c -g -O2 -fno-rtti -fno-exceptions -c conftest.c conftest.c 1>&5
|
||||
ltconfig:958: checking if gcc static flag -static works
|
||||
ltconfig:959: gcc -o conftest -g -O2 -static conftest.c 1>&5
|
||||
GNU ld version 2.12.1 [FreeBSD] 2002-07-20
|
||||
ltconfig:1635: checking if global_symbol_pipe works
|
||||
ltconfig:1636: gcc -c -g -O2 conftest.c 1>&5
|
||||
ltconfig:1639: eval "/usr/bin/nm -B conftest.o | sed -n -e 's/^.*[ ]\([ABCDGISTW]\)[ ][ ]*\(\)\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2\3 \3/p' > conftest.nm"
|
||||
ltconfig:1691: gcc -o conftest -g -O2 -fno-builtin -fno-rtti -fno-exceptions conftest.c conftstm.o 1>&5
|
||||
configure:1952: checking for uu_lock in -lutil
|
||||
configure:1971: gcc -o conftest -g -O2 conftest.c -lutil 1>&5
|
376
config.status
Executable file
376
config.status
Executable file
@ -0,0 +1,376 @@
|
||||
#! /bin/sh
|
||||
# Generated automatically by configure.
|
||||
# Run this file to recreate the current configuration.
|
||||
# This directory was configured as follows,
|
||||
# on host stranger:
|
||||
#
|
||||
# ./configure
|
||||
#
|
||||
# Compiler output produced by configure, useful for debugging
|
||||
# configure, is in ./config.log if it exists.
|
||||
|
||||
ac_cs_usage="Usage: ./config.status [--recheck] [--version] [--help]"
|
||||
for ac_option
|
||||
do
|
||||
case "$ac_option" in
|
||||
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
|
||||
echo "running ${CONFIG_SHELL-/bin/sh} ./configure --no-create --no-recursion"
|
||||
exec ${CONFIG_SHELL-/bin/sh} ./configure --no-create --no-recursion ;;
|
||||
-version | --version | --versio | --versi | --vers | --ver | --ve | --v)
|
||||
echo "./config.status generated by autoconf version 2.13"
|
||||
exit 0 ;;
|
||||
-help | --help | --hel | --he | --h)
|
||||
echo "$ac_cs_usage"; exit 0 ;;
|
||||
*) echo "$ac_cs_usage"; exit 1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
ac_given_srcdir=.
|
||||
ac_given_INSTALL="/usr/bin/install -c"
|
||||
|
||||
trap 'rm -fr
|
||||
Makefile
|
||||
src/Makefile
|
||||
doc/Makefile
|
||||
config.h conftest*; exit 1' 1 2 15
|
||||
|
||||
# Protect against being on the right side of a sed subst in config.status.
|
||||
sed 's/%@/@@/; s/@%/@@/; s/%g$/@g/; /@g$/s/[\\&%]/\\&/g;
|
||||
s/@@/%@/; s/@@/@%/; s/@g$/%g/' > conftest.subs <<\CEOF
|
||||
/^[ ]*VPATH[ ]*=[^:]*$/d
|
||||
|
||||
s%@SHELL@%/bin/sh%g
|
||||
s%@CFLAGS@%-g -O2%g
|
||||
s%@CPPFLAGS@%%g
|
||||
s%@CXXFLAGS@%%g
|
||||
s%@FFLAGS@%%g
|
||||
s%@DEFS@%-DHAVE_CONFIG_H%g
|
||||
s%@LDFLAGS@%%g
|
||||
s%@LIBS@%-lutil %g
|
||||
s%@exec_prefix@%${prefix}%g
|
||||
s%@prefix@%/usr/local%g
|
||||
s%@program_transform_name@%s,x,x,%g
|
||||
s%@bindir@%${exec_prefix}/bin%g
|
||||
s%@sbindir@%${exec_prefix}/sbin%g
|
||||
s%@libexecdir@%${exec_prefix}/libexec%g
|
||||
s%@datadir@%${prefix}/share%g
|
||||
s%@sysconfdir@%${prefix}/etc%g
|
||||
s%@sharedstatedir@%${prefix}/com%g
|
||||
s%@localstatedir@%${prefix}/var%g
|
||||
s%@libdir@%${exec_prefix}/lib%g
|
||||
s%@includedir@%${prefix}/include%g
|
||||
s%@oldincludedir@%/usr/include%g
|
||||
s%@infodir@%${prefix}/info%g
|
||||
s%@mandir@%${prefix}/man%g
|
||||
s%@INSTALL_PROGRAM@%${INSTALL}%g
|
||||
s%@INSTALL_SCRIPT@%${INSTALL_PROGRAM}%g
|
||||
s%@INSTALL_DATA@%${INSTALL} -m 644%g
|
||||
s%@PACKAGE@%mbusd%g
|
||||
s%@VERSION@%0.1.1%g
|
||||
s%@EXEEXT@%%g
|
||||
s%@OBJEXT@%o%g
|
||||
s%@ACLOCAL@%${SHELL} /usr/home/avm/work/mbus/missing --run aclocal%g
|
||||
s%@AUTOCONF@%${SHELL} /usr/home/avm/work/mbus/missing --run autoconf%g
|
||||
s%@AUTOMAKE@%${SHELL} /usr/home/avm/work/mbus/missing --run automake%g
|
||||
s%@AUTOHEADER@%${SHELL} /usr/home/avm/work/mbus/missing --run autoheader%g
|
||||
s%@MAKEINFO@%${SHELL} /usr/home/avm/work/mbus/missing --run makeinfo%g
|
||||
s%@AMTAR@%${SHELL} /usr/home/avm/work/mbus/missing --run tar%g
|
||||
s%@install_sh@%/usr/home/avm/work/mbus/install-sh%g
|
||||
s%@INSTALL_STRIP_PROGRAM@%${SHELL} $(install_sh) -c -s%g
|
||||
s%@AWK@%gawk%g
|
||||
s%@SET_MAKE@%%g
|
||||
s%@AMDEP_TRUE@%%g
|
||||
s%@AMDEP_FALSE@%#%g
|
||||
s%@AMDEPBACKSLASH@%\%g
|
||||
s%@DEPDIR@%.deps%g
|
||||
s%@CC@%gcc%g
|
||||
s%@am__include@%include%g
|
||||
s%@am__quote@%%g
|
||||
s%@CCDEPMODE@%depmode=gcc%g
|
||||
s%@CPP@%gcc -E%g
|
||||
s%@host@%i386-unknown-freebsdelf4.8%g
|
||||
s%@host_alias@%i386-unknown-freebsdelf4.8%g
|
||||
s%@host_cpu@%i386%g
|
||||
s%@host_vendor@%unknown%g
|
||||
s%@host_os@%freebsdelf4.8%g
|
||||
s%@build@%i386-unknown-freebsdelf4.8%g
|
||||
s%@build_alias@%i386-unknown-freebsdelf4.8%g
|
||||
s%@build_cpu@%i386%g
|
||||
s%@build_vendor@%unknown%g
|
||||
s%@build_os@%freebsdelf4.8%g
|
||||
s%@RANLIB@%ranlib%g
|
||||
s%@LN_S@%ln -s%g
|
||||
s%@LIBTOOL@%$(SHELL) $(top_builddir)/libtool%g
|
||||
s%@NO_PREFIX_PACKAGE_DATA_DIR@%share/mbusd%g
|
||||
s%@PACKAGE_DATA_DIR@%/usr/local/share/mbusd%g
|
||||
s%@NO_PREFIX_PACKAGE_DOC_DIR@%doc/mbusd%g
|
||||
s%@PACKAGE_DOC_DIR@%/usr/local/doc/mbusd%g
|
||||
s%@NO_PREFIX_PACKAGE_PIXMAPS_DIR@%share/mbusd/pixmaps%g
|
||||
s%@PACKAGE_PIXMAPS_DIR@%/usr/local/share/mbusd/pixmaps%g
|
||||
s%@NO_PREFIX_PACKAGE_HELP_DIR@%share/mbusd/help%g
|
||||
s%@PACKAGE_HELP_DIR@%/usr/local/share/mbusd/help%g
|
||||
s%@NO_PREFIX_PACKAGE_MENU_DIR@%share/mbusd%g
|
||||
s%@PACKAGE_MENU_DIR@%/usr/local/share/mbusd%g
|
||||
|
||||
CEOF
|
||||
|
||||
# Split the substitutions into bite-sized pieces for seds with
|
||||
# small command number limits, like on Digital OSF/1 and HP-UX.
|
||||
ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
|
||||
ac_file=1 # Number of current file.
|
||||
ac_beg=1 # First line for current file.
|
||||
ac_end=$ac_max_sed_cmds # Line after last line for current file.
|
||||
ac_more_lines=:
|
||||
ac_sed_cmds=""
|
||||
while $ac_more_lines; do
|
||||
if test $ac_beg -gt 1; then
|
||||
sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
|
||||
else
|
||||
sed "${ac_end}q" conftest.subs > conftest.s$ac_file
|
||||
fi
|
||||
if test ! -s conftest.s$ac_file; then
|
||||
ac_more_lines=false
|
||||
rm -f conftest.s$ac_file
|
||||
else
|
||||
if test -z "$ac_sed_cmds"; then
|
||||
ac_sed_cmds="sed -f conftest.s$ac_file"
|
||||
else
|
||||
ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
|
||||
fi
|
||||
ac_file=`expr $ac_file + 1`
|
||||
ac_beg=$ac_end
|
||||
ac_end=`expr $ac_end + $ac_max_sed_cmds`
|
||||
fi
|
||||
done
|
||||
if test -z "$ac_sed_cmds"; then
|
||||
ac_sed_cmds=cat
|
||||
fi
|
||||
|
||||
CONFIG_FILES=${CONFIG_FILES-"Makefile
|
||||
src/Makefile
|
||||
doc/Makefile
|
||||
"}
|
||||
for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
|
||||
# Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
|
||||
case "$ac_file" in
|
||||
*:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
|
||||
ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
|
||||
*) ac_file_in="${ac_file}.in" ;;
|
||||
esac
|
||||
|
||||
# Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
|
||||
|
||||
# Remove last slash and all that follows it. Not all systems have dirname.
|
||||
ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
|
||||
if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
|
||||
# The file is in a subdirectory.
|
||||
test ! -d "$ac_dir" && mkdir "$ac_dir"
|
||||
ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
|
||||
# A "../" for each directory in $ac_dir_suffix.
|
||||
ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
|
||||
else
|
||||
ac_dir_suffix= ac_dots=
|
||||
fi
|
||||
|
||||
case "$ac_given_srcdir" in
|
||||
.) srcdir=.
|
||||
if test -z "$ac_dots"; then top_srcdir=.
|
||||
else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
|
||||
/*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
|
||||
*) # Relative path.
|
||||
srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
|
||||
top_srcdir="$ac_dots$ac_given_srcdir" ;;
|
||||
esac
|
||||
|
||||
case "$ac_given_INSTALL" in
|
||||
[/$]*) INSTALL="$ac_given_INSTALL" ;;
|
||||
*) INSTALL="$ac_dots$ac_given_INSTALL" ;;
|
||||
esac
|
||||
|
||||
echo creating "$ac_file"
|
||||
rm -f "$ac_file"
|
||||
configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
|
||||
case "$ac_file" in
|
||||
*Makefile*) ac_comsub="1i\\
|
||||
# $configure_input" ;;
|
||||
*) ac_comsub= ;;
|
||||
esac
|
||||
|
||||
ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
|
||||
sed -e "$ac_comsub
|
||||
s%@configure_input@%$configure_input%g
|
||||
s%@srcdir@%$srcdir%g
|
||||
s%@top_srcdir@%$top_srcdir%g
|
||||
s%@INSTALL@%$INSTALL%g
|
||||
" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
|
||||
fi; done
|
||||
rm -f conftest.s*
|
||||
|
||||
# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
|
||||
# NAME is the cpp macro being defined and VALUE is the value it is being given.
|
||||
#
|
||||
# ac_d sets the value in "#define NAME VALUE" lines.
|
||||
ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)'
|
||||
ac_dB='\([ ][ ]*\)[^ ]*%\1#\2'
|
||||
ac_dC='\3'
|
||||
ac_dD='%g'
|
||||
# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
|
||||
ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
|
||||
ac_uB='\([ ]\)%\1#\2define\3'
|
||||
ac_uC=' '
|
||||
ac_uD='\4%g'
|
||||
# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
|
||||
ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
|
||||
ac_eB='$%\1#\2define\3'
|
||||
ac_eC=' '
|
||||
ac_eD='%g'
|
||||
|
||||
if test "${CONFIG_HEADERS+set}" != set; then
|
||||
CONFIG_HEADERS="config.h"
|
||||
fi
|
||||
for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
|
||||
# Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
|
||||
case "$ac_file" in
|
||||
*:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
|
||||
ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
|
||||
*) ac_file_in="${ac_file}.in" ;;
|
||||
esac
|
||||
|
||||
echo creating $ac_file
|
||||
|
||||
rm -f conftest.frag conftest.in conftest.out
|
||||
ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
|
||||
cat $ac_file_inputs > conftest.in
|
||||
|
||||
cat > conftest.frag <<CEOF
|
||||
${ac_dA}PACKAGE${ac_dB}PACKAGE${ac_dC}"mbusd"${ac_dD}
|
||||
${ac_uA}PACKAGE${ac_uB}PACKAGE${ac_uC}"mbusd"${ac_uD}
|
||||
${ac_eA}PACKAGE${ac_eB}PACKAGE${ac_eC}"mbusd"${ac_eD}
|
||||
${ac_dA}VERSION${ac_dB}VERSION${ac_dC}"0.1.1"${ac_dD}
|
||||
${ac_uA}VERSION${ac_uB}VERSION${ac_uC}"0.1.1"${ac_uD}
|
||||
${ac_eA}VERSION${ac_eB}VERSION${ac_eC}"0.1.1"${ac_eD}
|
||||
${ac_dA}STDC_HEADERS${ac_dB}STDC_HEADERS${ac_dC}1${ac_dD}
|
||||
${ac_uA}STDC_HEADERS${ac_uB}STDC_HEADERS${ac_uC}1${ac_uD}
|
||||
${ac_eA}STDC_HEADERS${ac_eB}STDC_HEADERS${ac_eC}1${ac_eD}
|
||||
${ac_dA}HAVE_LIBUTIL${ac_dB}HAVE_LIBUTIL${ac_dC}1${ac_dD}
|
||||
${ac_uA}HAVE_LIBUTIL${ac_uB}HAVE_LIBUTIL${ac_uC}1${ac_uD}
|
||||
${ac_eA}HAVE_LIBUTIL${ac_eB}HAVE_LIBUTIL${ac_eC}1${ac_eD}
|
||||
CEOF
|
||||
sed -f conftest.frag conftest.in > conftest.out
|
||||
rm -f conftest.in
|
||||
mv conftest.out conftest.in
|
||||
|
||||
cat > conftest.frag <<CEOF
|
||||
${ac_dA}PACKAGE_DATA_DIR${ac_dB}PACKAGE_DATA_DIR${ac_dC}"/usr/local/share/mbusd"${ac_dD}
|
||||
${ac_uA}PACKAGE_DATA_DIR${ac_uB}PACKAGE_DATA_DIR${ac_uC}"/usr/local/share/mbusd"${ac_uD}
|
||||
${ac_eA}PACKAGE_DATA_DIR${ac_eB}PACKAGE_DATA_DIR${ac_eC}"/usr/local/share/mbusd"${ac_eD}
|
||||
${ac_dA}PACKAGE_DOC_DIR${ac_dB}PACKAGE_DOC_DIR${ac_dC}"/usr/local/doc/mbusd"${ac_dD}
|
||||
${ac_uA}PACKAGE_DOC_DIR${ac_uB}PACKAGE_DOC_DIR${ac_uC}"/usr/local/doc/mbusd"${ac_uD}
|
||||
${ac_eA}PACKAGE_DOC_DIR${ac_eB}PACKAGE_DOC_DIR${ac_eC}"/usr/local/doc/mbusd"${ac_eD}
|
||||
${ac_dA}PACKAGE_PIXMAPS_DIR${ac_dB}PACKAGE_PIXMAPS_DIR${ac_dC}"/usr/local/share/mbusd/pixmaps"${ac_dD}
|
||||
${ac_uA}PACKAGE_PIXMAPS_DIR${ac_uB}PACKAGE_PIXMAPS_DIR${ac_uC}"/usr/local/share/mbusd/pixmaps"${ac_uD}
|
||||
${ac_eA}PACKAGE_PIXMAPS_DIR${ac_eB}PACKAGE_PIXMAPS_DIR${ac_eC}"/usr/local/share/mbusd/pixmaps"${ac_eD}
|
||||
${ac_dA}PACKAGE_HELP_DIR${ac_dB}PACKAGE_HELP_DIR${ac_dC}"/usr/local/share/mbusd/help"${ac_dD}
|
||||
${ac_uA}PACKAGE_HELP_DIR${ac_uB}PACKAGE_HELP_DIR${ac_uC}"/usr/local/share/mbusd/help"${ac_uD}
|
||||
${ac_eA}PACKAGE_HELP_DIR${ac_eB}PACKAGE_HELP_DIR${ac_eC}"/usr/local/share/mbusd/help"${ac_eD}
|
||||
CEOF
|
||||
sed -f conftest.frag conftest.in > conftest.out
|
||||
rm -f conftest.in
|
||||
mv conftest.out conftest.in
|
||||
|
||||
cat > conftest.frag <<CEOF
|
||||
${ac_dA}PACKAGE_MENU_DIR${ac_dB}PACKAGE_MENU_DIR${ac_dC}"/usr/local/share/mbusd"${ac_dD}
|
||||
${ac_uA}PACKAGE_MENU_DIR${ac_uB}PACKAGE_MENU_DIR${ac_uC}"/usr/local/share/mbusd"${ac_uD}
|
||||
${ac_eA}PACKAGE_MENU_DIR${ac_eB}PACKAGE_MENU_DIR${ac_eC}"/usr/local/share/mbusd"${ac_eD}
|
||||
${ac_dA}PACKAGE_SOURCE_DIR${ac_dB}PACKAGE_SOURCE_DIR${ac_dC}"/usr/home/avm/work/mbus"${ac_dD}
|
||||
${ac_uA}PACKAGE_SOURCE_DIR${ac_uB}PACKAGE_SOURCE_DIR${ac_uC}"/usr/home/avm/work/mbus"${ac_uD}
|
||||
${ac_eA}PACKAGE_SOURCE_DIR${ac_eB}PACKAGE_SOURCE_DIR${ac_eC}"/usr/home/avm/work/mbus"${ac_eD}
|
||||
s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
|
||||
CEOF
|
||||
sed -f conftest.frag conftest.in > conftest.out
|
||||
rm -f conftest.in
|
||||
mv conftest.out conftest.in
|
||||
|
||||
rm -f conftest.frag conftest.h
|
||||
echo "/* $ac_file. Generated automatically by configure. */" > conftest.h
|
||||
cat conftest.in >> conftest.h
|
||||
rm -f conftest.in
|
||||
if cmp -s $ac_file conftest.h 2>/dev/null; then
|
||||
echo "$ac_file is unchanged"
|
||||
rm -f conftest.h
|
||||
else
|
||||
# Remove last slash and all that follows it. Not all systems have dirname.
|
||||
ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
|
||||
if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
|
||||
# The file is in a subdirectory.
|
||||
test ! -d "$ac_dir" && mkdir "$ac_dir"
|
||||
fi
|
||||
rm -f $ac_file
|
||||
mv conftest.h $ac_file
|
||||
fi
|
||||
fi; done
|
||||
|
||||
am_indx=1
|
||||
for am_file in config.h; do
|
||||
case " $CONFIG_HEADERS " in
|
||||
*" $am_file "*)
|
||||
am_dir=`echo $am_file |sed 's%:.*%%;s%[^/]*$%%'`
|
||||
if test -n "$am_dir"; then
|
||||
am_tmpdir=`echo $am_dir |sed 's%^\(/*\).*$%\1%'`
|
||||
for am_subdir in `echo $am_dir |sed 's%/% %'`; do
|
||||
am_tmpdir=$am_tmpdir$am_subdir/
|
||||
if test ! -d $am_tmpdir; then
|
||||
mkdir $am_tmpdir
|
||||
fi
|
||||
done
|
||||
fi
|
||||
echo timestamp > "$am_dir"stamp-h$am_indx
|
||||
;;
|
||||
esac
|
||||
am_indx=`expr $am_indx + 1`
|
||||
done
|
||||
AMDEP_TRUE=""
|
||||
ac_aux_dir="."
|
||||
|
||||
test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h
|
||||
|
||||
test x"$AMDEP_TRUE" != x"" ||
|
||||
for mf in $CONFIG_FILES; do
|
||||
case "$mf" in
|
||||
Makefile) dirpart=.;;
|
||||
*/Makefile) dirpart=`echo "$mf" | sed -e 's|/[^/]*$||'`;;
|
||||
*) continue;;
|
||||
esac
|
||||
grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue
|
||||
# Extract the definition of DEP_FILES from the Makefile without
|
||||
# running `make'.
|
||||
DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
|
||||
test -z "$DEPDIR" && continue
|
||||
# When using ansi2knr, U may be empty or an underscore; expand it
|
||||
U=`sed -n -e '/^U = / s///p' < "$mf"`
|
||||
test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
|
||||
# We invoke sed twice because it is the simplest approach to
|
||||
# changing $(DEPDIR) to its actual value in the expansion.
|
||||
for file in `sed -n -e '
|
||||
/^DEP_FILES = .*\\\\$/ {
|
||||
s/^DEP_FILES = //
|
||||
:loop
|
||||
s/\\\\$//
|
||||
p
|
||||
n
|
||||
/\\\\$/ b loop
|
||||
p
|
||||
}
|
||||
/^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
|
||||
sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
|
||||
# Make sure the directory exists.
|
||||
test -f "$dirpart/$file" && continue
|
||||
fdir=`echo "$file" | sed -e 's|/[^/]*$||'`
|
||||
$ac_aux_dir/mkinstalldirs "$dirpart/$fdir" > /dev/null 2>&1
|
||||
# echo "creating $dirpart/$file"
|
||||
echo '# dummy' > "$dirpart/$file"
|
||||
done
|
||||
done
|
||||
|
||||
|
||||
exit 0
|
1232
config.sub
vendored
Executable file
1232
config.sub
vendored
Executable file
File diff suppressed because it is too large
Load Diff
83
configure.in
Normal file
83
configure.in
Normal file
@ -0,0 +1,83 @@
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
|
||||
AC_INIT(configure.in)
|
||||
AM_INIT_AUTOMAKE(mbusd, 0.1.1)
|
||||
AM_CONFIG_HEADER(config.h)
|
||||
|
||||
AC_ISC_POSIX
|
||||
AC_PROG_CC
|
||||
AM_PROG_CC_STDC
|
||||
AC_HEADER_STDC
|
||||
AM_PROG_LIBTOOL
|
||||
|
||||
dnl Checks for programs.
|
||||
dnl Checks for libraries.
|
||||
dnl Checks for header files.
|
||||
dnl Checks for typedefs, structures, and compiler characteristics.
|
||||
dnl Checks for library functions.
|
||||
AC_CHECK_LIB(util, uu_lock, ,
|
||||
AC_MSG_WARN("Function uu_lock\(\) is not found in libutil. UUCP locking switched off!"))
|
||||
dnl Checks for Additional stuffs.
|
||||
|
||||
dnl Set PACKAGE SOURCE DIR in config.h.
|
||||
packagesrcdir=`cd $srcdir && pwd`
|
||||
|
||||
dnl Set PACKAGE PREFIX
|
||||
if test "x${prefix}" = "xNONE"; then
|
||||
packageprefix=${ac_default_prefix}
|
||||
else
|
||||
packageprefix=${prefix}
|
||||
fi
|
||||
|
||||
dnl Set PACKAGE DATA & DOC DIR
|
||||
packagedatadir=share/${PACKAGE}
|
||||
packagedocdir=doc/${PACKAGE}
|
||||
|
||||
dnl Set PACKAGE DIRS in config.h.
|
||||
packagepixmapsdir=${packagedatadir}/pixmaps
|
||||
packagehelpdir=${packagedatadir}/help
|
||||
packagemenudir=${packagedatadir}
|
||||
|
||||
dnl Subst PACKAGE_DATA_DIR.
|
||||
NO_PREFIX_PACKAGE_DATA_DIR="${packagedatadir}"
|
||||
AC_SUBST(NO_PREFIX_PACKAGE_DATA_DIR)
|
||||
PACKAGE_DATA_DIR="${packageprefix}/${packagedatadir}"
|
||||
AC_SUBST(PACKAGE_DATA_DIR)
|
||||
|
||||
dnl Subst PACKAGE_DOC_DIR.
|
||||
NO_PREFIX_PACKAGE_DOC_DIR="${packagedocdir}"
|
||||
AC_SUBST(NO_PREFIX_PACKAGE_DOC_DIR)
|
||||
PACKAGE_DOC_DIR="${packageprefix}/${packagedocdir}"
|
||||
AC_SUBST(PACKAGE_DOC_DIR)
|
||||
|
||||
dnl Subst PACKAGE_PIXMAPS_DIR.
|
||||
NO_PREFIX_PACKAGE_PIXMAPS_DIR="${packagepixmapsdir}"
|
||||
AC_SUBST(NO_PREFIX_PACKAGE_PIXMAPS_DIR)
|
||||
PACKAGE_PIXMAPS_DIR="${packageprefix}/${packagepixmapsdir}"
|
||||
AC_SUBST(PACKAGE_PIXMAPS_DIR)
|
||||
|
||||
dnl Subst PACKAGE_HELP_DIR.
|
||||
NO_PREFIX_PACKAGE_HELP_DIR="${packagehelpdir}"
|
||||
AC_SUBST(NO_PREFIX_PACKAGE_HELP_DIR)
|
||||
PACKAGE_HELP_DIR="${packageprefix}/${packagehelpdir}"
|
||||
AC_SUBST(PACKAGE_HELP_DIR)
|
||||
|
||||
dnl Subst PACKAGE_MENU_DIR.
|
||||
NO_PREFIX_PACKAGE_MENU_DIR="${packagemenudir}"
|
||||
AC_SUBST(NO_PREFIX_PACKAGE_MENU_DIR)
|
||||
PACKAGE_MENU_DIR="${packageprefix}/${packagemenudir}"
|
||||
AC_SUBST(PACKAGE_MENU_DIR)
|
||||
|
||||
AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${packageprefix}/${packagedatadir}")
|
||||
AC_DEFINE_UNQUOTED(PACKAGE_DOC_DIR, "${packageprefix}/${packagedocdir}")
|
||||
AC_DEFINE_UNQUOTED(PACKAGE_PIXMAPS_DIR, "${packageprefix}/${packagepixmapsdir}")
|
||||
AC_DEFINE_UNQUOTED(PACKAGE_HELP_DIR, "${packageprefix}/${packagehelpdir}")
|
||||
AC_DEFINE_UNQUOTED(PACKAGE_MENU_DIR, "${packageprefix}/${packagemenudir}")
|
||||
AC_DEFINE_UNQUOTED(PACKAGE_SOURCE_DIR, "${packagesrcdir}")
|
||||
|
||||
AC_OUTPUT([
|
||||
Makefile
|
||||
src/Makefile
|
||||
doc/Makefile
|
||||
])
|
||||
|
411
depcomp
Executable file
411
depcomp
Executable file
@ -0,0 +1,411 @@
|
||||
#! /bin/sh
|
||||
|
||||
# depcomp - compile a program generating dependencies as side-effects
|
||||
# Copyright 1999, 2000 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
# 02111-1307, USA.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
|
||||
|
||||
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
|
||||
echo "depcomp: Variables source, object and depmode must be set" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
# `libtool' can also be set to `yes' or `no'.
|
||||
|
||||
depfile=${depfile-`echo "$object" | sed 's,\([^/]*\)$,.deps/\1,;s/\.\([^.]*\)$/.P\1/'`}
|
||||
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
|
||||
|
||||
rm -f "$tmpdepfile"
|
||||
|
||||
# Some modes work just like other modes, but use different flags. We
|
||||
# parameterize here, but still list the modes in the big case below,
|
||||
# to make depend.m4 easier to write. Note that we *cannot* use a case
|
||||
# here, because this file can only contain one case statement.
|
||||
if test "$depmode" = hp; then
|
||||
# HP compiler uses -M and no extra arg.
|
||||
gccflag=-M
|
||||
depmode=gcc
|
||||
fi
|
||||
|
||||
if test "$depmode" = dashXmstdout; then
|
||||
# This is just like dashmstdout with a different argument.
|
||||
dashmflag=-xM
|
||||
depmode=dashmstdout
|
||||
fi
|
||||
|
||||
case "$depmode" in
|
||||
gcc3)
|
||||
## gcc 3 implements dependency tracking that does exactly what
|
||||
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
|
||||
## it if -MD -MP comes after the -MF stuff. Hmm.
|
||||
"$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
mv "$tmpdepfile" "$depfile"
|
||||
;;
|
||||
|
||||
gcc)
|
||||
## There are various ways to get dependency output from gcc. Here's
|
||||
## why we pick this rather obscure method:
|
||||
## - Don't want to use -MD because we'd like the dependencies to end
|
||||
## up in a subdir. Having to rename by hand is ugly.
|
||||
## (We might end up doing this anyway to support other compilers.)
|
||||
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
|
||||
## -MM, not -M (despite what the docs say).
|
||||
## - Using -M directly means running the compiler twice (even worse
|
||||
## than renaming).
|
||||
if test -z "$gccflag"; then
|
||||
gccflag=-MD,
|
||||
fi
|
||||
"$@" -Wp,"$gccflag$tmpdepfile"
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
|
||||
## The second -e expression handles DOS-style file names with drive letters.
|
||||
sed -e 's/^[^:]*: / /' \
|
||||
-e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
|
||||
## This next piece of magic avoids the `deleted header file' problem.
|
||||
## The problem is that when a header file which appears in a .P file
|
||||
## is deleted, the dependency causes make to die (because there is
|
||||
## typically no way to rebuild the header). We avoid this by adding
|
||||
## dummy dependencies for each header file. Too bad gcc doesn't do
|
||||
## this for us directly.
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" |
|
||||
## Some versions of gcc put a space before the `:'. On the theory
|
||||
## that the space means something, we add a space to the output as
|
||||
## well.
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
hp)
|
||||
# This case exists only to let depend.m4 do its work. It works by
|
||||
# looking at the text of this script. This case will never be run,
|
||||
# since it is checked for above.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
sgi)
|
||||
if test "$libtool" = yes; then
|
||||
"$@" "-Wp,-MDupdate,$tmpdepfile"
|
||||
else
|
||||
"$@" -MDupdate "$tmpdepfile"
|
||||
fi
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
|
||||
if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
|
||||
echo "$object : \\" > "$depfile"
|
||||
|
||||
# Clip off the initial element (the dependent). Don't try to be
|
||||
# clever and replace this with sed code, as IRIX sed won't handle
|
||||
# lines with more than a fixed number of characters (4096 in
|
||||
# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
|
||||
# the IRIX cc adds comments like `#:fec' to the end of the
|
||||
# dependency line.
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" \
|
||||
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
|
||||
tr '
|
||||
' ' ' >> $depfile
|
||||
echo >> $depfile
|
||||
|
||||
# The second pass generates a dummy entry for each header file.
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" \
|
||||
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
|
||||
>> $depfile
|
||||
else
|
||||
# The sourcefile does not contain any dependencies, so just
|
||||
# store a dummy comment line, to avoid errors with the Makefile
|
||||
# "include basename.Plo" scheme.
|
||||
echo "#dummy" > "$depfile"
|
||||
fi
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
aix)
|
||||
# The C for AIX Compiler uses -M and outputs the dependencies
|
||||
# in a .u file. This file always lives in the current directory.
|
||||
# Also, the AIX compiler puts `$object:' at the start of each line;
|
||||
# $object doesn't have directory information.
|
||||
stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'`
|
||||
tmpdepfile="$stripped.u"
|
||||
outname="$stripped.o"
|
||||
if test "$libtool" = yes; then
|
||||
"$@" -Wc,-M
|
||||
else
|
||||
"$@" -M
|
||||
fi
|
||||
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
|
||||
if test -f "$tmpdepfile"; then
|
||||
# Each line is of the form `foo.o: dependent.h'.
|
||||
# Do two passes, one to just change these to
|
||||
# `$object: dependent.h' and one to simply `dependent.h:'.
|
||||
sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
|
||||
sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
|
||||
else
|
||||
# The sourcefile does not contain any dependencies, so just
|
||||
# store a dummy comment line, to avoid errors with the Makefile
|
||||
# "include basename.Plo" scheme.
|
||||
echo "#dummy" > "$depfile"
|
||||
fi
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
tru64)
|
||||
# The Tru64 AIX compiler uses -MD to generate dependencies as a side
|
||||
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
|
||||
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
|
||||
# dependencies in `foo.d' instead, so we check for that too.
|
||||
# Subdirectories are respected.
|
||||
|
||||
tmpdepfile1="$object.d"
|
||||
tmpdepfile2=`echo "$object" | sed -e 's/.o$/.d/'`
|
||||
if test "$libtool" = yes; then
|
||||
"$@" -Wc,-MD
|
||||
else
|
||||
"$@" -MD
|
||||
fi
|
||||
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile1" "$tmpdepfile2"
|
||||
exit $stat
|
||||
fi
|
||||
|
||||
if test -f "$tmpdepfile1"; then
|
||||
tmpdepfile="$tmpdepfile1"
|
||||
else
|
||||
tmpdepfile="$tmpdepfile2"
|
||||
fi
|
||||
if test -f "$tmpdepfile"; then
|
||||
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
|
||||
# That's a space and a tab in the [].
|
||||
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
|
||||
else
|
||||
echo "#dummy" > "$depfile"
|
||||
fi
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
#nosideeffect)
|
||||
# This comment above is used by automake to tell side-effect
|
||||
# dependency tracking mechanisms from slower ones.
|
||||
|
||||
dashmstdout)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the proprocessed file to stdout, regardless of -o,
|
||||
# because we must use -o when running libtool.
|
||||
test -z "$dashmflag" && dashmflag=-M
|
||||
( IFS=" "
|
||||
case " $* " in
|
||||
*" --mode=compile "*) # this is libtool, let us make it quiet
|
||||
for arg
|
||||
do # cycle over the arguments
|
||||
case "$arg" in
|
||||
"--mode=compile")
|
||||
# insert --quiet before "--mode=compile"
|
||||
set fnord "$@" --quiet
|
||||
shift # fnord
|
||||
;;
|
||||
esac
|
||||
set fnord "$@" "$arg"
|
||||
shift # fnord
|
||||
shift # "$arg"
|
||||
done
|
||||
;;
|
||||
esac
|
||||
"$@" $dashmflag | sed 's:^[^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
|
||||
) &
|
||||
proc=$!
|
||||
"$@"
|
||||
stat=$?
|
||||
wait "$proc"
|
||||
if test "$stat" != 0; then exit $stat; fi
|
||||
rm -f "$depfile"
|
||||
cat < "$tmpdepfile" > "$depfile"
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" | \
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
dashXmstdout)
|
||||
# This case only exists to satisfy depend.m4. It is never actually
|
||||
# run, as this mode is specially recognized in the preamble.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
makedepend)
|
||||
# X makedepend
|
||||
(
|
||||
shift
|
||||
cleared=no
|
||||
for arg in "$@"; do
|
||||
case $cleared in no)
|
||||
set ""; shift
|
||||
cleared=yes
|
||||
esac
|
||||
case "$arg" in
|
||||
-D*|-I*)
|
||||
set fnord "$@" "$arg"; shift;;
|
||||
-*)
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"; shift;;
|
||||
esac
|
||||
done
|
||||
obj_suffix="`echo $object | sed 's/^.*\././'`"
|
||||
touch "$tmpdepfile"
|
||||
${MAKEDEPEND-makedepend} 2>/dev/null -o"$obj_suffix" -f"$tmpdepfile" "$@"
|
||||
) &
|
||||
proc=$!
|
||||
"$@"
|
||||
stat=$?
|
||||
wait "$proc"
|
||||
if test "$stat" != 0; then exit $stat; fi
|
||||
rm -f "$depfile"
|
||||
cat < "$tmpdepfile" > "$depfile"
|
||||
tail +3 "$tmpdepfile" | tr ' ' '
|
||||
' | \
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile" "$tmpdepfile".bak
|
||||
;;
|
||||
|
||||
cpp)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the proprocessed file to stdout, regardless of -o,
|
||||
# because we must use -o when running libtool.
|
||||
( IFS=" "
|
||||
case " $* " in
|
||||
*" --mode=compile "*)
|
||||
for arg
|
||||
do # cycle over the arguments
|
||||
case $arg in
|
||||
"--mode=compile")
|
||||
# insert --quiet before "--mode=compile"
|
||||
set fnord "$@" --quiet
|
||||
shift # fnord
|
||||
;;
|
||||
esac
|
||||
set fnord "$@" "$arg"
|
||||
shift # fnord
|
||||
shift # "$arg"
|
||||
done
|
||||
;;
|
||||
esac
|
||||
"$@" -E |
|
||||
sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
|
||||
sed '$ s: \\$::' > "$tmpdepfile"
|
||||
) &
|
||||
proc=$!
|
||||
"$@"
|
||||
stat=$?
|
||||
wait "$proc"
|
||||
if test "$stat" != 0; then exit $stat; fi
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
cat < "$tmpdepfile" >> "$depfile"
|
||||
sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
msvisualcpp)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the proprocessed file to stdout, regardless of -o,
|
||||
# because we must use -o when running libtool.
|
||||
( IFS=" "
|
||||
case " $* " in
|
||||
*" --mode=compile "*)
|
||||
for arg
|
||||
do # cycle over the arguments
|
||||
case $arg in
|
||||
"--mode=compile")
|
||||
# insert --quiet before "--mode=compile"
|
||||
set fnord "$@" --quiet
|
||||
shift # fnord
|
||||
;;
|
||||
esac
|
||||
set fnord "$@" "$arg"
|
||||
shift # fnord
|
||||
shift # "$arg"
|
||||
done
|
||||
;;
|
||||
esac
|
||||
"$@" -E |
|
||||
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
|
||||
) &
|
||||
proc=$!
|
||||
"$@"
|
||||
stat=$?
|
||||
wait "$proc"
|
||||
if test "$stat" != 0; then exit $stat; fi
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
|
||||
echo " " >> "$depfile"
|
||||
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
none)
|
||||
exec "$@"
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Unknown depmode $depmode" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
263
doc/Makefile
Normal file
263
doc/Makefile
Normal file
@ -0,0 +1,263 @@
|
||||
# Generated automatically from Makefile.in by configure.
|
||||
# Makefile.in generated automatically by automake 1.5 from Makefile.am.
|
||||
|
||||
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
|
||||
# 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.
|
||||
|
||||
|
||||
|
||||
SHELL = /bin/sh
|
||||
|
||||
srcdir = .
|
||||
top_srcdir = ..
|
||||
prefix = /usr/local
|
||||
exec_prefix = ${prefix}
|
||||
|
||||
bindir = ${exec_prefix}/bin
|
||||
sbindir = ${exec_prefix}/sbin
|
||||
libexecdir = ${exec_prefix}/libexec
|
||||
datadir = ${prefix}/share
|
||||
sysconfdir = ${prefix}/etc
|
||||
sharedstatedir = ${prefix}/com
|
||||
localstatedir = ${prefix}/var
|
||||
libdir = ${exec_prefix}/lib
|
||||
infodir = ${prefix}/info
|
||||
mandir = ${prefix}/man
|
||||
includedir = ${prefix}/include
|
||||
oldincludedir = /usr/include
|
||||
pkgdatadir = $(datadir)/mbusd
|
||||
pkglibdir = $(libdir)/mbusd
|
||||
pkgincludedir = $(includedir)/mbusd
|
||||
top_builddir = ..
|
||||
|
||||
ACLOCAL = ${SHELL} /usr/home/avm/work/mbus/missing --run aclocal
|
||||
AUTOCONF = ${SHELL} /usr/home/avm/work/mbus/missing --run autoconf
|
||||
AUTOMAKE = ${SHELL} /usr/home/avm/work/mbus/missing --run automake
|
||||
AUTOHEADER = ${SHELL} /usr/home/avm/work/mbus/missing --run autoheader
|
||||
|
||||
INSTALL = /usr/bin/install -c
|
||||
INSTALL_PROGRAM = ${INSTALL}
|
||||
INSTALL_DATA = ${INSTALL} -m 644
|
||||
INSTALL_SCRIPT = ${INSTALL_PROGRAM}
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = s,x,x,
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
host_alias = i386-unknown-freebsdelf4.8
|
||||
host_triplet = i386-unknown-freebsdelf4.8
|
||||
AMTAR = ${SHELL} /usr/home/avm/work/mbus/missing --run tar
|
||||
AS = @AS@
|
||||
AWK = gawk
|
||||
CC = gcc
|
||||
DEPDIR = .deps
|
||||
DLLTOOL = @DLLTOOL@
|
||||
EXEEXT =
|
||||
INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s
|
||||
LIBTOOL = $(SHELL) $(top_builddir)/libtool
|
||||
LN_S = ln -s
|
||||
NO_PREFIX_PACKAGE_DATA_DIR = share/mbusd
|
||||
NO_PREFIX_PACKAGE_DOC_DIR = doc/mbusd
|
||||
NO_PREFIX_PACKAGE_HELP_DIR = share/mbusd/help
|
||||
NO_PREFIX_PACKAGE_MENU_DIR = share/mbusd
|
||||
NO_PREFIX_PACKAGE_PIXMAPS_DIR = share/mbusd/pixmaps
|
||||
OBJDUMP = @OBJDUMP@
|
||||
OBJEXT = o
|
||||
PACKAGE = mbusd
|
||||
PACKAGE_DATA_DIR = /usr/local/share/mbusd
|
||||
PACKAGE_DOC_DIR = /usr/local/doc/mbusd
|
||||
PACKAGE_HELP_DIR = /usr/local/share/mbusd/help
|
||||
PACKAGE_MENU_DIR = /usr/local/share/mbusd
|
||||
PACKAGE_PIXMAPS_DIR = /usr/local/share/mbusd/pixmaps
|
||||
RANLIB = ranlib
|
||||
VERSION = 0.1.1
|
||||
am__include = include
|
||||
am__quote =
|
||||
install_sh = /usr/home/avm/work/mbus/install-sh
|
||||
|
||||
man_MANS = mbusd.8
|
||||
subdir = doc
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
DIST_SOURCES =
|
||||
|
||||
NROFF = nroff
|
||||
MANS = $(man_MANS)
|
||||
DIST_COMMON = Makefile.am Makefile.in
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu doc/Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
cd $(top_builddir) && \
|
||||
CONFIG_HEADERS= CONFIG_LINKS= \
|
||||
CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
|
||||
uninstall-info-am:
|
||||
|
||||
man8dir = $(mandir)/man8
|
||||
install-man8: $(man8_MANS) $(man_MANS)
|
||||
@$(NORMAL_INSTALL)
|
||||
$(mkinstalldirs) $(DESTDIR)$(man8dir)
|
||||
@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
|
||||
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
|
||||
for i in $$l2; do \
|
||||
case "$$i" in \
|
||||
*.8*) list="$$list $$i" ;; \
|
||||
esac; \
|
||||
done; \
|
||||
for i in $$list; do \
|
||||
if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
|
||||
else file=$$i; fi; \
|
||||
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
|
||||
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
|
||||
inst=`echo $$inst | sed -e 's/^.*\///'`; \
|
||||
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
|
||||
echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst"; \
|
||||
$(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst; \
|
||||
done
|
||||
uninstall-man8:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
|
||||
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
|
||||
for i in $$l2; do \
|
||||
case "$$i" in \
|
||||
*.8*) list="$$list $$i" ;; \
|
||||
esac; \
|
||||
done; \
|
||||
for i in $$list; do \
|
||||
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
|
||||
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
|
||||
inst=`echo $$inst | sed -e 's/^.*\///'`; \
|
||||
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
|
||||
echo " rm -f $(DESTDIR)$(man8dir)/$$inst"; \
|
||||
rm -f $(DESTDIR)$(man8dir)/$$inst; \
|
||||
done
|
||||
tags: TAGS
|
||||
TAGS:
|
||||
|
||||
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
top_distdir = ..
|
||||
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@for file in $(DISTFILES); do \
|
||||
if test -f $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
$(mkinstalldirs) "$(distdir)/$$dir"; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
cp -pR $$d/$$file $(distdir) \
|
||||
|| exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(MANS)
|
||||
|
||||
installdirs:
|
||||
$(mkinstalldirs) $(DESTDIR)$(man8dir)
|
||||
|
||||
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)" \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
|
||||
distclean-am: clean-am distclean-generic distclean-libtool
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-man
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man: install-man8
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
uninstall-am: uninstall-info-am uninstall-man
|
||||
|
||||
uninstall-man: uninstall-man8
|
||||
|
||||
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
|
||||
distclean distclean-generic distclean-libtool distdir dvi \
|
||||
dvi-am info info-am install install-am install-data \
|
||||
install-data-am install-exec install-exec-am install-info \
|
||||
install-info-am install-man install-man8 install-strip \
|
||||
installcheck installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-generic \
|
||||
mostlyclean-libtool uninstall uninstall-am uninstall-info-am \
|
||||
uninstall-man uninstall-man8
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
3
doc/Makefile.am
Normal file
3
doc/Makefile.am
Normal file
@ -0,0 +1,3 @@
|
||||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
man_MANS = mbusd.8
|
263
doc/Makefile.in
Normal file
263
doc/Makefile.in
Normal file
@ -0,0 +1,263 @@
|
||||
# Makefile.in generated automatically by automake 1.5 from Makefile.am.
|
||||
|
||||
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
|
||||
# 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@
|
||||
|
||||
SHELL = @SHELL@
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
prefix = @prefix@
|
||||
exec_prefix = @exec_prefix@
|
||||
|
||||
bindir = @bindir@
|
||||
sbindir = @sbindir@
|
||||
libexecdir = @libexecdir@
|
||||
datadir = @datadir@
|
||||
sysconfdir = @sysconfdir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
localstatedir = @localstatedir@
|
||||
libdir = @libdir@
|
||||
infodir = @infodir@
|
||||
mandir = @mandir@
|
||||
includedir = @includedir@
|
||||
oldincludedir = /usr/include
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ..
|
||||
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = @program_transform_name@
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
host_alias = @host_alias@
|
||||
host_triplet = @host@
|
||||
AMTAR = @AMTAR@
|
||||
AS = @AS@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
EXEEXT = @EXEEXT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LN_S = @LN_S@
|
||||
NO_PREFIX_PACKAGE_DATA_DIR = @NO_PREFIX_PACKAGE_DATA_DIR@
|
||||
NO_PREFIX_PACKAGE_DOC_DIR = @NO_PREFIX_PACKAGE_DOC_DIR@
|
||||
NO_PREFIX_PACKAGE_HELP_DIR = @NO_PREFIX_PACKAGE_HELP_DIR@
|
||||
NO_PREFIX_PACKAGE_MENU_DIR = @NO_PREFIX_PACKAGE_MENU_DIR@
|
||||
NO_PREFIX_PACKAGE_PIXMAPS_DIR = @NO_PREFIX_PACKAGE_PIXMAPS_DIR@
|
||||
OBJDUMP = @OBJDUMP@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_DATA_DIR = @PACKAGE_DATA_DIR@
|
||||
PACKAGE_DOC_DIR = @PACKAGE_DOC_DIR@
|
||||
PACKAGE_HELP_DIR = @PACKAGE_HELP_DIR@
|
||||
PACKAGE_MENU_DIR = @PACKAGE_MENU_DIR@
|
||||
PACKAGE_PIXMAPS_DIR = @PACKAGE_PIXMAPS_DIR@
|
||||
RANLIB = @RANLIB@
|
||||
VERSION = @VERSION@
|
||||
am__include = @am__include@
|
||||
am__quote = @am__quote@
|
||||
install_sh = @install_sh@
|
||||
|
||||
man_MANS = mbusd.8
|
||||
subdir = doc
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
DIST_SOURCES =
|
||||
|
||||
NROFF = nroff
|
||||
MANS = $(man_MANS)
|
||||
DIST_COMMON = Makefile.am Makefile.in
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu doc/Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
cd $(top_builddir) && \
|
||||
CONFIG_HEADERS= CONFIG_LINKS= \
|
||||
CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
|
||||
uninstall-info-am:
|
||||
|
||||
man8dir = $(mandir)/man8
|
||||
install-man8: $(man8_MANS) $(man_MANS)
|
||||
@$(NORMAL_INSTALL)
|
||||
$(mkinstalldirs) $(DESTDIR)$(man8dir)
|
||||
@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
|
||||
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
|
||||
for i in $$l2; do \
|
||||
case "$$i" in \
|
||||
*.8*) list="$$list $$i" ;; \
|
||||
esac; \
|
||||
done; \
|
||||
for i in $$list; do \
|
||||
if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
|
||||
else file=$$i; fi; \
|
||||
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
|
||||
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
|
||||
inst=`echo $$inst | sed -e 's/^.*\///'`; \
|
||||
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
|
||||
echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst"; \
|
||||
$(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst; \
|
||||
done
|
||||
uninstall-man8:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
|
||||
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
|
||||
for i in $$l2; do \
|
||||
case "$$i" in \
|
||||
*.8*) list="$$list $$i" ;; \
|
||||
esac; \
|
||||
done; \
|
||||
for i in $$list; do \
|
||||
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
|
||||
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
|
||||
inst=`echo $$inst | sed -e 's/^.*\///'`; \
|
||||
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
|
||||
echo " rm -f $(DESTDIR)$(man8dir)/$$inst"; \
|
||||
rm -f $(DESTDIR)$(man8dir)/$$inst; \
|
||||
done
|
||||
tags: TAGS
|
||||
TAGS:
|
||||
|
||||
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
top_distdir = ..
|
||||
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@for file in $(DISTFILES); do \
|
||||
if test -f $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
$(mkinstalldirs) "$(distdir)/$$dir"; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
cp -pR $$d/$$file $(distdir) \
|
||||
|| exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(MANS)
|
||||
|
||||
installdirs:
|
||||
$(mkinstalldirs) $(DESTDIR)$(man8dir)
|
||||
|
||||
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)" \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
|
||||
distclean-am: clean-am distclean-generic distclean-libtool
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-man
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man: install-man8
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
uninstall-am: uninstall-info-am uninstall-man
|
||||
|
||||
uninstall-man: uninstall-man8
|
||||
|
||||
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
|
||||
distclean distclean-generic distclean-libtool distdir dvi \
|
||||
dvi-am info info-am install install-am install-data \
|
||||
install-data-am install-exec install-exec-am install-info \
|
||||
install-info-am install-man install-man8 install-strip \
|
||||
installcheck installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-generic \
|
||||
mostlyclean-libtool uninstall uninstall-am uninstall-info-am \
|
||||
uninstall-man uninstall-man8
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
79
doc/mbusd.8
Normal file
79
doc/mbusd.8
Normal file
@ -0,0 +1,79 @@
|
||||
.TH "mbusd" 8 "13 September 2003" "mbusd 0.1.1"
|
||||
.SH NAME
|
||||
mbusd \- OpenMODBUS/TCP to MODBUS RTU gateway server
|
||||
.SH SYNOPSIS
|
||||
.B mbusd
|
||||
.RB [ -h ]
|
||||
.RB [ -d ]
|
||||
.RB [ -v
|
||||
.IR level ]
|
||||
.RB [ -L
|
||||
.IR name ]
|
||||
.RB [ -p
|
||||
.IR name ]
|
||||
.RB [ -s
|
||||
.IR value ]
|
||||
.RB [ -P
|
||||
.IR number ]
|
||||
.RB [ -C
|
||||
.IR number ]
|
||||
.RB [ -N
|
||||
.IR number ]
|
||||
.RB [ -R
|
||||
.IR value ]
|
||||
.RB [ -W
|
||||
.IR value ]
|
||||
.RB [ -T
|
||||
.IR value ]
|
||||
.SH DESCRIPTION
|
||||
\fImbusd\fR is OpenMODBUS/TCP to MODBUS RTU gateway server.
|
||||
.SH OPTIONS
|
||||
.IP \fB-h\fR
|
||||
Usage help.
|
||||
.IP \fB-d\fR
|
||||
Instruct \fImbusd\fR not to fork itself (non-daemonize).
|
||||
.IP "\fB-v \fIlevel\fR"
|
||||
Specifies log verbosity level. 0 enables logging of errors only,
|
||||
1 also enables warnings and 2 enables information messages.
|
||||
If \fImbusd\fR was compiled in debug mode, valid log levels is up to 9,
|
||||
where log levels above 2 forces logging of information about additional
|
||||
internal events.
|
||||
.IP "\fB-L \fIname\fR"
|
||||
Specifies log file name.
|
||||
.IP "\fB-p \fIname\fR"
|
||||
Specifies serial port device name.
|
||||
.IP "\fB-s \fIvalue\fR"
|
||||
Specifies serial port speed.
|
||||
.IP "\fB-P \fInumber\fR"
|
||||
Specifies TCP port number.
|
||||
.IP "\fB-C \fInumber\fR"
|
||||
Specifies maximum number of simultaneous connections.
|
||||
.IP "\fB-N \fInumber\fR"
|
||||
Specifies maximum number of request retries. 0 - no retries.
|
||||
.IP "\fB-R \fIvalue\fR"
|
||||
Specifies pause between requests in miliseconds.
|
||||
.IP "\fB-W \fIvalue\fR"
|
||||
Specifies response wait time in miliseconds.
|
||||
.IP "\fB-T \fIvalue\fR"
|
||||
Specifies connection timeout value in seconds. 0 - no timeout.
|
||||
.SH NOTES
|
||||
Because MODBUS RTU protocol have situations which can't straightforwardly
|
||||
translated into MODBUS/TCP protocol entities, \fImbusd\fR extends standard excepton codes set.
|
||||
In case of situation when \fImbusd\fR received response with invalid CRC and can't correct
|
||||
error by re-request, it returns MODBUS/TCP packet with exception code 128. In case of situation
|
||||
when \fImbusd\fR can't receive response from MODBUS RTU device (e.g. addressed controller
|
||||
is not present on the network), it returns MODBUS/TCP packet with exception code 129.
|
||||
.SH FILES
|
||||
.PP
|
||||
The default locations of the \fImbusd\fR log file is:
|
||||
.PP
|
||||
/var/log/mbusd.log
|
||||
.SH BUGS
|
||||
Broadcast messaging on MODBUS network isn't supported.
|
||||
|
||||
Please send bug reports to author.
|
||||
.SH AUTHOR
|
||||
Victor Antonovich <avmlink@vlink.ru>.
|
||||
.SH LICENSE
|
||||
This program is distributed under the BSD-like license, included in
|
||||
each source file. See also COPYING file in the installation directory.
|
251
install-sh
Executable file
251
install-sh
Executable file
@ -0,0 +1,251 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# install - install a program, script, or datafile
|
||||
# This comes from X11R5 (mit/util/scripts/install.sh).
|
||||
#
|
||||
# Copyright 1991 by the Massachusetts Institute of Technology
|
||||
#
|
||||
# Permission to use, copy, modify, distribute, and sell this software and its
|
||||
# documentation for any purpose is hereby granted without fee, provided that
|
||||
# the above copyright notice appear in all copies and that both that
|
||||
# copyright notice and this permission notice appear in supporting
|
||||
# documentation, and that the name of M.I.T. not be used in advertising or
|
||||
# publicity pertaining to distribution of the software without specific,
|
||||
# written prior permission. M.I.T. makes no representations about the
|
||||
# suitability of this software for any purpose. It is provided "as is"
|
||||
# without express or implied warranty.
|
||||
#
|
||||
# Calling this script install-sh is preferred over install.sh, to prevent
|
||||
# `make' implicit rules from creating a file called install from it
|
||||
# when there is no Makefile.
|
||||
#
|
||||
# This script is compatible with the BSD install script, but was written
|
||||
# from scratch. It can only install one file at a time, a restriction
|
||||
# shared with many OS's install programs.
|
||||
|
||||
|
||||
# set DOITPROG to echo to test this script
|
||||
|
||||
# Don't use :- since 4.3BSD and earlier shells don't like it.
|
||||
doit="${DOITPROG-}"
|
||||
|
||||
|
||||
# put in absolute paths if you don't have them in your path; or use env. vars.
|
||||
|
||||
mvprog="${MVPROG-mv}"
|
||||
cpprog="${CPPROG-cp}"
|
||||
chmodprog="${CHMODPROG-chmod}"
|
||||
chownprog="${CHOWNPROG-chown}"
|
||||
chgrpprog="${CHGRPPROG-chgrp}"
|
||||
stripprog="${STRIPPROG-strip}"
|
||||
rmprog="${RMPROG-rm}"
|
||||
mkdirprog="${MKDIRPROG-mkdir}"
|
||||
|
||||
transformbasename=""
|
||||
transform_arg=""
|
||||
instcmd="$mvprog"
|
||||
chmodcmd="$chmodprog 0755"
|
||||
chowncmd=""
|
||||
chgrpcmd=""
|
||||
stripcmd=""
|
||||
rmcmd="$rmprog -f"
|
||||
mvcmd="$mvprog"
|
||||
src=""
|
||||
dst=""
|
||||
dir_arg=""
|
||||
|
||||
while [ x"$1" != x ]; do
|
||||
case $1 in
|
||||
-c) instcmd="$cpprog"
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-d) dir_arg=true
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-m) chmodcmd="$chmodprog $2"
|
||||
shift
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-o) chowncmd="$chownprog $2"
|
||||
shift
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-g) chgrpcmd="$chgrpprog $2"
|
||||
shift
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-s) stripcmd="$stripprog"
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-t=*) transformarg=`echo $1 | sed 's/-t=//'`
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
|
||||
shift
|
||||
continue;;
|
||||
|
||||
*) if [ x"$src" = x ]
|
||||
then
|
||||
src=$1
|
||||
else
|
||||
# this colon is to work around a 386BSD /bin/sh bug
|
||||
:
|
||||
dst=$1
|
||||
fi
|
||||
shift
|
||||
continue;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ x"$src" = x ]
|
||||
then
|
||||
echo "install: no input file specified"
|
||||
exit 1
|
||||
else
|
||||
true
|
||||
fi
|
||||
|
||||
if [ x"$dir_arg" != x ]; then
|
||||
dst=$src
|
||||
src=""
|
||||
|
||||
if [ -d $dst ]; then
|
||||
instcmd=:
|
||||
chmodcmd=""
|
||||
else
|
||||
instcmd=mkdir
|
||||
fi
|
||||
else
|
||||
|
||||
# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
|
||||
# might cause directories to be created, which would be especially bad
|
||||
# if $src (and thus $dsttmp) contains '*'.
|
||||
|
||||
if [ -f $src -o -d $src ]
|
||||
then
|
||||
true
|
||||
else
|
||||
echo "install: $src does not exist"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ x"$dst" = x ]
|
||||
then
|
||||
echo "install: no destination specified"
|
||||
exit 1
|
||||
else
|
||||
true
|
||||
fi
|
||||
|
||||
# If destination is a directory, append the input filename; if your system
|
||||
# does not like double slashes in filenames, you may need to add some logic
|
||||
|
||||
if [ -d $dst ]
|
||||
then
|
||||
dst="$dst"/`basename $src`
|
||||
else
|
||||
true
|
||||
fi
|
||||
fi
|
||||
|
||||
## this sed command emulates the dirname command
|
||||
dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
|
||||
|
||||
# Make sure that the destination directory exists.
|
||||
# this part is taken from Noah Friedman's mkinstalldirs script
|
||||
|
||||
# Skip lots of stat calls in the usual case.
|
||||
if [ ! -d "$dstdir" ]; then
|
||||
defaultIFS='
|
||||
'
|
||||
IFS="${IFS-${defaultIFS}}"
|
||||
|
||||
oIFS="${IFS}"
|
||||
# Some sh's can't handle IFS=/ for some reason.
|
||||
IFS='%'
|
||||
set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
|
||||
IFS="${oIFS}"
|
||||
|
||||
pathcomp=''
|
||||
|
||||
while [ $# -ne 0 ] ; do
|
||||
pathcomp="${pathcomp}${1}"
|
||||
shift
|
||||
|
||||
if [ ! -d "${pathcomp}" ] ;
|
||||
then
|
||||
$mkdirprog "${pathcomp}"
|
||||
else
|
||||
true
|
||||
fi
|
||||
|
||||
pathcomp="${pathcomp}/"
|
||||
done
|
||||
fi
|
||||
|
||||
if [ x"$dir_arg" != x ]
|
||||
then
|
||||
$doit $instcmd $dst &&
|
||||
|
||||
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
|
||||
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
|
||||
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
|
||||
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
|
||||
else
|
||||
|
||||
# If we're going to rename the final executable, determine the name now.
|
||||
|
||||
if [ x"$transformarg" = x ]
|
||||
then
|
||||
dstfile=`basename $dst`
|
||||
else
|
||||
dstfile=`basename $dst $transformbasename |
|
||||
sed $transformarg`$transformbasename
|
||||
fi
|
||||
|
||||
# don't allow the sed command to completely eliminate the filename
|
||||
|
||||
if [ x"$dstfile" = x ]
|
||||
then
|
||||
dstfile=`basename $dst`
|
||||
else
|
||||
true
|
||||
fi
|
||||
|
||||
# Make a temp file name in the proper directory.
|
||||
|
||||
dsttmp=$dstdir/#inst.$$#
|
||||
|
||||
# Move or copy the file name to the temp name
|
||||
|
||||
$doit $instcmd $src $dsttmp &&
|
||||
|
||||
trap "rm -f ${dsttmp}" 0 &&
|
||||
|
||||
# and set any options; do chmod last to preserve setuid bits
|
||||
|
||||
# If any of these fail, we abort the whole thing. If we want to
|
||||
# ignore errors from any of these, just make sure not to ignore
|
||||
# errors from the above "$doit $instcmd $src $dsttmp" command.
|
||||
|
||||
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
|
||||
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
|
||||
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
|
||||
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
|
||||
|
||||
# Now rename the file to the real destination.
|
||||
|
||||
$doit $rmcmd -f $dstdir/$dstfile &&
|
||||
$doit $mvcmd $dsttmp $dstdir/$dstfile
|
||||
|
||||
fi &&
|
||||
|
||||
|
||||
exit 0
|
130
mbus.prj
Normal file
130
mbus.prj
Normal file
@ -0,0 +1,130 @@
|
||||
# Anjuta Version 1.0.1
|
||||
Compatibility Level: 1
|
||||
|
||||
<PROJECT_DESCRIPTION_START>
|
||||
OpenMODBUS/TCP to RS-232/485 MODBUS network gateway server<PROJECT_DESCRIPTION_END>
|
||||
<CONFIG_PROGS_START>
|
||||
<CONFIG_PROGS_END>
|
||||
<CONFIG_LIBS_START>
|
||||
<CONFIG_LIBS_END>
|
||||
<CONFIG_HEADERS_START>
|
||||
<CONFIG_HEADERS_END>
|
||||
<CONFIG_CHARACTERISTICS_START>
|
||||
<CONFIG_CHARACTERISTICS_END>
|
||||
<CONFIG_LIB_FUNCS_START>
|
||||
<CONFIG_LIB_FUNCS_END>
|
||||
<CONFIG_ADDITIONAL_START>
|
||||
<CONFIG_ADDITIONAL_END>
|
||||
<CONFIG_FILES_START>
|
||||
<CONFIG_FILES_END>
|
||||
<MAKEFILE_AM_START>
|
||||
<MAKEFILE_AM_END>
|
||||
|
||||
props.file.type=project
|
||||
|
||||
anjuta.version=1.0.1
|
||||
anjuta.compatibility.level=1
|
||||
|
||||
project.name=mbusd
|
||||
project.type=GENERIC
|
||||
project.target.type=EXECUTABLE
|
||||
project.version=0.1
|
||||
project.author=avm
|
||||
project.source.target=mbusd
|
||||
project.has.gettext=0
|
||||
project.programming.language=C
|
||||
project.excluded.modules=intl
|
||||
|
||||
project.config.extra.modules.before=
|
||||
project.config.extra.modules.after=
|
||||
project.config.blocked=0
|
||||
project.config.disable.overwriting=0 0 0 0 0 0 0 0 0
|
||||
|
||||
project.menu.entry=mbusd Version 0.1
|
||||
project.menu.group=Applications
|
||||
project.menu.comment=mbusd Version 0.1
|
||||
project.menu.icon=
|
||||
project.menu.need.terminal=0
|
||||
|
||||
project.configure.options=
|
||||
anjuta.program.arguments=
|
||||
preferences.indent.automatic=1
|
||||
preferences.use.tabs=0
|
||||
preferences.indent.opening=0
|
||||
preferences.indent.closing=0
|
||||
preferences.tabsize=4
|
||||
preferences.indent.size=2
|
||||
preferences.autoformat.style=Custom style
|
||||
preferences.autoformat.custom.style= -i2 -sc -bl -cdb -cli0 -ei -nfcb -lp -di2
|
||||
preferences.autoformat.disable=0
|
||||
|
||||
module.include.name=include
|
||||
module.include.type=
|
||||
module.include.expanded=0
|
||||
module.include.files=
|
||||
|
||||
module.source.name=src
|
||||
module.source.type=
|
||||
module.source.expanded=1
|
||||
module.source.files=\
|
||||
main.c\
|
||||
tty.c\
|
||||
tty.h\
|
||||
globals.h\
|
||||
log.c\
|
||||
log.h\
|
||||
cfg.c\
|
||||
cfg.h\
|
||||
conn.c\
|
||||
conn.h\
|
||||
queue.c\
|
||||
queue.h\
|
||||
modbus.c\
|
||||
modbus.h\
|
||||
crc16.c\
|
||||
crc16.h\
|
||||
state.c\
|
||||
state.h\
|
||||
sig.h\
|
||||
sig.c\
|
||||
sock.h\
|
||||
sock.c
|
||||
|
||||
module.pixmap.name=pixmaps
|
||||
module.pixmap.type=
|
||||
module.pixmap.expanded=0
|
||||
module.pixmap.files=
|
||||
|
||||
module.data.name=data
|
||||
module.data.type=
|
||||
module.data.expanded=0
|
||||
module.data.files=
|
||||
|
||||
module.help.name=help
|
||||
module.help.type=
|
||||
module.help.expanded=0
|
||||
module.help.files=
|
||||
|
||||
module.doc.name=doc
|
||||
module.doc.type=
|
||||
module.doc.expanded=0
|
||||
module.doc.files=
|
||||
|
||||
module.po.expanded=0
|
||||
module.po.files=
|
||||
|
||||
compiler.options.supports=
|
||||
compiler.options.include.paths=
|
||||
compiler.options.library.paths=
|
||||
compiler.options.libraries=\
|
||||
util
|
||||
compiler.options.libraries.selected=1
|
||||
compiler.options.defines=
|
||||
compiler.options.warning.buttons=0 0 1 1 1 1 1 1 1 1 1 0 1 1 0 1
|
||||
compiler.options.optimize.buttons=0 1 0 0
|
||||
compiler.options.other.buttons=0 0
|
||||
compiler.options.other.c.flags=-W -pedantic
|
||||
compiler.options.other.l.flags=
|
||||
compiler.options.other.l.libs=
|
||||
project.source.paths=
|
||||
|
75
mbus.pws
Normal file
75
mbus.pws
Normal file
@ -0,0 +1,75 @@
|
||||
|
||||
[filenumbers]
|
||||
0=46
|
||||
1=162
|
||||
2=26
|
||||
3=17
|
||||
4=61
|
||||
5=101
|
||||
6=53
|
||||
7=45
|
||||
8=68
|
||||
9=397
|
||||
10=55
|
||||
11=32
|
||||
12=27
|
||||
13=45
|
||||
14=49
|
||||
15=36
|
||||
16=56
|
||||
17=88
|
||||
18=1
|
||||
19=128
|
||||
20=25
|
||||
21=138
|
||||
22=32
|
||||
23=48
|
||||
|
||||
[filemarkers]
|
||||
0=
|
||||
1=
|
||||
2=
|
||||
3=
|
||||
4=
|
||||
5=
|
||||
6=
|
||||
7=
|
||||
8=
|
||||
9=321,
|
||||
10=
|
||||
11=
|
||||
12=
|
||||
13=
|
||||
14=
|
||||
15=
|
||||
16=
|
||||
17=
|
||||
18=
|
||||
19=
|
||||
20=
|
||||
21=
|
||||
22=
|
||||
23=
|
||||
|
||||
[executer]
|
||||
RunInTerminal=true
|
||||
|
||||
[Project DBase]
|
||||
ShowLocals=true
|
||||
|
||||
[find_text]
|
||||
0=log
|
||||
1=MODBUS
|
||||
2=DEBUG
|
||||
3=read(
|
||||
4=write(
|
||||
5=log_
|
||||
6=FD_SET
|
||||
7=CONN_RQST
|
||||
|
||||
[find_in_files]
|
||||
0=#elif
|
||||
1=DEBUG
|
||||
2=Modbus
|
||||
3=modbus
|
||||
4=TRY
|
32
mbusd.pws
Normal file
32
mbusd.pws
Normal file
@ -0,0 +1,32 @@
|
||||
|
||||
[executer]
|
||||
RunInTerminal=true
|
||||
|
||||
[Project DBase]
|
||||
ShowLocals=true
|
||||
|
||||
[filenumbers]
|
||||
0=143
|
||||
1=143
|
||||
2=1
|
||||
3=217
|
||||
4=1
|
||||
|
||||
[filemarkers]
|
||||
0=
|
||||
1=
|
||||
2=
|
||||
3=
|
||||
4=
|
||||
|
||||
[filelist]
|
||||
0=/usr/home/avm/work/mbus/src/sock.c
|
||||
1=/usr/home/avm/work/mbus/src/tty.c
|
||||
2=/usr/home/avm/work/mbus/src/globals.h
|
||||
|
||||
[find_text]
|
||||
0=TIOS
|
||||
|
||||
[find_in_files]
|
||||
0=tty_open
|
||||
1=INTBUFSIZE
|
283
missing
Executable file
283
missing
Executable file
@ -0,0 +1,283 @@
|
||||
#! /bin/sh
|
||||
# Common stub for a few missing GNU programs while installing.
|
||||
# Copyright 1996, 1997, 1999, 2000 Free Software Foundation, Inc.
|
||||
# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
# 02111-1307, USA.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
if test $# -eq 0; then
|
||||
echo 1>&2 "Try \`$0 --help' for more information"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
run=:
|
||||
|
||||
# In the cases where this matters, `missing' is being run in the
|
||||
# srcdir already.
|
||||
if test -f configure.ac; then
|
||||
configure_ac=configure.ac
|
||||
else
|
||||
configure_ac=configure.in
|
||||
fi
|
||||
|
||||
case "$1" in
|
||||
--run)
|
||||
# Try to run requested program, and just exit if it succeeds.
|
||||
run=
|
||||
shift
|
||||
"$@" && exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
# If it does not exist, or fails to run (possibly an outdated version),
|
||||
# try to emulate it.
|
||||
case "$1" in
|
||||
|
||||
-h|--h|--he|--hel|--help)
|
||||
echo "\
|
||||
$0 [OPTION]... PROGRAM [ARGUMENT]...
|
||||
|
||||
Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
|
||||
error status if there is no known handling for PROGRAM.
|
||||
|
||||
Options:
|
||||
-h, --help display this help and exit
|
||||
-v, --version output version information and exit
|
||||
--run try to run the given command, and emulate it if it fails
|
||||
|
||||
Supported PROGRAM values:
|
||||
aclocal touch file \`aclocal.m4'
|
||||
autoconf touch file \`configure'
|
||||
autoheader touch file \`config.h.in'
|
||||
automake touch all \`Makefile.in' files
|
||||
bison create \`y.tab.[ch]', if possible, from existing .[ch]
|
||||
flex create \`lex.yy.c', if possible, from existing .c
|
||||
help2man touch the output file
|
||||
lex create \`lex.yy.c', if possible, from existing .c
|
||||
makeinfo touch the output file
|
||||
tar try tar, gnutar, gtar, then tar without non-portable flags
|
||||
yacc create \`y.tab.[ch]', if possible, from existing .[ch]"
|
||||
;;
|
||||
|
||||
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
|
||||
echo "missing 0.3 - GNU automake"
|
||||
;;
|
||||
|
||||
-*)
|
||||
echo 1>&2 "$0: Unknown \`$1' option"
|
||||
echo 1>&2 "Try \`$0 --help' for more information"
|
||||
exit 1
|
||||
;;
|
||||
|
||||
aclocal)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is missing on your system. You should only need it if
|
||||
you modified \`acinclude.m4' or \`${configure_ac}'. You might want
|
||||
to install the \`Automake' and \`Perl' packages. Grab them from
|
||||
any GNU archive site."
|
||||
touch aclocal.m4
|
||||
;;
|
||||
|
||||
autoconf)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is missing on your system. You should only need it if
|
||||
you modified \`${configure_ac}'. You might want to install the
|
||||
\`Autoconf' and \`GNU m4' packages. Grab them from any GNU
|
||||
archive site."
|
||||
touch configure
|
||||
;;
|
||||
|
||||
autoheader)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is missing on your system. You should only need it if
|
||||
you modified \`acconfig.h' or \`${configure_ac}'. You might want
|
||||
to install the \`Autoconf' and \`GNU m4' packages. Grab them
|
||||
from any GNU archive site."
|
||||
files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
|
||||
test -z "$files" && files="config.h"
|
||||
touch_files=
|
||||
for f in $files; do
|
||||
case "$f" in
|
||||
*:*) touch_files="$touch_files "`echo "$f" |
|
||||
sed -e 's/^[^:]*://' -e 's/:.*//'`;;
|
||||
*) touch_files="$touch_files $f.in";;
|
||||
esac
|
||||
done
|
||||
touch $touch_files
|
||||
;;
|
||||
|
||||
automake)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is missing on your system. You should only need it if
|
||||
you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
|
||||
You might want to install the \`Automake' and \`Perl' packages.
|
||||
Grab them from any GNU archive site."
|
||||
find . -type f -name Makefile.am -print |
|
||||
sed 's/\.am$/.in/' |
|
||||
while read f; do touch "$f"; done
|
||||
;;
|
||||
|
||||
bison|yacc)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is missing on your system. You should only need it if
|
||||
you modified a \`.y' file. You may need the \`Bison' package
|
||||
in order for those modifications to take effect. You can get
|
||||
\`Bison' from any GNU archive site."
|
||||
rm -f y.tab.c y.tab.h
|
||||
if [ $# -ne 1 ]; then
|
||||
eval LASTARG="\${$#}"
|
||||
case "$LASTARG" in
|
||||
*.y)
|
||||
SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
|
||||
if [ -f "$SRCFILE" ]; then
|
||||
cp "$SRCFILE" y.tab.c
|
||||
fi
|
||||
SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
|
||||
if [ -f "$SRCFILE" ]; then
|
||||
cp "$SRCFILE" y.tab.h
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
if [ ! -f y.tab.h ]; then
|
||||
echo >y.tab.h
|
||||
fi
|
||||
if [ ! -f y.tab.c ]; then
|
||||
echo 'main() { return 0; }' >y.tab.c
|
||||
fi
|
||||
;;
|
||||
|
||||
lex|flex)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is missing on your system. You should only need it if
|
||||
you modified a \`.l' file. You may need the \`Flex' package
|
||||
in order for those modifications to take effect. You can get
|
||||
\`Flex' from any GNU archive site."
|
||||
rm -f lex.yy.c
|
||||
if [ $# -ne 1 ]; then
|
||||
eval LASTARG="\${$#}"
|
||||
case "$LASTARG" in
|
||||
*.l)
|
||||
SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
|
||||
if [ -f "$SRCFILE" ]; then
|
||||
cp "$SRCFILE" lex.yy.c
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
if [ ! -f lex.yy.c ]; then
|
||||
echo 'main() { return 0; }' >lex.yy.c
|
||||
fi
|
||||
;;
|
||||
|
||||
help2man)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is missing on your system. You should only need it if
|
||||
you modified a dependency of a manual page. You may need the
|
||||
\`Help2man' package in order for those modifications to take
|
||||
effect. You can get \`Help2man' from any GNU archive site."
|
||||
|
||||
file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
|
||||
if test -z "$file"; then
|
||||
file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
|
||||
fi
|
||||
if [ -f "$file" ]; then
|
||||
touch $file
|
||||
else
|
||||
test -z "$file" || exec >$file
|
||||
echo ".ab help2man is required to generate this page"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
makeinfo)
|
||||
if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then
|
||||
# We have makeinfo, but it failed.
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is missing on your system. You should only need it if
|
||||
you modified a \`.texi' or \`.texinfo' file, or any other file
|
||||
indirectly affecting the aspect of the manual. The spurious
|
||||
call might also be the consequence of using a buggy \`make' (AIX,
|
||||
DU, IRIX). You might want to install the \`Texinfo' package or
|
||||
the \`GNU make' package. Grab either from any GNU archive site."
|
||||
file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
|
||||
if test -z "$file"; then
|
||||
file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
|
||||
file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
|
||||
fi
|
||||
touch $file
|
||||
;;
|
||||
|
||||
tar)
|
||||
shift
|
||||
if test -n "$run"; then
|
||||
echo 1>&2 "ERROR: \`tar' requires --run"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# We have already tried tar in the generic part.
|
||||
# Look for gnutar/gtar before invocation to avoid ugly error
|
||||
# messages.
|
||||
if (gnutar --version > /dev/null 2>&1); then
|
||||
gnutar ${1+"$@"} && exit 0
|
||||
fi
|
||||
if (gtar --version > /dev/null 2>&1); then
|
||||
gtar ${1+"$@"} && exit 0
|
||||
fi
|
||||
firstarg="$1"
|
||||
if shift; then
|
||||
case "$firstarg" in
|
||||
*o*)
|
||||
firstarg=`echo "$firstarg" | sed s/o//`
|
||||
tar "$firstarg" ${1+"$@"} && exit 0
|
||||
;;
|
||||
esac
|
||||
case "$firstarg" in
|
||||
*h*)
|
||||
firstarg=`echo "$firstarg" | sed s/h//`
|
||||
tar "$firstarg" ${1+"$@"} && exit 0
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
echo 1>&2 "\
|
||||
WARNING: I can't seem to be able to run \`tar' with the given arguments.
|
||||
You may want to install GNU tar or Free paxutils, or check the
|
||||
command line arguments."
|
||||
exit 1
|
||||
;;
|
||||
|
||||
*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is needed, and you do not seem to have it handy on your
|
||||
system. You might have modified some files without having the
|
||||
proper tools for further handling them. Check the \`README' file,
|
||||
it often tells you about the needed prerequirements for installing
|
||||
this package. You may also peek at any GNU archive site, in case
|
||||
some other package would contain this missing \`$1' program."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
40
mkinstalldirs
Executable file
40
mkinstalldirs
Executable file
@ -0,0 +1,40 @@
|
||||
#! /bin/sh
|
||||
# mkinstalldirs --- make directory hierarchy
|
||||
# Author: Noah Friedman <friedman@prep.ai.mit.edu>
|
||||
# Created: 1993-05-16
|
||||
# Public domain
|
||||
|
||||
# $Id: mkinstalldirs,v 1.1 2003/09/13 20:37:59 kapyar Exp $
|
||||
|
||||
errstatus=0
|
||||
|
||||
for file
|
||||
do
|
||||
set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
|
||||
shift
|
||||
|
||||
pathcomp=
|
||||
for d
|
||||
do
|
||||
pathcomp="$pathcomp$d"
|
||||
case "$pathcomp" in
|
||||
-* ) pathcomp=./$pathcomp ;;
|
||||
esac
|
||||
|
||||
if test ! -d "$pathcomp"; then
|
||||
echo "mkdir $pathcomp"
|
||||
|
||||
mkdir "$pathcomp" || lasterr=$?
|
||||
|
||||
if test ! -d "$pathcomp"; then
|
||||
errstatus=$lasterr
|
||||
fi
|
||||
fi
|
||||
|
||||
pathcomp="$pathcomp/"
|
||||
done
|
||||
done
|
||||
|
||||
exit $errstatus
|
||||
|
||||
# mkinstalldirs ends here
|
202
setup-gettext
Executable file
202
setup-gettext
Executable file
@ -0,0 +1,202 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# setup-gettext - Provides compatibility with versions of gettext
|
||||
# from the 0.10.x series and 0.11.x.
|
||||
#
|
||||
# Copyright (C) 2002 Christian Hammond.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License as
|
||||
# published by the Free Software Foundation; either version 2 of
|
||||
# the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public
|
||||
# License along with this program; if not, write to the Free
|
||||
# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
# MA 02111-1307 USA
|
||||
#
|
||||
|
||||
VERSION=0.1.3
|
||||
|
||||
VERBOSE=1
|
||||
|
||||
parse_gettext_version() {
|
||||
GETTEXT_VERSION=`$GETTEXT_TOOL --version | sed -n 's/^.*\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\).*$/\1.\2.\3/p'`
|
||||
GETTEXT_MAJOR_VERSION=`echo $GETTEXT_VERSION | sed -n 's/^\([0-9]\+\).*/\1/p'`
|
||||
GETTEXT_MINOR_VERSION=`echo $GETTEXT_VERSION | sed -n 's/^[0-9]\+\.\([0-9]\+\).*/\1/p'`
|
||||
GETTEXT_MICRO_VERSION=`echo $GETTEXT_VERSION | sed -n 's/^[0-9]\+\.[0-9]\+\.\([0-9]\+\).*/\1/p'`
|
||||
}
|
||||
|
||||
find_gettext() {
|
||||
GETTEXT_TOOL=autopoint
|
||||
|
||||
(autopoint --version) < /dev/null > /dev/null 2>&1 || {
|
||||
GETTEXT_TOOL=gettextize
|
||||
|
||||
(gettextize --version) < /dev/null > /dev/null 2>&1 || {
|
||||
GETTEXT_TOOL=
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
install() {
|
||||
[ -f configure.in ] && {
|
||||
cp configure.in .tmp-configure.in
|
||||
sed -e 's/^AM_GNU_GETTEXT\(.*\)$/AM_GNU_GETTEXT\1\
|
||||
AM_GNU_GETTEXT_VERSION(0.10.40)/' < .tmp-configure.in > configure.in
|
||||
rm .tmp-configure.in
|
||||
}
|
||||
|
||||
[ -f configure.ac ] && {
|
||||
cp configure.ac .tmp-configure.ac
|
||||
sed -e 's/^AM_GNU_GETTEXT\(.*\)$/AM_GNU_GETTEXT\1\
|
||||
AM_GNU_GETTEXT_VERSION(0.10.40)/' < .tmp-configure.ac > configure.ac
|
||||
rm .tmp-configure.ac
|
||||
}
|
||||
|
||||
[ -f autogen.sh ] && {
|
||||
cp autogen.sh .tmp-autogen.sh
|
||||
sed -e 's/\(gettextize\|autopoint\) --version/.\/setup-gettext --gettext-tool/1' -e 's/^\(echo.*|[\t ]*\)\?\(gettextize\|autopoint\) -.*$/.\/setup-gettext/1' < .tmp-autogen.sh > autogen.sh
|
||||
rm .tmp-autogen.sh
|
||||
}
|
||||
|
||||
echo 'AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])' >> acinclude.m4
|
||||
}
|
||||
|
||||
backup_m4() {
|
||||
[ -d m4 ] && mv m4 m4~
|
||||
}
|
||||
|
||||
restore_m4() {
|
||||
[ -d m4~ ] && {
|
||||
rm -rf m4
|
||||
mv m4~ m4
|
||||
}
|
||||
}
|
||||
|
||||
restore_files() {
|
||||
[ -f configure.in~ ] && mv -f configure.in~ configure.in
|
||||
[ -f configure.ac~ ] && mv -f configure.ac~ configure.ac
|
||||
[ -f Makefile.am~ ] && mv -f Makefile.am~ Makefile.am
|
||||
}
|
||||
|
||||
abort() {
|
||||
restore_files
|
||||
restore_m4
|
||||
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Main code
|
||||
|
||||
find_gettext
|
||||
|
||||
# See if a version of gettext and its tools are installed.
|
||||
if [ x$GETTEXT_TOOL = x ]; then
|
||||
echo
|
||||
echo "You do not have a version of gettext installed."
|
||||
echo "Please download one from your local package repository or"
|
||||
echo "from ftp://ftp.gnu.org/pub/gnu/gettext/"
|
||||
echo
|
||||
exit 1
|
||||
fi
|
||||
|
||||
parse_gettext_version
|
||||
|
||||
NUMVAR=$#
|
||||
|
||||
if [ $NUMVAR -gt 0 ]; then
|
||||
if [ $NUMVAR -gt 1 ]; then
|
||||
echo "Only one option at a time!"
|
||||
exit 1
|
||||
|
||||
elif [ $1 = "--gettext-tool" ]; then
|
||||
echo $GETTEXT_TOOL
|
||||
exit 0
|
||||
|
||||
elif [ $1 = "--help" ]; then
|
||||
echo "setup-gettext v$VERSION"
|
||||
echo "Usage:"
|
||||
echo " --gettext-tool Returns gettextize or autopoint, depending"
|
||||
echo " on the version of gettext installed."
|
||||
echo " --gettext-version Returns the version of gettext installed."
|
||||
echo " --gettext-major-version Returns the major version of gettext installed."
|
||||
echo " --gettext-minor-version Returns the minor version of gettext installed."
|
||||
echo " --gettext-micro-version Returns the micro version of gettext installed."
|
||||
echo " --help Displays this help screen."
|
||||
echo
|
||||
exit 0
|
||||
|
||||
elif [ $1 = "--version" ]; then
|
||||
echo $VERSION
|
||||
exit 0
|
||||
|
||||
elif [ $1 = "--gettext-version" ]; then
|
||||
echo $GETTEXT_VERSION
|
||||
exit 0
|
||||
|
||||
elif [ $1 = "--gettext-major-version" ]; then
|
||||
echo $GETTEXT_MAJOR_VERSION
|
||||
exit 0
|
||||
|
||||
elif [ $1 = "--gettext-minor-version" ]; then
|
||||
echo $GETTEXT_MINOR_VERSION
|
||||
exit 0
|
||||
|
||||
elif [ $1 = "--gettext-micro-version" ]; then
|
||||
echo $GETTEXT_MICRO_VERSION
|
||||
exit 0
|
||||
|
||||
elif [ $1 = "--install" ]; then
|
||||
install
|
||||
echo "setup-gettext installed."
|
||||
exit 0
|
||||
|
||||
elif [ $1 = "--happy-url" ]; then
|
||||
echo http://gaim.sf.net/forkgettext.jpg
|
||||
exit 0
|
||||
|
||||
elif [ $1 = "--verbose" ]; then
|
||||
VERBOSE=1
|
||||
|
||||
else
|
||||
echo "Invalid option '$1'"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Okay, run the main stuff
|
||||
if [ "$GETTEXT_TOOL" = "autopoint" ]; then
|
||||
backup_m4
|
||||
[ $VERBOSE -eq 1 ] && echo " autopoint --force"
|
||||
echo n | autopoint --force || abort
|
||||
restore_m4
|
||||
else
|
||||
if [ $GETTEXT_MINOR_VERSION -eq 11 ]; then
|
||||
backup_m4
|
||||
|
||||
# Gettext is pure evil. It DEMANDS that we press Return no matter
|
||||
# what. This gets rid of their happy "feature" of doom.
|
||||
[ $VERBOSE -eq 1 ] && \
|
||||
echo " gettextize --copy --force --intl --no-changelog"
|
||||
|
||||
sed 's:read .*< /dev/tty::' `which gettextize` > .temp-gettextize
|
||||
chmod +x .temp-gettextize
|
||||
echo n | ./.temp-gettextize --copy --force --intl --no-changelog || abort
|
||||
rm .temp-gettextize
|
||||
|
||||
restore_files
|
||||
restore_m4
|
||||
|
||||
[ -f po/Makevars.template ] && mv po/Makevars.template po/Makevars
|
||||
else
|
||||
[ $VERBOSE -eq 1 ] && echo " gettextize --copy --force"
|
||||
echo n | gettextize --copy --force || exit;
|
||||
fi
|
||||
fi
|
||||
|
1
src/.deps/cfg.Po
Normal file
1
src/.deps/cfg.Po
Normal file
@ -0,0 +1 @@
|
||||
# dummy
|
1
src/.deps/conn.Po
Normal file
1
src/.deps/conn.Po
Normal file
@ -0,0 +1 @@
|
||||
# dummy
|
1
src/.deps/crc16.Po
Normal file
1
src/.deps/crc16.Po
Normal file
@ -0,0 +1 @@
|
||||
# dummy
|
1
src/.deps/log.Po
Normal file
1
src/.deps/log.Po
Normal file
@ -0,0 +1 @@
|
||||
# dummy
|
1
src/.deps/main.Po
Normal file
1
src/.deps/main.Po
Normal file
@ -0,0 +1 @@
|
||||
# dummy
|
1
src/.deps/modbus.Po
Normal file
1
src/.deps/modbus.Po
Normal file
@ -0,0 +1 @@
|
||||
# dummy
|
1
src/.deps/queue.Po
Normal file
1
src/.deps/queue.Po
Normal file
@ -0,0 +1 @@
|
||||
# dummy
|
1
src/.deps/sig.Po
Normal file
1
src/.deps/sig.Po
Normal file
@ -0,0 +1 @@
|
||||
# dummy
|
1
src/.deps/sock.Po
Normal file
1
src/.deps/sock.Po
Normal file
@ -0,0 +1 @@
|
||||
# dummy
|
1
src/.deps/state.Po
Normal file
1
src/.deps/state.Po
Normal file
@ -0,0 +1 @@
|
||||
# dummy
|
1
src/.deps/tty.Po
Normal file
1
src/.deps/tty.Po
Normal file
@ -0,0 +1 @@
|
||||
# dummy
|
382
src/Makefile
Normal file
382
src/Makefile
Normal file
@ -0,0 +1,382 @@
|
||||
# Generated automatically from Makefile.in by configure.
|
||||
# Makefile.in generated automatically by automake 1.5 from Makefile.am.
|
||||
|
||||
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
|
||||
# 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.
|
||||
|
||||
|
||||
|
||||
SHELL = /bin/sh
|
||||
|
||||
srcdir = .
|
||||
top_srcdir = ..
|
||||
prefix = /usr/local
|
||||
exec_prefix = ${prefix}
|
||||
|
||||
bindir = ${exec_prefix}/bin
|
||||
sbindir = ${exec_prefix}/sbin
|
||||
libexecdir = ${exec_prefix}/libexec
|
||||
datadir = ${prefix}/share
|
||||
sysconfdir = ${prefix}/etc
|
||||
sharedstatedir = ${prefix}/com
|
||||
localstatedir = ${prefix}/var
|
||||
libdir = ${exec_prefix}/lib
|
||||
infodir = ${prefix}/info
|
||||
mandir = ${prefix}/man
|
||||
includedir = ${prefix}/include
|
||||
oldincludedir = /usr/include
|
||||
pkgdatadir = $(datadir)/mbusd
|
||||
pkglibdir = $(libdir)/mbusd
|
||||
pkgincludedir = $(includedir)/mbusd
|
||||
top_builddir = ..
|
||||
|
||||
ACLOCAL = ${SHELL} /usr/home/avm/work/mbus/missing --run aclocal
|
||||
AUTOCONF = ${SHELL} /usr/home/avm/work/mbus/missing --run autoconf
|
||||
AUTOMAKE = ${SHELL} /usr/home/avm/work/mbus/missing --run automake
|
||||
AUTOHEADER = ${SHELL} /usr/home/avm/work/mbus/missing --run autoheader
|
||||
|
||||
INSTALL = /usr/bin/install -c
|
||||
INSTALL_PROGRAM = ${INSTALL}
|
||||
INSTALL_DATA = ${INSTALL} -m 644
|
||||
INSTALL_SCRIPT = ${INSTALL_PROGRAM}
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = s,x,x,
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
host_alias = i386-unknown-freebsdelf4.8
|
||||
host_triplet = i386-unknown-freebsdelf4.8
|
||||
AMTAR = ${SHELL} /usr/home/avm/work/mbus/missing --run tar
|
||||
AS = @AS@
|
||||
AWK = gawk
|
||||
CC = gcc
|
||||
DEPDIR = .deps
|
||||
DLLTOOL = @DLLTOOL@
|
||||
EXEEXT =
|
||||
INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s
|
||||
LIBTOOL = $(SHELL) $(top_builddir)/libtool
|
||||
LN_S = ln -s
|
||||
NO_PREFIX_PACKAGE_DATA_DIR = share/mbusd
|
||||
NO_PREFIX_PACKAGE_DOC_DIR = doc/mbusd
|
||||
NO_PREFIX_PACKAGE_HELP_DIR = share/mbusd/help
|
||||
NO_PREFIX_PACKAGE_MENU_DIR = share/mbusd
|
||||
NO_PREFIX_PACKAGE_PIXMAPS_DIR = share/mbusd/pixmaps
|
||||
OBJDUMP = @OBJDUMP@
|
||||
OBJEXT = o
|
||||
PACKAGE = mbusd
|
||||
PACKAGE_DATA_DIR = /usr/local/share/mbusd
|
||||
PACKAGE_DOC_DIR = /usr/local/doc/mbusd
|
||||
PACKAGE_HELP_DIR = /usr/local/share/mbusd/help
|
||||
PACKAGE_MENU_DIR = /usr/local/share/mbusd
|
||||
PACKAGE_PIXMAPS_DIR = /usr/local/share/mbusd/pixmaps
|
||||
RANLIB = ranlib
|
||||
VERSION = 0.1.1
|
||||
am__include = include
|
||||
am__quote =
|
||||
install_sh = /usr/home/avm/work/mbus/install-sh
|
||||
|
||||
CFLAGS = \
|
||||
-W -pedantic\
|
||||
-Wall -O2
|
||||
|
||||
|
||||
bin_PROGRAMS = mbusd
|
||||
|
||||
mbusd_SOURCES = \
|
||||
main.c\
|
||||
tty.c\
|
||||
tty.h\
|
||||
globals.h\
|
||||
log.c\
|
||||
log.h\
|
||||
cfg.c\
|
||||
cfg.h\
|
||||
conn.c\
|
||||
conn.h\
|
||||
queue.c\
|
||||
queue.h\
|
||||
modbus.c\
|
||||
modbus.h\
|
||||
crc16.c\
|
||||
crc16.h\
|
||||
state.c\
|
||||
state.h\
|
||||
sig.h\
|
||||
sig.c\
|
||||
sock.h\
|
||||
sock.c
|
||||
|
||||
subdir = src
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
bin_PROGRAMS = mbusd$(EXEEXT)
|
||||
PROGRAMS = $(bin_PROGRAMS)
|
||||
|
||||
am_mbusd_OBJECTS = main.$(OBJEXT) tty.$(OBJEXT) log.$(OBJEXT) \
|
||||
cfg.$(OBJEXT) conn.$(OBJEXT) queue.$(OBJEXT) modbus.$(OBJEXT) \
|
||||
crc16.$(OBJEXT) state.$(OBJEXT) sig.$(OBJEXT) sock.$(OBJEXT)
|
||||
mbusd_OBJECTS = $(am_mbusd_OBJECTS)
|
||||
mbusd_LDADD = $(LDADD)
|
||||
mbusd_DEPENDENCIES =
|
||||
mbusd_LDFLAGS =
|
||||
|
||||
DEFS = -DHAVE_CONFIG_H
|
||||
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
|
||||
CPPFLAGS =
|
||||
LDFLAGS =
|
||||
LIBS = -lutil
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
DEP_FILES = $(DEPDIR)/cfg.Po $(DEPDIR)/conn.Po \
|
||||
$(DEPDIR)/crc16.Po $(DEPDIR)/log.Po \
|
||||
$(DEPDIR)/main.Po $(DEPDIR)/modbus.Po \
|
||||
$(DEPDIR)/queue.Po $(DEPDIR)/sig.Po \
|
||||
$(DEPDIR)/sock.Po $(DEPDIR)/state.Po \
|
||||
$(DEPDIR)/tty.Po
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \
|
||||
$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
CCLD = $(CC)
|
||||
LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
||||
$(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
DIST_SOURCES = $(mbusd_SOURCES)
|
||||
DIST_COMMON = Makefile.am Makefile.in
|
||||
SOURCES = $(mbusd_SOURCES)
|
||||
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .lo .o .obj
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu src/Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
cd $(top_builddir) && \
|
||||
CONFIG_HEADERS= CONFIG_LINKS= \
|
||||
CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
|
||||
install-binPROGRAMS: $(bin_PROGRAMS)
|
||||
@$(NORMAL_INSTALL)
|
||||
$(mkinstalldirs) $(DESTDIR)$(bindir)
|
||||
@list='$(bin_PROGRAMS)'; for p in $$list; do \
|
||||
p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
|
||||
if test -f $$p \
|
||||
|| test -f $$p1 \
|
||||
; then \
|
||||
f=`echo $$p1|sed '$(transform);s/$$/$(EXEEXT)/'`; \
|
||||
echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$f"; \
|
||||
$(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$f; \
|
||||
else :; fi; \
|
||||
done
|
||||
|
||||
uninstall-binPROGRAMS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(bin_PROGRAMS)'; for p in $$list; do \
|
||||
f=`echo $$p|sed 's/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
|
||||
echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
|
||||
rm -f $(DESTDIR)$(bindir)/$$f; \
|
||||
done
|
||||
|
||||
clean-binPROGRAMS:
|
||||
-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
|
||||
mbusd$(EXEEXT): $(mbusd_OBJECTS) $(mbusd_DEPENDENCIES)
|
||||
@rm -f mbusd$(EXEEXT)
|
||||
$(LINK) $(mbusd_LDFLAGS) $(mbusd_OBJECTS) $(mbusd_LDADD) $(LIBS)
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT) core *.core
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
include $(DEPDIR)/cfg.Po
|
||||
include $(DEPDIR)/conn.Po
|
||||
include $(DEPDIR)/crc16.Po
|
||||
include $(DEPDIR)/log.Po
|
||||
include $(DEPDIR)/main.Po
|
||||
include $(DEPDIR)/modbus.Po
|
||||
include $(DEPDIR)/queue.Po
|
||||
include $(DEPDIR)/sig.Po
|
||||
include $(DEPDIR)/sock.Po
|
||||
include $(DEPDIR)/state.Po
|
||||
include $(DEPDIR)/tty.Po
|
||||
|
||||
distclean-depend:
|
||||
-rm -rf $(DEPDIR)
|
||||
|
||||
.c.o:
|
||||
source='$<' object='$@' libtool=no \
|
||||
depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' \
|
||||
$(CCDEPMODE) $(depcomp) \
|
||||
$(COMPILE) -c `test -f $< || echo '$(srcdir)/'`$<
|
||||
|
||||
.c.obj:
|
||||
source='$<' object='$@' libtool=no \
|
||||
depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' \
|
||||
$(CCDEPMODE) $(depcomp) \
|
||||
$(COMPILE) -c `cygpath -w $<`
|
||||
|
||||
.c.lo:
|
||||
source='$<' object='$@' libtool=yes \
|
||||
depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' \
|
||||
$(CCDEPMODE) $(depcomp) \
|
||||
$(LTCOMPILE) -c -o $@ `test -f $< || echo '$(srcdir)/'`$<
|
||||
CCDEPMODE = depmode=gcc
|
||||
uninstall-info-am:
|
||||
|
||||
tags: TAGS
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique $(LISP)
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
|
||||
|| etags $(ETAGS_ARGS) $$tags $$unique $(LISP)
|
||||
|
||||
GTAGS:
|
||||
here=`CDPATH=: && cd $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
|
||||
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
top_distdir = ..
|
||||
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@for file in $(DISTFILES); do \
|
||||
if test -f $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
$(mkinstalldirs) "$(distdir)/$$dir"; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
cp -pR $$d/$$file $(distdir) \
|
||||
|| 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:
|
||||
$(mkinstalldirs) $(DESTDIR)$(bindir)
|
||||
|
||||
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)" \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
|
||||
distclean-am: clean-am distclean-compile distclean-depend \
|
||||
distclean-generic distclean-libtool distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-exec-am: install-binPROGRAMS
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
|
||||
mostlyclean-libtool
|
||||
|
||||
uninstall-am: uninstall-binPROGRAMS uninstall-info-am
|
||||
|
||||
.PHONY: GTAGS all all-am check check-am clean clean-binPROGRAMS \
|
||||
clean-generic clean-libtool distclean distclean-compile \
|
||||
distclean-depend distclean-generic distclean-libtool \
|
||||
distclean-tags distdir dvi dvi-am info info-am install \
|
||||
install-am install-binPROGRAMS install-data install-data-am \
|
||||
install-exec install-exec-am install-info install-info-am \
|
||||
install-man install-strip installcheck installcheck-am \
|
||||
installdirs maintainer-clean maintainer-clean-generic \
|
||||
mostlyclean mostlyclean-compile mostlyclean-generic \
|
||||
mostlyclean-libtool tags uninstall uninstall-am \
|
||||
uninstall-binPROGRAMS uninstall-info-am
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
31
src/Makefile.am
Normal file
31
src/Makefile.am
Normal file
@ -0,0 +1,31 @@
|
||||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
CFLAGS =\
|
||||
-W -pedantic\
|
||||
-Wall -O2
|
||||
|
||||
bin_PROGRAMS = mbusd
|
||||
|
||||
mbusd_SOURCES = \
|
||||
main.c\
|
||||
tty.c\
|
||||
tty.h\
|
||||
globals.h\
|
||||
log.c\
|
||||
log.h\
|
||||
cfg.c\
|
||||
cfg.h\
|
||||
conn.c\
|
||||
conn.h\
|
||||
queue.c\
|
||||
queue.h\
|
||||
modbus.c\
|
||||
modbus.h\
|
||||
crc16.c\
|
||||
crc16.h\
|
||||
state.c\
|
||||
state.h\
|
||||
sig.h\
|
||||
sig.c\
|
||||
sock.h\
|
||||
sock.c
|
382
src/Makefile.in
Normal file
382
src/Makefile.in
Normal file
@ -0,0 +1,382 @@
|
||||
# Makefile.in generated automatically by automake 1.5 from Makefile.am.
|
||||
|
||||
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
|
||||
# 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@
|
||||
|
||||
SHELL = @SHELL@
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
prefix = @prefix@
|
||||
exec_prefix = @exec_prefix@
|
||||
|
||||
bindir = @bindir@
|
||||
sbindir = @sbindir@
|
||||
libexecdir = @libexecdir@
|
||||
datadir = @datadir@
|
||||
sysconfdir = @sysconfdir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
localstatedir = @localstatedir@
|
||||
libdir = @libdir@
|
||||
infodir = @infodir@
|
||||
mandir = @mandir@
|
||||
includedir = @includedir@
|
||||
oldincludedir = /usr/include
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ..
|
||||
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = @program_transform_name@
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
host_alias = @host_alias@
|
||||
host_triplet = @host@
|
||||
AMTAR = @AMTAR@
|
||||
AS = @AS@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
EXEEXT = @EXEEXT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LN_S = @LN_S@
|
||||
NO_PREFIX_PACKAGE_DATA_DIR = @NO_PREFIX_PACKAGE_DATA_DIR@
|
||||
NO_PREFIX_PACKAGE_DOC_DIR = @NO_PREFIX_PACKAGE_DOC_DIR@
|
||||
NO_PREFIX_PACKAGE_HELP_DIR = @NO_PREFIX_PACKAGE_HELP_DIR@
|
||||
NO_PREFIX_PACKAGE_MENU_DIR = @NO_PREFIX_PACKAGE_MENU_DIR@
|
||||
NO_PREFIX_PACKAGE_PIXMAPS_DIR = @NO_PREFIX_PACKAGE_PIXMAPS_DIR@
|
||||
OBJDUMP = @OBJDUMP@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_DATA_DIR = @PACKAGE_DATA_DIR@
|
||||
PACKAGE_DOC_DIR = @PACKAGE_DOC_DIR@
|
||||
PACKAGE_HELP_DIR = @PACKAGE_HELP_DIR@
|
||||
PACKAGE_MENU_DIR = @PACKAGE_MENU_DIR@
|
||||
PACKAGE_PIXMAPS_DIR = @PACKAGE_PIXMAPS_DIR@
|
||||
RANLIB = @RANLIB@
|
||||
VERSION = @VERSION@
|
||||
am__include = @am__include@
|
||||
am__quote = @am__quote@
|
||||
install_sh = @install_sh@
|
||||
|
||||
CFLAGS = \
|
||||
-W -pedantic\
|
||||
-Wall -O2
|
||||
|
||||
|
||||
bin_PROGRAMS = mbusd
|
||||
|
||||
mbusd_SOURCES = \
|
||||
main.c\
|
||||
tty.c\
|
||||
tty.h\
|
||||
globals.h\
|
||||
log.c\
|
||||
log.h\
|
||||
cfg.c\
|
||||
cfg.h\
|
||||
conn.c\
|
||||
conn.h\
|
||||
queue.c\
|
||||
queue.h\
|
||||
modbus.c\
|
||||
modbus.h\
|
||||
crc16.c\
|
||||
crc16.h\
|
||||
state.c\
|
||||
state.h\
|
||||
sig.h\
|
||||
sig.c\
|
||||
sock.h\
|
||||
sock.c
|
||||
|
||||
subdir = src
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
bin_PROGRAMS = mbusd$(EXEEXT)
|
||||
PROGRAMS = $(bin_PROGRAMS)
|
||||
|
||||
am_mbusd_OBJECTS = main.$(OBJEXT) tty.$(OBJEXT) log.$(OBJEXT) \
|
||||
cfg.$(OBJEXT) conn.$(OBJEXT) queue.$(OBJEXT) modbus.$(OBJEXT) \
|
||||
crc16.$(OBJEXT) state.$(OBJEXT) sig.$(OBJEXT) sock.$(OBJEXT)
|
||||
mbusd_OBJECTS = $(am_mbusd_OBJECTS)
|
||||
mbusd_LDADD = $(LDADD)
|
||||
mbusd_DEPENDENCIES =
|
||||
mbusd_LDFLAGS =
|
||||
|
||||
DEFS = @DEFS@
|
||||
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBS = @LIBS@
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
@AMDEP_TRUE@DEP_FILES = $(DEPDIR)/cfg.Po $(DEPDIR)/conn.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/crc16.Po $(DEPDIR)/log.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/main.Po $(DEPDIR)/modbus.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/queue.Po $(DEPDIR)/sig.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/sock.Po $(DEPDIR)/state.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/tty.Po
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \
|
||||
$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
CCLD = $(CC)
|
||||
LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
||||
$(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
DIST_SOURCES = $(mbusd_SOURCES)
|
||||
DIST_COMMON = Makefile.am Makefile.in
|
||||
SOURCES = $(mbusd_SOURCES)
|
||||
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .lo .o .obj
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu src/Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
cd $(top_builddir) && \
|
||||
CONFIG_HEADERS= CONFIG_LINKS= \
|
||||
CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
|
||||
install-binPROGRAMS: $(bin_PROGRAMS)
|
||||
@$(NORMAL_INSTALL)
|
||||
$(mkinstalldirs) $(DESTDIR)$(bindir)
|
||||
@list='$(bin_PROGRAMS)'; for p in $$list; do \
|
||||
p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
|
||||
if test -f $$p \
|
||||
|| test -f $$p1 \
|
||||
; then \
|
||||
f=`echo $$p1|sed '$(transform);s/$$/$(EXEEXT)/'`; \
|
||||
echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$f"; \
|
||||
$(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$f; \
|
||||
else :; fi; \
|
||||
done
|
||||
|
||||
uninstall-binPROGRAMS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(bin_PROGRAMS)'; for p in $$list; do \
|
||||
f=`echo $$p|sed 's/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
|
||||
echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
|
||||
rm -f $(DESTDIR)$(bindir)/$$f; \
|
||||
done
|
||||
|
||||
clean-binPROGRAMS:
|
||||
-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
|
||||
mbusd$(EXEEXT): $(mbusd_OBJECTS) $(mbusd_DEPENDENCIES)
|
||||
@rm -f mbusd$(EXEEXT)
|
||||
$(LINK) $(mbusd_LDFLAGS) $(mbusd_OBJECTS) $(mbusd_LDADD) $(LIBS)
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT) core *.core
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/cfg.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/conn.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/crc16.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/log.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/main.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/modbus.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/queue.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/sig.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/sock.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/state.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/tty.Po@am__quote@
|
||||
|
||||
distclean-depend:
|
||||
-rm -rf $(DEPDIR)
|
||||
|
||||
.c.o:
|
||||
@AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(COMPILE) -c `test -f $< || echo '$(srcdir)/'`$<
|
||||
|
||||
.c.obj:
|
||||
@AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(COMPILE) -c `cygpath -w $<`
|
||||
|
||||
.c.lo:
|
||||
@AMDEP_TRUE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(LTCOMPILE) -c -o $@ `test -f $< || echo '$(srcdir)/'`$<
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
uninstall-info-am:
|
||||
|
||||
tags: TAGS
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique $(LISP)
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
|
||||
|| etags $(ETAGS_ARGS) $$tags $$unique $(LISP)
|
||||
|
||||
GTAGS:
|
||||
here=`CDPATH=: && cd $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
|
||||
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
top_distdir = ..
|
||||
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@for file in $(DISTFILES); do \
|
||||
if test -f $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
$(mkinstalldirs) "$(distdir)/$$dir"; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
cp -pR $$d/$$file $(distdir) \
|
||||
|| 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:
|
||||
$(mkinstalldirs) $(DESTDIR)$(bindir)
|
||||
|
||||
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)" \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
|
||||
distclean-am: clean-am distclean-compile distclean-depend \
|
||||
distclean-generic distclean-libtool distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-exec-am: install-binPROGRAMS
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
|
||||
mostlyclean-libtool
|
||||
|
||||
uninstall-am: uninstall-binPROGRAMS uninstall-info-am
|
||||
|
||||
.PHONY: GTAGS all all-am check check-am clean clean-binPROGRAMS \
|
||||
clean-generic clean-libtool distclean distclean-compile \
|
||||
distclean-depend distclean-generic distclean-libtool \
|
||||
distclean-tags distdir dvi dvi-am info info-am install \
|
||||
install-am install-binPROGRAMS install-data install-data-am \
|
||||
install-exec install-exec-am install-info install-info-am \
|
||||
install-man install-strip installcheck installcheck-am \
|
||||
installdirs maintainer-clean maintainer-clean-generic \
|
||||
mostlyclean mostlyclean-compile mostlyclean-generic \
|
||||
mostlyclean-libtool tags uninstall uninstall-am \
|
||||
uninstall-binPROGRAMS uninstall-info-am
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
61
src/cfg.c
Normal file
61
src/cfg.c
Normal file
@ -0,0 +1,61 @@
|
||||
/*
|
||||
* OpenMODBUS/TCP to RS-232/485 MODBUS RTU gateway
|
||||
*
|
||||
* cfg.c - configuration related procedures
|
||||
*
|
||||
* Copyright (c) 2002-2003, Victor Antonovich (avmlink@vlink.ru)
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: cfg.c,v 1.1 2003/09/13 20:38:11 kapyar Exp $
|
||||
*/
|
||||
|
||||
#include "cfg.h"
|
||||
|
||||
/* Global configuration storage variable */
|
||||
cfg_t cfg;
|
||||
|
||||
/*
|
||||
* Setting up config defaults
|
||||
*/
|
||||
void
|
||||
cfg_init(void)
|
||||
{
|
||||
#ifdef LOG
|
||||
cfg.dbglvl = 2;
|
||||
strncpy(cfg.logname, LOGNAME, INTBUFSIZE);
|
||||
#endif
|
||||
strncpy(cfg.ttyport, DEFAULT_PORT, INTBUFSIZE);
|
||||
cfg.ttyspeed = DEFAULT_SPEED;
|
||||
#ifdef TRXCTL
|
||||
cfg.trxcntl = TRX_ADDC;
|
||||
#endif
|
||||
cfg.serverport = DEFAULT_SERVERPORT;
|
||||
cfg.maxconn = DEFAULT_MAXCONN;
|
||||
cfg.maxtry = DEFAULT_MAXTRY;
|
||||
cfg.rqstpause = DEFAULT_RQSTPAUSE;
|
||||
cfg.respwait = DEFAULT_RESPWAIT;
|
||||
cfg.resppause = DV(3, cfg.ttyspeed);
|
||||
cfg.conntimeout = DEFAULT_CONNTIMEOUT;
|
||||
}
|
77
src/cfg.h
Normal file
77
src/cfg.h
Normal file
@ -0,0 +1,77 @@
|
||||
/*
|
||||
* OpenMODBUS/TCP to RS-232/485 MODBUS RTU gateway
|
||||
*
|
||||
* cfg.h - configuration related procedures
|
||||
*
|
||||
* Copyright (c) 2002-2003, Victor Antonovich (avmlink@vlink.ru)
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: cfg.h,v 1.1 2003/09/13 20:38:16 kapyar Exp $
|
||||
*/
|
||||
|
||||
#ifndef _CFG_H
|
||||
#define _CFG_H
|
||||
|
||||
#include "globals.h"
|
||||
#include "log.h"
|
||||
#include "tty.h"
|
||||
#include "conn.h"
|
||||
|
||||
/* Global configuration storage structure */
|
||||
typedef struct
|
||||
{
|
||||
#ifdef LOG
|
||||
/* debug level */
|
||||
char dbglvl;
|
||||
/* log file name */
|
||||
char logname[INTBUFSIZE + 1];
|
||||
#endif
|
||||
/* tty port name */
|
||||
char ttyport[INTBUFSIZE + 1];
|
||||
/* tty speed */
|
||||
int ttyspeed;
|
||||
/* trx control type (0 - ADDC, 1 - by RTS) */
|
||||
int trxcntl;
|
||||
/* TCP server port number */
|
||||
int serverport;
|
||||
/* maximum number of connections */
|
||||
int maxconn;
|
||||
/* number of tries of request in case timeout (0 - no tries attempted) */
|
||||
int maxtry;
|
||||
/* staled connection timeout (in sec) */
|
||||
int conntimeout;
|
||||
/* inter-request pause (in msec) */
|
||||
unsigned long rqstpause;
|
||||
/* response waiting time (in msec) */
|
||||
unsigned long respwait;
|
||||
/* inter-byte response pause (in usec) */
|
||||
unsigned long resppause;
|
||||
} cfg_t;
|
||||
|
||||
/* Prototypes */
|
||||
extern cfg_t cfg;
|
||||
void cfg_init(void);
|
||||
|
||||
#endif /* _CFG_H */
|
585
src/conn.c
Normal file
585
src/conn.c
Normal file
@ -0,0 +1,585 @@
|
||||
/*
|
||||
* OpenMODBUS/TCP to RS-232/485 MODBUS RTU gateway
|
||||
*
|
||||
* conn.c - connections management procedures
|
||||
*
|
||||
* Copyright (c) 2002-2003, Victor Antonovich (avmlink@vlink.ru)
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: conn.c,v 1.1 2003/09/13 20:38:33 kapyar Exp $
|
||||
*/
|
||||
|
||||
#include "conn.h"
|
||||
#include "queue.h"
|
||||
#include "state.h"
|
||||
|
||||
/* global variables */
|
||||
extern int server_sd;
|
||||
extern queue_t queue;
|
||||
extern ttydata_t tty;
|
||||
extern cfg_t cfg;
|
||||
|
||||
conn_t *actconn; /* last active connection */
|
||||
int max_sd; /* major descriptor in the select() sets */
|
||||
|
||||
void conn_tty_start(ttydata_t *tty, conn_t *conn);
|
||||
ssize_t conn_read(int d, void *buf, size_t nbytes);
|
||||
ssize_t conn_write(int d, void *buf, size_t nbytes);
|
||||
int conn_select(int nfds,
|
||||
fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
|
||||
struct timeval *timeout);
|
||||
|
||||
#define FD_MSET(d, s) do { FD_SET(d, s); max_sd = MAX(d, max_sd); } while (0);
|
||||
|
||||
/*
|
||||
* Connections startup initialization
|
||||
* Parameters: none
|
||||
* Return: RC_OK in case of success, RC_ERR otherwise
|
||||
*/
|
||||
int
|
||||
conn_init(void)
|
||||
{
|
||||
/* tty device initialization */
|
||||
#ifdef TRXCTL
|
||||
tty_init(&tty, cfg.ttyport, cfg.ttyspeed, cfg.trxcntl);
|
||||
#else
|
||||
tty_init(&tty, cfg.ttyport, cfg.ttyspeed);
|
||||
#endif
|
||||
if (tty_open(&tty) != RC_OK)
|
||||
{
|
||||
#ifdef LOG
|
||||
log(0, "conn_init():"
|
||||
" can't open tty device %s (%s)",
|
||||
cfg.ttyport, strerror(errno));
|
||||
#endif
|
||||
return RC_ERR;
|
||||
}
|
||||
state_tty_set(&tty, TTY_READY);
|
||||
|
||||
/* create server socket */
|
||||
if ((server_sd =
|
||||
sock_create_server("", cfg.serverport, TRUE)) < 0)
|
||||
{
|
||||
#ifdef LOG
|
||||
log(0, "conn_init():"
|
||||
" can't create listen() socket (%s)",
|
||||
strerror(errno));
|
||||
#endif
|
||||
return RC_ERR;
|
||||
}
|
||||
|
||||
/* connections queue initialization */
|
||||
queue_init(&queue);
|
||||
|
||||
return RC_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* Open new client connection
|
||||
* Parameters: none
|
||||
* Return: none
|
||||
*/
|
||||
void
|
||||
conn_open(void)
|
||||
{
|
||||
int sd;
|
||||
conn_t *newconn;
|
||||
struct sockaddr_in rmt_addr;
|
||||
|
||||
if ((sd = sock_accept(server_sd, &rmt_addr, TRUE)) == RC_ERR)
|
||||
{ /* error in conn_accept() */
|
||||
#ifdef LOG
|
||||
log(0, "conn_open(): error in accept() (%s)", strerror(errno));
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
#ifdef LOG
|
||||
log(2, "conn_open(): accepting connection from %s",
|
||||
inet_ntoa(rmt_addr.sin_addr));
|
||||
#endif
|
||||
/* compare descriptor of connection with FD_SETSIZE */
|
||||
if (sd >= FD_SETSIZE)
|
||||
{
|
||||
#ifdef LOG
|
||||
log(1, "conn_open(): FD_SETSIZE limit reached,"
|
||||
" connection from %s will be dropped",
|
||||
inet_ntoa(rmt_addr.sin_addr));
|
||||
#endif
|
||||
close(sd);
|
||||
return;
|
||||
}
|
||||
/* check current number of connections */
|
||||
if (queue.len == cfg.maxconn)
|
||||
{
|
||||
#ifdef LOG
|
||||
log(1, "conn_open(): number of connections limit reached,"
|
||||
" connection from %s will be dropped",
|
||||
inet_ntoa(rmt_addr.sin_addr));
|
||||
#endif
|
||||
close(sd);
|
||||
return;
|
||||
}
|
||||
/* enqueue connection */
|
||||
newconn = queue_new_elem(&queue);
|
||||
newconn->sd = sd;
|
||||
memcpy((void *) &newconn->sockaddr,
|
||||
&rmt_addr, sizeof(struct sockaddr_in));
|
||||
state_conn_set(newconn, CONN_HEADER);
|
||||
}
|
||||
|
||||
/*
|
||||
* Close client connection
|
||||
* Parameters: CONN - ptr to connection to close
|
||||
* Return: pointer to next queue element
|
||||
*/
|
||||
conn_t *
|
||||
conn_close(conn_t *conn)
|
||||
{
|
||||
conn_t *nextconn;
|
||||
#ifdef LOG
|
||||
log(2, "conn_close(): closing connection from %s",
|
||||
inet_ntoa(conn->sockaddr.sin_addr));
|
||||
#endif
|
||||
/* close socket */
|
||||
close(conn->sd);
|
||||
/* get pointer to next element */
|
||||
nextconn = queue_next_elem(&queue, conn);
|
||||
/* dequeue connection */
|
||||
queue_delete_elem(&queue, conn);
|
||||
if (actconn == conn) actconn = nextconn;
|
||||
return nextconn;
|
||||
}
|
||||
|
||||
/*
|
||||
* Start tty transaction
|
||||
* Parameters: TTY - ptr to tty structure,
|
||||
* CONN - ptr to active connection
|
||||
* Return: none
|
||||
*/
|
||||
void
|
||||
conn_tty_start(ttydata_t *tty, conn_t *conn)
|
||||
{
|
||||
(void)memcpy((void *)tty->txbuf,
|
||||
(void *)(conn->buf + HDRSIZE),
|
||||
MB_HDR(conn->buf, MB_LENGTH_L));
|
||||
modbus_crc_write(tty->txbuf, MB_HDR(conn->buf, MB_LENGTH_L));
|
||||
tty->txlen = MB_HDR(conn->buf, MB_LENGTH_L) + CRCSIZE;
|
||||
state_tty_set(tty, TTY_RQST);
|
||||
actconn = conn;
|
||||
}
|
||||
|
||||
/*
|
||||
* Read() wrapper. Read nomore BYTES from descriptor D in buffer BUF
|
||||
* Return: number of successfully readed bytes,
|
||||
* RC_ERR in case of error.
|
||||
*/
|
||||
ssize_t
|
||||
conn_read(int d, void *buf, size_t nbytes)
|
||||
{
|
||||
int rc;
|
||||
do
|
||||
{ /* trying read from descriptor while breaked by signals */
|
||||
rc = read(d, buf, nbytes);
|
||||
} while (rc == -1 && errno == EINTR);
|
||||
return (rc < 0) ? RC_ERR : rc;
|
||||
}
|
||||
|
||||
/*
|
||||
* Write() wrapper. Write nomore BYTES to descriptor D from buffer BUF
|
||||
* Return: number of successfully written bytes,
|
||||
* RC_ERR in case of error.
|
||||
*/
|
||||
ssize_t
|
||||
conn_write(int d, void *buf, size_t nbytes)
|
||||
{
|
||||
int rc;
|
||||
do
|
||||
{ /* trying write to descriptor while breaked by signals */
|
||||
rc = write(d, buf, nbytes);
|
||||
} while (rc == -1 && errno == EINTR);
|
||||
return (rc < 0) ? RC_ERR : rc;
|
||||
}
|
||||
|
||||
#if 0
|
||||
/*
|
||||
* Select() wrapper with signal checking.
|
||||
* Return: number number of ready descriptors,
|
||||
* RC_ERR in case of error.
|
||||
*/
|
||||
int
|
||||
conn_select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
|
||||
struct timeval *timeout)
|
||||
{
|
||||
int rc;
|
||||
do
|
||||
{ /* trying to select() while breaked by signals */
|
||||
rc = select(nfds, readfds, writefds, exceptfds, timeout);
|
||||
} while (rc == -1 && errno == EINTR);
|
||||
return (rc < 0) ? RC_ERR : rc;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Connections serving loop
|
||||
* Parameters: none
|
||||
* Return: none
|
||||
*/
|
||||
void
|
||||
conn_loop(void)
|
||||
{
|
||||
int rc, max_sd, len, min_timeout;
|
||||
fd_set sdsetrd, sdsetwr;
|
||||
struct timeval ts, tts, t_out;
|
||||
unsigned long tval, tout_sec, tout = 0ul;
|
||||
conn_t *curconn = NULL;
|
||||
|
||||
while (TRUE)
|
||||
{
|
||||
/* check for the signals */
|
||||
if (sig_flag) sig_exec();
|
||||
|
||||
/* update FD_SETs */
|
||||
FD_ZERO(&sdsetrd);
|
||||
max_sd = server_sd;
|
||||
FD_MSET(server_sd, &sdsetrd);
|
||||
FD_ZERO(&sdsetwr);
|
||||
|
||||
/* update FD_SETs by TCP connections */
|
||||
len = queue.len;
|
||||
curconn = queue.beg;
|
||||
min_timeout = cfg.conntimeout;
|
||||
while (len--)
|
||||
{
|
||||
switch (curconn->state)
|
||||
{
|
||||
case CONN_HEADER:
|
||||
case CONN_RQST:
|
||||
FD_MSET(curconn->sd, &sdsetrd);
|
||||
break;
|
||||
case CONN_RESP:
|
||||
FD_MSET(curconn->sd, &sdsetwr);
|
||||
break;
|
||||
}
|
||||
min_timeout = MIN(min_timeout, curconn->timeout);
|
||||
curconn = queue_next_elem(&queue, curconn);
|
||||
}
|
||||
|
||||
/* update FD_SETs by tty connection */
|
||||
FD_MSET(tty.fd, &sdsetrd);
|
||||
if (tty.state == TTY_RQST) FD_MSET(tty.fd, &sdsetwr);
|
||||
|
||||
if (tty.timer)
|
||||
{ /* tty.timer is non-zero in TTY_PAUSE, TTY_RESP states */
|
||||
t_out.tv_sec = tty.timer / 1000000ul;
|
||||
t_out.tv_usec = tty.timer % 1000000ul;
|
||||
}
|
||||
else
|
||||
{
|
||||
t_out.tv_usec = 0ul;
|
||||
if (cfg.conntimeout)
|
||||
t_out.tv_sec = min_timeout; /* minor timeout value */
|
||||
else
|
||||
t_out.tv_sec = 10ul; /* XXX default timeout value */
|
||||
}
|
||||
|
||||
(void)gettimeofday(&ts, NULL); /* make timestamp */
|
||||
|
||||
#ifdef DEBUG
|
||||
log(7, "conn_loop(): select(): max_sd = %d, t_out = %06lu:%06lu ",
|
||||
max_sd, t_out.tv_sec, t_out.tv_usec);
|
||||
#endif
|
||||
|
||||
rc = select(max_sd + 1, &sdsetrd, &sdsetwr, NULL, &t_out);
|
||||
|
||||
if (rc < 0)
|
||||
{ /* some error caused while select() */
|
||||
if (errno == EINTR) continue; /* process signals */
|
||||
/* unrecoverable error in select(), exiting */
|
||||
#ifdef LOG
|
||||
log(0, "conn_loop(): error in select() (%s)", strerror(errno));
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
|
||||
/* calculating elapsed time */
|
||||
(void)gettimeofday(&tts, NULL);
|
||||
tval = 1000000ul * (tts.tv_sec - ts.tv_sec) +
|
||||
(tts.tv_usec - ts.tv_usec);
|
||||
|
||||
/* modify tty timer */
|
||||
if (tty.timer)
|
||||
{ /* tty timer is active */
|
||||
if (tty.timer <= tval)
|
||||
switch (tty.state)
|
||||
{ /* timer expired */
|
||||
case TTY_PAUSE:
|
||||
/* inter-request pause elapsed */
|
||||
/* looking for connections in CONN_TTY state */
|
||||
curconn = state_conn_search(&queue, actconn, CONN_TTY);
|
||||
if (curconn != NULL)
|
||||
conn_tty_start(&tty, curconn);
|
||||
else
|
||||
state_tty_set(&tty, TTY_READY);
|
||||
break;
|
||||
case TTY_RESP:
|
||||
/* checking for received data */
|
||||
if (FD_ISSET(tty.fd, &sdsetrd)) break;
|
||||
/* response timeout handling */
|
||||
if (!tty.ptrbuf)
|
||||
{/* there no bytes received */
|
||||
#ifdef DEBUG
|
||||
log(5, "tty: response timeout", tty.ptrbuf);
|
||||
#endif
|
||||
if (!tty.trynum)
|
||||
modbus_ex_write(actconn->buf, MB_EX_TIMEOUT);
|
||||
else
|
||||
{ /* retry request */
|
||||
#ifdef DEBUG
|
||||
log(5, "tty: attempt to retry request (%u of %u)",
|
||||
cfg.maxtry - tty.trynum + 1, cfg.maxtry);
|
||||
#endif
|
||||
state_tty_set(&tty, TTY_RQST);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{ /* some data received */
|
||||
#ifdef DEBUG
|
||||
log(5, "tty: response readed (total %d bytes)", tty.ptrbuf);
|
||||
#endif
|
||||
if (tty.ptrbuf >= MB_MIN_LEN &&
|
||||
modbus_crc_correct(tty.rxbuf, tty.ptrbuf))
|
||||
{ /* received response is correct, make OpenMODBUS response */
|
||||
#ifdef DEBUG
|
||||
log(5, "tty: response is correct");
|
||||
#endif
|
||||
(void)memcpy((void *)(actconn->buf + HDRSIZE),
|
||||
(void *)tty.rxbuf, tty.ptrbuf - CRCSIZE);
|
||||
WORD_WR_BE(actconn->buf + MB_LENGTH_H, tty.ptrbuf - CRCSIZE);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* received response is incomplete or CRC failed */
|
||||
#ifdef DEBUG
|
||||
log(5, "tty: response is incorrect");
|
||||
#endif
|
||||
if (!tty.trynum)
|
||||
modbus_ex_write(actconn->buf, MB_EX_CRC);
|
||||
else
|
||||
{ /* retry request */
|
||||
#ifdef DEBUG
|
||||
log(5, "tty: attempt to retry request (%u of %u)",
|
||||
cfg.maxtry - tty.trynum + 1, cfg.maxtry);
|
||||
#endif
|
||||
state_tty_set(&tty, TTY_RQST);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* switch connection to response state */
|
||||
state_conn_set(actconn, CONN_RESP);
|
||||
/* make inter-request pause */
|
||||
state_tty_set(&tty, TTY_PAUSE);
|
||||
break;
|
||||
}
|
||||
else tty.timer -= tval;
|
||||
}
|
||||
|
||||
if (cfg.conntimeout)
|
||||
{ /* expire staled connections */
|
||||
tout += tval;
|
||||
tout_sec = tout / 1000000ul;
|
||||
if (tout_sec)
|
||||
{ /* at least one second elapsed, check for staled connections */
|
||||
len = queue.len;
|
||||
curconn = queue.beg;
|
||||
while (len--)
|
||||
{
|
||||
curconn->timeout -= tout_sec;
|
||||
if (curconn->timeout <= 0)
|
||||
{ /* timeout expired */
|
||||
if (curconn->state == CONN_TTY)
|
||||
{ /* deadlock in CONN_TTY state, exiting */
|
||||
#ifdef LOG
|
||||
log(0, "conn[%s]: state CONN_TTY deadlock, exiting!",
|
||||
inet_ntoa(curconn->sockaddr.sin_addr));
|
||||
#endif
|
||||
exit (-1);
|
||||
}
|
||||
/* purge connection */
|
||||
#ifdef LOG
|
||||
log(2, "conn[%s]: timeout, closing connection",
|
||||
inet_ntoa(curconn->sockaddr.sin_addr));
|
||||
#endif
|
||||
curconn = conn_close(curconn);
|
||||
continue;
|
||||
}
|
||||
curconn = queue_next_elem(&queue, curconn);
|
||||
}
|
||||
tout = tout % 1000000ul;
|
||||
}
|
||||
}
|
||||
|
||||
if (rc == 0)
|
||||
continue; /* timeout caused, we will do select() again */
|
||||
|
||||
/* checking for pending connections */
|
||||
if (FD_ISSET(server_sd, &sdsetrd)) conn_open();
|
||||
|
||||
/* tty processing */
|
||||
if (tty.state == TTY_RQST)
|
||||
if (FD_ISSET(tty.fd, &sdsetwr))
|
||||
{
|
||||
rc = conn_write(tty.fd, tty.txbuf + tty.ptrbuf,
|
||||
tty.txlen - tty.ptrbuf);
|
||||
if (rc <= 0)
|
||||
{ /* error - we can't continue... */
|
||||
#ifdef LOG
|
||||
log(0, "tty: error in write() (%s)", strerror(errno));
|
||||
#endif
|
||||
break; /* exiting... */
|
||||
}
|
||||
#ifdef DEBUG
|
||||
log(7, "tty: written %d bytes", rc);
|
||||
#endif
|
||||
tty.ptrbuf += rc;
|
||||
if (tty.ptrbuf == tty.txlen)
|
||||
{ /* request transmitting completed, switch to TTY_RESP */
|
||||
#ifdef DEBUG
|
||||
log(7, "tty: request written (total %d bytes)", tty.txlen);
|
||||
#endif
|
||||
state_tty_set(&tty, TTY_RESP);
|
||||
}
|
||||
}
|
||||
|
||||
if (FD_ISSET(tty.fd, &sdsetrd))
|
||||
{
|
||||
if (tty.state == TTY_RESP)
|
||||
{
|
||||
rc = conn_read(tty.fd, tty.rxbuf + tty.ptrbuf,
|
||||
tty.rxlen - tty.ptrbuf);
|
||||
if (rc <= 0)
|
||||
{ /* error - we can't continue... */
|
||||
#ifdef LOG
|
||||
log(0, "tty: error in read() (%s)", strerror(errno));
|
||||
#endif
|
||||
break; /* exiting... */
|
||||
}
|
||||
#ifdef DEBUG
|
||||
log(7, "tty: readed %d bytes", rc);
|
||||
#endif
|
||||
tty.ptrbuf += rc;
|
||||
if (tty.ptrbuf == tty.rxlen)
|
||||
{ /* XXX still generating error response */
|
||||
modbus_ex_write(actconn->buf, MB_EX_CRC);
|
||||
/* switch connection to response state */
|
||||
state_conn_set(actconn, CONN_RESP);
|
||||
/* make inter-request pause */
|
||||
state_tty_set(&tty, TTY_PAUSE);
|
||||
}
|
||||
else
|
||||
/* reset timer */
|
||||
tty.timer = cfg.respwait * 1000l;
|
||||
}
|
||||
else
|
||||
{ /* drop unexpected tty data */
|
||||
if ((rc = conn_read(tty.fd, tty.rxbuf, BUFSIZE)) <= 0)
|
||||
{ /* error - we can't continue... */
|
||||
#ifdef LOG
|
||||
log(0, "tty: error in read() (%s)", strerror(errno));
|
||||
#endif
|
||||
break; /* exiting... */
|
||||
}
|
||||
#ifdef DEBUG
|
||||
log(7, "tty: dropped %d bytes", rc);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
/* processing data on the sockets */
|
||||
len = queue.len;
|
||||
curconn = queue.beg;
|
||||
while (len--)
|
||||
{
|
||||
switch (curconn->state)
|
||||
{
|
||||
case CONN_HEADER:
|
||||
case CONN_RQST:
|
||||
if (FD_ISSET(curconn->sd, &sdsetrd))
|
||||
{
|
||||
rc = conn_read(curconn->sd,
|
||||
curconn->buf + curconn->ctr,
|
||||
RQSTSIZE - curconn->ctr);
|
||||
if (rc <= 0)
|
||||
{ /* error - drop this connection and go to next queue element */
|
||||
curconn = conn_close(curconn);
|
||||
break;
|
||||
}
|
||||
curconn->ctr += rc;
|
||||
if (curconn->state == CONN_HEADER)
|
||||
if (curconn->ctr >= HDRSIZE)
|
||||
{ /* header received completely */
|
||||
if (modbus_check_header(curconn->buf) != RC_OK)
|
||||
{ /* header is damaged, drop connection */
|
||||
curconn = conn_close(curconn);
|
||||
break;
|
||||
}
|
||||
state_conn_set(curconn, CONN_RQST);
|
||||
}
|
||||
if (curconn->state == CONN_RQST)
|
||||
if (curconn->ctr >=
|
||||
HDRSIZE + MB_HDR(curconn->buf, MB_LENGTH_L))
|
||||
{ /* ### packet received completely ### */
|
||||
state_conn_set(curconn, CONN_TTY);
|
||||
if (tty.state == TTY_READY)
|
||||
conn_tty_start(&tty, curconn);
|
||||
}
|
||||
}
|
||||
curconn = queue_next_elem(&queue, curconn);
|
||||
break;
|
||||
case CONN_RESP:
|
||||
if (FD_ISSET(curconn->sd, &sdsetwr))
|
||||
{
|
||||
rc = conn_write(curconn->sd,
|
||||
curconn->buf + curconn->ctr,
|
||||
MB_HDR(curconn->buf, MB_LENGTH_L) +
|
||||
HDRSIZE - curconn->ctr);
|
||||
if (rc <= 0)
|
||||
{ /* error - drop this connection and go to next queue element */
|
||||
curconn = conn_close(curconn);
|
||||
break;
|
||||
}
|
||||
curconn->ctr += rc;
|
||||
if (curconn->ctr == (MB_HDR(curconn->buf, MB_LENGTH_L) + HDRSIZE))
|
||||
state_conn_set(curconn, CONN_HEADER);
|
||||
}
|
||||
curconn = queue_next_elem(&queue, curconn);
|
||||
break;
|
||||
} /* switch (curconn->state) */
|
||||
} /* while (len--) */
|
||||
} /* while (TRUE) */
|
||||
|
||||
/* XXX some cleanup must be here */
|
||||
}
|
90
src/conn.h
Normal file
90
src/conn.h
Normal file
@ -0,0 +1,90 @@
|
||||
/*
|
||||
* OpenMODBUS/TCP to RS-232/485 MODBUS RTU gateway
|
||||
*
|
||||
* conn.h - connections management procedures
|
||||
*
|
||||
* Copyright (c) 2002-2003, Victor Antonovich (avmlink@vlink.ru)
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: conn.h,v 1.1 2003/09/13 20:38:33 kapyar Exp $
|
||||
*/
|
||||
|
||||
#ifndef _CONN_H
|
||||
#define _CONN_H
|
||||
|
||||
#include "globals.h"
|
||||
#include "cfg.h"
|
||||
#include "sock.h"
|
||||
#include "modbus.h"
|
||||
#include "sig.h"
|
||||
#ifdef LOG
|
||||
#include "log.h"
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Default values
|
||||
*/
|
||||
#define DEFAULT_SERVERPORT 502
|
||||
#define DEFAULT_MAXCONN 32
|
||||
#define DEFAULT_MAXTRY 3
|
||||
#define DEFAULT_RQSTPAUSE 100
|
||||
#define DEFAULT_RESPWAIT 10
|
||||
#define DEFAULT_CONNTIMEOUT 60
|
||||
|
||||
#define CRCSIZE 2 /* size (in bytes) of CRC */
|
||||
#define HDRSIZE 6 /* size (in bytes) of header */
|
||||
#define BUFSIZE 256 /* size (in bytes) of MODBUS data */
|
||||
#define RQSTSIZE (HDRSIZE + BUFSIZE - 2) /* size (in bytes) of MODBUS request */
|
||||
|
||||
/*
|
||||
* Client connection FSM states
|
||||
*/
|
||||
#define CONN_HEADER 0
|
||||
#define CONN_RQST 1
|
||||
#define CONN_TTY 2
|
||||
#define CONN_RESP 3
|
||||
|
||||
/*
|
||||
* Client connection related data storage structure
|
||||
*/
|
||||
typedef struct conn_t
|
||||
{
|
||||
struct conn_t *prev; /* linked list previous connection */
|
||||
struct conn_t *next; /* linked list next connection */
|
||||
int sd; /* socket descriptor */
|
||||
int state; /* current state */
|
||||
int timeout; /* timeout value, secs */
|
||||
struct sockaddr_in sockaddr; /* connection structure */
|
||||
int ctr; /* counter of data in the buffer */
|
||||
unsigned char buf[HDRSIZE + BUFSIZE]; /* data buffer */
|
||||
} conn_t;
|
||||
|
||||
/* prototypes */
|
||||
int conn_init(void);
|
||||
void conn_loop(void);
|
||||
void conn_open(void);
|
||||
conn_t *conn_close(conn_t *conn);
|
||||
|
||||
#endif /* _CONN_H */
|
79
src/crc16.c
Normal file
79
src/crc16.c
Normal file
@ -0,0 +1,79 @@
|
||||
/*
|
||||
* OpenMODBUS/TCP to RS-232/485 MODBUS RTU gateway
|
||||
*
|
||||
* crc16.c - Cyclic Redundant Checks calculating
|
||||
*
|
||||
* Copyright (c) 2002-2003, Victor Antonovich (avmlink@vlink.ru)
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: crc16.c,v 1.1 2003/09/13 20:38:39 kapyar Exp $
|
||||
*/
|
||||
|
||||
#include "crc16.h"
|
||||
|
||||
unsigned short
|
||||
crc_16_tab[] = {
|
||||
0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241,
|
||||
0xc601, 0x06c0, 0x0780, 0xc741, 0x0500, 0xc5c1, 0xc481, 0x0440,
|
||||
0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1, 0xce81, 0x0e40,
|
||||
0x0a00, 0xcac1, 0xcb81, 0x0b40, 0xc901, 0x09c0, 0x0880, 0xc841,
|
||||
0xd801, 0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40,
|
||||
0x1e00, 0xdec1, 0xdf81, 0x1f40, 0xdd01, 0x1dc0, 0x1c80, 0xdc41,
|
||||
0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680, 0xd641,
|
||||
0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040,
|
||||
0xf001, 0x30c0, 0x3180, 0xf141, 0x3300, 0xf3c1, 0xf281, 0x3240,
|
||||
0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501, 0x35c0, 0x3480, 0xf441,
|
||||
0x3c00, 0xfcc1, 0xfd81, 0x3d40, 0xff01, 0x3fc0, 0x3e80, 0xfe41,
|
||||
0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840,
|
||||
0x2800, 0xe8c1, 0xe981, 0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41,
|
||||
0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1, 0xec81, 0x2c40,
|
||||
0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640,
|
||||
0x2200, 0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0, 0x2080, 0xe041,
|
||||
0xa001, 0x60c0, 0x6180, 0xa141, 0x6300, 0xa3c1, 0xa281, 0x6240,
|
||||
0x6600, 0xa6c1, 0xa781, 0x6740, 0xa501, 0x65c0, 0x6480, 0xa441,
|
||||
0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41,
|
||||
0xaa01, 0x6ac0, 0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840,
|
||||
0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01, 0x7bc0, 0x7a80, 0xba41,
|
||||
0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40,
|
||||
0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1, 0xb681, 0x7640,
|
||||
0x7200, 0xb2c1, 0xb381, 0x7340, 0xb101, 0x71c0, 0x7080, 0xb041,
|
||||
0x5000, 0x90c1, 0x9181, 0x5140, 0x9301, 0x53c0, 0x5280, 0x9241,
|
||||
0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440,
|
||||
0x9c01, 0x5cc0, 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40,
|
||||
0x5a00, 0x9ac1, 0x9b81, 0x5b40, 0x9901, 0x59c0, 0x5880, 0x9841,
|
||||
0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81, 0x4a40,
|
||||
0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41,
|
||||
0x4400, 0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641,
|
||||
0x8201, 0x42c0, 0x4380, 0x8341, 0x4100, 0x81c1, 0x8081, 0x4040
|
||||
};
|
||||
|
||||
unsigned short
|
||||
crc16(unsigned char *buf, unsigned int bsize)
|
||||
{
|
||||
unsigned short crc = 0xffff;
|
||||
while (bsize--)
|
||||
crc = (unsigned short)(crc >> 8) ^ crc_16_tab[(crc ^ *buf++) & 0xff];
|
||||
return crc;
|
||||
}
|
41
src/crc16.h
Normal file
41
src/crc16.h
Normal file
@ -0,0 +1,41 @@
|
||||
/*
|
||||
* OpenMODBUS/TCP to RS-232/485 MODBUS RTU gateway
|
||||
*
|
||||
* crc16.h - Cyclic Redundant Checks calculating
|
||||
*
|
||||
* Copyright (c) 2002-2003, Victor Antonovich (avmlink@vlink.ru)
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: crc16.h,v 1.1 2003/09/13 20:38:45 kapyar Exp $
|
||||
*/
|
||||
|
||||
#ifndef _CRC_H
|
||||
#define _CRC_H
|
||||
|
||||
#include "globals.h"
|
||||
|
||||
unsigned short crc16(unsigned char *buf, unsigned int bsize);
|
||||
|
||||
#endif /*_CRC_H */
|
103
src/globals.h
Normal file
103
src/globals.h
Normal file
@ -0,0 +1,103 @@
|
||||
/*
|
||||
* OpenMODBUS/TCP to RS-232/485 MODBUS RTU gateway
|
||||
*
|
||||
* globals.h - global definitions
|
||||
*
|
||||
* Copyright (c) 2002-2003, Victor Antonovich (avmlink@vlink.ru)
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: globals.h,v 1.1 2003/09/13 20:38:16 kapyar Exp $
|
||||
*/
|
||||
|
||||
#ifndef _GLOBALS_H
|
||||
#define _GLOBALS_H
|
||||
|
||||
/* Include global configuration header file */
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/socket.h>
|
||||
#include <termios.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <signal.h>
|
||||
#include <netdb.h>
|
||||
#include <fcntl.h>
|
||||
#ifdef HAVE_LIBUTIL
|
||||
#include <libutil.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Uncomment this for enabling logging facility
|
||||
*/
|
||||
#define LOG
|
||||
#ifdef LOG
|
||||
/* uncomment this line for extra debug log info */
|
||||
#define DEBUG
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Useful min/max macroses
|
||||
*/
|
||||
#define MAX(a, b) ( (a > b) ? a : b )
|
||||
#define MIN(a, b) ( (a < b) ? a : b )
|
||||
|
||||
/*
|
||||
* Boolean constants
|
||||
*/
|
||||
#define FALSE 0
|
||||
#define TRUE !FALSE
|
||||
|
||||
/*
|
||||
* Constants
|
||||
*/
|
||||
#define RC_OK 0
|
||||
#define RC_ERR -1
|
||||
#define RC_BREAK -2
|
||||
#define RC_TIMEOUT -3
|
||||
#define RC_AOPEN -4
|
||||
#define RC_ACLOSE -5
|
||||
|
||||
/* Internal string buffers size */
|
||||
#if defined(PATH_MAX)
|
||||
#define INTBUFSIZE PATH_MAX
|
||||
#else
|
||||
#define INTBUFSIZE 1023
|
||||
#endif
|
||||
|
||||
#endif
|
112
src/log.c
Normal file
112
src/log.c
Normal file
@ -0,0 +1,112 @@
|
||||
/*
|
||||
* OpenMODBUS/TCP to RS-232/485 MODBUS RTU gateway
|
||||
*
|
||||
* log.c - debug logging facility
|
||||
*
|
||||
* Copyright (c) 2002-2003, Victor Antonovich (avmlink@vlink.ru)
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: log.c,v 1.1 2003/09/13 20:38:16 kapyar Exp $
|
||||
*/
|
||||
|
||||
#include "log.h"
|
||||
|
||||
#ifdef LOG
|
||||
#include "cfg.h"
|
||||
|
||||
/* log file full name */
|
||||
char logfullname[INTBUFSIZE + 1];
|
||||
|
||||
int
|
||||
log_init(char *logname)
|
||||
{
|
||||
FILE *logfile;
|
||||
int maxlen = INTBUFSIZE;
|
||||
|
||||
/* checking log file name */
|
||||
if (*logname != '/')
|
||||
{
|
||||
strncpy(logfullname, LOGPATH, maxlen);
|
||||
maxlen -= strlen(logfullname);
|
||||
strncat(logfullname, logname, maxlen);
|
||||
}
|
||||
else strncpy(logfullname, logname, maxlen);
|
||||
|
||||
logfile = fopen(logfullname, "at");
|
||||
if (logfile)
|
||||
{
|
||||
fclose(logfile);
|
||||
return RC_OK;
|
||||
}
|
||||
*logfullname = '\0';
|
||||
return RC_ERR;
|
||||
}
|
||||
|
||||
/* Append message STRING to log file LOGNAME */
|
||||
int
|
||||
log_app(char *logname, char *string)
|
||||
{
|
||||
FILE *logfile;
|
||||
logfile = fopen(logname, "at");
|
||||
if (logfile)
|
||||
{
|
||||
fputs(string, logfile);
|
||||
fclose(logfile);
|
||||
return RC_OK;
|
||||
}
|
||||
return RC_ERR;
|
||||
}
|
||||
|
||||
/* Put message with format FMT with errorlevel LEVEL to log file */
|
||||
void
|
||||
log(int level, char *fmt, ...)
|
||||
{
|
||||
#ifdef HRDATE
|
||||
time_t tt;
|
||||
struct tm *t;
|
||||
#else
|
||||
struct timeval tv;
|
||||
#endif
|
||||
va_list args;
|
||||
int strsize = 0;
|
||||
static char str[INTBUFSIZE + 1] = {0}, *p;
|
||||
|
||||
if (*logfullname == '\0' || level > cfg.dbglvl) return;
|
||||
#ifdef HRDATE
|
||||
tt = time(NULL);
|
||||
t = localtime(&tt);
|
||||
strsize += strftime(str, 32, "%d %b %Y %H:%M:%S ", t);
|
||||
#else
|
||||
(void)gettimeofday(&tv, NULL);
|
||||
strsize += snprintf(str, 32, "%06lu:%06lu ", tv.tv_sec, tv.tv_usec);
|
||||
#endif
|
||||
va_start(args, fmt);
|
||||
p = str + strsize;
|
||||
strsize += vsnprintf(p, INTBUFSIZE - strsize, fmt, args);
|
||||
va_end(args);
|
||||
strcpy(str + strsize++, "\n");
|
||||
log_app(logfullname, str);
|
||||
}
|
||||
#endif
|
49
src/log.h
Normal file
49
src/log.h
Normal file
@ -0,0 +1,49 @@
|
||||
/*
|
||||
* OpenMODBUS/TCP to RS-232/485 MODBUS RTU gateway
|
||||
*
|
||||
* log.h - debug logging facility
|
||||
*
|
||||
* Copyright (c) 2002-2003, Victor Antonovich (avmlink@vlink.ru)
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: log.h,v 1.1 2003/09/13 20:38:16 kapyar Exp $
|
||||
*/
|
||||
|
||||
#ifndef _LOG_H
|
||||
#define _LOG_H
|
||||
|
||||
#include "globals.h"
|
||||
|
||||
/* Default log file path and name */
|
||||
#define LOGPATH "/var/log/"
|
||||
#define LOGNAME "mbus.log"
|
||||
|
||||
#ifdef LOG
|
||||
int log_init(char *logname);
|
||||
int log_app(char *logname, char *string);
|
||||
void log(int level, char *fmt, ...);
|
||||
#endif
|
||||
|
||||
#endif /* _LOG_H */
|
247
src/main.c
Normal file
247
src/main.c
Normal file
@ -0,0 +1,247 @@
|
||||
/*
|
||||
* OpenMODBUS/TCP to RS-232/485 MODBUS RTU gateway
|
||||
*
|
||||
* main.c - main module
|
||||
*
|
||||
* Copyright (c) 2002-2003, Victor Antonovich (avmlink@vlink.ru)
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: main.c,v 1.1 2003/09/13 20:38:16 kapyar Exp $
|
||||
*/
|
||||
|
||||
#include "globals.h"
|
||||
#include "cfg.h"
|
||||
#include "tty.h"
|
||||
#include "sock.h"
|
||||
#include "conn.h"
|
||||
#include "queue.h"
|
||||
#include "sig.h"
|
||||
#ifdef LOG
|
||||
#include "log.h"
|
||||
#endif
|
||||
|
||||
int isdaemon = TRUE;
|
||||
|
||||
void usage(char *exename);
|
||||
|
||||
/* Server socket */
|
||||
int server_sd = -1;
|
||||
/* TTY related data storage variable */
|
||||
ttydata_t tty;
|
||||
/* Connections queue descriptor */
|
||||
queue_t queue;
|
||||
|
||||
void
|
||||
usage(char *exename)
|
||||
{
|
||||
printf("%s-%s copyright (c) Victor Antonovich, 2002-2003 // 2:5055/124.13@fidonet\n"
|
||||
"usage: %s [<options>] \n"
|
||||
"-h this help\n"
|
||||
"-d don't daemonize\n"
|
||||
#ifdef LOG
|
||||
#ifdef DEBUG
|
||||
"-v<level> set log level (0-9, default %d, 0 - errors only)\n"
|
||||
#else
|
||||
"-v<level> set log level (0-2, default %d, 0 - errors only)\n"
|
||||
#endif
|
||||
"-L<name> set log file name (default %s%s)\n"
|
||||
#endif
|
||||
"-p<name> set serial port device name (default %s)\n"
|
||||
"-s<value> set serial port speed (default %d)\n"
|
||||
#ifdef TRXCTL
|
||||
"-t force RTS RS-485 transmitting/receiving control\n"
|
||||
#endif
|
||||
"-P<number> set TCP server port number (default %d)\n"
|
||||
"-C<number> set number of simultaneous connections\n"
|
||||
" (1-128, default %d)\n"
|
||||
"-N<number> set number of request retries\n"
|
||||
" (0-15, default %d, 0 - without retries)\n"
|
||||
"-R<value> set pause between requests, millisecs\n"
|
||||
" (1-10000, default %lu)\n"
|
||||
"-W<value> set response wait time, millisecs\n"
|
||||
" (1-10000, default %lu)\n"
|
||||
"-T<value> set connection timeout value, secs\n"
|
||||
" (0-1000, default %d, 0 - no timeout)"
|
||||
"\n", PACKAGE, VERSION, exename,
|
||||
#ifdef LOG
|
||||
cfg.dbglvl, LOGPATH, LOGNAME,
|
||||
#endif
|
||||
cfg.ttyport, cfg.ttyspeed, cfg.serverport, cfg.maxconn,
|
||||
cfg.maxtry, cfg.rqstpause, cfg.respwait, cfg.conntimeout);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
int err = 0, rc;
|
||||
sig_init();
|
||||
cfg_init();
|
||||
|
||||
/* command line parsing */
|
||||
while ((rc = getopt(argc, argv,
|
||||
"dh"
|
||||
#ifdef TRXCTL
|
||||
"t"
|
||||
#endif
|
||||
#ifdef LOG
|
||||
"v:L:"
|
||||
#endif
|
||||
"p:s:P:C:N:R:W:T:")) != RC_ERR)
|
||||
{
|
||||
switch (rc)
|
||||
{
|
||||
case 'd':
|
||||
isdaemon = FALSE;
|
||||
break;
|
||||
#ifdef TRXCTL
|
||||
case 't':
|
||||
cfg.trxcntl = TRX_RTS;
|
||||
break;
|
||||
#endif
|
||||
#ifdef LOG
|
||||
case 'v':
|
||||
cfg.dbglvl = (char)strtol(optarg, NULL, 0);
|
||||
#ifdef DEBUG
|
||||
if (cfg.dbglvl < 0 || cfg.dbglvl > 9)
|
||||
{ /* report about invalid log level */
|
||||
printf("-v: invalid loglevel"
|
||||
" (%d, must be 0-9)\n", cfg.dbglvl);
|
||||
#else
|
||||
if (cfg.dbglvl < 0 || cfg.dbglvl > 9)
|
||||
{ /* report about invalid log level */
|
||||
printf("-v: invalid loglevel"
|
||||
" (%d, must be 0-2)\n", cfg.dbglvl);
|
||||
#endif
|
||||
exit(-1);
|
||||
}
|
||||
break;
|
||||
case 'L':
|
||||
if (*optarg != '/')
|
||||
{ /* concatenate given log file name with default path */
|
||||
strncpy(cfg.logname, LOGPATH, INTBUFSIZE);
|
||||
strncat(cfg.logname, optarg,
|
||||
INTBUFSIZE - strlen(cfg.logname));
|
||||
}
|
||||
else strncpy(cfg.logname, optarg, INTBUFSIZE);
|
||||
break;
|
||||
#endif
|
||||
case 'p':
|
||||
if (*optarg != '/')
|
||||
{ /* concatenate given port name with default */
|
||||
/* path to devices mountpoint */
|
||||
strncpy(cfg.ttyport, "/dev/", INTBUFSIZE);
|
||||
strncat(cfg.ttyport, optarg,
|
||||
INTBUFSIZE - strlen(cfg.ttyport));
|
||||
}
|
||||
else strncpy(cfg.ttyport, optarg, INTBUFSIZE);
|
||||
break;
|
||||
case 's':
|
||||
cfg.ttyspeed = strtoul(optarg, NULL, 0);
|
||||
break;
|
||||
case 'P':
|
||||
cfg.serverport = strtoul(optarg, NULL, 0);
|
||||
break;
|
||||
case 'C':
|
||||
cfg.maxconn = strtoul(optarg, NULL, 0);
|
||||
if (cfg.maxconn < 1 || cfg.maxconn > 128)
|
||||
{ /* report about invalid max conn number */
|
||||
printf("-C: invalid number"
|
||||
" (%d, must be 1-128)\n", cfg.maxconn);
|
||||
exit(-1);
|
||||
}
|
||||
break;
|
||||
case 'N':
|
||||
cfg.maxtry = strtoul(optarg, NULL, 0);
|
||||
if (cfg.maxtry > 15)
|
||||
{ /* report about invalid max conn number */
|
||||
printf("-N: invalid number"
|
||||
" (%d, must be 0-15)\n", cfg.maxtry);
|
||||
exit(-1);
|
||||
}
|
||||
break;
|
||||
case 'R':
|
||||
cfg.rqstpause = strtoul(optarg, NULL, 0);
|
||||
if (cfg.rqstpause < 1 || cfg.rqstpause > 10000)
|
||||
{ /* report about invalid rqst pause value */
|
||||
printf("-R: invalid number"
|
||||
" (%lu, must be 1-10000)\n", cfg.rqstpause);
|
||||
exit(-1);
|
||||
}
|
||||
break;
|
||||
case 'W':
|
||||
cfg.respwait = strtoul(optarg, NULL, 0);
|
||||
if (cfg.respwait < 1 || cfg.respwait > 10000)
|
||||
{ /* report about invalid resp wait value */
|
||||
printf("-W: invalid number"
|
||||
" (%lu, must be 1-10000)\n", cfg.respwait);
|
||||
exit(-1);
|
||||
}
|
||||
break;
|
||||
case 'T':
|
||||
cfg.conntimeout = strtoul(optarg, NULL, 0);
|
||||
if (cfg.conntimeout > 1000)
|
||||
{ /* report about invalid conn timeout value */
|
||||
printf("-T: invalid number"
|
||||
" (%d, must be 1-1000)\n", cfg.conntimeout);
|
||||
exit(-1);
|
||||
}
|
||||
break;
|
||||
case 'h':
|
||||
usage(argv[0]);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef LOG
|
||||
log_init(cfg.logname);
|
||||
log(2, "%s-%s started...", PACKAGE, VERSION);
|
||||
#endif
|
||||
|
||||
if (conn_init())
|
||||
{
|
||||
#ifdef LOG
|
||||
err = errno;
|
||||
log(2, "conn_init() failed, exiting...");
|
||||
#endif
|
||||
exit(err);
|
||||
}
|
||||
|
||||
/* go or not to daemon mode? */
|
||||
if (isdaemon && (rc = daemon(TRUE, FALSE)))
|
||||
{
|
||||
#ifdef LOG
|
||||
log(0, "Can't be daemonized (%s), exiting...", strerror(errno));
|
||||
#endif
|
||||
exit(rc);
|
||||
}
|
||||
|
||||
conn_loop();
|
||||
err = errno;
|
||||
#ifdef LOG
|
||||
log(2, "%s-%s exited...", PACKAGE, VERSION);
|
||||
#endif
|
||||
return (err);
|
||||
}
|
||||
|
87
src/modbus.c
Normal file
87
src/modbus.c
Normal file
@ -0,0 +1,87 @@
|
||||
/*
|
||||
* OpenMODBUS/TCP to RS-232/485 MODBUS RTU gateway
|
||||
*
|
||||
* modbus.c - MODBUS protocol related procedures
|
||||
*
|
||||
* Copyright (c) 2002-2003, Victor Antonovich (avmlink@vlink.ru)
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: modbus.c,v 1.1 2003/09/13 20:38:39 kapyar Exp $
|
||||
*/
|
||||
|
||||
#include "modbus.h"
|
||||
|
||||
/*
|
||||
* Check CRC of MODBUS frame
|
||||
* Parameters: FRAME - address of the frame,
|
||||
* LEN - frame length;
|
||||
* Return: 0 if CRC failed,
|
||||
* non-zero otherwise
|
||||
*/
|
||||
int
|
||||
modbus_crc_correct(unsigned char *frame, unsigned int len)
|
||||
{
|
||||
return (!crc16(frame, len));
|
||||
}
|
||||
|
||||
/*
|
||||
* Write CRC to MODBUS frame
|
||||
* Parameters: FRAME - address of the frame,
|
||||
* LEN - frame length;
|
||||
* Return: none
|
||||
*/
|
||||
void
|
||||
modbus_crc_write(unsigned char *frame, unsigned int len)
|
||||
{
|
||||
WORD_WR_LE(frame + len, crc16(frame, len));
|
||||
}
|
||||
|
||||
/*
|
||||
* Write exception response to OpenMODBUS request
|
||||
* Parameters: PACKET - address of the request packet,
|
||||
* CODE - exception code;
|
||||
* Return: none
|
||||
*/
|
||||
void
|
||||
modbus_ex_write(unsigned char *packet, unsigned char code)
|
||||
{
|
||||
MB_HDR(packet, MB_FCODE) |= 0x80;
|
||||
MB_HDR(packet, MB_DATA) = code;
|
||||
WORD_WR_BE(packet + MB_LENGTH_H, MB_EX_LEN);
|
||||
}
|
||||
|
||||
/*
|
||||
* Check MODBUS packet header consistency
|
||||
* Parameters: HEADER - address of the header
|
||||
* Return: RC_OK if (mostly) all is right, RC_ERR otherwise
|
||||
*/
|
||||
int
|
||||
modbus_check_header(unsigned char *packet)
|
||||
{
|
||||
return (MB_HDR(packet, MB_PROTO_ID_H) == 0 &&
|
||||
MB_HDR(packet, MB_PROTO_ID_L) == 0 &&
|
||||
MB_HDR(packet, MB_LENGTH_H) == 0 &&
|
||||
MB_HDR(packet, MB_LENGTH_L) > 0) ? RC_OK : RC_ERR;
|
||||
}
|
96
src/modbus.h
Normal file
96
src/modbus.h
Normal file
@ -0,0 +1,96 @@
|
||||
/*
|
||||
* OpenMODBUS/TCP to RS-232/485 MODBUS RTU gateway
|
||||
*
|
||||
* modbus.h - MODBUS protocol related procedures
|
||||
*
|
||||
* Copyright (c) 2002-2003, Victor Antonovich (avmlink@vlink.ru)
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: modbus.h,v 1.1 2003/09/13 20:38:45 kapyar Exp $
|
||||
*/
|
||||
|
||||
#ifndef _MODBUS_H
|
||||
#define _MODBUS_H
|
||||
|
||||
#include "globals.h"
|
||||
#include "crc16.h"
|
||||
|
||||
/*
|
||||
* Macros for invoking data from MODBUS packet header
|
||||
*/
|
||||
#define MB_HDR(p, d) ( *(p + d) )
|
||||
|
||||
/*
|
||||
* MODBUS frame lengths
|
||||
*/
|
||||
#define MB_EX_LEN 3
|
||||
#define MB_MIN_LEN 4
|
||||
#define MB_MAX_LEN 256
|
||||
|
||||
/*
|
||||
* Macroses for word operations
|
||||
*/
|
||||
#define HIGH(w) ( (unsigned char)(((w) >> 8) & 0xff) )
|
||||
#define LOW(w) ( (unsigned char)((w) & 0xff) )
|
||||
#define WORD_WR_BE(p, w) do \
|
||||
{ *(p) = (unsigned char)(((w) >> 8) & 0xff); \
|
||||
*(p + 1) = (unsigned char)((w) & 0xff); } \
|
||||
while (0);
|
||||
#define WORD_RD_BE(p) ( (((unsigned short)*(p) << 8) & 0xff00) + \
|
||||
(*(p + 1) & 0xff) )
|
||||
#define WORD_WR_LE(p, w) do \
|
||||
{ *(p) = (unsigned char)((w) & 0xff); \
|
||||
*(p + 1) = (unsigned char)(((w) >> 8) & 0xff); } \
|
||||
while (0);
|
||||
#define WORD_RD_LE(p) ( (((unsigned short)*(p + 1) << 8) & 0xff00) + \
|
||||
(*(p) & 0xff) )
|
||||
|
||||
/*
|
||||
* MODBUS packet structure
|
||||
*/
|
||||
#define MB_TRANS_ID_H 0 /* transaction ID high byte */
|
||||
#define MB_TRANS_ID_L 1 /* transaction ID low byte */
|
||||
#define MB_PROTO_ID_H 2 /* protocol ID high byte */
|
||||
#define MB_PROTO_ID_L 3 /* protocol ID low byte */
|
||||
#define MB_LENGTH_H 4 /* length field high byte */
|
||||
#define MB_LENGTH_L 5 /* length field low byte */
|
||||
#define MB_UNIT_ID 6 /* unit identifier */
|
||||
#define MB_FCODE 7 /* function code */
|
||||
#define MB_DATA 8 /* MODBUS data */
|
||||
|
||||
/*
|
||||
* Exception codes
|
||||
*/
|
||||
#define MB_EX_CRC 128
|
||||
#define MB_EX_TIMEOUT 129
|
||||
|
||||
/* Prototypes */
|
||||
int modbus_crc_correct(unsigned char *frame, unsigned int len);
|
||||
void modbus_crc_write(unsigned char *frame, unsigned int len);
|
||||
void modbus_ex_write(unsigned char *packet, unsigned char code);
|
||||
int modbus_check_header(unsigned char *packet);
|
||||
|
||||
|
||||
#endif /* _MODBUS_H */
|
119
src/queue.c
Normal file
119
src/queue.c
Normal file
@ -0,0 +1,119 @@
|
||||
/*
|
||||
* OpenMODBUS/TCP to RS-232/485 MODBUS RTU gateway
|
||||
*
|
||||
* queue.c - Óonnections queue management procedures
|
||||
*
|
||||
* Copyright (c) 2002-2003, Victor Antonovich (avmlink@vlink.ru)
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: queue.c,v 1.1 2003/09/13 20:38:39 kapyar Exp $
|
||||
*/
|
||||
|
||||
#include "queue.h"
|
||||
|
||||
/*
|
||||
* Queue structure initialization
|
||||
*/
|
||||
void
|
||||
queue_init(queue_t *queue)
|
||||
{
|
||||
queue->beg = NULL;
|
||||
queue->end = NULL;
|
||||
queue->len = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Add new element to queue
|
||||
*/
|
||||
conn_t *
|
||||
queue_new_elem(queue_t *queue)
|
||||
{
|
||||
conn_t *newconn = (conn_t *)malloc(sizeof(conn_t));
|
||||
if (!newconn)
|
||||
{ /* Aborting program execution */
|
||||
#ifdef LOG
|
||||
log(0, "queue_new_elem(): out of memory for new element (%s)",
|
||||
strerror(errno));
|
||||
#endif
|
||||
exit(errno);
|
||||
}
|
||||
newconn->next = NULL;
|
||||
if ((newconn->prev = queue->end) != NULL)
|
||||
queue->end->next = newconn;
|
||||
else /* we add first element */
|
||||
queue->beg = newconn;
|
||||
queue->end = newconn;
|
||||
queue->len++;
|
||||
#ifdef DEBUG
|
||||
log(5, "queue_new_elem(): length now is %d", queue->len);
|
||||
#endif
|
||||
return newconn;
|
||||
}
|
||||
|
||||
/*
|
||||
* Remove element from queue
|
||||
*/
|
||||
void
|
||||
queue_delete_elem(queue_t *queue, conn_t *conn)
|
||||
{
|
||||
if (queue->len <= 0)
|
||||
{ /* queue is empty */
|
||||
#ifdef LOG
|
||||
log(1, "queue_delete_elem(): queue empty!");
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
if (conn->prev == NULL)
|
||||
{ /* deleting first element */
|
||||
if ((queue->beg = queue->beg->next) != NULL)
|
||||
queue->beg->prev = NULL;
|
||||
}
|
||||
else
|
||||
conn->prev->next = conn->next;
|
||||
if (conn->next == NULL)
|
||||
{ /* deleting last element */
|
||||
if ((queue->end = queue->end->prev) != NULL)
|
||||
queue->end->next = NULL;
|
||||
}
|
||||
else
|
||||
conn->next->prev = conn->prev;
|
||||
queue->len--;
|
||||
free((void *)conn);
|
||||
#ifdef DEBUG
|
||||
log(5, "queue_delete_elem(): length now is %d", queue->len);
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Obtain pointer to next element in the QUEUE (with wrapping)
|
||||
* Parameters: CONN - pointer to current queue element
|
||||
* Return: pointer to next queue element
|
||||
*/
|
||||
conn_t *
|
||||
queue_next_elem(queue_t *queue, conn_t *conn)
|
||||
{
|
||||
return (conn->next == NULL) ? queue->beg : conn->next;
|
||||
}
|
59
src/queue.h
Normal file
59
src/queue.h
Normal file
@ -0,0 +1,59 @@
|
||||
/*
|
||||
* OpenMODBUS/TCP to RS-232/485 MODBUS RTU gateway
|
||||
*
|
||||
* queue.h - Óonnections queue management procedures
|
||||
*
|
||||
* Copyright (c) 2002-2003, Victor Antonovich (avmlink@vlink.ru)
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: queue.h,v 1.1 2003/09/13 20:38:39 kapyar Exp $
|
||||
*/
|
||||
|
||||
#ifndef _QUEUE_H
|
||||
#define _QUEUE_H
|
||||
|
||||
#include "globals.h"
|
||||
#include "conn.h"
|
||||
#ifdef LOG
|
||||
#include "log.h"
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Queue parameters structure
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
conn_t *beg; /* address of first queue element */
|
||||
conn_t *end; /* address of last queue element */
|
||||
int len; /* number of elements in the queue */
|
||||
} queue_t;
|
||||
|
||||
/* prototypes */
|
||||
void queue_init(queue_t *queue);
|
||||
conn_t *queue_new_elem(queue_t *queue);
|
||||
void queue_delete_elem(queue_t *queue, conn_t *conn);
|
||||
conn_t *queue_next_elem(queue_t *queue, conn_t *conn);
|
||||
|
||||
#endif /* _QUEUE_H */
|
153
src/sig.c
Normal file
153
src/sig.c
Normal file
@ -0,0 +1,153 @@
|
||||
/*
|
||||
* OpenMODBUS/TCP to RS-232/485 MODBUS RTU gateway
|
||||
*
|
||||
* sig.c - signals management procedures
|
||||
*
|
||||
* Copyright (c) 2002-2003, Victor Antonovich (avmlink@vlink.ru)
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: sig.c,v 1.1 2003/09/13 20:38:33 kapyar Exp $
|
||||
*/
|
||||
|
||||
#include "sig.h"
|
||||
#include "tty.h"
|
||||
|
||||
/* signal flag */
|
||||
volatile sig_atomic_t sig_flag = 0;
|
||||
|
||||
/* internal prototypes */
|
||||
void sig_bus(int signum);
|
||||
void sig_segv(int signum);
|
||||
void sig_handler(int signum);
|
||||
|
||||
/*
|
||||
* Signal handler initialization
|
||||
* Return: none
|
||||
*/
|
||||
void
|
||||
sig_init(void)
|
||||
{
|
||||
struct sigaction sa;
|
||||
|
||||
sa.sa_flags = 0;
|
||||
|
||||
sigemptyset(&sa.sa_mask);
|
||||
sigaddset(&sa.sa_mask, SIGSEGV);
|
||||
sigaddset(&sa.sa_mask, SIGBUS);
|
||||
sigaddset(&sa.sa_mask, SIGTERM);
|
||||
sigaddset(&sa.sa_mask, SIGHUP);
|
||||
sigaddset(&sa.sa_mask, SIGINT);
|
||||
sigaddset(&sa.sa_mask, SIGPIPE);
|
||||
sigaddset(&sa.sa_mask, SIGCHLD);
|
||||
sigaddset(&sa.sa_mask, SIGALRM);
|
||||
sigaddset(&sa.sa_mask, SIGUSR1);
|
||||
sigaddset(&sa.sa_mask, SIGUSR2);
|
||||
|
||||
sa.sa_handler = sig_segv;
|
||||
sigaction(SIGSEGV, &sa, NULL);
|
||||
|
||||
sa.sa_handler = sig_bus;
|
||||
sigaction(SIGBUS, &sa, NULL);
|
||||
|
||||
sa.sa_handler = sig_handler;
|
||||
sigaction(SIGTERM, &sa, NULL);
|
||||
|
||||
sa.sa_handler = sig_handler;
|
||||
sigaction(SIGHUP, &sa, NULL);
|
||||
|
||||
sa.sa_handler = sig_handler;
|
||||
sigaction(SIGINT, &sa, NULL);
|
||||
|
||||
sa.sa_handler = SIG_IGN;
|
||||
sigaction(SIGPIPE, &sa, NULL);
|
||||
|
||||
sa.sa_handler = SIG_IGN;
|
||||
sigaction(SIGCHLD, &sa, NULL);
|
||||
|
||||
sa.sa_handler = SIG_IGN;
|
||||
sigaction(SIGALRM, &sa, NULL);
|
||||
|
||||
sa.sa_handler = SIG_IGN;
|
||||
sigaction(SIGUSR1, &sa, NULL);
|
||||
|
||||
sa.sa_handler = SIG_IGN;
|
||||
sigaction(SIGUSR2, &sa, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* SIGSEGV signal handler
|
||||
*/
|
||||
void
|
||||
sig_segv(int signum)
|
||||
{
|
||||
#ifndef SAFESIG
|
||||
signum = signum; /* prevent compiler warning */
|
||||
fprintf(stderr, "caught SIGSEGV, dumping core...");
|
||||
fclose(stderr);
|
||||
#endif
|
||||
abort();
|
||||
}
|
||||
|
||||
/*
|
||||
* SIGBUS signal handler
|
||||
*/
|
||||
void
|
||||
sig_bus(int signum)
|
||||
{
|
||||
#ifndef SAFESIG
|
||||
signum = signum; /* prevent compiler warning */
|
||||
fprintf(stderr, "caught SIGBUS, dumping core...");
|
||||
fclose(stderr);
|
||||
#endif
|
||||
abort();
|
||||
}
|
||||
|
||||
/*
|
||||
* Unignored signals handler
|
||||
*/
|
||||
void
|
||||
sig_handler(int signum)
|
||||
{
|
||||
#ifndef SAFESIG
|
||||
tty_sighup();
|
||||
#endif
|
||||
sig_flag = signum;
|
||||
}
|
||||
|
||||
/*
|
||||
* Signal action execution
|
||||
*/
|
||||
void
|
||||
sig_exec(void)
|
||||
{
|
||||
#ifdef LOG
|
||||
static char *signames[] = {
|
||||
"", "HUP", "INT", "QUIT", "ILL", "TRAP", "IOT", "BUS", "FPE",
|
||||
"KILL", "USR1", "SEGV", "USR2", "PIPE", "ALRM", "TERM" };
|
||||
log(2, "Terminated by signal: SIG%s", signames[sig_flag]);
|
||||
#endif
|
||||
/* currently simply exit the program */
|
||||
exit(1);
|
||||
}
|
47
src/sig.h
Normal file
47
src/sig.h
Normal file
@ -0,0 +1,47 @@
|
||||
/*
|
||||
* OpenMODBUS/TCP to RS-232/485 MODBUS RTU gateway
|
||||
*
|
||||
* sig.h - signals management procedures
|
||||
*
|
||||
* Copyright (c) 2002-2003, Victor Antonovich (avmlink@vlink.ru)
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: sig.h,v 1.1 2003/09/13 20:38:39 kapyar Exp $
|
||||
*/
|
||||
|
||||
#ifndef _SIG_H
|
||||
#define _SIG_H
|
||||
|
||||
#include "globals.h"
|
||||
#ifdef LOG
|
||||
#include "log.h"
|
||||
#endif
|
||||
|
||||
/* prototypes */
|
||||
extern volatile sig_atomic_t sig_flag;
|
||||
void sig_init(void);
|
||||
void sig_exec(void);
|
||||
|
||||
#endif /* _SIG_H */
|
232
src/sock.c
Normal file
232
src/sock.c
Normal file
@ -0,0 +1,232 @@
|
||||
/*
|
||||
* OpenMODBUS/TCP to RS-232/485 MODBUS RTU gateway
|
||||
*
|
||||
* sock.c - socket manipulation routines
|
||||
*
|
||||
* Copyright (c) 2002-2003, Victor Antonovich (avmlink@vlink.ru)
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: sock.c,v 1.1 2003/09/13 20:38:45 kapyar Exp $
|
||||
*/
|
||||
|
||||
#include "sock.h"
|
||||
|
||||
/*
|
||||
* Bring i/o descriptor SD to BLKMODE (if non-zero - socket is nonblocking)
|
||||
*
|
||||
* Return: RC_ERR if there some errors
|
||||
*/
|
||||
int
|
||||
sock_set_blkmode(int sd, int blkmode)
|
||||
{
|
||||
int flags;
|
||||
|
||||
flags = fcntl(sd, F_GETFL);
|
||||
if (flags == -1) return -1;
|
||||
|
||||
flags = blkmode ? (flags | O_NONBLOCK) : (flags & ~O_NONBLOCK);
|
||||
flags = fcntl(sd, F_SETFL, flags);
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
||||
/*
|
||||
* Create new socket in BLKMODE mode (if non-zero - socket is nonblocking)
|
||||
*
|
||||
* Return: socket descriptor, otherwise RC_ERR if there some errors
|
||||
*/
|
||||
int
|
||||
sock_create(int blkmode)
|
||||
{
|
||||
int sock;
|
||||
|
||||
if ((sock =
|
||||
socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1)
|
||||
{
|
||||
#ifdef LOG
|
||||
log(0, "sock_create(): unable to create socket (%s)",
|
||||
strerror(errno));
|
||||
#endif
|
||||
return RC_ERR;
|
||||
}
|
||||
|
||||
/* set socket to desired blocking mode */
|
||||
if (sock_set_blkmode(sock, blkmode) == -1)
|
||||
{
|
||||
#ifdef LOG
|
||||
log(0, "sock_create(): unable to set "
|
||||
"server socket to nonblocking (%s)",
|
||||
strerror(errno));
|
||||
#endif
|
||||
return RC_ERR;
|
||||
}
|
||||
|
||||
return sock;
|
||||
}
|
||||
|
||||
/*
|
||||
* Create new server socket with SERVER_PORT, SERVER_IP -
|
||||
* port and address to bind the socket,
|
||||
* BLKMODE - blocking mode (if non-zero - socket is nonblocking)
|
||||
*
|
||||
* Return: socket descriptor, otherwise RC_ERR if there some errors
|
||||
*/
|
||||
int
|
||||
sock_create_server(char *server_ip,
|
||||
unsigned short server_port, int blkmode)
|
||||
{
|
||||
struct sockaddr_in server_sockaddr;
|
||||
int sock_opt = 1;
|
||||
int server_s;
|
||||
|
||||
/* create socket in desired blocking mode */
|
||||
server_s = sock_create(blkmode);
|
||||
if (server_s < 0) return server_s;
|
||||
|
||||
/* set to close socket on exec() */
|
||||
if (fcntl(server_s, F_SETFD, 1) == -1)
|
||||
{
|
||||
#ifdef LOG
|
||||
log(0, "sock_create_server():"
|
||||
" can't set close-on-exec on socket (%s)",
|
||||
strerror(errno));
|
||||
#endif
|
||||
return RC_ERR;
|
||||
}
|
||||
/* set reuse socket address */
|
||||
if (setsockopt(server_s, SOL_SOCKET,
|
||||
SO_REUSEADDR, (void *)&sock_opt,
|
||||
sizeof(sock_opt)) == -1)
|
||||
{
|
||||
#ifdef LOG
|
||||
log(0, "sock_create_server():"
|
||||
" can't set socket to SO_REUSEADDR (%s)",
|
||||
strerror(errno));
|
||||
#endif
|
||||
return RC_ERR;
|
||||
}
|
||||
/* ajust socket rx and tx buffer sizes */
|
||||
sock_opt = SOCKBUFSIZE;
|
||||
if ((setsockopt(server_s, SOL_SOCKET,
|
||||
SO_SNDBUF, (void *)&sock_opt,
|
||||
sizeof(sock_opt)) == -1) ||
|
||||
(setsockopt(server_s, SOL_SOCKET,
|
||||
SO_RCVBUF, (void *)&sock_opt,
|
||||
sizeof(sock_opt)) == -1))
|
||||
{
|
||||
#ifdef LOG
|
||||
log(0, "sock_create_server():"
|
||||
" can't set socket TRX buffers sizes (%s)",
|
||||
strerror(errno));
|
||||
#endif
|
||||
return RC_ERR;
|
||||
}
|
||||
|
||||
memset(&server_sockaddr, 0, sizeof(server_sockaddr));
|
||||
server_sockaddr.sin_family = AF_INET;
|
||||
|
||||
if (server_ip != NULL)
|
||||
inet_aton(server_ip, &server_sockaddr.sin_addr);
|
||||
else
|
||||
server_sockaddr.sin_addr.s_addr = htonl(INADDR_ANY);
|
||||
|
||||
server_sockaddr.sin_port = htons(server_port);
|
||||
|
||||
if (bind(server_s, (struct sockaddr *) & server_sockaddr,
|
||||
sizeof(server_sockaddr)) == -1)
|
||||
{
|
||||
#ifdef LOG
|
||||
log(0, "sock_create_server():"
|
||||
" unable to bind() socket (%s)",
|
||||
strerror(errno));
|
||||
#endif
|
||||
return RC_ERR;
|
||||
}
|
||||
|
||||
/* let's listen */
|
||||
if (listen(server_s, BACKLOG) == -1)
|
||||
{
|
||||
#ifdef LOG
|
||||
log(0, "sock_create_server():"
|
||||
" unable to listen() on socket (%s)",
|
||||
strerror(errno));
|
||||
#endif
|
||||
exit(errno);
|
||||
}
|
||||
return server_s;
|
||||
}
|
||||
|
||||
/*
|
||||
* Accept connection from SERVER_SD - server socket descriptor
|
||||
* and create socket in BLKMODE blocking mode
|
||||
* (if non-zero - socket is nonblocking)
|
||||
*
|
||||
* Return: socket descriptor, otherwise RC_ERR if there some errors;
|
||||
* RMT_ADDR - ptr to connection info structure
|
||||
*/
|
||||
int
|
||||
sock_accept(int server_sd, struct sockaddr_in *rmt_addr, int blkmode)
|
||||
{
|
||||
int sd, sock_opt = SOCKBUFSIZE;
|
||||
int rmt_len = sizeof(struct sockaddr_in);
|
||||
|
||||
sd = accept(server_sd, (struct sockaddr *) rmt_addr,
|
||||
(socklen_t *) &rmt_len);
|
||||
if (sd == -1)
|
||||
{
|
||||
if (errno != EAGAIN && errno != EWOULDBLOCK)
|
||||
/* some errors caused */
|
||||
#ifdef LOG
|
||||
log(0, "sock_accept(): error in accept() (%s)", strerror(errno));
|
||||
#endif
|
||||
return RC_ERR;
|
||||
}
|
||||
/* tune socket */
|
||||
if (sock_set_blkmode(sd, blkmode) == RC_ERR)
|
||||
{
|
||||
#ifdef LOG
|
||||
log(0, "sock_accept(): can't set socket blocking mode (%s)",
|
||||
strerror(errno));
|
||||
#endif
|
||||
close(sd);
|
||||
return RC_ERR;
|
||||
}
|
||||
/* ajust socket rx and tx buffer sizes */
|
||||
if ((setsockopt(sd, SOL_SOCKET,
|
||||
SO_SNDBUF, (void *)&sock_opt,
|
||||
sizeof(sock_opt)) == -1) ||
|
||||
(setsockopt(sd, SOL_SOCKET,
|
||||
SO_RCVBUF, (void *)&sock_opt,
|
||||
sizeof(sock_opt)) == -1))
|
||||
{
|
||||
#ifdef LOG
|
||||
log(0, "sock_accept():"
|
||||
" can't set socket TRX buffer sizes (%s)",
|
||||
strerror(errno));
|
||||
#endif
|
||||
return RC_ERR;
|
||||
}
|
||||
return sd;
|
||||
}
|
54
src/sock.h
Normal file
54
src/sock.h
Normal file
@ -0,0 +1,54 @@
|
||||
/*
|
||||
* OpenMODBUS/TCP to RS-232/485 MODBUS RTU gateway
|
||||
*
|
||||
* sock.h - socket manipulation routines
|
||||
*
|
||||
* Copyright (c) 2002-2003, Victor Antonovich (avmlink@vlink.ru)
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: sock.h,v 1.1 2003/09/13 20:38:45 kapyar Exp $
|
||||
*/
|
||||
|
||||
#ifndef _SOCKUTILS_H
|
||||
#define _SOCKUTILS_H
|
||||
|
||||
#include "globals.h"
|
||||
#ifdef LOG
|
||||
#include "log.h"
|
||||
#endif
|
||||
|
||||
#define BACKLOG 5
|
||||
|
||||
/* Socket buffers size */
|
||||
#define SOCKBUFSIZE 512
|
||||
|
||||
int sock_set_blkmode(int sd, int blkmode);
|
||||
int sock_create(int blkmode);
|
||||
int sock_create_server(char *server_ip,
|
||||
unsigned short server_port, int blkmode);
|
||||
int sock_accept(int server_sd,
|
||||
struct sockaddr_in *rmt_addr, int blkmode);
|
||||
|
||||
#endif
|
162
src/state.c
Normal file
162
src/state.c
Normal file
@ -0,0 +1,162 @@
|
||||
/*
|
||||
* OpenMODBUS/TCP to RS-232/485 MODBUS RTU gateway
|
||||
*
|
||||
* state.c - state management procedures
|
||||
*
|
||||
* Copyright (c) 2002-2003, Victor Antonovich (avmlink@vlink.ru)
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: state.c,v 1.1 2003/09/13 20:38:33 kapyar Exp $
|
||||
*/
|
||||
|
||||
#include "state.h"
|
||||
|
||||
/*
|
||||
* Search for first client connection in state STATE
|
||||
* Parameters: CONN - ptr to queue element
|
||||
* (if NULL - search from queue begin),
|
||||
* QUEUE - ptr to the queue;
|
||||
* Return: pointer to queue element
|
||||
* or NULL if none found
|
||||
*/
|
||||
conn_t *
|
||||
state_conn_search(queue_t *queue, conn_t *conn, int state)
|
||||
{
|
||||
int len = queue->len;
|
||||
|
||||
/* check for zero queue length */
|
||||
if (!queue->len) return NULL;
|
||||
|
||||
if (conn == NULL)
|
||||
conn = queue->beg;
|
||||
else
|
||||
conn = queue_next_elem(queue, conn);
|
||||
|
||||
while (len--)
|
||||
{
|
||||
if (conn->state == state)
|
||||
return conn;
|
||||
conn = queue_next_elem(queue, conn);
|
||||
}
|
||||
|
||||
return NULL; /* none found */
|
||||
}
|
||||
|
||||
/*
|
||||
* Set connection CONN to STATE
|
||||
*/
|
||||
void
|
||||
state_conn_set(conn_t *conn, int state)
|
||||
{
|
||||
switch (state)
|
||||
{
|
||||
case CONN_HEADER:
|
||||
conn->ctr = 0;
|
||||
#ifdef DEBUG
|
||||
log(5, "conn[%s]: state now is CONN_HEADER",
|
||||
inet_ntoa(conn->sockaddr.sin_addr));
|
||||
#endif
|
||||
break;
|
||||
#ifdef DEBUG
|
||||
case CONN_RQST:
|
||||
log(5, "conn[%s]: state now is CONN_RQST",
|
||||
inet_ntoa(conn->sockaddr.sin_addr));
|
||||
break;
|
||||
case CONN_TTY:
|
||||
log(5, "conn[%s]: state now is CONN_TTY",
|
||||
inet_ntoa(conn->sockaddr.sin_addr));
|
||||
break;
|
||||
#endif
|
||||
case CONN_RESP:
|
||||
conn->ctr = 0;
|
||||
#ifdef DEBUG
|
||||
log(5, "conn[%s]: state now is CONN_RESP",
|
||||
inet_ntoa(conn->sockaddr.sin_addr));
|
||||
#endif
|
||||
break;
|
||||
default:
|
||||
/* unknown state, exiting */
|
||||
#ifdef DEBUG
|
||||
log(5, "conn_set_state([%s]) - invalid state (%d)",
|
||||
inet_ntoa(conn->sockaddr.sin_addr), state);
|
||||
#endif
|
||||
exit (-1);
|
||||
}
|
||||
conn->state = state;
|
||||
/* reset timeout value */
|
||||
conn->timeout = cfg.conntimeout;
|
||||
}
|
||||
|
||||
/*
|
||||
* Set tty device to STATE
|
||||
*/
|
||||
void
|
||||
state_tty_set(ttydata_t *mod, int state)
|
||||
{
|
||||
switch (state)
|
||||
{
|
||||
case TTY_PAUSE:
|
||||
mod->trynum = 0;
|
||||
mod->timer = (unsigned long)cfg.rqstpause * 1000l;
|
||||
#ifdef DEBUG
|
||||
log(5, "tty: state now is TTY_PAUSE");
|
||||
#endif
|
||||
break;
|
||||
case TTY_READY:
|
||||
mod->trynum = 0;
|
||||
mod->timer = 0l;
|
||||
#ifdef DEBUG
|
||||
log(5, "tty: state now is TTY_READY");
|
||||
#endif
|
||||
break;
|
||||
case TTY_RQST:
|
||||
mod->ptrbuf = 0;
|
||||
mod->timer = 0l;
|
||||
mod->trynum = mod->trynum ? --mod->trynum : (unsigned)cfg.maxtry;
|
||||
#ifdef DEBUG
|
||||
log(5, "tty: state now is TTY_RQST");
|
||||
#endif
|
||||
#ifndef NOSILENT
|
||||
tty_delay(DV(2, cfg.ttyspeed));
|
||||
#endif
|
||||
break;
|
||||
case TTY_RESP:
|
||||
mod->ptrbuf = 0;
|
||||
/* XXX need real recv length? */
|
||||
mod->rxlen = TTY_BUFSIZE;
|
||||
mod->timer = cfg.respwait * 1000l + DV(mod->txlen, mod->speed);
|
||||
#ifdef DEBUG
|
||||
log(5, "tty: state now is TTY_RESP");
|
||||
#endif
|
||||
break;
|
||||
default:
|
||||
/* unknown state, exiting */
|
||||
#ifdef DEBUG
|
||||
log(5, "tty_set_state() - invalid state (%d)", state);
|
||||
#endif
|
||||
exit (-1);
|
||||
}
|
||||
mod->state = state;
|
||||
}
|
51
src/state.h
Normal file
51
src/state.h
Normal file
@ -0,0 +1,51 @@
|
||||
/*
|
||||
* OpenMODBUS/TCP to RS-232/485 MODBUS RTU gateway
|
||||
*
|
||||
* state.h - state management procedures
|
||||
*
|
||||
* Copyright (c) 2002-2003, Victor Antonovich (avmlink@vlink.ru)
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: state.h,v 1.1 2003/09/13 20:38:45 kapyar Exp $
|
||||
*/
|
||||
|
||||
#ifndef _STATE_H
|
||||
#define _STATE_H
|
||||
|
||||
#include "globals.h"
|
||||
#include "conn.h"
|
||||
#include "tty.h"
|
||||
#include "queue.h"
|
||||
#include "cfg.h"
|
||||
#ifdef LOG
|
||||
#include "log.h"
|
||||
#endif
|
||||
|
||||
/* prototypes */
|
||||
conn_t *state_conn_search(queue_t *queue, conn_t *conn, int state);
|
||||
void state_conn_set(conn_t *conn, int state);
|
||||
void state_tty_set(ttydata_t *mod, int state);
|
||||
|
||||
#endif /* _STATE_H */
|
363
src/tty.c
Normal file
363
src/tty.c
Normal file
@ -0,0 +1,363 @@
|
||||
/*
|
||||
* OpenMODBUS/TCP to RS-232/485 MODBUS RTU gateway
|
||||
*
|
||||
* tty.c - terminal I/O related procedures
|
||||
*
|
||||
* Copyright (c) 2002-2003, Victor Antonovich (avmlink@vlink.ru)
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: tty.c,v 1.1 2003/09/13 20:38:28 kapyar Exp $
|
||||
*/
|
||||
|
||||
#include "tty.h"
|
||||
|
||||
extern cfg_t cfg;
|
||||
|
||||
static int tty_break;
|
||||
|
||||
/*
|
||||
* Flag signal SIG
|
||||
*/
|
||||
void
|
||||
tty_sighup(void)
|
||||
{
|
||||
tty_break = TRUE;
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Init serial link parameters MOD to PORT name, SPEED and TRXCNTL type
|
||||
*/
|
||||
void
|
||||
#ifdef TRXCTL
|
||||
tty_init(ttydata_t *mod, char *port, int speed, int trxcntl)
|
||||
#else
|
||||
tty_init(ttydata_t *mod, char *port, int speed)
|
||||
#endif
|
||||
{
|
||||
mod->fd = -1;
|
||||
mod->port = port;
|
||||
mod->speed = speed;
|
||||
#ifdef TRXCTL
|
||||
mod->trxcntl = trxcntl;
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef HAVE_LIBUTIL
|
||||
char *tty_get_name(char *ttyfullname);
|
||||
|
||||
char *
|
||||
tty_get_name(char *ttyfullname)
|
||||
{
|
||||
static char ttynamebuf[INTBUFSIZE + 1];
|
||||
char *ttyname = ttynamebuf, *ttynameptr = ttyname;
|
||||
strncpy(ttynamebuf, ttyfullname, INTBUFSIZE);
|
||||
for (ttynameptr = strtok(ttynamebuf, "/");
|
||||
ttynameptr;
|
||||
ttynameptr = strtok(NULL, "/"))
|
||||
{
|
||||
ttyname = ttynameptr;
|
||||
}
|
||||
return ttyname;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* Opening serial link whith parameters in MOD
|
||||
*/
|
||||
int
|
||||
tty_open(ttydata_t *mod)
|
||||
{
|
||||
#ifdef HAVE_LIBUTIL
|
||||
int buferr, uuerr;
|
||||
char *ttyname = tty_get_name(mod->port);
|
||||
#endif
|
||||
if (mod->fd > 0)
|
||||
return RC_AOPEN; /* if already open... */
|
||||
tty_break = FALSE;
|
||||
#ifdef HAVE_LIBUTIL
|
||||
if ((uuerr = uu_lock(ttyname)) != UU_LOCK_OK)
|
||||
{
|
||||
buferr = errno;
|
||||
#ifdef LOG
|
||||
log(0, "uu_lock(): can't lock tty device %s (%s)",
|
||||
ttyname, uu_lockerr(uuerr));
|
||||
#endif
|
||||
errno = buferr;
|
||||
return RC_ERR;
|
||||
}
|
||||
#endif
|
||||
mod->fd = open(mod->port, O_RDWR | O_NONBLOCK);
|
||||
if (mod->fd < 0)
|
||||
return RC_ERR; /* attempt failed */
|
||||
return tty_set_attr(mod);
|
||||
}
|
||||
|
||||
/*
|
||||
* Setting up tty device MOD attributes
|
||||
*/
|
||||
int
|
||||
tty_set_attr(ttydata_t *mod)
|
||||
{
|
||||
int flag;
|
||||
|
||||
if (tcgetattr(mod->fd, &mod->savedtios))
|
||||
return RC_ERR;
|
||||
memcpy(&mod->tios, &mod->savedtios, sizeof(mod->tios));
|
||||
mod->tios.c_cflag &= ~(CSTOPB | PARENB | PARODD | CRTSCTS);
|
||||
mod->tios.c_cflag |= CS8 | CREAD | CLOCAL;
|
||||
mod->tios.c_iflag = FALSE;
|
||||
mod->tios.c_oflag = FALSE;
|
||||
mod->tios.c_lflag = FALSE;
|
||||
mod->tios.c_cc[VTIME] = 0;
|
||||
mod->tios.c_cc[VMIN] = 1;
|
||||
cfsetspeed(&mod->tios, tty_transpeed(mod->speed));
|
||||
if (tcsetattr(mod->fd, TCSANOW, &mod->tios))
|
||||
return RC_ERR;
|
||||
#if defined(TIOCSETA)
|
||||
ioctl(mod->fd, TIOCSETA, &mod->tios);
|
||||
#else
|
||||
/* if TIOCSETA is not defined, try to fallback to TCSETA */
|
||||
ioctl(mod->fd, TCSETA, &mod->tios);
|
||||
#endif
|
||||
tcflush(mod->fd, TCIOFLUSH);
|
||||
#ifdef TRXCTL
|
||||
tty_clr_rts(mod->fd);
|
||||
#endif
|
||||
flag = fcntl(mod->fd, F_GETFL, 0);
|
||||
if (flag < 0)
|
||||
return RC_ERR;
|
||||
return fcntl(mod->fd, F_SETFL, flag | O_NONBLOCK);
|
||||
}
|
||||
|
||||
/*
|
||||
* Translate integer SPEED value to speed_t constant
|
||||
*/
|
||||
speed_t
|
||||
tty_transpeed(int speed)
|
||||
{
|
||||
speed_t tspeed;
|
||||
switch (speed)
|
||||
{
|
||||
case 0:
|
||||
tspeed = B0;
|
||||
break;
|
||||
#if defined(B50)
|
||||
case 50:
|
||||
tspeed = B50;
|
||||
break;
|
||||
#endif
|
||||
#if defined(B75)
|
||||
case 75:
|
||||
tspeed = B75;
|
||||
break;
|
||||
#endif
|
||||
#if defined(B110)
|
||||
case 110:
|
||||
tspeed = B110;
|
||||
break;
|
||||
#endif
|
||||
#if defined(B134)
|
||||
case 134:
|
||||
tspeed = B134;
|
||||
break;
|
||||
#endif
|
||||
#if defined(B150)
|
||||
case 150:
|
||||
tspeed = B150;
|
||||
break;
|
||||
#endif
|
||||
#if defined(B200)
|
||||
case 200:
|
||||
tspeed = B200;
|
||||
break;
|
||||
#endif
|
||||
#if defined(B300)
|
||||
case 300:
|
||||
tspeed = B300;
|
||||
break;
|
||||
#endif
|
||||
#if defined(B600)
|
||||
case 600:
|
||||
tspeed = B600;
|
||||
break;
|
||||
#endif
|
||||
#if defined(B1200)
|
||||
case 1200:
|
||||
tspeed = B1200;
|
||||
break;
|
||||
#endif
|
||||
#if defined(B1800)
|
||||
case 1800:
|
||||
tspeed = B1800;
|
||||
break;
|
||||
#endif
|
||||
#if defined(B2400)
|
||||
case 2400:
|
||||
tspeed = B2400;
|
||||
break;
|
||||
#endif
|
||||
#if defined(B4800)
|
||||
case 4800:
|
||||
tspeed = B4800;
|
||||
break;
|
||||
#endif
|
||||
#if defined(B7200)
|
||||
case 7200:
|
||||
tspeed = B7200;
|
||||
break;
|
||||
#endif
|
||||
#if defined(B9600)
|
||||
case 9600:
|
||||
tspeed = B9600;
|
||||
break;
|
||||
#endif
|
||||
#if defined(B12000)
|
||||
case 12000:
|
||||
tspeed = B12000;
|
||||
break;
|
||||
#endif
|
||||
#if defined(B14400)
|
||||
case 14400:
|
||||
tspeed = B14400;
|
||||
break;
|
||||
#endif
|
||||
#if defined(B19200)
|
||||
case 19200:
|
||||
tspeed = B19200;
|
||||
break;
|
||||
#elif defined(EXTA)
|
||||
case 19200:
|
||||
tspeed = EXTA;
|
||||
break;
|
||||
#endif
|
||||
#if defined(B38400)
|
||||
case 38400:
|
||||
tspeed = B38400;
|
||||
break;
|
||||
#elif defined(EXTB)
|
||||
case 38400:
|
||||
tspeed = EXTB;
|
||||
break;
|
||||
#endif
|
||||
#if defined(B57600)
|
||||
case 57600:
|
||||
tspeed = B57600;
|
||||
break;
|
||||
#endif
|
||||
#if defined(B115200)
|
||||
case 115200:
|
||||
tspeed = B115200;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
tspeed = DEFAULT_BSPEED;
|
||||
}
|
||||
return tspeed;
|
||||
}
|
||||
|
||||
/*
|
||||
* Prepare tty device MOD to closing
|
||||
*/
|
||||
int
|
||||
tty_cooked(ttydata_t *mod)
|
||||
{
|
||||
signal(SIGHUP, SIG_IGN);
|
||||
signal(SIGPIPE, SIG_IGN);
|
||||
if (!isatty(mod->fd))
|
||||
return RC_ERR;
|
||||
if (tcsetattr(mod->fd, TCSAFLUSH, &mod->savedtios))
|
||||
return RC_ERR;
|
||||
return RC_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* Closing tty device MOD
|
||||
*/
|
||||
int
|
||||
tty_close(ttydata_t *mod)
|
||||
{
|
||||
#ifdef HAVE_LIBUTIL
|
||||
int buferr;
|
||||
char *ttyname = tty_get_name(mod->port);
|
||||
#endif
|
||||
if (mod->fd < 0)
|
||||
return RC_ACLOSE; /* already closed */
|
||||
if (tty_cooked(mod))
|
||||
return RC_ERR;
|
||||
#ifdef HAVE_LIBUTIL
|
||||
if (close(mod->fd))
|
||||
return RC_ERR;
|
||||
if (uu_unlock(ttyname))
|
||||
{
|
||||
buferr = errno;
|
||||
#ifdef LOG
|
||||
log(0, "uu_lock(): can't unlock tty device %s",
|
||||
ttyname);
|
||||
#endif
|
||||
errno = buferr;
|
||||
return RC_ERR;
|
||||
}
|
||||
return RC_OK;
|
||||
#else
|
||||
return close(mod->fd);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef TRXCTL
|
||||
/* Set RTS line to active state */
|
||||
void
|
||||
tty_set_rts(int fd)
|
||||
{
|
||||
int mstat = TIOCM_RTS;
|
||||
ioctl(fd, TIOCMBIS, &mstat);
|
||||
}
|
||||
|
||||
/* Set RTS line to passive state */
|
||||
void
|
||||
tty_clr_rts(int fd)
|
||||
{
|
||||
int mstat = TIOCM_RTS;
|
||||
ioctl(fd, TIOCMBIC, &mstat);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Delay for USEC microsecs
|
||||
*/
|
||||
void
|
||||
tty_delay(int usec)
|
||||
{
|
||||
struct timeval tv, ttv;
|
||||
long ts;
|
||||
gettimeofday(&tv, NULL);
|
||||
do
|
||||
{
|
||||
(void)gettimeofday(&ttv, NULL);
|
||||
ts = 1000000 * (ttv.tv_sec - tv.tv_sec) + (ttv.tv_usec - tv.tv_usec);
|
||||
} while (ts < usec && !tty_break);
|
||||
}
|
||||
|
112
src/tty.h
Normal file
112
src/tty.h
Normal file
@ -0,0 +1,112 @@
|
||||
/*
|
||||
* OpenMODBUS/TCP to RS-232/485 MODBUS RTU gateway
|
||||
*
|
||||
* tty.h - terminal I/O related procedures
|
||||
*
|
||||
* Copyright (c) 2002-2003, Victor Antonovich (avmlink@vlink.ru)
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: tty.h,v 1.1 2003/09/13 20:38:28 kapyar Exp $
|
||||
*/
|
||||
|
||||
#ifndef _TTY_H
|
||||
#define _TTY_H
|
||||
|
||||
#include "globals.h"
|
||||
#include "cfg.h"
|
||||
|
||||
/*
|
||||
* Delay value calculation macros
|
||||
*/
|
||||
#define DV(x, y) (x * 10000000l / y)
|
||||
|
||||
/*
|
||||
* Default tty port parameters
|
||||
*/
|
||||
#define DEFAULT_PORT "/dev/cuaa0"
|
||||
#define DEFAULT_SPEED 19200
|
||||
#define DEFAULT_BSPEED B19200
|
||||
|
||||
/*
|
||||
* Maximum tty buffer size
|
||||
*/
|
||||
#define TTY_BUFSIZE 256
|
||||
|
||||
/*
|
||||
* TRX control types
|
||||
*/
|
||||
#ifdef TRX_CTL
|
||||
#define TRX_ADDC 0
|
||||
#define TRX_RTS !TRX_ADDC
|
||||
#endif
|
||||
|
||||
/*
|
||||
* TTY device FSM states
|
||||
*/
|
||||
#define TTY_PAUSE 0
|
||||
#define TTY_READY 1
|
||||
#define TTY_RQST 2
|
||||
#define TTY_RESP 3
|
||||
|
||||
/*
|
||||
* TTY related data storage structure
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
int fd; /* tty file descriptor */
|
||||
int speed; /* serial port speed */
|
||||
char *port; /* serial port device name */
|
||||
#ifdef TRXCTL
|
||||
int trxcntl; /* trx control type (0 - ADDC, RTS otherwise) */
|
||||
#endif
|
||||
struct termios tios; /* working termios structure */
|
||||
struct termios savedtios; /* saved termios structure */
|
||||
int state; /* current state */
|
||||
unsigned int trynum; /* try counter */
|
||||
unsigned long timer; /* time tracking variable */
|
||||
unsigned int txlen; /* tx data length */
|
||||
unsigned int rxlen; /* rx data length */
|
||||
unsigned char ptrbuf; /* ptr in the buffer */
|
||||
unsigned char txbuf[TTY_BUFSIZE]; /* transmitting buffer */
|
||||
unsigned char rxbuf[TTY_BUFSIZE]; /* receiving buffer */
|
||||
} ttydata_t;
|
||||
|
||||
/* prototypes */
|
||||
void tty_sighup(void);
|
||||
#ifdef TRXCTL
|
||||
void tty_init(ttydata_t *mod, char *port, int speed, int trxcntl);
|
||||
#else
|
||||
void tty_init(ttydata_t *mod, char *port, int speed);
|
||||
#endif
|
||||
int tty_open(ttydata_t *mod);
|
||||
int tty_set_attr(ttydata_t *mod);
|
||||
speed_t tty_transpeed(int speed);
|
||||
int tty_cooked(ttydata_t *mod);
|
||||
int tty_close(ttydata_t *mod);
|
||||
void tty_set_rts(int fd);
|
||||
void tty_clr_rts(int fd);
|
||||
void tty_delay(int usec);
|
||||
|
||||
#endif /* _TTY_H */
|
1
stamp-h.in
Normal file
1
stamp-h.in
Normal file
@ -0,0 +1 @@
|
||||
timestamp
|
Loading…
Reference in New Issue
Block a user