Original patch was posted to https://celestia.space/forum/viewtopic.php?f=4&t=17282
====================================
Here comes the original description:
====================================
Before this update, the celestia code supports only JPL Big Endian
ephemerides DE406/DE405/DE200.
The big endian ephemeris DE406 comes in chunk of 300 years. If you
want to concatenate several pieces, using the software provided by JPL
(which does not handle endianess), you need a big endian platform. The
little endian DE406 comes in one piece of 6000 years, so you don't
even need to concatenate this one.
This commit adds the following:
- support for both endianess with autodetection of endianess
- support for all JPL DE ephemeris (from DE200) with autodetection of
record size.
- support for JPL DE compatible ephemeris such as the INPOP ephemeris
from Paris observatory (only the ephemeris files in the legacy JPL DE
compatible format and with timescale TDB, not the INPOP native format,
or the TCB files). http://www.imcce.fr/inpop/download10e.php
The method to autodetect ephemeris type, record size and endianess is
based on the CALCEPH software.
It would probably be better if possible to wrap around the CALCEPH
library (so that it would also support INPOP native format) but this
would be more work.
In addition to the ephemeris number and the start and end date, the
record size and endianess are also printed to the log (which you get
by pressing the tilde key).
If the ephemeris is an INPOP ephemeris, then the ephemeris number is
not printed to the log: it just says "INPOP".
It has been tested with:
- DE406 big endian
- DE406 little endian
- DE405 big endian
- DE423 little endian
- INPOP10A little endian
on Linux/x86_64.
However, no accurate regression testing has been performed. It has
only been tested visually that the planets orbits do not look wrong
and that the log is reporting the correct endianess, record size and
ephemeris name.
- 1 copy-paste error
- 1 nullptr dereference
- fixed self-assignment in Mesh::VertexDescription::operator=
- a few missing delete
- all other are checks for nullptr after new
Use #ifdef FOO instead of #if FOO
Unused function parameter names
Uninitialised member in FrameTree
Memory read after deallocation in ReferenceFrame
Unmatched new[]/delete[] in StarDatabase
Uninitialised temperature in StarDatabase
Uninitialised member of RenderListEntry: isOpaque
Fix for convoluted code in renderer