No, the comparison is definitely written the right way in my translation. Here's what's happening. (I had to dig around in the SDL code a bit, but it sorta makes sense now.)

It locks the mutex for thread safety, then checks SDL_PollEvent(). SDL_PollEvent scans for new events from the OS. If it finds nothing, it returns 0, and SDL_CondWait() gets called, which temporarily unlocks the mutex in case any other threads want to push locally-created events onto the event queue, then loops back up to SDL_PollEvent again.

Repeat, repeat, and keep on repeating until it finds something, either from the OS or the application, in which case SDL_PollEvent returns 1, the comparison evaluates false, the mutex unlocks, and the routine exits, with a description of the event in the event parameter, which, being a pointer, doesn't need to be passed in as a var.

That's what it's supposed to be doing. But it's not actually catching my keystrokes. And with the base library written in C and made available to Delphi as a precompiled DLL, I set breakpoints in the debugger and find out why.

(If this seems like a strange way to handle things, it's because this unit was originally written to handle incoming network traffic, which can generate enough events to flood the SDL_Events queue under ordinary circumstances. The whole FastEvents library is heavily optimized for speed, so as to not miss any packets.)