aboutsummaryrefslogtreecommitdiff
path: root/sys/etc/brktime.x
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
commitfa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 (patch)
treebdda434976bc09c864f2e4fa6f16ba1952b1e555 /sys/etc/brktime.x
downloadiraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz
Initial commit
Diffstat (limited to 'sys/etc/brktime.x')
-rw-r--r--sys/etc/brktime.x79
1 files changed, 79 insertions, 0 deletions
diff --git a/sys/etc/brktime.x b/sys/etc/brktime.x
new file mode 100644
index 00000000..dbd94a7c
--- /dev/null
+++ b/sys/etc/brktime.x
@@ -0,0 +1,79 @@
+# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
+
+include <time.h>
+
+define SECONDS_PER_DAY 86400
+define SECONDS_PER_HOUR 3600
+define SECONDS_PER_MINUTE 60
+define MONDAY 2
+
+# BRKTIME -- Break a long integer time (such as returned by GETTIME or FINFO)
+# into the fields of the structure defined in <time.h>. The procedure is
+# valid from 00:00:00 01-Jan-1980 to 23:23:59 28-Feb-2100.
+
+procedure brktime (ltime, tm)
+
+long ltime # seconds since 00:00:00 01-Jan-1980
+int tm[LEN_TMSTRUCT] # broken down time (output struct)
+
+long temp # working variable
+long seconds # seconds in current day
+long days # whole days since Monday 00-Jan-1980
+int nights # whole days since 00-Jan of current year
+
+int year # year counter
+int days_per_year # days per year
+
+int month # month counter
+int days_per_month[12] # days per month
+data days_per_month/31,0,31,30,31,30,31,31,30,31,30,31/
+
+begin
+ seconds = mod (ltime, SECONDS_PER_DAY)
+ days = ltime / SECONDS_PER_DAY + 1
+
+ # Break hours, minutes, seconds.
+
+ TM_HOUR(tm) = seconds / SECONDS_PER_HOUR
+ temp = seconds - TM_HOUR(tm) * SECONDS_PER_HOUR
+ TM_MIN(tm) = temp / SECONDS_PER_MINUTE
+ TM_SEC(tm) = temp - TM_MIN(tm) * SECONDS_PER_MINUTE
+
+ # Break day of week.
+
+ TM_WDAY(tm) = mod (days + MONDAY, 7)
+ if (TM_WDAY(tm) == 0)
+ TM_WDAY(tm) = 7
+
+ # Break year, day of year.
+
+ temp = 0 # whole days since 00-Jan-1980 on last day of last year
+ year = 1980
+ days_per_year = 366
+ while (days > temp + days_per_year) {
+ temp = temp + days_per_year
+ year = year + 1
+ if (mod (year, 4) == 0)
+ days_per_year = 366
+ else
+ days_per_year = 365
+ }
+ TM_YEAR(tm) = year
+ TM_YDAY(tm) = days - temp
+
+ # Break month, day of month.
+
+ nights = TM_YDAY(tm)
+ if (mod (TM_YEAR(tm), 4) == 0)
+ days_per_month[2] = 29
+ else
+ days_per_month[2] = 28
+ temp = 0 # whole days since 00-Jan on last day of last month
+ month = 1
+ while (nights > temp + days_per_month[month]) {
+ temp = temp + days_per_month[month]
+ month = month + 1
+ }
+ TM_MONTH(tm) = month
+ TM_MDAY(tm) = nights - temp
+end