45 lines
1.5 KiB
Text
45 lines
1.5 KiB
Text
constant print_cs = init_cs()
|
|
enum NAME,INK
|
|
sequence printers = {{"main",5},
|
|
{"reserve",5}}
|
|
|
|
procedure printer(string name, sequence s)
|
|
try
|
|
for i=1 to length(s) do
|
|
enter_cs(print_cs)
|
|
for p=1 to length(printers) do
|
|
if printers[p][INK]!=0 then
|
|
printers[p][INK] -= 1
|
|
printf(1,"%s/%s: %s\n",{name,printers[p][NAME],s[i]})
|
|
exit
|
|
elsif p=length(printers) then
|
|
throw("out of ink")
|
|
end if
|
|
end for
|
|
leave_cs(print_cs)
|
|
end for
|
|
exit_thread(0)
|
|
catch e
|
|
printf(1,"exception(%s): %s\n",{name,e[E_USER]})
|
|
leave_cs(print_cs)
|
|
exit_thread(1)
|
|
end try
|
|
end procedure
|
|
constant r_printer = routine_id("printer")
|
|
|
|
constant hd = {"Humpty Dumpty sat on a wall.",
|
|
"Humpty Dumpty had a great fall.",
|
|
"All the king's horses and all the king's men",
|
|
"Couldn't put Humpty together again."},
|
|
mg = {"Old Mother Goose",
|
|
"When she wanted to wander,",
|
|
"Would ride through the air",
|
|
"On a very fine gander.",
|
|
"Jack's mother came in,",
|
|
"And caught the goose soon,",
|
|
"And mounting its back,",
|
|
"Flew up to the moon."}
|
|
|
|
sequence hThreads = {create_thread(r_printer,{"hd",hd}),
|
|
create_thread(r_printer,{"mg",mg})}
|
|
wait_thread(hThreads)
|