                                   - better debugging output
                                   - parametrize CW/CCW motor initialization
                                   - highlight the treadle while weaving, not just the line
+   12 Feb 2017, L. Shustek, V1.4  - more interesting light show during weaving
+                                  - make the vertical button during weaving be "undo" to the previous shed
+                                  - allow abort from load/save/erase menu
+   23 Mar 2017, L. Shustek, V1.5  - increase max treadle sequence to 99
+                                  - fix bug when editing the filename extends its length
+                                  - temporarily disable motors during weaving if there is no activity for a few minutes.
+   27 Mar 2017, L. Shustek, V1.6  - display filename on top-level screen, or "unsaved" if pgmg changes are made
+                                  - default to current file in load/save menu
 */
+#define VERSION "1.6"
 
 /* TODO:
     - Invent a more programmatic way to configure treadle sequences with repeat loops.
       Since weaving is limited to one treadle at a time we can use decimal rather than unary
       notation on the narrow display. It doesn't match weaving books, though, so weavers would
       consider that sacriligious!
-      Idea #1: a third programming mode for "treadle loops", in addition to the traditional sequence.
+
+      Idea #1: a programming mode for "treadle loops", in addition to the traditional sequence.
       The notation might be like this, using "Irish Meadows blanket" as an example:
           4x: 5 6
           6x: 6 5

                  --shaft_num_on_bottom; } }
            break;
         case ePBH: // green (left, horizontal) button
            tieup[shaft_num][treadle_num] = true;
            goto move_right;
         case ePBV: // red (right, vertical) button
            tieup[shaft_num][treadle_num] = false;
            goto move_right;
         case ePB1:  // top button: stop programming

                  lcd.blink(); }
               else if (charnum < MAX_FILENAME) {
                  ++charnum;
                  if (file_hdr.filename[charnum] == '\0') { // if we're going beyond the end
                     file_hdr.filename[charnum] = ' ';        // change NUL to a blank
                     file_hdr.filename[charnum + 1] = '\0';   // and make a new NUL end
                  } } }
            break;
         case eVrotR:  // move down
            if (!save || row_select) {
