Compare commits

..

10 Commits

Author SHA1 Message Date
94721c2b0e fix crash due to length underflow 2021-11-11 11:49:32 +01:00
bf0e755913 add new checksum: bitsum 2021-11-11 11:49:32 +01:00
51e4a0749d make "ifdef CALC" also consider SYNAPPS variable
change the ifdefs to the same expression used in CONFIG_STREAM
2021-11-05 11:42:48 +01:00
4cdace3ffe make "stream" in DBD and other file names explicit
The LIBRARY_* variables may specify *multiple* libraries.
(So they can't be used as part of file names.)
2021-11-05 11:42:48 +01:00
d19b16d096 fix strncpy warning 2021-11-05 11:21:21 +01:00
b1e0d63c6b Canonical handling of user include files 2021-11-05 10:14:21 +01:00
d1b43b879c strncasecmp does exist when compiling for Windows on MinGW 2021-11-05 10:13:58 +01:00
6b0ee5e946 Conditionally use tirpc if defined 2021-09-21 13:01:32 +01:00
a0d1b35862 Add preprocessor definition for static PCRE 2021-09-21 12:58:20 +01:00
dfbd308d46 32 bit Windows needs wrapper for calling convention reasons 2021-09-01 10:13:58 +02:00
10 changed files with 240 additions and 75 deletions

View File

@ -1,14 +1,29 @@
#CONFIG # CONFIG - Load build configuration data
include $(TOP)/configure/CONFIG_APP #
# Add any changes to make definitions here # Do not make changes to this file!
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040 # Allow user to override where the build rules come from
#CROSS_COMPILER_TARGET_ARCHS = RULES = $(EPICS_BASE)
# Use this when your IOC and the host use different paths # RELEASE files point to other application tops
# to access the application. Typically this will be include $(TOP)/configure/RELEASE
# used with the Microsoft FTP server or with NFS mounts. Use -include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH)
# is indicated by failure of the cdCommands script on -include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH).Common
# vxWorks. You must rebuild in the iocBoot directory ifdef T_A
# before this takes effect. -include $(TOP)/configure/RELEASE.Common.$(T_A)
#IOCS_APPL_TOP = <the top of the application as seen by the IOC> -include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A)
endif
CONFIG = $(RULES)/configure
include $(CONFIG)/CONFIG
# Override the Base definition:
INSTALL_LOCATION = $(TOP)
# CONFIG_SITE files contain other build configuration settings
include $(TOP)/configure/CONFIG_SITE
-include $(TOP)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).Common
ifdef T_A
-include $(TOP)/configure/CONFIG_SITE.Common.$(T_A)
-include $(TOP)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A)
endif

View File

@ -1,26 +0,0 @@
# CONFIG_APP
include $(TOP)/configure/RELEASE
-include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH)
-include $(TOP)/configure/RELEASE.Common.$(T_A)
-include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A)
ifneq ($(wildcard $(EPICS_BASE)/configure),)
CONFIG=$(EPICS_BASE)/configure
else
CONFIG=$(EPICS_BASE)/config
DIRS += config
endif
include $(CONFIG)/CONFIG
INSTALL_LOCATION = $(TOP)
ifdef INSTALL_LOCATION_APP
INSTALL_LOCATION = $(INSTALL_LOCATION_APP)
endif
ifdef T_A
-include $(TOP)/configure/O.$(T_A)/CONFIG_APP_INCLUDE
endif
# dbst based database optimization (default: NO)
DB_OPT = NO

40
configure/CONFIG_SITE Normal file
View File

@ -0,0 +1,40 @@
# CONFIG_SITE
-include $(SUPPORT)/configure/CONFIG_SITE
# Make any application-specific changes to the EPICS build
# configuration variables in this file.
#
# Host/target specific settings can be specified in files named
# CONFIG_SITE.$(EPICS_HOST_ARCH).Common
# CONFIG_SITE.Common.$(T_A)
# CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A)
# CHECK_RELEASE controls the consistency checking of the support
# applications pointed to by the RELEASE* files.
# Normally CHECK_RELEASE should be set to YES.
# Set CHECK_RELEASE to NO to disable checking completely.
# Set CHECK_RELEASE to WARN to perform consistency checking but
# continue building even if conflicts are found.
CHECK_RELEASE = YES
# Set this when you only want to compile this application
# for a subset of the cross-compiled target architectures
# that Base is built for.
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-ppc32
# To install files into a location other than $(TOP) define
# INSTALL_LOCATION here.
#INSTALL_LOCATION=</absolute/path/to/install/top>
# Set this when the IOC and build host use different paths
# to the install location. This may be needed to boot from
# a Microsoft FTP server say, or on some NFS configurations.
#IOCS_APPL_TOP = </IOC's/absolute/path/to/install/top>
# These allow developers to override the CONFIG_SITE variable
# settings without having to modify the configure/CONFIG_SITE
# file itself.
-include $(TOP)/../CONFIG_SITE.local
-include $(TOP)/../configure/CONFIG_SITE.local
-include $(TOP)/configure/CONFIG_SITE.local

