Example #1
0
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;
}