diff src/ui/bmi/AUIEditor.c @ 3:67bfe9f274f6

src/ui: import of src/ui3 from Magnetite
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 16 Oct 2020 06:33:10 +0000
parents
children f4d125dbfff2
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ui/bmi/AUIEditor.c	Fri Oct 16 06:33:10 2020 +0000
@@ -0,0 +1,2806 @@
+/*******************************************************************************
+
+	CONDAT (UK)
+
+********************************************************************************
+
+ This software product is the property of Condat (UK) Ltd and may not be
+ disclosed to any third party without the express permission of the owner.
+
+********************************************************************************
+
+ $Project name: Basic MMI
+ $Project code: BMI (6349)
+ $Module:   MMI
+ $File:       AUIEditor.c
+ $Revision:   1.0
+
+ $Author:   Condat(UK)
+ $Date:       22/02/01
+
+********************************************************************************
+
+ Description:
+	Generic MMI Editor.
+
+********************************************************************************
+
+ $History: AUIEditor.c
+
+    May 15, 2006 DR: OMAPS00075852 - xreddymn
+    Description: New SMS and Message Full indications will not be seen by user
+    when CB is enabled, because CB messages have higher priority.
+    Solution: CB messages and New SMS or Message Full indications are displayed
+    in two different zones on the Idle screen.
+    Changes: Added new display zone which is located one line above
+    the softkeys.
+
+ 	Mar 14, 2006 DR: OMAPS00061468 - x0035544.
+   	Description: SAT 27.22.4.22.2 SET UP IDLE MODE TEXT (Icon support) fails 
+   	Solution : In the function AUI_edit_SetDefault() set the default value for 
+   	display_type to SAT_ICON_NONE.
+
+	Jan 16, 2006 DR: OMAPS00061460 - Shashi Shekar B.S.
+	Description: SAT Icon support
+	Solution : SAT icon support added.
+
+    Dec-20-2004 MMI-SPR-27382 xreddymn
+    Added NULL window handle check for AUI_edit_Destroy
+
+ 	Sep 2, 2004    REF: CRR 21370 xkundadu
+	Description: Giving wrong expected result by long press on "#" key
+	Fix:	When user presses long on '#' key it will display 'p'.
+		Changed the long press of '*' key to display 'w'.
+
+	 Jul 22,2004 CRR:21605 xrashmic - SASKEN
+	 Description: After deleting all the characters in the editor the case does not change to 
+	 sentence case.
+	 Fix: After deleting a character, check if editor is empty and then set the case to
+	 sentence case only if the user has not modified the case.
+
+
+ 	Jul 29, 2004         REF: CRR:20892 xrashmic - SASKEN
+	Description: By Long press on Left/Right key at 'Message Editor' screen, 
+	cursor not scrolling continuously
+	Fix: The Long press of left/right key is now handled in AUI_edit_KbdLongCB.
+	The continuous long press of a key was being ignored for all keys. Now
+	only for left and right keys this is handled, for rest of the keys the continuos 
+	long press is ignored.
+
+ 
+	31/01/02      Original Condat(UK) BMI version.
+	
+ $End
+
+*******************************************************************************/
+
+#define ENTITY_MFW
+
+/* includes */
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#if defined (NEW_FRAME)
+
+#include "typedefs.h"
+#include "vsi.h"
+#include "pei.h"
+#include "custom.h"
+#include "gsm.h"
+
+#else
+
+#include "STDDEFS.H"
+#include "custom.h"
+#include "gsm.h"
+#include "vsi.h"
+
+#endif
+
+#include "mfw_mfw.h"
+#include "mfw_win.h"
+#include "mfw_kbd.h"
+#include "mfw_tim.h"
+#include "mfw_phb.h"
+#include "mfw_sms.h"
+#include "mfw_ss.h"
+#include "mfw_icn.h"
+#include "mfw_mnu.h"
+#include "mfw_lng.h"
+#include "mfw_sat.h"
+#include "mfw_kbd.h"
+#include "mfw_nm.h"
+#include "mfw_cm.h"
+#include "mfw_edt.h"
+
+#include "dspl.h"
+
+#include "ksd.h"
+#include "psa.h"
+
+#include "ATBCommon.h"
+#include "ATBDisplay.h"
+#include "ATBEditor.h"
+#include "AUIEditor.h"
+
+#include "MmiDummy.h"
+#include "MmiMmi.h"
+
+#include "MmiDialogs.h"
+#include "MmiLists.h"
+#include "MmiMenu.h"
+#include "MmiSoftKeys.h"
+#include "MmiIdle.h"
+
+#include "cus_aci.h"
+#include "prim.h"
+#ifndef PCM_2_FFS
+#include "pcm.h"
+#endif
+
+#include "Mmiicons.h"
+#include "MmiBookShared.h"
+#include "mmiSmsMenu.h"
+#include "mfw_ffs.h"
+#ifdef EASY_TEXT_ENABLED
+#include "MmiDictionary.h"
+#endif
+#include "mmiColours.h"
+
+#include "MmiDictionary.h"
+#include "ATBCommon.h"
+#include "ATBDisplay.h"
+#include "ATBEditor.h"
+#include "AUITextEntry.h"
+#include "AUIEditor.h"
+#include "AUIEditor_i.h"
+#include "AUISymbol.h"
+
+/* Mar 08, 2006    REF:ER OMAPS00065168  */
+#ifdef NEPTUNE_BOARD
+#include "audio.h"
+#endif
+
+
+
+#ifndef MFW_EVENT_PASSED
+#define MFW_EVENT_PASSED 0
+#endif
+
+#define TRACE_AUIEditor			// Def/undef this to show/hide the trace_events for this file
+
+static void AUI_edit_ClearPredText(T_AUI_EDITOR_INFO *data);
+
+/* API - 08/07/03 - CQ10728*/
+static void AUI_Edit_Display_Only_CB(T_MFW_HND win, USHORT Identifier, SHORT reason);
+static void AUI_Edit_Display_Only_Destroy (T_MFW_HND window);
+/* API - 08/07/03 - CQ10728 END*/
+
+
+/*******************************************************************************
+
+ Static Data
+
+********************************************************************************/
+
+/* eZiText icon */
+
+static const unsigned char TextIconeZiTextSmall[] =
+{
+  0x03,0x03,0x18,0x7c,0xcc,0x08,0x10,0x0c
+};
+
+ // Jul 22,2004 CRR:21605 xrashmic - SASKEN
+ // This variable would tell us if the user had changed the case explicitly
+UBYTE CaseChanged = FALSE;
+
+#define ED_IND_UPPER "ABC"
+#define ED_IND_LOWER "abc"
+#define ED_IND_CAPS "Abc"
+#define ED_IND_NUM "123"
+#define ED_IND_NONE "---"
+
+
+/*******************************************************************************
+
+ $Function:		AUI_edit_Start
+
+ $Description:	Start the editor.
+
+ $Returns:		None.
+
+ $Arguments:	None.
+
+*******************************************************************************/
+
+T_MFW_HND AUI_edit_Start(T_MFW_HND parent, T_AUI_EDITOR_DATA *editor_data)
+{
+    T_MFW_HND win;
+
+    TRACE_FUNCTION ("AUI_edit_Start()");
+
+    win = AUI_edit_Create(parent, editor_data);
+
+    return win;
+}
+
+
+/*******************************************************************************
+
+ $Function:		AUI_edit_QuickStart
+
+ $Description:	Start the editor.
+
+ $Returns:		Dialog handler for the editor.
+
+ $Arguments:	win			- the parent window
+ 				TitleId		- the text id of the title (or NULL)
+ 				TitleString	- the text string of the title (or NULL)
+ 				buffer		- the unicode input buffer
+ 				len			- maximum length of the text entered
+ 				editor_info	- the T_AUI_EDITOR_DATA structure (allocated but empty)
+
+*******************************************************************************/
+
+T_MFW_HND AUI_edit_QuickStart(T_MFW_HND win, USHORT TitleId, UBYTE *TitleString, USHORT *buffer, USHORT len,
+	T_AUI_EDITOR_DATA *editor_info, T_AUI_EDIT_CB editor_cb)
+{
+
+    TRACE_FUNCTION ("AUI_edit_QuickStart()");
+
+	AUI_edit_SetDisplay(editor_info, ZONE_FULL_SK_TITLE, COLOUR_EDITOR, EDITOR_FONT);
+	AUI_edit_SetEvents(editor_info, 0, TRUE, FOREVER, editor_cb);
+	AUI_edit_SetBuffer(editor_info, ATB_DCS_UNICODE, (UBYTE *)buffer, len);
+	AUI_edit_SetTextStr(editor_info, TxtSoftOK, TxtDelete, TitleId, TitleString);
+	AUI_edit_SetAltTextStr(editor_info, 0, NULL, TRUE, TxtSoftBack);
+    /* create the dialog handler */
+    return AUI_edit_Start(win, editor_info);  /* start the common editor */ 
+}
+
+
+/*******************************************************************************
+
+ $Function:		AUI_edit_Create
+
+ $Description:	Create the editor.
+ 
+ $Returns:		Pointer to the editor's window.
+
+ $Arguments:	parent	-	The parent window.
+
+*******************************************************************************/
+
+static T_MFW_HND AUI_edit_Create(T_MFW_HND parent, T_AUI_EDITOR_DATA *editor_data)
+{
+    T_AUI_EDITOR_INFO	*data = (T_AUI_EDITOR_INFO *)ALLOC_MEMORY (sizeof (T_AUI_EDITOR_INFO));
+    T_MFW_WIN     		*win_data;
+
+    TRACE_FUNCTION ("AUI_edit_Create()");
+
+	/* Create window handler */
+
+    data->win = win_create(parent, 0, E_WIN_VISIBLE, (T_MFW_CB)AUI_edit_WinCb);	// Create window
+
+    if (data->win==NULL)														// Make sure window exists
+    {
+		return NULL;
+    }
+
+	/* Connect the dialog data to the MFW-window */
+     
+    data->mmi_control.dialog	= (T_DIALOG_FUNC)AUI_edit_ExecCb;				/* Setup the destination for events */
+    data->mmi_control.data		= data;
+    data->parent				= parent;
+    win_data					= ((T_MFW_HDR *)data->win)->data;
+    win_data->user				= (void *)data;
+
+ 	data->kbd					= kbd_create(data->win, KEY_ALL,(T_MFW_CB)AUI_edit_KbdCb);
+	data->kbd_long				= kbd_create(data->win, KEY_ALL|KEY_LONG,(T_MFW_CB)AUI_edit_KbdLongCb);
+	data->editor				= ATB_edit_Create(&data->editor_data.editor_attr,0);
+
+	data->editor_data = *editor_data;
+	
+	 // Jul 22,2004 CRR:21605 xrashmic - SASKEN
+	 // The initial value of this variable should be false. i.e the user has still not changed the case.
+	CaseChanged=FALSE;
+
+	AUI_edit_Init(data->win);
+
+	SEND_EVENT(data->win, E_ED_INIT, 0, 0);
+	
+    /* Return window handle */
+
+    return data->win;
+}
+
+
+/*******************************************************************************
+
+ $Function:		AUI_edit_Init
+
+ $Description:	Initialise the editor.
+ 
+ $Returns:		Pointer to the editor's window.
+
+ $Arguments:	win - The editor window
+
+*******************************************************************************/
+
+static void AUI_edit_Init(T_MFW_HND win)
+{
+    T_MFW_WIN			*win_data	= ((T_MFW_HDR *)win)->data;
+    T_AUI_EDITOR_INFO	*data		= (T_AUI_EDITOR_INFO *)win_data->user;
+    T_ATB_TEXT			text={0,0,NULL};
+	
+	TRACE_FUNCTION("AUI_edit_Init()");
+
+	data->editor->update = ED_UPDATE_FULL;
+	data->predText.len = 0;					/* Blank out predictive text buffer */
+
+	/* Set up title information */
+
+	data->hasTitle	= FALSE;
+	data->title.len = 0;						/* Blank out title buffer */
+	
+	if (data->editor_data.TitleId!=NULL)
+	{
+		data->hasTitle = TRUE;
+		text.data = (UBYTE *)GET_TEXT(data->editor_data.TitleId);
+	}
+	else if (data->editor_data.TitleString!=NULL)
+	{
+		data->hasTitle = TRUE;
+		text.data = data->editor_data.TitleString;
+	}
+
+	/* If title exists, get its dcs and length */
+	
+	if (data->hasTitle)
+	{
+		if (text.data[0]==0x80)
+		{
+			text.data += 2;		/* Skip over two unicode indicator bytes */
+			text.dcs = ATB_DCS_UNICODE;
+		}
+#ifdef EASY_TEXT_ENABLED
+		else if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE)
+		{
+			text.dcs = ATB_DCS_UNICODE;
+		}
+#endif
+		else
+		{
+			text.dcs = ATB_DCS_ASCII;
+		}
+		
+		text.len = ATB_string_Length(&text);
+
+		/* Allocate memory for the title and copy the text there */
+		data->title.data = (UBYTE *)ALLOC_MEMORY((text.len + 1)*ATB_string_Size(&text));
+		
+		ATB_string_Copy(&data->title, &text);
+	}
+	
+    /* Set up correct parameters for easytext */
+    
+#ifdef EASY_TEXT_ENABLED
+	if (ATB_edit_Mode(data->editor, ED_MODE_ALPHA))
+	{
+		/* Allocate word buffer memory */
+
+		data->predText.data = (UBYTE *)ALLOC_MEMORY((ED_PREDTEXT_MAX+1)*sizeof(UBYTE));
+		data->predText.dcs = ATB_DCS_ASCII;
+		data->predText.len = 0;
+	
+		FFS_flashData.PredTextAvailable = TRUE;
+		Initialize_Dict(Mmi_getCurrentLanguage()/*SPR1508*/, 0);
+		ResetDictSearch();
+	}
+#endif
+
+	/* Initialise editor */
+	
+	ATB_edit_Init(data->editor);
+
+	/* Initialise text entry */
+	
+	data->entry_data = AUI_entry_Create(data->win, data->editor, E_ED_UPDATE);
+		
+	/* If there's a timeout, create the timer */
+	
+    if (data->editor_data.timeout && (data->editor_data.timeout != FOREVER))
+    {
+        data->timer = tim_create(data->win, data->editor_data.timeout, (T_MFW_CB)AUI_edit_TimerCb);
+        tim_start(data->timer);
+    }
+    else
+    {
+        data->timer = NULL;
+    }
+
+    /* Title timer, if required, is set up in WinCb */
+
+	data->title_timer = NULL;
+    
+    return;
+}
+
+
+/*******************************************************************************
+
+ $Function:		AUI_edit_Destroy
+
+ $Description:	Destroy the editor.
+
+ $Returns:		None.
+
+ $Arguments:	window	-	The editor window.
+
+*******************************************************************************/
+
+void AUI_edit_Destroy(T_MFW_HND win)
+{
+	T_MFW_WIN			*win_data;
+    T_AUI_EDITOR_INFO	*data;
+
+#ifdef TRACE_AUIEditor
+    TRACE_FUNCTION ("AUI_edit_Destroy()");
+#endif
+
+	if (win == NULL)
+	{
+#ifdef TRACE_AUIEditor
+		TRACE_EVENT ("Error : Called with NULL Pointer");
+#endif
+		return;
+	}
+	// xreddymn Dec-21-2004 MMI-SPR-27382: Added NULL window handle check for AUI_edit_Destroy
+	win_data	= ((T_MFW_HDR *)win)->data;
+	if(win_data == NULL) return;
+	data		= (T_AUI_EDITOR_INFO *)win_data->user;
+    if (data)
+    {
+    	/* Free memory allocated for easytext buffer */
+    	
+#ifdef EASY_TEXT_ENABLED
+		if (ATB_edit_Mode(data->editor, ED_MODE_ALPHA) && data->predText.data )
+		{
+			TRACE_EVENT("Freeing predictive text buffer");
+			FREE_MEMORY((void *)data->predText.data, (ED_PREDTEXT_MAX+1)*sizeof(UBYTE));
+		}
+#endif
+
+		/* Free memory allocated for title */
+
+		if (data->hasTitle)
+		{
+			FREE_MEMORY(data->title.data, (data->title.len + 1)*ATB_string_Size(&data->title));
+		}
+
+		/* Delete timers */
+
+		if (data->timer)
+		{
+			tim_delete(data->timer);
+			data->timer = NULL;
+		}
+		if (data->title_timer)
+		{
+			tim_delete(data->title_timer);
+			data->title_timer = NULL;
+		}
+		
+        win_delete (data->win);
+
+		/* Free editor memory */
+		
+		AUI_entry_Destroy(data->entry_data);
+		ATB_edit_Destroy(data->editor);
+		FREE_MEMORY ((void *)data, sizeof (T_AUI_EDITOR_INFO));
+    }
+    
+    return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_edit_ExecCb
+
+ $Description:	Dialog function for editor.
+ 
+ $Returns:		None.
+
+ $Arguments:	None.
+ 
+*******************************************************************************/
+
+static void AUI_edit_ExecCb(T_MFW_HND win, USHORT event, USHORT value, void *parameter)
+{
+    T_MFW_WIN			*win_data	= ((T_MFW_HDR *)win)->data;
+    T_AUI_EDITOR_INFO	*data      = (T_AUI_EDITOR_INFO *)win_data->user;
+
+    T_MFW_HND			parent_win	= data->parent;
+    USHORT				alphachar;
+ 	/* Store these in case editor is destroyed on callback */
+    USHORT				Identifier	= data->editor_data.Identifier;
+    T_AUI_EDIT_CB		Callback	= data->editor_data.Callback;
+    UBYTE				destroyEditor = data->editor_data.destroyEditor;
+
+/* Mar 08, 2006    REF:ER OMAPS00065168  */
+#ifdef NEPTUNE_BOARD
+    UBYTE ringer;
+#endif
+
+#ifdef TRACE_AUIEditor
+    TRACE_FUNCTION ("AUI_edit_ExecCb()");
+#endif
+
+    switch (event)
+    {
+    	/* Initialise */
+    
+        case E_ED_INIT:
+        	TRACE_EVENT("E_ED_INIT");
+			win_show(data->win);
+			break;
+
+      	/* Destroy the editor */
+      	
+      	case E_ED_DESTROY:
+			AUI_edit_Destroy(data->win);   
+      		break;
+      		
+      	/* De-initialise editor */
+        case E_ED_DEINIT:
+         	TRACE_EVENT("E_ED_DEINIT");
+
+/* Mar 08, 2006    REF:ER OMAPS00065168  */
+/* Stop playing ring tone on key press */
+    #ifdef NEPTUNE_BOARD
+            ringer = getcurrentSMSTone();
+            audio_StopSoundbyID( AUDIO_BUZZER, ringer );
+
+            vsi_t_sleep(0,10); /* small delay */
+    #endif 
+
+	        if (Callback)
+    	    	(Callback) (parent_win, Identifier, value);
+
+			if(destroyEditor)
+            	AUI_edit_Destroy(data->win);   
+            break;
+
+		/* Insert a character */
+		
+		case E_ED_INSERT:
+			alphachar = (USHORT)value;
+			/* If value is set, insert character */
+			if (alphachar!=NULL)
+			{
+	            ATB_edit_Char(data->editor, alphachar, TRUE);
+#ifdef EASY_TEXT_ENABLED
+				if(FFS_flashData.PredTextAvailable && FFS_flashData.PredTextSelected && ATB_edit_Mode(data->editor, ED_MODE_PREDTEXT))
+				{
+		            if ((alphachar == UNICODE_FULLSTOP) ||(alphachar == UNICODE_EXCLAMATION)
+		            	|| (alphachar == UNICODE_QUESTION))
+		        	{
+		             	ATB_edit_Char(data->editor, UNICODE_SPACE, TRUE);
+		        	}
+				}
+#endif
+			}
+			else
+			/* If parameter is set, insert string */
+			if (parameter!=NULL)
+			{
+				ATB_edit_InsertString(data->editor, (T_ATB_TEXT *)parameter);
+			}
+			win_show(data->win);
+			break;
+
+		/* Update word wrap & redraw editor window */
+		
+		case E_ED_UPDATE:
+			//ATB_edit_Refresh(data->editor); /* SPR#2342 - SH */
+			win_show(data->win);
+   			break;
+
+        default:
+		break;
+    }
+    return;
+}
+
+
+/*******************************************************************************
+
+ $Function:		AUI_edit_WinCb
+
+ $Description:	Editor window event handler.
+
+ $Returns:		None.
+
+ $Arguments:	event	- the event
+ 				win		- the editor window
+
+*******************************************************************************/
+
+static int AUI_edit_WinCb(T_MFW_EVENT event, T_MFW_WIN *win_data)
+{
+    T_AUI_EDITOR_INFO	*data			= (T_AUI_EDITOR_INFO *)win_data->user;
+    T_ED_DATA			*editor			= data->editor;
+	USHORT				scrollBarSize;
+	USHORT				scrollBarPos;
+	SHORT				editX			= editor->attr->win_size.px;
+	SHORT				editY			= editor->attr->win_size.py;
+	SHORT				editWidth		= editor->attr->win_size.sx;
+	SHORT				editHeight		= editor->attr->win_size.sy;
+	char				lengthIndC[12];
+
+	/* Strings for the header */
+	T_ATB_TEXT			string;
+	USHORT				stringWidth;
+	USHORT				stringHeight;
+	T_ATB_TEXT			title;
+	USHORT				titleWidth;
+	USHORT				titleHeight;
+
+	USHORT				textLen;
+	
+	
+
+	
+	T_DS_TEXTFORMAT  	format;
+	BOOL				showIcons;				/* Flag that stores whether icons (e.g. alignment icons) should be shown */
+	
+	USHORT				leftSK;
+	USHORT				rightSK;
+	USHORT				textIndex;
+	T_ATB_TEXT			newTitle;
+	USHORT				lastSpace;
+	USHORT				character;
+// Shashi Shekar B.S., a0876501, Jan 16, 2006, DR: OMAPS00061460
+#ifdef FF_MMI_SAT_ICON
+	SHORT				titleIconWidth = 0;
+	SHORT				iconX;
+	SHORT				iconY;
+#endif
+	
+#ifdef TRACE_AUIEditor
+    TRACE_FUNCTION ("AUI_edit_WinCb()");
+#endif
+
+    if (!data)
+		return MFW_EVENT_CONSUMED;
+  
+    switch(event)
+    {
+        case E_WIN_VISIBLE: 											/* window is visible */
+            if (win_data->flags & E_WIN_VISIBLE)
+			{
+// Shashi Shekar B.S., a0876501, Jan 16, 2006, DR: OMAPS00061460
+#ifdef FF_MMI_SAT_ICON
+				if (editor->attr->TitleIcon.data != NULL)
+				{
+					if (editor->attr->TitleIcon.width > TITLE_ICON_WIDTH) 
+					{
+						titleIconWidth = TITLE_ICON_WIDTH;
+					}
+					else
+					{
+						titleIconWidth = editor->attr->TitleIcon.width;
+					}
+				}			
+				else
+				{
+					titleIconWidth = 0;
+				}
+#endif
+
+				textLen = data->editor->attr->text.len;
+				ATB_edit_LineGet(data->editor, data->editor->winStartLine);
+				
+
+				if (editor->update==ED_UPDATE_TRIVIAL)
+                                editor->update = ED_UPDATE_DEFAULT;
+
+				TRACE_EVENT("Updating whole screen.");
+				
+				
+				
+
+				/* Show the edited text */
+				/* Don't update editor text if in ED_UPDATE_PARTIAL */
+				
+				if (editor->update!=ED_UPDATE_PARTIAL)
+				{
+					ATB_edit_Show(data->editor);
+				}
+				
+				/* Set the colour for drawing title and scrollbar */
+
+				resources_setTitleColour(COLOUR_EDITOR);
+
+				/* TITLE */
+
+				if (data->editor_data.zone_id & ZONE_TITLE)
+				{
+					dspl_Clear(0,0, SCREEN_SIZE_X-1, editY-1);
+				
+					/* Display the title, if it exists */
+
+					string.len = 0;
+					string.dcs = ATB_DCS_ASCII;
+					title.len = 0;
+					title.dcs = ATB_DCS_ASCII;
+		
+					if (data->hasTitle)
+					{
+						title.data = data->title.data;
+						title.len = data->title.len;
+						title.dcs = data->title.dcs;
+					}
+
+					/* Uppercase/lowercase indicator */
+
+					if (!ATB_edit_Mode(editor, ED_MODE_READONLY))
+					{
+						switch(ATB_edit_GetCasePref(editor))
+						{
+							case ED_CASEPREF_ALPHA_UC:
+							case ED_CASEPREF_ALPHANUM_UC:
+								string.data = (UBYTE *)ED_IND_UPPER;
+								break;
+
+							case ED_CASEPREF_ALPHA_LC:
+							case ED_CASEPREF_ALPHANUM_LC:
+								string.data = (UBYTE *)ED_IND_LOWER;
+								break;
+							
+							case ED_CASEPREF_ALPHANUM:
+								if (ATB_edit_GetCase(editor)==ED_CASE_UPPER)
+									string.data = (UBYTE *)ED_IND_UPPER;
+								else if (ATB_edit_GetCase(editor)==ED_CASE_LOWER)
+									string.data = (UBYTE *)ED_IND_LOWER;
+								else if (ATB_edit_GetCase(editor)==ED_CASE_CAPS)
+									string.data = (UBYTE *)ED_IND_CAPS;
+								else
+									string.data = (UBYTE *)ED_IND_NUM;
+								break;
+								
+							case ED_CASEPREF_NUM:
+								string.data = (UBYTE *)ED_IND_NUM;
+								break;
+
+							default:
+								string.data = (UBYTE *)ED_IND_NONE;
+								break;
+						}
+
+						string.len = ATB_string_Length(&string);
+						
+#ifdef EASY_TEXT_ENABLED
+						/* Display predicted word in header */
+
+						if(ATB_edit_Mode(editor, ED_MODE_PREDTEXT) && FFS_flashData.PredTextSelected)
+						{
+							if (ATB_edit_CapitaliseWord(data->editor))	/* Word is capitalised */
+								string.data = (UBYTE *)ED_IND_CAPS;
+							else
+								string.data = (UBYTE *)ED_IND_LOWER;
+							string.len = ATB_string_Length(&string);
+						
+							if(data->predText.len!=0)
+							{
+								title.data = data->predText.data;
+								title.len = data->predText.len;
+								title.dcs = data->predText.dcs;
+		                    }
+						}
+#endif
+						if (ATB_edit_Mode(editor, ED_MODE_ALPHA) && title.len==0)
+						{
+							/* SPR#1995 - SH - 'size' includes null terminator, so
+							 * remaining characters is size-1 */
+#ifdef LSCREEN
+							sprintf(lengthIndC, "%d/%d", textLen, editor->attr->size-1);
+#else
+							sprintf(lengthIndC, "%d", editor->attr->size-textLen-1);
+#endif
+								
+							title.data = (UBYTE *)lengthIndC;
+							title.len = ATB_string_Length(&title);
+						}
+					}
+
+					/* Draw the string to the right of the editor - the case/format indicator, and icons (if appropriate) */
+
+					stringWidth = 0;
+					stringHeight = 0;
+					showIcons = FALSE;
+					
+					if (string.len)
+					{
+					TRACE_EVENT("Displaying string on right");
+						ATB_display_SetFormatAttr(&format, 0, FALSE);	/* Set format to format at cursor */						
+						stringWidth = ATB_display_StringWidth(&string, &format)+2;
+						stringHeight = ATB_display_StringHeight(&string, &format);
+						ATB_display_Text(SCREEN_SIZE_X-stringWidth+2,0, &format, &string);
+						showIcons = TRUE;				/* If showing case, show icons */
+					}
+
+#ifdef EASY_TEXT_ENABLED
+					/* Display ezitext icon to the left of the case indicator */
+
+					if(ATB_edit_Mode(editor, ED_MODE_PREDTEXT) && FFS_flashData.PredTextSelected == TRUE)
+					{
+						if (data->predText.len==0)		// Show icons only if there's no predicted text entry currently
+							showIcons = TRUE;
+						else
+							showIcons = FALSE;
+					}
+#endif
+
+					/* Show icons to the left of the case indicator */
+					
+					if (showIcons)
+					{
+						
+#ifdef EASY_TEXT_ENABLED
+						/*  Display ezitext icon to the left of the case indicator */
+						if(ATB_edit_Mode(editor, ED_MODE_PREDTEXT) && FFS_flashData.PredTextSelected == TRUE)
+						{
+							stringWidth += 8;
+							dspl_BitBlt(SCREEN_SIZE_X-stringWidth+2,
+								0,8,8,0,(char*)TextIconeZiTextSmall,0);
+						}
+#endif
+
+						if (stringHeight<Mmi_layout_line_height())
+							stringHeight = Mmi_layout_line_height();
+					}
+					
+
+					/* Draw the string to the left of the screen - the editor title, or the number of characters
+					 * remaining free in the buffer, or the predicted text word. */
+
+					titleWidth = 0;
+					titleHeight = 0;
+					
+					if (title.len)
+					{
+						ATB_display_SetFormatAttr(&format, 0, FALSE);				/* Clear format */
+
+						titleWidth = ATB_display_StringWidth(&title, &format)+2;
+						titleHeight = ATB_display_StringHeight(&title, &format);
+
+						/* Check to see if title fits into top line - if it doesn't,
+						 * we will need display a section of it. */
+
+						if (titleWidth>(SCREEN_SIZE_X-stringWidth-2))
+						{
+							/* Create timer if it doesn't exist */
+
+							if (!data->title_timer)
+							{
+								data->title_timer = tim_create(data->win, 3000, (T_MFW_CB)AUI_edit_TitleTimerCb);
+								data->title_pos = 0;
+								data->title_next_pos = 0;
+						        tim_start(data->title_timer);
+						    }
+						    
+							titleWidth = 0;
+							textIndex = data->title_pos;
+							lastSpace = 0;
+
+							while (titleWidth<(SCREEN_SIZE_X-stringWidth-2) && textIndex<title.len)
+							{
+								character = ATB_string_GetChar(&title, textIndex);
+								titleWidth+=ATB_display_GetCharWidth(character, &format);
+								textIndex++;
+								if (character==UNICODE_SPACE)
+									lastSpace = textIndex;
+							}
+								
+							TRACE_EVENT_P1("Characters that fit: %d", textIndex);
+
+							/* Calculate next start position */
+
+							if (textIndex==title.len)
+								data->title_next_pos = 0;
+							else
+							{
+								/* Word wrap to last space, if there was one */
+								
+								if (lastSpace>0)
+									textIndex = lastSpace;
+								data->title_next_pos = textIndex;
+							}
+
+							TRACE_EVENT_P1("Next position: %d", data->title_next_pos);
+								
+							newTitle.len = textIndex-data->title_pos;
+							newTitle.data = (UBYTE *)ALLOC_MEMORY((newTitle.len+1)*ATB_string_Size(&title));
+							newTitle.dcs = title.dcs;
+
+							for (textIndex=0; textIndex<newTitle.len; textIndex++)
+							{
+								ATB_string_SetChar(&newTitle, textIndex, ATB_string_GetChar(&title, data->title_pos+textIndex));
+							}
+							ATB_string_SetChar(&newTitle, newTitle.len, UNICODE_EOLN);
+// Shashi Shekar B.S., a0876501, Jan 16, 2006, DR: OMAPS00061460
+#ifdef FF_MMI_SAT_ICON
+							/* Check if the icon is self-explanatory, GSM 11.14, Sec 6.5.4, 12.32.
+								If the icon is to displayed, move the text by icon width. */
+							if (editor->attr->TitleIcon.selfExplanatory == FALSE)
+								ATB_display_Text(titleIconWidth+1,0,&format, &newTitle);
+#else
+							ATB_display_Text(0,0,&format, &newTitle);
+#endif
+							FREE_MEMORY((UBYTE *)newTitle.data, (newTitle.len+1)*ATB_string_Size(&title));
+						}
+						else
+// Shashi Shekar B.S., a0876501, Jan 16, 2006, DR: OMAPS00061460
+#ifdef FF_MMI_SAT_ICON
+						{
+							/* Check if the icon is self-explanatory, GSM 11.14, Sec 6.5.4, 12.32.
+								If the icon is to displayed, move the text by icon width. */
+							if (editor->attr->TitleIcon.selfExplanatory == FALSE)
+								ATB_display_Text(titleIconWidth+1,0,&format, &title);
+						}
+#else
+							ATB_display_Text(0,0,&format, &title);
+#endif
+
+#ifdef EASY_TEXT_ENABLED
+						/* Provides a cursor in the predicted word, so the user can tell which of the characters
+						 * entered are being used to select the word. */
+						 
+						if(ATB_edit_Mode(editor, ED_MODE_PREDTEXT) && FFS_flashData.PredTextSelected && data->predText.len!=0)
+						{
+							ATB_display_Cursor(&data->predText, data->predTextChar.pos, ED_CURSOR_BLOCK,
+								data->predTextChar.lineWidth, 0, data->predTextChar.width, data->predTextChar.height);
+	                    }
+#endif
+					}
+
+// Shashi Shekar B.S., a0876501, Jan 16, 2006, DR: OMAPS00061460
+#ifdef FF_MMI_SAT_ICON
+					if(editor->attr->TitleIcon.data != NULL)
+					{
+
+						if (titleHeight == 0)
+							titleHeight = TITLE_ICON_HEIGHT;
+
+						/* Display '?' icon if the size is bigger, 
+							else display the icon*/
+						if ((editor->attr->TitleIcon.width > TITLE_ICON_WIDTH) || (editor->attr->TitleIcon.height > TITLE_ICON_HEIGHT))
+						{
+							/* iconY calculates place hoilder to place the icon 
+								at the center of the screen. */
+							   iconX = 1;
+							   iconY = 1+ ((titleHeight-2) / 2) - (10 / 2);
+							   dspl_BitBlt2(iconX, iconY, 8, 
+									10, (void*)SATIconQuestionMark, 0, BMP_FORMAT_256_COLOUR);
+						}
+						else
+						{
+							/* iconY calculates place hoilder to place the icon 
+								at the center of the screen. */
+							iconX = 1;
+							iconY = 1+ ((titleHeight-2) / 2) - (editor->attr->TitleIcon.height / 2);
+							dspl_BitBlt2(iconX, iconY, editor->attr->TitleIcon.width, editor->attr->TitleIcon.height, 
+								(void*)editor->attr->TitleIcon.data, 0, BMP_FORMAT_256_COLOUR);
+						}
+					}
+#endif					
+
+					/* Draw line on top */
+					
+					if (stringHeight>titleHeight)
+						titleHeight = stringHeight;
+
+	/* Non colour display - draw line between title texts*/
+#ifndef LSCREEN
+					if (titleHeight>0)
+					{
+						if (stringWidth==0)
+							stringWidth = 1;					/* Make sure end of line is on-screen */
+						dspl_DrawLine(titleWidth, titleHeight/2, SCREEN_SIZE_X-stringWidth, titleHeight/2); /* Line between title & indicator */
+					}
+#endif
+				}
+
+				/* SCROLLBAR */
+				
+				if (data->editor_data.zone_id & ZONE_SCROLLBAR)
+				{
+					dspl_Clear(editX+editWidth, editY, editX+editWidth+ED_SCROLLBAR_WIDTH-1, editY+editHeight-1);
+				
+					/* Vertical scrollbar - only show if editor is taller than view size */
+
+					if (editor->totalHeight > 0 && editor->viewHeight<editor->totalHeight)
+					{
+						dspl_DrawLine(editX+editWidth, editY, editX+editWidth, editY+editHeight-1);
+						scrollBarSize = editor->viewHeight * editHeight / editor->totalHeight;
+						if (scrollBarSize>editHeight)
+							scrollBarSize = editHeight;
+						scrollBarPos = editor->viewStartPos * editHeight / editor->totalHeight;
+
+						dspl_DrawLine(editX+editWidth+1, editY+scrollBarPos, editX+editWidth+1,
+							editY+scrollBarPos+scrollBarSize);
+						dspl_DrawLine(editX+editWidth+2, editY+scrollBarPos, editX+editWidth+2,
+							editY+scrollBarPos+scrollBarSize);
+					}
+				}
+
+				/* SOFTKEYS */
+
+				if (data->editor_data.zone_id & ZONE_SOFTKEYS)
+				{
+#ifdef EASY_TEXT_ENABLED
+					/* If a word is being entered, display OK and Delete */
+
+					if (ATB_edit_Mode(data->editor, ED_MODE_PREDTEXT) && data->predText.len!=0 && FFS_flashData.PredTextSelected == TRUE)
+					{
+						leftSK = TxtSoftOK;
+						rightSK = TxtDelete;
+					}
+					else
+#endif
+					{
+					/* Entered less than the required number of chars: Alternate Left Softkey appears */
+						if (textLen < data->editor_data.min_enter)
+						{
+							leftSK = data->editor_data.AltLeftSoftKey;
+						}
+						else
+						{
+							leftSK = data->editor_data.LeftSoftKey;
+						}
+					/* Buffer is empty and alternative rsk enabled: alternative rsk appears */
+						if (textLen==0 && data->editor_data.change_rsk_on_empty)
+						{
+							rightSK = data->editor_data.AltRightSoftKey;
+						}
+						else
+						{
+							rightSK = data->editor_data.RightSoftKey;
+						}
+	                }
+	                displaySoftKeys(leftSK, rightSK);
+	        	}
+
+	        	/* Finished drawing screen */
+			}
+            break;
+            
+        default:
+            return MFW_EVENT_PASSED;
+//            break;  // RAVI
+    }
+
+	data->editor->update = ED_UPDATE_DEFAULT;
+	
+    return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:		AUI_edit_KbdCb
+
+ $Description:	Editor keyboard event handler
+
+ $Returns:		None.
+
+ $Arguments:	event		- the keyboard event
+ 				keyboard 
+
+*******************************************************************************/
+
+static int AUI_edit_KbdCb(T_MFW_EVENT event, T_MFW_KBD *keyboard)
+{
+	T_MFW_HND			win			= mfw_parent (mfw_header());
+	T_MFW_WIN			*win_data	= ((T_MFW_HDR *)win)->data;
+	T_AUI_EDITOR_INFO	*data		= (T_AUI_EDITOR_INFO *)win_data->user;
+#if (BOARD != 61)	&& defined(EASY_TEXT_ENABLED)
+	T_ATB_TEXT			*PredText	= &data->predText;
+	USHORT				character;
+#endif	
+	ED_RES				result;
+  	
+	TRACE_FUNCTION("AUI_edit_KbdCb()");
+	
+    /* Suppress unwanted long keypresses */
+
+	data->doNextLongPress = TRUE;         		/* next Key_long event is correct */
+
+	/* Restart the timer */
+	
+    if (data->timer !=NULL)
+	{
+    	tim_stop(data->timer);
+    	tim_start(data->timer);
+	}
+
+#ifdef EASY_TEXT_ENABLED
+	if (FFS_flashData.PredTextSelected==FALSE || !ATB_edit_Mode(data->editor, ED_MODE_PREDTEXT))
+	{
+	/* Predictive text is off */
+#endif
+
+	switch (keyboard->code)
+	{
+		/* UP key */
+		
+		case KCD_MNUUP:
+			/* For DSample, up and down move cursor up and down a line in all modes */
+#ifdef LSCREEN
+			ATB_edit_MoveCursor(data->editor, ctrlUp, TRUE);
+
+			/* For other samples, up and down move left and right when not in read only mode */
+#else
+			if (ATB_edit_Mode(data->editor, ED_MODE_READONLY))		/* Acts as up key in read-only mode */
+			{
+				ATB_edit_MoveCursor(data->editor, ctrlUp, TRUE);
+			}
+      		else
+    		{
+				ATB_edit_MoveCursor(data->editor, ctrlRight, TRUE);
+			}
+#endif
+			data->editor->update = ED_UPDATE_TRIVIAL;		/* This flag speeds up update */
+			win_show(data->win);
+			break;
+
+		/* DOWN key */
+		
+		case KCD_MNUDOWN:
+			/* For DSample, up and down move cursor up and down a line in all modes */
+#ifdef LSCREEN
+			ATB_edit_MoveCursor(data->editor, ctrlDown, TRUE);
+
+			/* For other samples, up and down move left and right when not in read only mode */
+#else
+			if (ATB_edit_Mode(data->editor, ED_MODE_READONLY))		/* Act as down key in read-only mode */
+			{
+				ATB_edit_MoveCursor(data->editor, ctrlDown, TRUE);
+			}
+      		else
+    		{
+        		ATB_edit_MoveCursor(data->editor, ctrlLeft, TRUE);		/* Otherwise, move cursor left */
+      		}
+#endif
+			data->editor->update = ED_UPDATE_TRIVIAL;				/* This flag speeds up update - no change to text */
+			win_show(data->win);
+			break;
+
+		/* For DSample, left and right keys move cursor left and right */
+#ifdef LSCREEN
+
+		/* MENU LEFT */
+		
+		case KCD_MNULEFT:
+			ATB_edit_MoveCursor(data->editor, ctrlLeft, TRUE);		/* Move cursor left */
+			data->editor->update = ED_UPDATE_TRIVIAL;				/* This flag speeds up update - no change to text */
+			win_show(data->win);
+			break;
+
+		/* MENU RIGHT */
+		
+		case KCD_MNURIGHT:
+			ATB_edit_MoveCursor(data->editor, ctrlRight, TRUE);		/* Move cursor right */
+			data->editor->update = ED_UPDATE_TRIVIAL;				/* This flag speeds up update - no change to text */
+			win_show(data->win);
+			break;
+#endif
+
+		/* LEFT SOFT KEY */
+		
+		case KCD_LEFT:
+			if (data->editor_data.editor_attr.text.len < data->editor_data.min_enter)
+			{
+				/* Entered less than the required number of chars */
+				if (data->editor_data.AltLeftSoftKey!=TxtNull)
+				{
+					/* an alternate softkey is defined: execute it */
+					SEND_EVENT (win, E_ED_DEINIT, INFO_KCD_ALTERNATELEFT, NULL);
+				}
+			}
+			else if (data->editor_data.LeftSoftKey!=TxtNull)
+			{
+				/* Left Softkey is enabled (and entered sufficient number of chars): execute it
+				 * get the orginal text back into the editor instead of the hide buffer ( only filled with '*') */
+				if (ATB_edit_Mode(data->editor, ED_MODE_HIDDEN))
+				{
+					ATB_edit_HiddenExit(data->editor);
+				}
+				SEND_EVENT (win, E_ED_DEINIT, INFO_KCD_LEFT, NULL);
+			}
+			break;
+
+		/* HANGUP key */
+
+        case KCD_HUP:
+            if (data->editor_data.RightSoftKey NEQ TxtNull)						/* Right softkey is enabled: execute it */
+			{
+				SEND_EVENT (win, E_ED_DEINIT, INFO_KCD_HUP, NULL);		/* Deinitialise the editor */
+            }
+			break;
+
+		/* SEND KEY */
+
+		case KCD_CALL:
+			if (data->editor_data.editor_attr.text.len >= data->editor_data.min_enter)
+			{
+				/* Send this event to generate an MO call in SMS editor */
+				SEND_EVENT (win, E_ED_DEINIT, INFO_KCD_CALL, NULL);
+			}
+			break;
+		
+		/* RIGHT SOFT KEY */
+
+	    case KCD_RIGHT:
+	    TRACE_EVENT("KCD_RIGHT");
+	        if (ATB_edit_Mode(data->editor, ED_MODE_READONLY)) 					/* in read only mode, */
+	        {
+	        	TRACE_EVENT("SENDING DEINIT EVENT");
+	        	SEND_EVENT (win, E_ED_DEINIT, INFO_KCD_RIGHT, NULL);		/* just deinitialise editor */
+	        }
+	        else															/* otherwise, RSK acts as clear key */
+            {
+            	/* If multitap is in progress, delete current character
+				 * rather than previous character */
+
+				if (data->editor->multitap)
+				{
+					AUI_entry_StopMultitap(data->entry_data); /* Cancel multitap */
+					result = ATB_edit_DeleteRight(data->editor, TRUE); /* SPR#2342 - SH */
+				}
+				else
+				{
+	            	result = ATB_edit_DeleteLeft(data->editor, TRUE); /* SPR#2342 - SH */
+				}
+				
+	            /* If we delete from first character in the editor, exit editor */
+	            if (result==ED_DONE)
+	            {
+					SEND_EVENT (win, E_ED_DEINIT, INFO_KCD_RIGHT, NULL);
+	            }
+	            else
+	            {
+		            win_show(data->win);
+	            }
+            }
+			break;
+
+		/* Switch text mode: uppercase, lowercase */
+		case KCD_HASH:
+			if (ATB_edit_Mode(data->editor, ED_MODE_ALPHA))
+			{				
+				 // Jul 22,2004 CRR:21605 xrashmic - SASKEN
+				 // The user has explicitly changed the case. When
+				 // the editor becomes empty, we should not reset the 
+				 // case to sentence case
+				CaseChanged=TRUE;
+				switch(ATB_edit_GetCase(data->editor))
+				{
+					case ED_CASE_LOWER:
+						 // Jul 22,2004 CRR:21605 xrashmic - SASKEN
+						 // The user has changed the case to sentence case.
+						 // when the editor becomes empty, we have to reset 
+						 // the case to sentence case.
+						CaseChanged=FALSE;
+						ATB_edit_SetCase(data->editor, ED_CASE_CAPS);
+						break;
+					case ED_CASE_CAPS:
+						ATB_edit_SetCase(data->editor, ED_CASE_UPPER);
+						break;
+					case ED_CASE_UPPER:
+						ATB_edit_SetCase(data->editor, ED_CASE_LOWER);
+
+						/* If easy text selected, switch to it */
+#ifdef EASY_TEXT_ENABLED
+  						if (ATB_edit_Mode(data->editor, ED_MODE_PREDTEXT) && FFS_flashData.PredTextAvailable)
+						{
+							FFS_flashData.PredTextSelected = TRUE;
+						}
+#endif
+						break;
+					case ED_CASE_NUM:
+						ATB_edit_SetCase(data->editor, ED_CASE_LOWER);
+						break;
+				}
+			}
+			else
+			{
+				/* SPR#1788 - SH - Forbid '#' entry in read only mode */
+			 if (!ATB_edit_Mode(data->editor, ED_MODE_READONLY))
+				AUI_entry_EventKey(data->entry_data, event, keyboard);
+			}
+
+			win_show(data->win);
+			break;
+
+		case (KCD_STAR):
+			/* If we're in apha mode and not in read-only mode, display the symbol screen */	
+			if (ATB_edit_Mode(data->editor, ED_MODE_ALPHA) && !ATB_edit_Mode(data->editor, ED_MODE_READONLY))
+			{
+				AUI_symbol_Start (data->win, E_ED_INSERT);
+			}
+			else
+			{
+			/* SPR#1788 - SH - Allow '*' to be entered in numeric mode */
+			 if (!ATB_edit_Mode(data->editor, ED_MODE_READONLY))
+				AUI_entry_EventKey(data->entry_data, event, keyboard);
+			}
+
+			win_show(data->win);
+			break;
+
+		/* KEY ENTRY 0 - 9 */
+		
+		case KCD_0:
+		case KCD_1:
+		case KCD_2:
+		case KCD_3:
+		case KCD_4:
+		case KCD_5:
+		case KCD_6:
+		case KCD_7:
+		case KCD_8:
+		case KCD_9:
+            if (!ATB_edit_Mode(data->editor, ED_MODE_READONLY))
+			{
+                AUI_entry_EventKey(data->entry_data, event, keyboard);
+                win_show(data->win);
+        	}
+			break;
+		}
+
+#ifdef EASY_TEXT_ENABLED
+		}
+	else
+	
+	/* Short key press in EasyText */
+
+		{
+		if(FFS_flashData.PredTextAvailable == TRUE)
+		{
+	        switch (keyboard->code)
+            {
+				case KCD_MNUUP:
+					if(PredText->len==0)
+					{
+#ifdef LSCREEN
+						ATB_edit_MoveCursor(data->editor, ctrlUp, TRUE);
+
+					/* For other samples, up and down move left and right when not in read only mode */
+#else
+						ATB_edit_MoveCursor(data->editor,ctrlRight, TRUE);
+#endif
+						data->editor->update = ED_UPDATE_TRIVIAL;		/* This flag speeds up update */
+						win_show(data->win);
+					}	
+					break;
+
+				case KCD_MNUDOWN:
+					if(PredText->len==0)
+					{
+#ifdef LSCREEN
+						ATB_edit_MoveCursor(data->editor, ctrlDown, TRUE);
+
+					/* For other samples, up and down move left and right when not in read only mode */
+#else
+						ATB_edit_MoveCursor(data->editor,ctrlLeft, TRUE);
+#endif
+						data->editor->update = ED_UPDATE_TRIVIAL;		/* This flag speeds up update */
+						win_show(data->win);
+					}
+					break;
+
+#ifdef LSCREEN
+				case KCD_MNURIGHT:
+					if(PredText->len==0)
+					{
+						ATB_edit_MoveCursor(data->editor, ctrlRight, TRUE);
+						data->editor->update = ED_UPDATE_TRIVIAL;		/* This flag speeds up update */
+						win_show(data->win);
+					}
+					break;
+
+				case KCD_MNULEFT:
+					if(PredText->len==0)
+					{
+						ATB_edit_MoveCursor(data->editor,ctrlLeft, TRUE);
+						data->editor->update = ED_UPDATE_TRIVIAL;		/* This flag speeds up update */
+						win_show(data->win);
+					}
+					break;
+#endif
+
+				case KCD_LEFT:
+					if(PredText->len==0)
+					{
+						if (data->editor_data.LeftSoftKey NEQ TxtNull)
+						{
+							SEND_EVENT (win, E_ED_DEINIT, INFO_KCD_LEFT, NULL);
+						}
+					}
+					else
+					{
+						if ((data->editor_data.editor_attr.text.len + PredText->len) < data->editor_data.editor_attr.size)
+						{
+							if (ATB_string_GetChar(PredText,0)!=UNICODE_STAR)
+							{
+								/* Capitalise first letter of words and the letter 'I' */
+								
+								if (ATB_edit_CapitaliseWord(data->editor) || (PredText->len==1 && ATB_string_GetChar(PredText, 0)==ATB_char_Unicode('i')))
+								{
+									ATB_string_SetChar(PredText, 0,  ATB_edit_FindCapital(ATB_string_GetChar(PredText, 0)));/*SPR1508*/
+								}
+								character = ATB_edit_GetCursorChar(data->editor, -1);
+								
+								if ( character != UNICODE_SPACE && character != UNICODE_EOLN)
+								{
+									ATB_string_MoveRight(PredText,0,1,ED_PREDTEXT_MAX);
+									ATB_string_SetChar(PredText, 0, UNICODE_SPACE);
+								}
+								ATB_edit_InsertString(data->editor,PredText);
+							}
+						}
+						ResetDictSearch();
+						AUI_edit_ClearPredText(data);
+						ATB_edit_SetCase(data->editor, ED_CASE_LOWER);
+						win_show(data->win);
+					}
+					break;
+
+				case KCD_HUP:
+					if (data->editor_data.RightSoftKey NEQ TxtNull)			/* Right softkey is enabled: execute it */
+					{
+						SEND_EVENT (win, E_ED_DEINIT, INFO_KCD_HUP, NULL);
+					}
+					break;
+
+				case KCD_RIGHT:
+					if(PredText->len==0)
+					{
+						if(ATB_string_GetChar(&data->editor_data.editor_attr.text, 0)!=UNICODE_EOLN)
+						{
+							ATB_edit_Char(data->editor,ctrlBack,TRUE);
+							win_show(data->win);
+						}
+						else
+						{
+							/* leave editor if buffer already empty */
+							SEND_EVENT (win, E_ED_DEINIT, INFO_KCD_RIGHT, NULL);
+						}
+					}
+					else
+					{
+						if (PredText->len==1)
+						{
+							DictBackSpace((char *)data->predText.data);
+							AUI_edit_ClearPredText(data);
+							ATB_edit_SetCase(data->editor, ED_CASE_LOWER);
+						}
+						else
+						{
+							DictBackSpace((char *)data->predText.data);
+							data->predTextChar.pos--;						/* char deleted, move cursor pos back */
+							AUI_edit_CalcPredText(data);
+						}
+						win_show(data->win);
+					}
+					break;
+
+				case KCD_2:
+				case KCD_3:
+				case KCD_4:
+				case KCD_5:
+				case KCD_6:
+				case KCD_7:
+				case KCD_8:
+				case KCD_9:
+					if (PredText->len==0)
+					{
+						AUI_edit_ClearPredText(data);
+					}
+					if (DictAlphaKeyPress(keyboard->code,(char *)PredText->data))
+					{	
+						PredText->len = ATB_string_Length(PredText);
+						data->predTextChar.pos++;			/* The keypress was used to find a word, advance cursor */
+						AUI_edit_CalcPredText(data);
+					}
+					win_show(data->win);
+					break;
+
+				case KCD_HASH:
+					switch(ATB_edit_GetCase(data->editor))
+					{
+						/* Press # once to switch into capitalise mode */
+						case ED_CASE_CAPS:
+							ATB_edit_SetCase(data->editor, ED_CASE_LOWER);
+							/* Switch out of easy text mode, if we're not entering a word */
+							if (PredText->len==0)
+							{
+								FFS_flashData.PredTextSelected = FALSE;
+							}
+							break;
+						default:
+							ATB_edit_SetCase(data->editor, ED_CASE_CAPS);
+							break;
+					}
+					win_show(data->win);
+					break;
+
+				case KCD_STAR:
+					if (PredText->len==0)
+					{
+						AUI_symbol_Start (data->win, E_ED_INSERT);
+					}
+					else
+					{
+						int i;
+						MoreCandidates((char *)PredText->data, &i);
+						AUI_edit_CalcPredText(data);
+						win_show(data->win);
+					}
+					break;
+
+				case KCD_0:
+				case KCD_1:
+					if (PredText->len!=0)
+					{	
+						if ((data->editor_data.editor_attr.text.len + PredText->len) < MAX_MSG_LEN)
+						{
+							/* If char b4 cursor full stop/question/exclamation (or last char space and char b4 full stop) */
+							if (ATB_edit_CapitaliseWord(data->editor) || (PredText->len==1 && ATB_string_GetChar(PredText,0)==ATB_char_Unicode('i')))
+								ATB_string_SetChar(PredText, 0, ATB_edit_FindCapital(ATB_string_GetChar(PredText, 0)));/*SPR1508*/
+
+							/* Capitalise first letter of char. If char before cursor not space, insert space */
+							character = ATB_edit_GetCursorChar(data->editor, -1);
+
+							if (ATB_string_GetChar(PredText, 0) != UNICODE_STAR)
+							{								
+								if (keyboard->code == KCD_1)
+								{
+									/* Insert space at end of string */
+									ATB_string_SetChar(PredText, PredText->len, UNICODE_SPACE);
+									PredText->len++;
+									ATB_string_SetChar(PredText, PredText->len, UNICODE_EOLN);
+									
+									if ( character!=UNICODE_SPACE && character!=UNICODE_EOLN)
+									{
+										/* Insert space at start of string */
+										ATB_string_MoveRight(PredText, 0, 1, ED_PREDTEXT_MAX);
+										ATB_string_SetChar(PredText, 0, UNICODE_SPACE);
+									}
+								}
+								else
+								{
+									/* Insert space and full stop at end of string */
+									ATB_string_SetChar(PredText, PredText->len, UNICODE_FULLSTOP);
+									PredText->len++;
+									ATB_string_SetChar(PredText, PredText->len, UNICODE_SPACE);
+									PredText->len++;
+									ATB_string_SetChar(PredText, PredText->len, UNICODE_EOLN);
+									
+									if ( character!=UNICODE_SPACE && character!=UNICODE_EOLN)
+									{
+										/* Insert space at start of string */
+										ATB_string_MoveRight(PredText, 0, 1, ED_PREDTEXT_MAX);
+										ATB_string_SetChar(PredText, 0, UNICODE_SPACE);
+									}
+								}
+								ATB_edit_InsertString(data->editor, PredText);
+							}
+						}
+						AUI_edit_ClearPredText(data);
+						ResetDictSearch();
+						ATB_edit_SetCase(data->editor, ED_CASE_LOWER);
+						win_show(data->win);
+					}
+				break;
+
+				/* Any key */
+				
+				default:
+					if (!ATB_edit_Mode(data->editor, ED_MODE_READONLY)) /* ignore normal keys if in read-only mode */
+					{
+						AUI_entry_EventKey(data->entry_data, event, keyboard);
+						ATB_edit_Char(data->editor,ctrlBack,TRUE);
+						win_show(data->win);
+					}
+				break;
+				}
+			}
+		}
+#endif
+	
+    return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:		AUI_edit_KbdLongCb
+
+ $Description:	Editor keyboard event handler for long keypresses
+
+ $Returns:		None.
+
+ $Arguments:	event		- the keyboard event
+ 				keyboard 
+
+*******************************************************************************/
+
+static int AUI_edit_KbdLongCb(T_MFW_EVENT event, T_MFW_KBD *keyboard)
+{
+	T_MFW_HND			win			= mfw_parent (mfw_header());
+	T_MFW_WIN			*win_data	= ((T_MFW_HDR *)win)->data;
+	T_AUI_EDITOR_INFO	*data		= (T_AUI_EDITOR_INFO *)win_data->user;
+
+#if (BOARD != 61)	&& defined(EASY_TEXT_ENABLED)
+	T_ATB_TEXT			*PredText	= &data->predText;
+#endif
+
+	ED_RES				result;
+  
+#ifdef TRACE_AUIEditor
+	TRACE_FUNCTION("AUI_edit_KbdLongCb()");
+#endif
+
+    /* Suppress unwanted long keypresses */
+
+	if ( data->doNextLongPress )
+		data->doNextLongPress = FALSE;       			/* mark Key_long event as consumed but do current long press */
+ 	// Jul 29, 2004         REF: CRR:20892 xrashmic - SASKEN
+	// Description: By Long press on Left/Right key at 'Message Editor' screen, 
+	// cursor not scrolling continuously
+	// Fix: The continuous long press of a key was being ignored for all keys. 
+	// Now only for left and right keys this is handled.
+	else if(!(keyboard->code==KCD_MNULEFT ||keyboard->code== KCD_MNURIGHT))
+	{
+		return MFW_EVENT_CONSUMED;      		/* don't do current long press */
+	}
+
+	/* Restart the timer */
+	
+    if (data->timer !=NULL)
+	{
+    	tim_stop(data->timer);
+    	tim_start(data->timer);
+	}
+
+#ifdef EASY_TEXT_ENABLED
+	if (FFS_flashData.PredTextSelected == FALSE || !ATB_edit_Mode(data->editor, ED_MODE_PREDTEXT)) {
+	/* Predictive text is off */
+#endif
+
+	switch (keyboard->code)
+	{
+	 	// Jul 29, 2004         REF: CRR:20892 xrashmic - SASKEN
+		// Description: By Long press on Left/Right key at 'Message Editor' screen, 
+		// cursor not scrolling continuously
+		// Fix: The Long press of left/right key is now handled in AUI_edit_KbdLongCB.
+		case KCD_MNULEFT:
+			ATB_edit_MoveCursor(data->editor, ctrlLeft, TRUE);		/* Move cursor left */
+			data->editor->update = ED_UPDATE_TRIVIAL;				/* This flag speeds up update - no change to text */
+			win_show(data->win);
+			break;
+		case KCD_MNURIGHT:
+			ATB_edit_MoveCursor(data->editor, ctrlRight, TRUE);		/* Move cursor right */
+			data->editor->update = ED_UPDATE_TRIVIAL;				/* This flag speeds up update - no change to text */
+			win_show(data->win);
+			break;
+
+		case KCD_RIGHT:
+			result = ATB_edit_ClearAll(data->editor);						/* Otherwise, clear the editor */	
+
+			/* If buffer is empty, right soft key causes exit from editor */
+			if (result==ED_DONE)
+			{
+				SEND_EVENT (win, E_ED_DEINIT, INFO_KCD_RIGHT, NULL);
+			}
+			else
+			{
+				win_show(data->win);
+			}
+			break;
+
+		/* KEY ENTRY 0 */
+		
+		case KCD_0:
+			/* Alpha mode: insert a '0' */
+			if (ATB_edit_Mode(data->editor, ED_MODE_ALPHA))
+			{
+				if (keyboard->code<=KCD_HASH)
+				{
+					ATB_edit_DeleteLeft(data->editor, FALSE);  /* SPR#2342 - SH */
+					AUI_entry_EditDigit(data->entry_data, keyboard->code);	// enter the character, not multi-tap
+					win_show(data->win);
+				}
+			}
+
+			/* Number mode: insert a '+'*/
+			else if (!ATB_edit_Mode(data->editor, ED_MODE_READONLY))			/* ignore normal keys if in read-only mode */
+			{
+				if (ATB_edit_Mode(data->editor, ED_MODE_HIDDEN))								/* in hidden mode do not allow entering of '+' */
+				{
+					ATB_edit_DeleteLeft(data->editor, TRUE); /* remove the '0'. SPR#2342 - SH */
+				}
+				else
+				{
+					ATB_edit_Char(data->editor,ctrlBack,FALSE); 				/* remove the '0' */
+					ATB_edit_Char(data->editor,UNICODE_PLUS,TRUE);    			/* insert the '+' */
+				}
+				win_show(data->win);
+			}
+			break;
+		case (KCD_STAR):
+			/* MZ cq11414 add Pause Character */
+			ATB_edit_DeleteLeft(data->editor, FALSE);
+
+			//Sep 2, 2004    REF: CRR 21370 xkundadu
+			//Changed the long press of '*' key to display 'w'
+    			AUI_entry_EditChar(data->entry_data, ATB_char_Unicode('w'), FALSE);
+			win_show(data->win);
+			break;
+
+		case (KCD_HASH):
+
+			/* In alphanumeric mode, a long hold of # selects number case */
+			if (ATB_edit_GetCasePref(data->editor)==ED_CASEPREF_ALPHANUM)
+				ATB_edit_SetCase(data->editor, ED_CASE_NUM);
+			else 
+			{ 
+				/* MZ cq11414 add Wait  Character */			
+				ATB_edit_DeleteLeft(data->editor, FALSE);
+
+				//Sep 2, 2004    REF: CRR 21370 xkundadu
+				//Changed the long press of '#' key to display 'p'
+	    			AUI_entry_EditChar(data->entry_data, ATB_char_Unicode('p'), FALSE);
+			}
+			win_show(data->win);
+			break;
+
+		/* KEY ENTRY 1 - 9 */
+		
+		case KCD_1:
+		case KCD_2:
+		case KCD_3:
+		case KCD_4:
+		case KCD_5:
+		case KCD_6:
+		case KCD_7:
+		case KCD_8:
+		case KCD_9:
+			/* Insert equivalent numeric character, only possible in Alpha modes */
+			if (ATB_edit_Mode(data->editor, ED_MODE_ALPHA))
+			{
+				if (keyboard->code<=KCD_HASH)
+				{
+					ATB_edit_DeleteLeft(data->editor, FALSE); /* SPR#2342 - SH */
+					AUI_entry_EditDigit(data->entry_data, keyboard->code);	// enter the character, not multi-tap
+					win_show(data->win);
+				}
+			}
+			break;
+
+		}
+	
+#ifdef EASY_TEXT_ENABLED
+	}
+	else
+	{
+		if(FFS_flashData.PredTextAvailable == TRUE)
+		{
+			switch (keyboard->code)
+			{
+			 	// Jul 29, 2004         REF: CRR:20892 xrashmic - SASKEN
+				// Description: By Long press on Left/Right key at 'Message Editor' 
+				// screen,  cursor not scrolling continuously
+				// Fix: The Long press of left/right key is now handled in
+				// AUI_edit_KbdLongCB.
+				case KCD_MNULEFT:
+					ATB_edit_MoveCursor(data->editor, ctrlLeft, TRUE);		/* Move cursor left */
+					data->editor->update = ED_UPDATE_TRIVIAL;				/* This flag speeds up update - no change to text */
+					win_show(data->win);
+					break;		
+				case KCD_MNURIGHT:
+					ATB_edit_MoveCursor(data->editor, ctrlRight, TRUE);		/* Move cursor right */
+					data->editor->update = ED_UPDATE_TRIVIAL;				/* This flag speeds up update - no change to text */
+					win_show(data->win);
+					break;
+
+				case KCD_RIGHT: 								/*empty predictive text string */
+					if(PredText->len!=0)
+					{
+						PredText->len = 0;
+						ATB_string_SetChar(PredText, 0, UNICODE_EOLN);
+						ResetDictSearch();
+						win_show(data->win);
+					}
+					else 										/*empty whole editor */
+					{
+						if(data->editor_data.editor_attr.text.len > 0 )
+						{
+							ATB_edit_ClearAll(data->editor);
+							win_show(data->win);
+						}
+						else
+						{
+							/* leave editor if buffer already empty */
+							SEND_EVENT (win, E_ED_DEINIT, INFO_KCD_RIGHT, NULL);
+						}
+					}
+					break;
+
+				case(KCD_STAR):
+					AUI_symbol_Start(data->win, E_ED_INSERT);
+					break;
+
+				case (KCD_HASH):
+					break;
+
+				/* KEY ENTRY 1 - 9 */
+
+				case KCD_0:
+				case KCD_1:
+				case KCD_2:
+				case KCD_3:
+				case KCD_4:
+				case KCD_5:
+				case KCD_6:
+				case KCD_7:
+				case KCD_8:
+				case KCD_9:
+					if(PredText->len==0)
+					{
+						/* Insert equivalent numeric character, only possible in Alpha modes */
+						if (ATB_edit_Mode(data->editor, ED_MODE_ALPHA))
+						{
+							if (keyboard->code<=KCD_HASH)
+							{
+								ATB_edit_DeleteLeft(data->editor, FALSE); /* SPR#2342 - SH */
+								AUI_entry_EditDigit(data->entry_data, keyboard->code);	// enter the character, not multi-tap
+							}
+						}
+						win_show(data->win);
+					}
+					break;
+			}
+		}
+	}
+	#endif
+
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_edit_TimerCb
+
+ $Description:	Callback function for the editor info timer.
+ 
+ $Returns:		None.
+
+ $Arguments:	event	- the event type
+ 				timer	- the timer
+ 
+*******************************************************************************/
+
+static int AUI_edit_TimerCb (T_MFW_EVENT event, T_MFW_TIM *timer)
+{
+    T_MFW_HND			win			= mfw_parent (mfw_header());
+
+
+
+//    T_MFW_HND			parent_win	= data->parent;  // RAVI
+//    USHORT				Identifier	= data->editor_data.Identifier;  // RAVI
+//    T_AUI_EDIT_CB			Callback	= data->editor_data.Callback;  // RAVI
+
+	TRACE_FUNCTION("AUI_edit_TimerCb");
+
+#if 0
+    AUI_edit_Destroy(data->win);
+
+    if (Callback)
+        (Callback) (parent_win, Identifier, INFO_TIMEOUT);
+#else
+	SEND_EVENT (win, E_ED_DEINIT, INFO_TIMEOUT, NULL);
+#endif
+
+    return MFW_EVENT_CONSUMED;
+}
+
+/*******************************************************************************
+
+ $Function:    	AUI_edit_TitleTimerCb
+
+ $Description:	Callback function for the editor title timer.  Recalculates title_pos so that
+ 				the next part of the string is displayed.
+ 
+ $Returns:		None.
+
+ $Arguments:	event	- the event type
+ 				timer	- the timer
+ 
+*******************************************************************************/
+
+static int AUI_edit_TitleTimerCb (T_MFW_EVENT event, T_MFW_TIM *timer)
+{
+   	/* Use the mfwHeader property of the timer to get the window */
+    T_MFW_HND			win			= mfw_parent(timer->mfwHeader); 
+    T_MFW_WIN			*win_data	= ((T_MFW_HDR *)win)->data;
+    T_AUI_EDITOR_INFO 	*data		= (T_AUI_EDITOR_INFO *)win_data->user;
+
+	TRACE_FUNCTION("AUI_edit_TitleTimerCb");
+
+	/* SPR#1597 - SH - Since there may be multiple timers running at once, only
+	call win_show if the window is focussed. */
+	
+	if (winIsFocussed(win))
+	{
+		if (data->title_next_pos!=data->title_pos)
+		{
+			data->title_pos = data->title_next_pos;
+		}
+
+		data->editor->update = ED_UPDATE_PARTIAL;  /* Don't update editor text */
+		win_show(data->win);
+
+		tim_start(data->title_timer);
+	}
+	
+    return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:		AUI_edit_CalcPredText
+
+ $Description:	Calculate properties of predicted text string.
+
+ $Returns:		None.
+
+ $Arguments:	data	- The AUI editor data
+ 
+*******************************************************************************/
+
+static void AUI_edit_CalcPredText(T_AUI_EDITOR_INFO *data)
+{
+	USHORT character;
+	T_ATB_TEXT dummy;
+
+	data->predText.len = ATB_string_Length(&data->predText);
+
+	/* Get position of current entry */
+	dummy.data = data->predText.data;
+	dummy.dcs = data->predText.dcs;
+	dummy.len = data->predTextChar.pos;
+	data->predTextChar.lineWidth = ATB_display_StringWidth(&dummy, &data->predTextChar.format);
+ 	data->predTextChar.lineHeight = ATB_display_StringHeight(&dummy, &data->predTextChar.format);
+ 
+	/* Get width and height of current character */
+	character = ATB_string_GetChar(&data->predText, data->predTextChar.pos);
+	data->predTextChar.width = ATB_display_GetCharWidth(character, &data->predTextChar.format);
+	data->predTextChar.height = ATB_display_GetCharHeight(character, &data->predTextChar.format);
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:		AUI_edit_ClearPredText
+
+ $Description:	Clear the predictive text buffer
+
+ $Returns:		None.
+
+ $Arguments:	data	- The AUI editor data
+ 
+*******************************************************************************/
+
+static void AUI_edit_ClearPredText(T_AUI_EDITOR_INFO *data)
+{
+	data->predText.len = 0;
+	ATB_string_SetChar(&data->predText,0,UNICODE_EOLN);
+	memset(&data->predTextChar, 0, sizeof(T_ED_CHAR));
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:		AUI_edit_InsertString
+
+ $Description:	Insert a string into the editor
+ 
+ $Returns:		Pointer to the editor's window.
+
+ $Arguments:	win		- The editor window
+ 				string	- The string to insert
+				dcs		- The dcs of the string
+	
+*******************************************************************************/
+
+void AUI_edit_InsertString(T_MFW_HND win, UBYTE *string, T_ATB_DCS dcs)
+{
+    T_MFW_WIN			*win_data	= ((T_MFW_HDR *)win)->data;
+    T_AUI_EDITOR_INFO	*data		= (T_AUI_EDITOR_INFO *)win_data->user;
+	T_ATB_TEXT			text;
+
+	text.data = string;
+	text.dcs = dcs;
+	text.len = ATB_string_Length(&text);
+	
+    ATB_edit_InsertString(data->editor, &text);
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:		AUI_edit_InsertChar
+
+ $Description:	Insert a character into the editor
+ 
+ $Returns:		Pointer to the editor's window.
+
+ $Arguments:	win			- The editor window
+ 				character	- The character to insert
+	
+*******************************************************************************/
+
+void AUI_edit_InsertChar(T_MFW_HND win, USHORT character)
+{
+    T_MFW_WIN			*win_data	= ((T_MFW_HDR *)win)->data;
+    T_AUI_EDITOR_INFO	*data		= (T_AUI_EDITOR_INFO *)win_data->user;
+
+    ATB_edit_Char(data->editor, character, TRUE);
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:		AUI_edit_GetSpecificWindowSIze
+ 
+ $Description:	Sets up window size
+
+ $Returns:		None.
+
+ $Arguments:	attr	- The ATB editor attributes
+ 				zone_id	- Specifies the window size (See ZONE_... in header file)
+
+*******************************************************************************/
+#ifndef LSCREEN
+//Sizes defined for CSAMPLE editore
+#define BOOKDETAILS_EDITOR_SIZE 		0, 0, SCREEN_SIZE_X-4, Mmi_layout_line(LAST_LINE_TOP)
+#define NUMBER_EDITOR_SIZE				0, 12, SCREEN_SIZE_X , MNU3LINE
+#define PHONEBOOK_DLG_EDITOR_SIZE		4, Mmi_layout_line(3)+2, SCREEN_SIZE_X-4, SCREEN_SIZE_Y-(Mmi_layout_line(3)+2)
+#define BOOKSDN_EDITOR_SIZE 			34, Mmi_layout_line(3)+2, 50, Mmi_layout_line(1)+2
+
+//MMIbooksearchwindow
+//#define BOOKSEARCH_EDITOR_SIZE 			0, Mmi_layout_line(SECOND_LAST_LINE_TOP), SCREEN_SIZE_X, Mmi_layout_line(1)
+
+//MMICall
+#define CALL_EDITOR_SIZE				4,28,SCREEN_SIZE_X-4, 20
+#define CALLSCRATCHPAD_EDITOR_SIZE		6, Mmi_layout_line(2),SCREEN_SIZE_X-6, 16
+
+//MMIServices
+#define SERVICE_CREATE_EDITOR_SIZE		4,Mmi_layout_line(1)+2,SCREEN_SIZE_X-4, MNU3LINE
+#define PASSWORD_EDITOR_SIZE			0, 12, SCREEN_SIZE_X , 13
+#define EM_EDITOR_SIZE					0, 0, SCREEN_SIZE_X-4, Mmi_layout_line(LAST_LINE_TOP)
+
+//From MMIIdle
+//GW Changed window height from 30 (27?) to 24.
+#define WIN_DIALLING_SIZE				0,Mmi_layout_line_icons(2), SCREEN_SIZE_X,24
+#define WIN_DIALLING_C_SIZE 			0,Mmi_layout_line_icons(1),SCREEN_SIZE_X,32
+
+//Positions for editor windows in mmismssend
+#define PHNO_EDITOR_SIZE 				0, (Mmi_layout_line(1)+2), SCREEN_SIZE_X, 20
+
+//NB defines below used twice, second time START/SIZE_Y was same as START/SIZE_Y above 
+#define CENTRE_EDITOR_SIZE				0, Mmi_layout_line(1), SCREEN_SIZE_X, MNU3LINE+3
+
+//And for MMIServices - moved here from mmiservices.c
+#define SAT_EDITOR_SIZE	 				6,30,SCREEN_SIZE_X-6, 20
+
+#define RPWD_EDITOR_SIZE				0,12,SCREEN_SIZE_X,13
+
+//MMIBookCallDetails
+#define PHB_EDITOR_SIZE  				4,0,SCREEN_SIZE_X-4, ALLBUT2LINE
+
+//MMIPins
+#define PIN_EDIT_RESET_SIZE 			12,20,84-12,16
+//MMITimeDate
+#define TIMEDATE_EDITOR_AREA_SIZE 0,10,70,10
+#endif
+/* GW SPR#1840 26/03/03 - Copied from MMieditor.c*/
+#ifndef LSCREEN
+static void setSize(T_ATB_WIN_SIZE *win, int px, int py, int sx, int sy)
+{
+	win->px = px;	win->py = py;
+	win->sx = sx;	win->sy = sy;
+}
+#endif
+void AUI_edit_GetSpecificWindowSize(T_ED_ATTR* attr, int zone_id )
+{
+	switch (zone_id)
+	{
+		case ZONE_SMALL_EDITOR:
+			attr->win_size.px = 6;
+			attr->win_size.py = Mmi_layout_IconHeight()*2;
+			attr->win_size.sx = SCREEN_SIZE_X-attr->win_size.px;
+			attr->win_size.sy = Mmi_layout_line_height()*2+4;
+			break;
+			
+		case ZONE_BOTTOM_LINE:
+			attr->win_size.px = 0;
+			attr->win_size.py = SCREEN_SIZE_Y - Mmi_layout_line_height() - Mmi_layout_softkeyHeight();
+			attr->win_size.sx = SCREEN_SIZE_X-attr->win_size.px;
+			attr->win_size.sy = Mmi_layout_line_height();
+			break;
+			
+		case ZONE_BOTTOM_LINE_FIND: //used for phonebook search
+			attr->win_size.px = dspl_GetTextExtent(MmiRsrcGetText(TxtFind),0); 
+			attr->win_size.py = SCREEN_SIZE_Y - Mmi_layout_line_height() - Mmi_layout_softkeyHeight();
+			attr->win_size.sx = SCREEN_SIZE_X-attr->win_size.px;
+			attr->win_size.sy = Mmi_layout_line_height();
+			break;
+		
+#ifndef LSCREEN
+		case BOOKDETAILS_EDITOR: 		setSize(&attr->win_size,BOOKDETAILS_EDITOR_SIZE);		break;
+		case NUMBER_EDITOR:			 	setSize(&attr->win_size,NUMBER_EDITOR_SIZE);				break;
+		case PHONEBOOK_DLG_EDITOR:		setSize(&attr->win_size,PHONEBOOK_DLG_EDITOR_SIZE);		break;
+		case BOOKSDN_EDITOR:			setSize(&attr->win_size,BOOKSDN_EDITOR_SIZE);			break;
+	//	case BOOKSEARCH_EDITOR:		 	setSize(&attr->win_size,BOOKSEARCH_EDITOR_SIZE);			break;
+		case CALL_EDITOR: 			 	setSize(&attr->win_size,CALL_EDITOR_SIZE);				break;
+		case CALLSCRATCHPAD_EDITOR:		setSize(&attr->win_size,CALLSCRATCHPAD_EDITOR_SIZE);		break;
+		case SERVICE_CREATE_EDITOR:		setSize(&attr->win_size,SERVICE_CREATE_EDITOR_SIZE);		break;
+		case PASSWORD_EDITOR:			setSize(&attr->win_size,PASSWORD_EDITOR_SIZE);			break;
+		case EM_CREATE_EDITOR:			setSize(&attr->win_size,EM_EDITOR_SIZE);				break;/*SPR#1840*/
+		
+		case WIN_DIALLING:				
+		case WIN_DIALLING_CB:				
+				if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE)
+					setSize(&attr->win_size,WIN_DIALLING_C_SIZE);
+				else
+					setSize(&attr->win_size,WIN_DIALLING_SIZE);
+				break;
+		case WIN_DIALLING_SMS:		 	
+				if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE)
+				{
+					setSize(&attr->win_size,0,Mmi_layout_line_icons(1),SCREEN_SIZE_X,24);/*SPR#1840*/
+				}
+				else
+					setSize(&attr->win_size,WIN_DIALLING_SIZE);
+				break;
+		case WIN_DIALLING_SAT:		 	
+				if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE)
+					setSize(&attr->win_size,WIN_DIALLING_C_SIZE);
+				else
+					setSize(&attr->win_size,WIN_DIALLING_SIZE);
+				break;
+		
+		case PHNO_EDITOR:			 	setSize(&attr->win_size,PHNO_EDITOR_SIZE);				break;
+		case CENTRE_EDITOR:				setSize(&attr->win_size,CENTRE_EDITOR_SIZE);				break;
+		case SAT_EDITOR	:			 	setSize(&attr->win_size,SAT_EDITOR_SIZE);				break;
+		case RPWD_EDITOR:			 	setSize(&attr->win_size,RPWD_EDITOR_SIZE);				break;
+		case PHB_EDITOR: 			 	setSize(&attr->win_size,PHB_EDITOR_SIZE);				break;
+		case PIN_EDIT_RESET:			setSize(&attr->win_size,PIN_EDIT_RESET_SIZE);			break;
+		case TIMEDATE_EDITOR_AREA:		setSize(&attr->win_size,TIMEDATE_EDITOR_AREA_SIZE);		break;
+#endif	
+		default:
+			break;
+	}
+}
+
+/*******************************************************************************
+
+ $Function:		AUI_edit_CalculateWindow
+ 
+ $Description:	Sets up window size
+
+ $Returns:		None.
+
+ $Arguments:	attr	- The ATB editor attributes
+ 				zone_id	- Specifies the window size (See ZONE_... in header file)
+ 				SPR#1559 - SH - this is now a pointer to the zone_id, allowing
+ 							the zone_id to be modified by this function
+
+*******************************************************************************/
+
+void AUI_edit_CalculateWindow(T_ED_ATTR* attr, int *zone_id_pointer )
+{
+	int zone_id = *zone_id_pointer;
+	
+	attr->win_size.px = 0;
+	attr->win_size.py = 0;
+	attr->win_size.sx = SCREEN_SIZE_X;
+	attr->win_size.sy = SCREEN_SIZE_Y;
+	
+	if (zone_id == ZONE_BORDER_EDITOR)
+	{	//Leave border on left/right of screen.
+		attr->win_size.px = 4;
+		attr->win_size.sx = attr->win_size.sx - 2*attr->win_size.px;
+		zone_id = ZONE_FULLSOFTKEYS;
+		*zone_id_pointer = zone_id;
+	}
+	else if ((zone_id != 0x0000) && ((zone_id &0xF000)==0xF000))/*SPR#1840*/
+	{
+		AUI_edit_GetSpecificWindowSize(attr,zone_id);
+	    return;
+	}
+	else if (zone_id == 0)
+	{
+		zone_id = ZONE_FULLSOFTKEYS;
+		*zone_id_pointer = zone_id;
+	}
+	
+	if (zone_id & ZONE_ICONS)
+		attr->win_size.py = attr->win_size.py + Mmi_layout_IconHeight();
+
+	if (zone_id & ZONE_SOFTKEYS)
+		attr->win_size.sy = attr->win_size.sy - Mmi_layout_softkeyHeight();
+
+	if (zone_id & ZONE_TITLE)
+		attr->win_size.py = attr->win_size.py + Mmi_layout_TitleHeight();
+	
+	if (zone_id & ZONE_CASE_ABC)
+		attr->win_size.sy = attr->win_size.sy - Mmi_layout_line_height();
+
+	if (zone_id & ZONE_SCROLLBAR)
+		attr->win_size.sx = attr->win_size.sx - ED_SCROLLBAR_WIDTH;
+
+	attr->win_size.sy = attr->win_size.sy - attr->win_size.py;
+
+	if ((zone_id & ZONE_FULLSCREEN) == ZONE_FULLSCREEN)
+		return;
+	
+	/*Else window is not entire screen */
+	
+	switch (zone_id & ZONE_FULL_HEIGHT)
+	{
+		case ZONE_FULL_HEIGHT:	
+			break;
+		case ZONE_TOPHALF_HEIGHT:
+			attr->win_size.sy = attr->win_size.sy/2;		
+			break;
+		case ZONE_MIDDLE_HEIGHT:			
+			attr->win_size.sy = attr->win_size.sy/2;		
+			attr->win_size.py = attr->win_size.py+attr->win_size.sy/2;		
+			break;
+		case ZONE_BOTTOMHALF_HEIGHT:		
+			attr->win_size.sy = attr->win_size.sy/2;		
+			attr->win_size.py = attr->win_size.py+attr->win_size.sy;		
+			break;
+		case ZONE_BOTTOMTWOLINES_HEIGHT:		
+			attr->win_size.py = attr->win_size.py+attr->win_size.sy-Mmi_layout_line_height()*2;
+			attr->win_size.sy = Mmi_layout_line_height()*2;				
+			break;
+		/* xreddymn OMAPS00075852 May-15-2006
+		 * This display zone is located one line above the softkeys.
+		 */
+		case ZONE_MIDDLETWOLINES_HEIGHT:		
+			attr->win_size.py = attr->win_size.py+attr->win_size.sy-Mmi_layout_line_height()*3;
+			attr->win_size.sy = Mmi_layout_line_height()*2;				
+			break;
+		default:
+			//No action
+			break;
+	}
+	
+	switch (zone_id & ZONE_FULL_WIDTH)
+	{
+		case ZONE_FULL_WIDTH:	
+			break;
+		case ZONE_LEFTHALF_WIDTH:		
+			attr->win_size.sx = attr->win_size.sx/2;		
+			break;
+		case ZONE_MIDDLE_WIDTH	:		
+			attr->win_size.sx = attr->win_size.sx/2;		
+			attr->win_size.px = attr->win_size.px+attr->win_size.sx/2;		
+			break;
+		case ZONE_RIGHTHALF_WIDTH:		
+			attr->win_size.sx = attr->win_size.sx/2;		
+			attr->win_size.px = attr->win_size.px+attr->win_size.sx;		
+			break;
+		default:
+			//No action
+			break;
+	}
+}
+
+
+/*******************************************************************************
+
+ $Function:		AUI_edit_SetDefault
+
+ $Description:	Sets up standard editor attributes.
+
+ $Returns:		None.
+
+ $Arguments:	editor_data	- The MMI editor data that is to be modified.
+ 
+*******************************************************************************/
+
+void AUI_edit_SetDefault(T_AUI_EDITOR_DATA *editor_data)
+{
+	/* Set everything to zero... */
+	/* SPR#1559 - Move CalculateWindow to below */
+	
+	memset(editor_data, 0, sizeof(T_AUI_EDITOR_DATA));
+
+	/* Except these things... */
+	
+	editor_data->editor_attr.colour	= COLOUR_EDITOR;
+	editor_data->editor_attr.font	= EDITOR_FONT;
+	editor_data->editor_attr.cursor	= ED_CURSOR_BAR;
+	editor_data->editor_attr.mode	= ED_MODE_ALPHA;
+	editor_data->editor_attr.text.dcs    = ATB_DCS_ASCII;
+	editor_data->timeout			= FOREVER;
+	editor_data->destroyEditor		= TRUE;
+	editor_data->zone_id			= ZONE_FULL_SK_TITLE;
+
+// Shashi Shekar B.S., a0876501, Jan 16, 2006, DR: OMAPS00061460
+#ifdef FF_MMI_SAT_ICON
+	editor_data->editor_attr.TitleIcon.data = NULL;
+	editor_data->editor_attr.TitleIcon.width = 0;
+	editor_data->editor_attr.TitleIcon.height = 0;
+	editor_data->editor_attr.TitleIcon.isTitle = FALSE;
+//x0035544 Mar 14, 2006 DR:OMAPS00061468
+//set the default value for display_type to SAT_ICON_NONE
+	editor_data->editor_attr.TitleIcon.display_type = SAT_ICON_NONE;
+	editor_data->editor_attr.TitleIcon.selfExplanatory = FALSE;
+#endif	
+
+	/* SPR#1559 - SH - CalculateWindow moved here; pointer to zone_id used */
+	AUI_edit_CalculateWindow(&editor_data->editor_attr, &editor_data->zone_id);
+	
+	ATB_display_ClearFormat(&editor_data->editor_attr.startFormat);
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:		AUI_edit_SetDisplay
+
+ $Description:	Sets up standard editor attributes.
+
+ $Returns:		None.
+
+ $Arguments:	editor_data	- The MMI editor data that is to be modified.
+ 				zone_id		- Type of editor screen (see header file for ZONE_...)
+ 				colour		- Colour of the editor
+ 
+*******************************************************************************/
+
+void AUI_edit_SetDisplay(T_AUI_EDITOR_DATA *editor_data, int zone_id, int colour, UBYTE font )
+{
+	/* SPR#1559 - SH - Use pointer to zone_id */
+	AUI_edit_CalculateWindow(&editor_data->editor_attr, &zone_id);
+	editor_data->zone_id 			= zone_id;
+	editor_data->editor_attr.colour	= colour;
+	editor_data->editor_attr.font	= font;
+	
+	return;
+}
+
+/*******************************************************************************
+
+ $Function:		AUI_edit_SetEvents
+
+ $Description:	Sets up standard editor attributes.
+
+ $Returns:		None.
+
+ $Arguments:	editor_data	- The MMI editor data that is to be modified.
+
+*******************************************************************************/
+
+void AUI_edit_SetEvents(T_AUI_EDITOR_DATA *editor_data, USHORT Identifier, BOOL destroyEditor, ULONG timeout, T_AUI_EDIT_CB Callback)
+{
+	if (editor_data)
+	{
+		editor_data->Identifier			= Identifier;
+		editor_data->destroyEditor		= destroyEditor;
+		editor_data->timeout			= timeout;
+		editor_data->Callback			= Callback;
+	}	
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:		AUI_edit_SetMode
+
+ $Description:	Sets up standard editor attributes.
+
+ $Returns:		None.
+
+ $Arguments:	editor_data	- The MMI editor data that is to be modified.
+ 				mode		- Editor mode (see header file for ED_MODE_...)
+ 				cursor		- Editor cursor (see header file for ED_CURSOR_...)
+ 
+*******************************************************************************/
+
+void AUI_edit_SetMode(T_AUI_EDITOR_DATA *editor_data, USHORT mode, USHORT cursor )
+{
+	if (editor_data)
+	{
+		editor_data->editor_attr.mode		= mode;
+		editor_data->editor_attr.cursor		= cursor;
+	}
+	
+	return;
+}
+
+/*******************************************************************************
+
+ $Function:		AUI_edit_SetBuffer
+
+ $Description:	Sets up standard editor attributes.
+
+ $Returns:		None.
+
+ $Arguments:	editor_data	- The MMI editor data that is to be modified.
+ 				dcs			- Data coding scheme of text (see ATB_DCS_...)
+ 				text		- The text in the appropriate coding scheme
+ 				size		- Maximum size of the edit buffer in characters
+ 
+*******************************************************************************/
+
+void AUI_edit_SetBuffer(T_AUI_EDITOR_DATA *editor_data, UBYTE dcs, UBYTE *text, USHORT size)
+{
+	if (editor_data)
+	{
+		editor_data->editor_attr.text.dcs = dcs;
+		editor_data->editor_attr.text.data = text;
+		editor_data->editor_attr.text.len = ATB_string_Length(&editor_data->editor_attr.text);
+		editor_data->editor_attr.size = size;
+	}
+	
+	return;
+}
+
+/*******************************************************************************
+
+ $Function:		AUI_edit_SetTextStr
+
+ $Description:	Sets up standard editor attributes.
+
+ $Returns:		None.
+
+ $Arguments:	editor_data	- The MMI editor data that is to be modified.
+ 				LeftSoftKey, RightSoftKey - Text IDs of the softkeys
+ 				TitleId		- Text ID for the title
+ 				TextString	- Text string for the title, used if TitleId is 0
+ 
+*******************************************************************************/
+
+void AUI_edit_SetTextStr(T_AUI_EDITOR_DATA *editor_data, USHORT LeftSoftKey, USHORT RightSoftKey, USHORT TitleId, UBYTE *TitleString)
+{
+	if (editor_data)
+	{
+		editor_data->LeftSoftKey = LeftSoftKey;
+		editor_data->RightSoftKey = RightSoftKey;
+		editor_data->AltRightSoftKey = RightSoftKey;
+		editor_data->TitleId = TitleId;
+		editor_data->TitleString = TitleString;
+	}
+	
+	return;
+}
+
+/*******************************************************************************
+
+ $Function:		AUI_edit_SetAltTextStr
+
+ $Description:	Sets up standard editor attributes.
+
+ $Returns:		None.
+
+ $Arguments:	editor_data	- The MMI editor data that is to be modified.
+  				min_enter	- No of characters needed to be entered
+ 				AltLeftSoftKey - Text ID of alternate left softkey
+ 				change_rsk_on_empty - TRUE if alternative right soft key is used for
+ 				              empty buffer
+ 				AltRightSoftKey - Text ID of alternative right softkey
+ 
+*******************************************************************************/
+
+void AUI_edit_SetAltTextStr(T_AUI_EDITOR_DATA *editor_data, UBYTE min_enter, USHORT AltLeftSoftKey, BOOL change_rsk_on_empty, USHORT AltRightSoftKey)
+{
+	if (editor_data)
+	{
+		editor_data->AltLeftSoftKey = AltLeftSoftKey;
+		editor_data->min_enter = min_enter;
+		editor_data->AltRightSoftKey = AltRightSoftKey;
+		editor_data->change_rsk_on_empty = change_rsk_on_empty;
+	}
+	
+	return;
+}
+
+/*******************************************************************************
+
+ $Function:		AUI_edit_SetFormatStr
+
+ $Description:	Sets up standard editor attributes.
+
+ $Returns:		None.
+
+ $Arguments:	editor_data	- The MMI editor data that is to be modified.
+  				formatstr	- The formatted input string
+  				preformat	- TRUE if format codes are to be inserted into text
+  							  before editing
+  				filler		- If preformat is true, this character will be used to
+  							  pad out the provided string
+ 
+*******************************************************************************/
+
+void AUI_edit_SetFormatStr(T_AUI_EDITOR_DATA *editor_data, char *formatstr, BOOL preformat, char filler)
+{
+	USHORT textIndex;
+	USHORT formatIndex;
+//	USHORT character;  // RAVI
+
+	TRACE_FUNCTION("AUI_edit_SetFormatStr()");
+	
+	if (editor_data)
+	{
+		editor_data->editor_attr.FormatString = formatstr;
+
+		/* SPR#1983 - SH - *m and *M strings are freeform, no preformatting required */
+		if (preformat && strcmp(formatstr, "*m")!=0 && strcmp(formatstr, "*M")!=0)
+		{
+			formatIndex = 0;
+			textIndex = 0;
+
+			/* SPR#1983 - SH - Ensure formatting doesn't write over null terminator */
+			while (formatstr[formatIndex]!=0 && 
+				!strchr("123456789*", formatstr[formatIndex]) && /* Exit at delimited field */
+				textIndex<(editor_data->editor_attr.size-1))
+			{
+				/* Encountered fixed character */
+				if (formatstr[formatIndex]=='\\')
+				{
+					formatIndex++;
+					ATB_string_SetChar(&editor_data->editor_attr.text, textIndex, ATB_char_Unicode(formatstr[formatIndex]));
+				}
+				/* If editor text has run out, fill the rest with our filler character */
+				else if (textIndex>editor_data->editor_attr.text.len)
+				{
+					ATB_string_SetChar(&editor_data->editor_attr.text, textIndex, ATB_char_Unicode(filler));
+				}
+				if(formatstr[formatIndex]!=0)       /*a0393213 lint warnings removal - 'Possible access of out-of-bounds pointer'*/
+					{
+					formatIndex++;
+					textIndex++;
+					}			
+			}
+		}
+	}
+	
+	return;
+}
+
+/*******************************************************************************
+
+ $Function:		AUI_edit_SetFormatAttr
+
+ $Description:	Sets up standard editor attributes.
+
+ $Returns:		None.
+
+ $Arguments:	editor_data	- The MMI editor data that is to be modified.
+  				startFormat	- Pointer to text formatting data structure
+ 
+*******************************************************************************/
+
+void AUI_edit_SetFormatAttr(T_AUI_EDITOR_DATA *editor_data, UBYTE attr)
+{
+	if (editor_data)
+	{
+		editor_data->editor_attr.startFormat.attr = attr;
+	}
+	
+	return;
+}
+
+/*******************************************************************************
+
+ $Function:		AUI_edit_SetAttr
+
+ $Description:	Set some standard editor attributes
+
+ $Returns:    	None.
+
+ $Arguments:  	attr	- The editor attr
+
+*******************************************************************************/
+void AUI_edit_SetAttr(T_ED_ATTR *attr, int zone_id, ULONG colour, UBYTE font, USHORT mode, USHORT cursor, T_ATB_DCS dcs, UBYTE *text, USHORT size)
+{
+	/* Populate the structure with the parameters
+	*/
+	/* SPR#1559 - SH - Use pointer to zone_id */
+	AUI_edit_CalculateWindow(attr, &zone_id );
+	attr->colour = colour;
+	attr->font = font;
+	attr->mode = mode;
+	attr->cursor = cursor;
+	attr->text.dcs = dcs;
+	attr->text.data = text;
+	attr->text.len = ATB_string_Length(&attr->text);
+	attr->size = size;
+
+	return;
+}
+
+/* API - 08/07/03 - CQ10728 - Query your own number with a D1 SIM*/
+/*******************************************************************************
+
+ $Function:		AUI_Edit_Display_Only
+
+ $Description:	Sets up the display requirements for the Editor & also shows it
+
+ $Returns:    	None.
+
+ $Arguments:  	win - parent window, LSK - Left Soft Key, RSK - Right Soft Key
+ 				string1 - String details, string2 - String details, Title - Editor title string
+
+*******************************************************************************/
+void AUI_Edit_Display_Only(T_MFW_HND win, int LSK, int RSK, char *string1, char *string2, int Title)
+{	
+	 
+	T_MFW_WIN			*win_data	= ((T_MFW_HDR *)win)->data;
+	T_AUI_EDITOR_INFO	*data		= (T_AUI_EDITOR_INFO *)win_data->user;
+
+	T_AUI_EDITOR_DATA display_editor_info;
+
+	int size = MAX_RO_EDITOR_LEN;
+
+	AUI_edit_SetDefault(&display_editor_info);
+			
+			/* Include title for colour display */
+#ifdef COLOURDISPLAY
+	AUI_edit_SetDisplay(&display_editor_info, ZONE_FULL_SK_TITLE_SCROLL, COLOUR_EDITOR, EDITOR_FONT);
+#else /* COLOURDISPLAY */
+	AUI_edit_SetDisplay(&display_editor_info, ZONE_FULL_SK_SCROLL, COLOUR_EDITOR, EDITOR_FONT);
+#endif /* COLOURDISPLAY */
+	AUI_edit_SetMode(&display_editor_info, ED_MODE_ALPHA | ED_MODE_READONLY, ED_CURSOR_NONE);
+	AUI_edit_SetEvents(&display_editor_info, 0, FALSE, FOREVER, (T_AUI_EDIT_CB) AUI_Edit_Display_Only_CB);
+	AUI_edit_SetTextStr(&display_editor_info, LSK, RSK, Title, NULL);
+
+	/* SPR#2672 - SH - Allocate buffer dynamically */
+
+	data->displayBuffer = (char *)ALLOC_MEMORY(size);
+	
+	strcpy(data->displayBuffer, string1);
+		
+	if(string2 != NULL)
+	{
+		strcat(data->displayBuffer, "\n");
+		strcat(data->displayBuffer, string2);
+	}
+	
+	if (data->displayBuffer[0]==(char)0x80)
+	{
+		AUI_edit_SetBuffer(&display_editor_info, ATB_DCS_UNICODE, (UBYTE *)&data->displayBuffer[2], size/2);
+	}
+	else
+	{
+		AUI_edit_SetBuffer(&display_editor_info, ATB_DCS_ASCII, (UBYTE *)&data->displayBuffer[0], size);
+	}
+
+	data->win = AUI_edit_Start(win,&display_editor_info);  /* start the editor */
+	
+}
+
+/*******************************************************************************
+
+ $Function:		AUI_Edit_Display_Only_CB
+
+ $Description:	Handles the key call back from the Read only Editor
+
+ $Returns:    	None.
+
+ $Arguments:  	
+
+*******************************************************************************/
+static void AUI_Edit_Display_Only_CB(T_MFW_HND win, USHORT Identifier, SHORT reason)
+{ 
+	T_MFW_WIN   * win_data = ((T_MFW_HDR *) win)->data;
+	T_AUI_EDITOR_INFO     * data = (T_AUI_EDITOR_INFO *)win_data->user;
+
+TRACE_EVENT("AUI_Edit_Display_Only_CB");
+
+	switch(reason)
+	{
+		case INFO_KCD_RIGHT:
+		case INFO_KCD_HUP:
+			TRACE_EVENT("INFO_KCD_RIGHT/HUP");
+			AUI_Edit_Display_Only_Destroy(data->win);
+		break;
+
+		default:
+			TRACE_EVENT("Err: Default");
+			break;
+		
+	}
+}
+
+/*******************************************************************************
+
+ $Function:    	AUI_Edit_Display_Only_Destroy
+
+ $Description:	Destroy the Read only information Editor
+ 
+ $Returns:		none
+
+ $Arguments:	own_window - current window handler
+ 				
+*******************************************************************************/
+
+static void AUI_Edit_Display_Only_Destroy(MfwHnd own_window)
+{
+    T_MFW_WIN * win_data;
+    T_AUI_EDITOR_INFO     * data;
+
+//	USHORT i;  // RAVI
+
+    TRACE_FUNCTION ("SmsRead_R_TEXTEDT2_destroy()");
+
+    if (own_window)
+	{
+	    win_data = ((T_MFW_HDR *)own_window)->data;
+	    data = (T_AUI_EDITOR_INFO *)win_data->user;
+
+	    if (data)
+		{
+		    /*
+		     * Delete WIN handler
+		     */ 
+
+			/* SPR#2672 - SH - Delete buffer */
+
+			if (data->displayBuffer!=NULL)
+			{
+				FREE_MEMORY((void *)data->displayBuffer, MAX_RO_EDITOR_LEN);
+			}
+			
+			/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+			AUI_edit_Destroy(data->win);
+#else /* NEW_EDITOR */
+			editor_destroy(data->win);
+#endif /* NEW_EDITOR */
+
+		    win_delete (data->win);
+
+		    FREE_MEMORY ((void *)data, sizeof (T_AUI_EDITOR_INFO));
+		
+		
+		}
+	    else
+		{
+		    TRACE_EVENT ("SmsRead_R_TEXTEDT2_destroy() called twice");
+		}
+	}
+}
+/* API - 08/07/03 - CQ10728 END*/