1WCSLIB version 7.7 (2021/07/12)
2-------------------------------
3
4* C library
5
6  - In disfree() and disset(), removed potential for double invokation
7    of free() on allocated memory.  Reported by Cyril Richard.
8
9  - In wcsutil_fptr2str(), fixed a bug reported by Ralf Palsa (with fix)
10    that caused it to be overly enthusiastic in stripping leading zeroes
11    off addresses of function pointers.
12
13  - In wcspcx(), replaced variable length arrays will allocated memory
14    (portability issue).  Reported by Mihai Cara with patch.
15
16  - Fixed buglets in wcsbth() and linsize() uncovered by gcc 11.1.0.
17
18  - Quelled inconsequential compiler warnings from gcc 11.1.0 concerning
19    wcsmix() (function prototype in wcs.h), wcstrim(), wcseulexe(),
20    wcsulex(), and wcsutrne().
21
22  - Defined _POSIX_C_SOURCE appropriately in tprj2.c and tspc.c to get
23    the function prototype etc. for nanosleep() from time.h.
24
25* Fortran wrappers
26
27  - Quelled numerous inconsequential compiler warnings from gfortran
28    11.1.0.
29
30  - Fixed minor bugs uncovered by gfortran 11.1.0 in test programs tdis2
31    and ttab3.
32
33* Utilities
34
35  - Moved 'tofits' from ./C/test/ into the utilities directory as it's
36    generally useful, and added usage (converted to man page).
37
38    Also made it a bit smarter in dealing with ISO/IEC 8859 and UTF-8
39    encoded byte streams, in particular translating non-breaking spaces
40    into ordinary spaces.
41
42* Installation
43
44  - Two patches for configure.ac provided by Mos� Giordano:
45    1. makes it possible to build the Windows library using the MinGW
46       cross-compiler,
47    2. makes the soname of the MacOSX library consistent with other
48       Unix systems.
49
50
51WCSLIB version 7.6 (2021/04/13)
52-------------------------------
53
54* C library
55
56  - Bug fix in tabs2x() triggered for 1-dimensional coordinate lookup
57    tables on axes > 1.  Reported by Mihai Cara.
58
59  - In datfix(), don't return status 0 if no change was made (fix for
60    change made at release 7.4).  Reported by Derek Homeier.
61
62  - New function wcspcx() in the wcsfix suite regularizes the linear
63    transformation component of a coordinate description to make it more
64    human-readable.  It decomposes CDi_ja into PCi_ja and CDELTia in
65    such a way that CDELTia forms meaningful scaling parameters, often
66    leaving an orthogonal or near-orthogonal matrix.  Optionally, it can
67    then permute rows of this matrix to unscramble axis permutations.
68
69    A test header may be generated from wcspcx.keyrec for input to
70    wcsware (not exercised as part of the standard test suite).
71
72  - New function wcstrim() frees memory allocated by wcsinit() for
73    arrays in a wcsprm struct that remain unused after the struct has
74    been set up.
75
76  - New functions wcssize(), auxsize(), tabsize(), linsize(), dissize(),
77    celsize(), prjsize(), spcsize(), and wcserr_size() compute the total
78    size of the relevant structs, including allocated memory.
79
80  - In the C test suite, inserted a brief pause in tprj2 and tspc, which
81    otherwise have now become a blur.
82
83* Fortran wrappers
84
85  - Added wrappers for wcspcx(), wcstrim(), wcssize(), auxsize(),
86    tabsize(), linsize(), dissize(), celsize(), prjsize(), spcsize(),
87    and wcserr_size().
88
89* Utilities
90
91  - Added -c, -cp, -C, and -Cp options to wcsware to apply wcspcx()
92    in a variety of ways, -m to apply wcstrim(), and -z to report the
93    total size of the wcsprm struct with a breakdown of the sizes of
94    its constituent structs.
95
96  - Fixed compiler warnings for sundazel (portability issue).
97
98* Installation
99
100  - Upped the required version of Flex to 2.6.0 (was 2.5.9).  Problems
101    with Flex 2.5.39 reported by Derek Homeier.
102
103    Also added '--disable-flex' as a new configure option to force the
104    use of the pre-generated Flex sources.
105
106
107WCSLIB version 7.5 (2021/03/20)
108-------------------------------
109
110The C code in WCSLIB is moving piecemeal to the C99 standard.  In fact,
111various indispensible C99 constructs have been used in WCSLIB for many
112years: the long long int data type (in fitshdr() only); stdint.h,
113inttypes.h, and the use of PRI formatting control (in wcsprintf(), which
114is widely used by the library); and the C99-extended library function
115vsnprintf() (used by wcserr for a decade).  Flex-generated C code also
116uses C99 extensions, though with workarounds if they are not available.
117
118Except in the header prologues, which are formatted in a special way for
119generating the user manual, comments were changed en masse to C99 style
120in release 7.3.1, and variable declarations in code that I have occasion
121to modify will transition to the more general placement allowed by C99.
122However, I have no plans to use any of the more esoteric features of
123C99.
124
125* C library
126
127  - New function, wcsccs(), changes the celestial coordinate system of a
128    wcsprm struct, for example, from equatorial to galactic coordinates.
129    The parameters that define the spherical coordinate transformation
130    must be provided.  This allows WCSLIB to provide this functionality
131    without needing to know anything about specific celestial coordinate
132    systems, and has the advantage of making the routine completely
133    general.  Requested by Mohammad Akhlaghi.
134
135    Modified test program twcsfix also to test wcsccs().
136
137  - Fixed a problem common to all of the Flex code (fitshdr, wcsbth,
138    wcspih, wcsulex, and wcsutrn) that made it thread-unsafe.  Reported
139    by Cyril Richard.
140
141    Added a new test program, tpthreads, to test thread safety.  It is
142    only used for code development, and not exercised as part of the
143    standard test suite.
144
145  - In fitshdr(), fixed a problem that potentially could arise on
146    systems where sizeof(long long int) is greater than 8 (64 bits).
147
148* Fortran wrappers
149
150  - Match changes to the C library: added a wrapper for wcsccs(), and
151    modified twcsfix.f.
152
153  - Because null addresses cannot be passed to functions in Fortran,
154    wcssub_() now interprets *nsub == -1 && *axes == -1 as a signal to
155    do a deep copy of one wcsprm struct to another.
156
157* Utilities
158
159  - New utility, sundazel, computes the local time of the Sun's passage
160    through the specified apparent longitude or latitude in a user-
161    defined coordinate system.  It can also perform several other Solar
162    related calculations.  (It is unrelated to FITS WCS, and does not
163    use WCSLIB.)
164
165* Installation
166
167  - Added an 'uninstall' rule to the makefiles.  Suggested by
168    Cyril Richard.
169
170
171WCSLIB version 7.4 (2021/01/31)
172-------------------------------
173
174* C library
175
176  - In wcshdo(), fixed a bug introduced in release 5.9 that potentially
177    caused loss of numerical precision in the sprintf() formatting of
178    floating point keyvalues.  This was triggered when a large range of
179    CRPIXja, PCi_ja, or CDELTia values (as three separate groups) were
180    formatted using an 'f' format descriptor, the range not being so
181    large that it would have forced wcshdo() to revert to 'E' format.
182    Reported by Mohammad Akhlaghi.
183
184    Also in wcshdo(), fixed a bug introduced in release 7.1 that caused
185    the coefficients of the TPD distortion function not to be written to
186    the header.  TPD and Polynomial distortion function headers will now
187    always include the DPja.DOCORR keyword.  Reported by Derek Homeier
188    with patch.
189
190  - In wcsset(), fixed a segv generated in attempting to report a non-
191    standard units string with wcserr message reporting disabled.
192    Reported by Mohammad Akhlaghi.
193
194    In wcsutrne(), allow 'Angstroms' and 'angstroms' as additional
195    synonyms for 'Angstrom'.
196
197  - In datfix(), ensure that 0 is returned if an informational message
198    is set in wcsprm::err.  Consequent on feedback independently from
199    Mihai Cara and Bruce Merry.
200
201    Clarified that informational messages may be set in wcsprm::err
202    for returns of 0 from datfix(), obsfix(), unitfix(), and spcfix().
203
204* User manual
205
206  - Added cautions about translating CDi_ja to PCi_ja plus CDELTia for
207    those historical distortion functions (TPV, TNX, ZPX) that expect to
208    operate on intermediate world coordinates, rather than intermediate
209    pixel coordinates.  Consequent on feedback from Mohammad Akhlaghi.
210
211  - Documentation generation moved to doxygen 1.9.1 (was 1.8.19).
212
213
214WCSLIB version 7.3.1 (2020/08/17)
215---------------------------------
216
217There are no functional changes in this release.
218
219* C library
220* Fortran wrappers
221* PGSBOX
222* Utilities
223
224  - Changed all C code, including within the flex sources, Fortran and
225    PGSBOX wrappers, and test suite, to use C99 style commenting (i.e.
226    using //), excluding the header prologues used to generate the user
227    manual.
228
229* User manual
230
231  - Documentation generation moved to doxygen 1.8.19 (was 1.8.18).
232
233
234WCSLIB version 7.3 (2020/06/03)
235-------------------------------
236
237* C library
238
239  - wcshdo() was writing MJD-OBS twice to the header, and MJD-BEG not
240    at all.
241
242  - In wcshdo(), if MJDREF assumes its default value, just write
243    MJDREF = 0 (not MJDREFI & MJDREFF), and omit writing DATEREF,
244    which, with a value of '1858-11-17', looks strange and is
245    potentially confusing.  Reported by Thomas Robitaille.
246
247    If the fractional part of MJDREF is zero, then just write the
248    integer part as MJDREF (i.e. not as MJDREFI & MJDREFF).
249
250  - Bug fix in wcsfix() - it was writing error messages that referred
251    to DATE-REF and MJD-REF rather then DATEREF and MJDREF.  Reported
252    by Mihai Cara.
253
254  - Under control of a new flag, WCSHDR_DATEREF, added the option to
255    wcspih() and wcsbth() to accept DATE-REF, MJD-REF, MJD-REFI,
256    MJD-REFF, JDREF, JD-REFI, and JD-REFF as synonyms for the standard
257    keywords, DATEREF, MJDREF, MJDREFI, MJDREFF, JDREF, JDREFI, and
258    JDREFF.  The latter buck the pattern set by the other date keywords
259    ({DATE,MJD}-{OBS,BEG,AVG,END}), thereby increasing the potential
260    for confusion and error.
261
262* Fortran wrappers
263
264  - As compilers are becoming much stricter (gfortran 10), modified all
265    Fortran test programs to use the type-specific equivalents of the
266    various *PUT and *GET routines.  Reported by Ole Streicher.
267
268  - For the fitshdr wrappers, added type-specific equivalents of
269    KEYGET: KEYGTI, KEYGTD, and KEYGTC.
270
271* PGSBOX
272
273  - Modified pgtest to use the type-specific equivalents of WCSPUT.
274
275* User manual
276
277  - In the section "WCSLIB Fortran wrappers", promoted use of the type-
278    specific equivalents of the various *PUT and *GET routines.
279
280  - In the section "FITS-WCS and related software", added ASCL and ADS
281    codes, where they exist, for all software packages mentioned.
282
283  - Documentation generation moved to doxygen 1.8.18 (was 1.8.17).
284
285
286WCSLIB version 7.2 (2020/03/09)
287-------------------------------
288
289* C library
290
291  - In wcssub(), fixed a bug relating to handling coordinate lookup
292    tables.  Reported by Mihai Cara with fix.
293
294    Also increased the number of coordinate axes handled from 10 to 32.
295
296* Installation
297
298  - New configure option, --disable-shared, defeats generation of the
299    sharable library.
300
301
302WCSLIB version 7.1 (2020/01/01)
303-------------------------------
304
305Changes in the contents of the wcsprm struct necessitated incrementing
306the major version number from 6 to 7 (i.e. the ABI changed).
307
308* C library
309
310  - In wcsset(), set wcsprm::mjdref[] to zero if neither it nor
311    wcsprm::dateref are defined, as per the standard.  Reported by
312    Thomas Robitaille.
313
314    wcsset() now also checks that the number of coordinate axes does not
315    exceed 32.
316
317  - In tabs2x(), fixed an out-of-bounds array access produced by invalid
318    world coordinates.  Reported by Mihai Cara and Michael Seifert.
319
320    In tab.c, declare static three helper functions, tabedge(),
321    tabrow(), and tabvox(), used by tabs2x().  Increased the number of
322    coordinate axes handled by tabvox() from 16 to 32.
323
324  - Extended datfix() to handle MJDREF/DATEREF, overlooked in the
325    changes in release 6.1.  Also fixed the handling of MJD < 0.
326
327  - Support Solar keywords RSUN_REF, DSUN_OBS, CRLN_OBS, CRLT_OBS,
328    HGLN_OBS, and HGLT_OBS by accomodating them within an auxiliary
329    struct, auxprm, within the wcsprm struct.  Now filled by the header
330    parsers, wcspih() and wcsbth() and handled routinely by wcsinit(),
331    wcssub(), wcscompare(), wcsfree(), wcsprt(), wcsset(), and wcshdo().
332    Requested by Stuart Mumford (SunPy) with input from Bill Thompson.
333
334  - Bug fix in wcsprintf_set() for resetting the output disposition.
335    Reported by Mihai Cara with patch.
336
337  - In dis.{h,c}, the DOCORR record is now handled as a first-class
338    value via disprm::docorr.  This required changing the struct.
339
340  - In cel.c, spc.c, wcserr.c, wcsfix.c, wcshdr.c, and wcsutil.c,
341    quelled compiler warnings from gcc 9.2.0 generated by
342    -Wmaybe-uninitialized and -Wstringop-truncation (via -Wall).
343
344    Similarly for various programs in the test suite.
345
346  - In various functions, quelled warnings from the Microsoft Visual C++
347    compiler, mostly relating to pointer arithmetic.  Reported by
348    Michael Seifert.
349
350* Fortran wrappers
351
352  - Handled compiler warnings from gcc 9.2.0 generated by
353    -Wstringop-truncation (via -Wall).
354
355  - Minor enhancements to character argument handling, including, in
356    prjget_(), blank-filling the returned strings matching PRJ_CODE and
357    PRJ_NAME, and likewise for SPC_TYPE and SPC_CODE in spcget_().
358
359* Utilities
360
361  - In wcsgrid, handled compiler warnings from gcc 9.2.0 generated by
362    -Wstringop-truncation (via -Wall).
363
364* User manual
365
366  - In the section on "FITS-WCS and related software", added mention of
367    the R wrappers (Rwcs).  Suggested by Aaron Robotham.
368
369  - Added a new section detailing the limit on the number of image axes
370    that WCSLIB can handle (currently 32), and how this could be
371    increased if needed.  Prompted by Thomas Robitaille.
372
373  - Augmented the section on the Fortran wrappers, particularly with
374    respect to character string handling in argument lists.
375
376  - Documentation generation moved to doxygen 1.8.17 (was 1.8.16).
377
378
379WCSLIB version 6.4 (2019/08/15)
380-------------------------------
381
382* Installation
383
384  - The rule change to the Fortran makefile in v6.3 to add getwcstab_f.o
385    to the sharable library causes it to depend on CFITSIO to resolve
386    fits_get_wcstab().  Hence backed out of that change.
387
388* User manual
389
390  - Documentation generation moved to doxygen 1.8.16 (was 1.8.14).
391
392
393WCSLIB version 6.3 (2019/07/12)
394-------------------------------
395
396* C library
397
398  - Fixed the Polynomial and TPD distortions so that, as stipulated in
399    WCS Paper IV, they are now considered to return an additive
400    correction to be applied to the given coordinates, rather than the
401    corrected coordinates themselves.
402
403    Added a new subsection to the prologue of dis.h entitled 'Historical
404    idiosyncrasies', which discusses this issue and other vagueries.
405
406    Amended components of the test suite accordingly: SIPTPV.keyrec,
407    TPV7.keyrec, and tdis1.c.
408
409  - Fixed memory leaks and other potential problems that arose in the
410    wcserr system consequent on changes made in release 6.1.
411
412    Memory allocated by wcsfixi() for messages in the array of wcserr
413    structs must now be freed by the caller.  Amended twcsfix.c
414    accordingly.
415
416  - Plugged memory leaks arising in disset().
417
418  - New function wcsdealloc() provided to free memory allocated within
419    certain WCSLIB routines.  Suggested by David Motl.
420
421  - Eliminated a swag of inconsequential compiler warnings, particularly
422    those emanating from the flex sources.
423
424* Validation
425
426  - The library, Fortran wrappers, utilities, and test programs now pass
427    runtime analysis using -fsanitize=address and -fsanitize=undefined
428    in gcc 8.3.0, in addition to valgrind.  Also compile-time strictures
429    using -std=c99, -pedantic, -Wall, -Wextra, and -DFORTIFY_SOURCE=2.
430    Prompted by feedback from Ole Streicher.
431
432* Installation
433
434  - The non-graphical tests now run reliably in parallel builds
435    (make CHECK=nopgplot -j8 check).  Requested by Mohammed Akhlaghi.
436
437    The graphical tests can also be run in parallel, but as PGPLOT can
438    only handle one stream at a time, some graphics are likely to be
439    lost.  Nevertheless, it is a useful option, especially with runtime
440    analysis via -fsanitize=address, etc.
441
442  - As CFITSIO doesn't provide a Fortran wrapper for fits_read_wcstab(),
443    getwcstab_f.o is now always included in the WCSLIB object library
444    and sharable library if CFITSIO is available (and the WCSLIB Fortran
445    wrappers are required).  Use 'configure --without-cfitsio' to
446    defeat this.
447
448  - Tidied up some aspects of the build where CFITSIO is not available.
449
450* User manual
451
452  - Fixed minor formatting problems in dis.h.
453
454
455WCSLIB version 6.2 (2018/10/20)
456-------------------------------
457
458* C library
459
460  - Consequent on the change in release 6.1, reapplied soothing balm to
461    the wtbarr struct definition in wcs.h for C++ compilation (C and
462    Fortran compilation being unaffected).  While the object libraries
463    themselves are unchanged, the modified wcs.h must be installed for
464    compiling C++ applications.  Reported by Corentin Schreiber.
465
466* User manual
467
468  - Fixed minor formatting problems with the doxygen manual generation.
469
470
471WCSLIB version 6.1 (2018/10/19)
472-------------------------------
473
474* C library
475
476  - Added support for time-related WCS keywords (Paper VII) by expanding
477    the wcsprm struct to store them as auxiliary values, now filled by
478    the header parsers, wcspih() and wcsbth() and handled routinely by
479    wcsinit(), wcssub(), wcscompare(), wcsfree(), wcsprt(), wcsset(),
480    and wcshdo().
481
482  - Augmented datfix() to do various consistency checks on the new
483    time-related keyvalues, and added a new routine, obsfix(), to check
484    consistency of the OBSGEO-[XYZLBH] observatory coordinates.
485
486  - In the usage notes for wcsbth(), clarified that, according to WCS
487    Papers III and VII, certain global image header keywords are
488    permitted in binary table headers and are expected to be inherited
489    by image arrays and pixel lists, and elaborated on the difficulties
490    that such inheritance may cause for pixel lists.
491
492  - Revamped message string handling in the wcserr module to allow
493    arbitrarily long messages while greatly reducing the sizeof the
494    struct.
495
496  - Extracted the definition of the wtbarr struct from wcs.h to a
497    separate header file, wtbarr.h, in order to reduce the number of
498    irrelevant warnings generated by 'gcc -Wpadded' (primarily for
499    code development).  Applications code that needs to access members
500    of the struct (unlikely) must now include wtbarr.h (or wcslib.h).
501
502  - The WCSLIB major version number was incremented as changes to the
503    wcsprm struct makes the ABI of the sharable library incompatible
504    with executables linked with that of older releases.
505
506* Fortran wrappers
507
508  - Match changes to the C library, including adding a wrapper for
509    obsfix().
510
511* Installation
512
513  - Several changes to configure and the makefiles aimed at facilitating
514    code development.
515
516
517WCSLIB version 5.20 (2018/10/05)
518--------------------------------
519
520* C library
521
522  - Added utility functions dpkeyi() and dpkeyd() to dis.c, and removed
523    the corresponding functions from wcsutil.c.
524
525* Fortran wrappers
526
527  - New wrappers for dpkeyi() and dpkeyd().
528
529* Installation
530
531  - Reworked the makefiles to allow parallel library builds, as required
532    by some software distributions.  Reported by Dustin Lang with
533    suggested patch, and Zaak Beekman.  (Parallel execution of the test
534    suite is not supported.)
535
536  - The introduction of "deterministic" archiving (ar(1)) broke
537    dependency analysis in the WCSLIB makefiles on the many systems
538    where it is now enabled by default (i.e. binutils configured with
539    --enable-deterministic-archives).
540
541    Modified configure to force non-deterministic archiving during the
542    library builds, thus repairing the dependency analysis.  However,
543    the static object libraries are now reconstructed using
544    deterministic archiving in the process of installing them.
545
546  - Fixed problems with the dependency analysis, solely affecting code
547    development.
548
549
550WCSLIB version 5.19.1 (2018/07/28)
551----------------------------------
552
553* Installation
554
555  - Updated ./config/config.{guess,sub} to the latest versions from the
556    GIT repository, timestamped 2018-07-18 and 2018-07-25, respectively.
557    The previous pair were dated 2012-02-10 and 2012-04-18.
558
559
560WCSLIB version 5.19 (2018/07/27)
561--------------------------------
562
563* C library
564
565  - In wcssub(), fixed a bug in handling distortion functions on axes
566    with changed axis number in the subimage (i.e. via deletion or
567    addition of an axis).
568
569  - In various routines within dis.c, wcs.c, wcshdr.c, and wcspih.l,
570    increased the size of various sprintf() output buffers to avert
571    -Wformat-overflow warnings from gcc 8.1.0 (with -DFORTIFY_SOURCE=2).
572    Reported by Simon Conseil.
573
574    Also fixed other warnings in these routines from gcc 8.1.0
575    relating to -Wcast-function-type, -Wmaybe-uninitialized, and
576    -Wunused-parameter.
577
578  - In wcsutrn.l (the units alias translator used by wcsfix), recognise
579    'Deg', 'Degree', and 'Degrees' as aliases for 'deg'.  Rogue header
580    reported by Jim Lewis.
581
582  - Added a note to the prologue of spx.h explaining WCSLIB's use of
583    Cox's air-to-vacuum transformation equation rather than the IUGG
584    relation cited in WCS Paper III.  Noted by Benjamin Alan Weaver.
585
586  - In the test suite, avert nuisance compiler warnings in tdis1.
587    Made tsphdpa more robust in handling user coordinate input.
588
589* PGSBOX
590
591  - In pgwcsl_(), avert nuisance warnings from gcc 8.1.0 relating to
592    unused parameters (-Wunused-parameter).  Also averted nuisance
593    compiler warnings in cpgtest.
594
595* Utilities
596
597  - wcsware was not reading the -TAB table from the FITS file for
598    alternate descriptions, bug reported by Chiara Marmo.  Nor was
599    wcsfix() ever invoked for them.
600
601    Made it more robust in handling user input of coordinates for the
602    -x and -w options.
603
604  - Fixed compiler warnings from gcc 8.1.0 in HPXcvt
605    (-Wmaybe-uninitialized), and wcsgrid (-Wformat-overflow).
606
607* Installation
608
609  - Amended configure.ac to allow cross-compilation, and also updated
610    the auxiliary configure scripts in the config/ directory.  Patch
611    supplied by Mos� Giordano.
612
613
614WCSLIB version 5.18 (2018/01/10)
615--------------------------------
616
617* C library
618
619  - New routines introduced to preclude altering the global variables
620    NPVMAX, NPSMAX, and NDPMAX, which determine how much memory to
621    allocate for storing PVi_ma, PSi_ma, DPja, and DQia keyvalues:
622    wcsinit(), lininit(), lindist(), and disinit().  These are now used
623    by various WCSLIB routines, such as the header parsers, which
624    previously temporarily altered the global variables, thus posing a
625    thread hazard.  Testing and feedback on thread-safety issues, with
626    patches, from Rodrigo Tobar Carrizo.
627
628  - The Flex scanners, fitshdr(), wcsbth(), wcspih(), wcsulexe(), and
629    wcsutrne(), have been rewritten as thin wrappers (with the same API)
630    over scanners that were modified (with changed API) as required to
631    use Flex's "reentrant" option.  Consequently, they are now reentrant
632    and should be thread-safe.  That also passes through to the
633    deprecated wrappers, wcsulex() and wcsutrn().
634
635  - Fixed memory leaks in lindist() and lincpy() uncovered by valgrind.
636
637  - Test programs tfitshdr, tpih1, tpih2, and ttab3 are now careful to
638    free all allocated memory before exit to defeat spurious reports of
639    memory leaks by valgrind.
640
641* Fortran wrappers
642
643  - New wrappers for wcsinit(), lininit(), lindist(), and disinit().
644
645* Installation
646
647  - configure now recognises the value of ARFLAGS obtained from the
648    environment.
649
650* User manual
651
652  - Updates and amendments in line with the above changes.
653
654  - Documentation generation moved to doxygen 1.8.14 (was 1.8.13).
655
656
657WCSLIB version 5.17 (2017/09/18)
658--------------------------------
659
660* C library
661
662  - Fixed a memory leak in wcspih().  Reported by Pim Schellart.
663
664  - Fixed compiler warnings about comparison between signed and unsigned
665    integers in tab.c (Pey-Lian Lim).  Also fixed warnings in other
666    functions about unused parameters.
667
668* Fortran wrappers
669
670  - Fixed compiler warnings about comparison between signed and unsigned
671    integers in several routines.
672
673* PGSBOX
674
675  - Fixed a compiler warning about comparison between signed and
676    unsigned ints.
677
678* Installation
679
680  - Removed setgid permission on installation directories (for Fedora
681    Linux, reported by Sergio Pascual).
682
683* User manual
684
685  - Minor updates and amendments.
686
687  - Documentation generation moved to doxygen 1.8.13 (was 1.8.10).
688
689
690WCSLIB version 5.16 (2017/01/15)
691--------------------------------
692
693* C library
694
695  - Bug fix in spcfix() for the previous change.  Reported separately by
696    Julian Taylor & Peter Williams.
697
698
699WCSLIB version 5.15 (2016/04/05)
700--------------------------------
701
702* C library
703
704  - Bug fix in wcsulex.l for the previous change.  Reported, and fix
705    supplied by Tammo Jan Dijkema.
706
707  - In spcfix(), report the value of VELREF if ctype is translated from
708    the AIPS convention.
709
710
711WCSLIB version 5.14 (2016/02/07)
712--------------------------------
713
714* C library
715
716  - In wcsulex.l and wcsutrn.l, applied a workaround for a memory leak
717    introduced by a change (bug) in flex in Aug/2012.  Reported, and
718    fix supplied by Thomas Robitaille and Erik Bray.
719
720* Installation
721
722  - In MacOSX, create symlink libwcs.dylib pointing to the dynamic
723    library so that WCSLIB is linked dynamically by default.  Requested
724    by Paul Price.
725
726
727WCSLIB version 5.13 (2016/01/26)
728--------------------------------
729
730* C library
731
732  - In wcshdo(), provide floating-point format control via the 'ctrl'
733    argument (formerly 'relax').
734
735  - In wcspih(), PLATEID by itself is no longer sufficient to trigger a
736    DSS translation (reported by James Allen).
737
738  - In unitfix(), ensure that the message buffer cannot be overrun, e.g.
739    by blank-padded unit strings (reported by Vishal Kasliwal).
740
741
742WCSLIB version 5.12 (2015/11/15)
743--------------------------------
744
745* C library
746
747  - Bug fix in wcshdo() for CRVALia precision reported by Mihai Cara.
748
749
750WCSLIB version 5.11 (2015/10/18)
751--------------------------------
752
753* C library
754
755  - Bug fixes in wcspih.l and dis.c for WAT distortions provided by
756    Ole Streicher.
757
758
759WCSLIB version 5.10 (2015/10/09)
760--------------------------------
761
762* C library
763
764  - In wcshdo(), allow output of floating point keyvalues to 15
765    significant digits (was 14), mainly for astropy.
766
767  - In wcspih(), allow unrecognised WAT projection types (tan, etc.) to
768    pass without returning an error.  Reported by Michael Droettboom.
769    Also fixed a bug triggered by SIP keywords in unconventional order,
770    reported by Colin Slater, LSST.
771
772
773WCSLIB version 5.9 (2015/07/21)
774-------------------------------
775
776* C library
777
778  - In disx2p(), make proper allowance for the possibility that the TPD
779    and SIP forward and inverse distortion polynomials may not be of the
780    same degree, reported by Martin Kuemmel.
781
782  - Fix-ups in wcshdo() reported by Michael Droettboom, and several
783    tidy-ups as well.
784
785
786WCSLIB version 5.8 (2015/07/08)
787-------------------------------
788
789* C library
790
791  - DSS (Digitized Sky Survey) coordinates are now handled via TPD, as
792    are the TNX and ZPX "projections".  New test script tdis3 and
793    headers DSS.keyrec, TNX.keyrec, and ZPX.keyrec.
794
795  - New function dishdo() can be used to set a flag that causes
796    wcshdo() to write headers in the form of the distortion function
797    used internally (usually TPD).
798
799  - Added the capability, via DPja.DOCORR, for a distortion function to
800    to compute an additive correction to the undistorted coordinates
801    (rather than computing the distorted coordinates themselves).
802
803  - Added auxiliary variables to TPD via DPja.AUX.jhat.COEFF.m.
804
805  - Bug fix in wcshdo() for TPV, diagnosed by Michael Droettboom.
806
807* Fortran wrappers
808
809  - Wrapper for dishdo().
810
811
812WCSLIB version 5.7 (2015/06/29)
813-------------------------------
814
815* C library
816
817  - Extended wcssub() to handle distortions (and thus wcscopy() also).
818    This required axis mapping to be enabled for SIP distortions within
819    WCSLIB.
820
821  - wcshdo() now handles all distortions currently supported by WCSLIB:
822    SIP, TPV, TPD, and Polynomial.
823
824  - Bug fixes in sphx2s() and sphs2x() for non-unit vector strides for
825    special-case rotations.
826
827  - In wcsset(), modify wcsprm::ctype after translating TPV so that
828    subsequent calls won't try to re-translate it, the PVi_ma records
829    by then having been erased.  Reported by Michael Droettboom.  Also,
830    restore NDPMAX after translating TPV.
831
832  - Bug fixes in discpy(), disprt(), disset(), and disx2p().
833
834  - Added disperr(), prjperr(), spcperr(), spxperr(), and tabperr() to
835    complete the set and make reporting errors slightly more convenient.
836
837* Utilities
838
839  - wcsware has a new option, -o, to print the wcsprm struct in the form
840    of a FITS header using wcshdo().  Also, the -a option has been
841    extended to allow a 0-relative numeric index for selecting an
842    alternate WCS, where the alternates are sequenced alphabetically
843    (without gaps) following the primary representation.
844
845* User manual
846
847  - Documentation generation moved to doxygen 1.8.10 (was 1.8.9.1).
848
849
850WCSLIB version 5.6 (2015/06/14)
851-------------------------------
852
853* C library
854
855  - Bug fixes in wcspih() and sipset() to account for the fact that the
856    independent variables of the SIP polynomial are pixel coordinate
857    offsets from CRPIXja, not pixel coordinates per se.  Diagnosed by
858    Michael Droettboom.
859
860    Validated SIP and TPV handling by comparing the output of
861    'wcsware -x' with that of wcstools 'xy2sky -d -n6' using astropy's
862    SIP test headers, and separate SIP and TPV headers originating from
863    the Palomar Transient Factory provided by David Shupe.
864
865    Changed SIP.keyrec so that CRPIX1 and CRPIX2 differ in value,
866    thereby making tests sensitive to any confusion between the two.
867
868
869WCSLIB version 5.5 (2015/05/05)
870-------------------------------
871
872* C library
873
874  - Bug fixes in wcspih.l for headers with multiple distortions, and for
875    distortion parameter look-alike keywords.
876
877  - Bug fix in sipset() uncovered by valgrind.
878
879
880WCSLIB version 5.4.1 (2015/05/01)
881---------------------------------
882
883* C library
884
885  - Added a fairly lengthy section to the prologue of dis.h describing
886    the Paper IV keywords and the distortion functions currently
887    implemented.
888
889* User manual
890
891  - Added a new section on WCSLIB version numbers.
892
893
894WCSLIB version 5.4 (2015/04/21)
895-------------------------------
896
897* C library
898
899  - Further work on distortions: wcspih() now parses Paper IV distortion
900    keywords (CPDISja, CQDISia, DPja, DQia, etc.), thus handling record-
901    valued keywords.  SIP keywords are also parsed and translated into
902    Paper IV keywords.
903
904  - TPV, SIP, and whereever possible, the general Polynomial distortion
905    function of Paper IV are now implemented by the Template Polynomial
906    Distortion (TPD), that being a superset of TPV and SIP.  TPD, which
907    can also handle 1D distortions and be used for inversions, is also
908    supported as a separate distortion type defined by Paper IV
909    keywords.  TPD efficiently handles 1D distortions and distortions
910    without radial terms.
911
912  - Specialized inverse distortions, such as defined by SIP, are
913    implemented by TPD and recognized by disx2p(), which uses them to
914    compute the initial approximation of its more precise iterative
915    solution.
916
917  - Generalized tdis1.c so that it can do closure tests for SIP headers,
918    and added a SIP test header.
919
920
921WCSLIB version 5.3.1 (2015/04/21)
922---------------------------------
923
924* C library
925
926  - Bug fix in test program tdis1.c reported by Martin Kuemmel.
927
928
929WCSLIB version 5.3 (2015/04/21)
930-------------------------------
931
932First public release of WCSLIB 5.x with distortions capability.
933
934* C library
935
936  - Changed disprm::dtype from char[16] to char[72] for reasons relating
937    to header parsing.
938
939  - More armour plating for disset() and friends.  They also use new
940    utility functions wcsutil_dpkey_int() and wcsutil_dpkey_double() to
941    extract numeric values from a dpkey struct.  This ensures their
942    independence of the data type, the appropriate reporting of dpkey
943    values by disprt(), and (eventually) the appropriate writing of DPja
944    and DQia keyvalues by wcshdo().
945
946  - Augmented the usage comments for dpfill() to explain how numeric
947    values in a dpkey struct are handled.
948
949* Utilities
950
951  - wcsware now uses wcserr to provide a backtrace on errors.  Also
952    fixed a couple of minor annoyances relating to alternate
953    representations.
954
955
956WCSLIB version 5.2 beta release (2015/04/15)
957--------------------------------------------
958
959* C library
960
961  - Further development of disprm and related functions to implement
962    the FITS keywords for distortions introduced in WCS Paper IV, thus
963    changing disprm's ABI once again.
964
965    disprm's model is now similar to wcsprm's handling of PVi_ma and
966    PSi_ma, where the parsed keyrecords are loaded into a set of pvcard
967    and pscard structs and wcsset() does the analysis.  For disprm, the
968    parsed DPja or DQia keyrecords are loaded into a set of dpkey
969    structs for disset() to analyse.
970
971  - New function dpfill() aids in filling a dpkey struct.  Function
972    disparms() has been removed.  It was no longer needed as
973    disprm::parms[][] is now a "returned" member of the struct.
974
975  - Implementation of the general Polynomial distortion function defined
976    in Sect. 3.1 of WCS Paper IV.  The polynomial is defined in terms of
977    Paper IV keywords.
978
979  - Bug fixes in diswarp() and linwarp() reported by
980    Michael Droettboom.
981
982  - Test program tdis1 now tests a TPV header for closure in two ways:
983    directly as a specialist TPV distortion (as before), then by
984    translating it into a general polynomial distortion.  It then also
985    tests that the TPV and polynomial distortions produce the same
986    results.
987
988* Fortran wrappers
989
990  - Changes to the wrappers reflecting changes to disprm.
991
992  - Bug fixes in fitshdr_f.c, and test programs tdis1.f, tfitshdr.f,
993    twcsfix.f, and twcs.f.  All reported and/or fixed by Ole Streicher.
994
995
996WCSLIB version 5.1 beta release (2015/04/07)
997--------------------------------------------
998
999* C library
1000
1001  - Distortions-related bug fixes to linset(), linp2x(), and linx2p().
1002
1003  - New functions diswarp() and linwarp() compute statistics of the
1004    distortion functions over a specified domain.  Changed tdis1.c to
1005    test them.
1006
1007  - Changes to disprm (so changed ABI).
1008
1009* Fortran wrappers
1010
1011  - Wrappers for diswarp() and linwarp().
1012
1013
1014WCSLIB version 5.0 beta release (2015/04/05)
1015--------------------------------------------
1016
1017* C library
1018
1019  - Implemented the framework of WCS Paper IV (the draft distortions
1020    proposal) based on a new struct, disprm, and suite of routines with
1021    header dis.h: disini(), disalloc(), discpy(), disfree(), disprt(),
1022    disset(), disp2x(), and disx2p().  New test program tdis1.
1023
1024    Consequent changes to the linprm struct have altered its ABI, thus
1025    necessitating an increment in the WCSLIB major verion number.
1026
1027  - wcsset() now recognises the "TPV" projection proposed in an early
1028    draft of WCS Paper II, and translates it into a disprm distortion -
1029    by request of Octavi Fors.  Additionally, it recognises "TPU" as
1030    equivalent to "TPV" but using a prior distortion (coming before the
1031    linear transformation matrix) rather than sequent (coming after it).
1032
1033  - In wcspih() and wcsbth(), added relaxation flags to allow PC0i_0ja,
1034    PV0j_0ma, and PS0j_0ma (i.e. with leading zeroes on the index).
1035
1036  - Added wcslib_version() to return the WCSLIB version number, as
1037    suggested by Ole Streicher.
1038
1039  - Fixed problems uncovered by valgrind in prjbchk() (reported by
1040    Ger van Diepen), sphx2s(), sphx2s(), spcspxe(), spcxpse(), tabini(),
1041    and wcshdo_util().
1042
1043  - Tidied up error reporting, particularly relating to translating
1044    status returns from lower-level functions.  New functions linperr()
1045    and celperr() report error messages from the structs they contain
1046    in addition to their own.
1047
1048  - Changed output formatting of floating point values in linprt(),
1049    celprt(), prjprt(), spcprt(), tabprt(), and wcsprt().  Updated the
1050    test output reference files for tbth1, tpih1, twcsfix, twcssub, and
1051    twcstab to suit.
1052
1053  - Tidied up several of the test programs, mostly to free memory
1054    explicitly before exit so that valgrind doesn't report (non-)leaks.
1055
1056* Fortran wrappers
1057
1058  - Wrappers for the new distortion functions.  New test programs
1059    tdis1.f and tdis2.f.
1060
1061  - Updates following changes to wcspih() and wcsbth().
1062
1063  - Added wrappers for linperr() and celperr().  Also added prjperr_(),
1064    spcperr_(), and tabperr_() as convenient wrappers on wcserr_prt().
1065
1066  - Wrapper for wcslib_version().
1067
1068* Utilities
1069
1070  - Added a "lint" function to wcsware to check a FITS header for
1071    conformance to the WCS standard.  New test program twcslint.
1072
1073* PGSBOX
1074
1075  - In PGCRLB, fixed an incorrect use of the MOD intrinsic reported by
1076    'gfortran -std=f95' via Jean-Baptiste Marquette.
1077
1078
1079WCSLIB version 4.25.1 (2015/01/05)
1080----------------------------------
1081
1082* C library
1083
1084  - Updated the test output reference files for tpih1, tbth1, twcsfix,
1085    and twcstab to account for the change to wcsset() in release 4.25.
1086
1087* Fortran wrappers
1088
1089  - Updated the test output reference files for tpih1, twcsfix, and
1090    twcstab to account for the change to wcsset() in release 4.25.
1091
1092* User manual
1093
1094  - Documentation generation moved to doxygen 1.8.9.1 (was 1.8.8).
1095
1096
1097WCSLIB version 4.25 (2014/12/15)
1098----------------------------------
1099
1100* C library
1101
1102  - wcsset() now supplies default values for the auxiliary keywords
1103    EQUINOXa and RADESYSa if not present in the FITS header.
1104
1105
1106WCSLIB version 4.24 (2014/09/19)
1107----------------------------------
1108
1109* C library
1110
1111  - Changed API to wcscompare() to allow a tolerance to be specified for
1112    floating-point comparisons.  Contributed by Michael Droettboom.
1113
1114* Fortran wrappers
1115
1116    Track the change to wcscompare().
1117
1118* User manual
1119
1120  - Documentation generation moved to doxygen 1.8.8 (was 1.8.4).
1121
1122  - Added mention of WCSLIB in "homebrew-science" (MacOSX) in the
1123    section on other packages.
1124
1125
1126WCSLIB version 4.23 (2014/05/11)
1127--------------------------------
1128
1129* C library
1130
1131  - New function wcscompare() compares two wcsprm structs for equality
1132    with varying degrees of strictness.  Test program twcscompare.
1133    Contributed by Michael Droettboom.
1134
1135  - In wcssub(), fixed a bug uncovered by valgrind arising from
1136    allocation of insufficient memory for temporaries when a new axis
1137    is added.  Reported by Michael Droettboom.
1138
1139  - In wcshdo(), don't write RESTFRQ or RESTWAV if zero.
1140
1141    Also, to distinguish them from integer keyvalues, floating-
1142    point values will now always be written with an exponent or
1143    fractional part, ".0" being appended if necessary to achieve this.
1144    Suggested by Peter Weilbacher.
1145
1146  - Fixed the '-h' option in twcshdr.
1147
1148* Fortran wrappers
1149
1150  - Wrapper for wcscompare().
1151
1152
1153WCSLIB version 4.22 (2014/04/13)
1154--------------------------------
1155
1156* C library
1157
1158  - In pcox2s() and pcos2x(), use alternative projection equations for
1159    greater numerical precision near theta == 0.  In cops2x(), return
1160    an exact result for theta at the poles.  Relaxed the tolerance for
1161    bounds checking a little in sflx2s().
1162
1163
1164WCSLIB version 4.21 (2014/03/24)
1165--------------------------------
1166
1167* C library
1168
1169  - New function prjbchk() performs bounds checking on native spherical
1170    coordinates.  It is invoked automatically by the deprojection (x2s)
1171    routines if prjprm::bounds&4 is set.  Documented the new bounds
1172    checking implemented by prjbchk() in the prologue entry for
1173    wcsbchk().  Improvements to tprj1 to test the vector API of prjx2s()
1174    and to deal better with out-of-bounds native coordinates returned by
1175    it.
1176
1177  - Bug fixes in the projection routines: in hpxx2s() relating to bounds
1178    checking, bug introduced at 4.20, reported by Michael Droettboom; in
1179    parx2s() and molx2s() relating to setting the stat vector; in
1180    hpxx2s() relating to implementation of the vector API; and in
1181    xphx2s() relating to setting an out-of-bounds value of phi.
1182
1183* Fortran wrappers
1184
1185  - Wrapper for prjbchk().  Modified tprj1.f to track changes to the C
1186    version.
1187
1188
1189WCSLIB version 4.20 (2013/12/18)
1190--------------------------------
1191
1192* C library
1193
1194  - New function, wcsbchk(), for controlling bounds checking in the
1195    projection routines.
1196
1197  - Enable bounds checking in the pixel-to-sky (x2s) direction for HPX
1198    and XPH if prjprm::bounds&2.  Tightened bounds checking in xphx2s().
1199    prjini() now sets prjprm::bounds = 3 to enable all bounds checking
1200    by default.
1201
1202  - Fixed an incorrect error message in wcs_units().  Also report
1203    potentially unsafe units translations in unitfix() - both
1204    contributed by Michael Droettboom.
1205
1206* Fortran wrappers
1207
1208  - Wrapper for wcsbchk().
1209
1210* PGSBOX
1211
1212  - Fixed a few nuisance warnings from gfortran 4.7.2 relating to
1213    implicit type conversions in pgsbox.f.
1214
1215* User manual
1216
1217  - Added mention of wcsjs (Javascript) in the section on other
1218    packages.
1219
1220
1221WCSLIB version 4.19 (2013/09/30)
1222--------------------------------
1223
1224* C library
1225
1226  - Bug fix in wcshdo(), uncovered by cppcheck and reported by David
1227    Binderman.  Fixed additional minor inconsistencies in hpxx2s(),
1228    wcsprintf(), and wcsfprintf() reported by cppcheck.
1229
1230  - Minor fix to twcstab reported by cppcheck.
1231
1232  - Bug fix in wcssub() for handling (non-standard) PROJPn keywords
1233    (uncovered by valgrind, reported by Paul Price).
1234
1235
1236WCSLIB version 4.18 (2013/07/13)
1237--------------------------------
1238
1239* C library
1240
1241  - Implemented the butterfly projection (XPH), being the polar form of
1242    the HEALPix projection with (H,K) = (4,3).  Augmented tprj1.c and
1243    tprj2.c to suit.
1244
1245  - Bug fix in celfix() when translating GLS to SFL with non-zero
1246    reference point.
1247
1248* Fortran wrappers
1249
1250  - Wrappers for the XPH projection functions and corresponding
1251    modifications to the test programs.
1252
1253  - Fixed a few inconsequential warnings from gfortran 4.7.2 relating
1254    to implicit type conversions in the test programs.
1255
1256* Utilities
1257
1258  - In HPXcvt, fixed incorrect axis scaling (CDELT1 and CDELT2) in the
1259    XPH header, and set the PCi_ja matrix in the HPX header to a pure
1260    45 degree rotation with appropriate adjustment of CDELT1 and CDELT2
1261    (matching XPH).  Also set LONPOLE to 180 degree in the XPH header
1262    with adjustment of CRVAL1 as recommended in the errata.  These
1263    changes prompted by Paddy Leahy.  Also, modified the FITS header
1264    comment for XPH - it is no longer "experimental", and accept the
1265    '-x' option (i.e. without qualification) as equivalent to '-xn'.
1266
1267* User manual
1268
1269  - Documentation generation moved to doxygen 1.8.4 (was 1.5.6).
1270
1271
1272WCSLIB version 4.17 (2013/01/29)
1273--------------------------------
1274
1275* C library
1276
1277  - Added wcsfprintf() to wcsprint.h.  Now used in wcsbth() and wcspih()
1278    to allow diagnostic output to be redirected.  Changes provided by
1279    Michael Droettboom.
1280
1281
1282WCSLIB version 4.16 (2012/11/07)
1283--------------------------------
1284
1285* C library
1286
1287  - When wcspih() constructs a default coordinate representation it will
1288    give it the special name "DEFAULTS", and will not report "Found one
1289    coordinate representation" (if reporting is enabled).
1290
1291* Utilities
1292
1293  - wcsware has a new option, -P, which does the same as -p except that
1294    it won't print a wcsprm struct with the name "DEFAULTS".
1295
1296
1297WCSLIB version 4.15 (2012/09/26)
1298--------------------------------
1299
1300* C library
1301
1302  - Bug fixes in spctype(), spcspxe(), spcxpse, and spctrne() for
1303    propagating an error status correctly from lower-level routines.
1304    Amendments to the prologues of these routines.  Reported by
1305    Hans Terlouw.
1306
1307  - Similarly for wcsunitse(), wcsulexe(), and wcsutrne().
1308
1309* PGSBOX
1310
1311  - Bug fix in PGSBOX for handling cycles in angle when both world
1312    coordinate elements are angular.  Reported by Thomas Robitaille.
1313
1314
1315WCSLIB version 4.14 (2012/07/13)
1316--------------------------------
1317
1318* C library
1319
1320  - Problems were caused for fitshdr(), wcsbth(), wcspih(), wcsulex(),
1321    datfix() and wcshdo(), by locales such as "fr_FR" in which commas
1322    are used to delimit the decimal part of floating point numbers.
1323    In particular, these locales adversely affect the behaviour of
1324    sscanf() and sprintf() when reading and writing FITS header
1325    keyvalues.  Thread-safe fixes provided by Michael Droettboom.
1326
1327  - Applied astropy patches from Michael Droettboom: attend to compiler
1328    warnings in prj.c, spc.c, tab.c, and wcsutil.c, including those for
1329    MS-Windows.
1330
1331
1332WCSLIB version 4.13.4 (2012/04/02)
1333----------------------------------
1334
1335* Installation
1336
1337  - Relaxed the closure tolerance slightly in tlog.f as for tlog.c
1338    previously.
1339
1340
1341WCSLIB version 4.13.3 (2012/03/26)
1342----------------------------------
1343
1344* Installation
1345
1346  - Relaxed the closure tolerance slightly in tlog.c for gcc 4.6.3 on
1347    Ubuntu 12.04 (reported by Ole Streicher).
1348
1349
1350WCSLIB version 4.13.2 (2012/03/21)
1351----------------------------------
1352
1353* Installation
1354
1355  - Changes to configure.ac and the GNUmakefiles to put '-lm' strictly
1356    in the correct sequence when producing the sharable library
1357    (reported by Ole Streicher).
1358
1359
1360WCSLIB version 4.13.1 (2012/03/15)
1361----------------------------------
1362
1363* C library
1364
1365  - Workaround in wcserr_set() for an unfortunate compiler segv from
1366    gcc 4.2.1 in MacOSX 10.7.
1367
1368
1369WCSLIB version 4.13 (2012/03/14)
1370--------------------------------
1371
1372* C library
1373
1374  - Allow naxis == 0 in wcsini() and linini() for a degenerate
1375    coordinate system as may be produced by wcssub().  In wcssub(),
1376    ensure that wcsini() is called for coordinate systems with
1377    naxis == 0.  In wcssptr(), call spcfree() before spcini() to plug a
1378    memory leak.
1379
1380
1381WCSLIB version 4.12 (2012/02/29)
1382--------------------------------
1383
1384* C library
1385
1386  - In spctrne(), guard against restfrq == restwav == 0.0 when
1387    translating between two velocity-characteristic types, or between
1388    two wave-characteristic types (the translation is independent of
1389    restfrq and restwav, but a dummy value is needed for intermediate
1390    calculations).
1391
1392
1393WCSLIB version 4.11 (2012/02/21)
1394--------------------------------
1395
1396* C library
1397
1398  - Bug fix in spcset() for handling simple linear spectral axes.
1399
1400* Fortran wrappers
1401
1402  - Bug fix in spctrne_() for handling ctypeS2.
1403
1404
1405WCSLIB version 4.10 (2012/02/06)
1406--------------------------------
1407
1408* C library
1409
1410  - datfix() and spcfix() now return informative messages when dates and
1411    AIPS-convention spectral axes are translated (changes contributed by
1412    Michael Droettboom).  spcaips() now returns an error status for
1413    invalid values of VELREF.
1414
1415  - wcssub() has been augmented with the ability to add new axes onto a
1416    wcsprm struct.
1417
1418
1419WCSLIB version 4.9 (2012/01/24)
1420-------------------------------
1421
1422* C library
1423
1424  - Fixes to wcsfixi() for collecting the messages properly in the info
1425    array (from Michael Droettboom).
1426
1427  - Handle certain malformed date strings more gracefully in datfix().
1428
1429  - Make informative messages printed by wcserr_prt() a bit more
1430    informative.
1431
1432
1433WCSLIB version 4.8.4 (2011/12/05)
1434---------------------------------
1435
1436* C library
1437
1438  - Fixed the pseudo-random number generator in twcstab.c - gcc 4.6 with
1439    '-O2' baulked at testing for signed integer overflow.
1440
1441* Installation
1442
1443  - In configure.ac, the Fortran compiler's libraries must be added to
1444    the link list when checking for the PGPLOT libraries since gcc is
1445    driving the linker.  Likewise in C/GNUmakefile when linking test
1446    programs that use PGPLOT.
1447
1448  - Use 'make CHECK=nopgplot check' to run only the non-graphical tests
1449    (even if PGPLOT is available).
1450
1451  - After compiling and running the tests, 'make check' now summarizes
1452    the non-graphical test results and stops if any failed.
1453
1454
1455WCSLIB version 4.8.3 (2011/11/17)
1456---------------------------------
1457
1458* C library
1459
1460  - Minor generalization of the wcserr diagnostics to allow the return
1461    of informative messages, which are associated with negative status
1462    values.  wcserr_prt() will now recognize and print them as such.
1463    Added wcserr_clear() to reset (clear) a wcserr struct.
1464
1465  - Modified unitfix() to return an informative message if a units
1466    alias is applied, and wcsfixi() to allow such messages to be
1467    propagated through the info array (from Michael Droettboom).
1468
1469  - Modified twcsfix.c to use wcserr diagnostics, in particular to
1470    report units alias translations.
1471
1472* Fortran wrappers
1473
1474  - In wcsfix_(), interpret *naxis == 0 as meaning naxis == 0x0, thus
1475    causing cylfix() to be skipped.
1476
1477  - Modified twcsfix.f to reflect changes made to twcsfix.c.
1478
1479
1480WCSLIB version 4.8.2 (2011/10/04)
1481---------------------------------
1482
1483* Installation
1484
1485  - Changes for Debian package generation contributed by Ole Streicher:
1486    - Corrections to 'configure' reported by 'lintian'.
1487    - Generate man pages for the utility programs and install them.
1488
1489
1490WCSLIB version 4.8.1 (2011/09/19)
1491---------------------------------
1492
1493* Installation
1494
1495  - Set SONAME in the sharable library in accordance with
1496    tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
1497    (reported by Ole Streicher, Debian package maintainer).  The
1498    sharable library will again be installed with full release number
1499    and with a symbolic link from SONAME pointing to it.  If defined,
1500    SHRLN will point to SONAME.
1501
1502
1503WCSLIB version 4.8 (2011/08/15)
1504-------------------------------
1505
1506* C library
1507
1508  - New error diagnostics mechanism contributed by Michael Droettboom:
1509
1510    Most functions that return a numeric status (error) code now also
1511    write a detailed error message to a wcserr struct attached to the
1512    passed-in *prm struct.  See wcserr.h for more information.
1513
1514    Functions that didn't have a *prm struct as an argument have no
1515    direct way to return an error message.  Therefore, these functions
1516    now have duplicate versions with the suffix "e" that take an
1517    additional "struct wcserr *" parameter.  These functions are:
1518
1519        spcspx()    ->  spcspxe()
1520        spctrn()    ->  spctrne()
1521        spctyp()    ->  spctype()
1522        spcxps()    ->  spcxpse()
1523        wcsulex()   ->  wcsulexe()
1524        wcsunits()  ->  wcsunitse()
1525        wcsutrn()   ->  wcsutrne()
1526
1527    A new function wcsfixi() was added which is identical to wcsfix()
1528    but in addition stores all of the detailed textual messages about
1529    the fixes that were performed.
1530
1531  - In wcssub(), ensure that wcstab->m_tab has been initialized
1532    before trying to free it on status return 12 or 13 (reported by
1533    Hans Terlow).
1534
1535  - Bug fixes:
1536    - In sphx2s() and sphs2x() for the case where |eul[1]| = 180.0.
1537    - For parsing AIPS-convention VELREF in wcsbth().
1538    - In spcaips() for translating AIPS-convention CTYPEia without
1539      Doppler frame.
1540
1541  - Non-graphical test programs now simply report "PASS" if they satisfy
1542    the reporting tolerance for closure residuals, etc.  Their full
1543    output is reported otherwise.  Run 'make MODE=interactive check' to
1544    revert to the previous behaviour of reporting the full output for
1545    tests that succeed.
1546
1547  - Eliminated compiler warnings about type-punning of pointer-to-
1548    function.
1549
1550* Fortran wrappers
1551
1552    Extensive modifications to track the new error handling mechanism
1553    in the C library.
1554
1555* Installation
1556
1557  - configure now prefers gfortran over g77 if available.
1558
1559  - Don't rely on "." being in the PATH if config.status needs to be
1560    run in the pgsbox and utils makefile (reported by Peter Teuben).
1561
1562
1563WCSLIB version 4.7 (2011/02/07)
1564-------------------------------
1565
1566* C library
1567
1568  - Bug fix in celset() for interpreting LATPOLEa when LONPOLEa = phi0.
1569    Crept in at version 4.4.
1570
1571  - Fixed the bounds test on y in hpxx2s() (HEALPix projection) for
1572    unconventional values of H and K.  In hpxx2s() and hpxs2x(),
1573    corrected the offset of the southern polar half-facets for
1574    even K.  In hpxs2x(), put the phi = 180 meridian in the expected
1575    place.
1576
1577  - Bug fixes in tabx2s() and tabs2x() for default indexes (reported
1578    by David Berry).  In tabs2x(), if no solution is found then do
1579    minor extrapolation past the ends of each row (1-D case only).
1580    Sped up tabs2x() by about 50%.
1581
1582  - New functions wcsprintf(), wcsprintf_set(), and wcsprintf_buf(),
1583    declared in wcsprintf.h, provide control over the disposition of
1584    output from celprt(), linprt(), prjprt(), spcprt(), tabprt(), and
1585    wcsprt() routines.  Prompted by Michael Droettboom, with an initial
1586    implementation.
1587
1588* Fortran wrappers
1589
1590  - In the various test programs, used EQUIVALENCEs to ensure that the
1591    CEL, LIN, PRJ, etc. arrays are aligned on a DOUBLE PRECISION
1592    boundary.
1593
1594* PGSBOX
1595
1596  - Bug fix for the case where NG1 == 0 and GRID1(0) < 0, and likewise
1597    for NG2 and GRID2.
1598
1599* Utilities
1600
1601  - In wcsware, added a '-w' option to convert world coordinates
1602    obtained from stdin to pixel coordinates using wcss2p().  Allow
1603    multiple sets of input coordinates with the '-x' and '-w' options
1604    and report the value of the intermediate world coordinates.
1605
1606* User manual
1607
1608  - Fixed list formatting for function return values < 0 or > 9.
1609
1610  - New section for wcsprintf() and related routines.
1611
1612* Installation
1613
1614  - Changes prompted by S�bastien Fabbro for the Gentoo Linux package:
1615      a) autoconf updates,
1616      b) respect LDFLAGS when building the shared library,
1617      c) install documentation,
1618      d) recognise DESTDIR for doing a staged installation.
1619
1620  - As of this release, the minor WCSLIB version number (second field)
1621    will be incremented if and only if a change is made that affects the
1622    library itself, not the documentation or utilities.  The version
1623    number on the installed libraries and header files will omit the
1624    patch number (third field).
1625
1626
1627WCSLIB version 4.6.3 (2010/11/24)
1628---------------------------------
1629
1630* C library
1631
1632  - Bug fix in wcsbth() for handling the inheritance of image header
1633    keywords (uncovered by valgrind, reported by Jim Lewis).
1634
1635
1636WCSLIB version 4.6.2 (2010/11/22)
1637---------------------------------
1638
1639* C library
1640
1641  - Fixed a memory leak in wcsbth.l (reported by Jim Lewis).
1642
1643
1644WCSLIB version 4.6.1 (2010/11/18)
1645---------------------------------
1646
1647* Fortran wrappers
1648
1649  - Fixed typos in cel_f.c, celget[cdi] -> celgt[cdi].
1650
1651
1652WCSLIB version 4.6 (2010/11/16)
1653-------------------------------
1654
1655* C library
1656
1657  - In wcsulex.l and wcsutrn.l, stdlib.h must be included explicitly
1658    before the redefinition of exit() - most versions of flex do include
1659    it upfront but some don't (reported by Peter Williams).
1660
1661* Fortran wrappers
1662
1663  - Changes intended to avert nuisance compiler warnings that could
1664    potentially obscure warnings indicative of a genuine problem:
1665
1666    - To stop messages about unused variables when the relevant compiler
1667      option is set, e.g. 'g77 -Wunused', the various *_ERRMSG arrays
1668      defined in the Fortran include files and (formerly) initialized
1669      therein via DATA statements, e.g. PRJ_ERRMSG in prj.inc, have now
1670      been placed into COMMON blocks with names such as PRJ_DATA, and
1671      are initialized via DATA statements in BLOCK DATA subprograms
1672      defined in separate files, e.g. prj_data.f.
1673
1674    - To stop messages about subroutines being invoked with inconsistent
1675      argument lists if the relevant compiler option is not set, e.g.
1676      'g77 -Wno-globals', the C wrapper functions that take 'void *'
1677      arguments now have separate forms for INTEGER, DOUBLE PRECISION,
1678      and CHARACTER arguments that simply invoke the generic function.
1679      Application code must be modified to take advantage of this.
1680
1681* User manual
1682
1683  - In the section on the Fortran wrappers in the manual, warn about the
1684    need for the INTEGER array holding a data structure to be aligned on
1685    a DOUBLE PRECISION boundary.
1686
1687
1688WCSLIB version 4.5.6 (2010/10/28)
1689---------------------------------
1690
1691* Installation
1692
1693  - Fixed the search for CFITSIO and PGPLOT library and include
1694    directories.
1695
1696
1697WCSLIB version 4.5.5 (2010/10/14)
1698---------------------------------
1699
1700* Installation
1701
1702  - Build the PGSBOX sharable library.
1703
1704
1705WCSLIB version 4.5.4 (2010/09/28)
1706---------------------------------
1707
1708* C library
1709
1710  - In wcshdo(), according to the FITS standard, "Letters in the
1711    exponential form ('E' or 'D') shall be upper case" (reported by
1712    Michael Droettboom).
1713
1714
1715WCSLIB version 4.5.3 (2010/09/23)
1716---------------------------------
1717
1718* Utilities
1719
1720  - Various improvements to wcsgrid: correct the scaling set via
1721    cpgwnad(); label angles other than RA,Dec in decimal degrees;
1722    draw the projection boundary for projections other than zenithals.
1723
1724
1725WCSLIB version 4.5.2 (2010/09/23)
1726---------------------------------
1727
1728* C library
1729
1730  - Fixed the translation of GLS to SFL in wcsset() and celfix() when
1731    the reference longitude is non-zero - it introduces an offset in
1732    longitude in the normal way.  (This undoes part of the change
1733    applied in version 4.4.)
1734
1735
1736WCSLIB version 4.5.1 (2010/08/12)
1737---------------------------------
1738
1739* C library
1740
1741  - New utility function, sphpad(), computes the coordinates of points
1742    offset by given angular distances and position angles from a given
1743    point on the sky (complementary to sphdpa()).
1744
1745* Fortran wrappers
1746
1747  - New wrapper function:
1748    - SPHPAD for sphpad().
1749
1750
1751WCSLIB version 4.5 (2010/07/16)
1752-------------------------------
1753
1754* C library
1755
1756  - Fixed the interpretation of VELREF when translating AIPS-convention
1757    spectral types.  Such translation is now handled by a new special-
1758    purpose function, spcaips().  The wcsprm struct has been augmented
1759    with an entry for velref which is filled by wcspih() and wcsbth().
1760    Previously, selection by VELREF of the radio or optical velocity
1761    convention for type VELO was not properly handled.
1762
1763* Fortran wrappers
1764
1765  - New wrapper function:
1766    - SPCAIPS for spcaips().
1767
1768  - Changed spc.inc, spc_f.c, wcs.inc and wcs_f.c to track VELREF
1769    changes.
1770
1771  - Declared functions external in the include files to avoid compiler
1772    warnings about unused variables (if the particular option is set).
1773
1774* Utilities
1775
1776  - Added a '-q' option to fitshdr to quit after a specified number
1777    of HDUs.
1778
1779
1780WCSLIB version 4.4.4 (2009/09/14)
1781---------------------------------
1782
1783* Installation
1784
1785  - Added more configure options for controlling the build:
1786    --disable-fortran, --disable-utils, --without-cfitsio, and
1787    --without-pgplot.
1788
1789
1790WCSLIB version 4.4.3 (2009/09/03)
1791---------------------------------
1792
1793* C library
1794
1795  - Set wave number units to "/m" in spctyp(), was "1/m" which is not
1796    strictly legal and wasn't handled by wcsulex() (reported by
1797    Hans Terlow).  Also fixed a number of units specifications in the
1798    prologue of spx.h to conform with Paper I usage.
1799
1800  - In wcsulex(), allow unit strings like "1/m" in addition to "/m",
1801    provided that the superfluous "1" is the first non-blank character
1802    in the expression, or parenthesised sub-expression.
1803
1804  - In wcssptr(), ensure that i is always reset if given < 0.
1805
1806* User manual
1807
1808  - Augmented the list of FITS WCS and related software in the manual.
1809
1810
1811WCSLIB version 4.4.2 (2009/08/13)
1812---------------------------------
1813
1814* C library
1815
1816  - In sphx2s() and sphs2x(), handle the case where |eul[1]| = 180.0
1817    separately for speed and accuracy.  This change also fixes a rare
1818    and subtle bug in cels2x() that occurs when celprm::isolat is set
1819    and the magnitude of the first latitude in the lat[] vector exceeds
1820    90 deg (reported by Hans Terlouw).
1821
1822* Installation
1823
1824  - Fix relating to creation of symlinks when installing the libraries.
1825
1826
1827WCSLIB version 4.4.1 (2009/08/11)
1828---------------------------------
1829
1830* Installation
1831
1832  - Fixes for installation of the CHANGES file and for the creation of a
1833    symbolic link for the sharable library if one already exists.
1834
1835
1836WCSLIB version 4.4 (2009/08/10)
1837-------------------------------
1838
1839* C library
1840
1841  - Creation of WCSLIB user manual from the header file prologues using
1842    a special-purpose parser, doxextr, and sed scripts to generate input
1843    for doxygen.  This required minor formatting changes to all
1844    prologues plus miscellaneous changes such as naming of arguments in
1845    function prototypes.
1846
1847  - Bug fix in wcsset() that affected handling of PROJPn (deprecated)
1848    and PVi_ma attached to the longitude (not latitude) axis.  Guard
1849    against long strings when copying the projection code.  In
1850    wcs_types(), allow for early Paper IV distortion codes (e.g.
1851    "RA---TAN-SIP") when parsing CTYPEia.
1852
1853  - Use sincos() whereever possible for a ~15% speedup (patches for
1854    cel.c, prj.c and sph.c supplied by Michael Droettboom).  configure
1855    checks for, and uses it automatically if available.
1856
1857  - Fixed the translation of GLS to SFL in wcsset() and celfix() when
1858    the reference longitude and latitude are non-zero.  (In the AIPS
1859    convention, this simply translates the reference point, i.e. the map
1860    as a whole, to those coordinates without creating an oblique grid.)
1861
1862  - Bug fix in prjoff(), a utility function used by the prj routines.
1863    It forces (x,y) = (0,0) at (phi_0,theta_0) when the latter are set
1864    by PVi_[012]a attached to the longitude (not latitude) axis.  Rarely
1865    used in practice.
1866
1867  - New utility function, sphdpa(), computes the distance and position
1868    angle from a point on the sphere to a set of field points.
1869
1870  - In sphx2s() and sphx2s(), handle a simple change in origin of
1871    longitude using a short-cut calculation for speed and accuracy.
1872    Similarly in celset(), check whether phip == phi0 when computing
1873    latp and if so use a short-cut that ensures latp == 90.0 (exactly)
1874    if lat0 == theta0.  The resulting spherical rotation then becomes a
1875    simple change in origin of longitude.  In particular, these changes
1876    should assist PGSBOX in drawing grid lines of +/-180 longitude, to
1877    prevent flip-flopping between one and the other.
1878
1879  - wcsbth() & wcspih(): resolved an inconsistency between the
1880    documentation and code by renamimg WCSHDR_VSOURCEa as
1881    WCSHDR_VSOURCE.
1882
1883  - Flex code: moved declaration of helper functions out of global
1884    scope.
1885
1886  - Fixed the call to wcss2p() in twcshdr (in a section of code not
1887    usually exercised).
1888
1889* Fortran wrappers
1890
1891  - New wrapper functions:
1892    - WCSBTH for wcsbth(),
1893    - WCSBDX for wcsbdx(),
1894    - CDFIX  for cdfix(),
1895    - SPHDPA for sphdpa().
1896
1897  - Updated WCSLEN (in wcs.inc) and added WCS_COLAX and WCS_VELANGL to
1898    match changes to wcsprm made in v4.3 with corresponding changes to
1899    the wrapper functions.  Likewise updated TABLEN (in tab.inc) for
1900    changes to tabprm, and added CEL_LATPREQ for celprm.
1901
1902  - Struct lengths (WCSLEN, PRJLEN, etc.) are now long enough to
1903    accomodate 64-bit machines.
1904
1905  - Updated the flag bits for the RELAX argument in wcshdr.inc to
1906    reflect changes to wcshdr.h made in v4.3.  Renamed WCSHDR_VSOURCEa
1907    to WCSHDR_VSOURCE for consistency with the C library.
1908
1909* PGSBOX
1910
1911  - Improved grid labelling, particularly in minimizing the number of
1912    fields required in sexagesimal labels.
1913
1914* Utilities
1915
1916  - New utility program:
1917
1918    - wcsware extracts the WCS keywords for an image from the specified
1919      FITS file, constructs wcsprm structs for each coordinate
1920      representation found, and performs a variety of operations using
1921      them.
1922
1923  - Old utility programs (first appeared in 4.3 but were not recorded):
1924
1925    - HPXcvt reorganises HEALPix data into a 2-D FITS image with HPX
1926      coordinate system.
1927
1928    - wcsgrid extracts the WCS keywords for an image from the specified
1929      FITS file and uses pgsbox() to plot a 2-D coordinate graticule for
1930      each alternate representation found.
1931
1932    - fitshdr lists headers from a FITS file specified on the command
1933      line, or else on stdin, printing them as 80-character keyrecords
1934      without trailing blanks.
1935
1936* Installation
1937
1938  - New configure options, --with-pgplotinc, --with-pgplotlib,
1939    --with-cfitsioinc and --with-cfitsiolib allow additional directories
1940    to be added to the library and include file search path.
1941
1942  - Miscellaneous fixes and improvements to the installation process.
1943
1944  - Generate a metadata file for pkg-config.
1945
1946  - Added 'make MODE=interactive check' to run the test programs in
1947    interactive mode rather than batch.
1948
1949  - Merged the separate CHANGES files for C, Fortran and PGSBOX into
1950    one (this), with a new section for utilities.
1951
1952
1953WCSLIB version 4.3.3 (2009/04/30)
1954---------------------------------
1955
1956* C library
1957
1958  - fitshdr.l, wcsbth.l, and wcspih.l: use setjmp/longjmp to preempt
1959    the call to exit() which is hard-coded in function yy_fatal_error()
1960    supplied by flex.
1961
1962  - wcspih.l: if NAXIS is non-zero but there were no WCS keywords at
1963    all in the header then create a default WCS with blank alternate
1964    version.
1965
1966
1967WCSLIB version 4.3.2 (2009/03/16)
1968---------------------------------
1969
1970* C library
1971
1972  - utils/GNUmakefile: create BINDIR if necessary prior to installing
1973    utilities.
1974
1975
1976WCSLIB version 4.3.1 (2008/09/08)
1977---------------------------------
1978
1979* Installation
1980
1981  - Top-level GNUmakefile: install header files.
1982
1983
1984WCSLIB version 4.3 (2007/12/27)
1985-------------------------------
1986
1987* C library
1988
1989  - A new general WCS header parser wcsbth() handles binary table image
1990    arrays and pixel lists as well as image array headers.  Added
1991    "colax" to the wcsprm struct to record the column numbers for each
1992    axis in a pixel list.
1993
1994  - New function wcsbdx() is the analog of wcsidx() for the array of
1995    wcsprm structs returned by wcsbth().
1996
1997  - New function wcshdo() writes out a wcsprm struct as a FITS header.
1998
1999  - Changes to wcspih():
2000    - Bug fix, check for a == 0 (indication of a keyword that applies
2001      to all alternates) in internal helper function wcspih_naxes()
2002      (reported by Craig Markwardt).
2003    - Added a new ctrl option to remove valid WCS keyrecords except for
2004      those with a more general role, namely {DATE,MJD}-{OBS,AVG} and
2005      OBSGEO-{X,Y,Z} (suggested by Jim Lewis).
2006    - Added a rule for VELANGLa.  Also added "velangl" to the wcsprm
2007      struct.
2008    - Do checks on the i, k & m keyword parameters in <VALUE>.
2009    - Fixed the test for repeated blanks in the NAXIS and WCSAXES
2010      patterns.
2011    - Fixed three <CCi_ma> rules to allow m == 0.
2012    - Reworked the implementation notes in the prologue.
2013
2014  - The flex scanners, fitshdr.l, wcsbth.l, wcspih.l, wcsulex.l, and
2015    wcsutrn.l, invoke yylex_destroy() before returning to avoid a 16kiB
2016    memory leak.  This was reported by several people, however it may be
2017    problematic depending on the version of flex used - version 2.5.9 or
2018    later is required.  If this is not available, C sources pre-
2019    generated by flex 2.5.33 will be used.
2020
2021  - In wcs.c, don't define the signbit macro if already defined (for
2022    MacOSX).
2023
2024  - In wcs.h, documented wtbarr namespace issues in C++.
2025
2026  - In wcsset(), always set wcsprm.cunit[i], if possible (primarily for
2027    use by wcshdo()).
2028
2029  - In wcsfix.c, parenthesised a boolean expression that was otherwise
2030    incorrect.
2031
2032  - Fixed an obscure floating point rounding error in celset() that
2033    appeared with -O2 optimization in gcc v3.3.5 (Linux).
2034
2035  - prjset() now correctly propagates the status value returned by the
2036    specific projection-setting functions (reported by Bill Pence).
2037
2038  - Bug fix in hpxx2s(), also added bounds checking.  Minor efficiencies
2039    in carx2s() and merx2s().
2040
2041  - In the various functions that print the contents of the structs, use
2042    the "%p" printf conversion specifier to print addresses rather than
2043    casting the pointer to int and using "#x".  The latter does not work
2044    on 64-bit machines where sizeof(int) != sizeof(void*).
2045
2046  - Reorganized the various structs to get alignment on 64-bit machines.
2047
2048  - All header file prologues now reference the README file for an
2049    overview of the library.
2050
2051  - Miscellaneous portability fixes for 64-bit, MacOSX, OSF compiler,
2052    etc.
2053
2054  - Elimination of compiler warnings, e.g. parenthesised assignments
2055    used as truth values (a favourite gcc gripe!), etc.
2056
2057  - Process flex descriptions using a newer version of flex, primarily
2058    for MacOSX.  However, the processed files are now only used when
2059    flex 2.5.9 or later is not available.
2060
2061  - Removed WCSLIB 2.x backwards-compatibility measures from lin.h,
2062    prj.h, prj.c, and sph.h.
2063
2064* Fortran wrappers
2065
2066  - (No substantive changes.)
2067
2068* PGSBOX
2069
2070  - Miscellaneous improvements to PGSBOX.
2071
2072* General
2073
2074  - Switched licensing to LGPL 3.0.
2075
2076  - In comment text, replaced use of the obsolete term "card" with
2077    "keyrecord" which consists of a "keyword", "keyvalue", and
2078    "keycomment".
2079
2080* Installation
2081
2082  - General improvements to the installation process: autoconf-related
2083    portability improvements, particularly relating to Fortran name
2084    mangling; makefile rules for building the shared library, for
2085    processing flex descriptions; don't rely on "." being in the PATH
2086    when running tests.
2087
2088
2089WCSLIB version 4.2 (2005/09/23)
2090-------------------------------
2091
2092* C library
2093
2094  - Brought the installation process under control of GNU autoconf,
2095    the top-level makefile now builds and tests everything, and the C
2096    library has a config.h in which WCS_INT64 is set.  Added an INSTALL
2097    file.
2098
2099  - Merged the FORTRAN, C and PGSBOX READMEs into one top-level README.
2100
2101  - Extensions for -TAB coordinate handling: in tabx2s() and tabs2x(),
2102    allow extrapolation by half a cell at either end of the index and
2103    coordinate tables; fits_read_wcstab() (in getwcstab.{h,c}) allows
2104    TDIMn to be omitted for 1-D lookup tables for which it has the form
2105    '(1,K)', i.e. describing a degenerate 2-D array; wcsprt() now prints
2106    the wtbarr structs in wcsprm.
2107
2108  - Bug fixes for -TAB coordinate handling: in tabx2s() and tabs2x()
2109    the incorrect indexing variable, m instead of i, was used for
2110    tab->crval[]; wcsp2s() and wcss2p() returned prematurely in the
2111    tabular coordinate loop; in wcstab(), removed an extraneous
2112    assignment to wtbp->kind for index arrays.
2113
2114  - In wcsp2s() and wcss2p(), elements of the stat[] vector that had
2115    been set were being reset incorrectly to zero.  The stat[] values
2116    are now set as flag bits for each coordinate element.
2117
2118  - Added cdfix() to the wcsfix() suite to fix erroneously omitted
2119    CDi_ja cards.
2120
2121  - PGSBOX is now compiled into a separate object library, and is
2122    installed alongside WCSLIB.
2123
2124  - Eliminated several instances of non-ANSI C library functions and
2125    header files and some residual K&R C usage.  The Sun C compiler
2126    complained about const int definitions of initializers used in
2127    variable declarations in some of the test programs; changed these
2128    to preprocessor macros.
2129
2130* Fortran wrappers
2131
2132  - Fixed handling of 64-bit integer keyvalues in keyget_().
2133
2134  - Fixed output formatting of 64-bit integer keyvalues in tfitshdr.f.
2135
2136  - Fixed minor syntax errors in twcsfix.f and tpih1.f reported by the
2137    Sun Fortran compiler.
2138
2139  - The output of each test program now identifies the source file.
2140
2141* PGSBOX
2142
2143  - (No substantive changes.)
2144
2145
2146WCSLIB version 4.1 (2005/08/31)
2147-------------------------------
2148
2149* C library
2150
2151  Summary of added functionality:
2152
2153  - -TAB coordinate axes are now fully implemented in the WCSLIB driver
2154    functions (in wcs.{h,c}); multiple -TAB axes are supported.  A new
2155    function, wcstab(), which is automatically invoked by wcspih(),
2156    parses -TAB-related header cards and sets up structs for a separate
2157    routine that reads the necessary arrays from a FITS binary table
2158    extension.
2159
2160    An implementation of this routine in CFITSIO, fits_read_wcstab(),
2161    is provided.  Note however that the interface of this function is
2162    experimental, and the code itself must be considered beta-release in
2163    WCSLIB 4.1.
2164
2165  - Units specifications, either from CNAMEia or inline comments (with
2166    brackets), of arbitrary complexity are now fully implemented via a
2167    parser, wcsulex(), and converter, wcsunits().  This is invoked
2168    automatically by wcsset().
2169
2170  - Translators for non-standard WCS constructs are provided.  These
2171    cover date formats, units specifications, defunct celestial
2172    projection types, AIPS spectral axis types, and the repair of
2173    malformed cylindrical coordinate systems.
2174
2175  - wcspih() now has options to remove the WCS cards it has processed
2176    from the header and a new generic FITS header parser, fitshdr(), may
2177    be used to parse the remaining non-WCS cards.  In addition to the
2178    more basic types, it handles 64-bit and 'very long' (70 digit)
2179    integer keyvalues, and also continued string keyvalues.  It also
2180    does keyword matching and extracts units specifications in inline
2181    comments.
2182
2183  - -LOG coordinates are now implemented independently of spectral
2184    coordinate types.  Multiple -LOG axes are supported.
2185
2186  - New function wcssptr() translates the spectral axis in a wcsprm
2187    struct to the required type.
2188
2189  - The README file now gives an introduction to, and complete overview
2190    of, WCSLIB.  It provides a point of entry to programming with
2191    WCSLIB.  Complete descriptions and usage notes for all functions are
2192    contained in the header files.
2193
2194  - The FORTRAN wrappers and test programs are now completely up-to-date
2195    with respect to the C implementation.
2196
2197  - All code, including the FORTRAN wrappers, PGSBOX, and all test
2198    programs, now pass 'purify' without memory leaks, uninitialized
2199    memory reads, memory access violations, or other memory faults.
2200
2201  Change notes:
2202
2203  - Added options to wcspih() to remove WCS cards from the input header
2204    leaving only non-WCS cards behind.  Modified test programs tpih1.c
2205    and tpih2.c to use CFITSIO optionally via preprocessor macro
2206    DO_CFITSIO.
2207
2208  - New function wcstab() in wcshdr.{h,c} parses -TAB-related header
2209    cards and sets up structs for a separate routine that reads the
2210    necessary arrays from a FITS binary table extension.  New
2211    test/demo program twcstab.c using header defined in wcstab.cards.
2212
2213  - CFITSIO implementation, fits_read_wcstab() in getwcstab.{h,c}, of a
2214    function, independent of WCSLIB, for extracting arrays from a binary
2215    table as required in constructing -TAB coordinates.
2216
2217  - New units specification parser, wcsulex() in wcsunits.h and
2218    wcsulex.l, and converter, wcsunits() in wcsunits.{h,c}.  New
2219    test/demo program tunits.c.
2220
2221  - New parser for non-standard units specifications, wcsutrn() in
2222    wcsunits.h and wcsutrn.l, also tested by tunits.c.
2223
2224  - New functions datfix(), unitfix() (which applies wcsutrn()),
2225    celfix(), and spcfix() join cylfix() in wcsfix.{h,c} to translate
2226    various forms of non-standard or quasi-standard FITS WCS keyvalues
2227    in a wcsprm struct.  wcsfix() applies all of these in sequence.
2228    New test/demo program twcsfix.c, with wcsfix() also now invoked by
2229    tpih1.c.
2230
2231  - New generic FITS header parser, fitshdr() in fitshdr.{h,l}.  New
2232    test/demo program tfitshdr.c uses wcs.cards with extra non-WCS
2233    cards added.
2234
2235  - -LOG coordinates are now treated as a coordinate type separate from
2236    spectral coordinates, implemented via log.{h,c} and test program
2237    tlog.c.  The logarithmic functions were removed from spx.{h,c}, and
2238    spc.c.
2239
2240  - Extensive changes to wcs.{h,c} to support multiple -TAB and -LOG
2241    coordinate axes and units conversion.  Substantially changed the
2242    test program, twcs.c, to test the more general functionality.
2243
2244  - New function wcssptr() in wcs.{h,c} translates the spectral axis in
2245    a wcsprm struct.
2246
2247  - Added DATE-AVG to wcsprm.  Also ntab, tab, nwtb, and wtb required
2248    for -TAB implementation.  Define struct wtbarr.
2249
2250  - Added a types[] member to the wcsprm struct to identify axis
2251    coordinate types using a four-digit code.
2252
2253  - Use memset() in wcsini() to null-fill character arrays in the wcsprm
2254    struct so that they don't appear to be padded with garbage when
2255    displayed by gdb.
2256
2257  - Do alias translation for AIPS-convention spectral types in wcsset()
2258    using spctyp().  If wcsset() finds a CTYPEia in "4-3" form with an
2259    unrecognized algorithm code it now returns an error rather than
2260    assume that it's a linear axis.  wcsset() now also resets lonpole
2261    and latpole to the values actually used.
2262
2263  - Modified spctyp() to translate AIPS-convention spectral ctypes, and
2264    modified the argument list to return the parsed spectral type and
2265    algorithm code.  The return arguments will not be modified if
2266    CTYPEia is not a valid spectral type; zero-pointers may be specified
2267    for any that are not of interest.  Removed the external const
2268    variables, spc_codes and spc_ncode, as their function is now
2269    fulfilled by spctyp().
2270
2271  - Fixed a bug in spctrn() in resolving ctypeS2 wildcarding.
2272
2273  - Added latpreq member to the celprm struct, set by celset() to
2274    indicate how LATPOLE is used.  Augmented tcel2.c to report it.
2275
2276  - New function tabmem() in tab.{h,c} takes control of user-allocated
2277    memory.
2278
2279  - tabini() allows K == 0 and also K[m] == 0 to initialize partially
2280    the tabprm struct (for wcstab()).  It now does fine-grained
2281    bookkeeping of memory allocation for the index arrays and allocates
2282    each individually.  tabprm.index[] == 0x0 is recognized as default
2283    indexing in tabset(), tabx2s() and tabs2x().
2284
2285  - The *prt() functions report parameters to an extra decimal place.
2286
2287  - tabprt() prints the array index for elements of the coordinate and
2288    index vectors.
2289
2290  - Set the 0th element in all *_errmsg arrays to "Success".
2291
2292  - Extracted string utility functions used by WCSLIB into
2293    wcsutil.{h,c}.
2294
2295  - Removed support for K&R C.
2296
2297* Fortran wrappers
2298
2299  - The FORTRAN wrappers and test programs are now completely up-to-date
2300    with respect to the C implementation.
2301
2302  - New include files, wrappers, and test programs:
2303    fitshdr.inc, fitshdr_f.c, getwcstab.inc, getwcstab_f.c, log.inc,
2304    log_f.c, sph.inc, tab.inc, tab_f.c, tfitshdr.f, tlog.f, ttab1.f,
2305    ttab2.f, ttab3.f, tunits.f, twcsfix.f, twcstab.f, wcsfix.inc,
2306    wcsfix_f.c, wcsunits.inc, wcsunits_f.c.
2307
2308  - Updates to reflect changes to the C library and test programs:
2309    cel.inc, cel_f.c, prj.inc, spc.inc, spc_f.c, spx.inc, spx_f.c,
2310    tlin.f, tpih1.f, tpih2.f, tprj1.f, tprj2.f, tspc.f, tsph.f, tspx.f,
2311    twcs.f, twcsmix.f, twcssub.f, wcs.inc, wcs_f.c, wcshdr.inc,
2312    wcshdr_f.c.
2313
2314  - Added *_ERRMSG arrays containing status messages to all include
2315    files.
2316
2317  - Removed support for K&R C.
2318
2319* PGSBOX
2320
2321  - Fixed a subtle though benign memory fault identified by 'purify'.
2322
2323  - Reset LATPOLE in the COE example in cpgtest.f when drawing the
2324    second (native) grid because it will have been set to a non-default
2325    value by wcsset() when the first grid was drawn; set wcs.flag to -1
2326    before wcsinit() and call wcsfree() at the end.  Similarly for
2327    pgtest.f.
2328
2329
2330WCSLIB version 4.0 (2005/02/07)
2331-------------------------------
2332
2333* C library
2334
2335  - Implemented tabular coordinates (-TAB).  New files: tab.h and tab.c,
2336    and test programs ttab[123].c.  These have not been incorporated
2337    into the higher-level (wcs.h) functions at this stage.
2338
2339  - New spectral functions: spchek() checks a spectral algorithm code
2340    for legitimacy; from the spectral keywords given, spcspx() derives
2341    the corresponding CRVALi and CDELTi keywords for the underlying P-,
2342    and X-type spectral coordinates; spcxps() does the opposite;
2343    spctrn() combines spcspx() and spcxps() to translate one set of
2344    spectral keywords into another, e.g.  'FREQ' -> 'ZOPT-F2W'.
2345
2346  - Implemented the HEALPix (HPX) projection in the prj functions.
2347
2348  - Added a new function, wcsidx(), to return an array that indexes the
2349    alternate coordinate descriptions found by wcspih() (suggested by
2350    Bill Pence, NASA/Goddard).  Modified tpih1.c to exercise it.
2351
2352  - In wcsp2s() and wcss2p(), check that nelem equals or exceeds
2353    wcs.naxis; emphasised this in the usage notes for these functions
2354    in tab.h (suggested by Bill Pence, NASA/Goddard).
2355
2356  - Moved the macros used for UNDEFINED values and the corresponding
2357    macro test function, undefined(), to wcsmath.h for general use.
2358    Previously, UNDEFINED values were only used internally, but they are
2359    now visible in some of the structs, particularly values of undefined
2360    auxiliary header cards in the wcsprm struct.
2361
2362  - Remove const from the double args in the specx() prototype in spx.h
2363    to match the definition in spx.c (reported by Bryan Irby,
2364    NASA/Goddard).
2365
2366  - Fixed the interaction between the FLAVOUR and PGPLOTLIB definitions
2367    in the C and FORTRAN Makefiles by introducing a separate variable,
2368    DO_PLOTS, to control whether to exercise test programs that require
2369    PGPLOT (reported by Bill Pence, NASA/Goddard).
2370
2371* Fortran wrappers
2372
2373  - New wrapper defined in wcshdr_f.c: wcsidx_().  Modified test program
2374    tpih1.f to use it.
2375
2376* PGSBOX
2377
2378  - (No substantive changes.)
2379
2380* General
2381
2382  - Changed the copyright notice in all library routines from LGPL to
2383    GPL as recommended by the FSF (http://www.gnu.org/licenses/why-not-
2384    lgpl.html).
2385
2386* Installation
2387
2388  - General improvements to the installation process: fixed the
2389    interaction between the FLAVOUR and PGPLOTLIB definitions in the
2390    Makefile by introducing a separate variable, DO_PLOTS, to control
2391    whether to exercise test programs that require PGPLOT (reported by
2392    Bill Pence, NASA/Goddard).  Added an "install" target to the
2393    Makefile.
2394
2395
2396WCSLIB version 3.6 (2004/08/25)
2397-------------------------------
2398
2399* C library
2400
2401  - New service routine, wcssub() extracts the coordinate description
2402    for a subimage from a wcsprm struct.  wcscopy() is now implemented
2403    as a preprocessor macro that invokes wcssub().  New test program,
2404    twcssub.c, tests wcssub().
2405
2406  - In wcspih():
2407
2408    1) Fixed handling of string-valued keywords where the inline comment
2409       contains a single-quote character (').
2410
2411    2) Fixed the address arithmetic for EPOCH and VELREF.
2412
2413    3) Translate VSOURCEa into ZSOURCEa if required.
2414
2415    4) Recognize SSYSSRCa.
2416
2417    5) Support free-format string keyvalues, as well as integer and
2418       floating-point keyvalues; documented this in the prologue of
2419       wcshdr.h.
2420
2421    6) Allow header cards without inline comments.
2422
2423    7) Fixed function prototyping in wcspih.l (i.e. ANSI and non-ANSI
2424       forms were potentially mixed).
2425
2426    8) Catch an unhandled newline character on the END card that was
2427       echoed to stdout.
2428
2429    9) In error messages, print "ERROR" (uppercase) - POSIX standard.
2430
2431  - Modified wcs.cards to explain and test free-format keyvalues, and
2432    also augmented the inline comment on illegal WCS cards that are to
2433    be rejected, and WCS-like cards to be discarded.  Added a header
2434    card with no inline comment.
2435
2436  - Removed vsource from the wcsprm struct and added ssyssrc.
2437
2438  - In wcsini(), fixed a problem with memory management for wcs.pv when
2439    NPVMAX is zero; likewise for wcs.ps and NPSMAX.
2440
2441  - In wcsprt(), don't print auxiliary coordinate system information in
2442    arrays with zero address.
2443
2444  - In wcss2p(), status == 9 (one or more invalid world coordinates) was
2445    not returned appropriately.
2446
2447  - Renamed twcs1.c to twcs.c, and twcs2.c to twcsmix.c.
2448
2449  - "Error status/code/number" is now referred to consistently as the
2450    "status return value".
2451
2452  - Some vestiges of K&R C were removed: preprocessor definition of
2453    const, and K&R function prototypes.
2454
2455* Fortran wrappers
2456
2457  - New wrapper defined in wcs_f.c: wcssub_().  New test program,
2458    twcssub.f.
2459
2460  - Renamed twcs1.f to twcs.f, and twcs2.f to twcsmix.f.
2461
2462* PGSBOX
2463
2464  - (No substantive changes.)
2465
2466* Installation
2467
2468  - Worked over the C, FORTRAN, and PGSBOX makefiles, in particular to
2469    make them all consistent.
2470
2471
2472WCSLIB version 3.5 (2004/06/28)
2473-------------------------------
2474
2475* C library
2476
2477  - WCSLIB now provides a function, wcspih() implemented as a Flex
2478    description, that parses a FITS image header, either that of a
2479    primary HDU or an image extension.  Given a character array
2480    containing the header it identifies and reads all WCS cards for
2481    the primary coordinate description and up to 26 alternate
2482    descriptions and returns this information as an array of wcsprm
2483    structs.  A service routine, wcsvfree(), is provided to free the
2484    memory allocated by wcspih().  The relevant header file for these
2485    functions is wcshdr.h.
2486
2487    Test programs, tpih1 and tpih2, are provided to verify wcspih.  The
2488    first simply prints the contents of the structs using wcsprt().  The
2489    second uses cpgsbox() to draw coordinate graticules.  A FITS WCS
2490    test header has been developed to provide input to these test
2491    programs.  It is implemented as a list of card images, wcs.cards,
2492    one card per line, together with a program, tofits, that compiles
2493    these into a valid FITS file.  tpih1 uses its own code to read this,
2494    whereas tpih2 uses the fits_hdr2str() function from CFITSIO.
2495
2496  - Removed twcsprt, tpih exercises wcsprt() much more thoroughly than
2497    twcsprt ever did.  Modified twcs1 to print the size of the various
2498    structs as twcsprt used to.
2499
2500  - Although they are not used in any coordinate calculations, the
2501    wcsprm struct now provides data members for storing all of the
2502    auxiliary FITS WCS header cards defined in Papers I, II, and III,
2503    such as WCSNAMEa, EQUINOXa, and CNAMEia.  Members are also provided
2504    for storing the alternate descriptor code (the "a" in CTYPEia), and
2505    the binary table column number.  These are supported by the high
2506    level WCSLIB routines, wcsini(), wcscopy(), wcsfree(), and wcsprt().
2507    Refer to wcs.h for details.
2508
2509  - The number of PVi_ma cards for which wcsini() allocates memory is
2510    now set by a global variable, NPVMAX (previously a C-preprocessor
2511    macro).  This defaults to 64 but may be changed by a new function,
2512    wcsnpv().  The wcsprm struct contains a new member, npvmax, that
2513    records the value of this number at the time the struct was
2514    initialized.  This is in addition to npv which records the actual
2515    number of cards that were encountered.
2516
2517    Similarly, NPSMAX (default 8) is used for the number of PSi_ma
2518    cards, and it may be changed via wcsnps().
2519
2520    The axis number, i, in the pvcard struct used for storing PVi_ma
2521    cards may now be set to 0 to indicate the latitude axis.
2522
2523  - calloc() is now used in place of malloc() in allocating memory for
2524    arrays, and inclusion of malloc.h has been replaced with stdlib.h
2525    for all platforms.
2526
2527    wcsfree() checks that wcs.flag != -1 before testing wcs.m_flag when
2528    freeing memory allocated by wcsini() in case the struct is
2529    uninitialized.  Similarly for linfree().
2530
2531  - In prj.h, renamed C-preprocessor macros INI, PRT, SET, X2S and S2X
2532    to PRJINI, PRJPRT, PRJSET, PRJX2S and PRJS2X to reduce the
2533    likelihood of namespace clashes.  Similarly in spc.h.
2534
2535    Also, in prj.c, changed the name of helper routine offset() to
2536    prjoff() to reduce the likelihood of global namespace conflicts.
2537
2538  - In line with bonx2s() and bons2x(), bonset() now recognizes the
2539    equatorial case of Bonne's projection as Sanson-Flamsteed, mainly so
2540    that the auxiliary information in the prjprm struct more accurately
2541    reflects the truth.  Modified tcel2 to exercise this by using an
2542    equatorial Bonne projection in place of the Hammer-Aitov.
2543
2544  - zpns2x() used prj.w[0] for bounds checking, though this had not been
2545    set by zpnset() for polynomials of degree N < 3.  Consequently,
2546    bounds checking for N < 3 was unreliable (reported by David Berry,
2547    STARLINK).
2548
2549  - Changed some variable names in tscs2x(), cscx2s(), cscs2x(),
2550    qscx2s(), and qscs2x() to match Paper II, and likewise changed some
2551    inequality tests in qscs2x() without changing the results.
2552
2553  - Minor tidying up of output formatting in prjprt().
2554
2555  - Added the alternate version code to FITS WCS keywords mentioned in
2556    comments, e.g. CTYPEi changed to CTYPEia.
2557
2558* Fortran wrappers
2559
2560  - New wrappers defined in wcshdr_f.c: wcspih_() and wcsvfree_(), and
2561    also a new service function, wcsvcopy_().
2562
2563    New test programs, TPIH1 and TPIH2, being analogues of tpih1 and
2564    tpih2.  Removed TWCSPRT.
2565
2566  - In wcs_f.c, new wrappers wcsnpv_() and wcsnps_(); modified wcsput_()
2567    and wcsget_() to handle new members of the wcsprm struct.  Also
2568    modified wcsput_() to null-fill all char[] members of the wcsprm
2569    struct, and likewise wcsget_() to blank-fill them.
2570
2571  - Modified wcs.inc to support changes to the wcsprm struct.
2572
2573* PGSBOX
2574
2575  - In PGSBOX, increased the dimension of the WORLD and XY vectors from
2576    2 to 9 to accomodate higher-dimensional coordinate representations
2577    of up to 9 elements.  Similarly for pgwcsl().  The assumption
2578    (presently) is that the first two world, and pixel, coordinate
2579    elements are the relevant ones; the others are all set to zero when
2580    pgwcsl() initializes and otherwise ignored.
2581
2582    Assigned some variables in DATA to stop compiler messages about
2583    uninitialized variables.
2584
2585  - Generalized the Makefile, bringing it into line with the WCSLIB
2586    Makefile, and adding separate targets for compiling and running the
2587    test programs.  The default target now simply compiles pgsbox.c and
2588    cpgsbox.c.  A separate target compiles pgwcsl.c and inserts it into
2589    ../C/libwcs.a.
2590
2591
2592WCSLIB version 3.4 (2004/02/11)
2593-------------------------------
2594
2595* C library
2596
2597  - In aitx2s(), apply the boundary condition 0.5 <= Z^2 <= 1 given
2598    after Eq. (109) in WCS Paper II to detect outlying pixels.
2599
2600  - Fixed several special-case bugs in celset():
2601
2602    1) For theta_0 = 90, in substituting the default value for phi_p
2603       (LONPOLE),
2604
2605       a) for the special case when delta_0 = 90, celset() provided the
2606          wrong value (180 instead of 0),
2607
2608       b) celset() neglected to add phi_0 (normally 0).
2609
2610    2) For theta_0 != 90,
2611
2612       a) for the special case when delta_0 = -90, celset() incorrectly
2613          computed delta_p (as theta_0 instead of -theta_0),
2614
2615       b) for the special case when delta_p = +90 (or -90), celset()
2616          neglected to subtract (or add) phi_0 (normally 0).
2617
2618    3) For |delta_0| = 90, celset() incorrectly allowed the particular,
2619       invalid, value of phi_p (LONPOLE) that put the other pole at the
2620       fiducial point.
2621
2622    4) For theta_0 = 0, delta_0 = 0 LATPOLE determines delta_p
2623       completely.  For LATPOLE > 90 celset() now sets delta_p to 90,
2624       and for LATPOLE < -90 it sets it to -90.
2625
2626  - Additional refinements in celset():
2627
2628    1) cel->ref[2] is normalized in the range [-180,180].
2629
2630    2) Account for rounding error in the computation of delta_p.
2631
2632  - sphx2s() and sphs2x() incorrectly handled the "change in the origin
2633    of longitude" special case that arises when delta_p = -90, in the
2634    even more restrictive case where |theta| = 90 also; it applied
2635    Eq. (3) instead of Eq. (4) of Paper II.
2636
2637  - Added a new test program, tcel2.c, to exercise celset() more
2638    thoroughly.  Renamed the original tcel.c to tcel1.c and modified the
2639    Makefile to suit.
2640
2641* Fortran wrappers
2642
2643  - (No changes.)
2644
2645* PGSBOX
2646
2647  - (No substantive changes.)
2648
2649
2650WCSLIB version 3.3 (2003/10/21)
2651-------------------------------
2652
2653* C library
2654
2655  - In celset(), the default value for phi_p (LONPOLE) is
2656
2657       phi_p = phi_0 + ((delta_0 < theta_0) ?  180.0 : 0.0)
2658
2659    Previously phi_0 (which is normally zero) was not added (reported by
2660    David Berry, STARLINK).
2661
2662  - wcsprt() and linprt() now check that the structs have been
2663    initialized.
2664
2665  - In wcsini(), when the wcsprm flag is -1 also set the linprm flag to
2666    -1 to force initialization of the memory managed by linset().
2667
2668  - wcsset() now explicitly initializes the celprm and spcprm structs
2669    via celini() and spcini().
2670
2671  - Fixed syntax errors in the macro definitions of linrev_errmsg and
2672    linfwd_errmsg.
2673
2674  - In Makefile, added the -ansi option to gcc to force it to behave
2675    like a strict ANSI C compiler, specifically in setting the __STDC__
2676    preprocessor macro.
2677
2678* Fortran wrappers
2679
2680  - (No changes.)
2681
2682* PGSBOX
2683
2684  - PGSBOX now recognizes status returns -1, -2, and -3 from NLFUNC for
2685    opcodes +2 and +1 which cause it to accept the returned (x,y)
2686    coordinates but not consider them as one end of a crossing segment
2687    for labelling world coordinate 1, 2, or both.
2688
2689  - PGSBOX now takes care not to lose vertical tick marks (and hence
2690    labels) at the left or right edge of the frame.  Likewise for
2691    horizontal tick marks at the top or bottom edge of the frame.
2692
2693  - Tightened up the test in PGSBOX for cycles in angle to catch the
2694    case where the coordinate value spans a full 360 degrees.
2695
2696  - PGSBOX will no longer accept frame crossings that are too oblique;
2697    floating point rounding errors may cause grid lines that should
2698    otherwise track along the frame to weave down it from side-to-side
2699    resulting in spurious crossing points.
2700
2701  - Fixed a bug in pgwcsl_() for processing simple linear coordinates.
2702
2703  - pgwcsl_() now returns error -2 if the latitude is outside -90 to +90
2704    for opcodes +2 and +1.
2705
2706  - Amended the translation of status return codes from WCSLIB in
2707    pgwcsl_().
2708
2709  - Provided a header file for pgwcsl_() (mainly for C++ usage).
2710
2711  - Added extra test plots to PGTEST and cpgtest.
2712
2713  - Added extra functionality to the Makefile.
2714
2715
2716WCSLIB version 3.2 (2003/09/09)
2717-------------------------------
2718
2719* C library
2720
2721  - Added the facility of setting the flag member of a wcsprm struct to
2722    -1 before calling wcsini() for the first time in order to initialize
2723    memory management.  Likewise for linprm and linini().
2724
2725  - Renamed wcscpy() to wcscopy() to avoid a conflict with the Posix
2726    "wide character string" function of the same name (wchar.h).  In
2727    particular, this is used by the GNU C++ string class.
2728
2729  - The higher level functions (wcs, cel, spc) no longer return
2730    prematurely if some of the input coordinate values are invalid.
2731
2732  - All functions now test whether a null pointer for the particular
2733    struct (wcsprm, celprm, etc.) has been passed to them.
2734
2735  - Function return codes have been rationalized into a consistent set
2736    within each of the wcs, cel, lin, prj, spc, and spx suites of
2737    functions.  Error messages to match these error codes are now
2738    encoded in a single character array, e.g. wcs_errmsg and prj_errmsg,
2739    instead of a separate array for each function.  Macro definitions
2740    for the older character arrays (e.g. wcsini_errmsg) have been
2741    provided for backward compatibility.
2742
2743  - Declared prj_stat as extern in prj.h.
2744
2745* Fortran wrappers
2746
2747  - (No changes.)
2748
2749* PGSBOX
2750
2751  - Added an ENTRY point, PGLBOX, that provides a simplified interface
2752    to PGSBOX for linear axes without having to specify an NLFUNC or the
2753    associated parameters.
2754
2755
2756WCSLIB version 3.1 (2003/04/29)
2757-------------------------------
2758
2759* C library
2760
2761  - Added "global" and "divergent" prjprm struct informational members
2762    to record whether the projection is capable of mapping the whole
2763    sphere, and whether it is divergent in latitude.
2764
2765  - Function cylfix() provided to fix WCS FITS header cards for
2766    malformed cylindrical projections (c.f. Paper II, Sect. 7.3.4).
2767
2768  - Added support for CUNITi cards to wcsprm (but not currently
2769    implemented).
2770
2771  - Added macro implementations of the trigd functions to wcstrig.h,
2772    enabled if WCSTRIG_MACRO is defined.
2773
2774  - Improved printing of the WCSLIB structs.
2775
2776  - Added macro definitions for the lengths of the WCSLIB structs
2777    measured in sizeof(int) units (mainly for the FORTRAN wrappers).
2778
2779* Fortran wrappers
2780
2781  - FORTRAN is now supported via a set of wrappers on the C library.
2782    Refer to the README file.
2783
2784* PGSBOX
2785
2786
2787
2788WCSLIB version 3.0 beta release (2003/04/01)
2789--------------------------------------------
2790
2791* C library
2792
2793  - Fully vectorized function interfaces (C preprocessor macros are
2794    available to implement the scalar interfaces of the proj.c, sph.c,
2795    and lin.c routines from WCSLIB 2.x).
2796
2797  - Implementation of Paper II, Sect. 2.5: User-specified
2798    (phi0, theta0).
2799
2800  - Implementation of Paper III (excluding "-TAB").
2801
2802  - Memory management is now implemented in the upper-level (wcs.c)
2803    routines.
2804
2805  - New extensible design should accomodate Paper IV (and any other)
2806    without further change to the function interfaces.
2807
2808* PGSBOX
2809
2810  - Added a C wrapper function, cpgsbox(), and C test/demo program,
2811    cpgtest, that duplicates PGTEST and serves as a C coding template.
2812
2813  - Added calendar date axes.
2814
2815  - Sped up the max/min search - if only tickmarks are required there is
2816    no need to search the interior of the image.
2817
2818  - Return margin widths in CACHE(,NC).
2819
2820  - Fixed a buglet that caused ticks at the frame edges to be skipped.
2821
2822  - Return error 3 if CACHE overflows.
2823
2824  - Adapted PGWCSL for WCSLIB 3.x - it is now a C function (for
2825    interfacing to WCSLIB) with a FORTRAN-like interface (for PGSBOX).
2826
2827
2828WCSLIB version 2.9 (2002/04/03)
2829-------------------------------
2830
2831* C library
2832
2833  - Fixed a bug with alias translation in wcsset().
2834
2835  - Added a conditional compilation directive to lin.c for Apple's
2836    MacOSX.
2837
2838* Fortran library
2839
2840  - Fixed CUBEFACE handling in WCSSET.
2841
2842
2843WCSLIB version 2.8 (2001/11/16)
2844-------------------------------
2845
2846* C library
2847
2848  - Added support for the SZP projection with szpset(), szpfwd() and
2849    szprev(), and generalized AZP with support for the tilt parameter,
2850    gamma.
2851
2852  - Added phi0 to the prjprm struct, this is set by the projection
2853    initialization routines along with theta0.
2854
2855  - Fixed a problem in wcsmix() caused by numerical imprecision that
2856    could cause it not to recognize when convergence was reached; break
2857    out of the loop early if a discontinuity is detected.
2858
2859  - Clarified the usage of vspan in the prologue to wcsmix().
2860
2861  - Fixed comments relating to LATPOLE in the prologue to cel.c and
2862    tcel.c, and replaced references to LONGPOLE with LONPOLE.
2863
2864  - Augmented the error reports in twcs2.
2865
2866  - Modified projex() in tproj1 and prjplt() in tproj2 to make use of
2867    the information stored in the prjprm struct.
2868
2869* Fortran library
2870
2871  - Added support for the SZP projection with SZPSET, SZPFWD and SZPREV,
2872    and generalized AZP with support for the tilt parameter, gamma.
2873
2874  - Changed the call sequence to PRJSET to return PHI0 along with
2875    THETA0.
2876
2877  - Fixed a problem in WCSMIX caused by numerical imprecision that could
2878    cause it not to recognize when convergence was reached; break out of
2879    the loop early if a discontinuity is detected.
2880
2881  - Clarified the usage of VSPAN in the prologue to WCSMIX.
2882
2883  - Fixed comments relating to LATPOLE in the prologue to CEL and TCEL,
2884    and replaced references to LONGPOLE with LONPOLE.
2885
2886  - Augmented the error reports in TWCS2.
2887
2888  - Modified PROJEX in TPROJ1 and PRJPLT in TPROJ2 to use the generic
2889    driver routines PRJSET, PRJFWD and PRJREV.  PRJPLT also now uses the
2890    projection type encoded in PRJ(11).
2891
2892
2893WCSLIB version 2.7 (2001/02/19)
2894-------------------------------
2895
2896* C library
2897
2898  - Added generic driver routines prjset(), prjfwd() and prjrev().
2899    These invoke specific projection routines via the pointer-to-
2900    function elements, prjfwd and prjrev, transferred to the prjprm
2901    struct from celprm.
2902
2903  - Added code (3-letter projection code) and theta0 (reference
2904    latitude) elements to prjprm.
2905
2906  - The projection code for the Sanson-Flamsteed projection is now SFL.
2907    The upper-level routines, wcsset(), wcsfwd(), and wcsrev(),
2908    recognize GLS as an alias for this.
2909
2910  - wcsset() now recognizes 'xyLN/xyLT' axis pairs.
2911
2912  - Two bugs in the translation from NCP to SIN in wcsfwd() and wcsrev()
2913    were fixed: (1) the projection parameter was computed incorrectly
2914    and (2) they did not honour prj->flag set to -1 to disable strict
2915    bounds checking.
2916
2917  - A bug in wcsmix() was fixed - it was relying on the wcsprm struct to
2918    have been initialized beforehand.
2919
2920  - The test programs now use the cpgplot interface to PGPLOT, the old
2921    tpgc.c and tpgf.f wrappers have been removed.
2922
2923* Fortran library
2924
2925  - Added generic driver routines PRJSET, PRJFWD and PRJREV.  These are
2926    keyed to specific projection routines via the value of PRJ(11) which
2927    now differs for each projection.
2928
2929  - The projection code for the Sanson-Flamsteed projection is now SFL.
2930    The upper-level routines, WCSSET, WCSFWD, and WCSREV, recognize GLS
2931    as an alias for this.
2932
2933  - WCSSET now recognizes 'xyLN/xyLT' axis pairs.
2934
2935  - A bug in the translation from NCP to SIN in WCSFWD and WCSREV was
2936    fixed; they did not honour PRJ(11) set to -1 to disable strict
2937    bounds checking.
2938
2939  - A bug in WCSMIX was fixed - it was relying on the WCS array to have
2940    been initialized beforehand.
2941
2942
2943WCSLIB version 2.6 (2000/05/10)
2944-------------------------------
2945
2946* C library
2947
2948  - Check for invalid (x,y) in zearev().
2949
2950  - In wcsmath.h, guard against prior definition of PI and other
2951    preprocessor variables.
2952
2953* Fortran library
2954
2955  - Check for invalid (X,Y) in ZEAREV.
2956
2957  - Declare COSD and SIND in WCSFWD and WCSREV, reported by Clive Page
2958    (cgp@star.le.ac.uk).
2959
2960
2961WCSLIB version 2.5 (1999/12/14)
2962-------------------------------
2963
2964* C library
2965
2966  - Added copyright notice to header files and prefixed include guard
2967    names with "WCSLIB_".
2968
2969  - Fixed cube face handling in wcsfwd() and wcsrev() (reported by
2970    Doug Mink, CfA).  Allow more general face layout in the inverse
2971    quadcube projections.
2972
2973  - Fixed the problem in wcsmix() where it failed to find a valid
2974    solution when the solution point lay at a native pole of a
2975    projection in which the pole is represented as a finite interval.
2976    However, wcsmix() will only ever return one solution even when two
2977    or more valid solutions may exist.
2978
2979  - wcsmix() now accepts viter in the range 5 - 10, the specified value
2980    will be pushed up or down into this range if necessary.
2981
2982  - The projection routines for AZP, TAN, SIN, ZPN, and COP now return
2983    error 2 if (phi,theta) correspond to the overlapped (far) side of
2984    the projection.  This strict bounds checking can be switched off by
2985    setting prj->flag to -1 (rather than 0) when the projections are
2986    initialized.
2987
2988  - The upper level routines, wcsset(), wcsfwd(), wcsrev(), and
2989    wcsmix(), now recognize the NCP projection and convert it to the
2990    equivalent SIN projection.  The lower level routines do not
2991    recognize NCP.
2992
2993  - Extracted definitions of mathematical constants (PI etc.) from
2994    proj.h into wcsmath.h in order to avoid conflicts with their
2995    definition in math.h in some systems (such as Linux).
2996
2997  - Describe the two alternate representations of the quadcube
2998    projections (i.e. faces laid out or stacked) in the prologue of
2999    wcs.c.
3000
3001* Fortran library
3002
3003  - Fixed cube face handling in WCSFWD and WCSREV, reported by Doug Mink
3004    (dmink@cfa.harvard.edu).  Allow more general face layout in the
3005    inverse quadcube projections.
3006
3007  - Fixed the problem in WCSMIX where it failed to find a valid solution
3008    when the solution point lay at a native pole of a projection in
3009    which the pole is represented as a finite interval.  However, WCSMIX
3010    will only ever return one solution even when two or more valid
3011    solutions may exist.
3012
3013  - WCSMIX now accepts VITER in the range 5 - 10, the specified value
3014    will be pushed up or down into this range if necessary.
3015
3016  - The projection routines for AZP, TAN, SIN, ZPN, and COP now return
3017    error 2 if (phi,theta) correspond to the overlapped (far) side of
3018    the projection.  This strict bounds checking can be switched off by
3019    setting PRJ(11) to -1 (rather than 0) when the projections are
3020    initialized.
3021
3022  - The upper level routines, WCSSET, WCSFWD, WCSREV, and WCSMIX, now
3023    recognize the NCP projection and convert it to the equivalent SIN
3024    projection.  The lower level routines do not recognize NCP.
3025
3026  - Describe the two alternate representations of the quadcube
3027    projections (i.e. faces laid out or stacked) in the prologue of
3028    wcs.f.
3029
3030
3031WCSLIB version 2.4 (1996/09/23)
3032-------------------------------
3033
3034* C library
3035
3036  - In sinrev(), cscrev(), qscrev(), and tscrev(), return error 2 if
3037    (x,y) do not lie within the perimeter of the projection.  In
3038    sinrev(), stop the computation of phi for the "synthesis" projection
3039    being applied to the pure "orthographic" case (reported by
3040    David Berry, STARLINK).
3041
3042  - (Internal change) Renamed variables l <-> m in the quadcube
3043    projections to accord with standard usage (and revised WCS draft
3044    paper).
3045
3046* Fortran library
3047
3048  - In SINREV, CSCREV, QSCREV, and TSCREV, return error 2 if (X,Y) do
3049    not lie within the perimeter of the projection.  In SINREV, stop the
3050    computation of PHI for the "synthesis" projection being applied to
3051    the pure "orthographic" case.  Reported by David Berry
3052    (dsb@ast.man.ac.uk).
3053
3054  - (Internal change) Renamed variables L <-> M in the quadcube
3055    projections to accord with standard usage (and revised WCS draft
3056    paper).
3057
3058  - (Internal change) Stopped PRJ(11) doing double service in any
3059    projection.  It is now set and tested for a specific magic value
3060    rather than simply being non-zero.
3061
3062
3063WCSLIB version 2.3 (1996/06/24)
3064-------------------------------
3065
3066* C library
3067
3068  - Fixed two bugs in zpnset().  The first led to an incorrect
3069    determination of the degree of the polynomial and would mainly have
3070    affected the efficiency of zpnrev().  The second affected the
3071    determination of the boundary of the projection but would only have
3072    been significant for projections with a point of inflection between
3073    9 and 10 degrees of the pole.  Reported by David Berry, STARLINK.
3074
3075  - Replaced usage of alloca() in lin.c with malloc() and free() for
3076    portability as suggested by Klaus Banse, ESO (kbanse@eso.org).
3077
3078  - Allow for C implementations that provide their own versions of
3079    cosd(), sind(), tand(), acosd(), asind(), atand(), and atan2d().
3080    From Klaus Banse, ESO (kbanse@eso.org).
3081
3082  - Implemented the CUBEFACE axis for quadcube projections.
3083
3084  - Made all function prototypes const-correct.
3085
3086  - Adapted the header files to C++ usage.
3087
3088  - Added a new test program, twcs1, to verify closure of wcsfwd() and
3089    wcsrev().  The old twcs test program is now called twcs2.
3090
3091  - Added external arrays of error messages indexed by function return
3092    value.  For example, extern const char *wcsmix_errmsg[] for
3093    wcsmix().  Messages for the many proj.c functions are in
3094    prjfwd_errmsg[], etc.
3095
3096* Fortran library
3097
3098  - Implemented the CUBEFACE axis for quadcube projections.
3099
3100  - Added a new test program, TWCS1, to verify closure of WCSFWD and
3101    WCSREV.  The old TWCS test program is now called TWCS2.
3102
3103
3104WCSLIB version 2.2 (1996/01/18)
3105-------------------------------
3106
3107* C library
3108
3109  - Amended the projection equations for the conics (COP, COD, COE, COO)
3110    and Bonne's projection (BON) to correctly handle southern hemisphere
3111    projections with PROJP1 < 0 (reported by Lindsay Davis, NOAO).
3112    Revised tproj1 and tproj2 to test such cases.
3113
3114* Fortran library
3115
3116  - Amended the projection equations for the conics (COP, COD, COE, COO)
3117    and Bonne's projection (BON) to correctly handle southern hemisphere
3118    projections with PROJP1 < 0 (reported by Lindsay Davis, NOAO).
3119    Revised TPROJ1 and TPROJ2 to test such cases.
3120
3121  - Increased the dimension of the WCS array from WCS(0:2) to WCS(0:3)
3122    to allow for future handling of the CUBEFACE keyword - WCS(3) will
3123    store an index to the CUBEFACE axis.  This affects the call
3124    sequences of WCSSET, WCSFWD, WCSREV, and WCSMIX.
3125
3126
3127WCSLIB version 2.1 (1995/11/17)
3128-------------------------------
3129
3130* C library
3131
3132  The main change of interest to programmers is that of changed argument
3133  lists for wcsfwd() and wcsrev() as described below.
3134
3135  - The WCS linear transformations are now implemented in WCSLIB,
3136    complete with matrix inverter.  The new files are lin.c, lin.h, and
3137    test program tlin.c.
3138
3139  - Given either the celestial longitude or latitude plus an element of
3140    the pixel coordinate a new routine, wcsmix(), solves for the
3141    remaining elements by iterating on the unknown celestial coordinate
3142    element using wcsfwd().
3143
3144  - The high level driver routines wcsfwd(), wcsrev(), and wcsmix() now
3145    apply the full WCS algorithm chain (except for pixel regularization
3146    table), including parsing the CTYPEn header cards and computing non-
3147    celestial elements of the world coordinate.  This required a change
3148    to their argument lists which now more closely reflect the sequence
3149    of algorithms applied.  A new routine, wcsset(), parses the CTYPEn.
3150
3151  - The high level driver routines of WCSLIB 1.0 are available as
3152    intermediate level drivers celset(), celfwd(), and celrev(), but
3153    note that their argument lists have been extended to return native
3154    coordinates.  The related struct is now called celprm instead of
3155    wcsprm.
3156
3157  - The reference point for conic projections is now at the midpoint of
3158    the standard parallels.  The FITS header cards PROJP1 and PROJP2 now
3159    give the half-sum (midpoint) and half-difference of the latitudes of
3160    the standard parallels; previously they gave the latitudes of the
3161    standard parallels themselves.  The change is reflected in this
3162    release of WCSLIB.
3163
3164  - A bug in celset() (formerly wcsset()) that misapplied WCS draft
3165    equations 7 has been fixed (thanks to Rick Ebert IPAC/JPL and
3166    Lindsey Davis, NOAO for reporting this).  This affected the
3167    computation of Euler angles for the celestial coordinate
3168    transformation for those projections that have their reference point
3169    away from the native pole.  In investigating this a deficiency with
3170    the formalism was discovered that led to the introduction of a
3171    LATPOLE FITS header card which may be used to disambiguate where
3172    CRVAL1, CRVAL2, and LONGPOLE do not uniquely determine the latitude
3173    of the native pole.  The celprm struct (formerly wcsprm) has been
3174    extended to accomodate LATPOLE.
3175
3176  - Default values of LONGPOLE and LATPOLE are now supported and their
3177    use is recommended where appropriate.
3178
3179  - Numerical precision was being lost near the native poles in the SIN,
3180    AIR, and QSC projections and this has been recovered (reported by
3181    Lindsey Davis, NOAO).  Floating underflows in CSC are now avoided.
3182
3183  - Numerical precision was also lost in certain circumstances in the
3184    spherical coordinate transformation routines and this has been
3185    fixed.
3186
3187  - The test programs have been enhanced in various ways and the library
3188    has been validated on an SGI machine using both 32-bit and 64-bit
3189    compilers.
3190
3191* Fortran library
3192
3193  The main change of interest to programmers is that of changed call
3194  sequences for WCSFWD and WCSREV as described below.
3195
3196  - The WCS linear transformations are now implemented in WCSLIB,
3197    complete with matrix inverter.  The new files are lin.f and test
3198    program tlin.f.
3199
3200  - Given either the celestial longitude or latitude plus an element of
3201    the pixel coordinate a new routine, WCSMIX, solves for the remaining
3202    elements by iterating on the unknown celestial coordinate element
3203    using WCSFWD.
3204
3205  - The high level driver routines WCSFWD, WCSREV, and WCSMIX now apply
3206    the full WCS algorithm chain (except for pixel regularization
3207    table), including parsing the CTYPEn header cards and computing non-
3208    celestial elements of the world coordinate.  This required a change
3209    to their call sequences which now more closely reflect the sequence
3210    of algorithms applied.  A new routine, WCSSET, parses the CTYPEn.
3211
3212  - The high level driver routines of WCSLIB 1.0 are available as
3213    intermediate level drivers CELSET, CELFWD, and CELREV, but note
3214    that their call sequences have been extended to return native
3215    coordinates.  The related parameter array is now called CEL instead
3216    of WCS.
3217
3218  - The reference point for conic projections is now at the midpoint of
3219    the standard parallels.  The FITS header cards PROJP1 and PROJP2 now
3220    give the half-sum (midpoint) and half-difference of the latitudes of
3221    the standard parallels; previously they gave the latitudes of the
3222    standard parallels themselves.  The change is reflected in this
3223    release of WCSLIB.
3224
3225  - A bug in CELSET (formerly WCSSET) that misapplied WCS draft
3226    equations 7 has been fixed (thanks to Rick Ebert IPAC/JPL and
3227    Lindsey Davis, NOAO for reporting this).  This affected the
3228    computation of Euler angles for the celestial coordinate
3229    transformation for those projections that have their reference point
3230    away from the native pole.  In investigating this a deficiency with
3231    the formalism was discovered that led to the introduction of a
3232    LATPOLE FITS header card which may be used to disambiguate where
3233    CRVAL1, CRVAL2, and LONGPOLE do not uniquely determine the latitude
3234    of the native pole.  The CEL parameter array (formerly WCS) has been
3235    extended to accomodate LATPOLE as CEL(4), and the flag variable is
3236    now CEL(5) (formerly WCS(4)).
3237
3238  - Default values of LONGPOLE and LATPOLE are now supported and their
3239    use is recommended where appropriate.
3240
3241  - Numerical precision was being lost near the native poles in the SIN,
3242    AIR, and QSC projections and this has been recovered (reported by
3243    Lindsey Davis, NOAO).  Floating underflows in CSC are now avoided.
3244
3245  - Numerical precision was also lost in certain circumstances in the
3246    spherical coordinate transformation routines and this has been
3247    fixed.
3248
3249  - The test programs have been enhanced in various ways and the
3250    library has been validated on an SGI machine using both 32-bit and
3251    64-bit compilers.
3252
3253
3254WCSLIB version 1.0 (1995/01/31)
3255-------------------------------
3256
3257* C library
3258
3259  Initial release.
3260
3261* Fortran library
3262
3263  Initial release.
3264
3265------------------------------------------------------------------------
3266$Id: CHANGES,v 7.7 2021/07/12 06:36:49 mcalabre Exp $
3267