## To build:
```
make
```
**NOTE**: this entry requires the `X11/Xlib.h` header file and the X11 library to
compile. For more information see the
FAQ on "[X11](../../faq.html#X11)".
## To use:
```
echo "YYYY/MM/DD" | ./morgan1
```
where `YYYY` is the four digit year, `MM` is the two digit month and `DD` is two
digit day of the month. The arrow keys control the shifting of the date as
follows:
* Right : go forwards one day.
* Left : go backwards one day.
* Up : go forwards 20 days.
* Down : go backwards 20 days.
## Try:
```
./try.sh
```
Use the same keys as described above to change the dates each time the program
window is in focus.
## Judges' remarks:
To verify the output, try echoing the date of an evening with a clear sky.
Use binoculars and/or telescope as needed. In some cases you may need
to wait for a better time of the evening. In a few cases, such as
the South Pole in the summer, you may need to move to a different
observing site.
## Author's remarks:
### Instructions
It displays the position of the 8 planets of the solar system around the Sun.
The date given in the command line is in the format YYYY/MM/DD (year, month and
day). The direction keys can be used to move in time :
* Left : go back 1 day.
* Right : go forward 1 day.
* Down : go back 20 days.
* Up : go forward 20 days.
It handles correctly all leap years and the switch between [Julian
calendar](https://en.wikipedia.org/wiki/Julian_calendar) and
[Gregorian calendar](https://en.wikipedia.org/wiki/Gregorian_calendar) (10 days
missing between 1582/10/04 and 1582/10/15).
The scale is logarithmic to be able to display the [8
planets](http://news.bbc.co.uk/2/hi/5282440.stm) without having
[Mercury](https://science.nasa.gov/mercury),
[Venus](https://science.nasa.gov/venus/),
[Earth](https://science.nasa.gov/earth/facts) and
[Mars](https://science.nasa.gov/mars) squeezed around the
[Sun](https://science.nasa.gov/sun/).
The size is not proportional either.
### Bonus
It also displays the position of 2 famous comets during their last approach:
- The [first one](https://science.nasa.gov/solar-system/comets/1p-halley/)
around the [third IOCCC](../../years.html#1986).
- The [second
one](https://science.nasa.gov/solar-system/comets/c-1995-o1-hale-bopp/) between
the [thirteenth](../../years.html#1996) and [fourteenth](../../years.html#1998) IOCCC.
### Limitations
* ASCII character set is assumed.
* A C99 compiler is required (for some `math.h` functions).
* The position should be correct for years between (-1000; +3000)
* The approximations done in the formula are OK for displaying the position
around the [Sun](https://science.nasa.gov/sun/) but not for other applications
like [ephemeride](https://en.wikipedia.org/wiki/Ephemeris) or sky view from
[Earth](https://science.nasa.gov/earth/facts) (angles may be off by 1 or 2
degrees sometimes).
### Obfuscation
* Reuse of 1 letter variables.
* Only the `main()` function with some `for` loops.
* Constants for orbital elements encoded in a string.
* Hexadecimal and decimal values used inconsistently.
* Comparisons order are not consistent.
* A lot of stuff is done in the different parts of the `for` loop.
### Compilation warnings
With gcc 4.7.2 on Linux Ubuntu 12.10:
```
morgan1.c:38:3: warning: suggest parentheses around ‘&&’ within ‘||’ [-Wparentheses]
morgan1.c:40:34: warning: value computed is not used [-Wunused-value]
morgan1.c:56:6: warning: suggest parentheses around ‘&&’ within ‘||’ [-Wparentheses]
morgan1.c:58:50: warning: value computed is not used [-Wunused-value]
morgan1.c:61:5: warning: suggest parentheses around ‘-’ inside ‘>>’ [-Wparentheses]
```
With clang 3.1 on Linux Ubuntu 12.10 :
```
morgan1.c:38:49: warning: '&&' within '||' [-Wlogical-op-parentheses]
morgan1.c:38:27: warning: '&&' within '||' [-Wlogical-op-parentheses]
morgan1.c:55:13: warning: '&&' within '||' [-Wlogical-op-parentheses]
morgan1.c:56:14: warning: '&&' within '||' [-Wlogical-op-parentheses]
```
This is due to most of the parentheses and braces being removed when
unnecessary.
To verify the display, you can look at one of these programs :
* xephem :
* homeplanet :
*