Some of the control flow follows the pattern of the larger sections: an
endless for-loop with a switch, and then cases that continue or break,
and another break out of the for loop. For the simpler cases, it's much
easier to read a simple while-loop that achieves the same in fewer
lines. No functional change intended.