View File

@ -2,7 +2,7 @@
TOP=.. TOP=..
include $(TOP)/configure/CONFIG_APP include $(TOP)/configure/CONFIG
# Set the following to NO to disable consistency checking of # Set the following to NO to disable consistency checking of
# the support applications defined in $(TOP)/configure/RELEASE # the support applications defined in $(TOP)/configure/RELEASE

64
src/ChecksumConverter.cc Executable file → Normal file
View File

@ -45,14 +45,20 @@
#endif #endif
#include <ctype.h> #include <ctype.h>
#if defined(vxWorks) || defined(_WIN32) || defined(__rtems__) #ifdef _MSC_VER
// These systems have no strncasecmp #define strncasecmp _strnicmp
static int strncasecmp(const char *s1, const char *s2, size_t n) #endif
#if defined(vxWorks) || defined(__rtems__)
// These systems have no strncasecmp at the moment
// But avoid compiler errors in case strncasecmp exists in future versions
static int mystrncasecmp(const char *s1, const char *s2, size_t n)
{ {
int r=0; int r=0;
while (n && (r = toupper(*s1)-toupper(*s2)) == 0) { n--; s1++; s2++; }; while (n && (r = toupper(*s1)-toupper(*s2)) == 0) { n--; s1++; s2++; };
return r; return r;
} }
#define strncasecmp mystrncasecmp
#endif #endif
#include "StreamFormatConverter.h" #include "StreamFormatConverter.h"
@ -83,6 +89,33 @@ static uint32_t xor7(const uint8_t* data, size_t len, uint32_t sum)
return xor8(data, len, sum) & 0x7F; return xor8(data, len, sum) & 0x7F;
} }
static uint32_t bitsum(const uint8_t* data, size_t len, uint32_t sum)
{
// number of set bits in each byte
const uint8_t table[256] = {
0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,
1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,
1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,
2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,
2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,
2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8};
while (len--)
{
sum += table[*data++];
}
return sum;
}
static uint32_t crc_0x07(const uint8_t* data, size_t len, uint32_t crc) static uint32_t crc_0x07(const uint8_t* data, size_t len, uint32_t crc)
{ {
// x^8 + x^2 + x^1 + x^0 (0x07) // x^8 + x^2 + x^1 + x^0 (0x07)
@ -612,7 +645,11 @@ static checksum checksumMap[] =
{"leybold", leybold, 0x00, 0x00, 1}, // 0x22 {"leybold", leybold, 0x00, 0x00, 1}, // 0x22
{"brksCryo",brksCryo, 0x00, 0x00, 1}, // 0x4A {"brksCryo",brksCryo, 0x00, 0x00, 1}, // 0x4A
{"lrc", lrc, 0x00, 0x00, 1}, // 0x23 {"lrc", lrc, 0x00, 0x00, 1}, // 0x23
{"hexlrc", hexlrc, 0x00, 0x00, 1} // 0xA7 {"hexlrc", hexlrc, 0x00, 0x00, 1}, // 0xA7
{"bitsum", bitsum, 0x00, 0x00, 1}, // 0x21
{"bitsum8", bitsum, 0x00, 0x00, 1}, // 0x21
{"bitsum16",bitsum, 0x0000, 0x0000, 2}, // 0x0021
{"bitsum32",bitsum, 0x00000000, 0x00000000, 4}, // 0x00000021
}; };
static uint32_t mask[5] = {0, 0xFF, 0xFFFF, 0xFFFFFF, 0xFFFFFFFF}; static uint32_t mask[5] = {0, 0xFF, 0xFFFF, 0xFFFFFF, 0xFFFFFFFF};
@ -697,8 +734,13 @@ printPseudo(const StreamFormat& format, StreamBuffer& output)
uint_fast8_t fnum = extract<uint8_t>(info); uint_fast8_t fnum = extract<uint8_t>(info);
size_t start = format.width; size_t start = format.width;
size_t length = output.length()-format.width; size_t length = output.length();
if (format.prec > 0) length -= format.prec; if (length >= start) length -= start;
else length = 0;
if (format.prec > 0) {
if (length >= (size_t)format.prec) length -= format.prec;
else length = 0;
}
debug("ChecksumConverter %s: output to check: \"%s\"\n", debug("ChecksumConverter %s: output to check: \"%s\"\n",
checksumMap[fnum].name, output.expand(start,length)()); checksumMap[fnum].name, output.expand(start,length)());
@ -771,9 +813,13 @@ scanPseudo(const StreamFormat& format, StreamBuffer& input, size_t& cursor)
uint32_t xorout = extract<uint32_t>(info); uint32_t xorout = extract<uint32_t>(info);
size_t start = format.width; size_t start = format.width;
uint_fast8_t fnum = extract<uint8_t>(info); uint_fast8_t fnum = extract<uint8_t>(info);
size_t length = cursor-format.width; size_t length = cursor;
if (length >= start) length -= start;
if (format.prec > 0) length -= format.prec; else length = 0;
if (format.prec > 0) {
if (length >= (size_t)format.prec) length -= format.prec;
else length = 0;
}
debug("ChecksumConverter %s: input to check: \"%s\n", debug("ChecksumConverter %s: input to check: \"%s\n",
checksumMap[fnum].name, input.expand(start,length)()); checksumMap[fnum].name, input.expand(start,length)());

