svn commit: r204263 - user/edwin/calendar
Edwin Groothuis
edwin at FreeBSD.org
Tue Feb 23 21:39:12 UTC 2010
Author: edwin
Date: Tue Feb 23 21:39:11 2010
New Revision: 204263
URL: http://svn.freebsd.org/changeset/base/204263
Log:
Give the solar calculations second precision capability
Add the $FreeBSD$ keyword.
Modified:
user/edwin/calendar/calendar.h
user/edwin/calendar/dates.c (contents, props changed)
user/edwin/calendar/events.c (contents, props changed)
user/edwin/calendar/parsedata.c (contents, props changed)
user/edwin/calendar/pom.c (contents, props changed)
user/edwin/calendar/sunpos.c (contents, props changed)
Directory Properties:
user/edwin/calendar/cny.c (props changed)
user/edwin/calendar/locale.c (props changed)
Modified: user/edwin/calendar/calendar.h
==============================================================================
--- user/edwin/calendar/calendar.h Tue Feb 23 21:28:25 2010 (r204262)
+++ user/edwin/calendar/calendar.h Tue Feb 23 21:39:11 2010 (r204263)
@@ -39,10 +39,12 @@
#define SECSPERDAY (24 * 60 * 60)
#define SECSPERHOUR (60 * 60)
#define SECSPERMINUTE (60)
+#define MINSPERHOUR (60)
#define HOURSPERDAY (24)
#define FSECSPERDAY (24.0 * 60.0 * 60.0)
#define FSECSPERHOUR (60.0 * 60.0)
#define FSECSPERMINUTE (60.0)
+#define FMINSPERHOUR (60.0)
#define FHOURSPERDAY (24.0)
#define DAYSPERYEAR 365
Modified: user/edwin/calendar/dates.c
==============================================================================
--- user/edwin/calendar/dates.c Tue Feb 23 21:28:25 2010 (r204262)
+++ user/edwin/calendar/dates.c Tue Feb 23 21:39:11 2010 (r204263)
@@ -25,7 +25,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: user/edwin/calendar/calendar.c 201195 2009-12-29 13:14:13Z edwin $");
+__FBSDID("$FreeBSD$");
#include <stdio.h>
#include <stdlib.h>
Modified: user/edwin/calendar/events.c
==============================================================================
--- user/edwin/calendar/events.c Tue Feb 23 21:28:25 2010 (r204262)
+++ user/edwin/calendar/events.c Tue Feb 23 21:39:11 2010 (r204263)
@@ -25,7 +25,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: user/edwin/calendar/io.c 200813 2009-12-21 21:17:59Z edwin $");
+__FBSDID("$FreeBSD$");
#include <sys/time.h>
#include <err.h>
Modified: user/edwin/calendar/parsedata.c
==============================================================================
--- user/edwin/calendar/parsedata.c Tue Feb 23 21:28:25 2010 (r204262)
+++ user/edwin/calendar/parsedata.c Tue Feb 23 21:39:11 2010 (r204263)
@@ -25,7 +25,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: user/edwin/calendar/day.c 200813 2009-12-21 21:17:59Z edwin $");
+__FBSDID("$FreeBSD$");
#include <ctype.h>
#include <math.h>
Modified: user/edwin/calendar/pom.c
==============================================================================
--- user/edwin/calendar/pom.c Tue Feb 23 21:28:25 2010 (r204262)
+++ user/edwin/calendar/pom.c Tue Feb 23 21:39:11 2010 (r204263)
@@ -45,7 +45,7 @@ static const char sccsid[] = "@(#)pom.c
#endif /* not lint */
#endif
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/games/pom/pom.c 201613 2010-01-05 21:14:48Z edwin $");
+__FBSDID("$FreeBSD$");
/*
* Phase of the Moon. Calculates the current phase of the moon.
Modified: user/edwin/calendar/sunpos.c
==============================================================================
--- user/edwin/calendar/sunpos.c Tue Feb 23 21:28:25 2010 (r204262)
+++ user/edwin/calendar/sunpos.c Tue Feb 23 21:39:11 2010 (r204263)
@@ -93,7 +93,7 @@ static double ZJtable[] = {
static void
sunpos(int inYY, int inMM, int inDD, double UTCOFFSET, int inHOUR, int inMIN,
- double eastlongitude, double latitude, double *L, double *DEC)
+ int inSEC, double eastlongitude, double latitude, double *L, double *DEC)
{
int Y;
double ZJ, D, T, M, epsilon, lambda, alpha, HA, UTHM;
@@ -102,7 +102,7 @@ sunpos(int inYY, int inMM, int inDD, dou
if (inMM <= 2 && isleap(inYY))
ZJ -= 1.0;
- UTHM = inHOUR + inMIN / FSECSPERMINUTE + UTCOFFSET;
+ UTHM = inHOUR + inMIN / FMINSPERHOUR + inSEC / FSECSPERHOUR + UTCOFFSET;
Y = inYY - 1900; /* 1 */
D = floor(365.25 * Y) + ZJ + inDD + UTHM / FHOURSPERDAY; /* 3 */
T = D / 36525.0; /* 4 */
@@ -134,8 +134,8 @@ sunpos(int inYY, int inMM, int inDD, dou
fixup(&HA);
fixup(&latitude);
#ifdef NOTDEF
- printf("%02d/%02d %02d: l:%g d:%g h:%g\n",
- inMM, inDD, inHOUR, latitude, *DEC, HA);
+ printf("%02d/%02d %02d:%02d:%02d l:%g d:%g h:%g\n",
+ inMM, inDD, inHOUR, inMIN, inSEC, latitude, *DEC, HA);
#endif
return;
@@ -182,8 +182,10 @@ sunpos(int inYY, int inMM, int inDD, dou
#define ANGLE(a, b) (((a) < (b)) ? 1 : -1)
#define SHOUR(s) ((s) / 3600)
#define SMIN(s) (((s) % 3600) / 60)
+#define SSEC(s) ((s) % 60)
#define HOUR(h) ((h) / 4)
#define MIN(h) (15 * ((h) % 4))
+#define SEC(h) 0
#define DEBUG1(y, m, d, hh, mm, pdec, dec) \
printf("%4d-%02d-%02d %02d:%02d:00 - %7.7g -> %7.7g\n", \
y, m, d, hh, mm, pdec, dec)
@@ -224,8 +226,8 @@ fequinoxsolstice(int year, double UTCoff
prevdec = 350;
for (d = 18; d < 31; d++) {
// printf("Comparing day %d to %d.\n", d, d+1);
- sunpos(year, 3, d, UTCoffset, 0, 0, 0.0, 0.0, &L, &decleft);
- sunpos(year, 3, d + 1, UTCoffset, 0, 0, 0.0, 0.0,
+ sunpos(year, 3, d, UTCoffset, 0, 0, 0, 0.0, 0.0, &L, &decleft);
+ sunpos(year, 3, d + 1, UTCoffset, 0, 0, 0, 0.0, 0.0,
&L, &decright);
// printf("Found %g and %g.\n", decleft, decright);
if (SIGN(decleft) == SIGN(decright))
@@ -236,7 +238,8 @@ fequinoxsolstice(int year, double UTCoff
while (s > 0) {
// printf("Obtaining %d (%02d:%02d)\n",
// dial, SHOUR(dial), SMIN(dial));
- sunpos(year, 3, d, UTCoffset, SHOUR(dial), SMIN(dial),
+ sunpos(year, 3, d, UTCoffset,
+ SHOUR(dial), SMIN(dial), SSEC(dial),
0.0, 0.0, &L, &decmiddle);
// printf("Found %g\n", decmiddle);
if (SIGN(decleft) == SIGN(decmiddle)) {
@@ -261,11 +264,11 @@ fequinoxsolstice(int year, double UTCoff
found = 0;
prevdec = 10;
for (d = 18; d < 31; d++) {
- printf("Comparing day %d to %d.\n", d, d+1);
- sunpos(year, 9, d, UTCoffset, 0, 0, 0.0, 0.0, &L, &decleft);
- sunpos(year, 9, d + 1, UTCoffset, 0, 0, 0.0, 0.0,
+// printf("Comparing day %d to %d.\n", d, d+1);
+ sunpos(year, 9, d, UTCoffset, 0, 0, 0, 0.0, 0.0, &L, &decleft);
+ sunpos(year, 9, d + 1, UTCoffset, 0, 0, 0, 0.0, 0.0,
&L, &decright);
- printf("Found %g and %g.\n", decleft, decright);
+// printf("Found %g and %g.\n", decleft, decright);
if (SIGN(decleft) == SIGN(decright))
continue;
@@ -274,7 +277,8 @@ fequinoxsolstice(int year, double UTCoff
while (s > 0) {
// printf("Obtaining %d (%02d:%02d)\n",
// dial, SHOUR(dial), SMIN(dial));
- sunpos(year, 9, d, UTCoffset, SHOUR(dial), SMIN(dial),
+ sunpos(year, 9, d, UTCoffset,
+ SHOUR(dial), SMIN(dial), SSEC(dial),
0.0, 0.0, &L, &decmiddle);
// printf("Found %g\n", decmiddle);
if (SIGN(decleft) == SIGN(decmiddle)) {
@@ -302,7 +306,7 @@ fequinoxsolstice(int year, double UTCoff
prevangle = 1;
for (d = 18; d < 31; d++) {
for (h = 0; h < 4 * HOURSPERDAY; h++) {
- sunpos(year, 6, d, UTCoffset, HOUR(h), MIN(h),
+ sunpos(year, 6, d, UTCoffset, HOUR(h), MIN(h), SEC(h),
0.0, 0.0, &L, &dec);
angle = ANGLE(prevdec, dec);
if (prevangle != angle) {
@@ -332,7 +336,7 @@ fequinoxsolstice(int year, double UTCoff
prevangle = -1;
for (d = 18; d < 31; d++) {
for (h = 0; h < 4 * HOURSPERDAY; h++) {
- sunpos(year, 12, d, UTCoffset, HOUR(h), MIN(h),
+ sunpos(year, 12, d, UTCoffset, HOUR(h), MIN(h), SEC(h),
0.0, 0.0, &L, &dec);
angle = ANGLE(prevdec, dec);
if (prevangle != angle) {
@@ -370,14 +374,15 @@ calculatesunlongitude30(int year, int de
sunpos(year - 1, 12, 31,
-24 * (degreeGMToffset / 360.0),
- HOUR(h), MIN(h), 0.0, 0.0, &prevL, &dec);
+ HOUR(h), MIN(h), SEC(h), 0.0, 0.0, &prevL, &dec);
for (m = 1; m <= 12; m++) {
for (d = 1; d <= monthdays[m]; d++) {
for (h = 0; h < 4 * HOURSPERDAY; h++) {
sunpos(year, m, d,
-24 * (degreeGMToffset / 360.0),
- HOUR(h), MIN(h), 0.0, 0.0, &curL, &dec);
+ HOUR(h), MIN(h), SEC(h),
+ 0.0, 0.0, &curL, &dec);
if (curL < 180 && prevL > 180) {
*pichinesemonths = cumdays[m] + d;
#ifdef DEBUG
More information about the svn-src-user
mailing list