Adds new routines for converting numeric strings into the
standard epicsInt8, epicsUInt8, epicsInt16, epicsUInt16,
epicsInt32 and epicsUInt32 types, along with Long, ULong,
Double and Float. These all provide error checking and
detection of extraneous characters. The epicsScanDouble
and epicsScanFloat routines originally in epicsStdlib.h
are replaced by macros that call the epicsParse routine,
and this also provides epicsScanLong and epicsScanULong
to match.
A test file is added to ensure conversions work properly
and report appropriate errors. This file also checks the
native strtod() routine if not used to check whether the
epicsStrtod() code is required on this platform.
The filter plugins are now in src/std/filters
and their tests in the test subdirectory.
Various portability issues found and fixed:
* Variable declarations after statements in a block
* Code assuming that epicsInt32 = long
* // comments in C files
Removed a number of tests that weren't really tests;
preconditions for future tests that don't actually check
the code being tested should call testAbort() if the
condition fails, which tells the test harness that you
meant to die at that point.
Split up lots of very long source lines.
Probably made a few other changes that I forget about now.
Michael backed out a few changes and added some others.
I added some modifications to default/osdMessageQueue.cpp to
remove arguments from a couple of internal (static) functions.
All are now robust against overflow, NAN or negative argument.
Passing seconds=0 calls the OS scheduler, offering to yield.
Passing seconds>0 delays at least the requested time, up to a
limit which usually depends on the OS tick rate.
Mostly just layout changes, removing unnecessary casts, and
replacing 'unsigned short' with epicsEnum16 types.
The only significant code change is in the alarm filtering
code of the mbbi record, which wasn't handling UDF alarms
or unknown state alarms quite right.
Avoid installing xRecord.dbd. This would otherwise be installed
by the DBDINC.
Also must split out recordtype definition from record instance
definition and run the registrar function between the two loads.
This is due to new sanity checks in the loading process