First impressions: Obviously there's a lot going on here. I don't consider myself an expert on AutoLISP, but I've dabbled in many languages. Anyone remember SNOBOL? APL?
AutoLISP is not case sensitive, but using "Com" and "com" could confuse the casual reader (such as myself). Not only that, COM is the Component Object Model, which is a Microsoft thing you can use with AutoLISP; if that variable has nothing to do with COM, I'd use something else (again to avoid confusion).
You can overload functions in AutoLISP, but I think you have to use different argument lists. Since there are two definitions of FAS here with the same argument list, the first one will be ignored. Since the code is different, I'm not sure which one to discuss.
I have not seen the command-s keyword before. Interesting.
Wouldn't (logand 1 (getvar 'CMDACTIVE)) be equivalent to (eq (logand 1 (getvar 'CMDACTIVE)) 1)? Wait, no it isn't. This is the kind of thing that trips me up.
Welcome to the forum! A better programmer will be along shortly to help you.