Subject: CVS commit: pkgsrc/math/qhull
From: Adam Ciarcinski
Date: 2020-04-12 23:15:02
Message id:

Log Message:
qhull: updated to 2019.1

Qhull 2019.1 (7.3.2):

bugs fixed
- Fixed broken HTML links identified by Firefox Link Analyzer.  Replace old \ 
links with (
- Moved live code out of qh_NOtrace regions
- qh-faq.htm#learn: fixed the Delaunay examples (rbox generates a square, but \ 
does not generate two squares)
- geom2_r.c/qh_maxmin: qh_scalelast for 'd Qbb' to qh.MAXabs_coord instead of \ 
qh.MAXwidth [J.R. Roussel, D. Sterratt]
- geom2_r.c/qh_maxsimplex: estimate targetdet as prevdet*qh.MAXwidth, set mindet \ 
to 10*qh_RATIOmaxsimplex [J.R. Roussel, D. Sterratt]
- global_r.c/qh_freebuild: in high-D, simplicial facets may use long memory
- global_r.c/qh_initqhull_globals: set qh.DOcheckmax and qh.KEEPnearinside if \ 
qh.APPROXhull ('Wn', rbox 100 D3 W1e-1 | qhull QJ W1e-1 Tv)
- libqhull_r.c/qh_addpoint: add qh.lastmerges to qh_addpoint trace
- libqhull_r.c/qh_buildcone_mergepinched: called qh_partitioncoplanar with \ 
uninitialized 'dist'
- libqhull_r.c/qh_build_withrestart: if qh_joggle_restart, set v.partitioned for \ 
qh.del_vertices.  Avoid error in qh_delvertex from qh_freebuild
- libqhull_r.c/qh_partitionall: if qh.KEEPnearinside, qh_partitionpoint for \ 
non-outside pointset
- libqhull_r.c/qh_partitioncoplanar: define qh.coplanar_apex to prevent infinite \ 
loop of repartition point
- merge_r.c/qh_checkzero: check opposite vertex against -2*qh.DISTround to \ 
account for qh_distround and 'Rn'
- merge_r.c/qh_comparevisit: fix compare of 'unsigned int'
- poly2_r.c/qh_findbestfacet: for Delaunay triangulations, may be an adjacent \ 
triangle [F. Drielsma]
  Updated discussion at qh-code.htm/findfacet and examples at user_eg_r.c and \ 
- poly2_r.c/qh_findfacet_all: do not search visible facets, and if qh_NOupper, \ 
f.upperdelaunay facets [P. Virtanen, S. Dominguez, J.Arkin]
- poly2_r.c/qh_initialhull: reverse orientation if clearly flipped.  \ 
qh_ERRsingular if maybe flipped [S. Caron, P. Virtanen, D. Sterratt, others]
- poly2_r.c/qh_initialhull: test for coplanar qh.interior_point with 'allerror' \ 
(dist >= -qh.DISTround) [S. Caron, P. Virtanen, D. Sterratt, others]
- poly2_r.c/qh_initialhull: call qh_joggle_restart for qh.DELAUNAY if \ 
cospherical input sites [P. Celba]
- poly2_r.c/qh_initbuild: qh_scalelast for 'd Qbb' to qh.MAXabs_coord instead of \ 
qh.MAXwidth [J.R. Roussel, D. Sterratt]
- random_r.c/qh_argv_to_command_size: returned size may be < 1.  If so, \ 
rbox.c/main reports an error
- rboxlib_r.c/qh_rboxpoints: report error for coincident, regular points 'rbox r \ 
- stat_r.c/qh_initstatistics: missing call to qh_allstatistics for qh_newstats.  \ 
qh_checkoutput ignored
- userprintf.c/qh_fprintf: fixed 2019.0.1 bug if 'qh_qh' is NULL for qh_QHpointer
- Qhull.cpp/outputQhull: fixed missed conditional if qh.GOODvertex == -qh.GOODpoint

documentation and web site
- Add notes that Qhull 64-bit code uses 50% more memory than 32-bit code.  This \ 
slows down Qhull.
  A future version of Qhull will include memory and performance improvements for \ 
64-bit code.
- Add the Qhull identity pipeline to html/qhalf.htm
- Enabled PDF download from
- Error exit from qhull,qconvex,etc. returns a 6xxx error code if available
- Rename md5sum files back to *-tgz.md5sum and *-zip.md5sum
  Both Firefox and IE convert *.tgz.md5sum and *.zip.md5sum as .tgz/.zip files
