/* * Copyright (C) OpenTX * * Based on code named * th9x - http://code.google.com/p/th9x * er9x - http://code.google.com/p/er9x * gruvin9x - http://code.google.com/p/gruvin9x * * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "../../opentx.h" #define TEXT_FILE_MAXSIZE 2048 char s_text_file[TEXT_FILENAME_MAXLEN]; char s_text_screen[NUM_BODY_LINES][LCD_COLS+1]; void readTextFile(int & lines_count) { FIL file; int result; char c; unsigned int sz; int line_length = 0; int escape = 0; char escape_chars[2]; int current_line = 0; memset(s_text_screen, 0, sizeof(s_text_screen)); result = f_open(&file, s_text_file, FA_OPEN_EXISTING | FA_READ); if (result == FR_OK) { for (int i=0; i=menuVerticalOffset && current_line-menuVerticalOffset0 && escape<3) { escape_chars[escape-1] = c; if (escape == 2 && !strncmp(escape_chars, "up", 2)) { c = '\300'; escape = 0; } else if (escape == 2 && !strncmp(escape_chars, "dn", 2)) { c = '\301'; escape = 0; } else { escape++; continue; } } else if (c=='~') { c = 'z'+1; } else if (c=='\t') { c = 0x1D; //tab } escape = 0; s_text_screen[current_line-menuVerticalOffset][line_length++] = c; } } if (c != '\n') { current_line += 1; } f_close(&file); } if (lines_count == 0) { lines_count = current_line; } } bool menuTextView(evt_t event) { static int lines_count; drawScreenTemplate("TEXT VIEWER", NULL); switch (event) { case EVT_ENTRY: menuVerticalOffset = 0; lines_count = 0; readTextFile(lines_count); break; case EVT_ROTARY_LEFT: if (menuVerticalOffset == 0) break; else menuVerticalOffset--; readTextFile(lines_count); break; case EVT_ROTARY_RIGHT: if (menuVerticalOffset+NUM_BODY_LINES >= lines_count) break; else ++menuVerticalOffset; readTextFile(lines_count); break; case EVT_KEY_FIRST(KEY_EXIT): popMenu(); break; } for (int i=0; i