Browse Source

Fix: Long menu entries (>14 or >18 chars) caused overrun in hitachi display implementation

Maik Stohn 12 years ago
parent
commit
e8572c5239
1 changed files with 7 additions and 7 deletions
  1. 7
    7
      Marlin/ultralcd_implementation_hitachi_HD44780.h

+ 7
- 7
Marlin/ultralcd_implementation_hitachi_HD44780.h View File

503
   #endif
503
   #endif
504
     lcd.setCursor(0, row);
504
     lcd.setCursor(0, row);
505
     lcd.print(pre_char);
505
     lcd.print(pre_char);
506
-    while((c = pgm_read_byte(pstr)) != '\0')
506
+    while( ((c = pgm_read_byte(pstr)) != '\0') && (n>0) )
507
     {
507
     {
508
         lcd.print(c);
508
         lcd.print(c);
509
         pstr++;
509
         pstr++;
525
   #endif
525
   #endif
526
     lcd.setCursor(0, row);
526
     lcd.setCursor(0, row);
527
     lcd.print(pre_char);
527
     lcd.print(pre_char);
528
-    while((c = pgm_read_byte(pstr)) != '\0')
528
+    while( ((c = pgm_read_byte(pstr)) != '\0') && (n>0) )
529
     {
529
     {
530
         lcd.print(c);
530
         lcd.print(c);
531
         pstr++;
531
         pstr++;
547
   #endif
547
   #endif
548
     lcd.setCursor(0, row);
548
     lcd.setCursor(0, row);
549
     lcd.print(pre_char);
549
     lcd.print(pre_char);
550
-    while((c = pgm_read_byte(pstr)) != '\0')
550
+    while( ((c = pgm_read_byte(pstr)) != '\0') && (n>0) )
551
     {
551
     {
552
         lcd.print(c);
552
         lcd.print(c);
553
         pstr++;
553
         pstr++;
617
         filename = longFilename;
617
         filename = longFilename;
618
         longFilename[LCD_WIDTH-1] = '\0';
618
         longFilename[LCD_WIDTH-1] = '\0';
619
     }
619
     }
620
-    while((c = *filename) != '\0')
620
+    while( ((c = *filename) != '\0') && (n>0) )
621
     {
621
     {
622
         lcd.print(c);
622
         lcd.print(c);
623
         filename++;
623
         filename++;
637
         filename = longFilename;
637
         filename = longFilename;
638
         longFilename[LCD_WIDTH-1] = '\0';
638
         longFilename[LCD_WIDTH-1] = '\0';
639
     }
639
     }
640
-    while((c = *filename) != '\0')
640
+    while( ((c = *filename) != '\0') && (n>0) )
641
     {
641
     {
642
         lcd.print(c);
642
         lcd.print(c);
643
         filename++;
643
         filename++;
658
         filename = longFilename;
658
         filename = longFilename;
659
         longFilename[LCD_WIDTH-2] = '\0';
659
         longFilename[LCD_WIDTH-2] = '\0';
660
     }
660
     }
661
-    while((c = *filename) != '\0')
661
+    while( ((c = *filename) != '\0') && (n>0) )
662
     {
662
     {
663
         lcd.print(c);
663
         lcd.print(c);
664
         filename++;
664
         filename++;
679
         filename = longFilename;
679
         filename = longFilename;
680
         longFilename[LCD_WIDTH-2] = '\0';
680
         longFilename[LCD_WIDTH-2] = '\0';
681
     }
681
     }
682
-    while((c = *filename) != '\0')
682
+    while( ((c = *filename) != '\0') && (n>0) )
683
     {
683
     {
684
         lcd.print(c);
684
         lcd.print(c);
685
         filename++;
685
         filename++;

Loading…
Cancel
Save