curses is the right way to do this. You could manually use ANSI scroll regions and cursor positioning but this will be less portable and more work in the long run.
If you want more information on how ANSI terminals work, this wikipedia page is a good starting place with lots of links.
I strongly recommend curses though. Dealing with straight ANSI on one terminal emulator can be a headache; supporting multiple OSes and slight differences in popular terminal emulators isn't worth the trouble (in my opinion.)