It sounds like you're on a crusade to simplify controls
I am.
you're afraid that, without the 16 key limit, someone could use your library to create a complex control scheme.
Why ignore what I've said in both of my last posts?: I will look into a way to include both bit flags and strings. I'm not "afraid" that people will make bad games, which they do anyway. I'm just not going to include features I don't feel are important if I have to remove features (bit flags) that are.
You're also assuming that this "feature" is desired.
You're right. I am assuming that certain features are desired, and that's why I'm writing a library. It would be very easy to release a blank file with no features in it, so as not to assume anything. Why ignore what I said before, that if I can make it accept both bit flags and strings, then I'll include the ability to opt out of this feature.
...4-directional movement
Just drop it already. Seriously. Read what is written before, I'm not going to type it again.
(though I think keypress should be cleared automatically after they're handled)
And what does "handled" mean? If you've got a library like yours where key strokes are tied directly to commands, then sure, clear the key stroke immediately. Do you even understand why someone would want key-states? The value gets stored, instead of triggering an event immediately, so that the game can check it later. If you want a command to execute immediately when the button is pressed, use the default macro system.
The majority of gamers prefer a keyboard and mouse for playing an RTS, so I'm not sure what you're trying to say here. It sounds like you're on a crusade to simplify controls and you're afraid that, without the 16 key limit, someone could use your library to create a complex control scheme. Is this right?
You're also assuming that this "feature" is desired. What if someone wants to know if a player is pressing both left and right? What if 8 and 4 were mapped to different keys instead of left and right? The way the library is set up there's no way to handle this. If the library didn't include this feature (that is, the automatic clearing of the opposite direction) it could still be implemented in a demo that uses the library. If this feature is so important I'm not sure why you thought I was out of line to say that the library is tailored for 4-directional movement.
It would be better to make no assumptions about clearing of keys (though I think keypress should be cleared automatically after they're handled) like you do about opposing directions. Instead, let the person using the library define them.
This would tell the library to treat the specified keys in the manner you're already treating them. You never know, someone might want other keys to work this way or they might want the arrow keys to not work this way,
If you want to make an NES style input library, that's fine, just be clear about what you're doing.