Discordian date: Difference between revisions
Content added Content deleted
(Added PL/M) |
(→{{header|PL/M}}: Get the Gregorian date from the command line) |
||
Line 3,885: | Line 3,885: | ||
=={{header|PL/M}}== |
=={{header|PL/M}}== |
||
{{works with|8080 PL/M Compiler}} ... under CP/M (or an emulator) |
{{works with|8080 PL/M Compiler}} ... under CP/M (or an emulator) |
||
⚫ | |||
<br> |
|||
⚫ | |||
<syntaxhighlight lang="plm"> |
<syntaxhighlight lang="plm"> |
||
100H: /* DISCORDIAN DATE CALCULATION - TRANSLATION OF MAD (VIA ALGOL W) */ |
100H: /* DISCORDIAN DATE CALCULATION - TRANSLATION OF MAD (VIA ALGOL W) */ |
||
Line 3,907: | Line 3,906: | ||
CALL PR$STRING( .N$STR( W ) ); |
CALL PR$STRING( .N$STR( W ) ); |
||
END PR$NUMBER; |
END PR$NUMBER; |
||
/* COMMAND LINE */ |
|||
DECLARE CL$ADDR LITERALLY '80H'; /* ADDRESS OF THE COMMAND LINE */ |
|||
DECLARE CL$PTR ADDRESS; /* POINTER TO THE CURRENT COMMAND LINE CHAR */ |
|||
DECLARE CL$CHAR BASED CL$PTR BYTE; /* CURRENT COMMAND LINE CHARACTER */ |
|||
DECLARE CL$LEN ADDRESS; /* LENGTH OF THE COMMAND LINE */ |
|||
/* INITIALISES THE COMMAND LINE VARIABLES */ |
|||
CL$INIT: PROCEDURE; |
|||
CL$PTR = CL$ADDR; |
|||
CL$LEN = CL$CHAR; |
|||
CL$PTR = CL$PTR + 1; |
|||
END CL$INIT; |
|||
/* READS A NUMBER FROM THE COMMAND LINE, THE TERMINATOR IS IGNORED */ |
|||
CL$NUMBER: PROCEDURE ADDRESS; |
|||
⚫ | |||
N = 0; |
|||
DO WHILE CL$PTR <= ( CL$ADDR + CL$LEN ) AND CL$CHAR = ' '; |
|||
CL$PTR = CL$PTR + 1; |
|||
END; |
|||
DO WHILE CL$PTR <= ( CL$ADDR + CL$LEN ) AND CL$CHAR >= '0' |
|||
AND CL$CHAR <= '9'; |
|||
N = ( N * 10 ) + ( CL$CHAR - '0' ); |
|||
CL$PTR = CL$PTR + 1; |
|||
END; |
|||
CL$PTR = CL$PTR + 1; /* SKIP THE CHARACTER THAT TERMINATED THE NUMBER */ |
|||
RETURN N; |
|||
END CL$NUMBER; |
|||
/* TASK */ |
/* TASK */ |
||
Line 3,918: | Line 3,946: | ||
, 151, 181, 212, 243, 273, 304, 334 |
, 151, 181, 212, 243, 273, 304, 334 |
||
); |
); |
||
HOLY5 (0) = .'MUNG$'; HOLY5 (1) = .'MOJO$'; HOLY5 (2) = .'SYA$'; |
HOLY5 (0) = .'MUNG$'; HOLY5 (1) = .'MOJO$'; HOLY5 (2) = .'SYA$'; |
||
HOLY5 (3) = .'ZARA$'; HOLY5 (4) = .'MALA$'; |
HOLY5 (3) = .'ZARA$'; HOLY5 (4) = .'MALA$'; |
||
Line 3,929: | Line 3,957: | ||
DISSSN(3) = .'BUREAUCRACY$'; DISSSN(4) = .'THE AFTERMATH$'; |
DISSSN(3) = .'BUREAUCRACY$'; DISSSN(4) = .'THE AFTERMATH$'; |
||
/* |
/* GET THE GREGORIAN DATE FROM THE COMMAND LINE, NB: NO VALIDATION */ |
||
DECLARE ( GMONTH, GDAY, GYEAR ) ADDRESS; /* MUST BE IN MM/DD/YYYY FORMAT */ |
|||
/* GMONTH/GDAY/GYEAR SHOULD BE IN THE GREGORIAN CALENDAR */ |
|||
CALL CL$INIT; |
|||
PR$DISCORDIAN$DATE: PROCEDURE( GMONTH, GDAY, GYEAR ); |
|||
GMONTH = CL$NUMBER; GDAY = CL$NUMBER; GYEAR = CL$NUMBER; |
|||
CALL PR$NUMBER( GMONTH );CALL PR$CHAR( '/' );CALL PR$NUMBER( GDAY ); |
|||
⚫ | |||
/* CONVERT AND PRINT THE DATE */ |
|||
IF GMONTH = 2 AND GDAY = 29 |
|||
IF GMONTH = 2 AND GDAY = 29 |
|||
THEN DO; |
|||
⚫ | |||
CALL PR$STRING( .'SAINT TIB''S DAY IN THE Y.O.L.D. $' ); |
|||
CALL PR$NUMBER( GYEAR + 1166 ); |
|||
END; |
|||
ELSE DO; |
|||
⚫ | |||
DECLARE ( YRDAY, SEASON, DAY, WKDAY ) ADDRESS; |
|||
YRDAY = MLENGT(GMONTH)+GDAY; |
|||
SEASON = YRDAY / 73; |
|||
DAY = YRDAY-SEASON*73; |
|||
WKDAY = (YRDAY-1) MOD 5; |
|||
CALL PR$STRING( DISDAY(WKDAY) ); |
|||
CALL PR$STRING( .', DAY $' ); |
|||
CALL PR$NUMBER( DAY ); |
|||
CALL PR$STRING( .' OF $' ); |
|||
CALL PR$STRING( DISSSN(SEASON) ); |
|||
CALL PR$STRING( .' IN THE Y.O.L.D $' ); |
|||
CALL PR$NUMBER( GYEAR + 1166 ); |
|||
IF DAY = 5 THEN DO; |
|||
CALL PR$NL; |
|||
CALL PR$STRING( .'CELEBRATE $' ); |
|||
CALL PR$STRING( HOLY5(SEASON) ); |
|||
CALL PR$STRING( .'DAY$' ); |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
CALL PR$STRING( .'FLUX$' ); |
|||
END; |
END; |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
END; |
END; |
||
END; |
|||
CALL PR$NL; |
|||
⚫ | |||
CALL PR$DISCORDIAN$DATE( 12, 06, 2020 ); CALL PR$NL; |
|||
CALL PR$DISCORDIAN$DATE( 07, 12, 1969 ); CALL PR$NL; |
|||
CALL PR$DISCORDIAN$DATE( 01, 05, 2005 ); CALL PR$NL; |
|||
CALL PR$DISCORDIAN$DATE( 09, 26, 1995 ); CALL PR$NL; |
|||
EOF |
EOF |
||
</syntaxhighlight> |
</syntaxhighlight> |
||
{{out}} |
{{out}} |
||
With the command line: <code>DISCORD 03/29/2023</code>: |
|||
<pre> |
<pre> |
||
3/29/2023 |
|||
PUNGENDAY, DAY 15 OF DISCORD IN THE Y.O.L.D 3189 |
|||
SETTING ORANGE, DAY 48 OF THE AFTERMATH IN THE Y.O.L.D 3186 |
|||
PUNGENDAY, DAY 47 OF CONFUSION IN THE Y.O.L.D 3135 |
|||
SETTING ORANGE, DAY 5 OF CHAOS IN THE Y.O.L.D 3171 |
|||
CELEBRATE MUNGDAY |
|||
PRICKLE-PRICKLE, DAY 50 OF BUREAUCRACY IN THE Y.O.L.D 3161 |
|||
CELEBRATE BUREFLUX |
|||
</pre> |
</pre> |
||