/* Program name: RollDice */ /* */ /* This program simulates the roll of two dice, and displays the */ /* results in the CLI window. */ /* Program taken from "AmigaDOS Inside and Out" disk by Abacus */ /* */ /* To run this program, type: */ /* rx rolldice */ /* */ CR='0D'x d.1.1 = ' ' /* Define dice shapes */ d.2.1 = ' * ' /* using 'stem' variables. */ d.3.1 = ' ' /* */ d.1.2 = ' *' /* There are actually only */ d.2.2 = ' ' /* five patterns here: */ d.3.2 = '* ' /* ' ''* *'' *'' * ''* ' */ d.1.3 = ' *' /* */ d.2.3 = ' * ' /* Can you come up with a */ d.3.3 = '* ' /* more economical way of */ d.1.4 = '* *' /* defining the dice shapes? */ d.2.4 = ' ' d.3.4 = '* *' d.1.5 = '* *' d.2.5 = ' * ' d.3.5 = '* *' d.1.6 = '* *' d.2.6 = '* *' d.3.6 = '* *' SAY 'Total rolled is:' roll(6)||CR /* Print total to CLI. */ EXIT /* All done. */ roll: /* Define the 'roll' function. */ ARG n /* Get high value for die. */ x=OPEN(f,'RAM:DUMMY','W') /* open a dummy file. */ IF x=0 THEN EXIT(20); /* should not fail, but.. */ CALL WRITELN(f,'dummy') /* write line */ CALL CLOSE(f) /* be polite and clean */ die1=(WORD(STATEF('RAM:DUMMY'),7)%1)//n+1 /* 0 >= micros < 3000 */ CALL DELAY(28+LEFT(die1,2)) /* Wait for file to close */ x=OPEN(f,'RAM:DUMMY','W') /* open a dummy file. */ IF x=0 THEN EXIT(20); /* should not fail, but.. */ CALL WRITELN(f,'dummy') /* write line */ CALL CLOSE(f) /* be polite and clean */ die2=(WORD(STATEF('RAM:DUMMY'),7)%1)//n+1 /* 0 >= micros < 3000 */ SAY CR SAY ' --- ---'CR SAY ' |'d.1.die1'| |'d.1.die2'|'CR /* Print die face */ SAY ' |'d.2.die1'| |'d.2.die2'|'CR SAY ' |'d.3.die1'| |'d.3.die2'|'CR SAY ' --- ---'CR SAY CR RETURN die1+die2 /* Return the value rolled */