Thanks, that worked. But I need to spend some time figurering out exactly why.
Suppose you are reading over my shoulder as a type. You can't read a character before I have typed it. You must wait until I have typed the character before you can read it.
Now suppose you are watching me type, and you are supposed to hit me on the head when I type your name and kick me when I type a number.
If you were watching for me to type your name, and then had to run get the bat to whack me with, you wouldn't run off until I typed your name. The findUntil() function is waiting, patiently, for a particular string (like your name) to arrive on the serial port (be typed). It returns as soon as that happens.
When it does, there is nothing else in the port buffer (I have typed nothing else).
So, if you want to see if I type your name, followed by a question mark, for instance, you must wait until I type another character before you can tell what that character is.
The speed at which data arrives on the serial port is not much faster than I can type (especially with all the backspacing to correct mistakes).
But, when you are reading what I type, it has all already arrived on your computer, and you forget that I entered the data very slowly - much slower than you can read.