menu:
? tab(-1,0)
? tab(10,10); "let's play kill the system. try to -"
? tab(12,5); "1. divide by zero"
? tab(13,5); "2. allocate a file that's 200,000 blocks long"
? tab(14,5); "3. open a file twice"
? tab(15,5); "4. read some nonexistant data"
? tab(16,5); "5. store data into PPN 999,999"
? tab(17,5); "6. quit (this function really works)"
? tab(21,5); "(Control C will be trapped out so you can try that too.)"
? tab(19,3);
input "pick your poison (1-6) ==> ", choice
on choice call zero, big'blocks, open'twice, no'data, no'ppn, quit
goto menu
zero:
? tab(-1,0)
? tab(10,10); "this exercise divides by zero"
? tab(12,10);
input "enter a number between 1 and 100 ==> "; interesting'input
? tab(14,10); interesting'input " divided by 0 = ";
? interesting'input / 0
zero'plus'one:
call pause
return
big'blocks:
? tab(-1,0)
? tab(10,10); "Ever wonder what would happen if you tried to store"
? tab(11,10); "more information than the system would hold? Well,"
? tab(12,10); "we are about to allocate a file 200,000 blocks long"
? tab(13,10); "with the statement:"
? tab(14,10); "ALLOCATE ''NITWIT.DAT'', 200000"
allocate "nitwit.dat", 200000
big'blocks'plus'one:
call pause
return
open'twice:
? tab(-1,0)
? tab(10,10); "This little error hardly needs introduction. Well"
? tab(11,10); "known to all of us, it opens the same file twice."
open #1, "nitwit", output
open #1, "nitwit", output
open'twice'plus'one:
call pause
return
no'data:
? tab(-1,0)
? tab(10,10); "This little etude tries to read information from"
? tab(11,10); "a data line that doesn't exist -- here goes --"
? tab(12,10); "read dummy"
read dummy
? "dummy ="; dummy
no'data'plus'one:
call pause
return
no'ppn:
? tab(-1,0)
? tab(10,10); "We will now try to open a file in PPN 999,999"
? tab(11,19); "with the statement: "
? tab(13,10); "OPEN #1, ''BOGUS.DAT[999,999]'', OUTPUT"
open #1, "bogus.dat[999,999]", output
no'ppn'plus'one:
call pause
return
quit:
? tab(-1,0)
? tab(22,1); "Better luck next time - end of system demolition derby"
end
error'trap:
if err(0) = 1 &
then &
? tab(22,1); "DON'T DO THAT!" :&
resume
if err(0) = 10 &
then &
? tab(22,1); "You just tried to divide by zero and "; :&
? "that's a no no!" :&
resume zero'plus'one
if err(0) = 19 &
then &
? tab(21,1); "Not only did you run out of room on the disk"; :&
? " but there's a good chance "; :&
? "you've left the disk with no free blocks - you'd better"; :&
? "check it out!" :&
resume big'blocks'plus'one
if err(0) = 13 &
then &
? tab(22,1); "Nice try, but that file is already open!" :&
close #1 :&
resume open'twice'plus'one
if err(0) = 4 &
then &
? tab(21,1); "you wouldn't try to feed a poor computer " :&
? "an empty data statement would you? " :&
resume no'data'plus'one
if err(0) = 16 &
then &
? tab(22,1); "Sorry, that's not a legal PPN number" :&
resume no'ppn'plus'one
! if err(0) isn't one of the above - we don't know what to do so...
on error goto
! this turns AMOS error detetction & reporting back on