diff options
Diffstat (limited to 'games/ddate.c')
-rw-r--r-- | games/ddate.c | 171 |
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]); + } +} |