diff g23m/condat/ms/src/bmi/MmiResources.c @ 0:509db1a7b7b8

initial import: leo2moko-r1
author Space Falcon <falcon@ivan.Harhan.ORG>
date Mon, 01 Jun 2015 03:24:05 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/g23m/condat/ms/src/bmi/MmiResources.c	Mon Jun 01 03:24:05 2015 +0000
@@ -0,0 +1,2081 @@
+/*******************************************************************************
+
+					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:		Resource Manager
+ $File:		    MmiResources.c
+ $Revision:		1.0                                                       
+                                                                              
+ $Author:		Condat(UK)                                                         
+ $Date:		    25/10/00                                                      
+                                                                               
+********************************************************************************
+                                                                              
+ Description:
+
+   Simple wrapper for the MMI Block Resources
+
+   This module provides a simple interface to the block
+   resources module, giving access to a single language,
+   which can be used to get strings by Id.
+
+   This module is a hack to provide an interface to the
+   resource manager which can be easily used by a single
+   process. If an application needs to use the resource
+   manager it should call it directly, initialising it's
+   own context safe handlers.
+
+   This module is designed to wrap the resource API
+   functions in a manner that gives the easiest and
+   fastest implementation. It is therefore not a
+   reentrant module, however given it only performs
+   read only actions this should not be a problem.
+                        
+********************************************************************************
+ $History: MmiResources.c
+
+ 	March 01, 2005    REF: ENH 29313    Deepa M.D
+	Isolating colour build related changes from MMI LITE flag.
+ 	The proper  Feature flag  COLORDISPLAY was used for all color 
+   	related changes.
+
+  	Oct 19, 2004 REF: CRR MMI-SPR-26002 xkundadu.
+  	Issue description:  Golite booting problem.
+  	Solution: If the FFS is not formatted, prevent writing into the FFS.
+
+
+	Aug 25, 2004    REF: CRR 24904   Deepa M.D
+	Bug:cleanup compile switches used for Go-lite
+	Fix:COLOURDISPLAY compiler switch has been added to the functions which are 
+	used only for the normal color build.
+
+
+	Aug 25, 2004    REF: CRR 24297  Deepa M.D 
+	Bug:Reduction of the size of the variable ColArray
+	Fix:The size of the structure T_COLDATA has been reduced for the Go-lite version.
+	For Go-lite only two colors are being used(Black&White), hence the members of the
+	T_COLDATA structure can be reduced to U8.
+
+
+	25/10/00			Original Condat(UK) BMI version.	
+	03/10/02		Replaced most of the file with version on branch for issue 1150 (MC, SPR 1242) 
+ $End
+
+*******************************************************************************/
+
+
+/*******************************************************************************
+                                                                              
+                                Include Files                                 
+                                                                              
+*******************************************************************************/
+#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_sys.h"
+
+#include "prim.h"
+
+
+#include "mfw_mfw.h"
+#include "mfw_win.h"
+#include "mfw_kbd.h"
+/* SPR#1428 - SH - New Editor changes */
+#ifndef NEW_EDITOR
+#include "mfw_edt.h"
+#endif
+#include "mfw_lng.h"
+#include "mfw_icn.h"
+#include "mfw_mnu.h"
+#include "mfw_tim.h"
+#include "mfw_sim.h"
+#include "mfw_nm.h"
+#include "mfw_cm.h"
+#include "mfw_sat.h"
+#include "mfw_phb.h"
+#include "mfw_sms.h"
+#include "mfw_ffs.h" /*MC, SPR 1111*/
+//Include the following  ensure that the function definitions within it match the
+//definitions in this file.
+#include "mfw_mmi.h"
+#include "dspl.h"
+
+#include "ksd.h"
+#include "psa.h"
+
+/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+#include "ATBCommon.h"
+#include "ATBDisplay.h"
+#include "ATBEditor.h"
+#include "AUIEditor.h"
+#endif
+
+#include "MmiResources.h"
+#include "MmiBlkLangDB.h"
+#include "MmiBlkManager.h"
+#include "MmiBlkResources.h"
+#include "MmiBookShared.h"
+
+#include "MmiDummy.h"
+#include "MmiMmi.h"
+#include "MmiMain.h"
+#include "MmiStart.h"
+#include "MmiPins.h"
+
+
+#include "MmiDialogs.h"
+#include "MmiLists.h"
+#include "MmiDialogs.h"
+#include "Mmiicons.h"	//GW
+#include "mfw_ffs.h"
+// this is for traces
+#include "cus_aci.h"
+
+#include "prim.h"
+#ifndef PCM_2_FFS
+#include "pcm.h"
+#endif
+
+
+
+#include "MmiLists.h"
+#include "mmiColours.h"
+
+//#define COLOURDISPLAY
+//#define TRACE_EVENT_COL TRACE_EVENT
+
+#ifndef TRACE_EVENT_COL
+#define TRACE_EVENT_COL
+#endif
+
+#ifndef LSCREEN
+#define FIRST_LINE 6
+#define SECOND_LINE 14
+#define THIRD_LINE 24
+#define FOURTH_LINE 32
+#define FIFTH_LINE 40
+#define SIXTH_LINE 48
+#define LINE_HEIGHT 8
+#define FIRST_LINE_CHINESE 12
+#define SECOND_LINE_CHINESE 24
+#define THIRD_LINE_CHINESE 36
+#define FOURTH_LINE_CHINESE 48
+#define LINE_HEIGHT_CHINESE 12
+
+#define FIRST_LINE_ICON 6
+#define SECOND_LINE_ICON 14
+#define THIRD_LINE_ICON 20
+
+
+#else
+//#define LINE_HEIGHT 12
+//Colour display - all lines are the same height
+//move to header for the moment #define LINE_HEIGHT 12
+#endif
+//x33x-end*/
+
+#ifndef LSCREEN
+#define SK_HEIGHT_LATIN				(LINE_HEIGHT_LATIN)
+#define SK_HEIGHT_CHINESE			(LINE_HEIGHT_CHINESE)
+#define TITLE_HEIGHT_LATIN			(LINE_HEIGHT_LATIN)
+#define TITLE_HEIGHT_CHINESE		(LINE_HEIGHT_CHINESE)
+
+#define NLINES_LATIN				(SCREEN_SIZE_Y/LINE_HEIGHT_LATIN)	//6
+#define NLINES_CHINESE				(SCREEN_SIZE_Y/LINE_HEIGHT_CHINESE)	//4
+#define CHINESE_MENU_VERTICAL_SIZE 		((NLINES_CHINESE-1)*LINE_HEIGHT_CHINESE)
+#define STANDARD_MENU_VERTICAL_SIZE ((NLINES_LATIN-1)*LINE_HEIGHT_LATIN)
+
+#define ICON_HEIGHT					(6)
+#else
+#define SK_HEIGHT_LATIN				(LINE_HEIGHT+8)
+#define SK_HEIGHT_CHINESE			(LINE_HEIGHT+8)
+#define TITLE_HEIGHT_LATIN			(LINE_HEIGHT_LATIN+4)
+#define TITLE_HEIGHT_CHINESE		(LINE_HEIGHT_CHINESE+4)
+#define ALLOFFSET					(LINE_HEIGHT*2)
+#define MNUOFFSET					(LINE_HEIGHT)
+
+#define NLINES_LATIN				(SCREEN_SIZE_Y/LINE_HEIGHT_LATIN)	
+#define NLINES_CHINESE				(SCREEN_SIZE_Y/LINE_HEIGHT_CHINESE)	
+#define CHINESE_MENU_VERTICAL_SIZE 		((NLINES_CHINESE*LINE_HEIGHT_CHINESE)-SK_HEIGHT_CHINESE)
+#define STANDARD_MENU_VERTICAL_SIZE ((NLINES_LATIN*LINE_HEIGHT_LATIN)-SK_HEIGHT_LATIN)
+
+#define ICON_HEIGHT					(22)
+#endif
+
+
+/*******************************************************************************
+                                                                              
+                                Static data elements
+                                                                              
+*******************************************************************************/
+
+/* Define static data elements to give the global
+   handles. These are not re-entrant, but what the
+   hell, there will only be one of these in the
+   system
+*/
+static tBlkHandle BlkManager = NULL;
+UBYTE currentLanguage		= NULL;
+static tBlkHandle Language   = NULL;
+static long int   ModuleKey  = -1;
+
+
+/* Define a unique key value to determine if the constructor
+   has been called. This is slightly dangerous as there is 
+   a chance that the key value powers up in this state, however
+   this is unlikely in a cold boot situation. (In a warm boot,
+   if the RAM contents are preserved then the block resource
+   manager will also be preserved, so there should be no
+   problem there).
+*/
+#define KEYVALUE 0x00FADE00
+
+
+/* We know that the resource manager deals with two languages
+   at present, English and German, The first element in the
+   lists will indicate which is which in a later version, however
+   for now, we will just define constant settings for these.
+
+   Note that the current MMI doesn't fully support German
+   characters, but the resource manager does.
+*/
+
+#define SHOW_CONFIRM     3
+int Easy_Text_Available = TRUE;
+
+ char* SIMToolKitString=NULL;
+
+
+/*SPR 1111, country code and langauge tables*/
+/*MC, if English and Chinese Available*/
+#ifdef CHINESE_MMI
+static const CountryLangEntry LanguageTableEntries[7]=
+{ 
+	{"001", ENGLISH_LANGUAGE}, /*USA*/
+	{"044", ENGLISH_LANGUAGE},	/*UK*/
+	{"061", ENGLISH_LANGUAGE},	/*Australia*/
+	{"353", ENGLISH_LANGUAGE},	/*Ireland*/
+	{"064", ENGLISH_LANGUAGE},	/*New Zealand*/
+	{"086", CHINESE_LANGUAGE}, /*PRChina*/
+	{"065", CHINESE_LANGUAGE} /*Singapore*/
+};
+
+static const CountryLanguageTable LanguageTable =
+{ 7, (CountryLangEntry*)LanguageTableEntries};
+#else	/*MC, if English and German Available*/
+static const CountryLangEntry LanguageTableEntries[7]=
+{ 
+	{"001", ENGLISH_LANGUAGE}, /*USA*/
+	{"044", ENGLISH_LANGUAGE},	/*UK*/
+	{"061", ENGLISH_LANGUAGE},	/*Australia*/
+	{"353", ENGLISH_LANGUAGE},	/*Ireland*/
+	{"064", ENGLISH_LANGUAGE},	/*New Zealand*/
+	{"043", GERMAN_LANGUAGE}, /*Austria*/
+	{"049", GERMAN_LANGUAGE} /*Germany*/
+};
+
+static const CountryLanguageTable LanguageTable =
+{ 7, (CountryLangEntry*)LanguageTableEntries};
+
+
+#endif
+
+typedef struct 
+{
+	// cp_resource_file_t rf;
+	RESOURCE_DIRECTORY_HEADER language_table;
+	RESOURCE_DIRECTORY_HEADER melody_table;
+	RESOURCE_DIRECTORY_HEADER glyph_table;
+	RESOURCE_DIRECTORY_HEADER zone_table;
+
+	UBYTE langid;		// current language_table
+	UBYTE fontid;		// current font
+	ST_DIMENSION    fontHeight;	// current font height
+
+}  res_ResMgr_type;
+
+// private resources data 
+static res_ResMgr_type this_res ;
+
+typedef struct
+{
+  T_MMI_CONTROL    mmi_control;
+  T_MFW_HND        resources_win;        /* MFW win handler      */
+} T_resources;
+
+T_resources resources_data;
+
+enum {
+	COL_TYPE_SCREEN=0,
+	COL_TYPE_SK,
+	COL_TYPE_HL,
+	COL_TYPE_TITLE,
+	COL_TYPE_MAX
+};
+/***************************Go-lite Optimization changes Start***********************/
+//Aug 25, 2004    REF: CRR 24297  Deepa M.D 
+//T_COLDATA structure for the Go-lite has been reduced in size.
+//March 01, 2005    REF: ENH 29313    Deepa M.D
+// Isolating colour build related changes from MMI LITE flag.
+// The proper  Feature flag  COLORDISPLAY was used for all color 
+//related changes.
+#ifdef COLOURDISPLAY 
+typedef struct {
+	U32 fgd;
+	U32 bgd;
+} T_COLDATA;
+#else
+typedef struct {
+	U8 fgd;
+	U8  bgd;
+} T_COLDATA;
+#endif
+/***************************Go-lite Optimization changes end***********************/
+const char * colourFileDir = "/mmi";
+const char * colourFileName = "MmiColour";
+
+static T_COLDATA colArray[LAST_COLOUR_DEF][COL_TYPE_MAX];
+
+#define FGD_COL 1
+#define BGD_COL 2
+#define NO_COL 3
+
+#ifndef LSCREEN
+#define NLINES 4
+#define NLINES_MAX 5
+#else
+#define NLINES ((SCREEN_SIZE_Y-SK_HEIGHT_LATIN)/LINE_HEIGHT)
+#define NLINES_MAX ((SCREEN_SIZE_Y-SK_HEIGHT_LATIN)/LINE_HEIGHT)
+#endif
+
+/*Data should be reset */
+MfwRect menuArea 							= {0,0,10,10};
+MfwRect menuNamesArea	 					= {0,0,10,10};
+MfwRect menuListArea 						= {0,0,10,10};
+MfwRect editor_menuArea						= {0,0,10,10};		/* menus display area      */
+MfwRect network_menuArea 					= {0,0,10,10};			/* menus display area      */
+MfwRect sat_setup_menuArea					= {0,0,10,10};			/* menus display area      */
+MfwRect sat_select_menuArea 				= {0,0,10,10};			/* menus display area      */
+MfwRect smscb_M_CBArea 						= {0,0,10,10}; /* menus display area      */
+MfwRect smscb_M_CB_ACTArea					= {0,0,10,10}; /* menus display area      */
+MfwRect smscb_M_CB_TOPArea 					= {0,0,10,10};/* menus display area      */
+MfwRect smscb_M_CB_TOP_CONSArea				= {0,0,10,10}; /* menus display area      */
+MfwRect smscb_M_CB_TOP_CONS_SELArea			= {0,0,10,10}; /* menus display area      */
+MfwRect smscb_CBArea						= {0,0,10,10}; /* menus display area      */
+MfwRect smscb_CB_OPTArea					= {0,0,10,10}; /* menus display area      */
+MfwRect readSMS_menuArea					= {0,0,10,10}; /* menus display area      */
+//#if(BOARD==61)
+#ifdef FF_MMI_MULTIMEDIA
+// BEGIN ADD: RAVI : 13-07-2005
+// File Type Menu Area specification.
+MfwRect FileType_menuArea					= {0,0,10,10}; /* menus display area      */  // RAVI - 19-05-2005
+// END ADD: RAVI : 13-07-2005
+
+#endif
+MfwRect SmsRead_R_OPTArea					= {0,0,10,10};/* menus display area      */
+MfwRect SmsSend_R_OPTArea					= {0,0,10,10}; /* menus display area      */
+MfwRect melody_menuArea 					= {0,0,10,10}; /* menus display area      */
+MfwRect MAINICONarea						= {0,0,10,10};
+MfwRect MAINICONareaColour 					= {0,0,10,10};	//For the larger colour main icons
+
+static int resources_win_cb (T_MFW_EVENT event, T_MFW_WIN * win);
+static void resources_language_confirm(void);
+void resources_dialog_cb(T_MFW_HND win, UBYTE identifier, UBYTE reason);
+void resources (T_MFW_HND win, USHORT event, SHORT value, void * parameter);
+T_MFW_HND resources_Init (T_MFW_HND parent_window);
+void resources_Exit (T_MFW_HND own_window);
+T_MFW_HND resources_create (T_MFW_HND parent_window);
+void initDefaultDataColour (void);
+
+// Extern Function ADDED - RAVI - 25-11-2005
+EXTERN int flash_formatted(void);
+EXTERN void idle_setBgdBitmap(int bmpId);
+// END - RAVI
+
+
+
+/*******************************************************************************
+                                                                              
+                                Private Routines
+                                                                              
+*******************************************************************************/
+
+static void LanguageEnable( int newLanguage )
+{
+    /* Initialise if required
+    */
+	currentLanguage = newLanguage;
+	if ( ModuleKey != KEYVALUE )
+	{
+		/* Nope, then go do it, If the mmibm_* routines fail to initialise
+		   they will return NULL, and they both deal with bad input values
+		   cleanly, so we don't need error checking here.
+		*/
+        BlkManager = mmibm_Initialise( Mmir_BaseAddress(), Mmir_NumberOfEntries() );
+		ModuleKey  = KEYVALUE;
+	}
+
+    /* Set up the new language based on the incoming value
+    */
+    /*MC, SPR 1150, simplified for easier addition of new languages*/
+    if (newLanguage> 0 && newLanguage <= NO_OF_LANGUAGES)
+    	Language   = mmibm_SupplyResourceHandler( BlkManager, newLanguage );
+}
+
+
+/*******************************************************************************
+                                                                              
+                                Public Routines
+                                                                              
+*******************************************************************************/
+
+/*******************************************************************************
+ $Function:    	MmiRsrcGetText
+
+ $Description:	Define access routine for the actual get text
+                routine. In order to make sure the routine can
+				be invoked and will automatically start, we will
+				use the key value above to ensure we detect the
+				startup conditions.
+				
+				The calling routine for this function should check
+				for NULL values which will be returned if the 
+
+ $Returns:		Pointer to resource indicated by Id (Or NULL)
+
+ $Arguments:	Id of requested resource
+ 
+*******************************************************************************/
+
+char *MmiRsrcGetText( int Id )
+{
+	/* Check if we have already initialised
+	*/
+	if ( ModuleKey != KEYVALUE )
+        LanguageEnable( ENGLISH_LANGUAGE );
+
+    /* JVJ #1576 SAT is an exception, since the Menu string is variable depending on the SIM*/
+    /* but the Languages table is constant. Therefore we need this workaround for the Mainmenu*/
+    /* to display the SAT header */
+    if ((Id == TxtSimToolkit)&&(SIMToolKitString))
+        return (char*)SIMToolKitString;
+
+    /* use the currently set up resource handler for the English
+	   language to get the text associaed with the Id, again if
+	   there has been a problem with the initialisation of the
+	   English handler, then the fetch routine will deal with it
+	   cleanly and return NULL.
+	*/
+	return (char *) mmibr_Fetch( Language, Id );
+}
+
+/*MC, SPR 1150 new function, don't need to write a new function for each new langauge now*/
+void MmiRsrcSetLang( int lang )
+{	if (lang == CHINESE_LANGUAGE)
+		dspl_set_char_type(DSPL_TYPE_UNICODE);
+	else
+		dspl_set_char_type(DSPL_TYPE_ASCII);
+    LanguageEnable( lang );
+	Mmi_layout_areas();
+	FFS_flashData.language = lang;
+
+//  Oct 19, 2004 REF: CRR MMI-SPR-26002 xkundadu 
+//  Issue description:  Golite booting problem.
+//  Solution: If the FFS is not formatted, prevent writing into the FFS.
+	if(flash_formatted() == TRUE)
+	{
+		flash_write();
+	}
+
+
+}
+/*MC SPR 1150, Simplified menu interface functions.  
+It should be simpler to add new functions for new languages
+We still need to write individual functions for each language to interface with the menus as
+the menu architecture does not allow passing parmeters*/
+
+void Mmi_Set2English( void )
+{
+  Mmi_Set2Language(ENGLISH_LANGUAGE); 
+}
+
+void Mmi_Set2German( void )
+{	
+   Mmi_Set2Language(GERMAN_LANGUAGE); 
+}
+
+void Mmi_Set2Chinese( void )
+{
+
+  Mmi_Set2Language(CHINESE_LANGUAGE); 
+}
+#ifdef LANG_CHANGE_TEST
+void Mmi_Set2Martian( void )
+{
+
+  Mmi_Set2Language(MARTIAN_LANGUAGE); 
+}
+#endif
+/*MC SPR 1150,new generic langauge change function*/
+void Mmi_Set2Language(int lang)
+{
+
+    T_MFW_HND win = mfw_parent(mfw_header());
+    
+	resources_Init(win);
+
+    MmiRsrcSetLang(lang);
+
+	SEND_EVENT (resources_data.resources_win, SHOW_CONFIRM, 0, 0);
+
+}
+
+UBYTE Mmi_getCurrentLanguage(void)
+{
+	return currentLanguage;
+}
+
+//GW Created to return height of a line with just numbers on it
+UBYTE numberLineHeight(void)
+{
+#ifndef LSCREEN
+	//All numbers are 8 bits high (whether chinese or latin chars)
+	return (8);
+#else 
+	//all text is 12 bits high
+	return (12);
+#endif
+}
+//GW Created
+UBYTE Mmi_layout_line(int lineNo)
+{
+#ifndef LSCREEN
+	if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE)
+	{
+		switch (lineNo)
+		{
+		case 1:		return FIRST_LINE_CHINESE;
+
+		case SECOND_LAST_LINE_TOP:
+		case 2:		return SECOND_LINE_CHINESE;
+
+		case LAST_LINE_TOP:
+		case 3:		return THIRD_LINE_CHINESE;
+
+		case LAST_LINE:
+		case 4:		return FOURTH_LINE_CHINESE;
+		//We are now asking for an invalid line
+		default:	return FOURTH_LINE_CHINESE;
+		
+		}
+	}	
+	else
+	{
+		switch (lineNo)
+		{
+		case 1:		return FIRST_LINE;
+		case 2:		return SECOND_LINE;
+		case 3:		return THIRD_LINE;
+
+		case SECOND_LAST_LINE_TOP:
+		case 4:		return FOURTH_LINE;
+
+		case LAST_LINE_TOP:		//y-coord of the top of last line
+		case 5:		return FIFTH_LINE;
+
+		case LAST_LINE:
+		case 6:		return SIXTH_LINE;
+		//We are now asking for an invalid line
+		default:	return SIXTH_LINE;
+		}
+	}	
+#else
+	//assume both fonts are now the same height.
+	switch (lineNo)
+	{
+		case SECOND_LAST_LINE_TOP:	return ( (UBYTE)(SCREEN_SIZE_Y-Mmi_layout_softkeyHeight()-LINE_HEIGHT));
+		case LAST_LINE_TOP:			return ( (UBYTE)(SCREEN_SIZE_Y-Mmi_layout_softkeyHeight()));
+		case LAST_LINE:				return ( (UBYTE) SCREEN_SIZE_Y);
+		
+		default:	return (lineNo*LINE_HEIGHT);
+	}
+#endif
+}
+UBYTE Mmi_layout_line_icons(int lineNo)
+{
+#ifndef LSCREEN
+	if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE)
+	{
+		switch (lineNo)
+		{
+		case 1:		return FIRST_LINE_CHINESE;
+
+		case SECOND_LAST_LINE_TOP:
+		case 2:		return SECOND_LINE_CHINESE;
+
+		case LAST_LINE_TOP:
+		case 3:		return THIRD_LINE_CHINESE;
+
+		case LAST_LINE:
+		case 4:		return FOURTH_LINE_CHINESE;
+		//We are now asking for an invalid line
+		default:	return FOURTH_LINE_CHINESE;
+		
+		}
+	}	
+	else
+	{
+		switch (lineNo)
+		{
+		case 1:		//nobreak;
+		case 2:		//nobreak;
+		case 3:		//nobreak;
+		default:	return (FIRST_LINE_ICON+(lineNo-1)*LINE_HEIGHT);
+
+		case SECOND_LAST_LINE_TOP:
+		case 4:		return FOURTH_LINE;
+
+		case LAST_LINE_TOP:		//y-coord of the top of last line
+		case 5:		return FIFTH_LINE;
+
+		case LAST_LINE:
+		case 6:		return SIXTH_LINE;
+		}
+		
+	}
+#else
+		switch (lineNo)
+		{
+		case SECOND_LAST_LINE_TOP:		return((UBYTE)(SCREEN_SIZE_Y-(Mmi_layout_softkeyHeight()+Mmi_layout_line_height())));
+		case LAST_LINE_TOP:				return((UBYTE)(SCREEN_SIZE_Y-(Mmi_layout_softkeyHeight())));
+		case LAST_LINE:					return((UBYTE)(SCREEN_SIZE_Y));
+		default:						return(Mmi_layout_IconHeight()+Mmi_layout_line_height()*lineNo);
+		
+		}
+#endif
+}
+
+UBYTE Mmi_layout_line_height(void)
+{
+#ifndef LSCREEN
+	if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE)
+		return LINE_HEIGHT_CHINESE;
+	else
+		return LINE_HEIGHT;
+#else
+	return (LINE_HEIGHT);
+#endif
+}
+
+UBYTE Mmi_layout_softkeyHeight( void )
+{
+#ifndef LSCREEN
+	if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE)
+		return SK_HEIGHT_CHINESE;
+	else
+		return SK_HEIGHT_LATIN;
+#else
+	return (SK_HEIGHT_LATIN);
+#endif
+}
+UBYTE Mmi_layout_softkeyArea( MfwRect* rect )
+{
+	if (!rect)
+		return (0);
+	if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE)
+		rect->sy = SK_HEIGHT_CHINESE;
+	else
+		rect->sy = SK_HEIGHT_LATIN;
+	rect->px = 0;
+	rect->sx = SCREEN_SIZE_X;
+	rect->py = SCREEN_SIZE_Y-rect->sy;
+	return(1);
+}
+UBYTE Mmi_layout_TitleHeight( void )
+{
+#ifndef LSCREEN
+	if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE)
+		return TITLE_HEIGHT_CHINESE;
+	else
+		return TITLE_HEIGHT_LATIN;
+#else
+	return (TITLE_HEIGHT_LATIN);
+#endif
+}
+UBYTE Mmi_layout_IconHeight( void )
+{
+	return (ICON_HEIGHT);
+}
+
+UBYTE Mmi_number_of_lines_with_icons_on_top(void)
+{
+#ifndef LSCREEN
+{
+	if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE)
+		return 2;
+	else
+		return 4;
+}
+#else 
+	return NLINES_MAX-1;
+#endif
+}
+
+
+UBYTE Mmi_number_of_lines_without_icons_on_top(void)
+{
+#ifndef LSCREEN
+{
+	if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE)
+		return 3;
+	else
+		return 5;
+}
+#else //assume a single font of 12 pixels high 10 lines x 12 pixels
+	return NLINES_MAX;
+#endif
+}
+
+//GW 10/02/03	Modified code - icon position is now sorted out by 'iconsMainIconsAreaSet' - the code 
+//				here only supplies the available screen size
+void Mmi_layout_areas(void)
+{
+	MAINICONarea.px = 0;
+	MAINICONarea.py =Mmi_layout_line_height();
+
+	MAINICONarea.sx = SCREEN_SIZE_X;
+	MAINICONarea.sy =SCREEN_SIZE_Y-Mmi_layout_line_height()*2-1;
+
+	Mmi_set_area_attr(&menuArea,						0,0,SCREEN_SIZE_X,SCREEN_SIZE_Y-Mmi_layout_softkeyHeight());
+	Mmi_set_area_attr(&menuNamesArea,					0,0,SCREEN_SIZE_X,SCREEN_SIZE_Y-LINE_HEIGHT-Mmi_layout_softkeyHeight());
+	Mmi_set_area_attr(&menuListArea,					0,0,SCREEN_SIZE_X,SCREEN_SIZE_Y-Mmi_layout_softkeyHeight());
+	Mmi_set_area_attr(&editor_menuArea,Mmi_layout_line(1),0,SCREEN_SIZE_X,SCREEN_SIZE_Y-Mmi_layout_softkeyHeight());
+	Mmi_set_area_attr(&network_menuArea,				0,0,SCREEN_SIZE_X,SCREEN_SIZE_Y-/*Mmi_layout_IconHeight()-*/Mmi_layout_softkeyHeight()); /* SPR#2354 - SH - icons aren't shown */
+	Mmi_set_area_attr(&sat_setup_menuArea,				0,0,SCREEN_SIZE_X,SCREEN_SIZE_Y-Mmi_layout_softkeyHeight());
+	Mmi_set_area_attr(&sat_select_menuArea,				0,0,SCREEN_SIZE_X,SCREEN_SIZE_Y-Mmi_layout_softkeyHeight());
+	Mmi_set_area_attr(&smscb_M_CBArea,					0,0,SCREEN_SIZE_X,SCREEN_SIZE_Y-Mmi_layout_softkeyHeight());
+	Mmi_set_area_attr(&smscb_M_CB_ACTArea,				0,0,SCREEN_SIZE_X,SCREEN_SIZE_Y-Mmi_layout_softkeyHeight());
+	Mmi_set_area_attr(&smscb_M_CB_TOPArea,				0,0,SCREEN_SIZE_X,SCREEN_SIZE_Y-Mmi_layout_softkeyHeight()); 
+	Mmi_set_area_attr(&smscb_M_CB_TOP_CONSArea,			0,0,SCREEN_SIZE_X,SCREEN_SIZE_Y-Mmi_layout_softkeyHeight());
+	Mmi_set_area_attr(&smscb_M_CB_TOP_CONS_SELArea,		0,0,SCREEN_SIZE_X,SCREEN_SIZE_Y-Mmi_layout_softkeyHeight());
+	Mmi_set_area_attr(&smscb_CBArea,					0,0,SCREEN_SIZE_X,SCREEN_SIZE_Y-Mmi_layout_softkeyHeight()); 
+	Mmi_set_area_attr(&smscb_CB_OPTArea,				0,0,SCREEN_SIZE_X,SCREEN_SIZE_Y-Mmi_layout_softkeyHeight());
+	Mmi_set_area_attr(&readSMS_menuArea,				0,0,SCREEN_SIZE_X,SCREEN_SIZE_Y-Mmi_layout_softkeyHeight());
+//#if(BOARD==61)
+#ifdef FF_MMI_MULTIMEDIA
+	// BEGIN ADD : RAVI : 13-07-2005
+	// Set the screen area for display the menu type.
+	Mmi_set_area_attr(&FileType_menuArea,				0,0,SCREEN_SIZE_X,SCREEN_SIZE_Y-Mmi_layout_softkeyHeight());	 // RAVI - 27-05-2005
+	// END ADD : RAVI-13-07-2005
+
+#endif
+	Mmi_set_area_attr(&SmsRead_R_OPTArea,				0,0,SCREEN_SIZE_X,SCREEN_SIZE_Y-Mmi_layout_softkeyHeight());
+	Mmi_set_area_attr(&SmsSend_R_OPTArea,				0,0,SCREEN_SIZE_X,SCREEN_SIZE_Y-Mmi_layout_softkeyHeight());
+	Mmi_set_area_attr(&melody_menuArea,					0,0,SCREEN_SIZE_X,SCREEN_SIZE_Y-Mmi_layout_softkeyHeight());
+	iconsMainIconsAreaSet (MAINICONarea);
+
+}
+
+void Mmi_set_area_attr(MfwRect* area,U16 px,U16 py,U16 sx,U16 sy)
+{
+
+	/* pass in top-left/bottom-right coordinates*/
+	area->px = px;
+	area->py = py;
+	area->sx = sx-px;
+	area->sy = sy-py;
+}
+
+/*******************************************************************************
+
+ $Function:    	resources_Init
+
+ $Description:	
+ 
+ $Returns:		window
+
+ $Arguments:	parent window
+ 
+*******************************************************************************/
+T_MFW_HND  resources_Init(T_MFW_HND parent_window)
+{
+  return (resources_create (parent_window));
+}
+
+// API - 1550 - 13-01-03 - Add this function to reset the backgrounds of Idle and Main Menus.
+void resetFactoryBackground ( void )
+{
+	idle_setBgdBitmap(BGD_TI_LOGO);
+	FFS_flashData.IdleScreenBgd = BGD_TI_LOGO;
+
+	icon_setMainBgdBitmap(BGD_SQUARE);
+	FFS_flashData.MainMenuBgd = BGD_SQUARE;
+
+	FFS_flashData.ProviderNetworkShow = TRUE;
+}
+
+void resetFactoryColour ( void )
+{
+  	initDefaultDataColour();
+  	if(flash_data_write(colourFileDir, colourFileName, colArray, sizeof(colArray)) >= EFFS_OK)
+  	{
+  		TRACE_EVENT("File Created in FFS");
+  	}
+  	else
+  	{
+  		TRACE_EVENT("File Not Created in FFS");  
+  	}
+	
+}
+void colour_initial_colours (void)
+{
+/* API/GW - Added to read the flash structure to see if the file structure to save the colour data in has been created
+   			 and if so save the initialised data to flash or load the saved values out of flash
+*/
+  if (flash_data_read(colourFileDir, colourFileName, colArray, sizeof(colArray)) == sizeof(colArray))
+    /* Marcus: Issue 1719: 11/02/2003: Altered comparison in condition */
+  {
+  	TRACE_EVENT("Correctly Read in!");
+  }
+  else
+  {
+  	resetFactoryColour();
+  }
+}
+/*******************************************************************************
+
+ $Function:    	resources_Exit
+
+ $Description:	exit network handling (Backward Compatibility interface)
+ 
+ $Returns:		none
+
+ $Arguments:	window
+ 
+*******************************************************************************/
+void resources_Exit (T_MFW_HND own_window)
+{
+
+    T_MFW_WIN   * win_data = ((T_MFW_HDR *)own_window)->data;
+    T_resources * data     = (T_resources *)win_data->user;
+
+  resources_destroy (data->resources_win);
+}
+
+
+
+
+/*******************************************************************************
+
+ $Function:    	resources_create
+
+ $Description:	create network top window
+ 
+ $Returns:		window
+
+ $Arguments:	parent_window
+ 
+*******************************************************************************/
+T_MFW_HND resources_create (T_MFW_HND parent_window)
+{
+  T_resources * data = &resources_data;
+  T_MFW_WIN   * win;
+
+  TRACE_FUNCTION ("resources_create()");
+
+  data->resources_win = win_create (parent_window, 0, 0, (T_MFW_CB)resources_win_cb);
+
+  if (data->resources_win EQ 0)
+    return 0;
+
+  /*
+   * Create window handler
+   */
+  data->mmi_control.dialog = (T_DIALOG_FUNC)resources;
+  data->mmi_control.data   = data;
+  win                      = ((T_MFW_HDR *)data->resources_win)->data;
+  win->user                = (void *) data;
+
+ 
+  winShow(data->resources_win);
+  /*
+   * return window handle
+   */
+  return data->resources_win;
+}
+
+
+
+/*******************************************************************************
+
+ $Function:    	resources_destroy
+
+ $Description:	
+ 
+ $Returns:		none
+
+ $Arguments:	window
+ 
+*******************************************************************************/
+void resources_destroy (T_MFW_HND own_window)
+{
+  T_MFW_WIN   * win;
+  T_resources * data;
+
+  TRACE_FUNCTION ("resources_destroy()");
+
+  if (own_window)
+  {
+    win  = ((T_MFW_HDR *)own_window)->data;
+    data = (T_resources *)win->user;
+
+    if (data)
+    {
+
+      /*
+       * Delete WIN handler
+       */
+      win_delete (data->resources_win);
+      data->resources_win = 0;
+    }
+  }
+}
+
+
+/*******************************************************************************
+
+ $Function:    	resources_win_cb
+
+ $Description:	network top window
+ 
+ $Returns:		status int
+
+ $Arguments:	event, window
+ 
+*******************************************************************************/
+static int resources_win_cb (T_MFW_EVENT event, T_MFW_WIN * win)
+{
+  /*
+   * Top Window has no output
+   */
+  return 1;
+}
+
+
+
+
+
+/*******************************************************************************
+
+ $Function:    	resources_language_confirm
+
+ $Description:	
+ 
+ $Returns:		void
+
+ $Arguments:	void
+ 
+*******************************************************************************/
+static void resources_language_confirm(void)
+{
+  T_DISPLAY_DATA display_info;
+
+  TRACE_FUNCTION ("resources_language_confirm()");
+
+	dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtDone, TxtNull , COLOUR_STATUS_PINS);
+	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)resources_dialog_cb, THREE_SECS, KEY_CLEAR | KEY_RIGHT );
+	
+  /*
+   * Call Info Screen
+   */
+  info_dialog (resources_data.resources_win, &display_info);
+
+}
+
+/*******************************************************************************
+
+ $Function:    	resources_dialog_cb
+
+ $Description:	
+ 
+ $Returns:		void
+
+ $Arguments:	window, identifier, reason
+ 
+*******************************************************************************/
+void resources_dialog_cb(T_MFW_HND win, UBYTE identifier, UBYTE reason)
+{
+	TRACE_FUNCTION ("resources_dialog_cb()");
+
+      switch (reason) 
+      {
+        case INFO_TIMEOUT:
+          /* no break; */
+        case INFO_KCD_HUP:
+          /* no break; */
+        case INFO_KCD_LEFT:
+          /* no break; */
+        case INFO_KCD_RIGHT:
+            resources_Exit(win);
+          break;
+      }
+}
+
+
+
+/*******************************************************************************
+
+ $Function:    	resources
+
+ $Description:	
+ 
+ $Returns:		void
+
+ $Arguments:	window, event, value, parameter
+ 
+*******************************************************************************/
+void resources (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
+{
+ // T_MFW_WIN         * win_data = ((T_MFW_HDR *) win)->data;  // RAVI
+ // T_resources       * data     = (T_resources *)win_data->user;  // RAVI
+
+ TRACE_FUNCTION("resources()");
+
+ switch (event)
+  {
+    case SHOW_CONFIRM:
+		resources_language_confirm();
+    break;
+  }
+
+}
+/*MC added for SPR 1111*/
+/*******************************************************************************
+
+ $Function:    	resources_reset_language
+
+ $Description:	Reset language using Pseudo-SS string
+ 
+ $Returns:		TRUE if reset successful, FALSE otherwise
+
+ $Arguments:	Pseudo-SS string
+ 
+*******************************************************************************/
+BOOL resources_reset_language(char* string)
+{
+	char country_code[4];
+	int i;
+	/*extract country code from input string*/
+	memcpy(country_code, &string[3], 3);
+	country_code[3] = NULL;
+
+	/*for each entry in Language table*/	
+	for(i=0; i<LanguageTable.no_of_entries; i++)
+	{		/*if country matches that of entry*/
+		
+	  	if (!strcmp(country_code, LanguageTable.entries[i].country_dialling_code))
+	  	{	/*MC SPR 1150, check language fits in allowed range, rather than checking for each 
+	  		and every language (easier to add more languages this way)*/
+	  		if (LanguageTable.entries[i].language>0 && LanguageTable.entries[i].language <= NO_OF_LANGUAGES)
+	  		{	MmiRsrcSetLang(LanguageTable.entries[i].language);
+				return TRUE;
+	  		}
+  		}
+  	}
+  	/*if no matches found*/
+  	return FALSE; 		
+}
+
+/*******************************************************************************
+
+ $Function:    	
+
+ $Description:	
+ 
+ $Returns:		
+
+ $Arguments:	
+ 				
+ $History
+  GW 28/11/02 - 
+
+*******************************************************************************/
+#define NO_COLOUR_DEFINED (0x01010101)
+/***************************Go-lite Optimization changes Start***********************/
+//Aug 25, 2004    REF: CRR 24297  Deepa M.D 
+//This function is called only for Color build.
+#ifdef COLOURDISPLAY
+void init_getDataColour(int screenType, int colType, U32 *fgd, U32 *bgd)
+{
+	U32 fgColor;
+	U32 bgColor;
+	U32 fgHLColor = NO_COLOUR_DEFINED;
+	U32 bgHLColor = NO_COLOUR_DEFINED;
+	U32 fgSKColor = NO_COLOUR_DEFINED;
+	U32 bgSKColor = NO_COLOUR_DEFINED;
+	U32 fgTColor = NO_COLOUR_DEFINED;
+	U32 bgTColor = NO_COLOUR_DEFINED;
+
+	TRACE_EVENT("init_getDataColour");
+
+	switch (screenType)
+	{
+	case COLOUR_STATUS_WELCOME:	//start screen
+	case COLOUR_STATUS_GOODBYE:	//end screen
+		fgColor = 		COL_Black; 
+		bgColor = 		COL_White; 
+		fgSKColor = 	COL_Blue;
+		bgSKColor = 	COL_Yellow;
+		break;
+		
+	/* GW#2294 Use a more legible colour as default background colour.*/
+	case COLOUR_POPUP:
+	case COLOUR_STATUS:	//generic status window
+		fgColor = 		COL_Red; //0x0000FF00;
+		bgColor = 		COL_Yellow;//0x00FFFFFF;
+		fgSKColor = 	COL_Red;
+		bgSKColor = 	COL_TRANSPARENT;
+		break;
+	
+	case COLOUR_EDITOR:
+		fgTColor  = 	COL_White;
+		bgTColor  = 	COL_Blue;
+		fgColor = 		COL_Blue; // 0x00FFFF00;
+		bgColor = 		COL_Yellow;//COL_White;//0x00FFFFFF;
+		fgSKColor = 	COL_Blue;
+		bgSKColor = 	COL_PaleYellow;	//0x00FFFF00;
+		break;
+
+	case COLOUR_LIST_MAIN:
+		fgTColor  = 	COL_White;
+		bgTColor  = 	COL_BLK;
+		fgColor = 		COL_Yellow ; 
+		bgColor = 		COL_Blue;
+		fgColor = 		COL_Black ; 
+		bgColor = 		COL_White;
+		fgSKColor = 	COL_W;
+		bgSKColor = 	COL_BLK;	//0x00FFFF00;
+		bgHLColor = 	COL_MidGrey;	
+		break;
+		
+	case COLOUR_LIST_SUBMENU:
+	case COLOUR_LIST_SUBMENU1:
+	case COLOUR_LIST_SUBMENU2:
+	case COLOUR_LIST_SUBMENU3:
+	case COLOUR_LIST_SUBMENU4:
+		fgTColor  = 	COL_Blue;
+		bgTColor  = 	COL_PaleYellow;
+		fgColor = 		COL_Black ; 
+		bgColor = 		COL_White;
+		bgHLColor = 	COL_MidGrey;	
+		fgSKColor = 	COL_Blue;
+		bgSKColor = 	COL_PaleYellow;	//0x00FFFF00;
+		break;
+
+	case COLOUR_LIST_COLOUR:
+		fgColor 	=	COL_RG2; 
+		bgColor 	=	COL_W2;
+		fgSKColor 	=	COL_W; 
+		bgSKColor 	=	COL_B; 
+		fgTColor  	=	COL_RG;
+		bgTColor  	=	COL_B;
+		fgHLColor 	=	dspl_GetBgdColour();	
+		bgHLColor 	=	dspl_GetFgdColour();	
+		break;
+		
+	//Colours for specific displays
+	case COLOUR_GAME:
+		fgColor = 	COL_BLK ; 
+		bgColor = 	COL_W;
+		fgSKColor = COL_BLK ; 
+		bgSKColor = COL_Orange;
+		fgHLColor = COL_B;	
+		bgHLColor = COL_W;	
+		fgTColor  = COL_RB;
+		bgTColor  = COL_G;
+		break;
+		
+	case COLOUR_IDLE:
+		fgColor = 		COL_BLK;//Green ; 
+		bgColor = 		COL_TRANSPARENT;//White ;
+		fgSKColor = 	COL_Blue; 
+		bgSKColor =		COL_TRANSPARENT;
+		//Colours are for the icons
+		fgTColor  = 	COL_RB;
+		bgTColor  = 	COL_G;
+		break;
+		
+	case COLOUR_INCALL:
+		fgColor = 	COL_RG ; 
+		bgColor = 	COL_BLK;
+		fgSKColor = COL_B ; 	/* SPR#1699 - SH - Modified so softkeys visible */
+		bgSKColor = COL_TRANSPARENT;
+		fgHLColor = COL_B;	
+		bgHLColor = COL_W;	
+		fgTColor  = COL_RB;
+		bgTColor  = COL_G;
+		break;
+
+				
+	default:
+		fgColor = 	0x002020FF;
+		bgColor = 	COL_GR;//0x00FFFFFF;
+		fgSKColor = 	0x0000FF01;
+		bgSKColor = 	COL_GR;//0x00FF0000;
+		break;
+	}
+	
+	/*If we have no preference for the other colours - set to default*/
+	if (fgHLColor == NO_COLOUR_DEFINED) 
+		fgHLColor = bgColor;
+	if (bgHLColor == NO_COLOUR_DEFINED) 
+		bgHLColor = fgColor;
+	
+	if (fgSKColor == NO_COLOUR_DEFINED) 
+		fgSKColor = fgColor;
+	if (bgSKColor == NO_COLOUR_DEFINED) 
+		bgSKColor = bgColor;
+	if (fgTColor == NO_COLOUR_DEFINED) 
+		fgTColor = fgColor;
+	if (bgTColor == NO_COLOUR_DEFINED) 
+		bgTColor = bgColor;
+
+	switch (colType)
+	{
+	case	COL_TYPE_SCREEN:
+	default:
+			*fgd 	= fgColor;
+			*bgd 	= bgColor;
+			break;
+	case	COL_TYPE_SK:
+			*fgd 	= fgSKColor;
+			*bgd 	= bgSKColor;
+			break;
+	case	COL_TYPE_HL:
+			*fgd 	= fgHLColor;
+			*bgd 	= bgHLColor;
+			break;
+	case	COL_TYPE_TITLE:
+			*fgd 	= fgTColor;
+			*bgd 	= bgTColor;
+			break;
+	
+	}
+	if (*fgd == *bgd)
+	{
+		if (*fgd != COL_B)
+			*fgd = COL_B;
+	}
+}
+#endif
+/***************************Go-lite Optimization changes end***********************/
+//This array will be used to store all the colour info for each colour type. 
+//This will allow us to let the user change the colour selected
+/*******************************************************************************
+
+ $Function:    	
+
+ $Description:	
+ 
+ $Returns:		
+
+ $Arguments:	
+ 				
+ $History
+
+*******************************************************************************/
+
+/***************************Go-lite Optimization changes Start***********************/
+//Aug 25, 2004    REF: CRR 24904   Deepa M.D
+//This function is used only for the Color build.Hence it is put under the 
+//COLOURDISPLAY compiler switch
+#ifdef COLOURDISPLAY
+void setDataColour(int screenType, int colType, U32 fgdORbgd, U32 newColour)
+{
+
+	TRACE_EVENT("setDataColour");
+	
+	if ((newColour == NO_COLOUR_DEFINED) || (fgdORbgd ==NO_COL))
+		return;
+	if ((screenType < LAST_COLOUR_DEF) &&
+		(screenType >=0) &&
+		(colType < LAST_COLOUR_DEF) &&
+		(colType >=0))
+	{
+		if (fgdORbgd == FGD_COL)
+		{
+			//Do not allow transparent foreground colours
+			if ((newColour & 0xFF000000) != 0xFF000000)
+				colArray[screenType][colType].fgd = newColour;
+		}
+		else
+		{
+			colArray[screenType][colType].bgd = newColour;
+		}
+	}
+}
+#endif
+/***************************Go-lite Optimization changes Start***********************/
+
+
+/*******************************************************************************
+
+ $Function:    	
+
+ $Description:	
+ 
+ $Returns:		
+
+ $Arguments:	
+ 				
+ $History
+
+*******************************************************************************/
+void initDefaultDataColour (void)
+{
+
+	int i,j;
+
+		for (i=0; i<LAST_COLOUR_DEF;i++)
+		{
+			for (j=0; j<COL_TYPE_MAX;j++)
+			{
+				/***************************Go-lite Optimization changes Start***********************/
+				//Aug 25, 2004    REF: CRR 24297  Deepa M.D 
+				//For Go-lite build, do the initialization of the colArray with black and white.
+				//March 01, 2005    REF: ENH 29313    Deepa M.D
+				// Isolating colour build related changes from MMI LITE flag.
+				// The proper  Feature flag  COLORDISPLAY was used for all color 
+				//related changes.
+#ifdef COLOURDISPLAY 
+				init_getDataColour(i, j, &colArray[i][j].fgd, &colArray[i][j].bgd);	
+#else
+				colArray[i][j].fgd  = COL_Lite_Black;
+				colArray[i][j].bgd = COL_Lite_White;
+#endif
+				/***************************Go-lite Optimization changes end***********************/
+			}
+		}
+}
+
+void getDataColour(int screenType, int colType, U32 *fgd, U32 *bgd)
+{
+
+	
+	TRACE_EVENT_COL("getDataColour");
+	
+	if ((screenType == COLOUR_LIST_COLOUR) && (colType ==COL_TYPE_HL))
+	{
+	TRACE_EVENT_COL("new_getDataColour IF");	
+
+		*fgd	= dspl_GetBgdColour();	
+		*bgd	= dspl_GetFgdColour();	
+	}
+	else if ((screenType < LAST_COLOUR_DEF) &&
+		(screenType >=0) &&
+		(colType < COL_TYPE_MAX) &&
+		(colType >=0))
+	{
+		TRACE_EVENT_COL("new_getDataColour ELSE IF");
+		*fgd = colArray[screenType][colType].fgd;
+		*bgd = colArray[screenType][colType].bgd;
+		/***************************Go-lite Optimization changes Start***********************/
+		//Aug 25, 2004    REF: CRR 24297  Deepa M.D 
+		//Set the fgd and bgd color for Go-lite version based 
+		//on the value stored in the colArray
+		//March 01, 2005    REF: ENH 29313    Deepa M.D
+		// Isolating colour build related changes from MMI LITE flag.
+		// The proper  Feature flag  COLORDISPLAY was used for all color 
+		//related changes.
+#ifndef COLOURDISPLAY 
+		if(*fgd==COL_Lite_Black)
+			*fgd=COL_Black;
+		else
+			*fgd=COL_White;
+		if(*bgd==COL_Lite_Black)
+			*bgd=COL_Black;
+		else
+			*bgd=COL_White;
+#endif		
+		/***************************Go-lite Optimization changes end***********************/
+	}
+	else
+	{
+		TRACE_EVENT_COL("new_getDataColour ELSE");
+		*fgd = colArray[0][0].fgd;
+		*bgd = colArray[0][0].bgd;	
+	/***************************Go-lite Optimization changes Start***********************/	
+		//Aug 25, 2004    REF: CRR 24297  Deepa M.D 
+		//Set the fgd and bgd color for Go-lite version based
+		//on the value stored in the colArray
+		//March 01, 2005    REF: ENH 29313    Deepa M.D
+		// Isolating colour build related changes from MMI LITE flag.
+		// The proper  Feature flag  COLORDISPLAY was used for all color 
+		//related changes.
+#ifndef COLOURDISPLAY 
+		if(*fgd==COL_Lite_Black)
+			*fgd=COL_Black;
+		else
+			*fgd=COL_White;
+		if(*bgd==COL_Lite_Black)
+			*bgd=COL_Black;
+		else
+			*bgd=COL_White;
+#endif
+		/***************************Go-lite Optimization changes end***********************/
+TRACE_EVENT_P1("fdg color is %d",*fgd);
+		TRACE_EVENT_P1("bdg color is %d",*bgd);
+
+	}
+}
+
+/*******************************************************************************
+
+ $Function:    	
+
+ $Description:	
+ 
+ $Returns:		
+
+ $Arguments:	
+ 				
+ $History
+
+*******************************************************************************/
+static U32 oldFgdCol,oldBgdCol;
+static U32 oldmnuFgdCol,oldmnuBgdCol;
+void resources_setColour(unsigned int colIndex)
+{
+	U32 fgdColour,bgdColour;
+	getDataColour(colIndex, COL_TYPE_SCREEN, &fgdColour,  &bgdColour);
+	oldFgdCol = dspl_SetFgdColour( fgdColour);
+	oldBgdCol = dspl_SetBgdColour( bgdColour);
+	if (colIndex==0xFFFF)
+	{//disabled for the moment
+		char str[50];
+		sprintf(str,"Id=%d (%x,%x)",colIndex,fgdColour,bgdColour);
+		dspl_ScrText (0, 180, str, 0);
+	}
+}
+/*******************************************************************************
+
+ $Function:    	
+
+ $Description:	
+ 
+ $Returns:		
+
+ $Arguments:	
+ 				
+ $History
+
+*******************************************************************************/
+void resources_setSKColour(unsigned int colIndex)
+{
+	U32 fgdSKColour,bgdSKColour;
+	getDataColour(colIndex, COL_TYPE_SK, &fgdSKColour,  &bgdSKColour );
+	oldmnuFgdCol = dspl_SetFgdColour( fgdSKColour);
+	oldmnuBgdCol = dspl_SetBgdColour( bgdSKColour);
+}
+/*******************************************************************************
+
+ $Function:    	
+
+ $Description:	
+ 
+ $Returns:		
+
+ $Arguments:	
+ 				
+ $History
+
+*******************************************************************************/
+void resources_setHLColour(unsigned int colIndex)
+{
+	U32 fgdColour,bgdColour;
+#ifdef COLOURDISPLAY
+	getDataColour(colIndex, COL_TYPE_HL, &fgdColour,  &bgdColour );
+#else
+	//For b+w highlight, get fgd colour as bgd and vice versa
+	fgdColour = dspl_GetBgdColour();
+	bgdColour = dspl_GetFgdColour();
+	//If one colour is black/white, make other colour the opposite
+	if (fgdColour == COL_Black)
+		bgdColour = COL_White; 
+	else if (bgdColour == COL_Black)
+		fgdColour = COL_White; 
+	else if (fgdColour == COL_White)
+		bgdColour = COL_Black; 
+	else if (bgdColour == COL_White)
+		fgdColour = COL_Black;
+	else
+	{	//Default : assume the rest of the display is black on white=> highlight is white on black.
+		fgdColour = COL_White;
+		bgdColour = COL_Black; 	
+	}
+
+#endif
+	oldmnuFgdCol = dspl_SetFgdColour( fgdColour);
+	oldmnuBgdCol = dspl_SetBgdColour( bgdColour);
+}
+/*******************************************************************************
+
+ $Function:    	
+
+ $Description:	
+ 
+ $Returns:		
+
+ $Arguments:	
+ 				
+ $History
+
+*******************************************************************************/
+void resources_setTitleColour(unsigned int colIndex)
+{
+	U32 fgdColour,bgdColour;
+	getDataColour(colIndex, COL_TYPE_TITLE, &fgdColour,  &bgdColour );
+	oldmnuFgdCol = dspl_SetFgdColour( fgdColour);
+	oldmnuBgdCol = dspl_SetBgdColour( bgdColour);
+}
+/*******************************************************************************
+
+ $Function:    	
+
+ $Description:	
+ 
+ $Returns:		
+
+ $Arguments:	
+ 				
+ $History
+
+*******************************************************************************/
+void resources_restoreColour(void)
+{
+	dspl_SetFgdColour( oldFgdCol);
+	dspl_SetBgdColour( oldBgdCol);
+}
+/*******************************************************************************
+
+ $Function:    	
+
+ $Description:	
+ 
+ $Returns:		
+
+ $Arguments:	
+ 				
+ $History
+  GW 28/11/02 - 
+
+*******************************************************************************/
+void resources_restoreMnuColour(void)
+{
+	dspl_SetFgdColour( oldmnuFgdCol);
+	dspl_SetBgdColour( oldmnuBgdCol);
+}
+
+
+/*******************************************************************************
+
+ $Function:    	
+
+ $Description:	
+ 
+ $Returns:		
+
+ $Arguments:	
+ 				
+ $History
+  GW 28/11/02 - 
+
+*******************************************************************************/
+void getDisplayData(int txtId,int *colDisplayType, int *colType, int *colFgdSelect)
+{
+	*colFgdSelect = NO_COL;
+
+/**/
+	switch (txtId)
+	{
+
+default:	
+				*colFgdSelect = NO_COL;	
+				break;
+
+case    TxtIdleScreenBackground:	
+				*colDisplayType = 	COLOUR_IDLE;
+				*colType = 			COL_TYPE_SCREEN;
+				*colFgdSelect = 	BGD_COL;
+				break;								
+case	TxtIdleScreenSoftKey:
+				*colDisplayType = 	COLOUR_IDLE;
+				*colType = 			COL_TYPE_SK;
+				*colFgdSelect = 	FGD_COL;
+				break;								
+case	TxtIdleScreenText:
+				*colDisplayType = 	COLOUR_IDLE;
+				*colType = 			COL_TYPE_SCREEN;
+				*colFgdSelect = 	FGD_COL;
+				break;								
+case	TxtIdleScreenNetworkName:  
+				*colDisplayType = 	COLOUR_IDLE;
+				*colType = 			COL_TYPE_SCREEN;
+				*colFgdSelect = 	FGD_COL;
+				break;								
+case	TxtGeneralBackground:		
+				*colDisplayType = 	COLOUR_LIST_MAIN;
+				*colType = 			COL_TYPE_SCREEN;
+				*colFgdSelect = 	BGD_COL;
+				break;								
+case	TxtMenuSoftKeyForeground: 
+				*colDisplayType = 	COLOUR_LIST_MAIN;
+				*colType = 			COL_TYPE_SK;
+				*colFgdSelect = 	FGD_COL;
+				break;								
+case	TxtMenuSoftKeyBackground:  	
+				*colDisplayType = 	COLOUR_LIST_MAIN;
+				*colType = 			COL_TYPE_SK;
+				*colFgdSelect = 	BGD_COL;
+				break;								
+case	TxtSubMenuHeadingText:  	
+				*colDisplayType = 	COLOUR_LIST_SUBMENU;
+				*colType = 			COL_TYPE_TITLE;
+				*colFgdSelect = 	FGD_COL;
+				break;								
+
+case	TxtSubMenuHeadingBackground:  
+				*colDisplayType = 	COLOUR_LIST_SUBMENU;
+				*colType = 			COL_TYPE_TITLE;
+				*colFgdSelect = 	BGD_COL;
+				break;								
+case	TxtSubMenuTextForeground:  	
+				*colDisplayType = 	COLOUR_LIST_SUBMENU;
+				*colType = 			COL_TYPE_SCREEN;
+				*colFgdSelect = 	FGD_COL;
+				break;								
+
+case	TxtSubMenuTextBackground:  	
+				*colDisplayType = 	COLOUR_LIST_SUBMENU;
+				*colType = 			COL_TYPE_SCREEN;
+				*colFgdSelect = 	BGD_COL;
+				break;								
+case	TxtSubMenuSelectionBar:  	
+				*colDisplayType = 	COLOUR_LIST_SUBMENU;
+				*colType = 			COL_TYPE_HL;
+				*colFgdSelect = 	BGD_COL;
+				break;								
+case	TxtPopUpTextForeground: /* GW#2294 COLOUR_STATUS has been used for all popups - change this colour instead of COLOUR_POPUP .*/
+				*colDisplayType = 	COLOUR_STATUS;
+				*colType = 			COL_TYPE_SCREEN;
+				*colFgdSelect = 	FGD_COL;
+				break;								
+case	TxtPopUpTextBackground: /* GW#2294 COLOUR_STATUS has been used for all popups - change this colour instead of COLOUR_POPUP .*/
+				*colDisplayType = 	COLOUR_STATUS;
+				*colType = 			COL_TYPE_SCREEN;
+				*colFgdSelect = 	BGD_COL;
+				break;								
+		}
+/**/
+}
+/*******************************************************************************
+
+ $Function:    	
+
+ $Description:	
+ 
+ $Returns:		
+
+ $Arguments:	
+ 				
+ $History
+
+*******************************************************************************/
+//This is called to set the colour of menu items controlled by the text id's
+int resources_getColourFromText(int txtId)
+{
+	U32 col;
+	switch (txtId)
+	{
+case	TxtColourBlack:			col = COL_Black;		break;
+case	TxtColourBlue:			col = COL_Blue;			break;
+case	TxtColourCyan:			col = COL_Cyan;			break;
+case	TxtColourGreen:			col = COL_Green;		break;
+case	TxtColourMagenta:		col = COL_Magenta;		break;
+case	TxtColourYellow:		col = COL_Yellow;		break;
+case	TxtColourRed:			col = COL_Red;			break;
+case	TxtColourWhite:			col = COL_White;		break;
+case	TxtColourPink:			col = COL_Pink;			break;//	0x00FF4040;		break;
+case	TxtColourOrange:		col = COL_Orange;		break;
+case	TxtColourLightBlue:		col = COL_LightBlue;	break;//	0x004040FF;	break;
+case	TxtColourLightGreen: 	col = COL_LightGreen;	break;//	0x0040FF40;	break;
+case	TxtColourPaleYellow:	col = COL_PaleYellow;	break;//	0x00FFFF40;	break;
+case	TxtColourTransparent:	col = COL_Transparent;	break;
+default:	col = NO_COLOUR_DEFINED;
+		}
+	return (col);
+}
+
+
+
+/*******************************************************************************
+
+ $Function:    	
+
+ $Description:	
+ 
+ $Returns:		
+
+ $Arguments:	
+ 				
+ $History
+  GW 28/11/02 - 
+
+*******************************************************************************/
+void resources_setColourMnuItem( int txtId)
+{
+U32 col = NO_COLOUR_DEFINED;
+int colType;
+int colFgdSelect = FALSE;
+int colDisplayType;
+U32 fgd,bgd;
+
+	col = resources_getColourFromText(txtId);
+	if (col == NO_COLOUR_DEFINED)
+	{
+		getDisplayData(txtId, &colDisplayType, &colType,&colFgdSelect);
+		getDataColour(colDisplayType, colType, &fgd, &bgd);
+		switch (colFgdSelect)
+		{
+				case FGD_COL:	col = fgd;	break;
+				case BGD_COL:	col = bgd;	break;
+				default:					break;
+		}
+	}
+	if (col != NO_COLOUR_DEFINED)
+	{
+		if (col!=COL_Transparent)
+		{
+			dspl_SetFgdColour( col );
+			dspl_SetBgdColour( (~col) & 0x00FFFFFF );
+		}
+		else
+		{
+			dspl_SetFgdColour( COL_Black );
+			dspl_SetBgdColour( COL_Magenta );
+			
+		}
+	}		
+}
+
+
+
+/*******************************************************************************
+
+ $Function:    	
+
+ $Description:	
+ 
+ $Returns:		
+
+ $Arguments:	
+ 				
+ $History
+
+*******************************************************************************/
+int res_getTitleHeight( void )
+{
+	if (Mmi_getCurrentLanguage() != CHINESE_LANGUAGE)
+	{
+		return(TITLE_HEIGHT_LATIN);
+	}
+	else
+	{
+		return(TITLE_HEIGHT_CHINESE);
+	}
+}
+/*Function added for SPr 1442*/
+/*******************************************************************************
+ $Function:    	string_len_in_bytes
+
+ $Description:	internal function which returns th length of a string in bytes
+
+ $Returns:		length of string
+
+ $Arguments:	string, maximum possibel length, whether unicode or not
+ 
+*******************************************************************************/
+int string_len_in_bytes(char* string, int max_len, int unicode)
+{	int i;
+	int length=0;
+	/* if unicode, nee to check for double-NULL termination*/
+	if (string[0] == 0x80 || unicode== TRUE)
+	{
+		for(i=0; i < max_len; i+=2)
+		{	if (string[i] == 0 && string[i+1]==0)
+			{	length = i;
+				break;
+			}
+		}
+		return length;
+
+	}
+
+	else/*just use standard function*/
+	{	return strlen(string);
+	}
+
+}
+
+#ifdef LSCREEN
+#define TRUNC_LENGTH 3 /*... at end of string in D-sample*/
+#else
+#define TRUNC_LENGTH 1/* . at end of string in c-sample*/
+#endif
+
+/*Function added for SPr 1442*/
+/*******************************************************************************
+ $Function:    	resources_truncate_to_screen_width
+
+ $Description:	Copies and truncates the input string to the passed screen width 
+ 				and puts it into the output string.
+ 				Note: this function only works for Unicode strings which have a unicode
+ 				tag at the beginning, or if the unicode parameter is set to TRUE.  
+ 				If the input length is zero, then this function calculates 
+ 				the actual length of the input string.
+
+ $Returns:		length of truncated string
+
+ $Arguments:	input sctring and it's length, ouput string and it's length, 
+ 				screen width desired (pixels), unicode flag (TRUE/FALSE)
+ 
+*******************************************************************************/
+//GW #1541 16/01/03 - Modified code to first test if string will fit and return string if it does. 
+int resources_truncate_to_screen_width(char* IpStr, int IpLen, char* OpStr, int OpLen,
+	int ScreenWidth, BOOL unicode)
+
+{	
+	int start_position = 0;
+	#ifdef LSCREEN
+	char* ellipse_str = "...";
+	#else
+	char* ellipse_str = ".";
+	#endif
+	int ellipsis_len = dspl_GetTextExtent(ellipse_str, 0);
+	int i;
+	int j;
+	int calc_input_len = 0;
+	int no_of_chars = 0;
+	
+	memset(OpStr, 0, OpLen);
+
+	/*if input string length 0, we calculate the string len ourselves*/
+	if (IpLen == 0)
+	{ calc_input_len = string_len_in_bytes(IpStr, 256, unicode);
+	}
+	else
+	{	calc_input_len = IpLen;
+	}	/*Test for string alrady fitting */
+	
+	if (dspl_GetTextExtent(IpStr, 0) <  ScreenWidth)
+	{
+		for (i=0; i<OpLen && i<calc_input_len; )
+		{	//if length of string less that width of screen
+			//if unicode copy two chars
+			if (IpStr[0] == 0x80 || unicode == TRUE)
+			{	
+				OpStr[i] = IpStr[i];
+				OpStr[i+1] = IpStr[i+1];
+				i+=2;
+			}
+			else
+			{	OpStr[i] = IpStr[i];
+				i++;
+			}
+		}
+		return string_len_in_bytes(OpStr, OpLen, unicode);		
+	}
+	/*SPR 1541, use function dspl_GetNcharToFit rather than loop to work 
+	out how many chars will fit in line*/
+	no_of_chars = dspl_GetNcharToFit (IpStr,  ScreenWidth - ellipsis_len);
+	/*copy characters*/
+	if (no_of_chars < OpLen)
+		memcpy(OpStr, IpStr, no_of_chars);
+	else
+		memcpy(OpStr, IpStr, OpLen);
+		
+	/*SPR 1541, end*/
+	TRACE_EVENT_P1("trunc string len:%d", dspl_GetTextExtent(OpStr, 0));
+	/*we need to add the ellipsis if we've truncated the string*/
+	if(string_len_in_bytes(OpStr, OpLen, unicode) < calc_input_len)
+	{	/*if unicode*/
+		if (OpStr[0] == 0x80|| unicode == TRUE) 
+		{	
+			if (string_len_in_bytes(OpStr, OpLen, TRUE) < (OpLen -2*TRUNC_LENGTH+2))
+			{  start_position = string_len_in_bytes(OpStr, OpLen, unicode);
+			}
+			else
+			{	start_position = OpLen - 2*TRUNC_LENGTH+2;}
+		TRACE_EVENT_P1("Adding chars at %d", start_position);
+			for(j=start_position; j < start_position+2*TRUNC_LENGTH; j+=2)
+			{ 	OpStr[j] = 0;
+				OpStr[j + 1] = '.';
+			}
+			/*add NULL termination*/
+			OpStr[start_position+ 2*TRUNC_LENGTH] = NULL;
+			OpStr[start_position+ 2*TRUNC_LENGTH+1] = NULL;
+		}
+		else  /*if ASCII*/
+		{	if (strlen(OpStr) < (OpLen -(TRUNC_LENGTH+1)))
+			{  start_position = string_len_in_bytes(OpStr, OpLen, FALSE);
+			}
+			else
+			{	start_position = OpLen - TRUNC_LENGTH;}
+			memcpy(&OpStr[start_position], ellipse_str, TRUNC_LENGTH);
+
+		}
+	}
+
+TRACE_EVENT_P1("trunc string len post ellipsis:%d", dspl_GetTextExtent(OpStr, 0));
+	
+	return string_len_in_bytes(OpStr, OpLen, unicode);
+
+}
+
+/*******************************************************************************
+
+ $Function:    	
+
+ $Description:	
+ 
+ $Returns:		
+
+ $Arguments:	
+ 				
+ $History
+  GW 28/11/02 - 
+
+*******************************************************************************/
+/***************************Go-lite Optimization changes Start***********************/
+//Aug 25, 2004    REF: CRR 24904   Deepa M.D
+//This function is used only for the Color build.Hence it is put under the 
+//COLOURDISPLAY compiler switch
+#ifdef COLOURDISPLAY
+int colMenuSelected(MfwMnu* mnu, MfwMnuItem* mnuItem)
+{
+	T_MFW_HND win = mfw_parent(mfw_header());
+	int mnuId;
+	int colDisplayType;
+	int colType;
+	int colFgdSelect = FALSE;
+	int mnuColour;
+	int storedMenuId;
+
+	//GW Read the stored menu Id from generic procedure
+	storedMenuId = MmiBook_getStoredOption();
+	mnuId = (int)mnuItem->str;
+
+	mnuColour=resources_getColourFromText(mnuId);
+
+	getDisplayData(storedMenuId, &colDisplayType, &colType,&colFgdSelect);
+	
+	setDataColour(colDisplayType, colType, colFgdSelect,mnuColour);
+
+	info_screen(win, TxtColour, TxtSelected, 0);
+
+	// API/GW - Saved the selected colour so the flash file structure after selected
+	flash_data_write(colourFileDir, colourFileName, colArray, sizeof(colArray));
+	
+	return(0);
+}
+
+#endif 
+/***************************Go-lite Optimization changes Start***********************/
+
+
+/*******************************************************************************
+ $Function:    	set_SIMToolkit_title_string
+
+ $Description:	Changes the value of the SAT main menu entry title.
+
+ $Returns:		
+
+ $Arguments:	New SAT Title.
+ 
+*******************************************************************************/
+
+
+void res_set_SIMToolkit_title_string(char* SAT_string)
+{
+    SIMToolKitString = SAT_string;        
+}
+
+/*API - 27/07/03 - CQ10203 - New function to reset the SMS VP in flash on factory reset*/
+/*******************************************************************************
+ $Function:    	resetSMSValidityPeriod
+
+ $Description:	Resets the value of the SMS VP in flash
+ 
+ $Returns:		
+
+ $Arguments:	None
+ 
+*******************************************************************************/
+void resetSMSValidityPeriod()
+{
+	T_MFW_SMS_INFO sms_settings;  
+	
+	TRACE_EVENT("resetSMSValidityPeriod()");
+
+	if ( FFS_flashData.vp_rel != VP_REL_24_HOURS)
+		FFS_flashData.vp_rel = VP_REL_24_HOURS;
+
+	/*NDH - 13/01/04 - CQ16753 - Propogate the Validity Period Settings to the ACI */
+	sms_settings.vp_rel = FFS_flashData.vp_rel;
+
+#ifdef NEPTUNE_BOARD
+	//(void)sms_set_val_period(&sms_settings); /* NEPTUNE: Sumit: temp comment */
+#else
+	(void)sms_set_val_period(&sms_settings);
+#endif
+	/*NDH - 13/01/04 - CQ16753 - END */
+
+}
+/*API - CQ10203 - END*/
+/*******************************************************************************
+                                                                              
+                                End of File
+                                                                              
+*******************************************************************************/
+