Grr, I used to know how to do this. Honestly Delphi isn't made for console applications, you're better off with FPC for that.

Read/ReadLn do not exit until input, and the latter requires an EOL character/input for completion. I used to have a sort of "GetKey" statement that let me wait around until there was a key pressed, and then read the key from the buffer. But I can't remember, sorry. I also can't find anything helpful via Google.

I think you're out on a limb here unless someone has a personal method or something special. I highly advise against going multithreaded in a console application unless you intend to write methods to "lock" the read/write statements. Otherwise you'll make your own nasty can of worms.