char Synta::recieveCommand(char* dataPacket, char character){ if(validPacket){ if (character == startInChar){ goto error; //new command without old finishing! (dataPacket contains error message) } commandString[commandIndex++] = character; //Add character to current string build if(character == endChar){ if(validateCommand(commandIndex)){ strcpy(dataPacket,commandString); //Return decoded packet validPacket = 0; return 1; //Successful decode (dataPacket contains decoded packet) } else { goto error; //Decode Failed (dataPacket contains error message) } } else if (commandIndex == sizeof(commandString)){ goto error; //Message too long! (dataPacket contains error message) } } else if (character == startInChar){ //Begin new command commandIndex = 0; validPacket = 1; clearBuffer(commandString,sizeof(commandString)); } return 0; //Decode not finished (dataPacket unchanged) error: error(dataPacket); validPacket = 0; return -1; }
bool executeExternalCommand(char * firstArg) { LinkedList<char *> * tokens = new LinkedList<char *>(firstArg); tokenizeString(tokens); if(!validateCommand(tokens)) return false; LinkedList<Command *> * commands = new LinkedList<Command *>(); if(!buildCommands(tokens, commands)) return false; if(!executeCommands(commands)) return false; delete tokens; return true; }