First a typo: PRC_flip should be PTC_flip. Sorry about that.
Flipbuffers() doesn't work how you think it does. What you have, both with PTC and PB, is 2 screens-worth allocated in video memory. In both, one of these screens is the one which you are actually seeing (the front buffer), and the other is offscreen (called the back buffer). In PB you draw pixels or blit sprites directly on to the back buffer. In PTC you draw the back buffer image into an array, and then use PTC_update to copy the entire array in to the back buffer. Finally, you call FlipBuffers or PTC_flip to make the back buffer into the front buffer (to get it on to the display, no copy involved), and the front buffer becomes the back buffer. Effectively this just flips a pointer on the graphics card to tell it to draw the display on the monitor from a different piece of video memory, and the change happens instantaneously.
The reason for this is called double buffering. If you were drawing to the piece of memory which is presently being displayed, you'd see the pixels or blits happening on the screen one-by-one. You don't want to see that, so you construct the entire frame offscreen and then flip to it in one go.
Jim