Why do you have so many variables defined as static longs? Each one of those takes up 4 bytes of SRAM. Also, that String array isn't doing you any good - quit using the String class, and use a char array.
All that said - I am not even sure what it is that this code is meant for, or what it does exactly; I have a feeling that whatever it is doing, it likely could be greatly simplified in order to use less SRAM. I don't have any objective reasons for feeling this way - it's just a gut reaction to looking at the code, and having been a software developer for 25 years...
What is it you are trying to accomplish here?
I'm counting how many times each command is used. What if someone doesn't reset for a while and uses a command more than a couple hundred times? A static unsigned int would overflow.
As for why I'm writing this, I want a command-based interface (like minecraft commands).
I just put F() macros everywhere they were needed, and compiled the code for the 168 processor, with only 1024 RAM, without getting a low memory warning.
Just 621 bytes of RAM used.
I could probably save some more.
Could you give me a download link? Thanks in advance. All of you, your help is greatly appreciated.
Also, please people, slow down. I can only post once every 10 minutes.