LinuxCNC is is probably the most flexible of all controllers. It does have quite a learning curve though. I haven't used it myself, at least not yet, I'm not really a liunux guy. There's also a branch created by Tormach called PathPilot that I think has a little fancier interface, but may be harder to customize to your machine (I think?)
Price is a wide range, the software itself is free, and you can use it on a basic PC with a parallel port, but to get high performace you'll need some motion control hardware.