View File

@ -27,12 +27,12 @@ include $(TOP)/configure/CONFIG
-include CONFIG_STREAM -include CONFIG_STREAM
-include ../CONFIG_STREAM -include ../CONFIG_STREAM
LIBRARY_DEFAULT = stream LIBRARY_IOC = stream
DBD += $(LIBRARY_DEFAULT).dbd DBD += stream.dbd
DBD += $(LIBRARY_DEFAULT)-base.dbd DBD += stream-base.dbd
ifdef CALC ifneq ($(words $(CALC) $(SYNAPPS)), 0)
DBD += $(LIBRARY_DEFAULT)-scalcout.dbd DBD += stream-scalcout.dbd
endif endif
ifdef ASYN ifdef ASYN
@ -42,7 +42,7 @@ $(warning Asyn not included! Didn't you set ASYN in your RELEASE file?)
endif endif
ifeq ($(LOADABLE_MODULE),YES) ifeq ($(LOADABLE_MODULE),YES)
SRCS += $(LIBRARY_DEFAULT)_registerRecordDeviceDriver.cpp SRCS += stream_registerRecordDeviceDriver.cpp
endif endif
SRCS += $(BUSSES:%=%Interface.cc) SRCS += $(BUSSES:%=%Interface.cc)
SRCS += $(FORMATS:%=%Converter.cc) SRCS += $(FORMATS:%=%Converter.cc)
@ -60,6 +60,9 @@ ifneq ($(words $(PCRE_LIB) $(PCRE_INCLUDE)),0)
LIB_SYS_LIBS_DEFAULT += pcre LIB_SYS_LIBS_DEFAULT += pcre
LIB_SYS_LIBS_WIN32 += $(PCRE_LIB)\\pcre LIB_SYS_LIBS_WIN32 += $(PCRE_LIB)\\pcre
SHRLIB_DEPLIB_DIRS += $(PCRE_LIB) SHRLIB_DEPLIB_DIRS += $(PCRE_LIB)
ifdef ENABLE_STATIC
CPPFLAGS += -DPCRE_STATIC
endif
endif endif
endif endif
@ -98,28 +101,28 @@ streamReferences: ../CONFIG_STREAM
$(PERL) ../makeref.pl Converter $(FORMATS) >> $@ $(PERL) ../makeref.pl Converter $(FORMATS) >> $@
# create stream-base.dbd from all RECORDTYPES except scalcout record # create stream-base.dbd from all RECORDTYPES except scalcout record
$(COMMON_DIR)/$(LIBRARY_DEFAULT)-base.dbd: ../CONFIG_STREAM $(COMMON_DIR)/stream-base.dbd: ../CONFIG_STREAM
$(PERL) ../makedbd.pl $(if $(ASYN),--with-asyn) $(if $(BASE_3_14),,-3.13) $(filter-out scalcout, $(RECORDTYPES)) > $@ $(PERL) ../makedbd.pl $(if $(ASYN),--with-asyn) $(if $(BASE_3_14),,-3.13) $(filter-out scalcout, $(RECORDTYPES)) > $@
$(LIBRARY_DEFAULT)-base.dbd$(DEP): ../CONFIG_STREAM stream-base.dbd$(DEP): ../CONFIG_STREAM
echo $(LIBRARY_DEFAULT)-base.dbd: $< > $@ echo stream-base.dbd: $< > $@
STREAM_DBD_FILES = $(LIBRARY_DEFAULT)-base.dbd STREAM_DBD_FILES = stream-base.dbd
ifdef CALC ifneq ($(words $(CALC) $(SYNAPPS)), 0)
# create stream-scalcout.dbd for scalcout record # create stream-scalcout.dbd for scalcout record
$(COMMON_DIR)/$(LIBRARY_DEFAULT)-scalcout.dbd: ../CONFIG_STREAM $(COMMON_DIR)/stream-scalcout.dbd: ../CONFIG_STREAM
$(PERL) ../makedbd.pl --rec-only scalcout > $@ $(PERL) ../makedbd.pl --rec-only scalcout > $@
$(LIBRARY_DEFAULT)-scalcout.dbd$(DEP): ../CONFIG_STREAM stream-scalcout.dbd$(DEP): ../CONFIG_STREAM
echo $(LIBRARY_DEFAULT)-scalcout.dbd: $< > $@ echo stream-scalcout.dbd: $< > $@
STREAM_DBD_FILES += $(LIBRARY_DEFAULT)-scalcout.dbd STREAM_DBD_FILES += stream-scalcout.dbd
endif endif
# create stream.dbd for all record types # create stream.dbd for all record types
$(COMMON_DIR)/$(LIBRARY_DEFAULT).dbd: ../CONFIG_STREAM $(COMMON_DIR)/stream.dbd: ../CONFIG_STREAM
$(PERL) ../makedbd.pl $(if $(ASYN),--with-asyn) $(if $(BASE_3_14),,-3.13) $(RECORDTYPES) > $@ $(PERL) ../makedbd.pl $(if $(ASYN),--with-asyn) $(if $(BASE_3_14),,-3.13) $(RECORDTYPES) > $@
$(LIBRARY_DEFAULT).dbd$(DEP): ../CONFIG_STREAM stream.dbd$(DEP): ../CONFIG_STREAM
echo $(LIBRARY_DEFAULT).dbd: $< > $@ echo stream.dbd: $< > $@

View File

@ -435,6 +435,14 @@ long streamReportRecord(const char* recordname)
return OK; return OK;
} }
#if defined(_WIN32) && !defined(_WIN64)
static const char* epicsThreadGetNameSelfWrapper(void)
{
return epicsThreadGetNameSelf();
}
#define epicsThreadGetNameSelf epicsThreadGetNameSelfWrapper
#endif
long Stream:: long Stream::
drvInit() drvInit()
{ {

View File

@ -43,7 +43,7 @@ static long readData(dbCommon *record, format_t *format)
strncmp(so->oval, so->val, sizeof(so->val))) strncmp(so->oval, so->val, sizeof(so->val)))
{ {
monitor_mask |= DBE_VALUE | DBE_LOG; monitor_mask |= DBE_VALUE | DBE_LOG;
strncpy(so->oval, so->val, sizeof(so->val)); strncpy(so->oval, so->val, sizeof(so->oval));
} }
if (monitor_mask) if (monitor_mask)
db_post_events(record, so->val, monitor_mask); db_post_events(record, so->val, monitor_mask);

