Manifestly better code

Use manifest constants (aka #define in C, const enum in C++) to give some meaning and life to all those 0's, 1's, and -1's.

It is so much easier to read and debug code that passes an enum to a function rather than just a 1.

Only use 1 and 0 when you mean "quantity of".