Magic 8-ball: Difference between revisions

no edit summary
No edit summary
No edit summary
 
Line 2,277:
A: It is certain
</pre>
 
=={{header|PL/M}}==
<syntaxhighlight lang="PL/M">
100H:
/*
THE PROCEDURES CLOCK AND RND USE A FEATURE OF PICKLES AND TROUT CP/M2
AND ARE NOT LIKELY TO WORK ON OTHER VERSIONS OF CP/M
*/
 
BDOS: PROCEDURE (FN, ARG) BYTE; DECLARE FN BYTE, ARG ADDRESS; GO TO 5; END BDOS;
EXIT: PROCEDURE; MEMORY(0)=BDOS(0,0); END EXIT;
 
TTYIN: PROCEDURE BYTE; DECLARE C BYTE; RETURN BDOS(1,0); END TTYIN;
 
PRINT: PROCEDURE (S); DECLARE S ADDRESS; S=BDOS(9,S); END PRINT;
 
CLOCK: PROCEDURE;
DECLARE B$ADR ADDRESS; DECLARE B BASED B$ADR BYTE;
B$ADR=047H;
B = 0EH; GO TO 043H; END CLOCK;
 
RND: PROCEDURE ADDRESS;
DECLARE E$ADR ADDRESS; DECLARE E BASED E$ADR BYTE;
DECLARE D$ADR ADDRESS; DECLARE D BASED D$ADR BYTE;
DECLARE L$ADR ADDRESS; DECLARE L BASED L$ADR BYTE;
DECLARE H$ADR ADDRESS; DECLARE H BASED H$ADR BYTE;
DECLARE (NUM, DE, HL) ADDRESS;
E$ADR=048H; D$ADR=049H; L$ADR=04AH; H$ADR=04BH;
CALL CLOCK;
DE = D * 255 + E; HL = H * 255 + L; NUM = DE * HL; RETURN NUM;
END RND;
 
EIGHTBALL: DO;
 
 
DECLARE CR LITERALLY '13';
DECLARE CRLF(3) BYTE INITIAL (13,10,'$');
DECLARE CHR BYTE;
DECLARE NUM ADDRESS;
DECLARE GREETING(30) BYTE INITIAL
('ASK AND ALL WILL BE REVEALED $');
DECLARE MSG01(41) BYTE INITIAL
( 'AS I SEE IT, YES $' );
DECLARE MSG02(41) BYTE INITIAL
( 'ASK AGAIN LATER $' );
DECLARE MSG03(41) BYTE INITIAL
( 'BETTER NOT TELL YOU NOW $' );
DECLARE MSG04(41) BYTE INITIAL
( 'CANNOT PREDICT NOW $' );
DECLARE MSG05(41) BYTE INITIAL
( 'CONCENTRATE AND ASK AGAIN $' );
DECLARE MSG06(41) BYTE INITIAL
( 'DON''T BET ON IT $' );
DECLARE MSG07(41) BYTE INITIAL
( 'IT IS CERTAIN $' );
DECLARE MSG08(41) BYTE INITIAL
( 'IT IS DECIDEDLY SO $' );
DECLARE MSG09(41) BYTE INITIAL
( 'MOST LIKELY $' );
DECLARE MSG10(41) BYTE INITIAL
( 'MY REPLY IS NO $' );
DECLARE MSG11(41) BYTE INITIAL
( 'MY SOURCES SAY MAYBE $' );
DECLARE MSG12(41) BYTE INITIAL
( 'MY SOURCES SAY NO $' );
DECLARE MSG13(41) BYTE INITIAL
( 'OUTLOOK GOOD $' );
DECLARE MSG14(41) BYTE INITIAL
( 'OUTLOOK NOT SO GOOD $' );
DECLARE MSG15(41) BYTE INITIAL
( 'REPLY HAZY, TRY AGAIN $' );
DECLARE MSG16(41) BYTE INITIAL
( 'SIGNS POINT TO YES $' );
DECLARE MSG17(41) BYTE INITIAL
( 'VERY DOUBTFUL $' );
DECLARE MSG18(41) BYTE INITIAL
( 'WITHOUT A DOUBT $' );
DECLARE MSG19(41) BYTE INITIAL
( 'YES $' );
DECLARE MSG20(41) BYTE INITIAL
( 'YES, DEFINITELY $' );
DECLARE MSG21(41) BYTE INITIAL
( 'YES, PROBABLY NOT $' );
DECLARE MSG22(41) BYTE INITIAL
( 'YOU MAY RELY ON IT $' );
DECLARE MSG23(41) BYTE INITIAL
( 'YOUR QUESTION HAS ALREADY BEEN ANSWERED $' );
 
NUM = RND MOD 24;
 
CALL PRINT(.GREETING);
CALL PRINT(.CRLF);
 
DO WHILE CHR <> CR;
CHR = TTYIN;
END;
 
CALL PRINT(.CRLF);
 
DO CASE NUM;
CALL PRINT(.MSG01);
CALL PRINT(.MSG02);
CALL PRINT(.MSG03);
CALL PRINT(.MSG04);
CALL PRINT(.MSG05);
CALL PRINT(.MSG06);
CALL PRINT(.MSG07);
CALL PRINT(.MSG08);
CALL PRINT(.MSG09);
CALL PRINT(.MSG10);
CALL PRINT(.MSG11);
CALL PRINT(.MSG12);
CALL PRINT(.MSG13);
CALL PRINT(.MSG14);
CALL PRINT(.MSG15);
CALL PRINT(.MSG16);
CALL PRINT(.MSG17);
CALL PRINT(.MSG18);
CALL PRINT(.MSG19);
CALL PRINT(.MSG20);
CALL PRINT(.MSG21);
CALL PRINT(.MSG22);
CALL PRINT(.MSG23);
END;
CALL PRINT(.CRLF);
 
CALL EXIT;
 
END;
EOF
 
</syntaxhighlight>
 
=={{header|PureBasic}}==