View File

@ -78,6 +78,13 @@ endif
PROD_LIBS += $(EPICS_BASE_IOC_LIBS) PROD_LIBS += $(EPICS_BASE_IOC_LIBS)
# Some linux systems moved RPC related symbols to libtirpc
# Define TIRPC in configure/CONFIG_SITE in this case
ifeq ($(TIRPC),YES)
USR_INCLUDES_Linux += -I/usr/include/tirpc
PROD_SYS_LIBS_DEFAULT += tirpc
endif
# switch off annoying rset warnings in 3.16+ # switch off annoying rset warnings in 3.16+
CPPFLAGS += -DUSE_TYPED_RSET CPPFLAGS += -DUSE_TYPED_RSET

View File

@ -52,7 +52,11 @@ set protocol {
out "jamcrc %s %9.1<jamcrc>"; in "jamcrc %=s %9.1<jamcrc>"; out "jamcrc %s %9.1<jamcrc>"; in "jamcrc %=s %9.1<jamcrc>";
out "adler32 %s %9.1<adler32>"; in "adler32 %=s %9.1<adler32>"; out "adler32 %s %9.1<adler32>"; in "adler32 %=s %9.1<adler32>";
out "hexsum8 %s %9.1<hexsum8>"; in "hexsum8 %=s %9.1<hexsum8>"; out "hexsum8 %s %9.1<hexsum8>"; in "hexsum8 %=s %9.1<hexsum8>";
out "bitsum %s %9.1<bitsum>"; in "bitsum %=s %9.1<bitsum>";
out "bitsum8 %s %9.1<bitsum8>"; in "bitsum8 %=s %9.1<bitsum8>";
out "bitsum16 %s %9.1<bitsum16>"; in "bitsum16 %=s %9.1<bitsum16>";
out "bitsum32 %s %9.1<bitsum32>"; in "bitsum32 %=s %9.1<bitsum32>";
out "sum %s %09.1<sum>"; in "sum %=s %09.1<sum>"; out "sum %s %09.1<sum>"; in "sum %=s %09.1<sum>";
out "sum8 %s %09.1<sum8>"; in "sum8 %=s %09.1<sum8>"; out "sum8 %s %09.1<sum8>"; in "sum8 %=s %09.1<sum8>";
out "sum16 %s %09.1<sum16>"; in "sum16 %=s %09.1<sum16>"; out "sum16 %s %09.1<sum16>"; in "sum16 %=s %09.1<sum16>";
@ -88,6 +92,10 @@ set protocol {
out "jamcrc %s %09.1<jamcrc>"; in "jamcrc %=s %09.1<jamcrc>"; out "jamcrc %s %09.1<jamcrc>"; in "jamcrc %=s %09.1<jamcrc>";
out "adler32 %s %09.1<adler32>"; in "adler32 %=s %09.1<adler32>"; out "adler32 %s %09.1<adler32>"; in "adler32 %=s %09.1<adler32>";
out "hexsum8 %s %09.1<hexsum8>"; in "hexsum8 %=s %09.1<hexsum8>"; out "hexsum8 %s %09.1<hexsum8>"; in "hexsum8 %=s %09.1<hexsum8>";
out "bitsum %s %09.1<bitsum>"; in "bitsum %=s %09.1<bitsum>";
out "bitsum8 %s %09.1<bitsum8>"; in "bitsum8 %=s %09.1<bitsum8>";
out "bitsum16 %s %09.1<bitsum16>"; in "bitsum16 %=s %09.1<bitsum16>";
out "bitsum32 %s %09.1<bitsum32>"; in "bitsum32 %=s %09.1<bitsum32>";
out "sum %s %-9.1<sum>"; in "sum %=s %-9.1<sum>"; out "sum %s %-9.1<sum>"; in "sum %=s %-9.1<sum>";
out "sum8 %s %-9.1<sum8>"; in "sum8 %=s %-9.1<sum8>"; out "sum8 %s %-9.1<sum8>"; in "sum8 %=s %-9.1<sum8>";
@ -124,6 +132,10 @@ set protocol {
out "jamcrc %s %-9.1<jamcrc>"; in "jamcrc %=s %-9.1<jamcrc>"; out "jamcrc %s %-9.1<jamcrc>"; in "jamcrc %=s %-9.1<jamcrc>";
out "adler32 %s %-9.1<adler32>"; in "adler32 %=s %-9.1<adler32>"; out "adler32 %s %-9.1<adler32>"; in "adler32 %=s %-9.1<adler32>";
out "hexsum8 %s %-9.1<hexsum8>"; in "hexsum8 %=s %-9.1<hexsum8>"; out "hexsum8 %s %-9.1<hexsum8>"; in "hexsum8 %=s %-9.1<hexsum8>";
out "bitsum %s %-9.1<bitsum>"; in "bitsum %=s %-9.1<bitsum>";
out "bitsum8 %s %-9.1<bitsum8>"; in "bitsum8 %=s %-9.1<bitsum8>";
out "bitsum16 %s %-9.1<bitsum16>"; in "bitsum16 %=s %-9.1<bitsum16>";
out "bitsum32 %s %-9.1<bitsum32>"; in "bitsum32 %=s %-9.1<bitsum32>";
out "sum %s %#9.1<sum>"; in "sum %=s %#9.1<sum>"; out "sum %s %#9.1<sum>"; in "sum %=s %#9.1<sum>";
out "sum8 %s %#9.1<sum8>"; in "sum8 %=s %#9.1<sum8>"; out "sum8 %s %#9.1<sum8>"; in "sum8 %=s %#9.1<sum8>";
@ -160,7 +172,11 @@ set protocol {
out "jamcrc %s %#9.1<jamcrc>"; in "jamcrc %=s %#9.1<jamcrc>"; out "jamcrc %s %#9.1<jamcrc>"; in "jamcrc %=s %#9.1<jamcrc>";
out "adler32 %s %#9.1<adler32>"; in "adler32 %=s %#9.1<adler32>"; out "adler32 %s %#9.1<adler32>"; in "adler32 %=s %#9.1<adler32>";
out "hexsum8 %s %#9.1<hexsum8>"; in "hexsum8 %=s %#9.1<hexsum8>"; out "hexsum8 %s %#9.1<hexsum8>"; in "hexsum8 %=s %#9.1<hexsum8>";
out "bitsum %s %#9.1<bitsum>"; in "bitsum %=s %#9.1<bitsum>";
out "bitsum8 %s %#9.1<bitsum8>"; in "bitsum8 %=s %#9.1<bitsum8>";
out "bitsum16 %s %#9.1<bitsum16>"; in "bitsum16 %=s %#9.1<bitsum16>";
out "bitsum32 %s %#9.1<bitsum32>"; in "bitsum32 %=s %#9.1<bitsum32>";
out "sum %s %#09.1<sum>"; in "sum %=s %#09.1<sum>"; out "sum %s %#09.1<sum>"; in "sum %=s %#09.1<sum>";
out "sum8 %s %#09.1<sum8>"; in "sum8 %=s %#09.1<sum8>"; out "sum8 %s %#09.1<sum8>"; in "sum8 %=s %#09.1<sum8>";
out "sum16 %s %#09.1<sum16>"; in "sum16 %=s %#09.1<sum16>"; out "sum16 %s %#09.1<sum16>"; in "sum16 %=s %#09.1<sum16>";
@ -196,7 +212,11 @@ set protocol {
out "jamcrc %s %#09.1<jamcrc>"; in "jamcrc %=s %#09.1<jamcrc>"; out "jamcrc %s %#09.1<jamcrc>"; in "jamcrc %=s %#09.1<jamcrc>";
out "adler32 %s %#09.1<adler32>"; in "adler32 %=s %#09.1<adler32>"; out "adler32 %s %#09.1<adler32>"; in "adler32 %=s %#09.1<adler32>";
out "hexsum8 %s %#09.1<hexsum8>"; in "hexsum8 %=s %#09.1<hexsum8>"; out "hexsum8 %s %#09.1<hexsum8>"; in "hexsum8 %=s %#09.1<hexsum8>";
out "bitsum %s %#09.1<bitsum>"; in "bitsum %=s %#09.1<bitsum>";
out "bitsum8 %s %#09.1<bitsum8>"; in "bitsum8 %=s %#09.1<bitsum8>";
out "bitsum16 %s %#09.1<bitsum16>"; in "bitsum16 %=s %#09.1<bitsum16>";
out "bitsum32 %s %#09.1<bitsum32>"; in "bitsum32 %=s %#09.1<bitsum32>";
out "sum %s %#-9.1<sum>"; in "sum %=s %#-9.1<sum>"; out "sum %s %#-9.1<sum>"; in "sum %=s %#-9.1<sum>";
out "sum8 %s %#-9.1<sum8>"; in "sum8 %=s %#-9.1<sum8>"; out "sum8 %s %#-9.1<sum8>"; in "sum8 %=s %#-9.1<sum8>";
out "sum16 %s %#-9.1<sum16>"; in "sum16 %=s %#-9.1<sum16>"; out "sum16 %s %#-9.1<sum16>"; in "sum16 %=s %#-9.1<sum16>";
@ -232,6 +252,10 @@ set protocol {
out "jamcrc %s %#-9.1<jamcrc>"; in "jamcrc %=s %#-9.1<jamcrc>"; out "jamcrc %s %#-9.1<jamcrc>"; in "jamcrc %=s %#-9.1<jamcrc>";
out "adler32 %s %#-9.1<adler32>"; in "adler32 %=s %#-9.1<adler32>"; out "adler32 %s %#-9.1<adler32>"; in "adler32 %=s %#-9.1<adler32>";
out "hexsum8 %s %#-9.1<hexsum8>"; in "hexsum8 %=s %#-9.1<hexsum8>"; out "hexsum8 %s %#-9.1<hexsum8>"; in "hexsum8 %=s %#-9.1<hexsum8>";
out "bitsum %s %#-9.1<bitsum>"; in "bitsum %=s %#-9.1<bitsum>";
out "bitsum8 %s %#-9.1<bitsum8>"; in "bitsum8 %=s %#-9.1<bitsum8>";
out "bitsum16 %s %#-9.1<bitsum16>"; in "bitsum16 %=s %#-9.1<bitsum16>";
out "bitsum32 %s %#-9.1<bitsum32>"; in "bitsum32 %=s %#-9.1<bitsum32>";
out "DONE"; out "DONE";
} }
} }
@ -313,7 +337,15 @@ assure "adler32 123456789 \x09\x1E\x01\xDE\n"
send "adler32 123456789 \x09\x1E\x01\xDE\n" send "adler32 123456789 \x09\x1E\x01\xDE\n"
assure "hexsum8 123456789 \x2D\n" assure "hexsum8 123456789 \x2D\n"
send "hexsum8 123456789 \x2D\n" send "hexsum8 123456789 \x2D\n"
assure "bitsum 123456789 \x21\n"
send "bitsum 123456789 \x21\n"
assure "bitsum8 123456789 \x21\n"
send "bitsum8 123456789 \x21\n"
assure "bitsum16 123456789 \x00\x21\n"
send "bitsum16 123456789 \x00\x21\n"
assure "bitsum32 123456789 \x00\x00\x00\x21\n"
send "bitsum32 123456789 \x00\x00\x00\x21\n"
assure "sum 123456789 DD\n" assure "sum 123456789 DD\n"
send "sum 123456789 DD\n" send "sum 123456789 DD\n"
assure "sum8 123456789 DD\n" assure "sum8 123456789 DD\n"
@ -384,7 +416,15 @@ assure "adler32 123456789 091E01DE\n"
send "adler32 123456789 091E01DE\n" send "adler32 123456789 091E01DE\n"
assure "hexsum8 123456789 2D\n" assure "hexsum8 123456789 2D\n"
send "hexsum8 123456789 2D\n" send "hexsum8 123456789 2D\n"
assure "bitsum 123456789 21\n"
send "bitsum 123456789 21\n"
assure "bitsum8 123456789 21\n"
send "bitsum8 123456789 21\n"
assure "bitsum16 123456789 0021\n"
send "bitsum16 123456789 0021\n"
assure "bitsum32 123456789 00000021\n"
send "bitsum32 123456789 00000021\n"
assure "sum 123456789 \x3D\x3D\n" assure "sum 123456789 \x3D\x3D\n"
send "sum 123456789 \x3D\x3D\n" send "sum 123456789 \x3D\x3D\n"
assure "sum8 123456789 \x3D\x3D\n" assure "sum8 123456789 \x3D\x3D\n"
@ -455,7 +495,15 @@ assure "adler32 123456789 \x30\x39\x31\x3E\x30\x31\x3D\x3E\n"
send "adler32 123456789 \x30\x39\x31\x3E\x30\x31\x3D\x3E\n" send "adler32 123456789 \x30\x39\x31\x3E\x30\x31\x3D\x3E\n"
assure "hexsum8 123456789 \x32\x3D\n" assure "hexsum8 123456789 \x32\x3D\n"
send "hexsum8 123456789 \x32\x3D\n" send "hexsum8 123456789 \x32\x3D\n"
assure "bitsum 123456789 \x32\x31\n"
send "bitsum 123456789 \x32\x31\n"
assure "bitsum8 123456789 \x32\x31\n"
send "bitsum8 123456789 \x32\x31\n"
assure "bitsum16 123456789 \x30\x30\x32\x31\n"
send "bitsum16 123456789 \x30\x30\x32\x31\n"
assure "bitsum32 123456789 \x30\x30\x30\x30\x30\x30\x32\x31\n"
send "bitsum32 123456789 \x30\x30\x30\x30\x30\x30\x32\x31\n"
assure "sum 123456789 \xDD\n" assure "sum 123456789 \xDD\n"
send "sum 123456789 \xDD\n" send "sum 123456789 \xDD\n"
assure "sum8 123456789 \xDD\n" assure "sum8 123456789 \xDD\n"
@ -526,7 +574,15 @@ assure "adler32 123456789 \xDE\x01\x1E\x09\n"
send "adler32 123456789 \xDE\x01\x1E\x09\n" send "adler32 123456789 \xDE\x01\x1E\x09\n"
assure "hexsum8 123456789 \x2D\n" assure "hexsum8 123456789 \x2D\n"
send "hexsum8 123456789 \x2D\n" send "hexsum8 123456789 \x2D\n"
assure "bitsum 123456789 \x21\n"
send "bitsum 123456789 \x21\n"
assure "bitsum8 123456789 \x21\n"
send "bitsum8 123456789 \x21\n"
assure "bitsum16 123456789 \x21\x00\n"
send "bitsum16 123456789 \x21\x00\n"
assure "bitsum32 123456789 \x21\x00\x00\x00\n"
send "bitsum32 123456789 \x21\x00\x00\x00\n"
assure "sum 123456789 DD\n" assure "sum 123456789 DD\n"
send "sum 123456789 DD\n" send "sum 123456789 DD\n"
assure "sum8 123456789 DD\n" assure "sum8 123456789 DD\n"
@ -597,7 +653,15 @@ assure "adler32 123456789 DE011E09\n"
send "adler32 123456789 DE011E09\n" send "adler32 123456789 DE011E09\n"
assure "hexsum8 123456789 2D\n" assure "hexsum8 123456789 2D\n"
send "hexsum8 123456789 2D\n" send "hexsum8 123456789 2D\n"
assure "bitsum 123456789 21\n"
send "bitsum 123456789 21\n"
assure "bitsum8 123456789 21\n"
send "bitsum8 123456789 21\n"
assure "bitsum16 123456789 2100\n"
send "bitsum16 123456789 2100\n"
assure "bitsum32 123456789 21000000\n"
send "bitsum32 123456789 21000000\n"
assure "sum 123456789 \x3D\x3D\n" assure "sum 123456789 \x3D\x3D\n"
send "sum 123456789 \x3D\x3D\n" send "sum 123456789 \x3D\x3D\n"
assure "sum8 123456789 \x3D\x3D\n" assure "sum8 123456789 \x3D\x3D\n"
@ -668,6 +732,14 @@ assure "adler32 123456789 \x3D\x3E\x30\x31\x31\x3E\x30\x39\n"
send "adler32 123456789 \x3D\x3E\x30\x31\x31\x3E\x30\x39\n" send "adler32 123456789 \x3D\x3E\x30\x31\x31\x3E\x30\x39\n"
assure "hexsum8 123456789 \x32\x3D\n" assure "hexsum8 123456789 \x32\x3D\n"
send "hexsum8 123456789 \x32\x3D\n" send "hexsum8 123456789 \x32\x3D\n"
assure "bitsum 123456789 \x32\x31\n"
send "bitsum 123456789 \x32\x31\n"
assure "bitsum8 123456789 \x32\x31\n"
send "bitsum8 123456789 \x32\x31\n"
assure "bitsum16 123456789 \x32\x31\x30\x30\n"
send "bitsum16 123456789 \x32\x31\x30\x30\n"
assure "bitsum32 123456789 \x32\x31\x30\x30\x30\x30\x30\x30\n"
send "bitsum32 123456789 \x32\x31\x30\x30\x30\x30\x30\x30\n"
assure "DONE\n" assure "DONE\n"
finish finish