- html/qh-code.htm: add sections on debugging Qhull
- html/qh-faq.html: reviewed startup questions for Qhull
- html/qh-opto.htm: the centrum indices for option 'i' are one more than the \ 
centrum indices for option 'Ft'

build and test
- CMakeLists.txt: export QhullTargets for and find_package \ 
- eg/q_benchmark: add 'uname -a' for host identification
- eg/q_test.bat: update for changes to q_test
  removed redirects on every line (invoke with redirection)
- eg/q_test: add some tests for option warnings and errors
- Makefile: add dependencies for 'install', 'test', 'qtest', and \ 
'qconvex-prompt' [V. Delecroix]
- Makefile: set -m32 as default for gcc builds.  Uses less memory on 64-bit hosts.
  disable with 'make M32='
- Remove 'unused parameter' warnings if qh_NOmerge
- Tested qh_QHpointer, qh_NOmem, qh_NOmerge, qh_NOtrace, qh_KEEPstatistics 0
- Tested qh_NOmerge with qh_NOtrace and qh_KEEPstatistics 0. Simpler code, fewer \ 
errors, 35% smaller
- Tested random qh_distplane and qh_setplane qh_RANDOMdist 1e-5, qh_RANDOMdist 1e-13
- user_r.h: define qh_RANDOMdist to perturb all calls to qh_distplane, \ 
qh_newfacetplane by 'Rn'

other changes
- Replace 'unsigned' with 'unsigned int', for consistency
- Replace warning 6263 with 7079 in qconvex_r.c, etc.
- Resolved C warnings for -Wsign-conversion, mostly type casts
  Continue to use -Wno-sign-conversion for C++ due to countT, boolT, int vs. \ 
size_t mismatches
- Reviewed gcc 8.1.0 warnings.  See Makefile CC_WARNINGS and CXX_WARNINGS
  Type cast (int)sizeof(facetT),etc. as needed
