cleanup:
 provide M3_HAS_VISIBILITY in m3core.h, so others can
   avoid #ifdef __osf__ and such -- so that we fix warnings for __CYGWIN__
 use M3_HAS_VISIBILITY in places (e.g. ThreadInternal.c, ThreadPosixC.c)

 #undef/#define _GNU_SOURCE in m3core.h

 #define __DARWIN_UNIX03 0 in m3core.h
   remove from RTSignalC.c, ThreadApple.c

 remove never-used M3_DLL_IMPORT from m3core.h

 add M3_EXTERNC_BEGIN, M3_EXTERNC_END in m3core.h
   use it in places (ThreadInternal.c)

 consolidate #include of sys/ucontext.h and ucontext.h in m3core.h
   remove them from RTSignalC.c, ThreadApple.c

 add more missing calling conventions (explicit __cdecl) even
 in source that isn't compiled for NT/x86 (the only platform
 with multiple calling conventions, and a way to specify it,
 and a way for it to mismatch) (e.g. ThreadPosixC.c)

 initialize locals more

 add #include <semaphore.h> in m3core.h (even if the functions
   therein don't really work on Darwin, and we don't use them)
 remove elsewhere e.g. ThreadPThreadC.c

 remove some tabs

 adjust some brace positions

 slightly cleanup how we assert about struct linger
split ScanCommandLine into ScanCommandLine1 and ScanCommandLine2
ScanCommandLine2 is most of the previous ScanCommandLine
ScanCommandLine1 handles just -version and -help

Maybe call them ScanCommandLineForHelpAndUsage
and ScanCommadLine? or add a boolean parameter?
Or just call it earlier? This is a smaller/safer change.

The point is so that cm3 -version can be used to sniff
for -host, even when there is no (not yet) a cm3.cfg file.
This is useful e.g. in scripts/python/{pylib.py,boot2.sh}
hpux_flags is never used, remove it
fix PA64_HPUX to be like PA32_HPUX and use .sl instead of .so
fix bug where failing to make .so needs to delete .a
on my FreeBSD 9.0 x86 system, libXaw is in /usr/local/lib
maybe this is because the binary packages installed on AMD64
were x86 and I've resorted to building in /usr/ports?
But notice the similary to odbc and postgresql95
Disable/Enable switching; probably fixes unseen thread safety problem
in user-threads; no effective change for Win32 and pthreads.
DisableSwitching/EnableSwitching probably needed for user-threads.
No change for Win32 and pthreads.
Should we use the _r functions instead?
Which systems have them?
Need to see when Posix added them and survey systems.
initialize locals
Initial commit, README file for upper level of ordsets.

OrdSets is a generic interface and module for sets of large-range
ordinal types, in functional style.  See comments in OrdSets.ig for
details on the package and its use.

From ordsets/ordsets/src/OrdSets.i3:

(* This interface provides operations on sets whose members are of an ordinal
   type.  It is written in a functional style.  It never mutates a set value,
   (except for some internal lazy computation--not visible to clients), and
   thus it sometimes is able to share heap objects.

   Its primary use pattern is where the set values can have widely
   varying sizes, you want a very large maximum size limit, but many
   of the sets are expected to be much smaller than the maximum.  For
   this to happen, you probably want to instantiate only with INTEGER
   or WIDECHAR.  It will work with LONGINT, but only if its target-machine-
   dependent range is a subrange of INTEGER.  There is no space or time
   performance benefit to instantiating with a subrange of the base type.

   If this does not fit your needs, you probably want to use
   Modula-3's builtin set type, or some other package.

   The set representations occupy variable-sized heap objects, just
   sufficient for the set value.  In the most general case, these use
   heap-allocated open arrays of machine words, with one bit per
   actual set member, plus some overhead, of course.

   If you compile with a later CM3 Modula-3 compiler and garbage
   collector that tolerate misaligned "pseudo" pointers, i.e, with the
   least significant bit set to one, you can set a boolean constant in
   the corresponding module OrdSets.mg.  This will cause it to utilize
   this Modula-3 implementation feature to store sufficiently small set
   values entirely within the pointer word, avoiding the high space and
   time overheads of heap allocation.  The CM3 5-8 compiler is sufficient.
   SRC M3, PM3, EZM3, and earlier CM3 versions are not.  As of 2012-7-15,
   Pickles do not handle these.  Enable this with DoPseudoPointers, in
   OrdSets.mg.
*)
Program GenBitNoArrays mechanically generates source file
BitNoTable.i3, needed by any instantiation of OrdSets.[im]g, which are
found in directory ordsets, beside this directory, bitnos.
README file for inner directory ordsets/ordsets.
BitNoTable.i3.  Some tables used by OrdSets.mg.
Mechanically generated by GenBitNoArrays.
IntForOrdSets.i3

Used to instantiate OrdSets for sets of INTEGER.
IntSets.i3 IntSets.m3

Source-code instantiations of OrdSets.ig and OrdSets.mg, for sets of INTEGER.
OrdSets.ig OrdSets.mg

OrdSets is a generic interface and module for sets of large-range,
dynamically-sized ordinal types, in functional style.
Sets.i3 Sets.m3

Sets is an old package that OrdSets replaces.  Used here to compare
results between the packages, for testing OrdSets.
Test.m3

Test program for OrdSets
UnsafeUtils.i3 UnsafeUtils.m3

Encapsulated unsafe code used by OrdSets and its test program.
WidecharForOrdSets.i3

Used to instantiate OrdSets for WIDECHAR.
WidecharSets.i3 WidecharSets.m3

Instantiations of OrdSets.[im]g for WIDECHAR.