diff Discovery/Src/tMenuEdit.c @ 38:5f11787b4f42

include in ostc4 repository
author heinrichsweikamp
date Sat, 28 Apr 2018 11:52:34 +0200
parents
children cc8e24374b83
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Discovery/Src/tMenuEdit.c	Sat Apr 28 11:52:34 2018 +0200
@@ -0,0 +1,1866 @@
+///////////////////////////////////////////////////////////////////////////////
+/// -*- coding: UTF-8 -*-
+///
+/// \file   Discovery/Src/tMenuEdit.c
+/// \brief  Main Template file for Menu Setting Modifications
+/// \author heinrichs weikamp gmbh
+/// \date   04-July-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 "tMenuEdit.h"
+
+#include "externLogbookFlash.h"
+#include "gfx_fonts.h"
+#include "tHome.h"
+#include "tInfoCompass.h"
+#include "tMenuEditHardware.h"
+#include "tMenuEditPlanner.h"
+#include "tMenuEditSystem.h"
+#include "tMenuEditXtra.h"
+
+/* Private types -------------------------------------------------------------*/
+#define TEXTSIZE 16
+
+typedef struct
+{
+    uint32_t pEventFunction;
+    uint32_t callerID;
+} SEventHandler;
+
+typedef struct
+{
+    uint32_t pEventFunction;
+    uint8_t functionParameter;
+    uint8_t line;
+} SBackMenuHandler;
+
+typedef struct
+{
+    char orgText[32];
+    char newText[32];
+    uint16_t input[4];
+    uint16_t coord[3];
+    int8_t begin[4], size[4];
+    tFont *fontUsed;
+    uint32_t callerID;
+    uint8_t maintype;
+    uint8_t subtype;
+} SEditIdent;
+
+    typedef enum
+{
+  FIELD_NUMBERS = 0,
+    FIELD_BUTTON,
+    FIELD_SELECT,
+    FIELD_SYMBOL,
+    FIELD_TOGGLE,
+    FIELD_ON_OFF,
+    FIELD_UDIGIT,
+    FIELD_2DIGIT,
+    FIELD_3DIGIT,
+    FIELD_FLOAT,
+    FIELD_END
+} SField;
+
+/* Private variables ---------------------------------------------------------*/
+GFX_DrawCfgScreen	tMEscreen;
+GFX_DrawCfgScreen	tMEcursor;
+GFX_DrawCfgScreen	tMEcursorNew;
+
+uint32_t menuID;
+uint8_t menuColor;
+
+int8_t id = 0;
+int8_t idLast = -1;
+SEditIdent ident[10];
+int8_t tME_stop = 0;
+
+int8_t evid = 0;
+int8_t evidLast = -1;
+SEventHandler event[10];
+
+SBackMenuHandler backmenu;
+
+int8_t block = 0;
+int8_t subBlockPosition = 0;
+
+_Bool EnterPressedBeforeButtonAction = 0;
+_Bool EnterPressed = 0;
+
+_Bool WriteSettings = 0;
+
+/* Private function prototypes -----------------------------------------------*/
+void draw_tMEdesign(void);
+void set_cursor(uint8_t forThisIdentID);
+void set_cursorNew(uint8_t forThisIdentID);
+void startMenuEditFieldSelect(void);
+void create_newText_for_actual_Id(void);
+void write_content_of_actual_Id(void);
+void clean_content_of_actual_Id(void);
+void write_content_without_Id(void);
+
+void nextMenuEditFieldDigit(void);
+void upMenuEditFieldDigit(void);
+void downMenuEditFieldDigit(void);
+
+void draw_tMEcursorNewDesign(void);
+
+void exitMenuEdit(uint8_t writeSettingsIfEnterPressed);
+uint8_t split_Content_to_Digit_helper(uint8_t inContentAscii, uint8_t *outDigit100, uint8_t *outDigit10, uint8_t *outDigit1);
+
+/* Exported functions --------------------------------------------------------*/
+
+void tMenuEdit_init(void)
+{
+    tMEcursor.FBStartAdress = getFrame(7);
+    tMEcursor.ImageHeight = 480;
+    tMEcursor.ImageWidth = 800;
+    tMEcursor.LayerIndex = 0;
+
+    GFX_fill_buffer(tMEcursor.FBStartAdress, 0xFF, CLUT_MenuEditCursor);
+
+    tMEcursorNew.FBStartAdress = getFrame(8);
+    tMEcursorNew.ImageHeight = 390;
+    tMEcursorNew.ImageWidth = 800;
+    tMEcursorNew.LayerIndex = 0;
+
+    draw_tMEcursorNewDesign();
+}
+
+void stop_cursor_fields(void)
+{
+    tME_stop = 1;
+}
+
+void resetMenuEdit(uint8_t color)
+{
+    id = 0;
+    idLast = -1;
+    evid = 0;
+    evidLast = -1;
+    tME_stop = 0;
+    EnterPressed = 0;
+    EnterPressedBeforeButtonAction = 0;
+
+    setBackMenu(0,0,0);
+
+    releaseFrame(9,tMEscreen.FBStartAdress);
+
+    tMEscreen.FBStartAdress = getFrame(9);
+    tMEscreen.ImageHeight = 480;
+    tMEscreen.ImageWidth = 800;
+    tMEscreen.LayerIndex = 1;
+
+/*
+    write_content_simple(&tMEscreen, 		   0,  38,      0, &Awe48,"x",CLUT_ButtonSymbols);
+    write_content_simple(&tMEscreen,	800-46, 800,      0, &Awe48,"u",CLUT_ButtonSymbols);
+    write_content_simple(&tMEscreen,			 0,  45, 480-45, &Awe48,"d",CLUT_ButtonSymbols);
+    write_content_simple(&tMEscreen,	800-48, 800, 480-45, &Awe48,"e",CLUT_ButtonSymbols);
+*/
+    menuID = get_globalState();
+
+    menuColor = color;
+
+//	draw_tMEdesign();
+//	GFX_SetFramesTopBottom(tMEscreen.FBStartAdress, tMEcursor.FBStartAdress,480);
+    uint8_t line = 1;
+//	GFX_SetFramesTopBottom(tMEscreen.FBStartAdress, (tMEcursorNew.FBStartAdress) + 65*2*(line - 1),390);
+    GFX_SetFrameTop(tMEscreen.FBStartAdress);
+    GFX_SetFrameBottom((tMEcursorNew.FBStartAdress) + 65*2*(line - 1), 0, 25, 800, 390);
+}
+
+
+void tMenuEdit_refresh_live_content(void)
+{
+
+    if(get_globalState() == (StMHARD3_O2_Sensor1 & MaskFieldDigit))
+    {
+        uint32_t rememberPage = tMEscreen.FBStartAdress;
+        tMEscreen.FBStartAdress = getFrame(9);
+//		draw_tMEdesign();
+        refresh_O2Sensors();
+        GFX_SetFrameTop(tMEscreen.FBStartAdress);
+        releaseFrame(9,rememberPage);
+    }
+    else if(get_globalState() == (StMHARD2_Compass_SetCourse & MaskFieldDigit))
+    {
+        uint32_t rememberPage = tMEscreen.FBStartAdress;
+        tMEscreen.FBStartAdress = getFrame(9);
+        refresh_CompassEdit();
+        GFX_SetFrameTop(tMEscreen.FBStartAdress);
+        releaseFrame(9,rememberPage);
+    }
+    else if(get_globalState() == (StMXTRA_CompassHeading & MaskFieldDigit))
+    {
+        uint32_t rememberPage = tMEscreen.FBStartAdress;
+        tMEscreen.FBStartAdress = getFrame(9);
+//		draw_tMEdesign();
+        refresh_CompassHeading();
+        GFX_SetFrameTop(tMEscreen.FBStartAdress);
+        releaseFrame(9,rememberPage);
+    }
+    else  if(get_globalState() == (StMSYS5_Info & MaskFieldDigit))
+    {
+        uint32_t rememberPage = tMEscreen.FBStartAdress;
+        tMEscreen.FBStartAdress = getFrame(9);
+        refresh_InformationPage();
+        GFX_SetFrameTop(tMEscreen.FBStartAdress);
+        releaseFrame(9,rememberPage);
+    }
+    else if(get_globalState() == (StMPLAN5_ExitResult & MaskFieldDigit))
+    {
+        uint32_t rememberPage = tMEscreen.FBStartAdress;
+        tMEscreen.FBStartAdress = getFrame(9);
+        refresh_PlanResult();
+        GFX_SetFrameTop(tMEscreen.FBStartAdress);
+        releaseFrame(9,rememberPage);
+    }
+    else if(get_globalState() == (StMHARD5_Button1 & MaskFieldDigit)) // will not be executed in EditFieldMode as global state is different
+    {
+        uint32_t rememberPage = tMEscreen.FBStartAdress;
+        tMEscreen.FBStartAdress = getFrame(9);
+        refresh_ButtonValuesFromPIC();
+        GFX_SetFrameTop(tMEscreen.FBStartAdress);
+        releaseFrame(9,rememberPage);
+    }
+/*
+    else if(get_globalState() == (StMHARD6_ScooterDrag & MaskFieldDigit))
+    {
+        uint32_t rememberPage = tMEscreen.FBStartAdress;
+        tMEscreen.FBStartAdress = getFrame(9);
+        refresh_ScooterControl();
+        GFX_SetFrameTop(tMEscreen.FBStartAdress);
+        releaseFrame(9,rememberPage);
+    }
+*/
+    else if(get_globalState() == (StMSYS3_Units & MaskFieldDigit))
+    {
+        uint32_t rememberPage = tMEscreen.FBStartAdress;
+        tMEscreen.FBStartAdress = getFrame(9);
+        refresh_Design();
+        GFX_SetFrameTop(tMEscreen.FBStartAdress);
+        releaseFrame(9,rememberPage);
+    }
+    else if(get_globalState() == (StMSYS4_CViewTimeout & MaskFieldDigit))
+    {
+        uint32_t rememberPage = tMEscreen.FBStartAdress;
+        tMEscreen.FBStartAdress = getFrame(9);
+        refresh_Customviews();
+        GFX_SetFrameTop(tMEscreen.FBStartAdress);
+        releaseFrame(9,rememberPage);
+    }
+}
+
+void tMenuEdit_writeSettingsToFlash(void)
+{
+    if(WriteSettings)
+    {
+        GFX_logoAutoOff();
+        ext_flash_write_settings();
+        WriteSettings = 0;
+    }
+}
+
+void helperLeaveMenuEditField(uint8_t idID)
+{
+    if(ident[idID].maintype == FIELD_NUMBERS)
+    {
+        change_CLUT_entry((CLUT_MenuEditField0 + idID), CLUT_MenuEditFieldRegular);
+    }
+}
+
+
+void helperGotoMenuEditField(uint8_t idID)
+{
+/*
+    if(ident[idID].maintype == FIELD_NUMBERS)
+    {
+        change_CLUT_entry((CLUT_MenuEditField0 + idID), CLUT_MenuEditFieldSelected);
+    }
+*/
+    set_cursorNew(idID);
+//	set_cursor(idID);
+}
+
+
+void exitMenuEdit_to_BackMenu(void)
+{
+    _Bool EnterPressedBackup = EnterPressed;
+
+    if(backmenu.pEventFunction)
+    {
+        ((void (*)(uint8_t))(backmenu.pEventFunction))(backmenu.functionParameter);
+
+        EnterPressed = EnterPressedBackup;
+//		if(backmenu.line > 1)
+//			helperGotoMenuEditField(backmenu.line);
+    }
+}
+
+
+void exitMenuEdit_to_Menu_with_Menu_Update(void)
+{
+    EnterPressed = 1;
+    exitMenuEdit(1);
+}
+
+
+void exitMenuEdit_to_Menu_with_Menu_Update_do_not_write_settings_for_this_only(void)
+{
+    EnterPressed = 1;
+    exitMenuEdit(0);
+}
+
+
+void exitMenuEdit_to_Home_with_Menu_Update(void)
+{
+    EnterPressed = 1;
+    exitMenuEdit(1);
+    set_globalState_tHome();
+}
+
+
+void exitMenuEdit_to_InfoCompassCalibration(void)
+{
+    exitMenuEdit(1);
+    openInfo_Compass();
+}
+
+
+void exitMenuEdit_to_Home(void)
+{
+    exitMenuEdit(1);
+    set_globalState_tHome();
+}
+
+
+void exitMenuEdit(uint8_t writeSettingsIfEnterPressed)
+{
+    openMenu(0);
+    if(EnterPressed)
+    {
+        updateMenu();
+        if((stateUsed->mode == MODE_SURFACE) && writeSettingsIfEnterPressed)
+            WriteSettings = 1;
+    }
+    releaseFrame(9,tMEscreen.FBStartAdress);
+}
+
+
+void exitMenuEditBackMenuOption(void)
+{
+    if(backmenu.pEventFunction == 0)
+        exitMenuEdit(1);
+    else
+        exitMenuEdit_to_BackMenu();
+}
+
+
+void startMenuEditFieldSelect(void)
+{
+    id = 0;
+    helperGotoMenuEditField(id);
+}
+
+
+void nextMenuEditField(void)
+{
+    helperLeaveMenuEditField(id);
+
+    if(id < idLast)
+        id++;
+    else
+        id = 0;
+    helperGotoMenuEditField(id);
+}
+
+/*
+void previousMenuEditField(void)
+{
+    helperLeaveMenuEditField(id);
+    if(id > 0)
+        id--;
+    else
+        id = idLast;
+    helperGotoMenuEditField(id);
+}
+*/
+
+_Bool inc_subBlock_or_block_of_actual_id(void)
+{
+    if(event[evid].callerID != ident[id].callerID)
+        return 0;
+
+    if((ident[id].subtype != FIELD_3DIGIT) && (ident[id].subtype != FIELD_2DIGIT) && ((subBlockPosition + 1) < ident[id].size[block]))
+    {
+        subBlockPosition++;
+        return 1;
+    }
+
+    if(((block + 1) < 4) && (ident[id].size[block+1] > 0))
+    {
+        block++;
+        subBlockPosition = 0;
+        return 1;
+    }
+
+    return 0;
+}
+
+
+uint8_t 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(event[evid].callerID != ident[id].callerID)
+        return 0;
+
+    onActionFunc = (uint8_t (*)(uint32_t, uint8_t, uint8_t, uint8_t, uint8_t))(event[evid].pEventFunction);
+
+    if((ident[id].maintype == FIELD_NUMBERS) && (ident[id].subtype == FIELD_3DIGIT))
+    {
+        content  = 100 * (	ident[id].newText[ident[id].begin[block] + 0] - '0');
+        content +=  10 * (	ident[id].newText[ident[id].begin[block] + 1] - '0');
+        content += 				ident[id].newText[ident[id].begin[block] + 2];
+    }
+    else
+    if((ident[id].maintype == FIELD_NUMBERS) && (ident[id].subtype == FIELD_2DIGIT))
+    {
+        content = 10 * (ident[id].newText[ident[id].begin[block] + 0] - '0');
+        content += ident[id].newText[ident[id].begin[block] + 1];
+    }
+    else
+    if(ident[id].maintype == FIELD_NUMBERS)
+        content = ident[id].newText[ident[id].begin[block] + subBlockPosition];
+    else
+    if(ident[id].maintype == FIELD_ON_OFF)
+        content = ident[id].input[block];
+    else
+        content = 0; /* just a default for protection */
+
+    return onActionFunc(ident[id].callerID, block, subBlockPosition, content, action);
+}
+
+void mark_digit_of_actual_id_with_this_block_and_subBlock(int8_t oldblock, int8_t oldsubblockpos)
+{
+    char oneCharText[2];
+    uint16_t positionOffset;
+
+    if(event[evid].callerID != ident[id].callerID)
+        return;
+
+    if(ident[id].maintype == FIELD_NUMBERS)
+    {
+        oneCharText[0] = ident[id].newText[ident[id].begin[oldblock] + oldsubblockpos];
+        oneCharText[1] = 0;
+        positionOffset = GFX_return_offset(ident[id].fontUsed, ident[id].newText, ident[id].begin[oldblock] + oldsubblockpos);
+        write_content( ident[id].coord[0] + positionOffset, ident[id].coord[1], ident[id].coord[2], ident[id].fontUsed, oneCharText, CLUT_MenuEditFieldSelected);
+    }
+}
+
+
+void mark_new_2digit_of_actual_id_block(void)
+{
+    char oneCharText[3];
+    uint16_t positionOffset;
+
+    if(event[evid].callerID != ident[id].callerID)
+        return;
+
+    if(ident[id].maintype == FIELD_NUMBERS)
+    {
+        oneCharText[0] = ident[id].newText[ident[id].begin[block] + 0];
+        oneCharText[1] = ident[id].newText[ident[id].begin[block] + 1];
+        oneCharText[2] = 0;
+        positionOffset = GFX_return_offset(ident[id].fontUsed, ident[id].newText, ident[id].begin[block] + 0);
+        write_content( ident[id].coord[0] + positionOffset, ident[id].coord[1], ident[id].coord[2], ident[id].fontUsed, oneCharText, CLUT_MenuEditDigit);
+    }
+}
+
+
+void mark_new_3digit_of_actual_id_block(void)
+{
+    char oneCharText[4];
+    uint16_t positionOffset;
+
+    if(event[evid].callerID != ident[id].callerID)
+        return;
+
+    if(ident[id].maintype == FIELD_NUMBERS)
+    {
+        oneCharText[0] = ident[id].newText[ident[id].begin[block] + 0];
+        oneCharText[1] = ident[id].newText[ident[id].begin[block] + 1];
+        oneCharText[2] = ident[id].newText[ident[id].begin[block] + 2];
+        oneCharText[3] = 0;
+        positionOffset = GFX_return_offset(ident[id].fontUsed, ident[id].newText, ident[id].begin[block] + 0);
+        write_content( ident[id].coord[0] + positionOffset, ident[id].coord[1], ident[id].coord[2], ident[id].fontUsed, oneCharText, CLUT_MenuEditDigit);
+    }
+}
+
+
+void mark_new_digit_of_actual_id_block_and_subBlock(void)
+{
+    char oneCharText[2];
+    uint16_t positionOffset;
+
+    if(event[evid].callerID != ident[id].callerID)
+        return;
+
+    if(ident[id].maintype == FIELD_NUMBERS)
+    {
+        oneCharText[0] = ident[id].newText[ident[id].begin[block] + subBlockPosition];
+        oneCharText[1] = 0;
+        positionOffset = GFX_return_offset(ident[id].fontUsed, ident[id].newText, ident[id].begin[block] + subBlockPosition);
+        write_content( ident[id].coord[0] + positionOffset, ident[id].coord[1], ident[id].coord[2], ident[id].fontUsed, oneCharText, CLUT_MenuEditDigit);
+    }
+}
+
+
+void enterMenuEditField(void)
+{
+    uint8_t newContent;
+    uint8_t digit100;
+    uint8_t digit10;
+    uint8_t digit1;
+
+    evid = 0;
+    while((evid < evidLast) && (event[evid].callerID != ident[id].callerID))
+    {
+        evid++;
+    }
+
+    if(event[evid].callerID != ident[id].callerID)
+        return;
+
+    set_globalState(event[evid].callerID);
+    block = 0;
+    subBlockPosition = 0;
+
+
+    if(ident[id].maintype == FIELD_NUMBERS)
+    {
+        change_CLUT_entry(CLUT_MenuEditLineSelected, CLUT_MenuEditCursor);
+        // old stuff? hw 150916, reactivated 150923, this shows which digit will be changed now as it marks the other grey/black
+        // now fixed for button settings with newContent <= '0'+99 condition
+        change_CLUT_entry((CLUT_MenuEditField0 + id), CLUT_MenuEditFieldSelected);
+    }
+
+    newContent = get_newContent_of_actual_id_block_and_subBlock(ACTION_BUTTON_ENTER);
+
+    if (((newContent == UPDATE_DIVESETTINGS) || (newContent == UPDATE_AND_EXIT_TO_HOME) || (newContent == UPDATE_AND_EXIT_TO_MENU)) && (actual_menu_content == MENU_SURFACE))
+        createDiveSettings();
+
+    if(newContent == EXIT_TO_MENU_WITH_LOGO)
+    {
+        GFX_logoAutoOff();
+    }
+
+    if((newContent == EXIT_TO_MENU) || (newContent == UPDATE_AND_EXIT_TO_MENU) || (newContent == EXIT_TO_MENU_WITH_LOGO))
+    {
+        if(backmenu.pEventFunction == 0)
+            exitMenuEdit(1);
+        else
+            exitMenuEdit_to_BackMenu();
+        return;
+    }
+
+    if((newContent == EXIT_TO_HOME) || (newContent == UPDATE_AND_EXIT_TO_HOME))
+    {
+        exitMenuEdit_to_Home();
+        return;
+    }
+
+    if(newContent == EXIT_TO_INFO_COMPASS)
+    {
+        exitMenuEdit_to_InfoCompassCalibration();
+        return;
+    }
+
+
+    switch(ident[id].maintype)
+    {
+    case FIELD_NUMBERS:
+        write_buttonTextline(TXT2BYTE_ButtonMinus,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonPlus);
+
+        if(ident[id].subtype == FIELD_UDIGIT)
+        {
+            if((newContent >= '0') && (newContent <= '9'))
+                ident[id].newText[ident[id].begin[block] + subBlockPosition] = newContent;
+
+            mark_new_digit_of_actual_id_block_and_subBlock();
+        }
+        else if(ident[id].subtype == FIELD_3DIGIT)
+        {
+            if((newContent >= '0') && (newContent <= '0'+200))
+            {
+                split_Content_to_Digit_helper( newContent, &digit100, &digit10, &digit1);
+                ident[id].newText[ident[id].begin[block] + 0] = '0' + digit100;
+                ident[id].newText[ident[id].begin[block] + 1] = '0' + digit10;
+                ident[id].newText[ident[id].begin[block] + 2] = '0' + digit1;
+                mark_new_3digit_of_actual_id_block();
+            }
+        }
+        else // FIELD_2DIGIT
+        {
+            if((newContent >= '0') && (newContent <= '0'+99))
+            {
+                ident[id].newText[ident[id].begin[block]] = '0' + (newContent - '0')/10;
+                ident[id].newText[ident[id].begin[block] + 1] = '0' + ((newContent - '0') - (10*((newContent - '0')/10)));
+                mark_new_2digit_of_actual_id_block();
+            }
+        }
+        break;
+    case FIELD_BUTTON:
+        set_globalState(menuID);
+        break;
+    case FIELD_ON_OFF:
+        set_globalState(menuID);
+        break;
+    case FIELD_SYMBOL:
+        ident[id].input[0] += 1;
+        if(ident[id].input[0] >= ident[id].input[1])
+            ident[id].input[0] = 0;
+        ident[id].newText[0] = ident[id].orgText[ident[id].input[0]];
+        write_content_of_actual_Id();
+        set_globalState(menuID);
+        break;
+    }
+}
+
+
+void exitMenuEditField(void)
+{
+    uint8_t newContent;
+
+    set_globalState(menuID);
+
+    if(event[evid].callerID != ident[id].callerID)
+        return;
+
+    newContent = get_newContent_of_actual_id_block_and_subBlock(ACTION_TIMEOUT);
+
+/*
+    uint8_t (*onActionFunc)(uint32_t, uint8_t, uint8_t, uint8_t, uint8_t);
+    uint8_t newContent;
+
+    onActionFunc = (uint8_t (*)(uint32_t, uint8_t, uint8_t, uint8_t, uint8_t))(event[evid].pEventFunction);
+
+    newContent = onActionFunc(ident[id].callerID, 0, 0, 255, ACTION_BUTTON_BACK);
+*/
+
+    /* destroy changes of editing in newText */
+    change_CLUT_entry(CLUT_MenuEditLineSelected, CLUT_MenuLineSelected);
+    change_CLUT_entry((CLUT_MenuEditField0 + id), CLUT_MenuEditFieldRegular);
+
+    create_newText_for_actual_Id();
+    write_content_of_actual_Id();
+
+    if((newContent == EXIT_TO_MENU) || (newContent == UPDATE_AND_EXIT_TO_MENU))
+    {
+        exitMenuEdit(1);
+        return;
+    }
+
+    if((newContent == EXIT_TO_HOME) || (newContent == UPDATE_AND_EXIT_TO_HOME))
+    {
+        exitMenuEdit_to_Home();
+        return;
+    }
+
+}
+
+void nextMenuEditFieldDigit(void)
+{
+    uint8_t action;
+    uint8_t newContent;
+    int8_t blockOld = 0;
+    int8_t subBlockPositionOld = 0;
+
+    if(event[evid].callerID != ident[id].callerID)
+        return;
+
+    blockOld = block;
+    subBlockPositionOld = subBlockPosition;
+
+    if(inc_subBlock_or_block_of_actual_id())
+        action = ACTION_BUTTON_ENTER;
+    else
+        action = ACTION_BUTTON_ENTER_FINAL;
+
+    newContent = get_newContent_of_actual_id_block_and_subBlock(action);
+
+    if(action == ACTION_BUTTON_ENTER_FINAL)
+    {
+        write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext);
+
+        change_CLUT_entry(CLUT_MenuEditLineSelected, CLUT_MenuLineSelected);
+        for(int i = 0;i<=9;i++)
+            change_CLUT_entry((CLUT_MenuEditField0 + i), CLUT_MenuEditFieldRegular);
+
+        if(((newContent == UPDATE_DIVESETTINGS) || (newContent == UPDATE_AND_EXIT_TO_HOME) || (newContent == UPDATE_AND_EXIT_TO_MENU)) && (actual_menu_content == MENU_SURFACE))
+        createDiveSettings();
+
+        if((newContent == EXIT_TO_MENU) || (newContent == UPDATE_AND_EXIT_TO_MENU))
+        {
+            exitMenuEdit(1);
+            return;
+        }
+
+        if((newContent == EXIT_TO_HOME) || (newContent == UPDATE_AND_EXIT_TO_HOME))
+        {
+            exitMenuEdit_to_Home();
+            return;
+        }
+    }
+
+    if((ident[id].maintype == FIELD_NUMBERS) && (ident[id].subtype == FIELD_3DIGIT) && (action == ACTION_BUTTON_ENTER) &&(newContent >= '0') && (newContent <= '0' + 99))
+    {
+        ident[id].newText[ident[id].begin[block] + 0] = '0' + (newContent - '0')/100;
+        ident[id].newText[ident[id].begin[block] + 1] = '0' + (newContent - '0')/10;
+        ident[id].newText[ident[id].begin[block] + 2] = '0' + ((newContent - '0') - (10*((newContent - '0')/10)));
+    }
+    else
+    if((ident[id].maintype == FIELD_NUMBERS) && (ident[id].subtype == FIELD_2DIGIT) && (action == ACTION_BUTTON_ENTER) &&(newContent >= '0') && (newContent <= '0' + 99))
+    {
+        ident[id].newText[ident[id].begin[block] + 0] = '0' + (newContent - '0')/10;
+        ident[id].newText[ident[id].begin[block] + 1] = '0' + ((newContent - '0') - (10*((newContent - '0')/10)));
+    }
+    else
+    if((ident[id].maintype == FIELD_NUMBERS) && (action == ACTION_BUTTON_ENTER) && (newContent >= '0') && (newContent <= '9'))
+        ident[id].newText[ident[id].begin[block] + subBlockPosition] = newContent;
+
+    if(action == ACTION_BUTTON_ENTER)
+    {
+        if((ident[id].maintype == FIELD_NUMBERS) && (ident[id].subtype == FIELD_3DIGIT))
+        {
+            mark_new_3digit_of_actual_id_block();
+            mark_digit_of_actual_id_with_this_block_and_subBlock(blockOld,0);
+            mark_digit_of_actual_id_with_this_block_and_subBlock(blockOld,1);
+            mark_digit_of_actual_id_with_this_block_and_subBlock(blockOld,2);
+        }
+        else
+        if((ident[id].maintype == FIELD_NUMBERS) && (ident[id].subtype == FIELD_2DIGIT))
+        {
+            mark_new_2digit_of_actual_id_block();
+            mark_digit_of_actual_id_with_this_block_and_subBlock(blockOld,0);
+            mark_digit_of_actual_id_with_this_block_and_subBlock(blockOld,1);
+        }
+        else
+        {
+            mark_new_digit_of_actual_id_block_and_subBlock();
+            mark_digit_of_actual_id_with_this_block_and_subBlock(blockOld,subBlockPositionOld);
+        }
+    }
+    else /* action == ACTION_BUTTON_ENTER_FINAL */
+        set_globalState(menuID);
+}
+
+uint8_t split_Content_to_Digit_helper(uint8_t inContentAscii, uint8_t *outDigit100, uint8_t *outDigit10, uint8_t *outDigit1)
+{
+    uint8_t newContent, tempDigit, CopyContent;
+
+    newContent = inContentAscii - '0';
+    CopyContent = newContent;
+
+    tempDigit = newContent / 100;
+    newContent -= tempDigit * 100;
+    if(outDigit100)
+        *outDigit100 = tempDigit;
+
+    tempDigit = newContent / 10;
+    newContent -= tempDigit * 10;
+    if(outDigit10)
+        *outDigit10 = tempDigit;
+
+    tempDigit = newContent;
+    if(outDigit1)
+        *outDigit1 = tempDigit;
+
+    return CopyContent;
+}
+
+void upMenuEditFieldDigit(void)
+{
+    uint8_t newContent;
+    uint8_t digit100;
+    uint8_t digit10;
+    uint8_t digit1;
+
+    if(event[evid].callerID != ident[id].callerID)
+        return;
+
+    newContent = get_newContent_of_actual_id_block_and_subBlock(ACTION_BUTTON_NEXT);
+
+    if((ident[id].maintype == FIELD_NUMBERS) && (ident[id].subtype == FIELD_3DIGIT) &&(newContent >= '0') && (newContent <= '0' + 200))
+    {
+        split_Content_to_Digit_helper( newContent, &digit100, &digit10, &digit1);
+        ident[id].newText[ident[id].begin[block] + 0] = '0' + digit100;
+        ident[id].newText[ident[id].begin[block] + 1] = '0' + digit10;
+        ident[id].newText[ident[id].begin[block] + 2] = '0' + digit1;
+        mark_new_3digit_of_actual_id_block();
+        return;
+    }
+
+    if((ident[id].maintype == FIELD_NUMBERS) && (ident[id].subtype == FIELD_2DIGIT) &&(newContent >= '0') && (newContent <= '0' + 99))
+    {
+        ident[id].newText[ident[id].begin[block] + 0] = '0' + (newContent - '0')/10;
+        ident[id].newText[ident[id].begin[block] + 1] = '0' + ((newContent - '0') - (10*((newContent - '0')/10)));
+        mark_new_2digit_of_actual_id_block();
+        return;
+    }
+
+    if((ident[id].maintype == FIELD_NUMBERS) && (newContent >= '0') && (newContent <= '9'))
+        ident[id].newText[ident[id].begin[block] + subBlockPosition] = newContent;
+
+    mark_new_digit_of_actual_id_block_and_subBlock();
+}
+
+
+void downMenuEditFieldDigit(void)
+{
+    uint8_t newContent;
+    uint8_t digit100;
+    uint8_t digit10;
+    uint8_t digit1;
+
+    if(event[evid].callerID != ident[id].callerID)
+        return;
+
+    newContent = get_newContent_of_actual_id_block_and_subBlock(ACTION_BUTTON_BACK);
+
+    if((ident[id].maintype == FIELD_NUMBERS) && (ident[id].subtype == FIELD_3DIGIT) &&(newContent >= '0') && (newContent <= '0' + 200))
+    {
+        split_Content_to_Digit_helper( newContent, &digit100, &digit10, &digit1);
+        ident[id].newText[ident[id].begin[block] + 0] = '0' + digit100;
+        ident[id].newText[ident[id].begin[block] + 1] = '0' + digit10;
+        ident[id].newText[ident[id].begin[block] + 2] = '0' + digit1;
+        mark_new_3digit_of_actual_id_block();
+        return;
+    }
+
+    if((ident[id].maintype == FIELD_NUMBERS) && (ident[id].subtype == FIELD_2DIGIT) &&(newContent >= '0') && (newContent <= '0' + 99))
+    {
+        ident[id].newText[ident[id].begin[block] + 0] = '0' + (newContent - '0')/10;
+        ident[id].newText[ident[id].begin[block] + 1] = '0' + ((newContent - '0') - (10*((newContent - '0')/10)));
+        mark_new_2digit_of_actual_id_block();
+        return;
+    }
+
+    if((ident[id].maintype == FIELD_NUMBERS) && (newContent >= '0') && (newContent <= '9'))
+        ident[id].newText[ident[id].begin[block] + subBlockPosition] = newContent;
+
+    mark_new_digit_of_actual_id_block_and_subBlock();
+}
+
+
+void evaluateNewString(uint32_t editID, uint32_t *pNewValue1, uint32_t *pNewValue2, uint32_t *pNewValue3, uint32_t *pNewValue4)
+{
+    if(editID != ident[id].callerID)
+        return;
+
+    uint8_t i, digitCount, digit;
+    uint32_t sum[4], multiplier;
+
+    for(i=0;i<4;i++)
+        sum[i] = 0;
+
+    i = 0;
+    while( ident[id].size[i] && (i < 4))
+    {
+        multiplier = 1;
+        for(digitCount = 1; digitCount < ident[id].size[i]; digitCount++)
+            multiplier *= 10;
+
+        for(digitCount = 0; digitCount < ident[id].size[i]; digitCount++)
+        {
+            digit = ident[id].newText[ident[id].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 get_id_of(uint32_t editID)
+{
+    uint8_t temp_id;
+
+    if(editID == ident[id].callerID)
+        return id;
+    else
+    {
+        temp_id = 0;
+        while((temp_id < 9) && (editID != ident[temp_id].callerID))
+            temp_id++;
+        if(editID != ident[temp_id].callerID)
+            temp_id = 255;
+        return temp_id;
+    }
+}
+
+
+void tMenuEdit_newButtonText(uint32_t editID, char *text)
+{
+    uint8_t backup_id, temp_id;
+
+    temp_id = get_id_of(editID);
+    if(temp_id == 255)
+        return;
+
+    backup_id = id;
+    id = temp_id;
+
+    strncpy(ident[id].newText, text, 32);
+    ident[id].newText[31] = 0;
+
+    clean_content_of_actual_Id();
+    write_content_of_actual_Id();
+
+    id = backup_id;
+}
+
+
+void tMenuEdit_set_on_off(uint32_t editID, uint32_t int1)
+{
+    uint8_t backup_id, temp_id;
+
+    temp_id = get_id_of(editID);
+    if(temp_id == 255)
+        return;
+
+    backup_id = id;
+    id = temp_id;
+
+    ident[id].input[0] = int1;
+
+    if(int1)
+        ident[id].newText[0] = '\005';
+    else
+        ident[id].newText[0] = '\006';
+
+    clean_content_of_actual_Id();
+    write_content_of_actual_Id();
+
+    id = backup_id;
+}
+
+
+void tMenuEdit_select(uint32_t editID, uint32_t int1, uint32_t int2, uint32_t int3, uint32_t int4)
+{
+    if(int1 > 4)
+        return;
+
+    uint8_t backup_id, temp_id;
+
+    temp_id = get_id_of(editID);
+    if(temp_id == 255)
+        return;
+
+    backup_id = id;
+    id = temp_id;
+
+    ident[id].input[0] = int1;
+    ident[id].input[1] = int1;
+    ident[id].input[2] = int1;
+    ident[id].input[3] = int1;
+
+    create_newText_for_actual_Id();
+    clean_content_of_actual_Id();
+    write_content_of_actual_Id();
+
+    id = backup_id;
+}
+
+
+void tMenuEdit_newInput(uint32_t editID, uint32_t int1,  uint32_t int2,  uint32_t int3,  uint32_t int4)
+{
+    uint8_t backup_id, temp_id;
+
+    temp_id = get_id_of(editID);
+    if(temp_id == 255)
+        return;
+
+    backup_id = id;
+    id = temp_id;
+
+    if(editID != ident[id].callerID)
+    {
+        temp_id = 0;
+        while((temp_id < 9) && (editID != ident[temp_id].callerID))
+            temp_id++;
+        if(editID != ident[temp_id].callerID)
+            return;
+        id = temp_id;
+    }
+    ident[id].input[0] = int1;
+    ident[id].input[1] = int2;
+    ident[id].input[2] = int3;
+    ident[id].input[3] = int4;
+
+    create_newText_for_actual_Id();
+    if(id <= idLast)
+        change_CLUT_entry((CLUT_MenuEditField0 + id), CLUT_MenuEditFieldRegular);
+    write_content_of_actual_Id();
+
+    id = backup_id;
+}
+
+
+void resetEnterPressedToStateBeforeButtonAction(void)
+{
+    EnterPressed = EnterPressedBeforeButtonAction;
+}
+
+
+void sendActionToMenuEdit(uint8_t sendAction)
+{
+    if(get_globalState() == menuID)
+    {
+        switch(sendAction)
+        {
+        case ACTION_BUTTON_ENTER:
+            EnterPressedBeforeButtonAction = EnterPressed;
+            EnterPressed = 1;
+            enterMenuEditField();
+            break;
+        case ACTION_BUTTON_NEXT:
+            nextMenuEditField();
+//				previousMenuEditField();
+            break;
+        case ACTION_BUTTON_BACK:
+            exitMenuEditBackMenuOption();
+            break;
+        case ACTION_TIMEOUT:
+        case ACTION_MODE_CHANGE:
+            exitMenuEdit(1);
+        default:
+            break;
+        case ACTION_IDLE_TICK:
+        case ACTION_IDLE_SECOND:
+            break;
+        }
+    }
+    else
+    if(get_globalState() == event[evid].callerID)
+    {
+        switch(sendAction)
+        {
+        case ACTION_BUTTON_ENTER:
+            nextMenuEditFieldDigit();
+            break;
+        case ACTION_BUTTON_NEXT:
+            upMenuEditFieldDigit();
+            break;
+        case ACTION_BUTTON_BACK:
+            downMenuEditFieldDigit();
+            break;
+        case ACTION_TIMEOUT:
+        case ACTION_MODE_CHANGE:
+            exitMenuEditField();
+        default:
+            break;
+        case ACTION_IDLE_TICK:
+        case ACTION_IDLE_SECOND:
+            break;
+        }
+    }
+    else
+    {
+        switch(sendAction)
+        {
+        case ACTION_BUTTON_ENTER:
+            break;
+        case ACTION_BUTTON_NEXT:
+            break;
+        case ACTION_BUTTON_BACK:
+            break;
+        case ACTION_TIMEOUT:
+        case ACTION_MODE_CHANGE:
+            exitMenuEdit(1);
+        default:
+            break;
+        case ACTION_IDLE_TICK:
+        case ACTION_IDLE_SECOND:
+            break;
+        }
+    }
+}
+
+
+void create_newText_for_actual_Id_and_field_select(void)
+{
+    uint8_t i;
+
+    i = 0;
+    while( ident[id].size[i] && (i < 4))
+    {
+        if(ident[id].input[i])
+            ident[id].newText[ident[id].begin[i]] = '\005';
+        else
+            ident[id].newText[ident[id].begin[i]] = '\006';
+        i++;
+    }
+}
+
+
+void create_newText_for_actual_Id(void)
+{
+    if(	ident[id].maintype == FIELD_SELECT)
+    {
+        create_newText_for_actual_Id_and_field_select();
+        return;
+    }
+
+    uint8_t i, digitCount;
+    uint32_t remainder, digit, divider;
+
+    i = 0;
+    while( ident[id].size[i] && (i < 4))
+    {
+        remainder = ident[id].input[i];
+        divider = 1;
+
+        for(digitCount = 1; digitCount < ident[id].size[i]; digitCount++)
+            divider *= 10;
+
+        for(digitCount = 0; digitCount < ident[id].size[i]; digitCount++)
+        {
+            digit = remainder	/ divider;
+            remainder -= digit * divider;
+            divider /= 10;
+            if(digit < 10)
+                ident[id].newText[ident[id].begin[i] + digitCount] = digit + '0';
+            else
+                ident[id].newText[ident[id].begin[i] + digitCount] = 'x';
+        }
+        i++;
+    }
+}
+
+
+void write_content_without_Id(void)
+{
+    write_content( ident[id].coord[0], ident[id].coord[1], ident[id].coord[2], ident[id].fontUsed, ident[id].newText, CLUT_MenuEditFieldRegular);
+}
+
+
+void write_content_of_actual_Id(void)
+{
+    write_content( ident[id].coord[0], ident[id].coord[1], ident[id].coord[2], ident[id].fontUsed, ident[id].newText, (CLUT_MenuEditField0 + id));
+}
+
+
+void clean_content_of_actual_Id(void)
+{
+    clean_content( ident[id].coord[0], ident[id].coord[1], ident[id].coord[2], ident[id].fontUsed);
+}
+
+
+void write_field_udigit_and_2digit(uint8_t subtype, uint32_t editID, uint16_t XleftGimpStyle, uint16_t XrightGimpStyle, uint16_t YtopGimpStyle, const tFont *Font, const char *text, uint32_t int1,  uint32_t int2,  uint32_t int3,  uint32_t int4)
+{
+    if(id >= 9)
+        return;
+
+    ident[id].maintype = FIELD_NUMBERS;
+    ident[id].subtype  = subtype;
+
+    ident[id].coord[0] = XleftGimpStyle;
+    ident[id].coord[1] = XrightGimpStyle;
+    ident[id].coord[2] = YtopGimpStyle;
+    ident[id].fontUsed = (tFont *)Font;
+    ident[id].callerID = editID;
+
+    strncpy(ident[id].orgText, text, 32);
+    strncpy(ident[id].newText, text, 32);
+    ident[id].orgText[31] = 0;
+    ident[id].newText[31] = 0;
+
+    /* uint32_t has max 10 digits */
+
+    int8_t beginTmp, sizeTmp;
+    uint8_t i;
+
+    ident[id].input[0] = int1;
+    ident[id].input[1] = int2;
+    ident[id].input[2] = int3;
+    ident[id].input[3] = int4;
+
+    for(i=0;i<4;i++)
+        ident[id].size[i] = 0;
+
+    beginTmp = 0;
+    for(i=0;i<4;i++)
+    {
+        while((ident[id].orgText[beginTmp] != '#')&& ident[id].orgText[beginTmp])
+            beginTmp++;
+
+        if(ident[id].orgText[beginTmp] == '#')
+        {
+            sizeTmp = 1;
+            while(ident[id].orgText[beginTmp + sizeTmp] == '#')
+                sizeTmp++;
+
+            ident[id].begin[i] = beginTmp;
+            ident[id].size[i] = sizeTmp;
+            beginTmp = ident[id].begin[i] + ident[id].size[i];
+        }
+        else
+            break;
+    }
+
+    if(!tME_stop)
+        change_CLUT_entry((CLUT_MenuEditField0 + id), CLUT_MenuEditFieldRegular);
+    else
+        change_CLUT_entry((CLUT_MenuEditField0 + id), CLUT_MenuEditInfo);
+
+    create_newText_for_actual_Id();
+
+    if(editID == NULL)
+        write_content_without_Id();
+    else
+    {
+        write_content_of_actual_Id();
+        if(!tME_stop)
+            idLast = id;
+        id++;
+    }
+}
+
+void write_field_udigit(uint32_t editID, uint16_t XleftGimpStyle, uint16_t XrightGimpStyle, uint16_t YtopGimpStyle, const tFont *Font, const char *text, uint32_t int1,  uint32_t int2,  uint32_t int3,  uint32_t int4)
+{
+    write_field_udigit_and_2digit(FIELD_UDIGIT, editID,XleftGimpStyle,XrightGimpStyle,YtopGimpStyle,Font,text,int1,int2,int3,int4);
+}
+
+void write_field_2digit(uint32_t editID, uint16_t XleftGimpStyle, uint16_t XrightGimpStyle, uint16_t YtopGimpStyle, const tFont *Font, const char *text, uint32_t int1,  uint32_t int2,  uint32_t int3,  uint32_t int4)
+{
+    write_field_udigit_and_2digit(FIELD_2DIGIT, editID,XleftGimpStyle,XrightGimpStyle,YtopGimpStyle,Font,text,int1,int2,int3,int4);
+}
+
+void write_field_3digit(uint32_t editID, uint16_t XleftGimpStyle, uint16_t XrightGimpStyle, uint16_t YtopGimpStyle, const tFont *Font, const char *text, uint32_t int1,  uint32_t int2,  uint32_t int3,  uint32_t int4)
+{
+    write_field_udigit_and_2digit(FIELD_3DIGIT, editID,XleftGimpStyle,XrightGimpStyle,YtopGimpStyle,Font,text,int1,int2,int3,int4);
+}
+
+/*
+void write_field_sdigit(uint32_t editID, uint16_t XleftGimpStyle, uint16_t XrightGimpStyle, uint16_t YtopGimpStyle, const tFont *Font, const char *text, int32_t int1,  int32_t int2,  int32_t int3,  int32_t int4)
+{
+}
+*/
+
+void write_field_select(uint32_t editID, uint16_t XleftGimpStyle, uint16_t XrightGimpStyle, uint16_t YtopGimpStyle, const tFont *Font, const char *text, uint8_t int1,  uint8_t int2,  uint8_t int3,  uint8_t int4)
+{
+    if(id >= 9)
+        return;
+
+    int8_t beginTmp;
+
+    ident[id].maintype = FIELD_SELECT;
+    ident[id].subtype  = FIELD_SELECT;
+
+    ident[id].coord[0] = XleftGimpStyle;
+    ident[id].coord[1] = XrightGimpStyle;
+    ident[id].coord[2] = YtopGimpStyle;
+    ident[id].fontUsed = (tFont *)Font;
+    ident[id].callerID = editID;
+
+    strncpy(ident[id].orgText, text, 32);
+    strncpy(ident[id].newText, text, 32);
+    ident[id].orgText[31] = 0;
+    ident[id].newText[31] = 0;
+
+    ident[id].input[0] = int1;
+    ident[id].input[1] = int2;
+    ident[id].input[2] = int3;
+    ident[id].input[3] = int4;
+
+    for(int i=0;i<4;i++)
+        ident[id].size[i] = 0;
+
+    beginTmp = 0;
+    for(int i=0;i<4;i++)
+    {
+        while((ident[id].orgText[beginTmp] != '#')&& ident[id].orgText[beginTmp])
+            beginTmp++;
+
+        if(ident[id].orgText[beginTmp] == '#')
+        {
+
+            ident[id].begin[i] = beginTmp;
+            ident[id].size[i] = 1;
+            beginTmp = ident[id].begin[i] + ident[id].size[i];
+        }
+        else
+            break;
+    }
+
+    change_CLUT_entry((CLUT_MenuEditField0 + id), CLUT_MenuEditFieldRegular);
+
+    create_newText_for_actual_Id();
+
+    if(editID == NULL)
+        write_content_without_Id();
+    else
+    {
+        write_content_of_actual_Id();
+        if(!tME_stop)
+            idLast = id;
+        id++;
+    }
+}
+
+void write_field_button(uint32_t editID, uint16_t XleftGimpStyle, uint16_t XrightGimpStyle, uint16_t YtopGimpStyle, const tFont *Font, const char *text)
+{
+    if(id >= 9)
+        return;
+
+    ident[id].maintype = FIELD_BUTTON;
+    ident[id].subtype  = FIELD_BUTTON;
+
+    ident[id].coord[0] = XleftGimpStyle;
+    ident[id].coord[1] = XrightGimpStyle;
+    ident[id].coord[2] = YtopGimpStyle;
+    ident[id].fontUsed = (tFont *)Font;
+    ident[id].callerID = editID;
+
+    strncpy(ident[id].orgText, text, 32);
+    strncpy(ident[id].newText, text, 32);
+    ident[id].orgText[31] = 0;
+    ident[id].newText[31] = 0;
+
+    change_CLUT_entry((CLUT_MenuEditField0 + id), CLUT_MenuEditButtonColor1);
+
+    if(editID == NULL)
+        write_content_without_Id();
+    else
+    {
+        write_content_of_actual_Id();
+        if(!tME_stop)
+            idLast = id;
+        id++;
+    }
+}
+
+
+void 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(id >= 9)
+        return;
+
+    ident[id].maintype = FIELD_SYMBOL;
+    ident[id].subtype  = FIELD_SYMBOL;
+
+    ident[id].coord[0] = XleftGimpStyle;
+    ident[id].coord[1] = XrightGimpStyle;
+    ident[id].coord[2] = YtopGimpStyle;
+    ident[id].fontUsed = (tFont *)Font;
+    ident[id].callerID = editID;
+
+    strncpy(ident[id].orgText, text, 32);
+    strncpy(ident[id].newText, text, 32);
+    ident[id].orgText[31] = 0;
+
+    ident[id].newText[0] = text[0];
+    ident[id].newText[1] = 0;
+
+    ident[id].input[0] = int1;
+    ident[id].input[1] = strlen(ident[id].orgText);
+
+    change_CLUT_entry((CLUT_MenuEditField0 + id), CLUT_MenuEditButtonColor1);
+
+    if(editID == NULL)
+        write_content_without_Id();
+    else
+    {
+        write_content_of_actual_Id();
+        if(!tME_stop)
+            idLast = id;
+        id++;
+    }
+}
+
+
+/* was build for field_on_off
+ * to be tested for other purposes first
+ */
+void tMenuEdit_refresh_field(uint32_t editID)
+{
+    uint8_t temp_id;
+
+    temp_id = get_id_of(editID);
+    if(temp_id == 255)
+        return;
+
+    clean_content( ident[temp_id].coord[0], ident[temp_id].coord[1], ident[temp_id].coord[2], ident[temp_id].fontUsed);
+    write_content( ident[temp_id].coord[0], ident[temp_id].coord[1], ident[temp_id].coord[2], ident[temp_id].fontUsed, ident[temp_id].newText, (CLUT_MenuEditField0 + temp_id));
+}
+
+
+void 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(id >= 9)
+        return;
+
+    ident[id].maintype = FIELD_ON_OFF;
+    ident[id].subtype  = FIELD_ON_OFF;
+
+    ident[id].coord[0] = XleftGimpStyle;
+    ident[id].coord[1] = XrightGimpStyle;
+    ident[id].coord[2] = YtopGimpStyle;
+    ident[id].fontUsed = (tFont *)Font;
+    ident[id].callerID = editID;
+
+    if(int1)
+        ident[id].orgText[0] = '\005';
+    else
+        ident[id].orgText[0] = '\006';
+
+    ident[id].orgText[1] = ' ';
+
+    strncpy(&ident[id].orgText[2], text, 30);
+    strncpy(ident[id].newText, ident[id].orgText, 32);
+    ident[id].orgText[31] = 0;
+    ident[id].newText[31] = 0;
+
+    if(!tME_stop)
+        change_CLUT_entry((CLUT_MenuEditField0 + id), CLUT_MenuEditFieldRegular);
+    else
+        change_CLUT_entry((CLUT_MenuEditField0 + id), CLUT_MenuEditInfo);
+
+    if(editID == NULL)
+        write_content_without_Id();
+    else
+    {
+        write_content_of_actual_Id();
+        if(!tME_stop)
+            idLast = id;
+        id++;
+    }
+}
+
+
+void write_field_fpoint(uint32_t editID, uint16_t XleftGimpStyle, uint16_t XrightGimpStyle, uint16_t YtopGimpStyle, const tFont *Font, const char *text, float input)
+{
+    if(id >= 9)
+        return;
+
+    ident[id].maintype = FIELD_NUMBERS;
+    ident[id].subtype  = FIELD_FLOAT;
+
+    ident[id].coord[0] = XleftGimpStyle;
+    ident[id].coord[1] = XrightGimpStyle;
+    ident[id].coord[2] = YtopGimpStyle;
+    ident[id].fontUsed = (tFont *)Font;
+    ident[id].callerID = editID;
+
+    strncpy(ident[id].orgText, text, 32);
+    strncpy(ident[id].newText, text, 32);
+    ident[id].orgText[31] = 0;
+    ident[id].newText[31] = 0;
+
+    change_CLUT_entry((CLUT_MenuEditField0 + id), CLUT_MenuEditFieldRegular);
+
+    if(editID == NULL)
+        write_content_without_Id();
+    else
+    {
+        write_content_of_actual_Id();
+        if(!tME_stop)
+            idLast = id;
+        id++;
+    }
+}
+
+
+void setBackMenu(uint32_t inputFunctionCall, uint8_t functionCallParameter, uint8_t gotoMenuEditField)
+{
+    backmenu.pEventFunction = inputFunctionCall;
+    backmenu.functionParameter = functionCallParameter;
+    backmenu.line = gotoMenuEditField;
+}
+
+
+void setEvent(uint32_t inputEventID, uint32_t inputFunctionCall)
+{
+    if(evidLast >= 9)
+        return;
+
+    /* set cursor to first field */
+    if(evidLast < 0)
+    {
+        startMenuEditFieldSelect();
+    }
+
+    event[evid].callerID = inputEventID;
+    event[evid].pEventFunction = inputFunctionCall;
+
+    evidLast = evid;
+    evid++;
+}
+
+void startEdit(void)
+{
+    EnterPressed = 1;
+    helperGotoMenuEditField(0);
+    enterMenuEditField();
+}
+
+void exitEditWithUpdate(void)
+{
+    createDiveSettings();
+    EnterPressed = 1;
+    exitMenuEdit(1);
+}
+
+/*
+void 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)ident[forThisIdentID].coord[0];
+    x1 = (int16_t)ident[forThisIdentID].coord[1];
+    y0 = (int16_t)ident[forThisIdentID].coord[2];
+    y1 = y0 + (int16_t)ident[forThisIdentID].fontUsed->height;
+
+    if(((int16_t)ident[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(tMEcursor.FBStartAdress, x0, x1, y0, y1);
+}
+*/
+
+void set_cursorNew(uint8_t forThisIdentID)
+{
+    int16_t y0;
+    uint8_t lineMinusOne;
+
+    y0 = (int16_t)ident[forThisIdentID].coord[2];
+
+    y0 -= ME_Y_LINE1;
+    y0 /= ME_Y_LINE_STEP;
+    if((y0 >= 0) && (y0 <=5))
+        lineMinusOne = y0;
+    else
+        lineMinusOne = 0;
+    GFX_SetFrameBottom((tMEcursorNew.FBStartAdress) + 65*2*(lineMinusOne), 0, 25, 800, 390);
+}
+
+
+void write_topline( char *text)
+{
+    GFX_DrawCfgWindow	hgfx;
+    const tFont *Font = &FontT48;
+
+    hgfx.Image = &tMEscreen;
+    hgfx.WindowNumberOfTextLines = 1;
+    hgfx.WindowLineSpacing = 0;
+    hgfx.WindowTab = 0;
+    hgfx.WindowX0 = 20;
+    hgfx.WindowX1 = 779;
+    hgfx.WindowY1 = 479;
+    hgfx.WindowY0 = hgfx.WindowY1 - Font->height;
+
+    GFX_write_label(Font, &hgfx, text, menuColor);
+}
+
+
+void write_buttonTextline( uint8_t left2ByteCode, char middle2ByteCode, char right2ByteCode)
+{
+    GFX_clean_area(&tMEscreen, 0, 800, 480-24,480);
+
+    char localtext[32];
+
+    if(left2ByteCode)
+    {
+        localtext[0] = TXT_2BYTE;
+        localtext[1] = left2ByteCode;
+        localtext[2] = 0;
+        write_content_simple(&tMEscreen, 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(&tMEscreen, 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(&tMEscreen, 0, 800, 480-24, &FontT24,localtext,CLUT_ButtonSurfaceScreen);
+    }
+}
+
+
+
+void 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 = &tMEscreen;
+    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, 0);/*menuColor);*/
+}
+
+
+void 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 = &tMEscreen;
+    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 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;
+
+    write_label_var(XleftGimpStyle, XrightGimpStyle, YtopGimpStyle, Font, text);
+}
+
+
+void 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 = &tMEscreen;
+    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);
+}
+
+
+/* Private functions ---------------------------------------------------------*/
+
+void draw_tMEdesign(void)
+{
+    GFX_draw_header(&tMEscreen,menuColor);
+}
+
+void draw_tMEdesignSubUnselected(uint32_t *ppDestination)
+{
+    union al88_u
+    {
+        uint8_t al8[2];
+        uint16_t al88;
+    };
+
+    union al88_u color_seperator;
+    union al88_u color_unselected;
+    int i;
+
+    color_seperator.al8[0] = CLUT_MenuLineUnselectedSeperator;
+    color_unselected.al8[0] = CLUT_MenuLineUnselected;
+
+    color_seperator.al8[1] = 0xFF;
+    color_unselected.al8[1] = 0xFF;
+
+    *(__IO uint16_t*)*ppDestination = color_seperator.al88;
+        *ppDestination += 2;
+    *(__IO uint16_t*)*ppDestination = color_seperator.al88;
+        *ppDestination += 2;
+
+    for(i = 61; i > 0; i--)
+    {
+        *(__IO uint16_t*)*ppDestination = color_unselected.al88;
+        *ppDestination += 2;
+    }
+
+    *(__IO uint16_t*)*ppDestination = color_seperator.al88;
+        *ppDestination += 2;
+    *(__IO uint16_t*)*ppDestination = color_seperator.al88;
+        *ppDestination += 2;
+}
+
+
+void draw_tMEdesignSubSelected(uint32_t *ppDestination)
+{
+    union al88_u
+    {
+        uint8_t al8[2];
+        uint16_t al88;
+    };
+
+    union al88_u color_selected;
+    union al88_u color_seperator;
+    int i;
+
+    color_selected.al8[0] = CLUT_MenuEditLineSelected;
+    color_selected.al8[1] = 0xFF;
+
+    color_seperator.al8[0] = CLUT_MenuLineSelectedSeperator;
+    color_seperator.al8[1] = 0xFF;
+
+    *(__IO uint16_t*)*ppDestination = color_seperator.al88;
+        *ppDestination += 2;
+    *(__IO uint16_t*)*ppDestination = color_seperator.al88;
+        *ppDestination += 2;
+
+    for(i = 61; i > 0; i--)
+    {
+        *(__IO uint16_t*)*ppDestination = color_selected.al88;
+        *ppDestination += 2;
+    }
+
+    *(__IO uint16_t*)*ppDestination = color_seperator.al88;
+        *ppDestination += 2;
+    *(__IO uint16_t*)*ppDestination = color_seperator.al88;
+        *ppDestination += 2;
+}
+
+
+void draw_tMEdesignSubSelectedBorder(uint32_t *ppDestination)
+{
+    union al88_u
+    {
+        uint8_t al8[2];
+        uint16_t al88;
+    };
+
+    union al88_u color_selected_sides;
+
+    int i;
+
+    color_selected_sides.al8[0] = CLUT_MenuLineSelectedSides;
+    color_selected_sides.al8[1] = 0xFF;
+
+    for(i = 65; i > 0; i--)
+    {
+    *(__IO uint16_t*)*ppDestination = color_selected_sides.al88;
+        *ppDestination += 2;
+    }
+}
+
+
+void draw_tMEcursorNewDesign(void)
+{
+    int i,j;
+    uint32_t pDestination;
+
+    pDestination = tMEcursorNew.FBStartAdress;
+
+    for(j = 801; j > 0; j--)
+    {
+        for(i = 5; i > 0; i--)
+        {
+            draw_tMEdesignSubUnselected(&pDestination);
+        }
+        if((j > 787) || (j < 17))
+            draw_tMEdesignSubSelectedBorder(&pDestination);
+        else
+            draw_tMEdesignSubSelected(&pDestination);
+    }
+}