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