46 lines
1.2 KiB
Plaintext
46 lines
1.2 KiB
Plaintext
## menu.icn : rewrite of the faulty version on Rosetta Code site 24/4/2021
|
|
|
|
procedure main()
|
|
|
|
L := ["fee fie", "huff and puff", "mirror mirror", "tick tock"]
|
|
K := ["hidie hi", "hidie ho", "mirror mirror on the Wall", "tick tock tick tok"]
|
|
Z := []
|
|
|
|
choice := choose_from_menu(L) # call using menu L
|
|
write("Returned value =", choice)
|
|
choice := choose_from_menu(K) # call using menu K
|
|
write("Returned value =", choice)
|
|
choice := choose_from_menu(Z) # call using empty list
|
|
write("Returned value =", choice)
|
|
|
|
|
|
end ## of main
|
|
# --------- subroutines below ---------------------------------
|
|
|
|
procedure choose_from_menu(X)
|
|
|
|
displaymenu(X)
|
|
repeat {
|
|
writes("Choose a number from the menu above: ")
|
|
a := read()
|
|
if a == "" then return(a) ## no selection
|
|
|
|
write("You selected ",a)
|
|
if numeric(a) then {
|
|
if integer(a) <= 0 | integer(a) > *X then displaymenu(X) else
|
|
{ ## check entered option in range
|
|
write(a, " ==> ",X[a])
|
|
return ( string(a))
|
|
}
|
|
}
|
|
else displaymenu(X)
|
|
}
|
|
|
|
end ## choose_from_menu(X)
|
|
|
|
procedure displaymenu(X)
|
|
every i := 1 to *X do
|
|
write(i,") ",X[i]) ## dispay menu options
|
|
|
|
end ## displaymenu(X)
|