/***************************************************************************
 *             __________               __   ___.
 *   Open      \______   \ ____   ____ |  | _\_ |__   _______  ___
 *   Source     |       _//  _ \_/ ___\|  |/ /| __ \ /  _ \  \/  /
 *   Jukebox    |    |   (  <_> )  \___|    < | \_\ (  <_> > <  <
 *   Firmware   |____|_  /\____/ \___  >__|_ \|___  /\____/__/\_ \
 *                     \/            \/     \/    \/            \/
 * $Id$
 *
 * Copyright (C) 2002 Daniel Stenberg
 *
 * All files in this archive are subject to the GNU General Public License.
 * See the file COPYING in the source tree root for full license agreement.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ****************************************************************************/

#include <string.h>

#include "file.h"
#include "lcd.h"
#include "kernel.h"
#include "button.h"
#include "sprintf.h"

static int here=0;

char *singleshow(char *word)
{
    static unsigned char words[22];
    int len = strlen(word);

    if(len>=10) {
        if(len < 12 ) {
            lcd_clear_display();
            lcd_puts(0,0, word);
            strcpy(words, "");
            here=0;
            return words;
        }
        /* huuuge word, use two lines! */
        return NULL;
    }

    else if(here +1 + len <= 11) { /* 1 is for space */
        if(words[0])
            strcat(words, " ");
        strcat(words, word);
        here+=1+len;
        return NULL; /* no show right now */
    }
    else {
        lcd_clear_display();
        lcd_puts(0,0, words);
        strcpy(words, word);
        here=len;
        return words;
    }
}

#define SEP(x) (((x) == '\n') || ((x) == '\t') || ((x) == ' '))

void showtext(char *filename)
{
  static char textbuffer[1024];

  int fd;
  int size;
  char *ptr;
  char *end;
  unsigned char backup;
  char num[8];
  int count=0;
  int b;
  char *show;
  int delay = HZ;

  fd = open(filename, O_RDONLY);
  
  if(-1 == fd)
    return;

  do {
      size = read(fd, textbuffer, sizeof(textbuffer));

      ptr = textbuffer;
      while (size > 0) {
          while(ptr && *ptr && SEP(*ptr)) {
              ptr++;
              size--;
              count++;
          }
          end = ptr;
          
          while(end && *end && !SEP(*end)) {
              end++;
              count++;
          }

          backup = *end;
          *end = 0;


          show = singleshow(ptr);

          if(show) {
              snprintf(num, sizeof(num), "%d", count);
              lcd_puts(0,1, num);
          }

          *end = backup;
      
          ptr += (end - ptr);
          size -= (end - ptr);
          
          b = button_get(false);
          if(b) {
              size = -1;
              break;
          }
          if(show)
              sleep(delay);
    }
    

  } while(size>0);

  close(fd);

}
