 //     FG;          get frequency
 //     CSn;         set cursor to index 'n'
 //     CG;          get cursor index
-//     DS+n;        increment frequency digit by 'n'
-//     DS-n;        decrement frequency digit by 'n'
+//     DS+n;        increment display selected digit by 'n'
+//     DS-n;        decrement display selected digit by 'n'
 //##############################################################################
 
 //----------------------------------------
-// Get the identifire string:
+// Get help:
+//     H;
+//----------------------------------------
+
+const char * xcmd_help(char *answer, char *cmd)
+{
+  strcpy(answer, "H;           send help text to console\n");
+  strcat(answer, "BR;          boot reload software via USB\n");
+  strcat(answer, "BS;          boot soft, restart program\n");
+  strcat(answer, "ID;          get device identifier string\n");
+  strcat(answer, "MO;          set VFO mode to 'online'\n");
+  strcat(answer, "MS;          set VFO mode to 'standby'\n");
+  strcat(answer, "MG;          get VFO mode\n");
+  strcat(answer, "FSnnnnnnnn;  set frequency to 'nnnnnnnn'\n");
+  strcat(answer, "FG;          get frequency\n");
+  strcat(answer, "CSn;         set cursor to index 'n'\n");
+  strcat(answer, "CG;          get cursor index\n");
+  strcat(answer, "DS+n;        increment display selected digit by 'n'\n");
+  strcat(answer, "DS-n;        decrement display selected digit by 'n'");
+  return answer;
+}
+
+//----------------------------------------
+// Boot:
+//     BR;  boot, reload software via USB
+//     BS;  boot soft, restart program
+//----------------------------------------
+
+const char * xcmd_boot(char *answer, char *cmd)
+{
+  if (strlen(cmd) != 3)
+    return "ERROR";
+
+  switch (cmd[1])
+  {
+    case 'R':
+      // hard reboot
+      return "Would do hard reboot";
+    case 'S':
+      // soft reboot
+      return "Would do soft reboot";
+  }
+  
+  return "ERROR";
+}
+
+//----------------------------------------
+// Get the identifier string:
 //     ID;
 //----------------------------------------
 
-const char * xcmd_id(char *cmd)
+const char * xcmd_id(char *answer, char *cmd)
 {
   // if not legal, complain
   if (strcmp(cmd, "ID;"))
     return "ERROR";
 
   // generate ID string and return
-  strcpy(FreqBuffer, ProgramName);
-  strcat(FreqBuffer, " ");
-  strcat(FreqBuffer, Version);
-  return FreqBuffer;
+  strcpy(answer, Version);
+  strcat(answer, MinorVersion);
+  return answer;
 }
 
 //----------------------------------------

          VfoClockOffset -= offset2bump[seldig];
          if (VfoClockOffset < MinClockOffset)
            VfoClockOffset = MinClockOffset;
#ifdef DEBUG
          Serial.printf(F("calibrate_action: vfo_RLeft, after VfoClockOffset=%d\n"),
                        VfoClockOffset);
#endif

  struct MenuItem **items;    // array of pointers to MenuItem data
};

#if (DEBUG > 0)
//----------------------------------------
// dump a MenuItem to the console
// only called from dump_menu()
