New Upstream Release - r-bioc-affxparser

Ready changes

Summary

Merged new upstream version: 1.72.0 (was: 1.70.0).

Diff

diff --git a/DESCRIPTION b/DESCRIPTION
index deaed91..9b31acf 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -1,5 +1,5 @@
 Package: affxparser
-Version: 1.70.0
+Version: 1.72.0
 Depends: R (>= 2.14.0)
 Suggests: R.oo (>= 1.22.0), R.utils (>= 2.7.0), AffymetrixDataTestFiles
 Title: Affymetrix File Parsing SDK
@@ -21,9 +21,9 @@ BugReports: https://github.com/HenrikBengtsson/affxparser/issues
 biocViews: Infrastructure, DataImport, Microarray,
         ProprietaryPlatforms, OneChannel
 git_url: https://git.bioconductor.org/packages/affxparser
-git_branch: RELEASE_3_16
-git_last_commit: d2779bf
-git_last_commit_date: 2022-11-01
-Date/Publication: 2022-11-01
+git_branch: RELEASE_3_17
+git_last_commit: db85207
+git_last_commit_date: 2023-04-25
+Date/Publication: 2023-04-25
 NeedsCompilation: yes
-Packaged: 2022-11-01 20:46:55 UTC; biocbuild
+Packaged: 2023-04-25 20:08:12 UTC; biocbuild
diff --git a/NEWS b/NEWS
deleted file mode 100644
index 759587a..0000000
--- a/NEWS
+++ /dev/null
@@ -1,1793 +0,0 @@
-Package: affxparser
-===================
-
-Version: 1.69.1 [2022-04-28]
-
-BUG FIXES:
-
- * Ported bug fix from affxparser 1.68.1.
- 
-
-Version: 1.69.0 [2022-04-26]
-
- * The version number was bumped for the Bioconductor devel version, which is
-   now BioC 3.16 for R-devel.
-
-
-Version: 1.68.1 [2022-04-28]
-
-BUG FIXES:
-
- * affxparser (>= 1.67.1) failed to install with R built with '-fpic'
-   flag. The symptom was a linking error 'ld: 000.init.o: relocation
-   R_X86_64_32 against `.rodata' can not be used when making a shared
-   object; recompile with -fPIC collect2: error: ld returned 1 exit
-   status'.
- 
-
-Version: 1.68.0 [2022-04-26]
-
- * The version number was bumped for the Bioconductor release version,
-   which is now BioC 3.15 for R (>= 4.2.0).
-
-
-Version: 1.67.1 [2022-03-23]
-
-SIGNIFICANT CHANGES:
-
- * This packages requires R (>= 4.0.0) when build on MS Windows. This is
-   due to the added support for UCRT on MS Windows, which is required for
-   the upcoming R 4.2.0.
-
-SOFTWARE QUALITY:
-
- * Updates to build package from source on MS Windows with UCRT.  Thanks
-   to Tomas Kalibera for the contribution.
-
- * Now registering native routines - apparently never happened before.
-
-
-Version: 1.67.0 [2021-10-27]
-
- * The version number was bumped for the Bioconductor devel version, which is
-   now BioC 3.15 for R-devel.
-
-
-Version: 1.66.0 [2021-10-27]
-
- * The version number was bumped for the Bioconductor release version, which is
-   now BioC 3.14 for R (>= 4.1.1).
-
-
-Version: 1.65.3 [2021-09-22]
-
-SOFTWARE QUALITY:
-
- * Making sure all pathnames are of length 100 or shorter.
- 
-
-Version: 1.65.2 [2021-09-22]
-
-SOFTWARE QUALITY:
-
- * Now properly registering native routines.
- 
-
-Version: 1.65.1 [2021-09-09]
-
-BUG FIXES:
-
- * The package did not install on macOS with the M1 chip with error: "use of
-   undeclared identifier 'finite'; did you mean 'isfinite'?". This issue goes
-   back to 2014, when macOS produced "warning: 'finite' is deprecated: first 
-   deprecated in OS X 10.9 [-Wdeprecated-declarations]. isOk = finite(x);".
-   Patched by using isfinite() instead of finite().
-
-
-Version: 1.64.0 [2021-05-19]
-
- * The version number was bumped for the Bioconductor release version, which is
-   now BioC 3.13 for R (>= 4.0.3).
-
-
-Version: 1.62.0 [2020-10-27]
-
- * The version number was bumped for the Bioconductor release version, which is
-   now BioC 3.12 for R (>= 4.0.0).
-
-
-Version: 1.60.0 [2020-04-27]
-
- * The version number was bumped for the Bioconductor release version, which is
-   now BioC 3.11 for R (>= 4.0.0).
-
-
-Version: 1.58.0 [2019-10-29]
-
- * The version number was bumped for the Bioconductor release version, which is
-   now BioC 3.10 for R (>= 3.6.1).
-
-
-Version: 1.56.0 [2019-05-02]
-
- * The version number was bumped for the Bioconductor release version, which is
-   now BioC 3.9 for R (>= 3.6.0).
-
-
-Version: 1.55.0 [2018-10-30]
-
- * The version number was bumped for the Bioconductor devel version, which is
-   now BioC 3.9 for R (>= 3.6.0).
-
-
-Version: 1.54.0 [2018-10-30]
-
- * The version number was bumped for the Bioconductor release version, which is
-   now BioC 3.8 for R (>= 3.5.0).
-
-
-Version: 1.53.2 [2018-10-22]
-
-DOCUMENTATION:
-
- * Link to Affx Fusion SDK archive on GitHub.
- 
- * Spell corrections.
-
-
-Version: 1.53.1 [2018-08-28]
-
- * Updated installation instructions in README.md.
-
-
-Version: 1.53.0 [2018-04-30]
-
- * The version number was bumped for the Bioconductor devel version, which is
-   now BioC 3.8 for R (>= 3.5.0).
-
-
-Version: 1.52.0 [2018-04-30]
-
- * The version number was bumped for the Bioconductor release version, which is
-   now BioC 3.7 for R (>= 3.5.0).
- 
-
-Version: 1.51.0 [2017-10-30]
-
- * The version number was bumped for the Bioconductor devel version, which is
-   now BioC 3.7 for R (>= 3.5.0).
-
-
-Version: 1.50.0 [2017-10-30]
-
- * The version number was bumped for the Bioconductor release version, which is
-   now BioC 3.6 for R (>= 3.4.0).
-
-
-Version: 1.49.0 [2017-04-23]
-
- * The version number was bumped for the Bioconductor devel version, which is
-   now BioC 3.6 for R (>= 3.4.0).
-
-
-Version: 1.48.0 [2017-04-23]
-
- * The version number was bumped for the Bioconductor release version, which is
-   now BioC 3.5 for R (>= 3.4.0).
-
-
-Version: 1.47.0 [2016-10-18]
-
-NOTES:
-
- * The version number was bumped for the Bioconductor devel version, which
-   is now BioC 3.5 for R (>= 3.4.0).
-
-
-Version: 1.46.0 [2016-10-18]
-
-NOTES:
-
- * The version number was bumped for the Bioconductor release version, which
-   is now BioC 3.4 for R (>= 3.3.1).
-
-
-Version: 1.45.1 [2016-09-16]
-
-CODE REFACTORING:
-
- * Using c(x,y) instead of append(x,y) internally.
-
- * CLEANUP: Dropped obsolete src/R_affx_test.*cmdline.cpp files.
-
-
-Version: 1.45.0 [2015-05-03]
-
-NOTES:
-
- * The version number was bumped for the Bioconductor devel version, which
-   is now BioC 3.4 for R (>= 3.3.0).
-
-
-Version: 1.44.0 [2015-05-03]
-
-NOTES:
-
- * The version number was bumped for the Bioconductor release version, which
-   is now BioC 3.3 for R (>= 3.3.0).
-
-
-Version: 1.43.2 [2016-04-05]
-
-NEW FEATURES:
-
- * WINDOWS: Package now compiles with both the old gcc-4.6.3 toolchain as well
-   as the new gcc-4.9.3 toolchain - introduced in R (>= 3.3.0).  Thanks to
-   Jim Hester and Dan Tenenbaum for help with this.
-
-
-Version: 1.43.1 [2016-02-28]
-
-NEW FEATURES:
-
- * The DLL is now unloaded when the package is unloaded.
-
-BUG FIXES:
-
- * Fixed a bug related to including <R.h> and extern C, reported by
-   Brian Ripley.
-
-
-Version: 1.43.0 [2015-10-23]
-
-NOTES:
-
- * The version number was bumped for the Bioconductor devel version, which
-   is now BioC 3.3 for R (>= 3.3.0).
-
-
-Version: 1.42.0 [2015-10-13]
-
-NOTES:
-
- * The version number was bumped for the Bioconductor release version, which
-   is now BioC 3.2 for R (>= 3.2.2).
-
-
-Version: 1.41.7 [2015-09-14]
-
-CODE REFACTORING:
-
- * ROBUSTNESS: Explicitly importing core R functions. 
-
-
-Version: 1.41.6 [2015-07-29]
-
-NOTES:
-
- * Updated the BiocViews field of DESCRIPTION.
-
-
-Version: 1.41.5 [2015-06-17]
-
-NOTES:
-
- * New maintainer address (in all fields).
-
-
-Version: 1.41.4 [2015-05-26]
-
-NOTES:
-
- * New maintainer address.
-
-
-Version: 1.41.3 [2015-05-13]
-
-SIGNIFICANT CHANGES:
-
- * AVAILABILITY: Removed requirement for 'GNU make'.
-
-
-Version: 1.41.2 [2015-05-05]
-
-BUG FIXES:
-
- * readCelHeader() and readCel() would core dump R/affxparser if trying to
-   read multi-channel CEL files (Issue #16). Now an error is generated instead.
-   Multi-channel CEL files (e.g. Axiom) are not supported by affxparser.
-   Thanks to Kevin McLoughlin (Lawrence Livermore National Laboratory, USA)
-   for reporting on this.
-
- * readCelHeader() and readCel() on corrupt CEL files could core dump
-   R/affparser (Issues #13 & #15).  Now an error is generated instead. Thanks
-   to Benilton Carvalho (Universidade Estadual de Campinas, Sao Paulo, Brazil)
-   and Malte Bismarck (Martin Luther University of Halle-Wittenberg) for
-   reports.
-
-
-Version: 1.41.1 [2015-04-25]
-
-BUG FIXES:
-
- * Native functions R_affx_GetCHPEntries() and R_affx_ReadCHP() had unbalanced
-   PROTECT()/UNPROTECT().  Also, native R_affx_GetCHPGenotypingResults() had
-   two non-PROTECT():ed usages of mkString().  Thanks to Tomas Kalibera at
-   Northeastern University for reporting on this.
-
-
-Version: 1.41.0 [2015-04-16]
-
-NOTES:
-
- * The version number was bumped for the Bioconductor devel version, which
-   is now BioC 3.2 for R (>= 3.3.0).
-
-
-Version: 1.40.0 [2015-04-16]
-
-NOTES:
-
- * The version number was bumped for the Bioconductor release version, which
-   is now BioC 3.1 for R (>= 3.2.0).
-   
-
-Version: 1.39.5 [2015-04-15]
-
-SIGNIFICANT CHANGES:
-
- * Removed 'SystemRequirements: GNU make'.
-
-NEW FEATURES:
-
- * ROBUSTNESS: Now readPgfEnv()/readPgf() validated 'indices', iff possible.
-
- * Now readPgfEnv()/readPgf() coerces some header fields to integers, iff they
-   exists, specifically 'num-cols', 'num-rows', 'probesets', and 'datalines'.
-
- * CLEANUP: Package no longer gives readBin() warnings on "'signed = FALSE' is
-   only valid for integers of sizes 1 and 2".
-
-BUG FIXES:
-
- * convertCel() on a CCG/v1 CEL file could give "Error in sprintf(
-   "GridCorner%s=%d %d\n" ... invalid format '%d' ...)".  Added package test
-   for convertCel(), but in this particular case it would not have cought it
-   because it only happened for chip types of particular dimensions.  Thanks
-   to Malte Bismarck at UK Halle (Germany) for reporting on this.
-
-
-Version: 1.39.4 [2015-01-18]
-
-SIGNIFICANT CHANGES:
-
- * ROBUSTNESS: 'GNU make' is a SystemRequirements (for now).
-
-CODE REFACTORING:
-
- * ROBUSTNESS: Did not seem to be needed, but package is now a good citizen
-   and do library.dynlib.unload() when unloaded.
-
- * Now using requireNamespace() instead of require().
-
- * Internal cleanup of native code.
-
-
-Version: 1.39.3 [2014-11-26]
-
-BUG FIXES:
-
- * readPgf() and readPgfEnv() failed to read all units (probesets) on some
-   systems.  Extensive package tests have been added to test this and other
-   cases.  Thanks to Grischa Toedt at EMBL Germany for reporting on,
-   troubleshooting, and helping out with patches for this bug.
-
-
-Version: 1.39.2 [2014-10-28]
-
-BUG FIXES:
-
- * The range test of argument 'units' to readCdf() and readCdfQc() was never
-   performed due to a typo, meaning it was possible to request units out of
-   range.  Depending on system this could result in either a core dump or
-   random garbage read for the out of range units.
-
-SOFTWARE QUALITY:
-
- * ROBUSTNESS: Added package system tests for out of range 'units' and
-   'indices' arguments for most read functions.
-
-
-Version: 1.39.1 [2014-10-26]
-
-NEW FEATURES:
-
- * ROBUSTNESS: Now all methods gives an informative error message if zero
-   elements are requested, i.e. via zero-length argument 'indices' or 'units'
-   that is not NULL. Previously this case would access all values just like
-   NULL does.
-
- * ROBUSTNESS: Now readCelRectangle() gives an informative error message if
-   argument 'xrange' or 'yrange' is not of length two.
-
-BUG FIXES:
-
- * readPgf() and readPgfEnv() would give an error if argument 'indices' was
-   specifies as a double rather than as an integer vector.
-
-
-Version: 1.39.0 [2014-10-13]
-
-NOTES:
-
- * The version number was bumped for the Bioconductor devel version, which
-   is now BioC 3.1 for R (>= 3.2.0).
-
-
-Version: 1.38.0 [2014-10-13]
-
-NOTES:
-
- * The version number was bumped for the Bioconductor release version, which
-   is now BioC 3.0 for R (>= 3.1.1).
-
-
-Version: 1.37.2 [2014-09-28]
-
-NOTES:
-
- * Minor modifications due to the move to GitHub.
-
-
-Version: 1.37.1 [2014-08-25]
-
-SOFTWARE QUALITITY:
-
- * Removed R CMD check NOTEs that appeared in recent R versions.
-
-
-Version: 1.37.0 [2014-04-11]
-
-NOTES:
-
- * The version number was bumped for the Bioconductor devel version, which
-   is now BioC 2.15 for R (>= 3.1.0).
-
-
-Version: 1.36.0 [2014-04-11]
-
-NOTES:
-
- * The version number was bumped for the Bioconductor release version, which
-   is now BioC 2.14 for R (>= 3.1.0).
-
-
-Version: 1.35.3 [2014-02-28]
-
-NOTES:
-
- * Same updates as in release v1.34.2.
-
-
-Version: 1.35.2 [2014-02-28]
-
-SOFTWARE QUALITY:
-
- * Patches to Fusion SDK based on clang v3.4.
-
-
-Version: 1.35.1 [2014-02-27]
-
-NOTES:
-
- * Same updates as in release v1.34.1.
-
-
-Version: 1.35.0 [2013-10-14]
-
-NOTES:
-
- * The version number was bumped for the Bioconductor devel version.
-
-
-Version: 1.34.2 [2014-02-28]
-
-CODE REFACTORING:
-
- * CLEANUP: Removed unnecessary usage of ':::'.
-
-
-Version: 1.34.1 [2014-02-27]
-
-BUG FIXES:
-
- * readCelUnits() could throw 'Error in vector("double", nbrOfCells *
-   nbrOfArrays) : vector size cannot be NA.  In addition: Warning message: In
-   nbrOfCells * nbrOfArrays : NAs produced by integer overflow' when reading
-   from a large number of arrays and/or a large number of units.  Previously
-   the limit of nbrOfCells*nbrOfArrays was .Machine$integer.max (=2147483647),
-   whereas now it is .Machine$double.xmax (=1.797693e+308).  Thanks to
-   Damian Plichta at the Technical University of Denmark for reporting on this.
-
-
-Version: 1.34.0 [2012-10-14]
-
-NOTES:
-
- * The version number was bumped for the Bioconductor release version, which
-   is now BioC 2.13 for R (>= 3.0.0).
-
-
-Version: 1.33.4 [2013-09-23]
-
-PERFORMANCE:
-
- * Package now uses which() instead of whichVector() of 'R.utils'.  Before
-   R (< 2.11.0), which() used to be 10x slower than whichVector(), but now
-   it's 3x faster.
-
-
-Version: 1.33.3 [2013-06-29]
-
-NOTES:
-
- * Same updates as in release v1.32.3.
-
-
-Version: 1.33.2 [2013-05-25]
-
-NOTES:
-
- * Same updates as in release v1.32.2.
-
-
-Version: 1.33.1 [2013-05-20]
-
-NOTES:
-
- * Same updates as in release v1.32.1.
-
-
-Version: 1.33.0 [2013-04-03]
-
-NOTES:
-
- * The version number was bumped for the Bioconductor devel version.
-
-
-Version: 1.32.3 [2013-06-29]
-
-BUG FIXES:
-
- * Since affxparser 1.30.2/1.31.2 (r72352; 2013-01-08), writeCdf() would
-   incorrectly encode the unit types, iff the input 'cdf' argument specified
-   them as integers, e.g. as done by writeCdf() for AffyGenePDInfo in
-   aroma.affymetrix.  More specifically, the unit type index would be off by
-   one, e.g. an 'expression' unit (1) would be encoded as an 'unknown' unit (0)
-   and so on.  On the other  hand, if they were specified by their unit-type
-   names (e.g. 'expression') the encoding should still be correct, e.g. if
-   input is constructed from readCdf() of affxparser.  Thanks to Guido Hooiveld
-   at Wageningen UR (The Netherlands) for reporting on this.
-
- * Similarily, writeCdf() has "always", at least affxparser 1.7.4 since
-   (r21888; 2007-01-09), encoded unit directions and QC unit types incorrectly,
-   iff they were specified as integers.
-
-
-Version: 1.32.2 [2013-05-25]
-
-PEFORMANCE:
-
- * Removed all remaining gc() calls.
-
- * Replaced all rm() calls with NULL assignments.
-
-
-Version: 1.32.1 [2013-05-20]
-
-CODE REFACTORING:
-
- * CRAN POLICY: Now all Rd \usage{} lines are at most 90 characters long.
-
-
-Version: 1.32.0 [2013-04-03]
-
-NOTES:
-
- * The version number was bumped for the Bioconductor release version.
-
-
-Version: 1.31.4 [2013-03-19]
-
-CODE REFACTORING:
-
- * Made example(invertMap) a bit faster so 'R CMD check' won't complain.
-
-
-Version: 1.31.3 [2013-03-18]
-
-CODE REFACTORING:
-
- * Internal isPackageLoaded() of findFiles() no longer uses defunct
-   manglePackageName() function.
-
-
-Version: 1.31.2 [2013-01-07]
-
-NOTES:
-
- * Same updates as in release v1.30.2.
-
-
-Version: 1.31.1 [2012-10-18]
-
-NEW FEATURES:
-
- * Now compareCdfs() gives a more precise 'reason' attribute when there is a
-   difference in (regular or QC) units.  It narrows down the first unit that
-   differs and reports it unit number.
-
-
-Version: 1.31.0 [2012-10-01]
-
-NOTES:
-
- * The version number was bumped for the Bioconductor devel version.
-
-
-Version: 1.30.2 [2013-01-07]
-
-BUG FIXES:
-
- * writeCdf() did not encode unit types as decoded by readCdf().  Unit type
-   'unknown' was incorrectly encoded such that readCdf() would decode it as
-   'copynumber'.  Also, unit types 'genotypingcontrol' and 'expressioncontrol'
-   where not encoded at all.
-
-
-Version: 1.30.0 [2012-10-01]
-
-NOTES:
-
- * The version number was bumped for the Bioconductor release version.
-
-
-Version: 1.29.13 [2012-09-26]
-
-NEW FEATURES:
-
- * Added argument 'cdf=FALSE' to createCel(). Note, the previous implementation
-   corresponded to cdf=TRUE.
-
-SOFTWARE QUALITY:
-
- * ROBUSTNESS: Now createCel() validates/sets CEL header field 'total' based on
-   'cols' and 'rows'.
-
- * ROBUSTNESS: Added a system test for validating that the package can write
-   and read a CEL.  The test is spawning of another R process so that the test
-   is robust against core dumps.
-
-
-Version: 1.29.12 [2012-09-12]
-
-DOCUMENTATION:
-
- * Updated one Rd link.
-
-
-Version: 1.29.11 [2012-09-01]
-
-NEW FEATURES:
-
- * Added argument 'aliases' to arrangeCelFilesByChipType(), e.g.
-   arrangeCelFilesByChipType(..., aliases=c("Focus"="HG-Focus")).
-
-BUG FIXES:
-
- * arrangeCelFilesByChipType(pathnames) assumed 'pathnames' were files in
-   the current directory.
-
-
-Version: 1.29.10 [2012-08-29]
-
-CODE REFACTORING:
-
- * Updated some internal files used solely for maintainance.
-
-
-Version: 1.29.9 [2012-08-29]
-
-BUG FIXES:
-
- * The move to Fusion SDK 1.1.2 caused the package to not compile on Windows.
-
-
-Version: 1.29.8 [2012-08-14]
-
-SIGNIFICANT CHANGES:
-
- * Upgraded to Fusion SDK 1.1.2.
-
-
-Version: 1.29.7 [2012-08-14]
-
-CODE REFACTORING:
-
- * Rearranged patchdir.
-
-
-Version: 1.29.6 [2012-06-26]
-
- * Same updates as in v1.28.1.
-
-
-Version: 1.29.5 [2012-06-19]
-
-NEW FEATURES:
-
- * Added arrangeCelFilesByChipType() for moving CEL files to subdirectories
-   named according to their chip types, which can be useful when for instance
-   downloading GEO data sets.
-
-
-Version: 1.29.4 [2012-06-14]
-
-NEW FEATURES:
-
- * readPgfEnv(..., indices=NULL) no longer gives a warning.
-
- * Updated the error messages for the CLF and PGF parsers.
-
-
-Version: 1.29.3 [2012-05-22]
-
-SOFTWARE QUALITY:
-
- * Now system test tests/testWriteAndReadEmptyCdf.R generates an error that is
-   detected and reported by R CMD check.
-
-
-Version: 1.29.2 [2012-05-22]
-
-SOFTWARE QUALITY:
-
- * GENERALIZATION: Now system tests that launch another R process no longer
-   assumes R is on the OS's search path.
-
-CODE REFACTORING:
-
- * ROBUSTNESS/CRAN POLICY: readCel() and readCelUnits() are no longer calling
-   .Internal(qsort(...)).
-
-
-Version: 1.29.1 [2012-05-18]
-
-BUG FIXES:
-
- * Replaced several throw() with stop(), because the former assumes that
-   R.methodsS3 is loaded, which it may not be.
-
-SOFTWARE QUALITY:
-
- * ROBUSTNESS: Added a system test for validating that the package can write
-   and read a CDF.  The test is spawning of another R process so that the test
-   is robust against core dumps.
-
-
-Version: 1.29.0 [2012-03-30]
-
-NOTES:
-
- * The version number was bumped for the Bioconductor devel version.
-
-
-Version: 1.28.1 [2012-06-26]
-
- * COMPATIBILITY: Now package compile also with gcc/g++ 4.7. Thanks Dan
-   Tenenbaum (Bioconductor Core Team), Fred Hutchinson Cancer Research Center,
-   USA for this.
-
-
-Version: 1.28.0 [2012-03-30]
-
-NOTES:
-
- * The version number was bumped for the Bioconductor 2.10 release version.
-
-
-Version: 1.27.5 [2012-03-19]
-
-SOFTWARE QUALITY:
-
- * ROBUSTNESS: Now the native code throws R errors, instead of printing an
-   error message to stdout/stderr and then returning null, that is translated
-   to errors at the R level.
-
-
-Version: 1.27.4 [2012-03-05]
-
-BUG FIXES:
-
- * affxparser would not build on Windows with the new Rtools toolchain
-   (Rtools 2.15.0.1915-1919).
-
-
-Version: 1.27.3 [2011-11-18]
-
-SOFTWARE QUALITY:
-
- * ROBUSTNESS: Added sanity checks asserting that the internal readers did
-   indeed read something and not just returned NULL.  It should be very
-   unlikely that this occurs, but there is still a small risk that after
-   asserting that a file exists, but before the internal Fusion SDK parsers
-   access the file, the file has been removed.
-
-
-Version: 1.27.1 [2011-11-01]
-
-NOTES:
-
- * Same updates as in v1.26.1.
-
-
-Version: 1.27.0 [2011-10-31]
-
-NOTES:
-
- * The version number was bumped for the Bioconductor devel version.
-
-
-Version: 1.26.4 [2012-03-06]
-
-BUG FIXES:
-
- * affxparser would not build on Windows with the new Rtools toolchain
-   (Rtools 2.15.0.1915-1919), which is for R (> 2.14.1), i.e. also for
-   R 2.14.2 (but not 2.14.1). This is the same bug fix that was first
-   done in v1.27.4.
-
-
-Version: 1.26.2 [2011-11-16]
-
-NOTES:
-
- * The version number was bumped by Bioconductor to trigger a build.
-
-
-Version: 1.26.1 [2011-11-01]
-
-BUG FIXES:
-
- * FIX: Fixed warning on "In readBin(con, what = "integer", size = 4, n = 1, 
-   signed = FALSE, 'signed = FALSE' is only valid for integers of sizes 1 
-   and 2" that some read methods would generated.
-
-
-Version: 1.26.0 [2011-10-31]
-
-NOTES:
-
- * The version number was bumped for the Bioconductor 2.9 release version.
-
-
-Version: 1.25.1 [2011-09-27]
-
-NOTES:
-
- * Maintainer email was updated.
-
-
-Version: 1.25.0 [2011-04-13]
-
-NOTES:
-
- * The version number was bumped for the Bioconductor devel version.
-
-
-Version: 1.24.0 [2011-04-13]
-
-NOTES:
-
- * The version number was bumped for the Bioconductor 2.8 release version.
-
-
-Version: 1.23.3 [2011-02-22]
-
-DOCUMENTATION:
-
- * DOCUMENTATION: Added a section on what it means by setting a new (different)
-   chip type for the output in convertCel().
-
-BUG FIXES:
-
- * The internal .unwrapDatHeaderString(), used by convertCel() among others,
-   would throw "Internal error: Failed to extract 'pixelRange' and 'sampleName'
-   from DAT header. They became identical: ..." in case the DAT header of the
-   CEL file did not contain all fields.  The function has now been updated to
-   be more forgiving and robust so that missing values are returned for such
-   fields instead.
-
-
-Version: 1.23.2 [2011-02-15]
-
-DOCUMENTATION:
-
- * Added a clarification to the help page on 'Cell coordinates and cell
-   indices' that the convention in affxparser is to use one-based cell indices,
-   because they are more convenient to use in R.  In order to clearly
-   distinguish these from the redudant zero-based index values that also exist
-   in CDF file, an additional section was added on that topic.  Moreover, help
-   pages for methods querying CDF files are now referring to the above page,
-   where applicable.  Thanks to William Mounts (Pfizer) and Todd Allen for
-   pointing out these ambiguities in the documentation.
-
-
-Version: 1.23.1 [2010-12-16]
-
-CODE REFACTORING:
-
- * ROBUSTNESS: Now matrix(...) is used instead of .Interal(matrix(...)).
-
-
-Version: 1.23.0 [2010-10-17]
-
-NOTES:
-
- * The version number was bumped for the Bioconductor devel version.
-
-
-Version: 1.22.0 [2010-10-17]
-
-NOTES:
-
- * The version number was bumped for the Bioconductor 2.7 release version.
-
-
-Version: 1.21.1 [2010-10-05]
-
-NEW FEATURES:
-
- * Now readCdfDataFrame() also returns the cell field 'expos'.
-
-
-Version: 1.21.0 [2010-04-22]
-
-NOTES:
-
- * The version number was bumped for the Bioconductor devel version.
-
-
-Version: 1.20.0 [2010-04-22]
-
-NOTES:
-
- * The version number was bumped for the Bioconductor 2.6 release version.
-
-
-Version: 1.19.6 [2010-02-11]
-
-BUG FIXES:
-
- * More fixes.
-
-
-Version: 1.19.5 [2010-02-09]
-
-BUG FIXES:
-
- * More fixes.
-
-
-Version: 1.19.4 [2010-02-06]
-
-BUG FIXES:
-
- * More fixes.
-
-
-Version: 1.19.3 [2010-02-06]
-
-BUG FIXES:
-
- * A couple of patches to Fusion SDK courtesy of Brian Ripley; they are needed
-   for Windows (64).
-
-
-Version: 1.19.2 [2010-02-02]
-
-BUG FIXES:
-
- * A fix to the Windows build.
-
-
-Version: 1.19.1 [2010-01-29]
-
-SIGNIFICANT CHANGES:
-
- * Updated Fusion SDK to 1.1.0.
-
-
-Version: 1.19.0 [2009-10-27]
-
-NOTES:
-
- * Devel version bumped because of the new Bioconductor release.
-
-
-Version: 1.18.0 [2009-10-27]
-
-NOTES:
-
- * Release version bumped because of the new Bioconductor 2.5 release.
-
-
-Version: 1.17.5 [2009-09-22]
-
-DOCUMENTATION:
-
- * Fixed broken link in an Rd file.
-
-
-Version: 1.17.4 [2009-09-21]
-
-NEW FEATURES:
-
- * Added parseDatHeaderString(), which in combination with readCelHeader() can
-   be used to infer the timestamp in the header of a CEL file.
-
-
-Version: 1.17.3 [2009-05-29]
-
-NEW FEATURES:
-
- * Added applyCdfGroupFields() and cdfSetDimension().
-
-
-Version: 1.17.2 [2009-02-20]
-
-BUG FIXES:
-
- * readChp() would crash (segmentation fault) for (at least) some CHP files
-   for GenomeWideSNP_5 generated by Affymetrix Power Tools.
-
- * Updated compareCels() to work with new readCelHeader().
-
-
-Version: 1.17.1 [2009-05-09]
-
-NEW FEATURES:
-
- * Now readCelHeader() also reads DAT headers from Calvin CEL files.
-
-
-Version: 1.17.0 [2009-04-20]
-
-NOTES:
-
- * Devel version bumped because of the new Bioconductor release.
-
-
-Version: 1.16.0 [2009-04-20]
-
-NOTES:
-
- * Release version bumped because of the new Bioconductor 2.4 release.
-
-
-Version: 1.15.6 [2009-02-20]
-
-NEW FEATURES:
-
- * Added optional argument 'newChipType' to convertCel() for overriding the
-   default chip type.  Useful for updating the formal chip type of old CEL
-   files.
-
-CODE REFACTORING:
-
- * Removed all gc() calls in convertCel().
-
-
-Version: 1.15.5 [2009-02-14]
-
- * Updated Fusion from 1.11 to 1.12.
-
-BUG FIXES:
-
- * Fixed a bug related to SET_VECTOR_ELT/SET_ELEMENR used on strings, which
-   adffected readChp().
-
- * Fixed a bug related to naming of the list structures (we assigned a list
-   instead of a character as the name. Affected readCdfUnits() and
-   readCdfCellIndices().
-
- * Fixed a bug in the example for readCdfUnitsWriteMap(): the package
-   AffymetrixDataTestFiles was misspelled, so the tests were never run.
-
-
-Version: 1.15.4 [2009-02-10]
-
-BUG FIXES:
-
- * readCcg() and readCcgHeader() no longer give warnings on 'truncating string
-   with embedded nul' in rawToChar().  These warnings made no difference, but
-   were annoying.
-
-
-Version: 1.15.3 [2009-01-22]
-
-DOCUMENTATION:
-
- * Fixed a minor Rd problem.
-
-
-Version: 1.15.2 [2008-12-30]
-
-NOTES:
-
- * Same bug fix as in release version v1.14.2.
-
-
-Version: 1.15.1 [2008-12-04]
-
-NOTES:
-
- * Same bug fix as in release version v1.14.1.
-
-
-Version: 1.15.0 [2008-10-21]
-
-NOTES:
-
- * Devel version bumped because of the new Bioconductor release.
-
-
-Version: 1.14.2 [2008-12-30]
-
-BUG FIXES:
-
- * readChp() would not read all data.  Thanks Gabor Csardi for reporting this
-   and providing a patch.
-
-
-Version: 1.14.1 [2008-12-04]
-
-BUG FIXES:
-
- * When the CDF file is on a Windows network, that is, has a pathname starting
-   with '//' or '\\', then the 'chiptype' reported by readCdfHeader() contains
-   a path component as well.  This seems to be due to a bug in Fusion SDK.
-
-
-Version: 1.14.0 [2008-10-21]
-
-NOTES:
-
- * Release version bumped because of the new Bioconductor 2.3 release.
-
-
-Version: 1.13.8 [2008-08-28]
-
- * Fix of include statements in Fusion, details are described in
-   inst/info/changes2fusion.txt. This fixes an issue with GCC 4.3.
-
-
-Version: 1.13.7 [2008-08-23]
-
-PERFORMANCE:
-
- * readCcg() is substantially faster after removing all gc() calls.
-
-
-Version: 1.13.6 [2008-08-21]
-
-SIGNIFICANT CHANGES:
-
- * Updated Fusion SDK from 1.0.10b (Jan 2008) to 1.0.11 (July 2008).
-
-
-Version: 1.13.x [2008-08-14]
-
-DOCUMENTATION:
-
- * Fixed typos and incorrect equation in help page '2. Cell coordinates and
-   cell indices'.
-
-
-Version: 1.13.5 [2008-08-09]
-
-NEW FEATURES:
-
- * Made readCdf() recognize more unit types.
-
-BUG FIXES:
-
- * writeCdf() would write 'CustomSeq' units as 'Tag' units, and vice versa.
-   This means that *ASCII* CDFs containing such units and converted with
-   convertCdf() would be have an incorrect unit type for these units.
-   Also, unit type 'Copy Number' is reported as "copynumber" and no longer
-   as "unknown".
-
- * The increase of the internal buffer for reading the 'refseq' header field
-   of ASCII CDFs that was done in 1.11.2 was mistakenly undone in 1.13.3.
-
-
-Version: 1.13.4 [2008-08-05]
-
-DOCUMENTATION:
-
- * Now help(createCel) (and its example) clarifies that the template CEL header
-   can be of v3 (ASCII), v4 (binary;XDA), or v1 (binary;Calvin).
-
-CODE REFACTORING:
-
- * Renamed the HISTORY file to NEWS.
-
-
-Version: 1.13.3 [2008-05-20]
-
-BUG FIXES:
-
- * Now writeTpmap() works.
-
-
-Version: 1.13.2 [2008-05-08]
-
-NOTES:
-
- * Copied all updates in v1.12.2 (release) to v1.13.2 (devel).
-
-
-Version: 1.13.1 [2008-05-02]
-
-NOTES:
-
- * Copied all updates in v1.12.1 (release) to v1.13.1 (devel).
-
-
-Version: 1.13.0 [2008-04-29]
-
-NOTES:
-
- * Devel version bumped because of the new Bioconductor release.
-
-
-Version: 1.12.2 [2008-05-09]
-
-BUG FIXES:
-
- * affxparser 1.12.1 would not build on Windows.  Fix by Martin Morgan.
-
-
-Version: 1.12.1 [2008-05-02]
-
-NEW FEATURES:
-
- * Added readChp(). Contribution by Robert Gentleman.
-
-
-Version: 1.12.0 [2008-04-29]
-
-NOTES:
-
- * Release version bumped because of the new Bioconductor 2.2 release.
-
-
-Version: 1.11.13 [2008-04-13]
-
-SIGNIFICANT CHANGES:
-
- * Updated to Fusion SDK v1.0.10b.
-
-
-Version: 1.11.? [2008-03-06]
-
-BUG FIXES:
-
- * Regular expression pattern 'a-Z' is illegal on (at least) some locale, e.g.
-   'C' (where 'A-z' works). The only way to specify the ASCII alphabet is to
-   list all characters explicitly, which we now do in all methods of the
-   package.  See the r-devel thread "invalid regular expression '[a-Z]'" on
-   2008-03-05 for details.
-
-
-Version: 1.11.6 [2008-03-04]
-
-NEW FEATURES:
-
- * Added trial versions of readClf() and readPgf().
-
-
-Version: 1.11.5 [2008-02-29]
-
-NEW FEATURES:
-
- * Updated cdfMergeStrands() to merge any even number of groups, not only units
-   with two or four group pairs.
-
-BUG FIXES:
-
- * The code in findFiles() for testing if R.utils is loaded or not was not
-   correct making it fail to detect R.utils.
-
-
-Version: 1.11.4 [2008-02-20]
-
-NEW FEATURES:
-
- * Added argument 'allFiles=TRUE' to findFiles().
-
- * Updated readCcg() according to the newer file format specifications. Now it
-   is possible to do low-level reading of copy-number CNCHP files generated by
-   the Affymetrix Genotype Console v2.
-
-CODE REFACTORING:
-
- * Now findFiles() and hence findCdf() is only utilizing the R.utils package
-   if it is already loaded.  It will no longer try to load R.utils.
-
-
-Version: 1.11.3 [2007-12-01]
-
-NEW FEATURES:
-
- * Removed argument 'reorder' from readCel() and readCelUnits() since its name
-   was misleading (the returned value was identical regardless of 'reorder',
-   but the reading speed was faster when 'reorder' was TRUE, which is how it
-   is now hardwired).
-
-
-Version: 1.11.2 [2007-11-06]
-
-BUG FIXES:
-
- * Reading a CDF that has a 'refseq' header field longer than 65,000 symbols
-   would crash R, e.g. when reading certain CDFs for resequencing chip types.
-   A buffer size internal of Fusion SDK was increased from 65,000 to 400,000
-   bytes.  Thanks Wenyi Wang for reporting this.
-
- * Argument 'verbose' of tpmap2bpmap() was not coerced to integer before
-   passed to the native code.
-
- * The internal .initializeCdf(), used when creating new CDFs, had an error
-   message refering to an invalid 'qcUnitLengths' when it was supposed to be
-   'unitLengths'.  Thanks Elizabeth Purdom for reporting this.
-
-CODE REFACTORING:
-
- * created a Makefile in /inst/info for comparing Fusion SDK with affxparser.
-
-
-Version: 1.11.1 [2007-10-12]
-
-NEW FEATURES:
-
- * convertCel() will no longer generate a warning if the corresponding CDF
-   file was not found.
-   
-BUG FIXES:
-
- * For some Calvin CEL files the CEL header does not contain "parent parameter"
-   'affymetrix-dat-header' but only parameter 'affymetrix-partial-dat-header'.
-   In that case convertCel() would throw an error about 'sprintf("DatHeader=
-   %s\n", datHeader)'.  Now a "fake" DAT header is created from the partial
-   one.  If neither is found, a slightly more informative exception is thrown.
-
-
-Version: 1.11.0 [2007-10-02]
-
-NOTES:
-
- * Version bumped because of the new Bioconductor release.
-
-
-Version: 1.9.5 [2007-09-16]
-
-NEW FEATURES:
-
- * Added argument 'recursive=TRUE' to findCdf().  Note, the current working
-   directory is always scanned first, but never recursively (unless explicitly
-   added to the search path). This is to avoid "endless" scans in case the
-   search path has not been set.
-
- * findFiles() now do a breath-first search in lexicographic order.
-
- * Removed default search paths cdf/ and data/cdf/.  We do not want to enforce
-   a standard path.
-
-CODE REFACTORING:
-
- * Now the examples (as well as test scripts) utilize data available in the
-   new Bioconductor AffymetrixDataTestFiles package.  This means that
-   'R CMD check' now runs much more tests, which is good.
-
- * CLEAN UP: Removed many of the old testscripts/ scripts.  They are now under
-   tests/.
-
-BUG FIXES:
-
- * findFiles() was not robust against broken Unix links.
-
- * If the destination file already existed, convertCel() would correctly
-   detect that, but would report the name of the source file.
-
-
-Version: 1.9.4 [2007-08-25]
-
-SIGNIFICANT CHANGES:
-
- * Updated to Fusion SDK v1.0.9.
-
-
-Version: 1.9.3 [2007-08-16]
-
-NOTES:
-
- * See updated made to release v1.8.3 below.
-
- * The only difference between v1.9.3 and v1.8.3 is the modification of
-   findCdf() in v1.9.2.
-
-
-Version: 1.9.2 [2007-07-27]
-
-SIGNIFICANT CHANGES:
-
- * This BioC devel version requires R v2.6.0 due to a change of how strings
-   are handled in C by Bioconductor.
-
-NEW FEATURES:
-
- * Modified findCdf() such that it is possible to set an alternative function
-   for how CDFs are located.
-
-
-Version: 1.8.3 [2007-08-16] (also added to devel v1.9.3)
-
-NEW FEATURES:
-
- * Made several updated so that affxparser better supports CEL files in the
-   new Command Console (Calvin) file format:
-   - isCelFile() recognized Calvin CEL files.
-   - convertCel() can convert a Calvin CEL files into v4 CEL files.
-   - writeCelHeader() can write v4 CEL headers given Calvin CEL header.
-
-CODE REFACTORING:
-
- * Added internal/private function to read Command Console Generic (CCG) files,
-   also known as Calvin files.  Note, these functions are currently *not*
-   utilizing the Fusion SDK library, but are instead written from scratch
-   based on the Affymetrix' file format definitions.
-
-
-Version: 1.8.2 [2007-08-01]
-
-PERFORMANCE:
-
- * Optimized writeCdfHeader() for memory.  For a CDF with 1,200,000+ units
-   just writing the unit names would consume 1-1.5GB RAM.  Now it writes unit
-   names in chunks keeping the memory overhead around 100-200MB.
-
- * Made convertCdf() more memory efficient.
-
-BUG FIXES:
-
- * error message in isCelFile() when the file was not found was broken.
-
-
-Version: 1.8.1 [2007-07-26]
-
-SIGNIFICANT CHANGES:
-
- * Now affxparser install on OSX with PPC.
-
-
-Version: 1.8.0 [2007-04-24]
-
-NOTES:
-
- * The version number was bumped up with the Bioconductor release.
-
-
-Version: 1.7.5 [2007-03-08]
-
-NEW FEATURES:
-
- * Added argument 'truncateGroupNames' to readCdfGroupNames() which defaults
-   to TRUE for backward compatibility.  When TRUE, any prefix of group names
-   identical to the unit name will be stripped of the group names.
-
-
-Version: 1.7.4 [2007-02-21]
-
-NEW FEATURES:
-
- * Now readCelUnits() can handle unit groups for which there are no probes,
-   e.g. when stratifying on PM in a unit containing only MMs.
-
- * Added writeCdfHeader(), writeCdfQcUnits() and writeCdfUnits().  These are
-   all used by writeCdf(). They also make it possible to write a CDF in chunks
-   in order to for instance convertCdf() in constant memory.
-
-
-Version: 1.7.3 [2007-01-05]
-
-NEW FEATURES:
-
- * Added cdfAddPlasqTypes().
-
- * Now readCdfUnits(..., readDirections=TRUE) also returns group directions.
-
- * Now readCdf() reads all unit and group fields by default.
-
- * In addition to optimizing IO time, read maps can be used to unrotate CEL
-   data rotated by the dChip software. For more information, see help on
-   "Cell-index maps for reading and writing".
-
-BUG FIXES:
-
- * Using read maps for readCel() would give an error saying the read map is
-   invalid even when it is not.
-
-
-Version: 1.7.2 [2006-12-10]
-
-NEW FEATURES:
-
- * Added argument 'isPm' to readCdf().
- 
-BUG FIXES:
-
- * readCdfUnits() and readCdfCellIndices() with stratifyBy="mm" would return
-   the same as stratifyBy="pm".  Options "pm" and "pmmm" are unaffected by
-   this fix.
-
-
-Version: 1.7.1 [2006-11-03]
-
-SIGNIFICANT CHANGES:
-
- * Updated to Fusion SDK v1.0.8.
-
- * Windows build change: The Windows version is building against the Windows
-   code of Fusion SDK not the POSIX code. In order to do this we have had to
-   patch the preprocessor code in several of the Fusion SDK source-code files,
-   which has to be redone manually whenever Fusion is updated.  Starting with
-   this version, we instead set the _MSC_VER flag used in the Fusion code to
-   indicate Windows (set by the Microsoft Visual C++ compiler). Since we are
-   using MINGW this flag is obviously not set. Faking _MSC_VER this way leaves
-   us only having to patch one single file in the Fusion release instead of
-   10-20. Hopefully there are no other side effects.
-
-BUG FIXES:
-
- * In Fusion SDK (v1.0.5) that previous version of affxparser used, a CDF file
-   was never closed on Unix platforms (this bug was not in the Windows
-   version).  Since Fusion allocated memory for the complete CDF (even if a
-   subset is only read), this caused the memory usage to blow up, when reading
-   the same or different CDF files multiple times, because the memory was
-   never deallocated.  Thanks Seth Falcon and Ken Simpson for reporting this
-   problem.
-
-
-Version: 1.7.0 [2006-10-25]
-
-NEW FEATURES:
-
- * Made readCelUnits() a bit more clever if a 'cdf' structure with only cell
-   indices is passed. Then all fields are just indices and one can call unlist
-   immediately.  This speeds things up a bit.
-
-BUG FIXES:
-
- * writeCdf() would create an invalid CDF file if there were no QC units.
-   This would in turn make readCdfUnits() etc core dump.
-
- * Similar to get bug fix in the C code for readCelHeader(), much of the
-   C-level code for CDF (and BPMAP) files assumes that the strings from Fusion
-   SDK have a null terminator. At least for CDF unit names, this is not
-   necessarily the case.  To be on the safe side, for all retrieved Fusion SDK
-   strings we now make sure there is a null terminator before converting it
-   into an R string.  Thanks to Ken Simpson at WEHI for all the troubleshooting.
-
- * Because of the above bug fix, the ASCII mouse exon CDF can now be converted
-   into a valid binary CDF.
-
-NOTES:
-
- * The devel version number was bumped up with the Bioconductor release.
-
-
-Version: 1.6.0 [2006-10-03]
-
-NOTES:
-
- * The version number was bumped up with the Bioconductor release.
-
-
-Version: 1.5.x [2006-09-21]
-
-NEW FEATURES:
-
- * Added compareCdfs() to verify that a converted CDF is correct.
-
- * Added convertCdf() utilizing the new writeCdf().
-
- * Added trial version of createCel().
-
- * Added trial version of updateCelUnits().
-
-BUG FIXES:
-
- * The C code for readCelHeader() did not allocate space for the string null
-   terminator for the header elements that originates from wide C++ string.
-   This caused readCelHeader() to contain string elements with random
-   characters at the end.
-
- * nrows and ncols were swapped in the CDF header when written by writeCdf().
-   This was missed because all tested CDFs were square.
-   
-SOFTWARE QUALITY:
-
- * Now the package passes R CMD check without warnings.
-
-
-Version: 1.5.4 [2006-08-18]
-
-SIGNIFICANT CHANGES:
-
- * Updated Fusion SDK to version 1.0.7.
-
-BUG FIXES:
-
- * The new implementation of updateCel() utilizing raw vectors was not correct;
-   extra zeros was written too.  The example code of updateCel() reveals such
-   errors much easier now.
-
- * updateCel() would in some cases give "Error: subscript out of bounds" when
-   writing the last chunk.
-
-
-Version: 1.5.3 [2006-07-24]
- 
-NEW FEATURES:
-
- * Added functional prototype of updateCel() to *update* binary (v4) CEL files.
-   Currently, the code does make use the Fusion SDK.  There is currently no
-   writeCel() to create a CEL file from scratch.  However, with the auxillary
-   function copyCel() one can copy an existing CEL file and then update that
-   one.  Thus, it is now possible to write, say, normalized probe intensities
-   to a CEL file.  Note that this is only a first prototype and functions may
-   change in a future release.
-
-PERFORMANCE:
-
- * Improved the speed of updateCel() substantially by first working with raw
-   vector in memory and then write binary data to file.  Data is also written
-   in chunks (instead of all at once), to minimize the memory overhead of
-   using raw vectors, which is especially important for the larger chips,
-   e.g. 500K.
-
-
-Version: 1.5.2 [2006-05-31]
-
-SIGNIFICANT CHANGES:
-
- * Updated Fusion SDK to version 1.0.6.
-
-
-Version: 1.5.1 [2006-05-15]
-
-SIGNIFICANT CHANGES:
-
- * Updated Fusion SDK to version 1.0.5.
-
-BUG FIXES:
-
- * Made small changes to the SDK to allow it to compile under Mac OS X with
-   GCC-4.0.3 shipping with R-2.3.0.
-
-CODE REFACTORING:
-
- * Made changes to the Makevars, _Makefile and cmd_line scripts.
-
-
-Version: 1.5.0 [2006-05-12]
-
-NEW FEATURES:
-
- * Added cdfOrderBy() and cdfOrderColumnsBy() for restructuring group fields
-   in a CDF list structure.  Added cdfGetGroups() too.
-
-DOCUMENTATION:
-
- * Cleaned up and restructured the help pages; several Rd pages are now made
-   "internal" so they do not show up on the help index page.  Instead they are
-   accessable from within other help pages (if you browsing via HTML that is).
-   Added a help page on common terms.
-
- * Added a bit more documentation on how to set the default CDF path.
-
-BUG FIXES:
-
- * On Linux 64-bit read CEL intensities would all be zero.  This was due to
-   compiler settings in the Fusion SDK package, which is circumvented by
-   gcc compile it with a lower optimization level.
-
- * When argument 'cdf' was a CDF list structure with elements 'type' or
-   'direction', readCelUnits() would not read the correct cells because the
-   values of 'type' and 'direction' would be included in the extracted list
-   of cell indices.
-
-
-Version: 1.4.0 [2006-04-27]
-
-NOTES:
-
- * The stable version for Bioconductor 1.8.
-
-
-Version: 1.3.3 [2006-04-15]
-
-SIGNIFICANT CHANGES:
-
- * The package now works on Solaris.
-
- * Updated the Fusion SDK to version 1.0.5 (an unofficial release).
-
-NEW FEATURES:
-
- * New method readCdfCellIndices(), which is a 5-10 times faster special-case
-   implementation of readCdfUnits() to read cell indices only.
-
- * Renamed readCdfUnitsMap() to readCdfUnitsWriteMap().
-
- * New method invertMap() for fast inversion of maps.
-
-PERFORMANCE:
-
- * Now readCelUnits() sorts the cell indices before reading the data from each
-   file.  This minimizes the amount of jumping around in the CEL files
-   resulting in a speed-up of about 5-10 times.
-
-KNOWN ISSUES:
-
- * KNOWN BUGS: The weird bug as in v1.3.2 remains with the new Fusion SDK,
-   R v2.3.0 beta (2006-04-10 r37715) on WinXP. Internally readCdfCellIndices()
-   replaces readCdfUnits(), but the error is still the same.
-
-
-Version: 1.3.2 [2006-03-28]
-
-SIGNIFICANT CHANGES:
-
- * All cell and unit indices are now starting from one and not from zero.
-   This change requires that all code that have been using a previous version
-   of this package have to be updated!
-
-NEW FEATURES:
-
- * New methods readCelRectangle() to read probe signals from a specify area
-   of the chip.
-
-DOCUMENTATION:
-
- * Added extensive help on cell coordinates and cell indices as well read and
-   write maps.
-
-KNOWN ISSUES:
-
- * KNOWN BUGS: At least on WinXP, heavy use of readCelUnits() will sooner or
-   later core dump R; it seems to be a memory related from that occur when
-   reading the CDF and extracting the name of the unit.  However, when
-   "torturing" readCdfUnits() the crash won't happen so it might be that
-   readCel() does something.  Have not tried on other platforms.
-
-PERFORMANCE:
-
- * Further optimization in speed and memory for most methods.
-
-
-Version: 1.3.1
-
- * ...
diff --git a/NEWS.md b/NEWS.md
new file mode 100644
index 0000000..ef22eb0
--- /dev/null
+++ b/NEWS.md
@@ -0,0 +1,1803 @@
+# Version 1.17.2 [2023-04-23]
+
+### Bug Fixes
+
+ * fix to `src/_mingw.h` provided by Tomas Kalibera.
+
+# Version 1.71.1 [2023-04-04]
+
+### Bug Fixes
+
+ * Fix two instances of "watching polymorphic type 'class Except' by
+   value [-Wcatch-value=]" compiler warnings.
+
+
+# Version 1.71.0 [2022-11-01]
+
+## Notes
+
+ * The version number was bumped for the Bioconductor devel version,
+   which is now Bioconductor 3.17 for R devel.
+
+
+# Version 1.70.0 [2022-11-01]
+
+## Miscellaneous
+
+ * Remove extra backslash escaping in a few help pages.
+ 
+## Notes
+
+ * The version number was bumped for the Bioconductor release version,
+   which is now Bioconductor 3.16 for R (>= 4.2.2).
+
+ 
+# Version 1.69.1 [2022-04-28]
+ 
+## Bug Fixes
+ 
+ * Ported bug fix from **affxparser** 1.68.1.
+ 
+ 
+# Version 1.69.0 [2022-04-26]
+
+ 
+# Version 1.68.1 [2022-04-28]
+ 
+## Bug Fixes
+ 
+ * **affxparser** (>= 1.67.1) failed to install with R built with
+   `-fpic` flag. The symptom was a linking error `ld: 000.init.o:
+   relocation R_X86_64_32 against '.rodata' can not be used when
+   making a shared object; recompile with -fPIC collect2: error: ld
+   returned 1 exit status`.
+ 
+ 
+# Version 1.68.0 [2022-04-26]
+
+ 
+# Version 1.67.1 [2022-03-23]
+ 
+## Significant Changes
+ 
+ * This packages requires R (>= 4.0.0) when build on MS Windows. This
+   is due to the added support for UCRT on MS Windows, which is
+   required for the upcoming R 4.2.0.
+ 
+## Software Quality
+ 
+ * Updates to build package from source on MS Windows with UCRT.
+   Thanks to Tomas Kalibera for the contribution.
+ 
+ * Now registering native routines - apparently never happened before.
+ 
+ 
+# Version 1.67.0 [2021-10-27]
+ 
+
+# Version 1.66.0 [2021-10-27]
+
+ 
+# Version 1.65.3 [2021-09-22]
+ 
+## Software Quality
+ 
+ * Making sure all pathnames are of length 100 or shorter.
+ 
+ 
+# Version 1.65.2 [2021-09-22]
+ 
+## Software Quality
+ 
+ * Now properly registering native routines.
+ 
+ 
+# Version 1.65.1 [2021-09-09]
+ 
+## Bug Fixes
+ 
+ * The package did not install on macOS with the M1 chip with error:
+   `use of undeclared identifier 'finite'; did you mean
+   'isfinite'?`. This issue goes back to 2014, when macOS produced
+   `warning: 'finite' is deprecated: first deprecated in OS X 10.9
+   [-Wdeprecated-declarations]. isOk = finite(x);`.  Patched by using
+   `isfinite()` instead of `finite()`.
+ 
+ 
+# Version 1.64.0 [2021-05-19]
+
+ 
+# Version 1.62.0 [2020-10-27]
+
+ 
+# Version 1.60.0 [2020-04-27]
+ 
+
+# Version 1.58.0 [2019-10-29]
+
+ 
+# Version 1.56.0 [2019-05-02]
+ 
+
+# Version 1.55.0 [2018-10-30]
+ 
+
+# Version 1.54.0 [2018-10-30]
+
+ 
+# Version 1.53.2 [2018-10-22]
+ 
+## Documentation
+ 
+ * Link to Affx Fusion SDK archive on GitHub.
+ 
+ * Spell corrections.
+ 
+ 
+# Version 1.53.1 [2018-08-28]
+
+ 
+# Version 1.53.0 [2018-04-30]
+ 
+
+# Version 1.52.0 [2018-04-30]
+
+ 
+# Version 1.51.0 [2017-10-30]
+ 
+
+# Version 1.50.0 [2017-10-30]
+
+ 
+# Version 1.49.0 [2017-04-23]
+ 
+
+# Version 1.48.0 [2017-04-23]
+
+ 
+# Version 1.47.0 [2016-10-18]
+ 
+## Notes
+ 
+ * The version number was bumped for the Bioconductor devel version,
+   which is now Bioconductor 3.5 for R (>= 3.4.0).
+ 
+ 
+# Version 1.46.0 [2016-10-18]
+ 
+## Notes
+ 
+ * The version number was bumped for the Bioconductor release version,
+   which is now Bioconductor 3.4 for R (>= 3.3.1).
+ 
+ 
+# Version 1.45.1 [2016-09-16]
+ 
+## Code Refactoring
+ 
+ * Using `c(x,y)` instead of `append(x,y)` internally.
+ 
+ * CLEANUP: Dropped obsolete `src/R_affx_test.*cmdline.cpp` files.
+ 
+ 
+# Version 1.45.0 [2015-05-03]
+ 
+## Notes
+ 
+ * The version number was bumped for the Bioconductor devel version,
+   which is now Bioconductor 3.4 for R (>= 3.3.0).
+ 
+ 
+# Version 1.44.0 [2015-05-03]
+ 
+## Notes
+ 
+ * The version number was bumped for the Bioconductor release version,
+   which is now Bioconductor 3.3 for R (>= 3.3.0).
+ 
+ 
+# Version 1.43.2 [2016-04-05]
+ 
+## New Features
+ 
+ * WINDOWS: Package now compiles with both the old gcc-4.6.3 toolchain
+   as well as the new gcc-4.9.3 toolchain - introduced in R (>=
+   3.3.0).  Thanks to Jim Hester and Dan Tenenbaum for help with this.
+ 
+ 
+# Version 1.43.1 [2016-02-28]
+ 
+## New Features
+ 
+ * The DLL is now unloaded when the package is unloaded.
+ 
+## Bug Fixes
+ 
+ * Fixed a bug related to including `<R.h>` and extern C, reported by
+   Brian Ripley.
+ 
+ 
+# Version 1.43.0 [2015-10-23]
+ 
+## Notes
+ 
+ * The version number was bumped for the Bioconductor devel version,
+   which is now Bioconductor 3.3 for R (>= 3.3.0).
+ 
+ 
+# Version 1.42.0 [2015-10-13]
+ 
+## Notes
+ 
+ * The version number was bumped for the Bioconductor release version,
+   which is now Bioconductor 3.2 for R (>= 3.2.2).
+ 
+ 
+# Version 1.41.7 [2015-09-14]
+ 
+## Code Refactoring
+ 
+ * ROBUSTNESS: Explicitly importing core R functions. 
+ 
+ 
+# Version 1.41.6 [2015-07-29]
+ 
+## Notes
+ 
+ * Updated the `BiocViews` field of DESCRIPTION.
+ 
+ 
+# Version 1.41.5 [2015-06-17]
+ 
+## Notes
+ 
+ * New maintainer address (in all fields).
+ 
+ 
+# Version 1.41.4 [2015-05-26]
+ 
+## Notes
+ 
+ * New maintainer address.
+ 
+ 
+# Version 1.41.3 [2015-05-13]
+ 
+## Significant Changes
+ 
+ * AVAILABILITY: Removed requirement for 'GNU make'.
+ 
+ 
+# Version 1.41.2 [2015-05-05]
+ 
+## Bug Fixes
+ 
+ * `readCelHeader()` and `readCel()` would core dump R/affxparser if
+   trying to read multi-channel CEL files (Issue #16). Now an error is
+   generated instead.  Multi-channel CEL files (e.g. Axiom) are not
+   supported by **affxparser**.  Thanks to Kevin McLoughlin (Lawrence
+   Livermore National Laboratory, USA) for reporting on this.
+ 
+ * `readCelHeader()` and `readCel()` on corrupt CEL files could core
+   dump R/affparser (Issues #13 & #15).  Now an error is generated
+   instead. Thanks to Benilton Carvalho (Universidade Estadual de
+   Campinas, Sao Paulo, Brazil) and Malte Bismarck (Martin Luther
+   University of Halle-Wittenberg) for reports.
+ 
+ 
+# Version 1.41.1 [2015-04-25]
+ 
+## Bug Fixes
+ 
+ * Native functions `R_affx_GetCHPEntries()` and `R_affx_ReadCHP()`
+   had unbalanced `PROTECT()`/`UNPROTECT()`.  Also, native
+   `R_affx_GetCHPGenotypingResults()` had two non-`PROTECT()`:ed
+   usages of `mkString()`.  Thanks to Tomas Kalibera at Northeastern
+   University for reporting on this.
+ 
+ 
+# Version 1.41.0 [2015-04-16]
+ 
+## Notes
+ 
+ * The version number was bumped for the Bioconductor devel version,
+   which is now Bioconductor 3.2 for R (>= 3.3.0).
+ 
+ 
+# Version 1.40.0 [2015-04-16]
+ 
+## Notes
+ 
+ * The version number was bumped for the Bioconductor release version,
+   which is now Bioconductor 3.1 for R (>= 3.2.0).
+ 
+ 
+# Version 1.39.5 [2015-04-15]
+ 
+## Significant Changes
+ 
+ * Removed `SystemRequirements: GNU make`.
+ 
+## New Features
+ 
+ * ROBUSTNESS: Now `readPgfEnv()`/`readPgf()` validated `indices`, iff
+   possible.
+ 
+ * Now `readPgfEnv()`/`readPgf()` coerces some header fields to
+   integers, iff they exists, specifically `num-cols`, `num-rows`,
+   `probesets`, and `datalines`.
+ 
+ * CLEANUP: Package no longer gives `readBin()` warnings on `'signed =
+   FALSE' is only valid for integers of sizes 1 and 2`.
+ 
+## Bug Fixes
+ 
+ * `convertCel()` on a CCG/v1 CEL file could give `Error in
+   sprintf("GridCorner%s=%d %d\n" ... invalid format '%d' ...)`.
+   Added package test for `convertCel()`, but in this particular case
+   it would not have cought it because it only happened for chip types
+   of particular dimensions.  Thanks to Malte Bismarck at UK Halle
+   (Germany) for reporting on this.
+ 
+ 
+# Version 1.39.4 [2015-01-18]
+ 
+## Significant Changes
+ 
+ * ROBUSTNESS: 'GNU make' is a `SystemRequirements` (for now).
+ 
+## Code Refactoring
+ 
+ * ROBUSTNESS: Did not seem to be needed, but package is now a good
+   citizen and do `library.dynlib.unload()` when unloaded.
+ 
+ * Now using `requireNamespace()` instead of `require()`.
+ 
+ * Internal cleanup of native code.
+ 
+ 
+# Version 1.39.3 [2014-11-26]
+ 
+## Bug Fixes
+ 
+ * `readPgf()` and `readPgfEnv()` failed to read all units (probesets)
+   on some systems.  Extensive package tests have been added to test
+   this and other cases.  Thanks to Grischa Toedt at EMBL Germany for
+   reporting on, troubleshooting, and helping out with patches for
+   this bug.
+ 
+ 
+# Version 1.39.2 [2014-10-28]
+ 
+## Bug Fixes
+ 
+ * The range test of argument `units` to `readCdf()` and `readCdfQc()`
+   was never performed due to a typo, meaning it was possible to
+   request units out of range.  Depending on system this could result
+   in either a core dump or random garbage read for the out of range
+   units.
+ 
+## Software Quality
+ 
+ * ROBUSTNESS: Added package system tests for out of range `units` and
+   `indices` arguments for most read functions.
+ 
+ 
+# Version 1.39.1 [2014-10-26]
+ 
+## New Features
+ 
+ * ROBUSTNESS: Now all methods gives an informative error message if
+   zero elements are requested, i.e. via zero-length argument
+   `indices` or `units` that is not NULL. Previously this case would
+   access all values just like NULL does.
+ 
+ * ROBUSTNESS: Now `readCelRectangle()` gives an informative error
+   message if argument `xrange` or `yrange` is not of length two.
+ 
+## Bug Fixes
+ 
+ * `readPgf()` and `readPgfEnv()` would give an error if argument
+   `indices` was specifies as a double rather than as an integer
+   vector.
+ 
+ 
+# Version 1.39.0 [2014-10-13]
+ 
+## Notes
+ 
+ * The version number was bumped for the Bioconductor devel version,
+   which is now Bioconductor 3.1 for R (>= 3.2.0).
+ 
+ 
+# Version 1.38.0 [2014-10-13]
+ 
+## Notes
+ 
+ * The version number was bumped for the Bioconductor release version,
+   which is now Bioconductor 3.0 for R (>= 3.1.1).
+ 
+ 
+# Version 1.37.2 [2014-09-28]
+ 
+## Notes
+ 
+ * Minor modifications due to the move to GitHub.
+ 
+ 
+# Version 1.37.1 [2014-08-25]
+ 
+## Software Qualitity
+ 
+ * Removed `R CMD check` NOTEs that appeared in recent R versions.
+ 
+ 
+# Version 1.37.0 [2014-04-11]
+ 
+## Notes
+ 
+ * The version number was bumped for the Bioconductor devel version,
+   which is now Bioconductor 2.15 for R (>= 3.1.0).
+ 
+ 
+# Version 1.36.0 [2014-04-11]
+ 
+## Notes
+ 
+ * The version number was bumped for the Bioconductor release version,
+   which is now Bioconductor 2.14 for R (>= 3.1.0).
+ 
+ 
+# Version 1.35.3 [2014-02-28]
+ 
+## Notes
+ 
+ * Same updates as in release v1.34.2.
+ 
+ 
+# Version 1.35.2 [2014-02-28]
+ 
+## Software Quality
+ 
+ * Patches to Fusion SDK based on clang v3.4.
+ 
+ 
+# Version 1.35.1 [2014-02-27]
+ 
+## Notes
+ 
+ * Same updates as in release v1.34.1.
+ 
+ 
+# Version 1.35.0 [2013-10-14]
+ 
+## Notes
+ 
+ * The version number was bumped for the Bioconductor devel version.
+ 
+ 
+# Version 1.34.2 [2014-02-28]
+ 
+## Code Refactoring
+ 
+ * CLEANUP: Removed unnecessary usage of `:::`.
+ 
+ 
+# Version 1.34.1 [2014-02-27]
+ 
+## Bug Fixes
+ 
+ * `readCelUnits()` could throw `Error in vector("double",
+   nbrOfCells * nbrOfArrays) : vector size cannot be NA.  In addition:
+   Warning message: In nbrOfCells * nbrOfArrays : NAs produced by
+   integer overflow` when reading from a large number of arrays and/or
+   a large number of units.  Previously the limit of
+   `nbrOfCells*nbrOfArrays` was `.Machine$integer.max` (=2147483647),
+   whereas now it is `.Machine$double.xmax` (=1.797693e+308).  Thanks
+   to Damian Plichta at the Technical University of Denmark for
+   reporting on this.
+ 
+ 
+# Version 1.34.0 [2012-10-14]
+ 
+## Notes
+ 
+ * The version number was bumped for the Bioconductor release version,
+   which is now Bioconductor 2.13 for R (>= 3.0.0).
+ 
+ 
+# Version 1.33.4 [2013-09-23]
+ 
+## Performance
+ 
+ * Package now uses `which()` instead of `whichVector()` of
+   **R.utils**.  Before R (< 2.11.0), `which()` used to be 10x slower
+   than `whichVector()`, but now it's 3x faster.
+ 
+ 
+# Version 1.33.3 [2013-06-29]
+ 
+## Notes
+ 
+ * Same updates as in release v1.32.3.
+ 
+ 
+# Version 1.33.2 [2013-05-25]
+ 
+## Notes
+ 
+ * Same updates as in release v1.32.2.
+ 
+ 
+# Version 1.33.1 [2013-05-20]
+ 
+## Notes
+ 
+ * Same updates as in release v1.32.1.
+ 
+ 
+# Version 1.33.0 [2013-04-03]
+ 
+## Notes
+ 
+ * The version number was bumped for the Bioconductor devel version.
+ 
+ 
+# Version 1.32.3 [2013-06-29]
+ 
+## Bug Fixes
+ 
+ * Since **affxparser** 1.30.2/1.31.2 (r72352; 2013-01-08),
+   `writeCdf()` would incorrectly encode the unit types, iff the input
+   `cdf` argument specified them as integers, e.g. as done by
+   `writeCdf()` for `AffyGenePDInfo` in **aroma.affymetrix**.  More
+   specifically, the unit type index would be off by one, e.g. an
+   `expression` unit (1) would be encoded as an `unknown` unit (0) and
+   so on.  On the other hand, if they were specified by their
+   unit-type names (e.g. 'expression') the encoding should still be
+   correct, e.g. if input is constructed from `readCdf()` of
+   **affxparser**.  Thanks to Guido Hooiveld at Wageningen UR (The
+   Netherlands) for reporting on this.
+ 
+ * Similarily, `writeCdf()` has "always", at least **affxparser**
+   1.7.4 since (r21888; 2007-01-09), encoded unit directions and QC
+   unit types incorrectly, iff they were specified as integers.
+ 
+ 
+# Version 1.32.2 [2013-05-25]
+ 
+## Peformance
+ 
+ * Removed all remaining `gc()` calls.
+ 
+ * Replaced all `rm()` calls with NULL assignments.
+ 
+ 
+# Version 1.32.1 [2013-05-20]
+ 
+## Code Refactoring
+ 
+ * CRAN POLICY: Now all Rd `\usage{}` lines are at most 90 characters
+   long.
+ 
+ 
+# Version 1.32.0 [2013-04-03]
+ 
+## Notes
+ 
+ * The version number was bumped for the Bioconductor release version.
+ 
+ 
+# Version 1.31.4 [2013-03-19]
+ 
+## Code Refactoring
+ 
+ * Made `example(invertMap)` a bit faster so `R CMD check` won't
+   complain.
+ 
+ 
+# Version 1.31.3 [2013-03-18]
+ 
+## Code Refactoring
+ 
+ * Internal `isPackageLoaded()` of `findFiles()` no longer uses
+   defunct `manglePackageName()` function.
+ 
+ 
+# Version 1.31.2 [2013-01-07]
+ 
+## Notes
+ 
+ * Same updates as in release v1.30.2.
+ 
+ 
+# Version 1.31.1 [2012-10-18]
+ 
+## New Features
+ 
+ * Now `compareCdfs()` gives a more precise `reason` attribute when
+   there is a difference in (regular or QC) units.  It narrows down
+   the first unit that differs and reports it unit number.
+ 
+ 
+# Version 1.31.0 [2012-10-01]
+ 
+## Notes
+ 
+ * The version number was bumped for the Bioconductor devel version.
+ 
+ 
+# Version 1.30.2 [2013-01-07]
+ 
+## Bug Fixes
+ 
+ * `writeCdf()` did not encode unit types as decoded by `readCdf()`.
+   Unit type `unknown` was incorrectly encoded such that `readCdf()`
+   would decode it as `copynumber`.  Also, unit types
+   `genotypingcontrol` and `expressioncontrol` where not encoded at
+   all.
+ 
+ 
+# Version 1.30.0 [2012-10-01]
+ 
+## Notes
+ 
+ * The version number was bumped for the Bioconductor release version.
+ 
+ 
+# Version 1.29.13 [2012-09-26]
+ 
+## New Features
+ 
+ * Added argument '`cdf=FALSE'` to `createCel()`. Note, the previous
+   implementation corresponded to `cdf=TRUE`.
+ 
+## Software Quality
+ 
+ * ROBUSTNESS: Now `createCel()` validates/sets CEL header field
+   `total` based on `cols` and `rows`.
+ 
+ * ROBUSTNESS: Added a system test for validating that the package can
+   write and read a CEL.  The test is spawning of another R process so
+   that the test is robust against core dumps.
+ 
+ 
+# Version 1.29.12 [2012-09-12]
+ 
+## Documentation
+ 
+ * Updated one Rd link.
+ 
+ 
+# Version 1.29.11 [2012-09-01]
+ 
+## New Features
+ 
+ * Added argument `aliases` to `arrangeCelFilesByChipType()`, e.g.
+   `arrangeCelFilesByChipType(..., aliases=c("Focus"="HG-Focus"))`.
+ 
+## Bug Fixes
+ 
+ * `arrangeCelFilesByChipType(pathnames)` assumed `pathnames` were
+   files in the current directory.
+ 
+ 
+# Version 1.29.10 [2012-08-29]
+ 
+## Code Refactoring
+ 
+ * Updated some internal files used solely for maintainance.
+ 
+ 
+# Version 1.29.9 [2012-08-29]
+ 
+## Bug Fixes
+ 
+ * The move to Fusion SDK 1.1.2 caused the package to not compile on
+   Windows.
+ 
+ 
+# Version 1.29.8 [2012-08-14]
+ 
+## Significant Changes
+ 
+ * Upgraded to Fusion SDK 1.1.2.
+ 
+ 
+# Version 1.29.7 [2012-08-14]
+ 
+## Code Refactoring
+ 
+ * Rearranged `patchdir`.
+ 
+ 
+# Version 1.29.6 [2012-06-26]
+
+
+# Version 1.29.5 [2012-06-19]
+ 
+## New Features
+ 
+ * Added `arrangeCelFilesByChipType()` for moving CEL files to
+   subdirectories named according to their chip types, which can be
+   useful when for instance downloading GEO data sets.
+ 
+ 
+# Version 1.29.4 [2012-06-14]
+ 
+## New Features
+ 
+ * `readPgfEnv(..., indices=NULL)` no longer gives a warning.
+ 
+ * Updated the error messages for the CLF and PGF parsers.
+ 
+ 
+# Version 1.29.3 [2012-05-22]
+ 
+## Software Quality
+ 
+ * Now system test `tests/testWriteAndReadEmptyCdf.R` generates an
+   error that is detected and reported by `R CMD check`.
+ 
+ 
+# Version 1.29.2 [2012-05-22]
+ 
+## Software Quality
+ 
+ * GENERALIZATION: Now system tests that launch another R process no
+   longer assumes R is on the OS's search path.
+ 
+## Code Refactoring
+ 
+ * ROBUSTNESS/CRAN POLICY: `readCel()` and `readCelUnits()` are no
+   longer calling `.Internal(qsort(...))`.
+ 
+ 
+# Version 1.29.1 [2012-05-18]
+ 
+## Bug Fixes
+ 
+ * Replaced several `throw()` with `stop()`, because the former
+   assumes that **R.methodsS3** is loaded, which it may not be.
+ 
+## Software Quality
+ 
+ * ROBUSTNESS: Added a system test for validating that the package can
+   write and read a CDF.  The test is spawning of another R process so
+   that the test is robust against core dumps.
+ 
+ 
+# Version 1.29.0 [2012-03-30]
+ 
+## Notes
+ 
+ * The version number was bumped for the Bioconductor devel version.
+ 
+ 
+# Version 1.28.1 [2012-06-26]
+
+
+# Version 1.28.0 [2012-03-30]
+ 
+## Notes
+ 
+ * The version number was bumped for the Bioconductor 2.10 release
+   version.
+ 
+ 
+# Version 1.27.5 [2012-03-19]
+ 
+## Software Quality
+ 
+ * ROBUSTNESS: Now the native code throws R errors, instead of
+   printing an error message to stdout/stderr and then returning null,
+   that is translated to errors at the R level.
+ 
+ 
+# Version 1.27.4 [2012-03-05]
+ 
+## Bug Fixes
+ 
+ * **affxparser** would not build on Windows with the new Rtools
+   toolchain (Rtools 2.15.0.1915-1919).
+ 
+ 
+# Version 1.27.3 [2011-11-18]
+ 
+## Software Quality
+ 
+ * ROBUSTNESS: Added sanity checks asserting that the internal readers
+   did indeed read something and not just returned NULL.  It should be
+   very unlikely that this occurs, but there is still a small risk
+   that after asserting that a file exists, but before the internal
+   Fusion SDK parsers access the file, the file has been removed.
+ 
+ 
+# Version 1.27.1 [2011-11-01]
+ 
+## Notes
+ 
+ * Same updates as in v1.26.1.
+ 
+ 
+# Version 1.27.0 [2011-10-31]
+ 
+## Notes
+ 
+ * The version number was bumped for the Bioconductor devel version.
+ 
+ 
+# Version 1.26.4 [2012-03-06]
+ 
+## Bug Fixes
+ 
+ * **affxparser** would not build on Windows with the new Rtools
+   toolchain (Rtools 2.15.0.1915-1919), which is for R (> 2.14.1),
+   i.e. also for R 2.14.2 (but not 2.14.1). This is the same bug fix
+   that was first done in v1.27.4.
+ 
+ 
+# Version 1.26.2 [2011-11-16]
+ 
+## Notes
+ 
+ * The version number was bumped by Bioconductor to trigger a build.
+ 
+ 
+# Version 1.26.1 [2011-11-01]
+ 
+## Bug Fixes
+ 
+ * FIX: Fixed warning on `In readBin(con, what = "integer", size = 4, n
+ = 1, signed = FALSE, 'signed = FALSE' is only valid for integers of
+ sizes 1 and 2` that some read methods would generated.
+ 
+ 
+# Version 1.26.0 [2011-10-31]
+ 
+## Notes
+ 
+ * The version number was bumped for the Bioconductor 2.9 release
+   version.
+ 
+ 
+# Version 1.25.1 [2011-09-27]
+ 
+## Notes
+ 
+ * Maintainer email was updated.
+ 
+ 
+# Version 1.25.0 [2011-04-13]
+ 
+## Notes
+ 
+ * The version number was bumped for the Bioconductor devel version.
+ 
+ 
+# Version 1.24.0 [2011-04-13]
+ 
+## Notes
+ 
+ * The version number was bumped for the Bioconductor 2.8 release
+   version.
+ 
+ 
+# Version 1.23.3 [2011-02-22]
+ 
+## Documentation
+ 
+ * DOCUMENTATION: Added a section on what it means by setting a new
+   (different) chip type for the output in `convertCel()`.
+ 
+ 
+## Bug Fixes
+ 
+ * The internal `.unwrapDatHeaderString()`, used by `convertCel()`
+   among others, would throw `Internal error: Failed to extract
+   'pixelRange' and 'sampleName' from DAT header. They became
+   identical: ...` in case the DAT header of the CEL file did not
+   contain all fields.  The function has now been updated to be more
+   forgiving and robust so that missing values are returned for such
+   fields instead.
+ 
+ 
+# Version 1.23.2 [2011-02-15]
+ 
+## Documentation
+ 
+ * Added a clarification to the help page on 'Cell coordinates and
+   cell indices' that the convention in **affxparser** is to use
+   one-based cell indices, because they are more convenient to use in
+   R.  In order to clearly distinguish these from the redudant
+   zero-based index values that also exist in CDF file, an additional
+   section was added on that topic.  Moreover, help pages for methods
+   querying CDF files are now referring to the above page, where
+   applicable.  Thanks to William Mounts (Pfizer) and Todd Allen for
+   pointing out these ambiguities in the documentation.
+ 
+ 
+# Version 1.23.1 [2010-12-16]
+ 
+## Code Refactoring
+ 
+ * ROBUSTNESS: Now `matrix(...)` is used instead of
+   `.Interal(matrix(...))`.
+ 
+ 
+# Version 1.23.0 [2010-10-17]
+ 
+## Notes
+ 
+ * The version number was bumped for the Bioconductor devel version.
+ 
+ 
+# Version 1.22.0 [2010-10-17]
+ 
+## Notes
+ 
+ * The version number was bumped for the Bioconductor 2.7 release
+   version.
+ 
+ 
+# Version 1.21.1 [2010-10-05]
+ 
+## New Features
+ 
+ * Now `readCdfDataFrame()` also returns the cell field `expos`.
+ 
+ 
+# Version 1.21.0 [2010-04-22]
+ 
+## Notes
+ 
+ * The version number was bumped for the Bioconductor devel version.
+ 
+ 
+# Version 1.20.0 [2010-04-22]
+ 
+## Notes
+ 
+ * The version number was bumped for the Bioconductor 2.6 release
+   version.
+ 
+ 
+# Version 1.19.6 [2010-02-11]
+ 
+## Bug Fixes
+ 
+ * More fixes.
+ 
+ 
+# Version 1.19.5 [2010-02-09]
+ 
+## Bug Fixes
+ 
+ * More fixes.
+ 
+ 
+# Version 1.19.4 [2010-02-06]
+ 
+## Bug Fixes
+ 
+ * More fixes.
+ 
+ 
+# Version 1.19.3 [2010-02-06]
+ 
+## Bug Fixes
+ 
+ * A couple of patches to Fusion SDK courtesy of Brian Ripley; they
+   are needed for Windows (64).
+ 
+ 
+# Version 1.19.2 [2010-02-02]
+ 
+## Bug Fixes
+ 
+ * A fix to the Windows build.
+ 
+ 
+# Version 1.19.1 [2010-01-29]
+ 
+## Significant Changes
+ 
+ * Updated Fusion SDK to 1.1.0.
+ 
+ 
+# Version 1.19.0 [2009-10-27]
+ 
+## Notes
+ 
+ * Devel version bumped because of the new Bioconductor release.
+ 
+ 
+# Version 1.18.0 [2009-10-27]
+ 
+## Notes
+ 
+ * Release version bumped because of the new Bioconductor 2.5 release.
+ 
+ 
+# Version 1.17.5 [2009-09-22]
+ 
+## Documentation
+ 
+ * Fixed broken link in an Rd file.
+ 
+ 
+# Version 1.17.4 [2009-09-21]
+ 
+## New Features
+ 
+ * Added `parseDatHeaderString()`, which in combination with
+   `readCelHeader()` can be used to infer the timestamp in the header
+   of a CEL file.
+ 
+ 
+# Version 1.17.3 [2009-05-29]
+ 
+## New Features
+ 
+ * Added `applyCdfGroupFields()` and `cdfSetDimension()`.
+ 
+ 
+# Version 1.17.2 [2009-02-20]
+ 
+## Bug Fixes
+ 
+ * `readChp()` would crash (segmentation fault) for (at least) some
+   CHP files for GenomeWideSNP\_5 generated by Affymetrix Power Tools.
+ 
+ * Updated `compareCels()` to work with new `readCelHeader()`.
+ 
+ 
+# Version 1.17.1 [2009-05-09]
+ 
+## New Features
+ 
+ * Now `readCelHeader()` also reads DAT headers from Calvin CEL files.
+ 
+ 
+# Version 1.17.0 [2009-04-20]
+ 
+## Notes
+ 
+ * Devel version bumped because of the new Bioconductor release.
+ 
+ 
+# Version 1.16.0 [2009-04-20]
+ 
+## Notes
+ 
+ * Release version bumped because of the new Bioconductor 2.4 release.
+ 
+ 
+# Version 1.15.6 [2009-02-20]
+ 
+## New Features
+ 
+ * Added optional argument `newChipType` to `convertCel()` for
+   overriding the default chip type.  Useful for updating the formal
+   chip type of old CEL files.
+ 
+ 
+## Code Refactoring
+ 
+ * Removed all `gc()` calls in `convertCel()`.
+ 
+ 
+# Version 1.15.5 [2009-02-14]
+
+
+# Version 1.15.4 [2009-02-10]
+ 
+## Bug Fixes
+ 
+ * `readCcg()` and `readCcgHeader()` no longer give warnings on
+   `truncating string with embedded nul in 'rawToChar()'`.  These
+   warnings made no difference, but were annoying.
+ 
+ 
+# Version 1.15.3 [2009-01-22]
+ 
+## Documentation
+ 
+ * Fixed a minor Rd problem.
+ 
+ 
+# Version 1.15.2 [2008-12-30]
+ 
+## Notes
+ 
+ * Same bug fix as in release version v1.14.2.
+ 
+ 
+# Version 1.15.1 [2008-12-04]
+ 
+## Notes
+ 
+ * Same bug fix as in release version v1.14.1.
+ 
+ 
+# Version 1.15.0 [2008-10-21]
+ 
+## Notes
+ 
+ * Devel version bumped because of the new Bioconductor release.
+ 
+ 
+# Version 1.14.2 [2008-12-30]
+ 
+## Bug Fixes
+ 
+ * `readChp()` would not read all data.  Thanks Gabor Csardi for
+   reporting this and providing a patch.
+ 
+ 
+# Version 1.14.1 [2008-12-04]
+ 
+## Bug Fixes
+ 
+ * When the CDF file is on a Windows network, that is, has a pathname
+   starting with `//` or `\\`, then the `chiptype` reported by
+   `readCdfHeader()` contains a path component as well.  This seems to
+   be due to a bug in Fusion SDK.
+ 
+ 
+# Version 1.14.0 [2008-10-21]
+ 
+## Notes
+ 
+ * Release version bumped because of the new Bioconductor 2.3 release.
+ 
+ 
+# Version 1.13.8 [2008-08-28]
+
+
+# Version 1.13.7 [2008-08-23]
+ 
+## Performance
+ 
+ * `readCcg()` is substantially faster after removing all `gc()`
+   calls.
+ 
+ 
+# Version 1.13.6 [2008-08-21]
+ 
+## Significant Changes
+ 
+ * Updated Fusion SDK from 1.0.10b (Jan 2008) to 1.0.11 (July 2008).
+ 
+ 
+# Version 1.13 [2008-08-14]
+ 
+## Documentation
+ 
+ * Fixed typos and incorrect equation in help page '2. Cell
+   coordinates and cell indices'.
+ 
+ 
+# Version 1.13.5 [2008-08-09]
+ 
+## New Features
+ 
+ * Made `readCdf()` recognize more unit types.
+ 
+## Bug Fixes
+ 
+ * `writeCdf()` would write `CustomSeq` units as `Tag` units, and vice
+   versa.  This means that _ASCII_ CDFs containing such units and
+   converted with `convertCdf()` would be have an incorrect unit type
+   for these units.  Also, unit type 'Copy Number' is reported as
+   `"copynumber"` and no longer as `"unknown"`.
+ 
+ * The increase of the internal buffer for reading the `refseq` header
+   field of ASCII CDFs that was done in 1.11.2 was mistakenly undone
+   in 1.13.3.
+ 
+ 
+# Version 1.13.4 [2008-08-05]
+ 
+## Documentation
+ 
+ * Now `help(createCel)` (and its example) clarifies that the template
+   CEL header can be of v3 (ASCII), v4 (binary;XDA), or v1
+   (binary;Calvin).
+ 
+## Code Refactoring
+ 
+ * Renamed the `HISTORY` file to `NEWS`.
+ 
+ 
+# Version 1.13.3 [2008-05-20]
+ 
+## Bug Fixes
+ 
+ * Now `writeTpmap()` works.
+ 
+ 
+# Version 1.13.2 [2008-05-08]
+ 
+## Notes
+ 
+ * Copied all updates in v1.12.2 (release) to v1.13.2 (devel).
+ 
+ 
+# Version 1.13.1 [2008-05-02]
+ 
+## Notes
+ 
+ * Copied all updates in v1.12.1 (release) to v1.13.1 (devel).
+ 
+ 
+# Version 1.13.0 [2008-04-29]
+ 
+## Notes
+ 
+ * Devel version bumped because of the new Bioconductor release.
+ 
+ 
+# Version 1.12.2 [2008-05-09]
+ 
+## Bug Fixes
+ 
+ * **affxparser** 1.12.1 would not build on Windows. Fix by Martin
+   Morgan.
+ 
+ 
+# Version 1.12.1 [2008-05-02]
+ 
+## New Features
+ 
+ * Added `readChp()`. Contribution by Robert Gentleman.
+ 
+ 
+# Version 1.12.0 [2008-04-29]
+ 
+## Notes
+ 
+ * Release version bumped because of the new Bioconductor 2.2 release.
+ 
+ 
+# Version 1.11.13 [2008-04-13]
+ 
+## Significant Changes
+ 
+ * Updated to Fusion SDK v1.0.10b.
+ 
+ 
+# Version 1.11 [2008-03-06]
+ 
+## Bug Fixes
+ 
+ * Regular expression pattern `a-Z` is illegal on (at least) some
+   locale, e.g.  `C` (where `A-z` works). The only way to specify the
+   ASCII alphabet is to list all characters explicitly, which we now
+   do in all methods of the package.  See the r-devel thread "invalid
+   regular expression '[a-Z]'" on 2008-03-05 for details.
+ 
+ 
+# Version 1.11.6 [2008-03-04]
+ 
+## New Features
+ 
+ * Added trial versions of `readClf()` and `readPgf()`.
+ 
+ 
+# Version 1.11.5 [2008-02-29]
+ 
+## New Features
+ 
+ * Updated `cdfMergeStrands()` to merge any even number of groups, not
+   only units with two or four group pairs.
+ 
+## Bug Fixes
+ 
+ * The code in `findFiles()` for testing if **R.utils** is loaded or
+   not was not correct making it fail to detect **R.utils**.
+ 
+ 
+# Version 1.11.4 [2008-02-20]
+ 
+## New Features
+ 
+ * Added argument '`allFiles = TRUE'` to `findFiles()`.
+ 
+ * Updated `readCcg()` according to the newer file format
+   specifications. Now it is possible to do low-level reading of
+   copy-number CNCHP files generated by the Affymetrix Genotype
+   Console v2.
+ 
+ 
+## Code Refactoring
+ 
+ * Now `findFiles()` and hence `findCdf()` is only utilizing the
+   **R.utils** package if it is already loaded.  It will no longer try
+   to load **R.utils**.
+ 
+ 
+# Version 1.11.3 [2007-12-01]
+ 
+## New Features
+ 
+ * Removed argument `reorder` from `readCel()` and `readCelUnits()`
+   since its name was misleading (the returned value was identical
+   regardless of `reorder`, but the reading speed was faster when
+   `reorder` was TRUE, which is how it is now hardwired).
+ 
+ 
+# Version 1.11.2 [2007-11-06]
+ 
+## Bug Fixes
+ 
+ * Reading a CDF that has a `refseq` header field longer than 65,000
+   symbols would crash R, e.g. when reading certain CDFs for
+   resequencing chip types.  A buffer size internal of Fusion SDK was
+   increased from 65,000 to 400,000 bytes.  Thanks Wenyi Wang for
+   reporting this.
+ 
+ * Argument `verbose` of `tpmap2bpmap()` was not coerced to integer
+   before passed to the native code.
+ 
+ * The internal `.initializeCdf()`, used when creating new CDFs, had
+   an error message refering to an invalid `qcUnitLengths` when it was
+   supposed to be `unitLengths`.  Thanks Elizabeth Purdom for
+   reporting this.
+ 
+## Code Refactoring
+ 
+ * created a Makefile in `/inst/info` for comparing Fusion SDK with
+   **affxparser**.
+ 
+ 
+# Version 1.11.1 [2007-10-12]
+ 
+## New Features
+ 
+ * `convertCel()` will no longer generate a warning if the
+   corresponding CDF file was not found.
+ 
+## Bug Fixes
+ 
+ * For some Calvin CEL files the CEL header does not contain "parent
+   parameter" `affymetrix-dat-header` but only parameter
+   `affymetrix-partial-dat-header`.  In that case `convertCel()` would
+   throw an error about `sprintf("DatHeader= %s\n", datHeader)`.  Now
+   a "fake" DAT header is created from the partial one.  If neither is
+   found, a slightly more informative exception is thrown.
+ 
+ 
+# Version 1.11.0 [2007-10-02]
+ 
+## Notes
+ 
+ * Version bumped because of the new Bioconductor release.
+ 
+ 
+# Version 1.9.5 [2007-09-16]
+ 
+## New Features
+ 
+ * Added argument '`recursive=TRUE'` to `findCdf()`.  Note, the
+   current working directory is always scanned first, but never
+   recursively (unless explicitly added to the search path). This is
+   to avoid "endless" scans in case the search path has not been set.
+ 
+ * `findFiles()` now do a breath-first search in lexicographic order.
+ 
+ * Removed default search paths `cdf/` and `data/cdf/`.  We do not
+   want to enforce a standard path.
+ 
+ 
+## Code Refactoring
+ 
+ * Now the examples (as well as test scripts) utilize data available
+   in the new Bioconductor **AffymetrixDataTestFiles** package.  This
+   means that `R CMD check` now runs much more tests, which is good.
+ 
+ * CLEAN UP: Removed many of the old `testscripts/` scripts.  They are
+   now under `tests/`.
+ 
+## Bug Fixes
+ 
+ * `findFiles()` was not robust against broken Unix links.
+ 
+ * If the destination file already existed, `convertCel()` would
+   correctly detect that, but would report the name of the source
+   file.
+ 
+ 
+# Version 1.9.4 [2007-08-25]
+ 
+## Significant Changes
+ 
+ * Updated to Fusion SDK v1.0.9.
+ 
+ 
+# Version 1.9.3 [2007-08-16]
+ 
+## Notes
+ 
+ * See updated made to release v1.8.3 below.
+ 
+ * The only difference between v1.9.3 and v1.8.3 is the modification
+   of `findCdf()` in v1.9.2.
+ 
+ 
+# Version 1.9.2 [2007-07-27]
+ 
+## Significant Changes
+ 
+ * This Bioconductor devel version requires R v2.6.0 due to a change
+   of how strings are handled in C by Bioconductor.
+ 
+## New Features
+ 
+ * Modified `findCdf()` such that it is possible to set an alternative
+   function for how CDFs are located.
+ 
+ 
+# Version 1.8.3 [NA]
+ 
+## New Features
+ 
+ * Made several updated so that **affxparser** better supports CEL
+   files in the new Command Console (Calvin) file format:
+   - `isCelFile()` recognized Calvin CEL files.
+   - `convertCel()` can convert a Calvin CEL files into v4 CEL files.
+   - `writeCelHeader()` can write v4 CEL headers given Calvin CEL
+     header.
+ 
+## Code Refactoring
+ 
+ * Added internal/private function to read Command Console Generic
+   (CCG) files, also known as Calvin files.  Note, these functions are
+   currently _not_ utilizing the Fusion SDK library, but are instead
+   written from scratch based on the Affymetrix' file format
+   definitions.
+ 
+ 
+# Version 1.8.2 [2007-08-01]
+ 
+## Performance
+ 
+ * Optimized `writeCdfHeader()` for memory.  For a CDF with 1,200,000+
+   units just writing the unit names would consume 1-1.5 GiB RAM.  Now
+   it writes unit names in chunks keeping the memory overhead around
+   100-200 MiB.
+ 
+ * Made `convertCdf()` more memory efficient.
+ 
+## Bug Fixes
+ 
+ * Error message in `isCelFile()` when the file was not found was
+   broken.
+ 
+ 
+# Version 1.8.1 [2007-07-26]
+ 
+## Significant Changes
+ 
+ * Now **affxparser** install on OSX with PPC.
+ 
+ 
+# Version 1.8.0 [2007-04-24]
+ 
+## Notes
+ 
+ * The version number was bumped up with the Bioconductor release.
+ 
+ 
+# Version 1.7.5 [2007-03-08]
+ 
+## New Features
+ 
+ * Added argument `truncateGroupNames` to `readCdfGroupNames()` which
+   defaults to TRUE for backward compatibility.  When TRUE, any prefix
+   of group names identical to the unit name will be stripped of the
+   group names.
+ 
+ 
+# Version 1.7.4 [2007-02-21]
+ 
+## New Features
+ 
+ * Now `readCelUnits()` can handle unit groups for which there are no
+   probes, e.g. when stratifying on PM in a unit containing only MMs.
+ 
+ * Added `writeCdfHeader()`, `writeCdfQcUnits()` and
+   `writeCdfUnits()`.  These are all used by `writeCdf()`. They also
+   make it possible to write a CDF in chunks in order to for instance
+   `convertCdf()` in constant memory.
+ 
+ 
+# Version 1.7.3 [2007-01-05]
+ 
+## New Features
+ 
+ * Added `cdfAddPlasqTypes()`.
+ 
+ * Now `readCdfUnits(..., readDirections=TRUE)` also returns group
+   directions.
+ 
+ * Now `readCdf()` reads all unit and group fields by default.
+ 
+ * In addition to optimizing IO time, read maps can be used to
+   unrotate CEL data rotated by the dChip software. For more
+   information, see help on "Cell-index maps for reading and writing".
+ 
+## Bug Fixes
+ 
+ * Using read maps for `readCel()` would give an error saying the read
+   map is invalid even when it is not.
+ 
+ 
+# Version 1.7.2 [2006-12-10]
+ 
+## New Features
+ 
+ * Added argument `isPm` to `readCdf()`.
+ 
+## Bug Fixes
+ 
+ * `readCdfUnits()` and `readCdfCellIndices()` with `stratifyBy="mm"`
+   would return the same as `stratifyBy="pm"`.  Options `"pm"` and
+   `"pmmm"` are unaffected by this fix.
+ 
+ 
+# Version 1.7.1 [2006-11-03]
+ 
+## Significant Changes
+ 
+ * Updated to Fusion SDK v1.0.8.
+ 
+ * Windows build change: The Windows version is building against the
+   Windows code of Fusion SDK not the POSIX code. In order to do this
+   we have had to patch the preprocessor code in several of the Fusion
+   SDK source-code files, which has to be redone manually whenever
+   Fusion is updated.  Starting with this version, we instead set the
+   `_MSC_VER` flag used in the Fusion code to indicate Windows (set by
+   the Microsoft Visual C++ compiler). Since we are using MINGW this
+   flag is obviously not set. Faking `_MSC_VER` this way leaves us
+   only having to patch one single file in the Fusion release instead
+   of 10-20. Hopefully there are no other side effects.
+ 
+## Bug Fixes
+ 
+ * In Fusion SDK (v1.0.5) that previous version of **affxparser**
+   used, a CDF file was never closed on Unix platforms (this bug was
+   not in the Windows version).  Since Fusion allocated memory for the
+   complete CDF (even if a subset is only read), this caused the
+   memory usage to blow up, when reading the same or different CDF
+   files multiple times, because the memory was never deallocated.
+   Thanks Seth Falcon and Ken Simpson for reporting this problem.
+ 
+ 
+# Version 1.7.0 [2006-10-25]
+ 
+## New Features
+ 
+ * Made `readCelUnits()` a bit more clever if a `cdf` structure with
+   only cell indices is passed. Then all fields are just indices and
+   one can call unlist immediately.  This speeds things up a bit.
+ 
+## Bug Fixes
+ 
+ * `writeCdf()` would create an invalid CDF file if there were no QC
+   units.  This would in turn make `readCdfUnits()` etc core dump.
+ 
+ * Similar to get bug fix in the C code for `readCelHeader()`, much of
+   the C-level code for CDF (and BPMAP) files assumes that the strings
+   from Fusion SDK have a null terminator. At least for CDF unit
+   names, this is not necessarily the case.  To be on the safe side,
+   for all retrieved Fusion SDK strings we now make sure there is a
+   null terminator before converting it into an R string.  Thanks to
+   Ken Simpson at WEHI for all the troubleshooting.
+ 
+ * Because of the above bug fix, the ASCII mouse exon CDF can now be
+   converted into a valid binary CDF.
+ 
+## Notes
+ 
+ * The devel version number was bumped up with the Bioconductor
+   release.
+ 
+ 
+# Version 1.6.0 [2006-10-03]
+ 
+## Notes
+ 
+ * The version number was bumped up with the Bioconductor release.
+ 
+ 
+# Version 1.5 [2006-09-21]
+ 
+## New Features
+ 
+ * Added `compareCdfs()` to verify that a converted CDF is correct.
+ 
+ * Added `convertCdf()` utilizing the new `writeCdf()`.
+ 
+ * Added trial version of `createCel()`.
+ 
+ * Added trial version of `updateCelUnits()`.
+ 
+## Bug Fixes
+ 
+ * The C code for `readCelHeader()` did not allocate space for the
+   string null terminator for the header elements that originates from
+   wide C++ string.  This caused `readCelHeader()` to contain string
+   elements with random characters at the end.
+ 
+ * nrows and ncols were swapped in the CDF header when written by
+   `writeCdf()`.  This was missed because all tested CDFs were square.
+ 
+ 
+## Software Quality
+ 
+ * Now the package passes `R CMD check` without warnings.
+ 
+ 
+# Version 1.5.4 [2006-08-18]
+ 
+## Significant Changes
+ 
+ * Updated Fusion SDK to version 1.0.7.
+ 
+## Bug Fixes
+ 
+ * The new implementation of `updateCel()` utilizing raw vectors was
+   not correct; extra zeros was written too.  The example code of
+   `updateCel()` reveals such errors much easier now.
+ 
+ * `updateCel()` would in some cases give `Error: subscript out of
+   bounds` when writing the last chunk.
+ 
+ 
+# Version 1.5.3 [2006-07-24]
+ 
+## New Features
+ 
+ * Added functional prototype of `updateCel()` to _update_ binary (v4)
+   CEL files.  Currently, the code does make use the Fusion SDK.
+   There is currently no `writeCel()` to create a CEL file from
+   scratch.  However, with the auxillary function `copyCel()` one can
+   copy an existing CEL file and then update that one.  Thus, it is
+   now possible to write, say, normalized probe intensities to a CEL
+   file.  Note that this is only a first prototype and functions may
+   change in a future release.
+ 
+## Performance
+ 
+ * Improved the speed of `updateCel()` substantially by first working
+   with raw vector in memory and then write binary data to file.  Data
+   is also written in chunks (instead of all at once), to minimize the
+   memory overhead of using raw vectors, which is especially important
+   for the larger chips, e.g. 500K.
+ 
+ 
+# Version 1.5.2 [2006-05-31]
+ 
+## Significant Changes
+ 
+ * Updated Fusion SDK to version 1.0.6.
+ 
+ 
+# Version 1.5.1 [2006-05-15]
+ 
+## Significant Changes
+ 
+ * Updated Fusion SDK to version 1.0.5.
+ 
+## Bug Fixes
+ 
+ * Made small changes to the SDK to allow it to compile under Mac OS X
+   with GCC-4.0.3 shipping with R-2.3.0.
+ 
+## Code Refactoring
+ 
+ * Made changes to the `Makevars`, `_Makefile` and `cmd_line` scripts.
+ 
+ 
+# Version 1.5.0 [2006-05-12]
+ 
+## New Features
+ 
+ * Added `cdfOrderBy()` and `cdfOrderColumnsBy()` for restructuring
+   group fields in a CDF list structure.  Added `cdfGetGroups()` too.
+ 
+## Documentation
+ 
+ * Cleaned up and restructured the help pages; several Rd pages are
+   now made "internal" so they do not show up on the help index page.
+   Instead they are accessable from within other help pages (if you
+   browsing via HTML that is).  Added a help page on common terms.
+ 
+ * Added a bit more documentation on how to set the default CDF path.
+ 
+## Bug Fixes
+ 
+ * On Linux 64-bit read CEL intensities would all be zero.  This was
+   due to compiler settings in the Fusion SDK package, which is
+   circumvented by gcc compile it with a lower optimization level.
+ 
+ * When argument `cdf` was a CDF list structure with elements `type`
+   or `direction`, `readCelUnits()` would not read the correct cells
+   because the values of `type` and `direction` would be included in
+   the extracted list of cell indices.
+ 
+ 
+# Version 1.4.0 [2006-04-27]
+ 
+## Notes
+ 
+ * The stable version for Bioconductor 1.8.
+ 
+ 
+# Version 1.3.3 [2006-04-15]
+ 
+## Significant Changes
+ 
+ * The package now works on Solaris.
+ 
+ * Updated the Fusion SDK to version 1.0.5 (an unofficial release).
+ 
+## New Features
+ 
+ * New method `readCdfCellIndices()`, which is a 5-10 times faster
+   special-case implementation of `readCdfUnits()` to read cell
+   indices only.
+ 
+ * Renamed `readCdfUnitsMap()` to `readCdfUnitsWriteMap()`.
+ 
+ * New method `invertMap()` for fast inversion of maps.
+ 
+## Performance
+ 
+ * Now `readCelUnits()` sorts the cell indices before reading the data
+   from each file.  This minimizes the amount of jumping around in the
+   CEL files resulting in a speed-up of about 5-10 times.
+ 
+## Known Issues
+ 
+ * KNOWN BUGS: The weird bug as in v1.3.2 remains with the new Fusion
+   SDK, R v2.3.0 beta (2006-04-10 r37715) on WinXP. Internally
+   `readCdfCellIndices()` replaces `readCdfUnits()`, but the error is
+   still the same.
+ 
+ 
+# Version 1.3.2 [2006-03-28]
+ 
+## Significant Changes
+ 
+ * All cell and unit indices are now starting from one and not from
+   zero.  This change requires that all code that have been using a
+   previous version of this package have to be updated!
+ 
+## New Features
+ 
+ * New methods `readCelRectangle()` to read probe signals from a
+   specify area of the chip.
+ 
+## Documentation
+ 
+ * Added extensive help on cell coordinates and cell indices as well
+   read and write maps.
+ 
+## Known Issues
+ 
+ * KNOWN BUGS: At least on WinXP, heavy use of `readCelUnits()` will
+   sooner or later core dump R; it seems to be a memory related from
+   that occur when reading the CDF and extracting the name of the
+   unit.  However, when "torturing" `readCdfUnits()` the crash won't
+   happen so it might be that `readCel()` does something.  Have not
+   tried on other platforms.
+ 
+## Performance
+ 
+ * Further optimization in speed and memory for most methods.
+ 
+ 
+# Version 1.3.1 [NA]
+
diff --git a/R/cdfGtypeCelToPQ.R b/R/cdfGtypeCelToPQ.R
index 80eb258..112c799 100644
--- a/R/cdfGtypeCelToPQ.R
+++ b/R/cdfGtypeCelToPQ.R
@@ -1,7 +1,7 @@
 ########################################################################/**
 # @RdocFunction cdfGtypeCelToPQ
 #
-# @title "Function to imitate Affymetrix' gtype\_cel\_to\_pq software"
+# @title "Function to imitate Affymetrix' gtype_cel_to_pq software"
 #
 # \description{
 #  @get "title".
diff --git a/R/readCcg.R b/R/readCcg.R
index 1cee72e..6271d2b 100644
--- a/R/readCcg.R
+++ b/R/readCcg.R
@@ -48,21 +48,21 @@
 #   }
 #   \item Data
 #    \enumerate{
-#     \item Data Group \#1
+#     \item Data Group #1
 #      \enumerate{
-#       \item Data Set \#1
+#       \item Data Set #1
 #        \itemize{
 #         \item Parameters
 #         \item Column definitions
 #         \item Matrix of data
 #        }
-#       \item Data Set \#2
+#       \item Data Set #2
 #       \item ...
-#       \item Data Set \#L
+#       \item Data Set #L
 #      }
-#     \item Data Group \#2
+#     \item Data Group #2
 #     \item ...
-#     \item Data Group \#K
+#     \item Data Group #K
 #    }
 #  }
 # }
diff --git a/debian/changelog b/debian/changelog
index 5c44056..fa7bf96 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,9 +1,13 @@
-r-bioc-affxparser (1.70.0-2) UNRELEASED; urgency=medium
+r-bioc-affxparser (1.72.0-1) UNRELEASED; urgency=medium
 
+  [ Andreas Tille ]
   * Team upload.
   * Add suggested patch for bug #1024580 but further discussion is needed
 
- -- Andreas Tille <tille@debian.org>  Mon, 21 Nov 2022 20:15:24 +0100
+  [ Debian Janitor ]
+  * New upstream release.
+
+ -- Andreas Tille <tille@debian.org>  Sat, 08 Jul 2023 07:28:01 -0000
 
 r-bioc-affxparser (1.70.0-1) unstable; urgency=medium
 
diff --git a/man/cdfGtypeCelToPQ.Rd b/man/cdfGtypeCelToPQ.Rd
index 9002ec2..dc2f81a 100644
--- a/man/cdfGtypeCelToPQ.Rd
+++ b/man/cdfGtypeCelToPQ.Rd
@@ -10,10 +10,10 @@
 \alias{cdfGtypeCelToPQ}
 
 
-\title{Function to imitate Affymetrix' gtype\_cel\_to\_pq software}
+\title{Function to imitate Affymetrix' gtype_cel_to_pq software}
 
 \description{
- Function to imitate Affymetrix' gtype\_cel\_to\_pq software.
+ Function to imitate Affymetrix' gtype_cel_to_pq software.
 
  This \code{\link[base]{function}} is design to be used with \code{\link{applyCdfGroups}}()
  on an Affymetrix Mapping (SNP) CDF \code{\link[base]{list}} structure.
diff --git a/man/readCcg.Rd b/man/readCcg.Rd
index 4e3ab06..3dcfd59 100644
--- a/man/readCcg.Rd
+++ b/man/readCcg.Rd
@@ -59,21 +59,21 @@ readCcg(pathname, verbose=0, .filter=NULL, ...)
   }
   \item Data
    \enumerate{
-    \item Data Group \#1
+    \item Data Group #1
      \enumerate{
-      \item Data Set \#1
+      \item Data Set #1
        \itemize{
         \item Parameters
         \item Column definitions
         \item Matrix of data
        }
-      \item Data Set \#2
+      \item Data Set #2
       \item ...
-      \item Data Set \#L
+      \item Data Set #L
      }
-    \item Data Group \#2
+    \item Data Group #2
     \item ...
-    \item Data Group \#K
+    \item Data Group #K
    }
  }
 }
diff --git a/src/Makevars.win b/src/Makevars.win
index 40da392..67ee8c4 100644
--- a/src/Makevars.win
+++ b/src/Makevars.win
@@ -7,7 +7,7 @@ MYCXXFLAGS = -Wno-sign-compare -Wno-unknown-pragmas
 	$(CXX) $(ALL_CPPFLAGS) $(ALL_CXXFLAGS) $(MYCXXFLAGS) -c $< -o $@
 
 %.o: %.c
-	$(CC) $(ALL_CPPFLAGS) -c $< -o $@
+	$(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c $< -o $@
 
 FUSION_SDK = fusion
 
diff --git a/src/R_affx_clf_pgf_parser.cpp b/src/R_affx_clf_pgf_parser.cpp
index 22173f8..6872894 100644
--- a/src/R_affx_clf_pgf_parser.cpp
+++ b/src/R_affx_clf_pgf_parser.cpp
@@ -281,7 +281,7 @@ extern "C" {
           R_affx_get_body(clf, rho);
       }
       delete Err::popHandler();
-    } catch (Except ex) {
+    } catch (Except& ex) {
       delete Err::popHandler();
       clf->close();
       delete clf;
@@ -324,7 +324,7 @@ extern "C" {
       }
       pgf->close();
       delete Err::popHandler();
-    } catch (Except ex) {
+    } catch (Except& ex) {
       delete Err::popHandler();	// errors now are fatal
       pgf->close();
       delete pgf;
diff --git a/src/_mingw.h b/src/_mingw.h
index 4f24fe7..003e99a 100644
--- a/src/_mingw.h
+++ b/src/_mingw.h
@@ -1,621 +1,22 @@
-/* This is a copy of _mingw.h from MinGW headers (the toolchain installation,
-   should match the toolchain used. Modified/hacked to provide __uuidof()
-   operator - see HACK below.
-
-   There should be a cleaner solution, but this is what has been
-   done before.
-*/
-/**
- * This file has no copyright assigned and is placed in the Public Domain.
- * This file is part of the mingw-w64 runtime package.
- * No warranty is given; refer to the file DISCLAIMER.PD within this package.
- */
-
-#ifndef _INC__MINGW_H
-#define _INC__MINGW_H
-
-#include "_mingw_mac.h"
-#include "_mingw_secapi.h"
-
-/* Include _cygwin.h if we're building a Cygwin application. */
-#ifdef __CYGWIN__
-#include "_cygwin.h"
-#endif
-
-/* Target specific macro replacement for type "long".  In the Windows API,
-   the type long is always 32 bit, even if the target is 64 bit (LLP64).
-   On 64 bit Cygwin, the type long is 64 bit (LP64).  So, to get the right
-   sized definitions and declarations, all usage of type long in the Windows
-   headers have to be replaced by the below defined macro __LONG32. */
-#ifndef __LP64__	/* 32 bit target, 64 bit Mingw target */
-#define __LONG32 long
-#else			/* 64 bit Cygwin target */
-#define __LONG32 int
-#endif
-
-/* C/C++ specific language defines.  */
-#ifdef _WIN64
-#ifdef __stdcall
-#undef __stdcall
-#endif
-#define __stdcall
-#endif
-
-#ifndef __GNUC__
-# ifndef __MINGW_IMPORT
-#  define __MINGW_IMPORT  __declspec(dllimport)
-# endif
-# ifndef _CRTIMP
-#  define _CRTIMP  __declspec(dllimport)
-# endif
-# define __DECLSPEC_SUPPORTED
-# define __attribute__(x) /* nothing */
-#else /* __GNUC__ */
-# ifdef __declspec
-#  ifndef __MINGW_IMPORT
-/* Note the extern. This is needed to work around GCC's
-limitations in handling dllimport attribute.  */
-#   define __MINGW_IMPORT  extern __attribute__ ((__dllimport__))
-#  endif
-#  ifndef _CRTIMP
-#    undef __USE_CRTIMP
-#    if !defined (_CRTBLD) && !defined (_SYSCRT)
-#      define __USE_CRTIMP 1
-#    endif
-#    ifdef __USE_CRTIMP
-#      define _CRTIMP  __attribute__ ((__dllimport__))
-#    else
-#      define _CRTIMP
-#    endif
-#  endif
-#  define __DECLSPEC_SUPPORTED
-# else /* __declspec */
-#  undef __DECLSPEC_SUPPORTED
-#  undef __MINGW_IMPORT
-#  ifndef _CRTIMP
-#   define _CRTIMP
-#  endif
-# endif /* __declspec */
-#endif /* __GNUC__ */
-  
-/* HACK: to get __uuidof() */
-
-#ifdef _MSC_VER
-#define USE___UUIDOF	0	
-#else
-#define USE___UUIDOF	0	
-#endif
-
-#if !defined(_MSC_VER) && !defined(_inline)
-#define _inline __inline
-#endif
-
-#ifdef __cplusplus
-# define __CRT_INLINE inline
-#elif defined(_MSC_VER)
-# define __CRT_INLINE __inline
-#else
-# if ((__MINGW_GNUC_PREREQ(4, 3) || defined(__clang__)) && __STDC_VERSION__ >= 199901L)
-#  define __CRT_INLINE extern inline __attribute__((__gnu_inline__))
-# else
-#  define __CRT_INLINE extern __inline__
-# endif
-#endif
-
-#if !defined(__MINGW_INTRIN_INLINE) && defined(__GNUC__)
-#define __MINGW_INTRIN_INLINE extern __inline__ __attribute__((__always_inline__,__gnu_inline__))
-#endif
-
-#ifndef __CYGWIN__
-#ifdef __NO_INLINE__
-#undef __CRT__NO_INLINE
-#define __CRT__NO_INLINE 1
-#endif
-#endif
-
-#ifdef __cplusplus
-# define __UNUSED_PARAM(x)
-#else
-# ifdef __GNUC__
-#  define __UNUSED_PARAM(x) x __attribute__ ((__unused__))
-# else
-#  define __UNUSED_PARAM(x) x
-# endif
-#endif
-
-#ifndef __GNUC__
-# ifdef _MSC_VER
-#  define __restrict__  __restrict
-# else
-#  define __restrict__	/* nothing */
-# endif
-#endif /* !__GNUC__ */
-
-#if __MINGW_GNUC_PREREQ (3,1) && !defined __GNUG__
-# define __restrict_arr __restrict
-#elif defined(_MSC_VER)
-# define __restrict_arr __restrict
-#else
-# ifdef __GNUC__
-#  define __restrict_arr        /* Not supported in old GCC.  */
-# else
-#  if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
-#   define __restrict_arr       restrict
-#  else
-#   define __restrict_arr       /* Not supported.  */
-#  endif
-# endif
-#endif
-
-#ifdef __GNUC__
-#define __MINGW_ATTRIB_NORETURN __attribute__ ((__noreturn__))
-#define __MINGW_ATTRIB_CONST __attribute__ ((__const__))
-#elif __MINGW_MSC_PREREQ(12, 0)
-#define __MINGW_ATTRIB_NORETURN __declspec(noreturn)
-#define __MINGW_ATTRIB_CONST
-#else
-#define __MINGW_ATTRIB_NORETURN
-#define __MINGW_ATTRIB_CONST
-#endif
-
-#if __MINGW_GNUC_PREREQ (3, 0)
-#define __MINGW_ATTRIB_MALLOC __attribute__ ((__malloc__))
-#define __MINGW_ATTRIB_PURE __attribute__ ((__pure__))
-#elif __MINGW_MSC_PREREQ(14, 0)
-#define __MINGW_ATTRIB_MALLOC __declspec(noalias) __declspec(restrict)
-#define __MINGW_ATTRIB_PURE
-#else
-#define __MINGW_ATTRIB_MALLOC
-#define __MINGW_ATTRIB_PURE
-#endif
-
-/* Attribute `nonnull' was valid as of gcc 3.3.  We don't use GCC's
-   variadiac macro facility, because variadic macros cause syntax
-   errors with  --traditional-cpp.  */
-#if  __MINGW_GNUC_PREREQ (3, 3)
-#define __MINGW_ATTRIB_NONNULL(arg) __attribute__ ((__nonnull__ (arg)))
-#else
-#define __MINGW_ATTRIB_NONNULL(arg)
-#endif /* GNUC >= 3.3 */
-
-#ifdef __GNUC__
-#define __MINGW_ATTRIB_UNUSED __attribute__ ((__unused__))
-#else
-#define __MINGW_ATTRIB_UNUSED
-#endif /* ATTRIBUTE_UNUSED */
-
-#if  __MINGW_GNUC_PREREQ (3, 1)
-#define __MINGW_ATTRIB_USED __attribute__ ((__used__))
-#define __MINGW_ATTRIB_DEPRECATED __attribute__ ((__deprecated__))
-#if __MINGW_GNUC_PREREQ (4, 5) || defined (__clang__)
-#define __MINGW_ATTRIB_DEPRECATED_MSG(x) __attribute__ ((__deprecated__(x)))
-#endif
-#elif __MINGW_MSC_PREREQ(12, 0)
-#define __MINGW_ATTRIB_USED
-#define __MINGW_ATTRIB_DEPRECATED __declspec(deprecated)
-#else
-#define __MINGW_ATTRIB_USED __MINGW_ATTRIB_UNUSED
-#define __MINGW_ATTRIB_DEPRECATED
-#endif /* GNUC >= 3.1 */
-
-#ifndef __MINGW_ATTRIB_DEPRECATED_MSG
-#define __MINGW_ATTRIB_DEPRECATED_MSG(x) __MINGW_ATTRIB_DEPRECATED
-#endif
-
-#if  __MINGW_GNUC_PREREQ (3, 3)
-#define __MINGW_NOTHROW __attribute__ ((__nothrow__))
-#elif __MINGW_MSC_PREREQ(12, 0) && defined (__cplusplus)
-#define __MINGW_NOTHROW __declspec(nothrow)
-#else
-#define __MINGW_NOTHROW
-#endif
-
-#if __MINGW_GNUC_PREREQ (4, 4)
-#define __MINGW_ATTRIB_NO_OPTIMIZE __attribute__((__optimize__ ("0")))
-#else
-#define __MINGW_ATTRIB_NO_OPTIMIZE
-#endif
-
-#if __MINGW_GNUC_PREREQ (4, 4)
-#define __MINGW_PRAGMA_PARAM(x) _Pragma (#x)
-#elif __MINGW_MSC_PREREQ (13, 1)
-#define __MINGW_PRAGMA_PARAM(x) __pragma (x)
-#else
-#define __MINGW_PRAGMA_PARAM(x)
-#endif
-
-#define __MINGW_BROKEN_INTERFACE(x) \
-  __MINGW_PRAGMA_PARAM(message ("Interface " _CRT_STRINGIZE(x) \
-  " has unverified layout."))
-
-#ifndef __MSVCRT_VERSION__
-/*  High byte is the major version, low byte is the minor. */
-# ifndef _UCRT
-#  define __MSVCRT_VERSION__ 0xE00
-# else
-#  define __MSVCRT_VERSION__ 0xE00
-# endif
-#endif
-
-
-#ifndef _WIN32_WINNT
-#define _WIN32_WINNT 0x502
-#endif
-
-#ifndef _INT128_DEFINED
-#define _INT128_DEFINED
-#ifdef __GNUC__
-#define __int8 char
-#define __int16 short
-#define __int32 int
-#define __int64 long long
-#ifdef _WIN64
-#if (__clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 1)) && \
-    !defined(__SIZEOF_INT128__) /* clang >= 3.1 has __int128 but no size macro */
-#define __SIZEOF_INT128__ 16
-#endif
-#ifndef __SIZEOF_INT128__
-typedef int __int128 __attribute__ ((__mode__ (TI)));
-#endif
-#endif
-#endif /* __GNUC__ */
-#endif /* _INT128_DEFINED */
-
-#ifdef __GNUC__
-#define __ptr32
-#define __ptr64
-#ifndef __unaligned
-#define __unaligned
-#endif
-#ifndef __w64
-#define __w64
-#endif
-#ifdef __cplusplus
-#define __forceinline inline __attribute__((__always_inline__))
-#else
-#define __forceinline extern __inline__ __attribute__((__always_inline__,__gnu_inline__))
-#endif /* __cplusplus */
-#endif /* __GNUC__ */
-
-#if !defined(_WIN32) && !defined(__CYGWIN__)
-#error Only Win32 target is supported!
-#endif
-
-#ifndef __nothrow
-#ifdef __cplusplus
-#define __nothrow __MINGW_NOTHROW
-#else
-#define __nothrow
-#endif
-#endif /* __nothrow */
-
-#include <vadefs.h>	/* other headers depend on this include */
-
-#ifndef _CRT_STRINGIZE
-#define __CRT_STRINGIZE(_Value) #_Value
-#define _CRT_STRINGIZE(_Value) __CRT_STRINGIZE(_Value)
-#endif /* _CRT_STRINGIZE */
-
-#ifndef _CRT_WIDE
-#define __CRT_WIDE(_String) L ## _String
-#define _CRT_WIDE(_String) __CRT_WIDE(_String)
-#endif /* _CRT_WIDE */
-
-#ifndef _W64
-#define _W64
-#endif
-
-#ifndef _CRTIMP_NOIA64
-#ifdef __ia64__
-#define _CRTIMP_NOIA64
-#else
-#define _CRTIMP_NOIA64 _CRTIMP
-#endif
-#endif /* _CRTIMP_NOIA64 */
-
-#ifndef _CRTIMP2
-#define _CRTIMP2 _CRTIMP
-#endif
-
-#ifndef _CRTIMP_ALTERNATIVE
-#define _CRTIMP_ALTERNATIVE _CRTIMP
-#define _CRT_ALTERNATIVE_IMPORTED
-#endif /* _CRTIMP_ALTERNATIVE */
-
-#ifndef _MRTIMP2
-#define _MRTIMP2  _CRTIMP
-#endif
-
-/* We have to define _DLL for gcc based mingw version. This define is set
-   by VC, when DLL-based runtime is used. So, gcc based runtime just have
-   DLL-base runtime, therefore this define has to be set.
-   As our headers are possibly used by windows compiler having a static
-   C-runtime, we make this definition gnu compiler specific here.  */
-#if !defined (_DLL) && defined (__GNUC__)
-#define _DLL
-#endif
-
-#ifndef _MT
-#define _MT
-#endif
-
-#ifndef _MCRTIMP
-#define _MCRTIMP _CRTIMP
+/*****************************************************************
+ This header file is used when compiling with MinGW on Windows.
+ It is agile to the gcc toolchain currently used; it uses
+ different setups for:
+
+  - gcc (>= 4.9.3): introduced in R (>= 3.3.0)
+  - gcc (>= 4.6.3): R (< 3.3.0) and some R (>= 3.3.0) installs
+
+ Henrik Bengtsson, 2016-04-05
+*****************************************************************/
+#define GCC_VERSION (__GNUC__ * 10000 \
+                              + __GNUC_MINOR__ * 100 \
+                              + __GNUC_PATCHLEVEL__)
+#if GCC_VERSION >= 120200
+#include "_mingw_gcc1202.h"
+#elif GCC_VERSION >= 100200
+#include "_mingw_gcc1002.h"
+#elif GCC_VERSION >= 40903
+#include "_mingw_gcc493.h"
+#elif GCC_VERSION >= 40603
+#include "_mingw_gcc463.h"
 #endif
-
-#ifndef _CRTIMP_PURE
-#define _CRTIMP_PURE _CRTIMP
-#endif
-
-#ifndef _PGLOBAL
-#define _PGLOBAL
-#endif
-
-#ifndef _AGLOBAL
-#define _AGLOBAL
-#endif
-
-#define _SECURECRT_FILL_BUFFER_PATTERN 0xFD
-#define _CRT_DEPRECATE_TEXT(_Text) __declspec(deprecated)
-
-#ifndef _CRT_INSECURE_DEPRECATE_MEMORY
-#define _CRT_INSECURE_DEPRECATE_MEMORY(_Replacement)
-#endif
-
-#ifndef _CRT_INSECURE_DEPRECATE_GLOBALS
-#define _CRT_INSECURE_DEPRECATE_GLOBALS(_Replacement)
-#endif
-
-#ifndef _CRT_MANAGED_HEAP_DEPRECATE
-#define _CRT_MANAGED_HEAP_DEPRECATE
-#endif
-
-#ifndef _CRT_OBSOLETE
-#define _CRT_OBSOLETE(_NewItem)
-#endif
-
-#ifndef __WIDL__
-
-#if defined (_WIN32) && !defined (_WIN64) && !defined (__MINGW_USE_VC2005_COMPAT)
-#ifndef _USE_32BIT_TIME_T
-#define _USE_32BIT_TIME_T
-#endif
-#endif
-
-#ifndef _CONST_RETURN
-#define _CONST_RETURN
-#endif
-
-#ifndef UNALIGNED
-#if defined(_M_IA64) || defined(_M_AMD64)
-#define UNALIGNED __unaligned
-#else
-#define UNALIGNED
-#endif
-#endif /* UNALIGNED */
-
-#ifndef _CRT_ALIGN
-#ifdef  _MSC_VER
-#define _CRT_ALIGN(x) __declspec(align(x))
-#else /* __GNUC__ */
-#define _CRT_ALIGN(x) __attribute__ ((__aligned__ (x)))
-#endif
-#endif /* _CRT_ALIGN */
-
-#endif /* __WIDL__ */
-
-#ifndef __CRTDECL
-#define __CRTDECL __cdecl
-#endif
-
-#define _ARGMAX 100
-
-#ifndef _TRUNCATE
-#define _TRUNCATE ((size_t)-1)
-#endif
-
-#ifndef _CRT_UNUSED
-#define _CRT_UNUSED(x) (void)x
-#endif
-
-/* MSVC defines _NATIVE_NULLPTR_SUPPORTED when nullptr is supported. We emulate it here for GCC. */
-#if __MINGW_GNUC_PREREQ(4, 6)
-#if defined(__GNUC__) && (defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L)
-#define _NATIVE_NULLPTR_SUPPORTED
-#endif
-#endif
-
-/* We are activating __USE_MINGW_ANSI_STDIO for various define indicators.
- * printf ll modifier (unsupported by msvcrt.dll) is required by C99 and C++11 standards. */
-#if (defined (_POSIX) || defined (_POSIX_SOURCE) || defined (_POSIX_C_SOURCE) \
-     || defined (_ISOC99_SOURCE) \
-     || (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L && __MSVCRT_VERSION__ < 0xE00) \
-     || (defined (__cplusplus) && __cplusplus >= 201103L && __MSVCRT_VERSION__ < 0xE00) \
-     || defined (_XOPEN_SOURCE) || defined (_XOPEN_SOURCE_EXTENDED) \
-     || defined (_GNU_SOURCE) \
-     || defined (_SVID_SOURCE)) \
-    && !defined(__USE_MINGW_ANSI_STDIO)
-/* Enable __USE_MINGW_ANSI_STDIO if user did _not_ specify it explicitly... */
-#  define __USE_MINGW_ANSI_STDIO			1
-#endif
-
-/* We are defining __USE_MINGW_ANSI_STDIO as 0 or 1 */
-#if !defined(__USE_MINGW_ANSI_STDIO)
-#define __USE_MINGW_ANSI_STDIO 0      /* was not defined so it should be 0 */
-#elif (__USE_MINGW_ANSI_STDIO + 0) != 0 || (1 - __USE_MINGW_ANSI_STDIO - 1) == 2
-#define __USE_MINGW_ANSI_STDIO 1      /* was defined as nonzero or empty so it should be 1 */
-#else
-#define __USE_MINGW_ANSI_STDIO 0      /* was defined as (int)zero and non-empty so it should be 0 */
-#endif
-
-/* _dowildcard is an int that controls the globbing of the command line.
- * The MinGW32 (mingw.org) runtime calls it _CRT_glob, so we are adding
- * a compatibility definition here:  you can use either of _CRT_glob or
- * _dowildcard .
- * If _dowildcard is non-zero, the command line will be globbed:  *.*
- * will be expanded to be all files in the startup directory.
- * In the mingw-w64 library a _dowildcard variable is defined as being
- * 0, therefore command line globbing is DISABLED by default. To turn it
- * on and to leave wildcard command line processing MS's globbing code,
- * include a line in one of your source modules defining _dowildcard and
- * setting it to -1, like so:
- * int _dowildcard = -1;
- */
-#undef  _CRT_glob
-#define _CRT_glob _dowildcard
-
-
-#if defined(_MSC_VER) && !defined(_MSC_EXTENSIONS)
-#define NONAMELESSUNION		1
-#endif
-#if defined(NONAMELESSSTRUCT) && \
-   !defined(NONAMELESSUNION)
-#define NONAMELESSUNION		1
-#endif
-#if defined(NONAMELESSUNION)  && \
-   !defined(NONAMELESSSTRUCT)
-#define NONAMELESSSTRUCT	1
-#endif
-
-#ifndef __ANONYMOUS_DEFINED
-#define __ANONYMOUS_DEFINED
-#define _ANONYMOUS_UNION  __MINGW_EXTENSION
-#define _ANONYMOUS_STRUCT __MINGW_EXTENSION
-#ifndef NONAMELESSUNION
-#define _UNION_NAME(x)
-#define _STRUCT_NAME(x)
-#else /* NONAMELESSUNION */
-#define _UNION_NAME(x)  x
-#define _STRUCT_NAME(x) x
-#endif
-#endif	/* __ANONYMOUS_DEFINED */
-
-#ifndef DUMMYUNIONNAME
-# ifdef NONAMELESSUNION
-#  define DUMMYUNIONNAME  u
-#  define DUMMYUNIONNAME1 u1	/* Wine uses this variant */
-#  define DUMMYUNIONNAME2 u2
-#  define DUMMYUNIONNAME3 u3
-#  define DUMMYUNIONNAME4 u4
-#  define DUMMYUNIONNAME5 u5
-#  define DUMMYUNIONNAME6 u6
-#  define DUMMYUNIONNAME7 u7
-#  define DUMMYUNIONNAME8 u8
-#  define DUMMYUNIONNAME9 u9
-# else /* NONAMELESSUNION */
-#  define DUMMYUNIONNAME
-#  define DUMMYUNIONNAME1	/* Wine uses this variant */
-#  define DUMMYUNIONNAME2
-#  define DUMMYUNIONNAME3
-#  define DUMMYUNIONNAME4
-#  define DUMMYUNIONNAME5
-#  define DUMMYUNIONNAME6
-#  define DUMMYUNIONNAME7
-#  define DUMMYUNIONNAME8
-#  define DUMMYUNIONNAME9
-# endif
-#endif	/* DUMMYUNIONNAME */
-
-#ifndef DUMMYSTRUCTNAME
-# ifdef NONAMELESSUNION
-#  define DUMMYSTRUCTNAME  s
-#  define DUMMYSTRUCTNAME1 s1	/* Wine uses this variant */
-#  define DUMMYSTRUCTNAME2 s2
-#  define DUMMYSTRUCTNAME3 s3
-#  define DUMMYSTRUCTNAME4 s4
-#  define DUMMYSTRUCTNAME5 s5
-# else
-#  define DUMMYSTRUCTNAME
-#  define DUMMYSTRUCTNAME1	/* Wine uses this variant */
-#  define DUMMYSTRUCTNAME2
-#  define DUMMYSTRUCTNAME3
-#  define DUMMYSTRUCTNAME4
-#  define DUMMYSTRUCTNAME5
-# endif
-#endif /* DUMMYSTRUCTNAME */
-
-
-/* Macros for __uuidof template-based emulation */
-#if defined(__cplusplus) && (USE___UUIDOF == 0)
-
-#if __cpp_constexpr >= 200704l && __cpp_inline_variables >= 201606L
-#define __CRT_UUID_DECL(type,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)    \
-    extern "C++" {                                               \
-    template<> struct __mingw_uuidof_s<type> {                   \
-        static constexpr IID __uuid_inst = {                     \
-            l,w1,w2, {b1,b2,b3,b4,b5,b6,b7,b8}                   \
-        };                                                       \
-    };                                                           \
-    template<> constexpr const GUID &__mingw_uuidof<type>() {    \
-        return __mingw_uuidof_s<type>::__uuid_inst;              \
-    }                                                            \
-    template<> constexpr const GUID &__mingw_uuidof<type*>() {   \
-        return  __mingw_uuidof_s<type>::__uuid_inst;             \
-    }                                                            \
-    }
-#else
-#define __CRT_UUID_DECL(type,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)           \
-    extern "C++" {                                                      \
-    template<> inline const GUID &__mingw_uuidof<type>() {              \
-        static const IID __uuid_inst = {l,w1,w2, {b1,b2,b3,b4,b5,b6,b7,b8}}; \
-        return __uuid_inst;                                             \
-    }                                                                   \
-    template<> inline const GUID &__mingw_uuidof<type*>() {             \
-        return __mingw_uuidof<type>();                                  \
-    }                                                                   \
-    }
-#endif
-
-#define __uuidof(type) __mingw_uuidof<__typeof(type)>()
-
-#else
-
-#define __CRT_UUID_DECL(type,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
-
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-#ifdef __MINGW_INTRIN_INLINE
-#ifdef __has_builtin
-#define __MINGW_DEBUGBREAK_IMPL !__has_builtin(__debugbreak)
-#else
-#define __MINGW_DEBUGBREAK_IMPL 1
-#endif
-#if __MINGW_DEBUGBREAK_IMPL == 1
-void __cdecl __debugbreak(void);
-__MINGW_INTRIN_INLINE void __cdecl __debugbreak(void)
-{
-  __asm__ __volatile__("int {$}3":);
-}
-#endif
-#endif
-
-/* mingw-w64 specific functions: */
-const char *__mingw_get_crt_info (void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _INC__MINGW_H */
-
-#ifndef MINGW_SDK_INIT
-#define MINGW_SDK_INIT
-
-/* for backward compatibility */
-#ifndef MINGW_HAS_SECURE_API
-#define MINGW_HAS_SECURE_API 1
-#endif
-
-#define __STDC_SECURE_LIB__ 200411L
-#define __GOT_SECURE_LIB__ __STDC_SECURE_LIB__
-
-#ifndef __WIDL__
-#include "sdks/_mingw_ddk.h"
-#endif
-
-#endif /* MINGW_SDK_INIT */
diff --git a/src/_mingw_gcc1002.h b/src/_mingw_gcc1002.h
new file mode 100644
index 0000000..4f24fe7
--- /dev/null
+++ b/src/_mingw_gcc1002.h
@@ -0,0 +1,621 @@
+/* This is a copy of _mingw.h from MinGW headers (the toolchain installation,
+   should match the toolchain used. Modified/hacked to provide __uuidof()
+   operator - see HACK below.
+
+   There should be a cleaner solution, but this is what has been
+   done before.
+*/
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#ifndef _INC__MINGW_H
+#define _INC__MINGW_H
+
+#include "_mingw_mac.h"
+#include "_mingw_secapi.h"
+
+/* Include _cygwin.h if we're building a Cygwin application. */
+#ifdef __CYGWIN__
+#include "_cygwin.h"
+#endif
+
+/* Target specific macro replacement for type "long".  In the Windows API,
+   the type long is always 32 bit, even if the target is 64 bit (LLP64).
+   On 64 bit Cygwin, the type long is 64 bit (LP64).  So, to get the right
+   sized definitions and declarations, all usage of type long in the Windows
+   headers have to be replaced by the below defined macro __LONG32. */
+#ifndef __LP64__	/* 32 bit target, 64 bit Mingw target */
+#define __LONG32 long
+#else			/* 64 bit Cygwin target */
+#define __LONG32 int
+#endif
+
+/* C/C++ specific language defines.  */
+#ifdef _WIN64
+#ifdef __stdcall
+#undef __stdcall
+#endif
+#define __stdcall
+#endif
+
+#ifndef __GNUC__
+# ifndef __MINGW_IMPORT
+#  define __MINGW_IMPORT  __declspec(dllimport)
+# endif
+# ifndef _CRTIMP
+#  define _CRTIMP  __declspec(dllimport)
+# endif
+# define __DECLSPEC_SUPPORTED
+# define __attribute__(x) /* nothing */
+#else /* __GNUC__ */
+# ifdef __declspec
+#  ifndef __MINGW_IMPORT
+/* Note the extern. This is needed to work around GCC's
+limitations in handling dllimport attribute.  */
+#   define __MINGW_IMPORT  extern __attribute__ ((__dllimport__))
+#  endif
+#  ifndef _CRTIMP
+#    undef __USE_CRTIMP
+#    if !defined (_CRTBLD) && !defined (_SYSCRT)
+#      define __USE_CRTIMP 1
+#    endif
+#    ifdef __USE_CRTIMP
+#      define _CRTIMP  __attribute__ ((__dllimport__))
+#    else
+#      define _CRTIMP
+#    endif
+#  endif
+#  define __DECLSPEC_SUPPORTED
+# else /* __declspec */
+#  undef __DECLSPEC_SUPPORTED
+#  undef __MINGW_IMPORT
+#  ifndef _CRTIMP
+#   define _CRTIMP
+#  endif
+# endif /* __declspec */
+#endif /* __GNUC__ */
+  
+/* HACK: to get __uuidof() */
+
+#ifdef _MSC_VER
+#define USE___UUIDOF	0	
+#else
+#define USE___UUIDOF	0	
+#endif
+
+#if !defined(_MSC_VER) && !defined(_inline)
+#define _inline __inline
+#endif
+
+#ifdef __cplusplus
+# define __CRT_INLINE inline
+#elif defined(_MSC_VER)
+# define __CRT_INLINE __inline
+#else
+# if ((__MINGW_GNUC_PREREQ(4, 3) || defined(__clang__)) && __STDC_VERSION__ >= 199901L)
+#  define __CRT_INLINE extern inline __attribute__((__gnu_inline__))
+# else
+#  define __CRT_INLINE extern __inline__
+# endif
+#endif
+
+#if !defined(__MINGW_INTRIN_INLINE) && defined(__GNUC__)
+#define __MINGW_INTRIN_INLINE extern __inline__ __attribute__((__always_inline__,__gnu_inline__))
+#endif
+
+#ifndef __CYGWIN__
+#ifdef __NO_INLINE__
+#undef __CRT__NO_INLINE
+#define __CRT__NO_INLINE 1
+#endif
+#endif
+
+#ifdef __cplusplus
+# define __UNUSED_PARAM(x)
+#else
+# ifdef __GNUC__
+#  define __UNUSED_PARAM(x) x __attribute__ ((__unused__))
+# else
+#  define __UNUSED_PARAM(x) x
+# endif
+#endif
+
+#ifndef __GNUC__
+# ifdef _MSC_VER
+#  define __restrict__  __restrict
+# else
+#  define __restrict__	/* nothing */
+# endif
+#endif /* !__GNUC__ */
+
+#if __MINGW_GNUC_PREREQ (3,1) && !defined __GNUG__
+# define __restrict_arr __restrict
+#elif defined(_MSC_VER)
+# define __restrict_arr __restrict
+#else
+# ifdef __GNUC__
+#  define __restrict_arr        /* Not supported in old GCC.  */
+# else
+#  if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
+#   define __restrict_arr       restrict
+#  else
+#   define __restrict_arr       /* Not supported.  */
+#  endif
+# endif
+#endif
+
+#ifdef __GNUC__
+#define __MINGW_ATTRIB_NORETURN __attribute__ ((__noreturn__))
+#define __MINGW_ATTRIB_CONST __attribute__ ((__const__))
+#elif __MINGW_MSC_PREREQ(12, 0)
+#define __MINGW_ATTRIB_NORETURN __declspec(noreturn)
+#define __MINGW_ATTRIB_CONST
+#else
+#define __MINGW_ATTRIB_NORETURN
+#define __MINGW_ATTRIB_CONST
+#endif
+
+#if __MINGW_GNUC_PREREQ (3, 0)
+#define __MINGW_ATTRIB_MALLOC __attribute__ ((__malloc__))
+#define __MINGW_ATTRIB_PURE __attribute__ ((__pure__))
+#elif __MINGW_MSC_PREREQ(14, 0)
+#define __MINGW_ATTRIB_MALLOC __declspec(noalias) __declspec(restrict)
+#define __MINGW_ATTRIB_PURE
+#else
+#define __MINGW_ATTRIB_MALLOC
+#define __MINGW_ATTRIB_PURE
+#endif
+
+/* Attribute `nonnull' was valid as of gcc 3.3.  We don't use GCC's
+   variadiac macro facility, because variadic macros cause syntax
+   errors with  --traditional-cpp.  */
+#if  __MINGW_GNUC_PREREQ (3, 3)
+#define __MINGW_ATTRIB_NONNULL(arg) __attribute__ ((__nonnull__ (arg)))
+#else
+#define __MINGW_ATTRIB_NONNULL(arg)
+#endif /* GNUC >= 3.3 */
+
+#ifdef __GNUC__
+#define __MINGW_ATTRIB_UNUSED __attribute__ ((__unused__))
+#else
+#define __MINGW_ATTRIB_UNUSED
+#endif /* ATTRIBUTE_UNUSED */
+
+#if  __MINGW_GNUC_PREREQ (3, 1)
+#define __MINGW_ATTRIB_USED __attribute__ ((__used__))
+#define __MINGW_ATTRIB_DEPRECATED __attribute__ ((__deprecated__))
+#if __MINGW_GNUC_PREREQ (4, 5) || defined (__clang__)
+#define __MINGW_ATTRIB_DEPRECATED_MSG(x) __attribute__ ((__deprecated__(x)))
+#endif
+#elif __MINGW_MSC_PREREQ(12, 0)
+#define __MINGW_ATTRIB_USED
+#define __MINGW_ATTRIB_DEPRECATED __declspec(deprecated)
+#else
+#define __MINGW_ATTRIB_USED __MINGW_ATTRIB_UNUSED
+#define __MINGW_ATTRIB_DEPRECATED
+#endif /* GNUC >= 3.1 */
+
+#ifndef __MINGW_ATTRIB_DEPRECATED_MSG
+#define __MINGW_ATTRIB_DEPRECATED_MSG(x) __MINGW_ATTRIB_DEPRECATED
+#endif
+
+#if  __MINGW_GNUC_PREREQ (3, 3)
+#define __MINGW_NOTHROW __attribute__ ((__nothrow__))
+#elif __MINGW_MSC_PREREQ(12, 0) && defined (__cplusplus)
+#define __MINGW_NOTHROW __declspec(nothrow)
+#else
+#define __MINGW_NOTHROW
+#endif
+
+#if __MINGW_GNUC_PREREQ (4, 4)
+#define __MINGW_ATTRIB_NO_OPTIMIZE __attribute__((__optimize__ ("0")))
+#else
+#define __MINGW_ATTRIB_NO_OPTIMIZE
+#endif
+
+#if __MINGW_GNUC_PREREQ (4, 4)
+#define __MINGW_PRAGMA_PARAM(x) _Pragma (#x)
+#elif __MINGW_MSC_PREREQ (13, 1)
+#define __MINGW_PRAGMA_PARAM(x) __pragma (x)
+#else
+#define __MINGW_PRAGMA_PARAM(x)
+#endif
+
+#define __MINGW_BROKEN_INTERFACE(x) \
+  __MINGW_PRAGMA_PARAM(message ("Interface " _CRT_STRINGIZE(x) \
+  " has unverified layout."))
+
+#ifndef __MSVCRT_VERSION__
+/*  High byte is the major version, low byte is the minor. */
+# ifndef _UCRT
+#  define __MSVCRT_VERSION__ 0xE00
+# else
+#  define __MSVCRT_VERSION__ 0xE00
+# endif
+#endif
+
+
+#ifndef _WIN32_WINNT
+#define _WIN32_WINNT 0x502
+#endif
+
+#ifndef _INT128_DEFINED
+#define _INT128_DEFINED
+#ifdef __GNUC__
+#define __int8 char
+#define __int16 short
+#define __int32 int
+#define __int64 long long
+#ifdef _WIN64
+#if (__clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 1)) && \
+    !defined(__SIZEOF_INT128__) /* clang >= 3.1 has __int128 but no size macro */
+#define __SIZEOF_INT128__ 16
+#endif
+#ifndef __SIZEOF_INT128__
+typedef int __int128 __attribute__ ((__mode__ (TI)));
+#endif
+#endif
+#endif /* __GNUC__ */
+#endif /* _INT128_DEFINED */
+
+#ifdef __GNUC__
+#define __ptr32
+#define __ptr64
+#ifndef __unaligned
+#define __unaligned
+#endif
+#ifndef __w64
+#define __w64
+#endif
+#ifdef __cplusplus
+#define __forceinline inline __attribute__((__always_inline__))
+#else
+#define __forceinline extern __inline__ __attribute__((__always_inline__,__gnu_inline__))
+#endif /* __cplusplus */
+#endif /* __GNUC__ */
+
+#if !defined(_WIN32) && !defined(__CYGWIN__)
+#error Only Win32 target is supported!
+#endif
+
+#ifndef __nothrow
+#ifdef __cplusplus
+#define __nothrow __MINGW_NOTHROW
+#else
+#define __nothrow
+#endif
+#endif /* __nothrow */
+
+#include <vadefs.h>	/* other headers depend on this include */
+
+#ifndef _CRT_STRINGIZE
+#define __CRT_STRINGIZE(_Value) #_Value
+#define _CRT_STRINGIZE(_Value) __CRT_STRINGIZE(_Value)
+#endif /* _CRT_STRINGIZE */
+
+#ifndef _CRT_WIDE
+#define __CRT_WIDE(_String) L ## _String
+#define _CRT_WIDE(_String) __CRT_WIDE(_String)
+#endif /* _CRT_WIDE */
+
+#ifndef _W64
+#define _W64
+#endif
+
+#ifndef _CRTIMP_NOIA64
+#ifdef __ia64__
+#define _CRTIMP_NOIA64
+#else
+#define _CRTIMP_NOIA64 _CRTIMP
+#endif
+#endif /* _CRTIMP_NOIA64 */
+
+#ifndef _CRTIMP2
+#define _CRTIMP2 _CRTIMP
+#endif
+
+#ifndef _CRTIMP_ALTERNATIVE
+#define _CRTIMP_ALTERNATIVE _CRTIMP
+#define _CRT_ALTERNATIVE_IMPORTED
+#endif /* _CRTIMP_ALTERNATIVE */
+
+#ifndef _MRTIMP2
+#define _MRTIMP2  _CRTIMP
+#endif
+
+/* We have to define _DLL for gcc based mingw version. This define is set
+   by VC, when DLL-based runtime is used. So, gcc based runtime just have
+   DLL-base runtime, therefore this define has to be set.
+   As our headers are possibly used by windows compiler having a static
+   C-runtime, we make this definition gnu compiler specific here.  */
+#if !defined (_DLL) && defined (__GNUC__)
+#define _DLL
+#endif
+
+#ifndef _MT
+#define _MT
+#endif
+
+#ifndef _MCRTIMP
+#define _MCRTIMP _CRTIMP
+#endif
+
+#ifndef _CRTIMP_PURE
+#define _CRTIMP_PURE _CRTIMP
+#endif
+
+#ifndef _PGLOBAL
+#define _PGLOBAL
+#endif
+
+#ifndef _AGLOBAL
+#define _AGLOBAL
+#endif
+
+#define _SECURECRT_FILL_BUFFER_PATTERN 0xFD
+#define _CRT_DEPRECATE_TEXT(_Text) __declspec(deprecated)
+
+#ifndef _CRT_INSECURE_DEPRECATE_MEMORY
+#define _CRT_INSECURE_DEPRECATE_MEMORY(_Replacement)
+#endif
+
+#ifndef _CRT_INSECURE_DEPRECATE_GLOBALS
+#define _CRT_INSECURE_DEPRECATE_GLOBALS(_Replacement)
+#endif
+
+#ifndef _CRT_MANAGED_HEAP_DEPRECATE
+#define _CRT_MANAGED_HEAP_DEPRECATE
+#endif
+
+#ifndef _CRT_OBSOLETE
+#define _CRT_OBSOLETE(_NewItem)
+#endif
+
+#ifndef __WIDL__
+
+#if defined (_WIN32) && !defined (_WIN64) && !defined (__MINGW_USE_VC2005_COMPAT)
+#ifndef _USE_32BIT_TIME_T
+#define _USE_32BIT_TIME_T
+#endif
+#endif
+
+#ifndef _CONST_RETURN
+#define _CONST_RETURN
+#endif
+
+#ifndef UNALIGNED
+#if defined(_M_IA64) || defined(_M_AMD64)
+#define UNALIGNED __unaligned
+#else
+#define UNALIGNED
+#endif
+#endif /* UNALIGNED */
+
+#ifndef _CRT_ALIGN
+#ifdef  _MSC_VER
+#define _CRT_ALIGN(x) __declspec(align(x))
+#else /* __GNUC__ */
+#define _CRT_ALIGN(x) __attribute__ ((__aligned__ (x)))
+#endif
+#endif /* _CRT_ALIGN */
+
+#endif /* __WIDL__ */
+
+#ifndef __CRTDECL
+#define __CRTDECL __cdecl
+#endif
+
+#define _ARGMAX 100
+
+#ifndef _TRUNCATE
+#define _TRUNCATE ((size_t)-1)
+#endif
+
+#ifndef _CRT_UNUSED
+#define _CRT_UNUSED(x) (void)x
+#endif
+
+/* MSVC defines _NATIVE_NULLPTR_SUPPORTED when nullptr is supported. We emulate it here for GCC. */
+#if __MINGW_GNUC_PREREQ(4, 6)
+#if defined(__GNUC__) && (defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L)
+#define _NATIVE_NULLPTR_SUPPORTED
+#endif
+#endif
+
+/* We are activating __USE_MINGW_ANSI_STDIO for various define indicators.
+ * printf ll modifier (unsupported by msvcrt.dll) is required by C99 and C++11 standards. */
+#if (defined (_POSIX) || defined (_POSIX_SOURCE) || defined (_POSIX_C_SOURCE) \
+     || defined (_ISOC99_SOURCE) \
+     || (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L && __MSVCRT_VERSION__ < 0xE00) \
+     || (defined (__cplusplus) && __cplusplus >= 201103L && __MSVCRT_VERSION__ < 0xE00) \
+     || defined (_XOPEN_SOURCE) || defined (_XOPEN_SOURCE_EXTENDED) \
+     || defined (_GNU_SOURCE) \
+     || defined (_SVID_SOURCE)) \
+    && !defined(__USE_MINGW_ANSI_STDIO)
+/* Enable __USE_MINGW_ANSI_STDIO if user did _not_ specify it explicitly... */
+#  define __USE_MINGW_ANSI_STDIO			1
+#endif
+
+/* We are defining __USE_MINGW_ANSI_STDIO as 0 or 1 */
+#if !defined(__USE_MINGW_ANSI_STDIO)
+#define __USE_MINGW_ANSI_STDIO 0      /* was not defined so it should be 0 */
+#elif (__USE_MINGW_ANSI_STDIO + 0) != 0 || (1 - __USE_MINGW_ANSI_STDIO - 1) == 2
+#define __USE_MINGW_ANSI_STDIO 1      /* was defined as nonzero or empty so it should be 1 */
+#else
+#define __USE_MINGW_ANSI_STDIO 0      /* was defined as (int)zero and non-empty so it should be 0 */
+#endif
+
+/* _dowildcard is an int that controls the globbing of the command line.
+ * The MinGW32 (mingw.org) runtime calls it _CRT_glob, so we are adding
+ * a compatibility definition here:  you can use either of _CRT_glob or
+ * _dowildcard .
+ * If _dowildcard is non-zero, the command line will be globbed:  *.*
+ * will be expanded to be all files in the startup directory.
+ * In the mingw-w64 library a _dowildcard variable is defined as being
+ * 0, therefore command line globbing is DISABLED by default. To turn it
+ * on and to leave wildcard command line processing MS's globbing code,
+ * include a line in one of your source modules defining _dowildcard and
+ * setting it to -1, like so:
+ * int _dowildcard = -1;
+ */
+#undef  _CRT_glob
+#define _CRT_glob _dowildcard
+
+
+#if defined(_MSC_VER) && !defined(_MSC_EXTENSIONS)
+#define NONAMELESSUNION		1
+#endif
+#if defined(NONAMELESSSTRUCT) && \
+   !defined(NONAMELESSUNION)
+#define NONAMELESSUNION		1
+#endif
+#if defined(NONAMELESSUNION)  && \
+   !defined(NONAMELESSSTRUCT)
+#define NONAMELESSSTRUCT	1
+#endif
+
+#ifndef __ANONYMOUS_DEFINED
+#define __ANONYMOUS_DEFINED
+#define _ANONYMOUS_UNION  __MINGW_EXTENSION
+#define _ANONYMOUS_STRUCT __MINGW_EXTENSION
+#ifndef NONAMELESSUNION
+#define _UNION_NAME(x)
+#define _STRUCT_NAME(x)
+#else /* NONAMELESSUNION */
+#define _UNION_NAME(x)  x
+#define _STRUCT_NAME(x) x
+#endif
+#endif	/* __ANONYMOUS_DEFINED */
+
+#ifndef DUMMYUNIONNAME
+# ifdef NONAMELESSUNION
+#  define DUMMYUNIONNAME  u
+#  define DUMMYUNIONNAME1 u1	/* Wine uses this variant */
+#  define DUMMYUNIONNAME2 u2
+#  define DUMMYUNIONNAME3 u3
+#  define DUMMYUNIONNAME4 u4
+#  define DUMMYUNIONNAME5 u5
+#  define DUMMYUNIONNAME6 u6
+#  define DUMMYUNIONNAME7 u7
+#  define DUMMYUNIONNAME8 u8
+#  define DUMMYUNIONNAME9 u9
+# else /* NONAMELESSUNION */
+#  define DUMMYUNIONNAME
+#  define DUMMYUNIONNAME1	/* Wine uses this variant */
+#  define DUMMYUNIONNAME2
+#  define DUMMYUNIONNAME3
+#  define DUMMYUNIONNAME4
+#  define DUMMYUNIONNAME5
+#  define DUMMYUNIONNAME6
+#  define DUMMYUNIONNAME7
+#  define DUMMYUNIONNAME8
+#  define DUMMYUNIONNAME9
+# endif
+#endif	/* DUMMYUNIONNAME */
+
+#ifndef DUMMYSTRUCTNAME
+# ifdef NONAMELESSUNION
+#  define DUMMYSTRUCTNAME  s
+#  define DUMMYSTRUCTNAME1 s1	/* Wine uses this variant */
+#  define DUMMYSTRUCTNAME2 s2
+#  define DUMMYSTRUCTNAME3 s3
+#  define DUMMYSTRUCTNAME4 s4
+#  define DUMMYSTRUCTNAME5 s5
+# else
+#  define DUMMYSTRUCTNAME
+#  define DUMMYSTRUCTNAME1	/* Wine uses this variant */
+#  define DUMMYSTRUCTNAME2
+#  define DUMMYSTRUCTNAME3
+#  define DUMMYSTRUCTNAME4
+#  define DUMMYSTRUCTNAME5
+# endif
+#endif /* DUMMYSTRUCTNAME */
+
+
+/* Macros for __uuidof template-based emulation */
+#if defined(__cplusplus) && (USE___UUIDOF == 0)
+
+#if __cpp_constexpr >= 200704l && __cpp_inline_variables >= 201606L
+#define __CRT_UUID_DECL(type,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)    \
+    extern "C++" {                                               \
+    template<> struct __mingw_uuidof_s<type> {                   \
+        static constexpr IID __uuid_inst = {                     \
+            l,w1,w2, {b1,b2,b3,b4,b5,b6,b7,b8}                   \
+        };                                                       \
+    };                                                           \
+    template<> constexpr const GUID &__mingw_uuidof<type>() {    \
+        return __mingw_uuidof_s<type>::__uuid_inst;              \
+    }                                                            \
+    template<> constexpr const GUID &__mingw_uuidof<type*>() {   \
+        return  __mingw_uuidof_s<type>::__uuid_inst;             \
+    }                                                            \
+    }
+#else
+#define __CRT_UUID_DECL(type,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)           \
+    extern "C++" {                                                      \
+    template<> inline const GUID &__mingw_uuidof<type>() {              \
+        static const IID __uuid_inst = {l,w1,w2, {b1,b2,b3,b4,b5,b6,b7,b8}}; \
+        return __uuid_inst;                                             \
+    }                                                                   \
+    template<> inline const GUID &__mingw_uuidof<type*>() {             \
+        return __mingw_uuidof<type>();                                  \
+    }                                                                   \
+    }
+#endif
+
+#define __uuidof(type) __mingw_uuidof<__typeof(type)>()
+
+#else
+
+#define __CRT_UUID_DECL(type,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
+
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#ifdef __MINGW_INTRIN_INLINE
+#ifdef __has_builtin
+#define __MINGW_DEBUGBREAK_IMPL !__has_builtin(__debugbreak)
+#else
+#define __MINGW_DEBUGBREAK_IMPL 1
+#endif
+#if __MINGW_DEBUGBREAK_IMPL == 1
+void __cdecl __debugbreak(void);
+__MINGW_INTRIN_INLINE void __cdecl __debugbreak(void)
+{
+  __asm__ __volatile__("int {$}3":);
+}
+#endif
+#endif
+
+/* mingw-w64 specific functions: */
+const char *__mingw_get_crt_info (void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _INC__MINGW_H */
+
+#ifndef MINGW_SDK_INIT
+#define MINGW_SDK_INIT
+
+/* for backward compatibility */
+#ifndef MINGW_HAS_SECURE_API
+#define MINGW_HAS_SECURE_API 1
+#endif
+
+#define __STDC_SECURE_LIB__ 200411L
+#define __GOT_SECURE_LIB__ __STDC_SECURE_LIB__
+
+#ifndef __WIDL__
+#include "sdks/_mingw_ddk.h"
+#endif
+
+#endif /* MINGW_SDK_INIT */
diff --git a/src/_mingw_gcc1202.h b/src/_mingw_gcc1202.h
new file mode 100644
index 0000000..ca40495
--- /dev/null
+++ b/src/_mingw_gcc1202.h
@@ -0,0 +1,634 @@
+/* This is a copy of _mingw.h from MinGW headers (the toolchain installation,
+   should match the toolchain used. Modified/hacked to provide __uuidof()
+   operator - see HACK below.
+
+   There should be a cleaner solution, but this is what has been
+   done before.
+*/
+
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#ifndef _INC__MINGW_H
+#define _INC__MINGW_H
+
+#include "_mingw_mac.h"
+#include "_mingw_secapi.h"
+
+/* Include _cygwin.h if we're building a Cygwin application. */
+#ifdef __CYGWIN__
+#include "_cygwin.h"
+#endif
+
+/* Target specific macro replacement for type "long".  In the Windows API,
+   the type long is always 32 bit, even if the target is 64 bit (LLP64).
+   On 64 bit Cygwin, the type long is 64 bit (LP64).  So, to get the right
+   sized definitions and declarations, all usage of type long in the Windows
+   headers have to be replaced by the below defined macro __LONG32. */
+#ifndef __LP64__	/* 32 bit target, 64 bit Mingw target */
+#define __LONG32 long
+#else			/* 64 bit Cygwin target */
+#define __LONG32 int
+#endif
+
+/* C/C++ specific language defines.  */
+#ifdef _WIN64
+#ifdef __stdcall
+#undef __stdcall
+#endif
+#define __stdcall
+#endif
+
+#ifndef __GNUC__
+# ifndef __MINGW_IMPORT
+#  define __MINGW_IMPORT  __declspec(dllimport)
+# endif
+# ifndef _CRTIMP
+#  define _CRTIMP  __declspec(dllimport)
+# endif
+# define __DECLSPEC_SUPPORTED
+# define __attribute__(x) /* nothing */
+#else /* __GNUC__ */
+# ifdef __declspec
+#  ifndef __MINGW_IMPORT
+/* Note the extern. This is needed to work around GCC's
+limitations in handling dllimport attribute.  */
+#   define __MINGW_IMPORT  extern __attribute__ ((__dllimport__))
+#  endif
+#  ifndef _CRTIMP
+#    undef __USE_CRTIMP
+#    if !defined (_CRTBLD) && !defined (_SYSCRT)
+#      define __USE_CRTIMP 1
+#    endif
+#    ifdef __USE_CRTIMP
+#      define _CRTIMP  __attribute__ ((__dllimport__))
+#    else
+#      define _CRTIMP
+#    endif
+#  endif
+#  define __DECLSPEC_SUPPORTED
+# else /* __declspec */
+#  undef __DECLSPEC_SUPPORTED
+#  undef __MINGW_IMPORT
+#  ifndef _CRTIMP
+#   define _CRTIMP
+#  endif
+# endif /* __declspec */
+#endif /* __GNUC__ */
+
+#ifdef _MSC_VER
+#define USE___UUIDOF	0
+#else
+#define USE___UUIDOF	0
+#endif
+
+#if !defined(_MSC_VER) && !defined(_inline)
+#define _inline __inline
+#endif
+
+#ifdef __cplusplus
+# define __CRT_INLINE inline
+#elif defined(_MSC_VER)
+# define __CRT_INLINE __inline
+#else
+# if ((__MINGW_GNUC_PREREQ(4, 3) || defined(__clang__)) && __STDC_VERSION__ >= 199901L)
+#  define __CRT_INLINE extern inline __attribute__((__gnu_inline__))
+# else
+#  define __CRT_INLINE extern __inline__
+# endif
+#endif
+
+#if !defined(__MINGW_INTRIN_INLINE) && defined(__GNUC__)
+#define __MINGW_INTRIN_INLINE extern __inline__ __attribute__((__always_inline__,__gnu_inline__))
+#endif
+
+#ifndef __CYGWIN__
+#ifdef __NO_INLINE__
+#undef __CRT__NO_INLINE
+#define __CRT__NO_INLINE 1
+#endif
+#endif
+
+#ifdef __cplusplus
+# define __UNUSED_PARAM(x)
+#else
+# ifdef __GNUC__
+#  define __UNUSED_PARAM(x) x __attribute__ ((__unused__))
+# else
+#  define __UNUSED_PARAM(x) x
+# endif
+#endif
+
+#ifndef __GNUC__
+# ifdef _MSC_VER
+#  define __restrict__  __restrict
+# else
+#  define __restrict__	/* nothing */
+# endif
+#endif /* !__GNUC__ */
+
+#if __MINGW_GNUC_PREREQ (3,1) && !defined __GNUG__
+# define __restrict_arr __restrict
+#elif defined(_MSC_VER)
+# define __restrict_arr __restrict
+#else
+# ifdef __GNUC__
+#  define __restrict_arr        /* Not supported in old GCC.  */
+# else
+#  if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
+#   define __restrict_arr       restrict
+#  else
+#   define __restrict_arr       /* Not supported.  */
+#  endif
+# endif
+#endif
+
+#ifdef __GNUC__
+#define __MINGW_ATTRIB_NORETURN __attribute__ ((__noreturn__))
+#define __MINGW_ATTRIB_CONST __attribute__ ((__const__))
+#elif __MINGW_MSC_PREREQ(12, 0)
+#define __MINGW_ATTRIB_NORETURN __declspec(noreturn)
+#define __MINGW_ATTRIB_CONST
+#else
+#define __MINGW_ATTRIB_NORETURN
+#define __MINGW_ATTRIB_CONST
+#endif
+
+#if __MINGW_GNUC_PREREQ (3, 0)
+#define __MINGW_ATTRIB_MALLOC __attribute__ ((__malloc__))
+#define __MINGW_ATTRIB_PURE __attribute__ ((__pure__))
+#elif __MINGW_MSC_PREREQ(14, 0)
+#define __MINGW_ATTRIB_MALLOC __declspec(noalias) __declspec(restrict)
+#define __MINGW_ATTRIB_PURE
+#else
+#define __MINGW_ATTRIB_MALLOC
+#define __MINGW_ATTRIB_PURE
+#endif
+
+/* Attribute `nonnull' was valid as of gcc 3.3.  We don't use GCC's
+   variadiac macro facility, because variadic macros cause syntax
+   errors with  --traditional-cpp.  */
+#if  __MINGW_GNUC_PREREQ (3, 3)
+#define __MINGW_ATTRIB_NONNULL(arg) __attribute__ ((__nonnull__ (arg)))
+#else
+#define __MINGW_ATTRIB_NONNULL(arg)
+#endif /* GNUC >= 3.3 */
+
+#ifdef __GNUC__
+#define __MINGW_ATTRIB_UNUSED __attribute__ ((__unused__))
+#else
+#define __MINGW_ATTRIB_UNUSED
+#endif /* ATTRIBUTE_UNUSED */
+
+#if  __MINGW_GNUC_PREREQ (3, 1)
+#define __MINGW_ATTRIB_USED __attribute__ ((__used__))
+#define __MINGW_ATTRIB_DEPRECATED __attribute__ ((__deprecated__))
+#if __MINGW_GNUC_PREREQ (4, 5) || defined (__clang__)
+#define __MINGW_ATTRIB_DEPRECATED_MSG(x) __attribute__ ((__deprecated__(x)))
+#endif
+#elif __MINGW_MSC_PREREQ(12, 0)
+#define __MINGW_ATTRIB_USED
+#define __MINGW_ATTRIB_DEPRECATED __declspec(deprecated)
+#else
+#define __MINGW_ATTRIB_USED __MINGW_ATTRIB_UNUSED
+#define __MINGW_ATTRIB_DEPRECATED
+#endif /* GNUC >= 3.1 */
+
+#ifndef __MINGW_ATTRIB_DEPRECATED_MSG
+#define __MINGW_ATTRIB_DEPRECATED_MSG(x) __MINGW_ATTRIB_DEPRECATED
+#endif
+
+#if  __MINGW_GNUC_PREREQ (3, 3)
+#define __MINGW_NOTHROW __attribute__ ((__nothrow__))
+#elif __MINGW_MSC_PREREQ(12, 0) && defined (__cplusplus)
+#define __MINGW_NOTHROW __declspec(nothrow)
+#else
+#define __MINGW_NOTHROW
+#endif
+
+#if __MINGW_GNUC_PREREQ (4, 4)
+#define __MINGW_ATTRIB_NO_OPTIMIZE __attribute__((__optimize__ ("0")))
+#else
+#define __MINGW_ATTRIB_NO_OPTIMIZE
+#endif
+
+#if __MINGW_GNUC_PREREQ (4, 4)
+#define __MINGW_PRAGMA_PARAM(x) _Pragma (#x)
+#elif __MINGW_MSC_PREREQ (13, 1)
+#define __MINGW_PRAGMA_PARAM(x) __pragma (x)
+#else
+#define __MINGW_PRAGMA_PARAM(x)
+#endif
+
+#define __MINGW_BROKEN_INTERFACE(x) \
+  __MINGW_PRAGMA_PARAM(message ("Interface " _CRT_STRINGIZE(x) \
+  " has unverified layout."))
+
+#ifndef __MSVCRT_VERSION__
+/*  High byte is the major version, low byte is the minor. */
+# if defined(__CRTDLL__)
+#  define __MSVCRT_VERSION__ 0x00
+# elif defined(_UCRT)
+#  define __MSVCRT_VERSION__ 0xE00
+# else
+#  define __MSVCRT_VERSION__ 0xE00
+# endif
+#endif
+
+#if !defined(_UCRT) && ((__MSVCRT_VERSION__ >= 0x1400) || (__MSVCRT_VERSION__ >= 0xE00 && __MSVCRT_VERSION__ < 0x1000))
+/* Allow both 0x1400 and 0xE00 to identify UCRT */
+#define _UCRT
+#endif
+
+#ifndef _WIN32_WINNT
+#define _WIN32_WINNT 0xa00
+#endif
+
+#ifndef _INT128_DEFINED
+#define _INT128_DEFINED
+#ifdef __GNUC__
+#define __int8 char
+#define __int16 short
+#define __int32 int
+#define __int64 long long
+#ifdef _WIN64
+#if (__clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 1)) && \
+    !defined(__SIZEOF_INT128__) /* clang >= 3.1 has __int128 but no size macro */
+#define __SIZEOF_INT128__ 16
+#endif
+#ifndef __SIZEOF_INT128__
+typedef int __int128 __attribute__ ((__mode__ (TI)));
+#endif
+#endif
+#endif /* __GNUC__ */
+#endif /* _INT128_DEFINED */
+
+#ifdef __GNUC__
+#define __ptr32
+#define __ptr64
+#ifndef __unaligned
+#define __unaligned
+#endif
+#ifndef __w64
+#define __w64
+#endif
+#ifdef __cplusplus
+#define __forceinline inline __attribute__((__always_inline__))
+#else
+#define __forceinline extern __inline__ __attribute__((__always_inline__,__gnu_inline__))
+#endif /* __cplusplus */
+#endif /* __GNUC__ */
+
+#if !defined(_WIN32) && !defined(__CYGWIN__)
+#error Only Win32 target is supported!
+#endif
+
+#ifndef __nothrow
+#ifdef __cplusplus
+#define __nothrow __MINGW_NOTHROW
+#else
+#define __nothrow
+#endif
+#endif /* __nothrow */
+
+#include <vadefs.h>	/* other headers depend on this include */
+
+#ifndef _CRT_STRINGIZE
+#define __CRT_STRINGIZE(_Value) #_Value
+#define _CRT_STRINGIZE(_Value) __CRT_STRINGIZE(_Value)
+#endif /* _CRT_STRINGIZE */
+
+#ifndef _CRT_WIDE
+#define __CRT_WIDE(_String) L ## _String
+#define _CRT_WIDE(_String) __CRT_WIDE(_String)
+#endif /* _CRT_WIDE */
+
+#ifndef _W64
+#define _W64
+#endif
+
+#ifndef _CRTIMP_NOIA64
+#ifdef __ia64__
+#define _CRTIMP_NOIA64
+#else
+#define _CRTIMP_NOIA64 _CRTIMP
+#endif
+#endif /* _CRTIMP_NOIA64 */
+
+#ifndef _CRTIMP2
+#define _CRTIMP2 _CRTIMP
+#endif
+
+#ifndef _CRTIMP_ALTERNATIVE
+#define _CRTIMP_ALTERNATIVE _CRTIMP
+#define _CRT_ALTERNATIVE_IMPORTED
+#endif /* _CRTIMP_ALTERNATIVE */
+
+#ifndef _MRTIMP2
+#define _MRTIMP2  _CRTIMP
+#endif
+
+/* We have to define _DLL for gcc based mingw version. This define is set
+   by VC, when DLL-based runtime is used. So, gcc based runtime just have
+   DLL-base runtime, therefore this define has to be set.
+   As our headers are possibly used by windows compiler having a static
+   C-runtime, we make this definition gnu compiler specific here.  */
+#if !defined (_DLL) && defined (__GNUC__)
+#define _DLL
+#endif
+
+#ifndef _MT
+#define _MT
+#endif
+
+#ifndef _MCRTIMP
+#define _MCRTIMP _CRTIMP
+#endif
+
+#ifndef _CRTIMP_PURE
+#define _CRTIMP_PURE _CRTIMP
+#endif
+
+#ifndef _PGLOBAL
+#define _PGLOBAL
+#endif
+
+#ifndef _AGLOBAL
+#define _AGLOBAL
+#endif
+
+#define _SECURECRT_FILL_BUFFER_PATTERN 0xFD
+#define _CRT_DEPRECATE_TEXT(_Text) __declspec(deprecated)
+
+#ifndef _CRT_INSECURE_DEPRECATE_MEMORY
+#define _CRT_INSECURE_DEPRECATE_MEMORY(_Replacement)
+#endif
+
+#ifndef _CRT_INSECURE_DEPRECATE_GLOBALS
+#define _CRT_INSECURE_DEPRECATE_GLOBALS(_Replacement)
+#endif
+
+#ifndef _CRT_MANAGED_HEAP_DEPRECATE
+#define _CRT_MANAGED_HEAP_DEPRECATE
+#endif
+
+#ifndef _CRT_OBSOLETE
+#define _CRT_OBSOLETE(_NewItem)
+#endif
+
+#ifndef __WIDL__
+
+#if defined (_WIN32) && !defined (_WIN64) && !defined (__MINGW_USE_VC2005_COMPAT) && !defined (_UCRT)
+#ifndef _USE_32BIT_TIME_T
+#define _USE_32BIT_TIME_T
+#endif
+#endif
+
+#ifndef _CONST_RETURN
+#define _CONST_RETURN
+#endif
+
+#ifndef UNALIGNED
+#if defined(__ia64__) || defined(__x86_64__)
+#define UNALIGNED __unaligned
+#else
+#define UNALIGNED
+#endif
+#endif /* UNALIGNED */
+
+#ifndef _CRT_ALIGN
+#ifdef  _MSC_VER
+#define _CRT_ALIGN(x) __declspec(align(x))
+#else /* __GNUC__ */
+#define _CRT_ALIGN(x) __attribute__ ((__aligned__ (x)))
+#endif
+#endif /* _CRT_ALIGN */
+
+#endif /* __WIDL__ */
+
+#ifndef __CRTDECL
+#define __CRTDECL __cdecl
+#endif
+
+#define _ARGMAX 100
+
+#ifndef _TRUNCATE
+#define _TRUNCATE ((size_t)-1)
+#endif
+
+#ifndef _CRT_UNUSED
+#define _CRT_UNUSED(x) (void)x
+#endif
+
+/* MSVC defines _NATIVE_NULLPTR_SUPPORTED when nullptr is supported. We emulate it here for GCC. */
+#if __MINGW_GNUC_PREREQ(4, 6)
+#if defined(__GNUC__) && (defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L)
+#define _NATIVE_NULLPTR_SUPPORTED
+#endif
+#endif
+
+/* We are activating __USE_MINGW_ANSI_STDIO for various define indicators.
+ * printf ll modifier (unsupported by msvcrt.dll) is required by C99 and C++11 standards. */
+#if (defined (_POSIX) || defined (_POSIX_SOURCE) || defined (_POSIX_C_SOURCE) \
+     || defined (_ISOC99_SOURCE) \
+     || (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L && __MSVCRT_VERSION__ < 0xE00) \
+     || (defined (__cplusplus) && __cplusplus >= 201103L && __MSVCRT_VERSION__ < 0xE00) \
+     || defined (_XOPEN_SOURCE) || defined (_XOPEN_SOURCE_EXTENDED) \
+     || defined (_GNU_SOURCE) \
+     || defined (_SVID_SOURCE)) \
+    && !defined(__USE_MINGW_ANSI_STDIO)
+/* Enable __USE_MINGW_ANSI_STDIO if user did _not_ specify it explicitly... */
+#  define __USE_MINGW_ANSI_STDIO			1
+#endif
+
+/* We are defining __USE_MINGW_ANSI_STDIO as 0 or 1 */
+#if !defined(__USE_MINGW_ANSI_STDIO)
+#define __USE_MINGW_ANSI_STDIO 0      /* was not defined so it should be 0 */
+#elif (__USE_MINGW_ANSI_STDIO + 0) != 0 || (1 - __USE_MINGW_ANSI_STDIO - 1) == 2
+#define __USE_MINGW_ANSI_STDIO 1      /* was defined as nonzero or empty so it should be 1 */
+#else
+#define __USE_MINGW_ANSI_STDIO 0      /* was defined as (int)zero and non-empty so it should be 0 */
+#endif
+
+/* _dowildcard is an int that controls the globbing of the command line.
+ * The MinGW32 (mingw.org) runtime calls it _CRT_glob, so we are adding
+ * a compatibility definition here:  you can use either of _CRT_glob or
+ * _dowildcard .
+ * If _dowildcard is non-zero, the command line will be globbed:  *.*
+ * will be expanded to be all files in the startup directory.
+ * In the mingw-w64 library a _dowildcard variable is defined as being
+ * 0, therefore command line globbing is DISABLED by default. To turn it
+ * on and to leave wildcard command line processing MS's globbing code,
+ * include a line in one of your source modules defining _dowildcard and
+ * setting it to -1, like so:
+ * int _dowildcard = -1;
+ */
+#undef  _CRT_glob
+#define _CRT_glob _dowildcard
+
+
+#if defined(_MSC_VER) && !defined(_MSC_EXTENSIONS)
+#define NONAMELESSUNION		1
+#endif
+#if defined(NONAMELESSSTRUCT) && \
+   !defined(NONAMELESSUNION)
+#define NONAMELESSUNION		1
+#endif
+#if defined(NONAMELESSUNION)  && \
+   !defined(NONAMELESSSTRUCT)
+#define NONAMELESSSTRUCT	1
+#endif
+
+#ifndef __ANONYMOUS_DEFINED
+#define __ANONYMOUS_DEFINED
+#define _ANONYMOUS_UNION  __MINGW_EXTENSION
+#define _ANONYMOUS_STRUCT __MINGW_EXTENSION
+#ifndef NONAMELESSUNION
+#define _UNION_NAME(x)
+#define _STRUCT_NAME(x)
+#else /* NONAMELESSUNION */
+#define _UNION_NAME(x)  x
+#define _STRUCT_NAME(x) x
+#endif
+#endif	/* __ANONYMOUS_DEFINED */
+
+#ifndef DUMMYUNIONNAME
+# ifdef NONAMELESSUNION
+#  define DUMMYUNIONNAME  u
+#  define DUMMYUNIONNAME1 u1	/* Wine uses this variant */
+#  define DUMMYUNIONNAME2 u2
+#  define DUMMYUNIONNAME3 u3
+#  define DUMMYUNIONNAME4 u4
+#  define DUMMYUNIONNAME5 u5
+#  define DUMMYUNIONNAME6 u6
+#  define DUMMYUNIONNAME7 u7
+#  define DUMMYUNIONNAME8 u8
+#  define DUMMYUNIONNAME9 u9
+# else /* NONAMELESSUNION */
+#  define DUMMYUNIONNAME
+#  define DUMMYUNIONNAME1	/* Wine uses this variant */
+#  define DUMMYUNIONNAME2
+#  define DUMMYUNIONNAME3
+#  define DUMMYUNIONNAME4
+#  define DUMMYUNIONNAME5
+#  define DUMMYUNIONNAME6
+#  define DUMMYUNIONNAME7
+#  define DUMMYUNIONNAME8
+#  define DUMMYUNIONNAME9
+# endif
+#endif	/* DUMMYUNIONNAME */
+
+#ifndef DUMMYSTRUCTNAME
+# ifdef NONAMELESSUNION
+#  define DUMMYSTRUCTNAME  s
+#  define DUMMYSTRUCTNAME1 s1	/* Wine uses this variant */
+#  define DUMMYSTRUCTNAME2 s2
+#  define DUMMYSTRUCTNAME3 s3
+#  define DUMMYSTRUCTNAME4 s4
+#  define DUMMYSTRUCTNAME5 s5
+# else
+#  define DUMMYSTRUCTNAME
+#  define DUMMYSTRUCTNAME1	/* Wine uses this variant */
+#  define DUMMYSTRUCTNAME2
+#  define DUMMYSTRUCTNAME3
+#  define DUMMYSTRUCTNAME4
+#  define DUMMYSTRUCTNAME5
+# endif
+#endif /* DUMMYSTRUCTNAME */
+
+
+/* Macros for __uuidof template-based emulation */
+#if defined(__cplusplus) && (USE___UUIDOF == 0)
+
+#if __cpp_constexpr >= 200704l && __cpp_inline_variables >= 201606L
+#define __CRT_UUID_DECL(type,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)    \
+    extern "C++" {                                               \
+    template<> struct __mingw_uuidof_s<type> {                   \
+        static constexpr IID __uuid_inst = {                     \
+            l,w1,w2, {b1,b2,b3,b4,b5,b6,b7,b8}                   \
+        };                                                       \
+    };                                                           \
+    template<> constexpr const GUID &__mingw_uuidof<type>() {    \
+        return __mingw_uuidof_s<type>::__uuid_inst;              \
+    }                                                            \
+    template<> constexpr const GUID &__mingw_uuidof<type*>() {   \
+        return  __mingw_uuidof_s<type>::__uuid_inst;             \
+    }                                                            \
+    }
+#else
+#define __CRT_UUID_DECL(type,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)           \
+    extern "C++" {                                                      \
+    template<> inline const GUID &__mingw_uuidof<type>() {              \
+        static const IID __uuid_inst = {l,w1,w2, {b1,b2,b3,b4,b5,b6,b7,b8}}; \
+        return __uuid_inst;                                             \
+    }                                                                   \
+    template<> inline const GUID &__mingw_uuidof<type*>() {             \
+        return __mingw_uuidof<type>();                                  \
+    }                                                                   \
+    }
+#endif
+
+#define __uuidof(type) __mingw_uuidof<__typeof(type)>()
+
+#else
+
+#define __CRT_UUID_DECL(type,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
+
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#ifdef __MINGW_INTRIN_INLINE
+#ifdef __has_builtin
+#define __MINGW_DEBUGBREAK_IMPL !__has_builtin(__debugbreak)
+#else
+#define __MINGW_DEBUGBREAK_IMPL 1
+#endif
+#if __MINGW_DEBUGBREAK_IMPL == 1
+void __cdecl __debugbreak(void);
+__MINGW_INTRIN_INLINE void __cdecl __debugbreak(void)
+{
+#if defined(__i386__) || defined(__x86_64__)
+  __asm__ __volatile__("int {$}3":);
+#elif defined(__arm__)
+  __asm__ __volatile__("udf #0xfe");
+#elif defined(__aarch64__)
+  __asm__ __volatile__("brk #0xf000");
+#else
+  __asm__ __volatile__("unimplemented");
+#endif
+}
+#endif
+#endif
+
+/* mingw-w64 specific functions: */
+const char *__mingw_get_crt_info (void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _INC__MINGW_H */
+
+#ifndef MINGW_SDK_INIT
+#define MINGW_SDK_INIT
+
+/* for backward compatibility */
+#ifndef MINGW_HAS_SECURE_API
+#define MINGW_HAS_SECURE_API 1
+#endif
+
+#define __STDC_SECURE_LIB__ 200411L
+#define __GOT_SECURE_LIB__ __STDC_SECURE_LIB__
+
+#ifndef __WIDL__
+#include "sdks/_mingw_ddk.h"
+#endif
+
+#endif /* MINGW_SDK_INIT */

More details

Full run details

Historical runs