Memory issue?

Now store help in the flash:

//Help text

prog_uchar PROGMEM helpText[] = 
  "~\r\n"
  "~USB ASCII to Morse converter.\r\n"
  "~\r\n"
  "~Help:"
.... snipped for brevity.

and retrieve with this:

/*

Help

*/

void help() {
  unsigned char character;
  int index = 0; 
  while ((character = pgm_read_byte_near(helpText + index)) != 0) {
    Serial.print(character);
    index++; 
  } 
}

Help now no longer has an issue. Job done!

Still appear to have buffer overruns, but that is a separate issue - lower maximum allowable user input and make code more memory efficient are to strategies.