Mercurial > public > ostc4
diff Discovery/Src/tInfo.c @ 38:5f11787b4f42
include in ostc4 repository
author | heinrichsweikamp |
---|---|
date | Sat, 28 Apr 2018 11:52:34 +0200 |
parents | |
children | b7689d9e888a |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Discovery/Src/tInfo.c Sat Apr 28 11:52:34 2018 +0200 @@ -0,0 +1,791 @@ +/////////////////////////////////////////////////////////////////////////////// +/// -*- coding: UTF-8 -*- +/// +/// \file Discovery/Src/tInfo.c +/// \brief Main Template file for Info menu page on left side +/// \author heinrichs weikamp gmbh +/// \date 11-Aug-2014 +/// +/// \details +/// +/// $Id$ +/////////////////////////////////////////////////////////////////////////////// +/// \par Copyright (c) 2014-2018 Heinrichs Weikamp gmbh +/// +/// This program is free software: you can redistribute it and/or modify +/// it under the terms of the GNU General Public License as published by +/// the Free Software Foundation, either version 3 of the License, or +/// (at your option) any later version. +/// +/// 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. +/// +/// You should have received a copy of the GNU General Public License +/// along with this program. If not, see <http://www.gnu.org/licenses/>. +////////////////////////////////////////////////////////////////////////////// + +/* Includes ------------------------------------------------------------------*/ +#include "tInfo.h" + +#include "data_exchange.h" +#include "tDebug.h" +#include "gfx_fonts.h" +#include "tHome.h" +//#include "tInfoDive.h" +//#include "tInfoSurface.h" +#include "tInfoCompass.h" +#include "tMenu.h" + +#include <string.h> + +/* Private types -------------------------------------------------------------*/ + +typedef struct +{ + uint32_t pEventFunction; + uint32_t callerID; +} SInfoEventHandler; + +typedef struct +{ + char orgText[32]; + char newText[32]; + char input; + char symbolCounter; + int8_t begin[4], size[4]; + uint16_t coord[3]; + tFont *fontUsed; + uint32_t callerID; + uint8_t maintype; + uint8_t subtype; +} SInfoIdent; + +typedef enum +{ + FIELD_BUTTON = 1, + FIELD_SELECT, + FIELD_SYMBOL, + FIELD_TOGGLE, + FIELD_ON_OFF, + FIELD_END +} SInfoField; + +/* Private variables ---------------------------------------------------------*/ +GFX_DrawCfgScreen tIscreen; +GFX_DrawCfgScreen tIcursor; + +uint8_t infoColor = CLUT_InfoSurface; + +int8_t TIid = 0; +int8_t TIidLast = -1; +SInfoIdent TIident[10]; + +int8_t TIevid = 0; +int8_t TIevidLast = -1; +SInfoEventHandler TIevent[10]; + +/* Private function prototypes -----------------------------------------------*/ +void tInfo_build_page(void); +void tInfo_showlog(void); + +void tI_draw_tIdesign(void); +void tI_set_cursor(uint8_t forThisIdentID); +void tI_startInfoFieldSelect(void); +void tInfo_write_content_of_actual_Id(void); +void tI_clean_content_of_actual_Id(void); +void tInfo_write_content_without_Id(void); + +void tI_clean_content(uint16_t XleftGimpStyle, uint16_t XrightGimpStyle, uint16_t YtopGimpStyle, const tFont *Font); +void tInfo_write_content(uint16_t XleftGimpStyle, uint16_t XrightGimpStyle, uint16_t YtopGimpStyle, const tFont *Font, const char *text, uint8_t color); + +void tI_resetInfo(uint8_t color); + +void tI_tInfo_refresh_live_content(void); +void tI_evaluateNewString (uint32_t editID, uint32_t *pNewValue1, uint32_t *pNewValue2, uint32_t *pNewValue3, uint32_t *pNewValue4); + +//void tI_tInfo_newInput (uint32_t editID, uint32_t int1, uint32_t int2, uint32_t int3, uint32_t int4); +//void tI_tInfo_newButtonText (uint32_t editID, char *text); + +void tI_enterInfoField(void); +void tI_nextInfoField(void); + +/* Announced function prototypes -----------------------------------------------*/ +//uint8_t OnAction_ILoglist (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); +//uint8_t OnAction_ISimulator (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); + +/* Exported functions --------------------------------------------------------*/ + +void tI_init(void) +{ + tIscreen.FBStartAdress = 0; + tIscreen.ImageHeight = 480; + tIscreen.ImageWidth = 800; + tIscreen.LayerIndex = 1; + + tIcursor.FBStartAdress = getFrame(12); + tIcursor.ImageHeight = 480; + tIcursor.ImageWidth = 800; + tIcursor.LayerIndex = 0; + + GFX_fill_buffer(tIcursor.FBStartAdress, 0xFF, CLUT_InfoCursor); +} + + +void openInfo(uint32_t modeToStart) +{ + if((modeToStart != StILOGLIST) && (modeToStart != StIDEBUG)) + return; + + TIid = 0; + TIidLast = -1; + TIevid = 0; + TIevidLast = -1; + + if(tIscreen.FBStartAdress) + releaseFrame(14,tIscreen.FBStartAdress); + tIscreen.FBStartAdress = getFrame(14); + +// GFX_SetFramesTopBottom(tIscreen.FBStartAdress, tIcursor.FBStartAdress,480); + GFX_SetFramesTopBottom(tIscreen.FBStartAdress, NULL,480); + infoColor = CLUT_InfoSurface; + + if(modeToStart == StIDEBUG) + { + tDebug_start(); + } + else + { + openLog(0); + } +// openInfoLogLastDive(); +} + +/* +void openInfo(void) +{ + if((stateUsed->mode == MODE_DIVE) && (!is_stateUsedSetToSim())) + { + return; + } + + TIid = 0; + TIidLast = -1; + TIevid = 0; + TIevidLast = -1; + + if(tIscreen.FBStartAdress) + releaseFrame(14,tIscreen.FBStartAdress); + tIscreen.FBStartAdress = getFrame(14); + + GFX_SetFramesTopBottom(tIscreen.FBStartAdress, tIcursor.FBStartAdress,480); + + if(stateUsed->mode == MODE_DIVE) + { + infoColor = CLUT_InfoSurface; + openInfo_Dive(); + } + else + { + infoColor = CLUT_InfoDive; + openInfo_Surface(); + } +} +*/ + +/* +uint8_t OnAction_ILoglist (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) +{ + return 255; +} +*/ + +void tInfo_refresh(void) +{ + if(!inDebugMode() && (get_globalState() != StICOMPASS)) + return; + + uint32_t oldIscreen; + + oldIscreen = tIscreen.FBStartAdress; + tIscreen.FBStartAdress = getFrame(14); + infoColor = CLUT_InfoCompass; + + if(inDebugMode()) + tDebug_refresh(); + else + refreshInfo_Compass(); + + if(inDebugMode() || (get_globalState() == StICOMPASS)) /* could be timeout and exitInfo */ + GFX_SetFramesTopBottom(tIscreen.FBStartAdress, NULL,480); + + if(oldIscreen) + releaseFrame(14,oldIscreen); +} + + +void exitInfo(void) +{ + set_globalState_tHome(); + releaseFrame(14,tIscreen.FBStartAdress); + exitDebugMode(); +} + + +void sendActionToInfo(uint8_t sendAction) +{ + if(inDebugMode()) + { + tDebugControl(sendAction); + return; + } + + if(get_globalState() == StICOMPASS) + return; + + switch(sendAction) + { + case ACTION_BUTTON_ENTER: + tI_enterInfoField(); + break; + case ACTION_BUTTON_NEXT: + tI_nextInfoField(); + break; + case ACTION_TIMEOUT: + case ACTION_MODE_CHANGE: + case ACTION_BUTTON_BACK: + exitInfo(); + default: + break; + case ACTION_IDLE_TICK: + case ACTION_IDLE_SECOND: + break; + } + +} + +/* Private functions ---------------------------------------------------------*/ + +void tInfo_build_page(void) +{ + tInfo_write_content_simple( 30, 340, 90, &FontT48, "Logbook", CLUT_Font020); + +} + +void tInfo_write_content_simple(uint16_t XleftGimpStyle, uint16_t XrightGimpStyle, uint16_t YtopGimpStyle, const tFont *Font, const char *text, uint8_t color) +{ + GFX_DrawCfgWindow hgfx; + + if(XrightGimpStyle > 799) + XrightGimpStyle = 799; + if(XleftGimpStyle >= XrightGimpStyle) + XleftGimpStyle = 0; + if(YtopGimpStyle > 479) + YtopGimpStyle = 479; + hgfx.Image = &tIscreen; + hgfx.WindowNumberOfTextLines = 1; + hgfx.WindowLineSpacing = 0; + hgfx.WindowTab = 400; + hgfx.WindowX0 = XleftGimpStyle; + hgfx.WindowX1 = XrightGimpStyle; + hgfx.WindowY1 = 479 - YtopGimpStyle; + if(hgfx.WindowY1 < Font->height) + hgfx.WindowY0 = 0; + else + hgfx.WindowY0 = hgfx.WindowY1 - Font->height; + + GFX_write_string_color(Font, &hgfx, text, 0, color); +} + +/* Exported functions --------------------------------------------------------*/ + +void tI_startInfoFieldSelect(void) +{ + TIid = 0; + tI_set_cursor(TIid); +} + + +void tI_nextInfoField(void) +{ + if(TIid < TIidLast) + TIid++; + else + TIid = 0; + tI_set_cursor(TIid); +} + + +void tI_previousInfoField(void) +{ + if(TIid > 0) + TIid--; + else + TIid = TIidLast; + tI_set_cursor(TIid); +} + + +uint8_t tI_get_newContent_of_actual_id_block_and_subBlock(uint8_t action) +{ + uint8_t (*onActionFunc)(uint32_t, uint8_t, uint8_t, uint8_t, uint8_t); + uint8_t content; + + if(TIevent[TIevid].callerID != TIident[TIid].callerID) + return 0; + + onActionFunc = (uint8_t (*)(uint32_t, uint8_t, uint8_t, uint8_t, uint8_t))(TIevent[TIevid].pEventFunction); + + if(TIident[TIid].maintype == FIELD_ON_OFF) + content = TIident[TIid].input; + else + content = 0; /* just a default for protection */ + + return onActionFunc(TIident[TIid].callerID, 0, 0, content, action); +} + + +void tI_enterInfoField(void) +{ + uint8_t newContent; + + TIevid = 0; + while((TIevid < TIevidLast) && (TIevent[TIevid].callerID != TIident[TIid].callerID)) + { + TIevid++; + } + + if(TIevent[TIevid].callerID != TIident[TIid].callerID) + return; + + newContent = tI_get_newContent_of_actual_id_block_and_subBlock(ACTION_BUTTON_ENTER); + + if(newContent == 255) + { + exitInfo(); + return; + } + + switch(TIident[TIid].maintype) + { + case FIELD_BUTTON: + break; + case FIELD_ON_OFF: + break; + case FIELD_SYMBOL: + TIident[TIid].input += 1; + if(TIident[TIid].input >= TIident[TIid].symbolCounter) + TIident[TIid].input = 0; + TIident[TIid].newText[0] = TIident[TIid].orgText[TIident[TIid].input]; + tInfo_write_content_of_actual_Id(); + break; + } +} + + +void tI_evaluateNewString(uint32_t editID, uint32_t *pNewValue1, uint32_t *pNewValue2, uint32_t *pNewValue3, uint32_t *pNewValue4) +{ + if(editID != TIident[TIid].callerID) + return; + + uint8_t i, digitCount, digit; + uint32_t sum[4], multiplier; + + for(i=0;i<4;i++) + sum[i] = 0; + + i = 0; + while( TIident[TIid].size[i] && (i < 4)) + { + multiplier = 1; + for(digitCount = 1; digitCount < TIident[TIid].size[i]; digitCount++) + multiplier *= 10; + + for(digitCount = 0; digitCount < TIident[TIid].size[i]; digitCount++) + { + digit = TIident[TIid].newText[TIident[TIid].begin[i] + digitCount]; + + if(digit > '0') + digit -= '0'; + else + digit = 0; + + if(digit > 9) + digit = 9; + + sum[i] += digit * multiplier; + + if(multiplier >= 10) + multiplier /= 10; + else + multiplier = 0; + } + i++; + } + + *pNewValue1 = sum[0]; + *pNewValue2 = sum[1]; + *pNewValue3 = sum[2]; + *pNewValue4 = sum[3]; +} + + +uint8_t tI_get_id_of(uint32_t editID) +{ + uint8_t temp_id; + + if(editID == TIident[TIid].callerID) + return TIid; + else + { + temp_id = 0; + while((temp_id < 9) && (editID != TIident[temp_id].callerID)) + temp_id++; + if(editID != TIident[temp_id].callerID) + temp_id = 255; + return temp_id; + } +} + + +void tI_newButtonText(uint32_t editID, char *text) +{ + uint8_t backup_id, temp_id; + + temp_id = tI_get_id_of(editID); + if(temp_id == 255) + return; + + backup_id = TIid; + TIid = temp_id; + + strncpy(TIident[TIid].newText, text, 32); + TIident[TIid].newText[31] = 0; + + tI_clean_content_of_actual_Id(); + tInfo_write_content_of_actual_Id(); + + TIid = backup_id; +} + + +void tInfo_set_on_off(uint32_t editID, uint32_t int1) +{ + uint8_t backup_id, temp_id; + + temp_id = tI_get_id_of(editID); + if(temp_id == 255) + return; + + backup_id = TIid; + TIid = temp_id; + + TIident[TIid].input = int1; + + if(int1) + change_CLUT_entry((CLUT_InfoField0 + TIid), CLUT_InfoActive); + else + change_CLUT_entry((CLUT_InfoField0 + TIid), CLUT_InfoInActive); + + tInfo_write_content_of_actual_Id(); + + TIid = backup_id; +} + + +void tInfo_write_content_without_Id(void) +{ + tInfo_write_content( TIident[TIid].coord[0], TIident[TIid].coord[1], TIident[TIid].coord[2], TIident[TIid].fontUsed, TIident[TIid].newText, CLUT_InfoFieldRegular); +} + + +void tInfo_write_content_of_actual_Id(void) +{ + tInfo_write_content( TIident[TIid].coord[0], TIident[TIid].coord[1], TIident[TIid].coord[2], TIident[TIid].fontUsed, TIident[TIid].newText, (CLUT_InfoField0 + TIid)); +} + + +void tI_clean_content_of_actual_Id(void) +{ + tI_clean_content( TIident[TIid].coord[0], TIident[TIid].coord[1], TIident[TIid].coord[2], TIident[TIid].fontUsed); +} + + +void tInfo_write_field_button(uint32_t editID, uint16_t XleftGimpStyle, uint16_t XrightGimpStyle, uint16_t YtopGimpStyle, const tFont *Font, const char *text) +{ + if(TIidLast >= 9) + return; + + TIident[TIid].maintype = FIELD_BUTTON; + TIident[TIid].subtype = FIELD_BUTTON; + + TIident[TIid].coord[0] = XleftGimpStyle; + TIident[TIid].coord[1] = XrightGimpStyle; + TIident[TIid].coord[2] = YtopGimpStyle; + TIident[TIid].fontUsed = (tFont *)Font; + TIident[TIid].callerID = editID; + + strncpy(TIident[TIid].orgText, text, 32); + strncpy(TIident[TIid].newText, text, 32); + TIident[TIid].orgText[31] = 0; + TIident[TIid].newText[31] = 0; + + change_CLUT_entry((CLUT_InfoField0 + TIid), CLUT_InfoButtonColor1); + + if(editID == NULL) + tInfo_write_content_without_Id(); + else + { + tInfo_write_content_of_actual_Id(); + TIidLast = TIid; + TIid++; + } +} + + +void tInfo_write_field_symbol(uint32_t editID, uint16_t XleftGimpStyle, uint16_t XrightGimpStyle, uint16_t YtopGimpStyle, const tFont *Font, const char *text, uint8_t int1) +{ + if(TIidLast >= 9) + return; + + TIident[TIid].maintype = FIELD_SYMBOL; + TIident[TIid].subtype = FIELD_SYMBOL; + + TIident[TIid].coord[0] = XleftGimpStyle; + TIident[TIid].coord[1] = XrightGimpStyle; + TIident[TIid].coord[2] = YtopGimpStyle; + TIident[TIid].fontUsed = (tFont *)Font; + TIident[TIid].callerID = editID; + + strncpy(TIident[TIid].orgText, text, 32); + strncpy(TIident[TIid].newText, text, 32); + TIident[TIid].orgText[31] = 0; + + TIident[TIid].newText[0] = text[0]; + TIident[TIid].newText[1] = 0; + + TIident[TIid].input = int1; + TIident[TIid].symbolCounter = strlen(TIident[TIid].orgText); + + change_CLUT_entry((CLUT_InfoField0 + TIid), CLUT_InfoButtonColor1); + + if(editID == NULL) + tInfo_write_content_without_Id(); + else + { + tInfo_write_content_of_actual_Id(); + TIidLast = TIid; + TIid++; + } +} + + +void tInfo_write_field_on_off(uint32_t editID, uint16_t XleftGimpStyle, uint16_t XrightGimpStyle, uint16_t YtopGimpStyle, const tFont *Font, const char *text, uint8_t int1) +{ + if(TIidLast >= 9) + return; + + TIident[TIid].maintype = FIELD_ON_OFF; + TIident[TIid].subtype = FIELD_ON_OFF; + + TIident[TIid].coord[0] = XleftGimpStyle; + TIident[TIid].coord[1] = XrightGimpStyle; + TIident[TIid].coord[2] = YtopGimpStyle; + TIident[TIid].fontUsed = (tFont *)Font; + TIident[TIid].callerID = editID; + + strncpy(TIident[TIid].orgText, text, 32); + strncpy(TIident[TIid].newText, text, 32); + TIident[TIid].orgText[31] = 0; + TIident[TIid].newText[31] = 0; + + + if(int1) + change_CLUT_entry((CLUT_InfoField0 + TIid), CLUT_InfoActive); + else + change_CLUT_entry((CLUT_InfoField0 + TIid), CLUT_InfoInActive); + + if(editID == NULL) + tInfo_write_content_without_Id(); + else + { + tInfo_write_content_of_actual_Id(); + TIidLast = TIid; + TIid++; + } +} + + +void tInfo_setEvent(uint32_t inputEventID, uint32_t inputFunctionCall) +{ + if(TIevidLast >= 9) + return; + + /* set cursor to first field */ + if(TIevidLast < 0) + { + tI_startInfoFieldSelect(); + } + + TIevent[TIevid].callerID = inputEventID; + TIevent[TIevid].pEventFunction = inputFunctionCall; + + TIevidLast = TIevid; + TIevid++; +} + + +void tI_set_cursor(uint8_t forThisIdentID) +{ + int16_t x0, x1, y0, y1; + + uint32_t xtra_left_right = 10; + uint32_t xtra_top_bottom = 10; + + /* y geht von 0 bis 799 */ + /* x geht von 0 bis 479 */ + + x0 = (int16_t)TIident[forThisIdentID].coord[0]; + x1 = (int16_t)TIident[forThisIdentID].coord[1]; + y0 = (int16_t)TIident[forThisIdentID].coord[2]; + y1 = y0 + (int16_t)TIident[forThisIdentID].fontUsed->height; + + if(((int16_t)TIident[forThisIdentID].fontUsed->height) > 70) + { + xtra_left_right = 10; + xtra_top_bottom = 10; + } + else + { + xtra_left_right = 10; + xtra_top_bottom = 0; + } + + x0 -= xtra_left_right; + x1 += xtra_left_right; + y0 -= xtra_top_bottom; + y1 += xtra_top_bottom; + + GFX_SetWindowLayer0(tIcursor.FBStartAdress, x0, x1, y0, y1); +} + + +void tInfo_write_label_var(uint16_t XleftGimpStyle, uint16_t XrightGimpStyle, uint16_t YtopGimpStyle, const tFont *Font, const char *text) +{ + GFX_DrawCfgWindow hgfx; + + if(XrightGimpStyle > 799) + XrightGimpStyle = 799; + if(XleftGimpStyle >= XrightGimpStyle) + XleftGimpStyle = 0; + if(YtopGimpStyle > 479) + YtopGimpStyle = 479; + hgfx.Image = &tIscreen; + hgfx.WindowNumberOfTextLines = 1; + hgfx.WindowLineSpacing = 0; + hgfx.WindowTab = 0; + hgfx.WindowX0 = XleftGimpStyle; + hgfx.WindowX1 = XrightGimpStyle; + hgfx.WindowY1 = 479 - YtopGimpStyle; + if(hgfx.WindowY1 < Font->height) + hgfx.WindowY0 = 0; + else + hgfx.WindowY0 = hgfx.WindowY1 - Font->height; + + GFX_write_label(Font, &hgfx, text, infoColor); +} + + +void tInfo_write_content(uint16_t XleftGimpStyle, uint16_t XrightGimpStyle, uint16_t YtopGimpStyle, const tFont *Font, const char *text, uint8_t color) +{ + GFX_DrawCfgWindow hgfx; + + if(XrightGimpStyle > 799) + XrightGimpStyle = 799; + if(XleftGimpStyle >= XrightGimpStyle) + XleftGimpStyle = 0; + if(YtopGimpStyle > 479) + YtopGimpStyle = 479; + hgfx.Image = &tIscreen; + hgfx.WindowNumberOfTextLines = 1; + hgfx.WindowLineSpacing = 0; + hgfx.WindowTab = 0; + hgfx.WindowX0 = XleftGimpStyle; + hgfx.WindowX1 = XrightGimpStyle; + hgfx.WindowY1 = 479 - YtopGimpStyle; + if(hgfx.WindowY1 < Font->height) + hgfx.WindowY0 = 0; + else + hgfx.WindowY0 = hgfx.WindowY1 - Font->height; + + GFX_write_label(Font, &hgfx, text, color); +} + + +void tInfo_write_label_fix(uint16_t XleftGimpStyle, uint16_t XrightGimpStyle, uint16_t YtopGimpStyle, const tFont *Font, const char textId) +{ + char text[2]; + + text[0] = textId; + text[1] = 0; + + tInfo_write_label_var(XleftGimpStyle, XrightGimpStyle, YtopGimpStyle, Font, text); +} + + +void tI_clean_content(uint16_t XleftGimpStyle, uint16_t XrightGimpStyle, uint16_t YtopGimpStyle, const tFont *Font) +{ + GFX_DrawCfgWindow hgfx; + + if(XrightGimpStyle > 799) + XrightGimpStyle = 799; + if(XleftGimpStyle >= XrightGimpStyle) + XleftGimpStyle = 0; + if(YtopGimpStyle > 479) + YtopGimpStyle = 479; + hgfx.Image = &tIscreen; + hgfx.WindowX0 = XleftGimpStyle; + hgfx.WindowX1 = XrightGimpStyle; + hgfx.WindowY1 = 479 - YtopGimpStyle; + if(hgfx.WindowY1 < Font->height) + hgfx.WindowY0 = 0; + else + hgfx.WindowY0 = hgfx.WindowY1 - Font->height; + + GFX_clear_window_immediately(&hgfx); +} + + +void tInfo_write_buttonTextline(GFX_DrawCfgScreen *screenPtr, uint8_t left2ByteCode, char middle2ByteCode, char right2ByteCode) +{ + GFX_clean_area(&tIscreen, 0, 800, 480-24,480); + + char localtext[32]; + + if(left2ByteCode) + { + localtext[0] = TXT_2BYTE; + localtext[1] = left2ByteCode; + localtext[2] = 0; + write_content_simple(screenPtr, 0, 800, 480-24, &FontT24,localtext,CLUT_ButtonSurfaceScreen); + } + + if(middle2ByteCode) + { + localtext[0] = '\001'; + localtext[1] = TXT_2BYTE; + localtext[2] = middle2ByteCode; + localtext[3] = 0; + write_content_simple(screenPtr, 0, 800, 480-24, &FontT24,localtext,CLUT_ButtonSurfaceScreen); + } + + if(right2ByteCode) + { + localtext[0] = '\002'; + localtext[1] = TXT_2BYTE; + localtext[2] = right2ByteCode; + localtext[3] = 0; + write_content_simple(screenPtr, 0, 800, 480-24, &FontT24,localtext,CLUT_ButtonSurfaceScreen); + } +}