shithub: ddate

Download patch

ref: 2ee5654130eb7579fc539f0021a6250baee10800
author: Jacobo Da Riva Muñoz <[email protected]>
date: Wed Feb 2 12:50:19 EST 2022

Initial commit

--- /dev/null
+++ b/README.md
@@ -1,0 +1,5 @@
+# Discordian Calendar for 9front
+
+This app show the current day in the Discordian Calendar. The app can read a gregorian date in format "dd mm yyyy" and return the Discordian date.
+
+For more info about this calendar or the Discordianism go to [Wikipedia]( https://en.wikipedia.org/wiki/Discordian_calendar)
\ No newline at end of file
--- /dev/null
+++ b/ddate.c
@@ -1,0 +1,132 @@
+#include <u.h>
+#include <libc.h>
+#include <bio.h>
+
+#define day_of_week( x ) ((x) == 1 ? "Sweetmorn" :\
+                          (x) == 2 ? "Boomtime" :\
+                          (x) == 3 ? "Pungenday" :\
+                          (x) == 4 ? "Prickle-Prikle" :\
+                          "Setting Orange")
+
+#define season( x ) ((x) == 0 ? "Chaos" :\
+                     (x) == 1 ? "Discord" :\
+                     (x) == 2 ? "Confusion" : \
+                     (x) == 3 ? "Bureaucracy" :\
+                     "The Aftermath")
+
+#define hollyday( d, s ) ((d) == 5 && (s) == 0 ? "Mungday" :\
+                         (d) == 50 && (s) == 0 ? "Chaoflux" :\
+                         (d) == 5 && (s) == 1 ? "Mojoday" :\
+                         (d) == 50 && (s) == 1 ? "Discoflux" :\
+                         (d) == 5 && (s) == 2 ? "Syaday" :\
+                         (d) == 50 && (s) == 2 ? "Confuflux" :\
+                         (d) == 5 && (s) == 3 ? "Zaraday" :\
+                         (d) == 50 && (s) == 3 ? "Bureflux" :\
+                         (d) == 5 && (s) == 4 ? "Maladay" :\
+                         "Afflux")
+
+#define date( x ) ((x)%73 == 0 ? 73 : (x)%73)
+
+#define leap_year( x ) ((x)%400 == 0 || (((x) % 4) == 0 && (x) % 100))
+
+int day_of_year(int d, int m, int y);
+int curyday(void);
+int curmo(void);
+int curyr(void);
+
+static void
+usage(void)
+{
+  fprint(2, "usage: ddate [day month year]\n");
+  exits("usage");
+}
+
+void
+main(int argc, char *argv[])
+{
+  int y, m, d, dy, dd, leap_day;
+  char *dw;
+  char *ds;
+
+  leap_day = 0;
+  
+  if( argc == 1 ){
+    /* Get the year, day and month of today*/
+    d = curyday();
+    //m = curmo();
+    y = curyr();
+  } else if( argc == 4 ) {
+    d = atoi( argv[1] );
+    m = atoi( argv[2] );
+    y = atoi( argv[3] );
+    d = day_of_year(d, m, y);
+  } else {
+    usage();
+  }
+
+  if( leap_year(y) ){
+    if( d == 60 ){
+      dw = "St. Tib's Day";
+      leap_day = 1;
+    } else if( d > 60) {
+      d = d-1;
+    }
+  }
+
+  dd = date(d);
+  dy = y + 1166;
+  ds = season(((d%73)==0?d-1:d)/73);
+
+  if ( leap_day == 1) {
+    print("%s of %s, YOLD %d\n", dw, ds, dy);
+  } else if (dd == 5 || dd == 50) {
+    print("%s, %d of %s, YOLD %d\n", hollyday(dd, ((d%73)==0?d-1:d)/73), dd, ds, dy);
+  } else {
+    print("%s, %d of %s, YOLD %d\n", day_of_week(d%5), dd, ds, dy);
+  }
+
+}
+
+int
+day_of_year( int d, int m, int y)
+{
+  int ml[ 12 ] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
+  for( ; m > 1; m --){
+    d = d + ml[ m - 2 ];
+    if( m == 3 && leap_year(y)){
+      d = d + 1;
+    }
+  }
+  return d;
+}
+
+/*
+ * system dependent
+ * get current day of the year, month and year
+ */
+int
+curyday(void)
+{
+    Tm *tm;
+
+    tm = localtime(time(0));
+    return tm->yday+1;
+}
+
+int
+curmo(void)
+{
+	Tm *tm;
+
+	tm = localtime(time(0));
+	return tm->mon+1;
+}
+
+int
+curyr(void)
+{
+	Tm *tm;
+
+	tm = localtime(time(0));
+	return tm->year+1900;
+}
\ No newline at end of file
--- /dev/null
+++ b/mkfile
@@ -1,0 +1,7 @@
+</$objtype/mkfile
+
+BIN=$home/bin/$objtype
+TARG=ddate
+OFILES=ddate.$O
+
+</sys/src/cmd/mkone
\ No newline at end of file