- Reviewed error and warning codes for multiple instances of the same code
- Reviewed file references such as libqhull_r.c vs libqhull.c
- Reviewed multi-line, error message width for 80 column output
- global.c/qh_initflags: Add 'qh_QHpointer' to qh_option for option list
- geom2_r.c/qh_joggleinput: report QH6010, current joggle is too large, as \ 
- geom2_r.c/qh_maxsimplex: report error if qh.MAXwidth not defined, for \ 
estimating the determinates
- geom2_r.c/qh_minmax: if tracing, log min and max coordinates [J.R. Roussel, D. \ 
- io_r.c/qh_printbegin: rewrote warning QH7053, use 'p' or 'o' for Voronoi centers
- io_r.c/qh_produce_output2: fflush to maintain execution order of output
- libqhull_r.c/qh_buildtracing: change qh.lastfacets, qh.lastplanes, qh.lastdist \ 
to 'int'
- libqhull_r.c/qh_build_withrestart: change error QH6229, 101 attempts to joggle \ 
input, to qh_ERRinput and 51 attempts
- merge_r.c/qh_renameridgevertex: report error if old vertex not found
- poly_r.c/qh_update_vertexneighbors: use qh_setappend instead of qh_setunique \ 
for newly created facets (restores 2015.2 code)
- poly2_r.c/qh_check_point: limit 'Tv' errors to qh_MAXcheckpoint per facet
- poly2_r.c/qh_initialhull: rewrite QH6329 for cospherical input sites and add \ 
qh_printvertexlist [P. Celba]
- qset_r.c/qh_setlarger_quick: optimize qh_setlarger for quick memory
- rboxlib_r.c/qh_rboxpoints2: fix strncat to resolve -Wstringop-truncation \ 
warning [D. Sterratt]
  increased command[] to 250 and decreased seedbuf[] to 50
- user_r.h/qh_JOGGLEmaxretry: reduced from 100 iterations to 50 iterations
- user_r.c/qh_new_qhull: allow "qhull" for the qhull_cmd parameter
- user_eg_r.c/findDelaunay: qh_findbestfacet returns the closest Delaunay \ 
triangle or an adjacent triangle
- user_eg2_r.c/findDelaunay: qh_findbestfacet returns the closest Delaunay \ 
triangle or an adjacent triangle
- userprintf_r.c/qh_fprintf: set qh.last_errcode for MSG_ERROR (6000) codes
- RboxPoints::qh_fprintf_rbox: print error message to stderr if cpp_object undefined

Qhull 2019.0.1 (7.3.1)

Qhull options
- Disallow unknown options and other option errors, allow option warnings with 'Qw'
- New option 'Qallow-short': allow input with fewer or more points than coordinates
- New option 'Qwarn-allow': allow option warnings
- New option 'TAn': stop after adding n vertices
- New option 'Tf': flush after qh_fprintf for debugging segfaults
- New experimental option 'Q14-merge-pinched-vertices': merge pinched vertices \ 
due to dupridge
  Excessive merging leads to additional topological and wide facet errors
- New experimental option 'Q15-check-duplicates': check for duplicate ridges \ 
with the same vertices
- Option 'Q1' merges by mergetype/angle instead of mergetype/distance, coplanar \ 
merges first
  In 2015.2 by default, Qhull merged by mergetype/angle with lower angles first
- Option 'TP-1' turns on tracing after qh_buildhull and qh_postmerge
  It traces qh_check_maxout, qh_prepare_output, qh_triangulate, qh_voronoi_center
- Options '--help', '-?', and '--' display a short help message
  Qhull does not support '--' options.  Git for Windows v2.21.0 does not support \ 
isatty ('winpty qhull' is OK)
- Allow Qhull extra options Q12 and Q14 for qconvex/qdelaunay/qhalf/qvoronoi
- Allow option 'QRn' (random rotate) for qdelaunay/qhalf/qvoronoi
- Alphabetize short prompts (qhull .)
- Alphabetize long prompts w/ normal options first (qhull -)
- Alphabetize option help by option code
- Add 'Number of merged pinched vertices' to summary ('s')
- Add 'TI file' to help message for qconvex/qdelaunay/qhalf/qvoronoi
- Dropped experimental option 'Q16-simplex-merge'.   Centrums are required for \ 
- Error if 'd', 'v', or 'Hn,n,n' are used together
- Ignore missing space after 'TI' or 'TO'.  Allow 'TIinputfile' and 'TOoutputfile'
- Prefix option errors and warnings with 'qhull option error:' or 'qhull option \ 
- Remove hidden option 'normals' from help prompts for qdelaunay, qhalf, qvoronoi
- Reword short prompts to 'Pdrop-d0:0D0', 'QbBound-0:0.5', and 'off_format'
- Updated qh-quick.htm, 'qhull -', and 'qhull .' for 'T...' and 'Q...' options.
  Separate help prompts for 'T options' and 'Trace options'
- Use '-' instead of '_' for word delimiter in option names

Qhull builds, scripts, and debugging
- Add qh.traceridge, qh.traceridge_id, and qh_delridge for debugging by ridge in \ 
- Check for qhull with 'which qhull' instead of 'qhull', avoids hangs in git bash
- Makefile/CC_WARNINGS: Add instructions for collecting and testing gcc warnings
- Makefile/benchmark: Add q_benchmark, 10 runs of each
- Makefile/clean: Delete linked files from src/libqhull and src/libqhull_r, as \ 
in their Makefiles
- Makefile/help: Add 'make all' to 'make help' prompts
- Makefile/qhullx: Add test of testqset and testqset_r
- Makefile/qhullx: Create bin/ directory if missing
- Makefile/test: Add user_eg3 help prompt
- Makefile/testall: Add q_benchmark, 1 run of each
- eg/ Build bin/qhullx from src/qhullx/ for comparison
- eg/q_benchmark: new script for measuring Qhull precision and performance with \
- eg/q_test: update error messages for missing bin/ and bin/libqhull_r.dll
- eg/q_test: tests of Tf and TAn
- eg/ add note that it requires from \
- eg/ check source depencencies for prompts
- eg/ new script for testing Qhull and summarizing its trace files
- libqhull_r/Makefile: install target creates $INCDIR/libqhull_r and $LIBDIR
- libqhull_r.h/qh_ERRdebug: define error status for debugging exits

Qhull fixed bugs
- html/qh-optp.htm: options 'PDk' and 'Pdk' require option 'Pg' to return the \ 
closest facet
- Makefile/qhullx: fixed qhullx compile of testqset and testqset_r
- PointCoordinates.cpp/appendPoints: read 'in >> p' instead of 'in \ 
>> p >> ws'
  otherwise istream fails if file does not end with whitespace
- geom_r.c/qh_findbesthorizon: fix test for Zfindjump (bestdist jumps by searchdist)
- geom_r.c/qh_findbesthorizon: increased minsearch of coplanar facets if \ 
ischeckmax and more than 100 neighbors
- geom_r.c/qh_sethyperplane_det: dropped precision statistic Znearlysingular \ 
(it's Zminnorm)
- geom2_r.c/qh_detjoggle: use 'En' (roundoff) if specified by options
- geom2_r.c/qh_distround: move adjustment for 'Rn' into qh_distround.  'QJn' did \ 
not account for 'Rn'
- global_r.c/qh_checkflags: handle two-digit Q options in hiddenflags
- global_r.c/qh_freebuild: do not delete unattached ridges, otherwise a double \ 
delete.  Should not occur
- global_r.c/qh_option: fix potential overflow of qh.qhull_options
- global_r.c/qh_initflags: fixed incorrect indentation for option 'TO file'
- global_r.c/qh_initqhull_start2: set qh.NOerrexit True
- io_r.c/qh_eachvoronoi: allow fp==NULL for QhullQh::qh_fprintf to appendQhullMessage
- io_r.c/qh_readpoints: error if 'd' or 'v' with 'H', otherwise memory corruption
- libqhull_r.h/qh.MERGEvertices: fixed comment, 'Q3' disables this feature
- libqhull_r.c/qh_buildcone_onlygood: cannot qh_delfacet inside FORALLnew_facets
- libqhull_r.c/qh_partitionpoint: if qh.NARROWhull and bestdist>qh.MINoutside \ 
and isnewoutside,
  may need to move facet to qh.newfacet_list for qh.next_facet
- libqhull_r.c/qh_printsummary: Zdistconvex is for checking convexity instead of \ 
testing convexity
- libqhull_r.c/qh_findhorizon: coplanar horizon if apex >= -qh.MAXcoplanar, \ 
instead of > -qh.MAXcoplanar
- mem_r.c/qh_memcheck: define null qh_memcheck if qh_NOmem
- merge_r.c/qh_mergecycle_all: turn on tracing, 'TMn', for coplanar horizon \ 
merge of one facet
- merge_r.c/qh_mergefacet2d: do not create ridges for neighborB.  The opposite \ 
neighbor may be tested
- merge_r.c/qh_test_centrum_merge: coplanar if centrum >= -qh.centrum_radius, \ 
instead of > -qh.centrum_radius
- merge_r.c/qh_test_nonsimplicial_merge: coplanar if centrum >= \ 
-qh.centrum_radius, instead of > -qh.centrum_radius
- merge_r.c/qh_tracemerging: fixed "qhull has merged" prompt
- merge_r.c/qh_willdelete: empty f.neighbors and f.ridges, references are no \ 
longer valid, will be deleted
- poly_r.c/qh_checkflipped: flipped if qh.interior_point >= -qh.DISTround, \ 
instead of > -qh.DISTround
- poly2_r.c/qh_addfacetvertex: initialize vertex_i in case f.vertices is empty
- poly2_r.c/qh_check_maxout: need to include qh.DISTround when checking \ 
f.maxoutside with qh.maxoutside
- poly2_r.c/qh_checkconvex: fix documentation for qh_DATAfault.  It is \ 
restricted to qh_initialhull with qh.ZEROcentrum
- poly2_r.c/qh_checkconvex: coplanar if >= -qh.DISTround, instead of > \ 
- poly2_r.c/qh_checkconvex: check simplicial ridges if !qh.MERGING && \ 
qh.ZEROcentrum (unlikely or not-possible)
- poly2_r.c/qh_findgood: restrict qh.GOODvertex ('QVn') to good facets
- poly2_r.c/qh_findgood_all: unless 'Pg', ignore qh.GOODclosest for nearest \ 
facet to thresholds.
     'PdD' reports 0 good facets
- poly2_r.c/qh_replacefacetvertex: initialize vertex_n in case f.vertices is empty
- qconvex.c,qdelaunay.c,etc.: remove automatic 'Qx' for 5-d and higher.  Set by \ 
default in qh_initqhull_globals
- qvoronoi_r.c/qh_prompt: remove disabled option 'TRn' from help prompt
- random_r.c/qh_argv_to_command: fixed missing braces, same behavior as before
- rbox_r.c: return 0 exit status on prompt
- rboxlib.c/qh_rboxpoints: use qh_fprintf_stderr instead of qh_fprintf_rbox.  \ 
Avoid qh_errexit_rbox
- rboxlib.c/qh_rboxpoints2: clear rbox_inuse on exit, as in error exit
- rboxlib_r.c/qh_rboxpoints2: incorrect string arg to 'rbox error: unknown flag'
- rboxlib_r.c/qh_rboxpoints2: remove superfluous qh_free(*simplex)
- stat_r.c/qh_initstatistics: due to NOerrors cannot use qh_fprintf, use \ 
qh_fprintf_stderr instead
- stat_r.c/qh_stddev: return sqrt of absolute value
- testqset_r.c: if qh_NOmem, do not call qh_memfreeshort
- user_eg_r.c,user_eg2_r.c: if qh_NOmem, call qh_freeqhull(qh, qh_ALL) instead \ 
of qh_memfreeshort
- user_eg3_r.cpp: return 0 exit status on prompt

Qhull fixed bugs introduced by 2018.0
- libqhull_r.c/qh_addpoint: clear qh.retry_addpoint on success
- libqhull_r.c/qh_buildcone_mergepinched: cannot qh_delfacet inside FORALLnew_facets
- libqhull_r.c/qh_partitioncoplanar: clear qh.repart_id on exit for infinite \ 
recursion detect
- geom2_4.c/qh_detmaxoutside: move qh_option call to qh_errexit
- merge_r.c/mergetypes[]: fixed order by mergeT
- merge_r.c/qh_all_vertexmerges: fix retryfacet for repeated calls
- merge_r.c/qh_forcedmerge: f.dupridge retained after MRGdupridge
  hides MRGdegenerate in qh_test_degen_neighbors and qh_test_redundant_neighbors
- merge_r.c/qh_postmerge: call qh_freemergesets
- merge_r.c/qh_test_nonsimplicial_merge: clear iscoplanar if isconcave and any \ 
vertex is not coplanar
- poly2_r.c/qh_triangulate: move reset of f.degenerate into delete facet loop

Qhull C++
- QhullFacet.cpp: add hasNext() and hasPrevious()
- QhullVertex.cpp: add hasNext() and hasPrevious()
- qhulltest-64/QhullFacet_test.cpp,QhullVertex_test.cpp: test hasNext, \ 
hasPrevious, and hasPrevious iterator
- user_eg3.cpp: use 'qhull-cout' for option 'Tz' (trace to cout)

Qhull errors, warnings, and tracing
- Error messages rewritten and error codes changed (see qh_fprintf)
  Renumbered Qhull warnings as 'QH7xxx' if needed (e.g., QH9375)
  Reused unused error and message codes ("def counters" in \ 
  Please check your code if it depends on error and message codes
- Initialize variables to avoid potential uninitialized warnings
- Use qh_ERRqhull for Qhull internal errors, "qhull internal error \ 
(qh_...): ..."
- Use 'defined()' for qh_QHpointer_dllimport and qh_dllimport (-Wundef)
- Use 'defined()' for __cplusplus, _MSC_VER, __MWERKS__, and __POWERPC__ (-Wundef)
- Use 'Early exit' instead of 'At a premature exit'
- libqhull_r.h/qh_ERRother: define error status for non-internal errors
- libqhull_r.h/qh_ERRtopology: define error status for qhull topology errors
- libqhull_r.h/qh_ERRwide: define error status for wide facets due to qhull \ 
precision error
- geom_r.c/qh_setfacetplane: add qh_printfacet if qh.tracefacet for qh.tracefacet_id
- global_r.c/qh_freebuild: record previousfacet/ridge/vertex in case a memory \ 
fault occurs
- global_r.c/qh_init_flags: improved error message for 'cannot open file' for 'TO f'
- global_r.c/qh_init_flags: improved warning message for 'unknown option'
- global_r.c/qh_initbuild: add trace options to "Trace level ..."
- global_r.c/qh_initqhull_globals: error if qh.VORONOI without qh.DELAUNAY
- global_r.c/qh_initqhull_globals: error if numpoints is <1 or \ 
>qh_POINTSmax (INT_MAX-16)
- global_r.c/qh_lib_check: use C-style comment for _CrtSetBreakAlloc
- io_r.c/qh_printfacetheader: add "max" if f.merges==qh_MAXnummerge (511)
- io_r.c/qh_readpoints: error if numinput is <1 or >qh_POINTSmax (INT_MAX-16)
- io_r.c/qh_readpoints: moved up 'chop' of qh.rbox_command to report short input \ 
- io_r.c/qh_readpoints: replace warning QH7073 with error message. Override with \ 
- libqhull_r.c/qh_addpoint: if 'T4', check qh.visible_list before qh_partitionvisible
- libqhull_r.c/qh_buildtracing: add delta cpu/facets/hyperplanes to QH1049 \ 
'qh_addpoint: add p%d...'
- merge_r.c/qh_findbest_pinchedvertex: replaced assert with a 'qhull internal error'
- merge_r.c/qh_check_dupridge: drop advice about reporting wide merges for error \ 
- merge_r.c/qh_mark_dupridges: topological error if multiple dupridges for one \ 
facet, not handled
- merge_r.c/qh_test_nonsimplicial_merge: if Qx and many merges, replace \ 
centrum_radius with maxoutside
- poly_r.c/qh_matchneighbor: drop extra warnings for duplicate facet (QH7084)
- poly_r.c/qh_matchnewfacets: check for simplicial facets on qh.newfacet_list, \ 
otherwise memory overwrite by qh_matchneighbor
- poly2_r.c/qh_checkconvex: identify simplicial checking of vertices \ 
(qh.ZEROcentrum, default)
- poly2_r.c/qh_checkconvex: distinguish above from coplanar for non-convex \ 
initial simplex
- poly2_r.c/qh_checkconvex: "non-convex initial simplex" for \ 
- poly2_r.c/qh_checkfacet: check and f.vertex_visit
- poly2_r.c/qh_checklists: check and repair facet and vertex lists for infinite \ 
loops or overwritten facets/vertices
- poly2_r.c/qh_checkpolygon: if qh.NEWfacets, check visible facets for empty \ 
f.neighbors and f.ridges
- poly2_r.c/qh_checkpolygon: add qh_checkvertex
- poly2_r.c/qh_checkpolygon: check f.previous and v.previous links (for C++)
- poly2_r.c/qh_checkvertex: add parameters for allchecks and waserror (like \ 
- poly2_r.c/qh_checkvertex: check and v.vertex_visit
- qvoronoi.c/hidden_options: hide option 'FM'. Maple output is not available
- rboxlib_r.c/qh_rboxpoints: use QH6... for error codes instead of warnings
- stat_r.c/qh_stddev: check for division by 0
- testqset_r.c: send all messages, except 'OK' to stderr
- testqset_r.c: reassign unique QH8nnn codes, 8001/etc in use by libqhull_r
- user_r.c/qh_printhelp_internal: add descriptive message for a Qhull internal error
- user_r.c/qh_printhelp_narrowhull: add option 'Qs' (search all points)
- user_r.c/qh_printhelp_topology: add descriptive message for a Qhull topology error
- user_r.c/qh_printhelp_wide: add descriptive message for a wide merge error
- user_eg_r.c: add fflush and '=======' markers to interleave stdout with stderr \ 
- user_eg2_r.c: add fflush and '=======' markers to interleave stdout with \ 
stderr (MSYS2)
- user_eg2_r.c: add warning about calling qh_addpoint after qh_qhull with 'QJ' \ 

Qhull documentation and statistics
- Add Index to README.txt
- Add links to Wiki,
- Add links to local home page (index.htm)
- Add GitHub, Scholar, and Code to navigation bar on home page
- Change numbered fixups to 'QH110nn FIX:' and renamed as MSG_FIX
- Chrome and Internet Explorer load '.c' and '.h' files as text/html from the Web
  These browsers along with Firefox do not read disk files as text/html
  Changed 'Functions' link from a local link to \ 
- Document implicit parameters at end of parameter list with '/* qh. ... */'
- Limit maximum length of literals to 1800 characters
- Move 'called by' comments to start of 'notes:'
- Option 'QRn' appends the actual QRn to the summary line ('s')
- Remove references to 'Qx' in 5-d and higher.  It is automatically set by default.
- Replace references to 'src/libqhull/*.htm' with reentrant 'src/libqhull_r/*_r.htm'
- Retitle 'Qhull internals' as 'Qhull code'
- Use 'nearly adjacent vertices' instead of 'nearly coincident points'
- Use 'dupridge' instead of 'duplicate ridge' for ridges with more than two \ 
  Reserve 'duplicate ridge' for two ridges with the same vertices.
- Various edits to documentation (*.htm)
- Update copyright to 2019
- eg/q_test: Add examples to q_test "front ends"
- html/index.htm: Add 'Limitations of merged facets' to the Qhull manual
- html/index.htm: Add links to qdelaun_f.htm and qvoroin_f.htm (furthest-site)
- html/qconvex.htm,etc: update synopsis and options
- html/qh-code.htm: Add 'qh_addpoint' trace to 'Performance of Qhull'
- html/qh-code.htm: Add a section on 'Debugging Qhull' with subsections for \ 
error codes,
  infinite loops, trace options, core dumps, segfaults,, and memory errors.
- html/qh-impre.htm: Add 'Topological error' to 'Precision problems'
- html/qh-impre.htm: Add 'Topological errors' to 'Limitations of merged facets'
- html/qh-impre.htm: Add "narrow range of values" to 'Uneven dimensions'
- html/qh-optq.htm: Add note to 'QJ' (joggle) about calls to qh_addpoint
- html/qh-optt.htm#'Tc': 'T4' makes additional checks beyond check-frequently
- html/qhalf.htm: Split the first example to clarify the "feasible \ 
point" for qhalf
- html/qhalf.htm: Use 'feasible point' instead of 'interior point' for halfspace \ 
  Same as Qhull::feasiblePoint and distinguished from qh.interior_point
- html/,qhull.txt: updated man page
- libqhull_r.h: update documentation for PRINTgood, GOODpoint, GOODvertex
- qhull_ra.h: include '<limits.h>'.  Used for INT_MAX,etc.
- stat.h: add zretryadd stats for qh_merge_pinchedvertices
- stat.h: add zvertextests for distance tests of vertices for merging
- libqhull_r/*: document global variables as 'qh.'
- libqhull_r/*: fix libqhull/... links
- libqhull_r.c/qh_partitioncoplanar: reword Zpartflip as Zpartcorner with \ 
updated messages
- merge_r.c/qh_merge_degenredundant: rename statistic Zneighbor to Zredundant
- stat_r.c: new or reworded statistics for Zpartcorner, Zparthidden, \ 
Zparttwisted, Zpinchduplicate, Zpinchedvertex
- stat_r.c: rename 'renamed vertex statistics' to 'statistics for vertex merges'
- stat_r.c: add merge statistics for MRGconcavecoplanar
- stat_r.c/qh_allstat: add ' ' before parens in statistics
- user_eg_r.c,user_eg2_r.c: rewrote prompt

Qhull changes
- For simple initializers, remove spaces (e.g., 'for (i=0; ...')
- Normalize spacing for libqhull
- Normalize spacing as 'for (i=0; ...' for simple initializers
- Review use of '>' for comparison to negative quantities.  Usually should be \ 
'>=', e.g., for coplanar tests
- Reassigned 8xxx and 9xxx codes as trace codes if traced at T3 or lower
- Remove unused variables
- Test floating point values with 0.0 instead of 0 \ 
- Use SETsecondt_() and SETelemt_() instead of SETelem_() when assigning to a \ 
specific type
- Use '(type *)' for pointer casts.  It makes the cast more visible.
- Use void for empty parameter lists
- geom_r.c/qh_findbesthorizon: mark startfacet visited, avoids unnecessary visit
- geom2_r.c/qh_detmaxoutside: determine precision target qh.MAXoutside (option \ 
_maxoutside at error exit)
  replaces 'maxoutside' computation
- geom2_r.c/qh_maxsimplex: add ratio test for false narrow hull with search for \ 
prevdet [J. Romain]
- global_r.c/qh_freebuild: free global sets first instead of last, otherwise \ 
dangling references
- io_r.c/qh_compare_nummerge: renamed qh_compare_facetmerge due to conflict with \ 
- io_r.c/qh_compare_vertexpoint: remove this routine.  Not usable in libqhull_r \ 
due to 'qh'
- io_r.c/qh_printfacetridges: do not print ridge if already printed (e.g., \ 
duplicate neighbors for merge of simplicial facets)
- io_r.c/qh_produce_output2: fflush of qh.fout to show statistics and \ 
verification after output (MSYS2)
- libqhull_r.h/qh.ALLOWwide: rename qh.NOwide to qh.ALLOWwide for 'Q12-allow-wide'
- libqhull_r.h/qh.IGNOREpinched: replaced qh.MERGEpinched with reversed meaning
- libqhull_r.c/qh_addpoint: 'TVn' stops after qh_all_vertexmerges, not before \ 
qh_resetlists.  Matches documentation
- merge_r.h/MRGdupridge: renamed MRGridge
- merge_r.h/qh_ANGLEconcave,etc.: replace mergetype indicators with qh_ANGLEnone \ 
and m.mergetype
- merge_r.c/qh_all_vertexmerges: replace qh_getmergeset_initial with \ 
qh_getmergeset.  No facets created
- merge_r.c/qh_all_vertexmerges: move while loop into qh_all_vertexmerges
- merge_r.c/qh_append_mergeset: ignore merges into a MRGdegen facet (f.degenerate)
- merge_r.c/qh_buildcone_mergepinched: clean up code and design documentation
- merge_r.c/qh_compare_anglemerge: renamed qh_compareangle and sort by mergetype \ 
as well as angle
- merge_r.c/qh_compare_facetmerge: merge MRGcoplanar before MRGconcave, opposite \ 
order from 2015.2
                                   sort MRGanglecoplanar by angle
- merge_r.c/qh_degen_redundant_facet,qh_test_degen_neighbors: moved into \ 
qh_mergefacet due to qh_willdelete
- merge_r.c/qh_getmergeset,qh_getmergeset_initial: set f.tested after testing \ 
ridges, not before
- merge_r.c/qh_next_facetmerge: split out next merge from qh_all_merges and \ 
replace qsort
- merge_r.c/qh_findbest_pinchedvertex,qh_findbest_ridgevertex: dropped selecting \ 
merge direction via qh_vertex_isbelow.  Expensive and evidence mixed
- merge_r.c/qh_freemergesets,qh_initmergesets: pair qh_initmergesets with \ 
- merge_r.c/qh_freemergesets,qh_initmergesets: drop the 'all' parameter
- merge_r.c/qh_mergecycle_all: move qh_merge_degenredundant, etc. to end from \ 
- merge_r.c/qh_mergesimplex: delete facet1 from facet2.neighbors at end, not at ridge
- merge_r.c/qh_post_merges,qh_all_merges: remove setting of v.delridge on all \ 
vertices, not needed
- merge_r.c/qh_premerge: replace parameter 'apex' with 'apexpointid'.  Only used \ 
for logging
- merge_r.c/qh_premerge: add qh.newfacet_list as an implicit parameter
- merge_r.c/qh_test_degen_neighbors: split from qh_degen_redundant_neighbors and \ 
- merge_r.c/qh_test_redundant_neighbors: split from qh_degen_redundant_neighbors \ 
and qh_mergefacet
- poly_r.c/qh_attachnewfacets: clear f.neighbors and f.ridges for visible \ 
facets, will be deleted
- poly_r.c/qh_matchnewfacets: remove call to qh_checkflipped_all for \ 
qh.FORCEoutput, checked by qh_setfacetplane
- poly_r.c/qh_update_vertexneighbors: renamed qh_updatevertices. A future \ 
version will optimize
  qh_update_vertexneighbors_cone: optimization for cone of new facets
- poly2_r.c/qh_checkconvex: immediate skip of f.tricoplanar facets.  Tricoplanar \ 
facets not tested.  Called before qh_triangulate
- poly2_r.c/qh_initbuild: move 'create sentinels' before qh_createsimplex so \ 
that qh.vertex_tail is v0 like f0
- poly2_r.c/qh_initialvertices: cleaned up code for qh_INITIALmax (8-d)
- poly2_r.c/qh_makenewfacets: clear f.neighbors and f.ridges for visible facets, \ 
will be deleted
- poly2_r.c/qh_matchdupridge: optimize dupridge for flipped->!flipped, good \ 
merge, not !flipped->flipped
- poly2_r.c/qh_matchdupridge_coplanarhorizon: dropped routine.  Results same or \ 
slightly worse.  Complex addition, rarely used
- poly2_r.c/qh_triangulate: rename facet and vertex lists as \ 
  qh_triangulate does not maintain qh.newfacet_list or qh.visible_list
- poly2_r.c/qh_triangulate: ignore qh.NEWfacets. qh_checkpolygon is not valid \ 
inside qh_triangulate
- rboxlib_r.c/qh_rboxpoints2: split function from qh_rboxpoints to avoid -Wclobbered
- stat_r.c/qh_printstatlevel: remove unused NULLfield

Qhull C++ changes
- Use NULL instead of 0 for pointers
- Remove old style casts such as '(size_t)...'
- Define initializers for default constructors even if explicitly assigned
- Update static initializer list for s_empty_facet, s_empty_ridge, s_empty_vertex
- Coordinates.h: default constructor clears coordinate_array
- Coordinates.h: default iterator constructor clears i
- RboxPoints.cpp/qh_fprintf_rbox: add empty default to switch statement