Completely offtopic, but am I the only one who don't like the usage of ! in the strcmp checks? To me conceptually !cond is checking for falsity, but the return value from strcmp is not logically a boolean
I do wonder what would have happened if truth had been defined like it is in Forth[1]? That would make me go with the enums.
1) False is 0 (all bits set to 0), and True is -1 (all bits set to 1 giving a twos-complement -1).