summaryrefslogtreecommitdiffstats
path: root/games/ddate.c
diff options
context:
space:
mode:
Diffstat (limited to 'games/ddate.c')
-rw-r--r--games/ddate.c171
1 files changed, 171 insertions, 0 deletions
diff --git a/games/ddate.c b/games/ddate.c
new file mode 100644
index 000000000..33ce386f8
--- /dev/null
+++ b/games/ddate.c
@@ -0,0 +1,171 @@
+/* ddate.c .. converts boring normal dates to fun Discordian Date -><-
+ written the 65th day of The Aftermath in the Year of Our Lady of
+ Discord 3157 by Druel the Chaotic aka Jeremy Johnson aka
+ mpython@gnu.ai.mit.edu
+
+ and I'm not responsible if this program messes anything up (except your
+ mind, I'm responsible for that)
+
+ Modifications for Unix by Lee Harvey Oswald Smith, K.S.C.
+ Five tons of flax.
+*/
+
+#include <time.h>
+#include <string.h>
+#include <stdio.h>
+
+struct disc_time
+{int season; /* 0-4 */
+ int day; /* 0-72 */
+ int yday; /* 0-365 */
+ int year; /* 3066- */
+};
+
+char *ending(int);
+void print(struct disc_time,char **);
+struct disc_time convert(int,int);
+struct disc_time makeday(int,int,int);
+
+main (int argc,char **argv)
+{long t;
+ struct tm *eris;
+ int bob,raw;
+ struct disc_time hastur;
+ if (argc==4)
+ { int moe,larry,curly;
+ moe=atoi(argv[1]);
+ larry=atoi(argv[2]);
+ curly=atoi(argv[3]);
+ hastur=makeday(moe,larry,curly);
+ }
+ else if (argc!=1)
+ { fprintf(stderr,"Syntax: DiscDate [month day year]");
+ exit(1);
+ }
+ else
+ {
+ t= time(NULL);
+ eris=localtime(&t);
+ bob=eris->tm_yday; /* days since Jan 1. */
+ raw=eris->tm_year; /* years since 1980 */
+ hastur=convert(bob,raw);
+ }
+ print(hastur,argv);
+}
+
+struct disc_time makeday(int imonth,int iday,int iyear) /*i for input */
+{ struct disc_time funkychickens;
+
+ int cal[12] =
+ {
+ 31,28,31,30,31,30,31,31,30,31,30,31
+ };
+ int dayspast=0;
+
+ imonth--;
+ funkychickens.year= iyear+1166;
+ while(imonth>0)
+ {
+ dayspast+=cal[--imonth];
+ }
+ funkychickens.day=dayspast+iday-1;
+ funkychickens.season=0;
+ if((funkychickens.year%4)==2)
+ {
+ if (funkychickens.day==59)
+ funkychickens.day=-1;
+ }
+ funkychickens.yday=funkychickens.day;
+/* note: EQUAL SIGN...hopefully that fixes it */
+ while(funkychickens.day>=73)
+ {
+ funkychickens.season++;
+ funkychickens.day-=73;
+ }
+ return funkychickens;
+}
+
+char *ending(int num)
+{
+ int temp;
+ char *funkychickens;
+
+ funkychickens=(char *)malloc(sizeof(char)*3);
+
+ temp=num%10; /* get 0-9 */
+ switch (temp)
+ { case 1:
+ strcpy(funkychickens,"st");
+ break;
+ case 2:
+ strcpy(funkychickens,"nd");
+ break;
+ case 3:
+ strcpy(funkychickens,"rd");
+ break;
+ default:
+ strcpy(funkychickens,"th");
+ }
+ return funkychickens;
+}
+
+struct disc_time convert(int nday, int nyear)
+{ struct disc_time funkychickens;
+
+ funkychickens.year = nyear+3066;
+ funkychickens.day=nday;
+ funkychickens.season=0;
+ if ((funkychickens.year%4)==2)
+ {if (funkychickens.day==59)
+ funkychickens.day=-1;
+ else if (funkychickens.day >59)
+ funkychickens.day-=1;
+ }
+ funkychickens.yday=funkychickens.day;
+ while (funkychickens.day>=73)
+ { funkychickens.season++;
+ funkychickens.day-=73;
+ }
+ return funkychickens;
+
+ }
+
+void print(struct disc_time tick, char **args)
+{ char *days[5] = { "Sweetmorn",
+ "Boomtime",
+ "Pungenday",
+ "Prickle-Prickle",
+ "Setting Orange"
+ };
+ char *seasons[5] = { "Chaos",
+ "Discord",
+ "Confusion",
+ "Bureaucracy",
+ "The Aftermath"
+ };
+ char *holidays[5][2] = { "Mungday", "Chaoflux",
+ "Mojoday", "Discoflux",
+ "Syaday", "Confuflux",
+ "Zaraday", "Bureflux",
+ "Maladay", "Afflux"
+ };
+ if (args[1]==NULL)
+ printf("Today is ");
+ else
+ printf("%s-%s-%s is ",args[1],args[2],args[3]);
+ if (tick.day==-1) printf("St. Tib's Day!");
+ else
+ { tick.day++;
+ printf("%s",days[tick.yday%5]);
+ printf(", the %d", tick.day);
+ printf("%s day of %s",ending(tick.day),seasons[tick.season]) ;
+ }
+ printf(" in the YOLD %d\n",tick.year);
+ if ((tick.day==5)||(tick.day==50))
+ { printf("Celebrate ");
+ if (tick.day==5)
+ printf("%s\n",holidays[tick.season][0]);
+ else
+ printf("%s\n",holidays[tick.season][1]);
+ }
+}