changeset 38:d40d3fcff946

gdi display.c: converted to UNIX line endings before editing
author Mychaela Falconia <falcon@ivan.Harhan.ORG>
date Thu, 05 Nov 2015 00:49:23 +0000
parents 783f658a3d07
children acba9be2fc15
files g23m/condat/com/src/driver/display.c
diffstat 1 files changed, 5222 insertions(+), 5222 deletions(-) [+]
line wrap: on
line diff
--- a/g23m/condat/com/src/driver/display.c	Thu Nov 05 00:46:18 2015 +0000
+++ b/g23m/condat/com/src/driver/display.c	Thu Nov 05 00:49:23 2015 +0000
@@ -1,5222 +1,5222 @@
-/*
-+-----------------------------------------------------------------------------
-|  Project :
-|  Modul   :  display.c
-+-----------------------------------------------------------------------------
-|  Copyright 2002 Texas Instruments Berlin, AG
-|                 All rights reserved.
-|
-|                 This file is confidential and a trade secret of Texas
-|                 Instruments Berlin, AG
-|                 The receipt of or possession of this file does not convey
-|                 any rights to reproduce or disclose its contents or to
-|                 manufacture, use, or sell anything it may describe, in
-|                 whole, or in part, without the specific written consent of
-|                 Texas Instruments Berlin, AG.
-+-----------------------------------------------------------------------------
-|  Purpose :
-+-----------------------------------------------------------------------------
-*/
-/*
-    Nov 04, 2005 DR: OMAPS00052595
-	Description: Simulation build fails for Locosto
-	Solution	: This function is not being used for the simulation build hence
-		the contents of the same are put under the compiler flag #ifndef WIN32
-
-
-	Nov 02, 2005 DR: OMAPS00051051 - xpradipg
-	Description:The display is cluttered when the camera is in the viewfinder 
-			    mode for a long time
-	Solution: The check for requested state and current state is moved before
-			the assignment of the current state with the requested state.
-	
-	Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg
-	Description: Locosto: MIgration to New LCD APIs
-	Solution: Migrated to New APIs by replacing the old driver APIs with
-	corresponding New LCD APIs
-       xrashmic 22 Aug, 2004 MMI-SPR-32798
-       Adding the support for screen capture using a dynamically assigned key.
-   
-	July 1, 2005 REF: CRR 32677 - xpradipg
-	Description: Alignmnet of the display for each row. Send the un negated value to LCD driver
-	Solution: The alignment of the display is corrected by decreasing the number of columns by 1.
-			The negated value is corrected and sent to the driver
-
-	June 03, 2005 REF: GSM-ENH-31636 xpradipg
-	Description:	Change the board ID for Isample to 71 and add new defination
-					for the CALLISTO with baord ID 70
-	Solution:		Add the definition of ALLISTO with board ID 70 and change the
-					board Id to 71 for Isample
-   
-	Mar 30, 2005	REF: CRR 29986	xpradipg
-	Description: Optimisation 1: Removal of unused variables and dynamically
-	allocate/ deallocate mbndata
-	Solution: removed the unused variable pictureCopy_col and the static 
-	qualifier so as to be accessed by the ATB module
-
-
-	CRR 28825:  xpradipg - 11 Feb 2005
-	Description:Extension of GDI-for display of ISample and code cleanup
-	Solution: The code replication for D_Sample and E_sample are removed and a 
-	new	flag is added for the ISample. currently the BOARD ID is set to 70 for
-	CALLISTO and 71 for ISample.
-
-GW 31/01/03 -	Added support for 16 bit LCD buffer -
-					Split DSAMPLE_COLOUR code into DSAMPLE_COLOUR32 (original 32bits/pixel)
-					and DSAMPLE_COLOUR16 (16 bits/pixel - untested)
-				Removed CSAMPLE_COLOUR option
-				Removed 'PLOT' option for D-sample - too slow to be useful
-
-*/
-
-#ifndef DRV_DSPL_C
-#define DRV_DSPL_C
-#endif
-
-/*==== INCLUDES ===================================================*/
-#define ENTITY_CST
-
-#include <string.h>
-#if defined (WIN32)
-#include <stdio.h>
-#endif
-
-#include "typedefs.h"
-#include "gdi.h"
-#include "dspl.h"
-#include "font_bitmaps.h"
-#include "vsi.h"
-#include "custom.h"
-#include "gsm.h"
-#include "prim.h"
-#include "p_mmi.h"
-#include "tok.h"
-#include "cst/cst.h"
-#include "os.h"
-
-#include "rvf/rvf_api.h"
-
-#undef R2D_ENABLED
-#ifndef _SIMULATION_
-
-#if (defined(_TARGET_) && (BOARD!=10) && (BOARD!=34)&& (BOARD!=35)&& (BOARD!=46) && (BOARD !=70) && (BOARD != 71))
-/*
- * R2D is not supported by EP2 module (BOARD == 10, of customer 6351/36)
- * and by Avenger2/Perseus1 board (BOARD == 34). (dbachran / 2002-11-27)
- * and by P2 board (BOARD == 35) and F-sample (BOARD == 46) (rsauer / 2004-05-27)
- */
-#define R2D_ENABLED
-#endif
-#endif
-#ifdef FF_MMI_NEW_LCD_API_MIG
-#include "lcd_manager.h"
-#endif
-#ifndef _SIMULATION_
-    #ifdef R2D_ENABLED
-        #include "r2d/r2d.h"
-        #include "r2d/r2d_config.h"
-    #endif
-#endif
-/* GW enable/disable trace using the MMI */
-/* NB. Traces are only for diagnostics while developing and must be removed for code deliveries!*/
-/* defining mmi_trace as <empty> will remove them */
-//#define MMI_TRACE
-#define mmi_trace
-//void mmi_trace(char* str);
-/*==== EXPORT =====================================================*/
-#define ENCODE_OFFSET 24
-//define EASY_TEXT_ENABLED
-
-/************************************************************************
-* The following macros define what hardware we are running on and what 	*
-* drivers are being used to drive the display							*
-* BSAMPLE - 84x48 display												*
-* CSAMPLE - 84x48 display												*
-* CSAMPLE_COLOUR - no longer supported									*
-* DSAMPLE - 176x220 display which can be driven as 16 bit colour or b+w	*
-*      DSAMPLE_COLOUR - colour display 									*
-*           DSAMPLE_COLOUR16 - 16 bits per pixel displayed 				*
-*                              NB. This has not been tested at all - it	*
-*                              may not display correctly or may crash	*
-*                              although it does not crash when enabled 	*
-*                              with the 32bit drivers)                	*
-*                                                                       *
-*           DSAMPLE_COLOUR32 - 32 bits per pixel displayed (16 bits are	*
-*								 zero and have no effect)				*
-*      DSAMPLE_LITE - 1 bit per pixel (b+w display)                    	*
-* GW SPR#1840 25/03/03													*
-* Also, the compiler switches have been added to allow us to develop  	*
-* the MMI for a different final format (b+w/smaller display).			*
-* COLOURDISPLAY - If not defined - all output is to be b+w				*
-* LSCREEN - If not defined - screen is 'small' - use the 8x6 font 		*
-*************************************************************************/
-#if (defined(_TARGET_))
-//#if (BOARD==33)
-#if ((BOARD == 8) || (BOARD == 9))
-#define CSAMPLE
-#elif ((BOARD == 40) || (BOARD == 41))
-#define DSAMPLE
-#elif (BOARD == 43)
-#define ESAMPLE
-//June 03, 2005 REF: GSM-ENH-31636 xpradipg
-#elif (BOARD == 70)
-#define CALLISTO
-//CRR 28825:  xpradipg - 11 Feb 2005
-#elif (BOARD == 71)  // LCD enabling of ISAMPLE
-#define ISAMPLE
-#else
-//Other board type
-#define BSAMPLE
-#endif
-#else
-//_TARGET_ not defined
-//Not running on hardware - select the hw for simulation purposes.
-#define BSAMPLE
-
-//Also, if not already disabled - disable trace code
-#ifdef MMI_TRACE
-#undef MMI_TRACE
-#endif
-#endif
-//June 03, 2005 REF: GSM-ENH-31636 xpradipg
-//CRR 28825:  xpradipg - 11 Feb 2005
-#if (defined(DSAMPLE) || defined(ESAMPLE) || defined(ISAMPLE) || defined(CALLISTO))
-  /* For a start, we use exactly the same definitions for E-Sample as we do
-     for D-Sample. IMPORTANT: If the E-Sample LCD differs from D-Sample, the
-     following lines must be properly adapted!
-  */
-  #if (R2D_LCD_DISPLAY == R2D_COLOR)
-    #define DSAMPLE_COLOUR
-    #if (R2D_PIXEL_POS_TO_BIT_POS == 5)
-      #define DSAMPLE_COLOUR32
-    #endif
-    #if (R2D_PIXEL_POS_TO_BIT_POS == 4)
-      #define DSAMPLE_COLOUR16
-    #endif
-  #else
-    #define DSAMPLE_LITE
-    #undef COLOURDISPLAY
-  #endif
-#endif /* ESAMPLE */
-
-#ifdef FF_MMI_NEW_LCD_API_MIG
-	#define DSAMPLE_COLOUR
-	#if ( LCD_PIXEL_FORMAT == RGB565)
-		#define DSAMPLE_COLOUR16
-	#endif
-#endif	
-//Ensure that if the H/W does not support colour, the compiler option is overridden
-//- we can display b+w only on a colour display but not the other way round
-#ifndef DSAMPLE_COLOUR
-#ifdef COLOURDISPLAY
-#undef COLOURDISPLAY
-#endif
-#endif
-
-
-/*
-USE_PLOT -	Defined if we are to use r2d_draw_point to output a display
-			This method will always produce a display (of sorts) but can be very slow
-USE_BLIT_RECT - Defined if we provide a 24 bit colour display and allow the riviera code to
-				translate into the LCD format.
-USE_BUFFER - 	This must be defined if USE_BLIT_RECT is being used. This will require an image
-				of the colour display to be stored in local memory.
-
-If neither are defined then we must create our buffer in the same format as the LCD.
-NB if 'USE_BLIT_RECT' is not defined, any changes to the h/w or driver software will have an
-impact on the code below.
-
-*/
-
-/*==== CONSTANTS ==================================================*/
-//	Mar 30, 2005	REF: CRR 29986	xpradipg
-//	removed the static qualifier to be accessed by the ATB module.
-#ifdef FF_MMI_OPTIM
-const int translation_ascii_2_unicode[256] = {
-#else
-static const int translation_ascii_2_unicode[256] = {
-#endif
-	0x0000, 0x00A4, 0x00d8, 0xFFFF, 0x0394, 0x03A8, 0x00BF, 0x00F8, 0xFFFF, 0xFFFF, 0x000A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
-	0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
-	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026,0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
-	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
-	0x0040,0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
-	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, /* SPR#2034 - SH */
-	0xFFFF, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
-	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
-
-	0xFFFF, 0x00C7, 0x00FC, 0x00E9, 0x00E4, 0x00E0, 0x00E5, 0xFFFF, 0xFFFF, 0xFFFF, 0x00E8, 0xFFFF, 0xFFFF, 0x00EC, 0x00C4, 0x00C5, 
-	0x00C9, 0x00E6, 0x00C6, 0xFFFF, 0x00F6, 0x00F2, 0xFFFF, 0x00F9, 0xFFFF, 0x00D6, 0x00DC, 0xFFFF, 0x00A3, 0x00A5, 0xFFFF, 0xFFFF,
-	0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x00F1, 0x00D1, 0xFFFF, 0xFFFF, 0x00A7, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x00A1, 0xFFFF, 0xFFFF,
-	0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
-	0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
-	0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
-	0xFFFF, 0x00DF, 0x0393, 0x03A0, 0x03A3, 0xFFFF, 0xFFFF, 0xFFFF, 0x03A6, 0x0398, 0x03A9, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x039B, 
-	0x039E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF
-	
-	};
-/*==== VARIABLES ==================================================*/
-//EXTERN UBYTE        extDisplay;          /* external display ? */
-EXTERN UBYTE        extDisplay;          /* external display ? */
-GLOBAL UBYTE dspl_char_type;
-
-/*
- * We don't need display.c with ACI-only builds, but CST references extDisplay
- * above, so we need to keep that one for now.
- * Only process this file, if MMI is set to 1 (SMI) or 2 (BMI).
- */
-#if (MMI != 0)
-
-GLOBAL dspl_DevCaps displayData;
-#if defined (NEW_FRAME)
-EXTERN T_HANDLE       hCommL1;
-#else
-EXTERN T_VSI_CHANDLE  hCommL1;
-#endif
-
-static int scrEnabled = 0;              /* screen update enable     */
-static int txtInvert = 0;         //Text invert
-
-static T_HANDLE mmi_handle;
-static T_HANDLE hCommMMI = VSI_ERROR;
-
-/*==== FUNCTIONS ==================================================*/
-/*
- * send to external Display
- */
-LOCAL void dspl_SendDisplayReq (USHORT x, USHORT y, char *text);
-GLOBAL void kbd_test (UBYTE key);
-
-/*
- * TI driver functions
- */
-extern void LCD_SetPower        (void);
-extern void LCD_Reset           (void);
-extern void LCD_Enable          (int);
-extern void LCD_Clear           (void);
-extern void LCD_WriteString     (int y, int x, char *s);
-extern void LCD_PixBlt          (int x, int y, int w, int h, char *bmp);
-extern void LCD_DrawIcon        (int x, int y, char id);
-extern void LCD_TranslateBitmap (int w, int h, char *bo, char *bt);
-extern void LCD_Cursor          (int row, int col);
-
-GLOBAL void rt_ExtPrimitive ( USHORT TaskHandle, USHORT DestComHandle,
-                              char *ExtDest, OS_QDATA *Msg );
-/*
- * Internal Functions for Graphic Driver (Workaround)
- */
-LOCAL  void scrInit      (void);
-LOCAL  void scrExit      (void);
-LOCAL  void scrSize      (int *x, int *y);
-#if (!CUST)//JVJE #if (CUST==1)
-
-LOCAL  void scrClear     (void);
-#endif
-LOCAL  void scrClearRect (int px, int py, int sx, int sy);
-LOCAL  void scrText      (int x, int y, char *txt);
-LOCAL  void scrText_Unicode      (int x, int y, USHORT *txt);
-LOCAL  void scrLine      (int px, int py, int sx, int sy);
-LOCAL  void scrRect      (int px, int py, int sx, int sy);
-LOCAL  int  scrFntSelect (int font);
-LOCAL  int  scrFntHeight (void);
-LOCAL  int  scrFntGetFit (char *tp, int lineWidth);
-LOCAL  int  scrFntGetLen (char *tp, int nChars);
-LOCAL  int  scrBmpDraw   (int px, int py, int sx, int sy,
-                          int ix, char *bm, int mode);
-LOCAL  void scrCurType   (int type);
-LOCAL  void scrCursor    (int x, int y);
-//accessible from outside e.g 3th application MMS
-void scrPoint     (int px, int py, int col);
-LOCAL  int  scrUpdate    (int onOff);
-
-LOCAL  void scrText_Invert_Unicode (int x, int y, USHORT *txt); /*kk*/
-
-LOCAL int checkPixelColour(int px, int py, U32 col);
-LOCAL void scrLCDUpdate (void);
-
-void scrText_Invert (int x, int y, char *txt);
-
-void scrDrawFilledRect (int px, int py, int sx, int sy, U32 col);
-
-int scrGetRealLength(char *str, int* totChar, int* totPixel);
-
-LOCAL void scrUnfocusDisplay(void);
-
-
-
-
-void dspl_show_bitmap(int x, int y,t_font_bitmap* current_bitmap,U32 attr );
-
-
-
-
-GLOBAL UBYTE dspl_SetWindow(USHORT   in_X1,
-                         USHORT   in_Y1,
-                         USHORT   in_X2,
-                         USHORT   in_Y2);
-
-
-
-
-
-
-
-/*==== CONSTANTS ==================================================*/
-
-/*******************************************************************
- *                                                                 *
- * PART I: Driver Interface                                        *
- *                                                                 *
- *******************************************************************/
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : dspl_Init                  |
-+--------------------------------------------------------------------+
-
-  PURPOSE : The function initializes the driverīs internal data. The
-            function returns DRV_INITIALIZED if the driver has already
-            been initialized and is ready to be used or already in use.
-            In case of an initialization failure, which means that the
-            driver cannot be used, the function returns DRV_INITFAILURE.
-
-*/
-
-GLOBAL UBYTE dspl_Init (void)
-{
-  /*
-   * Default is character Display
-   */
-  displayData.DisplayType = DSPL_TYPE_CHARACTER;
-
-  if (!extDisplay)                /* use internal display */
-  {
-#if defined (SIMULATE_LCD)
-    LCD_Reset  ();                /* use character oriented display */
-    LCD_Enable (1);
-    LCD_Clear  ();
-  scrInit();          /* we need this also for glob vars, kk 14.02.2000*/
-#else
-    scrInit();                    /* use graphic display */
-#endif
-  }
-  else
-#if defined (SIMULATE_LCD)
-  LCD_Enable (0);
-#else
-  scrExit();
-#endif
-
-  return DRV_OK;
-}
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : dspl_Exit                  |
-+--------------------------------------------------------------------+
-
-  PURPOSE : The function is called when the driver functionality is
-            not longer needed. The function "de-allocates" all
-            allocated resources and finalizes the driver.
-
-*/
-
-GLOBAL void dspl_Exit (void)
-{
-  scrExit();
-}
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : dspl_Clear                 |
-+--------------------------------------------------------------------+
-
-  PURPOSE : This function is used to clear a specific region of the
-            display using the current background colour. The region
-            is specified by the upper left corner (X1, Y1) and the
-            lower right corner (X2, Y2) inclusive. The background
-            color can be set using dspl_SetBkgColor () function.
-
-*/
-
-GLOBAL UBYTE dspl_Clear (USHORT   in_X1,
-                         USHORT   in_Y1,
-                         USHORT   in_X2,
-                         USHORT   in_Y2)
-{
-  scrClearRect ((int)in_X1,(int)in_Y1,(int)(in_X2-in_X1+1),(int)(in_Y2-in_Y1+1));
-
-  return DRV_OK;
-}
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : dspl_Clear                 |
-+--------------------------------------------------------------------+
-
-  PURPOSE : This function is used to clear a specific region of the
-            display using the current background colour. The region
-            is specified by the upper left corner (X1, Y1) and the
-            lower right corner (X2, Y2) inclusive. The background
-            color can be set using dspl_SetBkgColor () function.
-
-*/
-
-GLOBAL UBYTE dspl_ClearAll (void)
-{
-#if (!CUST)
-  scrClear ();
-#endif
-
-  return DRV_OK;
-}
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6147)         MODULE  : SMI_WM                   |
-| STATE   : code                  ROUTINE : dspl_UnfocusDisplay      |
-+--------------------------------------------------------------------+
-
-  PURPOSE : Calls the function that will cause the entire display to appear much 
-  			darker, allowing the pop-up dialog to be more clearly the focus 
-  			especially the softkeys.
-GW #2294 23/07/03 - Created
-*/
-GLOBAL UBYTE dspl_unfocusDisplay (void)
-{
-	scrUnfocusDisplay();
-	return DRV_OK;
-}
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : dspl_Enable                |
-+--------------------------------------------------------------------+
-
-  PURPOSE : The function is used to turn the display on or off. While
-            a display is switched off, it is possible to perform any
-            drawing function.
-
-*/
-
-GLOBAL UBYTE dspl_Enable (UBYTE   in_Enable)
-{
-  return scrUpdate (in_Enable);
-}
-
-/*
-xreddymn Apr-07-2005 MMI-SPR-29655: Added function to update region
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : dspl_Enable_Region         |
-+--------------------------------------------------------------------+
-
-  PURPOSE : The function is used to update a region on the screen
-
-*/
-
-void dspl_Enable_Region(INT16 x1, INT16 y1, INT16 x2, INT16 y2)
-{
-#ifdef R2D_ENABLED
-	r2d_flush_region(x1, y1, x2, y2);
-#endif
-}
-
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : dspl_GetDeviceCaps         |
-+--------------------------------------------------------------------+
-
-  PURPOSE : This function is used to retrieve the capabilities of the
-            display device including the dimensions of the display and
-            the logical unit in which the dimensions is measured.
-
-*/
-
-GLOBAL void dspl_GetDeviceCaps (dspl_DevCaps * out_DeviceCapsPtr)
-{
-  int x,y;
-
-  scrSize (&x, &y);
-
-  out_DeviceCapsPtr->Height = (USHORT)y;
-  out_DeviceCapsPtr->Width  = (USHORT)x;
-}
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : dspl_SetDeviceCaps         |
-+--------------------------------------------------------------------+
-
-  PURPOSE : This function is used to set the capabilities of the
-            display device including the dimensions of the display and
-            the logical unit in which the dimensions is measured.
-
-*/
-
-GLOBAL void dspl_SetDeviceCaps (dspl_DevCaps * in_DeviceCapsPtr)
-{
-  displayData.DisplayType = in_DeviceCapsPtr->DisplayType;
-}
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : dspl_GetIconImage          |
-+--------------------------------------------------------------------+
-
-  PURPOSE : This function is used to copy the image of a driver
-            internal icon into an application specific icon buffer.
-            The icon may modify the icon. In case of a successful
-            completion the function returns DRV_OK. In case the
-            size of the buffer where the icon image shall be copied
-            is too small the driver returns DRV_INVALID_PARAMS. In
-            case a specific driver implementation does not support
-            this functionality the driver returns DSPL_FCT_NOTSUPPORTED.
-
-*/
-
-GLOBAL UBYTE dspl_GetIconImage (UBYTE     in_Icon,
-                                USHORT    in_Size,
-                                UBYTE   * out_IconImagePtr)
-{
-  return DSPL_FCT_NOTSUPPORTED;
-}
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : dspl_SetCursor             |
-+--------------------------------------------------------------------+
-
-  PURPOSE : This function is used to change the current cursor settings.
-            These settings include the type of cursor and the mode
-            (e.g. static cursor, not flashing). A set of standard
-            types and modes is defined.
-
-*/
-
-GLOBAL UBYTE dspl_SetCursor (UBYTE in_CursorType,
-                             UBYTE in_CursorMode)
-{
-  return DRV_OK;
-}
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : dspl_SetCursorPos          |
-+--------------------------------------------------------------------+
-
-  PURPOSE : This function is used to set the current cursor position.
-            If the function succeeds, the cursor is set to the new
-            position. If one of the values is out of range, the function
-            returns DRV_INVALID_PARAMS. The number of rows and columns
-            the display supports can be retrieved using the function
-            dspl_GetDevCaps(). The upper left corner has the coordinates
-            0,0. The values in_X and in_Y are measured in logical units
-            depending on the capabilities of the device. The means a
-            graphical display will use pixels.
-
-GW 05/09/01 Added size x and size y parameters to allow for chinese chars.
-*/
-
-GLOBAL UBYTE dspl_SetCursorPos (USHORT   in_X,
-                                USHORT   in_Y,
-                USHORT   in_SizeX,
-                USHORT   in_SizeY
-                )
-{
-  if (displayData.DisplayType EQ DSPL_TYPE_CHARACTER)
-  {
-     LCD_Cursor (in_Y, in_X);               /* set cursor position */
-     if (extDisplay)                        /* if external display */
-       dspl_SendDisplayReq (in_X, in_Y, NULL);
-  }
-  else
-     scrLine(in_X,in_Y+in_SizeY-1,in_X+in_SizeX-1,in_Y+in_SizeY-1);
-  return DRV_OK;
-}
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : dspl_ShowCursor            |
-+--------------------------------------------------------------------+
-
-  PURPOSE : This function is used to change the status of the cursor.
-            The cursor can be visible or invisible. The function returns
-            the previous status of the cursor.
-
-*/
-
-GLOBAL UBYTE dspl_ShowCursor (UBYTE in_Show)
-{
-  return DSPL_CURSOR_VISIBLE;
-}
-
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : dspl_SetBkgColor           |
-+--------------------------------------------------------------------+
-
-  PURPOSE : This function is used to change the color used for
-            background painting. If the color is out of range, the
-            driver returns DRV_INVALID_PARAMS and leaves the color
-            unchanged.
-
-*/
-
-GLOBAL UBYTE dspl_SetBkgColor (UBYTE in_Color)
-{
-  return DRV_OK;
-}
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : dspl_SetFrgColor           |
-+--------------------------------------------------------------------+
-
-  PURPOSE : This function is used to change the color used for
-            foreground painting, e.g. text color. If the color is
-            out of range, the driver returns DRV_INVALID_PARAMS and
-            leaves the color unchanged.
-            set a call-back function which
-
-*/
-
-GLOBAL UBYTE dspl_SetFrgColor (UBYTE in_Color)
-{
-  return DSPL_FCT_NOTSUPPORTED;
-}
-
-enum
-{
-	COL_TYPE_FGD =0,
-	COL_TYPE_BGD,
-	COL_TYPE_HIGHLIGHT,
-	COL_TYPE_BORDER,
-	COL_TYPE_SHADOW,
-	MAX_COL_TYPE
-};
-enum
-{
-	COL_CMD_INIT,
-	COL_CMD_GET,
-	COL_CMD_SET,
-	COL_CMD_SETSHADOW,
-	COL_CMD_RESTORECOL,
-	MAX_COL_CMD
-};
-
-//This definition allows us to have a transparent colour in 256 colour bitmaps.
-//We lose the colour nearly-black gray but I don't think it will be missed!
-//Better to lose white than gray but will require all icons to be updated!
-#define TRANSPARENT_256_COL 0x25
-
-//This definition allows us to have a transparent colour in 16bit LCD colour bitmaps.
-//We lose almost white R=0xF8 G=0xFC B=0xF8. NB word is inverted
-#define TRANSPARENT_16BIT_COL 0x0020
-
-//using ARGB format, transparent = 0xFFxxxxxx
-#define TRANSPARENT_32BIT_COLOUR 0xFF000000
-
-//Hide colours
-LOCAL U32 colour_class (int cmd, int colId, U32 inColour)
-{
-static U32 g_col[MAX_COL_TYPE];
-static U32 g_colOld[MAX_COL_TYPE];
-	switch (cmd)
-	{
-		case COL_CMD_INIT:
-			colour_class(COL_CMD_SET,	COL_TYPE_FGD,			0x00404040	);
-			colour_class(COL_CMD_SET,	COL_TYPE_BGD,			0x00FFFFFF	); //white
-			colour_class(COL_CMD_SET,	COL_TYPE_HIGHLIGHT,		0x00FF00FF	);
-			colour_class(COL_CMD_SET,	COL_TYPE_BORDER,		0x00FFFFFF	);
-			colour_class(COL_CMD_SET,	COL_TYPE_SHADOW,		0x40010101	); //50% translucency
-			return (0);
-			break;
-		case COL_CMD_SET:
-			if (inColour != 0)
-			{
-				g_colOld[colId]	=	g_col[colId];
-				g_col[colId]	=	inColour;
-			}
-			return(g_colOld[colId]);
-			break;
-		case COL_CMD_GET:
-#ifdef COLOURDISPLAY
-#ifdef DSAMPLE_COLOUR
-			return(g_col[colId]);
-#endif
-#else
-			switch (colId)
-			{
-				case COL_TYPE_FGD:			return (0x00FFFFFF);
-				case COL_TYPE_BGD:			return (0x00000000);
-				case COL_TYPE_HIGHLIGHT:	return (0x00000000);
-				case COL_TYPE_BORDER:		return (0x00000000);
-				case COL_TYPE_SHADOW:		return (0x00000000);
-				default:					return (0);
-			}
-#endif
-			break;
-		case COL_CMD_SETSHADOW:
-			g_colOld[colId]	=	g_col[colId];//currently we dont really need to save the old value
-			// set shadow to 50% black
-			g_col[colId] = 0x40010101;// | ((inColour >> 2) & 0x003F3F3F);
-			return(0x40010101);
-			break;
-		case COL_CMD_RESTORECOL:
-			g_col[colId] = g_colOld[colId];
-			return (0);
-			break;
-		default:
-			break;
-	}
-	return (0);
-}
-
-GLOBAL U32 dspl_SetFgdColour (U32 inColour)			{	return (colour_class(COL_CMD_SET,		COL_TYPE_FGD,		inColour));	}
-GLOBAL U32 dspl_SetBgdColour (U32 inColour)			{	return (colour_class(COL_CMD_SET,		COL_TYPE_BGD,		inColour));	}
-GLOBAL U32 dspl_SetHighlightColour (U32 inColour)	{	return (colour_class(COL_CMD_SET,		COL_TYPE_HIGHLIGHT,	inColour));	}
-GLOBAL U32 dspl_SetBorderColour (U32 inColour)		{	return (colour_class(COL_CMD_SET,		COL_TYPE_BORDER,  	inColour));	}
-GLOBAL U32 dspl_SetShadowColour (U32 inColour)		{	return (colour_class(COL_CMD_SETSHADOW,	COL_TYPE_SHADOW,  	inColour));	}
-
-GLOBAL U32 dspl_GetFgdColour ( void )				{	return (colour_class(COL_CMD_GET,		COL_TYPE_FGD,		0));	}
-GLOBAL U32 dspl_GetBgdColour ( void )				{	return (colour_class(COL_CMD_GET,		COL_TYPE_BGD,		0));	}
-GLOBAL U32 dspl_GetHighlightColour ( void )			{	return (colour_class(COL_CMD_GET,		COL_TYPE_HIGHLIGHT,	0));	}
-GLOBAL U32 dspl_GetBorderColour ( void )			{	return (colour_class(COL_CMD_GET,		COL_TYPE_BORDER,	0));	}
-GLOBAL U32 dspl_GetShadowColour (void)				{	return (colour_class(COL_CMD_GET,		COL_TYPE_SHADOW,  	0));	}
-
-GLOBAL void dspl_InitColour (void)
-{
-	colour_class(COL_CMD_INIT,	0,	0);
-}
-GLOBAL void dspl_RestoreColour (void)
-{
-	colour_class(COL_CMD_RESTORECOL,	COL_TYPE_FGD,	0);
-	colour_class(COL_CMD_RESTORECOL,	COL_TYPE_BGD,	0);
-}
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : dspl_DrawIcon              |
-+--------------------------------------------------------------------+
-
-  PURPOSE : This function is used to draw a driver internal icon.
-            The origin of the icon is the upper left corner, defined
-            by the parameters in_X/in_Y.
-
-*/
-
-GLOBAL UBYTE dspl_DrawIcon (UBYTE  in_IconID,
-                            USHORT in_X,
-                            USHORT in_Y)
-{
-  return DSPL_FCT_NOTSUPPORTED;
-}
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : dspl_DrawLine              |
-+--------------------------------------------------------------------+
-
-  PURPOSE : This function is used to draw a line from a specific
-            location defined by the parameters in_X1/in_Y1, to a
-            specific location defined by the parameters in_X2/in_Y2.
-            The displayīs origin is the upper left corner with the
-            co-ordinates (0,0). The function uses the current
-            foreground color, which can be set using the
-            dspl_SetFrgColor (), to draw the line.
-
-*/
-
-GLOBAL UBYTE dspl_DrawLine (USHORT in_X1,
-                            USHORT in_Y1,
-                            USHORT in_X2,
-                            USHORT in_Y2)
-{
-    scrLine(in_X1,in_Y1,in_X2,in_Y2);
-
-    return DRV_OK;
-}
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : dspl_DrawRect              |
-+--------------------------------------------------------------------+
-
-  PURPOSE : This function is used to draw a rectangle. The upper left
-            corner of the rectangle is defined by the parameters
-            in_X1/in_Y1. The lower right corner of the rectangle is
-            defined by the parameters in_X2/in_Y2.
-            The displayīs origin is the upper left corner with the
-            co-ordinates (0,0). The function uses the current
-            foreground color, which can be set using the
-            dspl_SetFrgColor (), to draw the rectangle.
-
-*/
-
-GLOBAL UBYTE dspl_roundRectFill (int px,
-                            	int  py,
-                            	int sx,
-                            	int sy,
-                            	int border)
-{
-	int i,j,col;
-	col = dspl_GetBgdColour();
-	scrDrawFilledRect(px-border,py,	sx+border*2,sy, col );
-	scrDrawFilledRect(px,py-border,	sx,sy+border*2, col );
-
-	for (i=0;i<border;i++)
-		for (j=0;j<border-i;j++)
-		{
-			scrPoint(px-i,		py-j,col);
-			scrPoint(px+sx+i,	py-j,col);
-			scrPoint(px+sx+i,	py+sy+j,col);
-			scrPoint(px-i,		py+sy+j,col);
-		}
-
-  return DRV_OK;
-}
-GLOBAL UBYTE dspl_roundRect (int px,
-                            	int  py,
-                            	int sx,
-                            	int sy,
-                            	int border)
-{
-    scrLine(px ,py-border,		px+sx,py-border);
-    scrLine(px,py+sy+border,	px+sx,py+sy+border);
-    scrLine(px-border ,py,		px-border,py+sy);
-    scrLine(px+sx+border,py,	px+sx+border,py+sy);
-
-    scrLine(px ,py-border,		px-border ,py				);
-    scrLine(px,py+sy+border,	px-border,py+sy			);
-    scrLine(px+sx,py+sy+border,	px+sx+border,py+sy			);
-    scrLine(px+sx+border,py,	px+sx,py-border		);
-
-  return DRV_OK;
-}
-
-GLOBAL UBYTE dspl_DrawRect (USHORT in_X1,
-                            USHORT in_Y1,
-                            USHORT in_X2,
-                            USHORT in_Y2)
-{
-  scrRect(in_X1,in_Y1,in_X2-in_X1,in_Y2-in_Y1);
-
-  return DRV_OK;
-}
-
-GLOBAL UBYTE dspl_DrawFilledRect (USHORT in_X1,
-								  USHORT in_Y1,
-								  USHORT in_X2,
-								  USHORT in_Y2)
-{
-  scrDrawFilledRect(in_X1,in_Y1,in_X2-in_X1,in_Y2-in_Y1, dspl_GetFgdColour() );
-  return DRV_OK;
-}
-GLOBAL UBYTE dspl_DrawFilledBgdRect (USHORT in_X1,
-								  USHORT in_Y1,
-								  USHORT in_X2,
-								  USHORT in_Y2)
-{
-  scrDrawFilledRect(in_X1,in_Y1,in_X2-in_X1,in_Y2-in_Y1, dspl_GetBgdColour() );
-  return DRV_OK;
-}
-GLOBAL UBYTE dspl_DrawFilledColRect (USHORT in_X1,
-								  USHORT in_Y1,
-								  USHORT in_X2,
-								  USHORT in_Y2,
-								  U32 Col)
-{
-  scrDrawFilledRect(in_X1,in_Y1,in_X2-in_X1,in_Y2-in_Y1, Col );
-  return DRV_OK;
-}
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : dspl_DrawEllipse           |
-+--------------------------------------------------------------------+
-
-  PURPOSE : This function is used to draw an ellipse. The center of
-            the ellipse is the center of the bounding rectangle
-            specified by the parameters.
-            The displayīs origin is the upper left corner with the
-            co-ordinates (0,0). The function uses the current
-            foreground color, which can be set using the
-            dspl_SetFrgColor (), to draw the ellipse.
-
-*/
-
-GLOBAL UBYTE dspl_DrawEllipse (USHORT in_X1,
-                               USHORT in_Y1,
-                               USHORT in_X2,
-                               USHORT in_Y2)
-{
-  return DSPL_FCT_NOTSUPPORTED;
-}
-
-
-
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : dspl_BitBlt                |
-+--------------------------------------------------------------------+
-
-  PURPOSE : This function is used to display a bitmap at the
-            specified location using the raster operation provided.
-            The bitmap format is customer specific but must include
-            the size of the bitmap.
-
-
-*/
-
-GLOBAL UBYTE dspl_BitBlt2(short in_X,
-                          short in_Y,
-                          USHORT in_Width,
-                          USHORT in_Height,
-                          void * in_BmpPtr,
-                          USHORT in_index,
-                          int bmpFormat)
-{
-	t_font_bitmap current_bitmap;
-	char *bmpPtr;
-	int bmpSize;
-	int fScale = 1;
-	int attr = SHOWBITMAP_NORMAL;
-	bmpPtr = (char *)in_BmpPtr;
-	if (bmpFormat == BMP_FORMAT_256_COLOUR)
-	{
-		bmpSize = in_Height*in_Width; //bitmaps are 256 colour
-		bmpPtr = &bmpPtr[bmpSize*in_index]; //for bitmaps that have multiple states
-	}
-	else if (bmpFormat == BMP_FORMAT_32BIT_COLOUR)
-	{
-		bmpSize = in_Height*in_Width; //bitmaps are 256 colour
-		bmpPtr = &bmpPtr[bmpSize*in_index]; //for bitmaps that have multiple states
-	}
-	else if (bmpFormat == BMP_FORMAT_16BIT_LCD_COLOUR)
-	{
-#ifdef DSAMPLE_COLOUR32
-		fastCopyBitmap(in_X,in_Y, 					// start position of bitmap
-						in_Width,	in_Height,		//size of bitmap
-						(char*)	in_BmpPtr,
-						in_X,in_Y, 					// start position of output area
-						in_Width,	in_Height,		//size of output area
-						dspl_GetBgdColour(), bmpFormat);
-		return DRV_OK;
-#else
-		bmpSize = in_Height*in_Width*4; //bitmaps are 16bit colour
-		bmpPtr = &bmpPtr[bmpSize*in_index]; //for bitmaps that have multiple states
-#endif
-	}
-	else if (bmpFormat == BMP_FORMAT_16BIT_LCD_COMPRESSED_COLOUR)
-	{
-#ifdef DSAMPLE_COLOUR16
-		fastCopyBitmap(in_X,in_Y, 					// start position of bitmap
-						in_Width,	in_Height,		//size of bitmap
-						(char*)	in_BmpPtr,
-						in_X,in_Y, 					// start position of output area
-						in_Width,	in_Height,		//size of output area
-						dspl_GetBgdColour(), bmpFormat);
-		return DRV_OK;
-#else
-		bmpSize = in_Height*in_Width*2; //bitmaps are 16bit colour
-		bmpPtr = &bmpPtr[bmpSize*in_index]; //for bitmaps that have multiple states
-#endif
-	}
-	else //b+w image
-	{
-		#ifdef MMI_TRACE
-		mmi_trace("b+w image");
-		#endif
-		if (bmpFormat == BMP_FORMAT_BW_2x4 )
-		{
-			//Temp fix to display larger b+w bitmaps (160x124)
-			attr = SHOWBITMAP_SCALE_2x4;
-			in_Width = in_Width /2;
-			in_Height = in_Height /4;
-			#ifdef MMI_TRACE
-			mmi_trace("Icontype = scale 2x4");
-			#endif
-		}
-
-		bmpSize = in_Height*((in_Width+7) >> 3); //bitmaps are unpacked
-		bmpPtr = &bmpPtr[bmpSize*in_index]; //for bitmaps that have multiple states
-
-	}
-	current_bitmap.height	= in_Height;
-	current_bitmap.width	= in_Width;
-	current_bitmap.bitmapSize = 0;// bmpSize;
-	current_bitmap.bitmap	= bmpPtr;
-	current_bitmap.format	= bmpFormat;
-	dspl_show_bitmap(in_X,in_Y, &current_bitmap, attr);
-
-  return DRV_OK;
-
-}
-
-GLOBAL UBYTE dspl_BitBlt (USHORT in_X,
-                          USHORT in_Y,
-                          USHORT in_Width,
-                          USHORT in_Height,
-                          USHORT in_Index,
-                          void * in_BmpPtr,
-                          USHORT in_Rop)
-{
-#ifdef BSAMPLE
-//Use old procedure
-  scrBmpDraw ((int)in_X, (int) in_Y, (int) in_Width,
-              (int)in_Height, (int)in_Index,
-              (char *)in_BmpPtr, (int)in_Rop);
-  return DRV_OK;
-#else
-  return (dspl_BitBlt2( (short) in_X, (short) in_Y, in_Width, in_Height, in_BmpPtr, in_Index, BMP_FORMAT_BW_UNPACKED));
-#endif
-
-}
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : dspl_SelectFontbyID        |
-+--------------------------------------------------------------------+
-
-  PURPOSE : This function is used to select a font used for
-            displaying text. Text can be displayed using the
-            functions dspl_TextOut_Cmode.
-            Driver specific fonts are identified be a font ID
-            (parameter in_Font). The definition of fonts and font
-            identifiers is not in scope of G23. Fonts and font
-            identifiers have to be defined by the customer. The
-            specific implementation of the display driver and the MMI
-            using the driver have the knowledge about the available
-            fonts, their identification and how to use them.
-
-*/
-
-GLOBAL UBYTE dspl_SelectFontbyID (UBYTE in_Font)
-{
-  return DSPL_FCT_NOTSUPPORTED;
-}
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : dspl_SelectFontbyImage     |
-+--------------------------------------------------------------------+
-
-  PURPOSE : This function is used to select a font used for
-            displaying text. Text can be displayed using the
-            functions dspl_TextOut_Cmode.
-            Application specific fonts are identified by the parameter
-            in_FontPtr, the address of the buffer containing the
-            application specific font. The structure of the font image
-            in not in the scope of G23. The structure of the font images
-            have to be defined by the customer implementing the driver.
-
-*/
-
-GLOBAL UBYTE dspl_SelectFontbyImage (UBYTE * in_FontPtr)
-{
-  return DSPL_FCT_NOTSUPPORTED;
-}
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : dspl_GetFontImage          |
-+--------------------------------------------------------------------+
-
-  PURPOSE : This function is used to copy the image of a font into an
-            application specific font buffer. The application may modify
-            the font. In case of a successful completion the function
-            returns DRV_OK. In case the size of the buffer where the
-            font image shall be copied to is too small the driver returns
-            DRV_INVALID_PARAMS. In case a specific driver implementation
-            does not support this functionality the driver returns
-            DSPL_FCT_NOTSUPPORTED.
-
-*/
-
-GLOBAL UBYTE dspl_GetFontImage (UBYTE    in_Font,
-                                USHORT   in_Size,
-                                UBYTE *  out_FontPtr)
-{
-  return DSPL_FCT_NOTSUPPORTED;
-}
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : dspl_GetFontHeight         |
-+--------------------------------------------------------------------+
-
-  PURPOSE : This function is used to retrieve the vertical size of
-            the currently selected font. The function returns the
-            height measured in logical units depending on the device
-            capabilities (e.g. pixels or multiple of characters). Call
-            the function dspl_SelectFont() to select a font.
-
-*/
-
-GLOBAL UBYTE dspl_GetFontHeight (void)
-{
-  return scrFntHeight();
-}
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : dspl_GetTextExtent         |
-+--------------------------------------------------------------------+
-
-  PURPOSE : This function is used to calculate the size of a 0-terminated
-            string, to which the parameter in_Text points. The function
-            returns the size needed to display the text. The value of
-            the size is measured in units depending on the device
-            capabilities (e.g. pixels or multiple of characters). Call
-            the function dspl_SelectFont() to select a font.
-
-*/
-
-GLOBAL USHORT dspl_GetTextExtent_old (char * in_Text, USHORT in_Length)
-{
- if (displayData.DisplayType EQ DSPL_TYPE_CHARACTER)
-   return in_Length;
- else
-   return scrFntGetLen ( in_Text, ( int ) in_Length );
-}
-
-
-GLOBAL USHORT dspl_GetTextExtent (char * in_Text, USHORT in_Length)
-{
-	int nPixel=0;
-	int nChar = in_Length;
-	if (in_Text==NULL)
-		return(0);
-
- 	if (displayData.DisplayType EQ DSPL_TYPE_CHARACTER )
-   	{
-   		return in_Length;
-   	}
-	scrGetRealLength(in_Text, &nChar, &nPixel);
-
-	return (nPixel);
-}
-
-
-
-
-
-int dspl_GetTextExtent2 (char * in_Text, USHORT in_Length)
-{
-	return (dspl_GetTextExtent ( in_Text, in_Length));
-
-}
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : dspl_GetNcharToFit         |
-+--------------------------------------------------------------------+
-
-  PURPOSE : This function is used to calculate the number of characters of the input
-  string that will fit into the specified width.
-
-*/
-/*SPR 1541, added function*/
-//Calculate number of chars that fit in the available space.
-GLOBAL USHORT dspl_GetNcharToFit (char * in_Text, USHORT pixelWidth)
-{
-        int nPixel=pixelWidth;
-        int nChar= 0;
-        if (in_Text==NULL)
-                return(0);
-
-        scrGetRealLength(in_Text, &nChar, &nPixel);
-
-        return (nChar);
-}
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : dspl_GetMaxTextLen         |
-+--------------------------------------------------------------------+
-
-  PURPOSE : This function is used to calculate the sub-string
-            (number of characters) of a 0-terminated string (in_Text)
-            that can be displayed in the region given by the parameter
-            in_HSize. The value of in_HSize is measured in logical
-            units (e.g. pixels or multiple of characters). Call
-            the function dspl_SelectFont() to select a font.
-
-*/
-
-GLOBAL USHORT dspl_GetMaxTextLen (char  * in_Text,
-                                  USHORT   in_HSize)
-{
-  if (displayData.DisplayType EQ DSPL_TYPE_CHARACTER)
-    return strlen (in_Text);
-  else
-    return scrFntGetFit ( in_Text, ( int ) in_HSize );
-}
-
-
-
-
-GLOBAL void dspl_set_char_type(UBYTE char_type){
-  dspl_char_type = char_type;
-}
-
-GLOBAL UBYTE dspl_get_char_type(void){
-  return dspl_char_type;
-}
-
-int dspl_getDisplayType( void )
-{
-//	Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg
-#if defined(FF_MMI_NEW_LCD_API_MIG) && ( defined(ISAMPLE) || defined (CALLISTO))
-	return DSPL_COLOUR;
-#endif
-#ifndef COLOURDISPLAY
-	return (DSPL_BW);
-#endif
-
-#ifdef R2D_ENABLED
-	if (R2D_LCD_DISPLAY == R2D_COLOR)
-		return (DSPL_COLOUR);
-	else
-#endif
-		return (DSPL_BW);
-}
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : dspl_TextOut_Cmode               |
-+--------------------------------------------------------------------+
-
-  PURPOSE : This function is used to display a text at the given
-            location in_X/in_Y uding the defined attributes (in_Attrib)
-            and the currently selected color (foreground and background).
-            The cursor position is left unchanged. The driver will not
-            take the displays bounding rectangle into consideration and
-            therefore text may be cut off.
-            Linefeeds and carriage returns are not supported and there-
-            fore must be handled by upper layers.
-
-GW 14/02/03 - SPR#1736 Modified code to call 'dspl_ScrText' to allow a border to be drawn
-						round chinese characters.
-
-*/
-
-
-GLOBAL UBYTE dspl_TextOut_Cmode (USHORT  in_X,
-                           USHORT  in_Y,
-                           UBYTE   in_Attrib,
-                           char * in_Text)
-{
-  int in_X_signed;
-  int in_Y_signed;
-	int txtStyle=0;
-  // SH - If we want signed coordinates (i.e. if x and y can have negative numbers)
-  // we need to convert the unsigned values into two's complement.
-
-   if (in_Attrib & DSPL_TXTATTR_SIGNED_COORDS)
-    {
-    in_X_signed = (SHORT)in_X;
-    in_Y_signed = (SHORT)in_Y;
-    }
-   else
-    {
-    in_X_signed = in_X;
-    in_Y_signed = in_Y;
-    }
-
-#if defined (WIN32)
-   if (scrEnabled)
-   {
-     if (in_Attrib & DSPL_TXTATTR_INVERS)
-     {
-       scrText_Invert(in_X, in_Y, in_Text);
-     }
-     else
-     {
-       scrText(in_X, in_Y, in_Text);
-     }
-   }
-   else
-     LCD_WriteString (in_Y, in_X, (UBYTE *) in_Text);
-#else
-   if (displayData.DisplayType EQ DSPL_TYPE_CHARACTER)
-   {
-     if (in_Attrib & DSPL_TXTATTR_INVERS)
-   	   {
-    if (dspl_char_type == DSPL_TYPE_ASCII)
-      scrText_Invert(6 * in_X + 2, 8 * in_Y, in_Text);
-    else
-      scrText_Invert_Unicode(12 * in_X + 2, 12 * in_Y,(USHORT*) in_Text);
-     }
-     else
-     {
-    if (dspl_char_type == DSPL_TYPE_ASCII)
-      scrText(6 * in_X_signed + 2, 8 * in_Y_signed, in_Text);
-    else
-      scrText_Unicode(12 * in_X_signed + 2, 12 * in_Y_signed, (USHORT*)in_Text);
-     }
-   }
-   else
-   {
-   		txtStyle = 0;
-   		if (in_Attrib & DSPL_TXTATTR_INVERS)
-   			txtStyle = TXT_STYLE_INVERT;
-   		else
-   			txtStyle = TXT_STYLE_NORMAL;
-		if (dspl_char_type != DSPL_TYPE_ASCII)
-   			txtStyle = txtStyle  | TXT_STYLE_UNICODE;
-   	 	dspl_ScrText( in_X_signed,in_Y_signed,in_Text, txtStyle);
-//      		scrText_Unicode(in_X_signed,in_Y_signed, (USHORT*)in_Text);
-
-   }
-#endif
-   /*
-    * if an external display simulation is used and switched on with the
-    * EXT_DISPLAY config primitive - send a MMI_DISPLAY_REQ primitive.
-    */
-   if (extDisplay)
-     dspl_SendDisplayReq (in_X, in_Y, in_Text);
-
-  return DRV_OK;
-}
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : dspl_TextOut                 |
-+--------------------------------------------------------------------+
-
-  PURPOSE : This function is used to display a text at the given
-            location in_X/in_Y using the defined attributes (in_Attrib)
-			It calls dspl_ScrText to actually display the text
-
-GW 14/02/03 - SPR#1736 Modified code to call 'dspl_ScrText' to allow a border to be drawn
-						round chinese characters.
-*/
-
-GLOBAL UBYTE dspl_TextOut(USHORT  in_X,
-                           USHORT  in_Y,
-                           UBYTE   in_Attrib,
-                           char * in_Text)
-{
-	UBYTE temp;
-	int in_X_signed;
-	int in_Y_signed;
-	int txtStyle=0;
-	char* op_str;
-
-	/*MC SPR 1319*/
-	if (in_Text == NULL)
-		return DRV_OK;
-	/*MC end*/
-
-	op_str = in_Text;
-
-#if defined (WIN32)
-	if (!scrEnabled)
-	{
-		LCD_WriteString (in_Y, in_X, (UBYTE *) in_Text);
-	}
-	else
-#endif
-	{
-
-		if (in_Attrib & DSPL_TXTATTR_SIGNED_COORDS)
-		{
-			in_X_signed = (SHORT)in_X;
-			in_Y_signed = (SHORT)in_Y;
-		}
-		else
-		{
-			in_X_signed = in_X;
-			in_Y_signed = in_Y;
-		}
-
-		/*Mc SPR 1526, we no longer check for current mode*/
-		if (in_Attrib & DSPL_TXTATTR_INVERS)
-			txtStyle = TXT_STYLE_INVERT;
-		else
-			txtStyle = TXT_STYLE_NORMAL;
-
-
-		if ((in_Attrib&DSPL_TXTATTR_UNICODE) || (in_Text[0] ==0x80))
-		{
-			txtStyle = txtStyle | TXT_STYLE_UNICODE;
-			if (op_str[0] ==0x80)//if unicode tag at beginning of string
-				op_str = &op_str[2];
-		}
-		if (displayData.DisplayType EQ DSPL_TYPE_CHARACTER)
-		{
-			/* the following is only accurate for a fixed-width font*/
-			if (txtStyle & TXT_STYLE_UNICODE)
-			{
-				in_X_signed = in_X_signed*12+2;
-				in_Y_signed = in_Y_signed*12;
-			}
-			else
-			{
-				in_X_signed = in_X_signed*6+2;
-				in_Y_signed = in_Y_signed*8;
-			}
-		}
-
-   	 	dspl_ScrText( in_X_signed,in_Y_signed,op_str, txtStyle);
-	}
-   /*
-    * if an external display simulation is used and switched on with the
-    * EXT_DISPLAY config primitive - send a MMI_DISPLAY_REQ primitive.
-    */
-   if (extDisplay)
-     dspl_SendDisplayReq (in_X, in_Y, in_Text);
-
-	return DRV_OK;
-}
-/**/
-
-
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : dspl_SetWorkShadow         |
-+--------------------------------------------------------------------+
-
-  PURPOSE : This function is used to define the address of the
-            shadow RAM for drawing operations.
-
-*/
-
-GLOBAL UBYTE dspl_SetWorkShadow (UBYTE * in_ShadowPtr)
-{
-  return DSPL_FCT_NOTSUPPORTED;
-}
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : dspl_SetDisplayShadow      |
-+--------------------------------------------------------------------+
-
-  PURPOSE : This function is used to define the address of the
-            shadow RAM for displaying operations.
-
-*/
-
-GLOBAL UBYTE dspl_SetDisplayShadow (UBYTE * in_ShadowPtr)
-{
-  return DSPL_FCT_NOTSUPPORTED;
-}
-
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6147)         MODULE  : SMI_WM                   |
-| STATE   : code                  ROUTINE : dspl_SendDisplayReq      |
-+--------------------------------------------------------------------+
-
-  PURPOSE : sends an MMI_DISPLAY_REQ primitive to write
-            the text at position X,Y to PL. If the parameter
-            text is NULL only the cursor position
-            should change. If in this case the X and Y value
-            is 0xffff the cursor will be hide.
-
-*/
-LOCAL void dspl_SendDisplayReq (USHORT x, USHORT y, char *text)
-{
-#ifdef NEW_FRAME
-T_QMSG Msg;
-T_VOID_STRUCT *prim;
-#endif
-
-  USHORT sdu_len = (text NEQ NULL) ? strlen (text) : 0;
-  PALLOC_SDU (mmi_display_req, MMI_DISPLAY_REQ, (USHORT)(sdu_len<<3));
-
-  mmi_display_req->c_x = x;
-  mmi_display_req->c_y = y;
-
-  if (text NEQ NULL)
-  {
-    /*
-     * text output
-     */
-    mmi_display_req->attrib.content = CON_TEXT;
-    mmi_display_req->attrib.control = CTL_NORMAL;
-    mmi_display_req->sdu.o_buf = 0;
-    mmi_display_req->sdu.l_buf = (sdu_len<<3);
-    memcpy (mmi_display_req->sdu.buf, text, sdu_len);
-  }
-  else
-  {
-    /*
-     * change the cursor position
-     */
-    mmi_display_req->attrib.content = CON_CURSOR;
-    mmi_display_req->attrib.control = ((x EQ 0xffff) ? CTL_HIDDEN : CTL_NORMAL);
-    mmi_display_req->sdu.o_buf = 0;
-    mmi_display_req->sdu.l_buf = 0;
-  }
-
-#if defined NEW_FRAME
-    if ( hCommMMI == VSI_ERROR )
-    {
-      mmi_handle = vsi_e_handle ( 0, "MMI" );
-      hCommMMI = vsi_c_open ( 0, "MMI" );
-      prim = vsi_c_pnew ( 100, 0x8000 FILE_LINE_MACRO );
-      strcpy ((char*)prim, "REDIRECT MMI 0000111000001010 PAN");
-      vsi_c_primitive ( mmi_handle, D2P(prim) );
-    }
-    PSEND(hCommMMI,mmi_display_req);
-
-#else
-    ext_primitive (D2P(mmi_display_req), "CST", "PAN",
-                   sizeof (T_PRIM_HEADER) +
-                   sizeof (T_MMI_DISPLAY_REQ) +
-                   sdu_len);
-    PFREE (mmi_display_req);
-#endif
-}
-
-GLOBAL UBYTE dspl_DrawWin (USHORT px, USHORT py, USHORT sx, USHORT sy, int format, t_font_bitmap *bgdBmp)
-{
-	USHORT x1,y1,x2,y2;
-	int xOfs,yOfs;
-
-	if (bgdBmp == NULL)
-	{
-		scrDrawFilledRect( px+3,py+3, sx, sy, 0x00010101 ); //shadow
-		scrDrawFilledRect( px,py, sx, sy, dspl_GetBgdColour() );
-
-		scrRect( px-1,py-1, sx+1, sy+1);
-	}
-	else
-	{
-		xOfs = (sx-bgdBmp->width)/2;
-		yOfs = (sy-bgdBmp->height)/2;
-
-		dspl_GetWindow(&x1,&y1,&x2,&y2 );
-
-		switch (format)
-		{
-			case DSPL_WIN_NORMAL:
-					dspl_show_bitmap(px, py, bgdBmp, SHOWBITMAP_NORMAL );
-					break;
-			case DSPL_WIN_CENTRE:
-					dspl_show_bitmap(px+xOfs, py+yOfs, bgdBmp, SHOWBITMAP_NORMAL );
-					break;
-			case DSPL_WIN_CLIP:
-					dspl_SetWindow(px,py,px+sx,px+sy );
-					dspl_show_bitmap(px, py, bgdBmp, SHOWBITMAP_NORMAL );
-					break;
-			case DSPL_WIN_CENTRE_CLIP:
-					dspl_SetWindow(px,py,px+sx,px+sy );
-					dspl_show_bitmap(px+xOfs, py+yOfs, bgdBmp, SHOWBITMAP_NORMAL );
-					break;
-			case DSPL_WIN_TILE:
-					dspl_SetWindow(px,py,px+sx,px+sy );
-					yOfs=0;
-					while(yOfs < sy)
-					{
-						xOfs=0;
-						while (xOfs < sx)
-						{
-							dspl_show_bitmap(px+xOfs, py+yOfs, bgdBmp, SHOWBITMAP_NORMAL );
-							xOfs=xOfs+bgdBmp->width;
-						}
-						yOfs=yOfs+bgdBmp->height;
-					}
-					break;
-		}
-		dspl_SetWindow(x1,y1,x2,y2 );
-	}
-
-/*	switch (format)
-	{
-		case 0:
-		default:
-		break;
-	}*/
-	return DRV_OK;
-}
-static int win_x1, win_x2, win_y1, win_y2;
-
-//Set-up area to be drawn in - limit window to the size of the screen
-//Inputs in_x1/y1 - first column/row that can be drawn on
-//		in_x2/y2 - last column/row
-//NB:-	inputs are the same as used to clear/draw rectangles BUT
-//		values stored in win_x2/y2 are +1 to ensure values are treated the same as scrX/Y
-GLOBAL UBYTE dspl_SetWindow(USHORT   in_X1,
-                         USHORT   in_Y1,
-                         USHORT   in_X2,
-                         USHORT   in_Y2)
-{
-int sizeX,sizeY;
-
-	scrSize (&sizeX, &sizeY);
-	if (in_X1>0)
-		win_x1 = in_X1;
-	else
-		win_x1 = 0;
-	if (in_Y1>0)
-		win_y1 = in_Y1;
-	else
-		win_y1 = 0;
-	if (in_X2<sizeX)
-		win_x2 = in_X2+1;
-	else
-		win_x2 = sizeX;
-	if (in_Y2<sizeY)
-		win_y2 = in_Y2+1;
-	else
-		win_y2 = sizeY;
-	return DRV_OK;
-
-}
-
-GLOBAL UBYTE dspl_ResetWindow( void )
-{
-	win_x1 = 0;
-	win_y1 = 0;
-	scrSize (&win_x2, &win_y2);
-
-	return DRV_OK;
-
-}
-
-GLOBAL UBYTE dspl_GetWindow(USHORT* x1,USHORT* y1,USHORT* x2,USHORT* y2 )
-{
-	*x1= win_x1;
-	*x2= win_x2;
-	*y1= win_y1;
-	*y2= win_y2;
-	return DRV_OK;
-	
-}
-
-
-/*******************************************************************
- *                                                                 *
- * PART II: Workaround for Graphical Displays                      *
- *                                                                 *
- *******************************************************************/
-//June 03, 2005 REF: GSM-ENH-31636 xpradipg
-//CRR 28825:  xpradipg - 11 Feb 2005
-#if (defined(DSAMPLE) || defined(ESAMPLE) || defined(ISAMPLE) || defined(CALLISTO))
-/*GW 21/02/03 - There is an unused long word at the end of each line for the new drivers for some good reason I'm sure.*/
-#ifdef DSAMPLE_COLOUR16
-#ifdef FF_MMI_NEW_LCD_API_MIG
-#define LCD_COL	(LCD_WIDTH+1)
-#else
-#define LCD_COL   (R2D_WIDTH+1)                      /* display size+32 bits    */
-#endif
-#else
-#define LCD_COL   (R2D_WIDTH)                      /* display size             */
-#endif
-#ifdef FF_MMI_NEW_LCD_API_MIG
-#define LCD_ROW (LCD_HEIGHT)
-#else
-#define LCD_ROW 	(R2D_HEIGHT)
-#endif
-#define HEADER_INFO (3)
-#define DISPLAY_SIZE (LCD_ROW*LCD_ROW_NUM_LWORDS)
-/* static char scratch [100];      *//* command buffer - does not support output of new display  */
-#ifndef DSAMPLE_LITE
-unsigned char bgdColourArray[LCD_COL*4];
-#endif
-#endif
-
-#ifdef CSAMPLE
-#define LCD_COL 84                      /* display size             */
-#define LCD_ROW 48
-#define LCD_COL_NUM_LWORDS ((LCD_ROW+31)/32) /* col size in longwords         */
-#endif //CSAMPLE
-
-#ifdef BSAMPLE
-#define LCD_COL 84                     /* display size             */
-#define LCD_COL_B ((LCD_COL+7)/8)       /* row size in byte         */
-#define LCD_ROW 48
-#define DISPL_DIV 4
-#endif
-
-/*
-LCD_ROW_NUM_LWORDS - number of long words used to store a row of pixels
-BYTEPERPIXEL - number of bytes used to store apixel on-screen
-*/
-
-#define CHECK_LIMITS /*Add bounds checks to code */
-/*******************************************************************************
- $Macro:    	DSPL_SET_BITCOLOUR
- $Description:	This macro sets the colour of the bit at the provided long word address
- $Returns:		None.
- $Arguments:	x - x position of pixel (may be unused)
- 				j - 32 bit offset within array of the pixel to be set
- 				col - colour (in LCD format) of the pixel to be set
- 				txt - debug text for traces - used if 'j' is bounds checked first.
-*******************************************************************************/
-/*******************************************************************************
- $Macro:    	DSPL_GET_LWORD
- $Description:	This macro
- $Returns:		The 32bit offset of the word containing the pixel
- $Arguments:	px - x position of pixel
- 				py - y position of pixel
-*******************************************************************************/
-/*******************************************************************************
- $Macro:    	DSPL_GET_BYTE
- $Description:	This macro
- $Returns:		The 8bit offset of the word containing the pixel
- $Arguments:	px - x position of pixel
- 				py - y position of pixel
-*******************************************************************************/
-/*******************************************************************************
- $Macro:    	DSPL_GET_BITCOLOUR
- $Description:	This macro
- $Returns:		The colour in LCD format of the RGB input
- $Arguments:	col - 32 bit RGB colour value
-*******************************************************************************/
-/*******************************************************************************
- $Macro:    	DSPL_SET_XYBIT_COLOUR
- $Description:	This macro
- $Returns:		None
- $Arguments:	x,y - posiiton of pixel to be set
- 				col - 0 =clear bixel, anything else - set pixel
- 				txt - trace for debug (if position is out-of-range)
-*******************************************************************************/
-#ifdef DSAMPLE_LITE
-#define LCD_ROW_NUM_LWORDS ((LCD_COL+31)/32) /* col size in longwords         */
-#define BYTEPERPIXEL (1/8 - unused)
-#ifdef CHECK_LIMITS
-#define DSPL_SET_BITCOLOUR(x,j,col,txt) \
-{\
-if (((j)>=0) && ((j)<DISPLAY_SIZE)) \
-{\
-	int m_px = 1 << (x & 0x1F);\
-	if (col)  picture_col[j] = picture_col[j] | (m_px);\
-	else    picture_col[j] = picture_col[j]  & (~m_px);\
-}else {mmi_trace(txt);}\
-}
-#define DSPL_SET_XYBIT_COLOUR(x,y,col,txt) \
-{\
-	int m_px = 1 << (x & 0x1F);\
-	int word = DSPL_GET_LWORD(x,y);\
-	if (((word)>=0) && ((word)<DISPLAY_SIZE)) \
-	{\
-		if (col) word = word | m_px;\
-		else word = word & (~m_px);\
-	}\
-}
-
-#else
-#define DSPL_SET_BITCOLOUR(x,j,col,txt) \
-{\
-	int m_px = 1 << (x & 0x1F);\
-	if (col) picture_col[j] = picture_col[j] | (m_px);\
-	else  picture_col[j] = picture_col[j]  & (~m_px);\
-}
-#define DSPL_SET_XYBIT_COLOUR(x,y,col,txt) \
-{\
-	int m_px = 1 << (x & 0x1F);\
-	int word = DSPL_GET_LWORD(x,y);\
-	if (col) word = word | m_px;\
-	else word = word & (~m_px);\
-}
-
-#endif
-#define DSPL_GET_LWORD(px,py) ((py)*LCD_ROW_NUM_LWORDS + ((px)/32))
-#define DSPL_GET_BYTE(px,py) (((py)*4)*LCD_ROW_NUM_LWORDS + ((px)/8))
-#define DSPL_GET_BITCOLOUR(col32) (not used!)
-#define DSPL_GET_PIXELCOLOUR(col32) (not used!)
-#endif //DSAMPLE_LITE
-
-
-
-
-#ifdef DSAMPLE_COLOUR32
-#define LCD_ROW_NUM_LWORDS (LCD_COL) /* col size in longwords         */
-#define BYTEPERPIXEL 4
-#ifdef CHECK_LIMITS
-//safe version-includes trace for errors
-#define DSPL_SET_BITCOLOUR(x,j,col,txt) {if (((j)>=0) && ((j)<DISPLAY_SIZE)) picture_col[j] = (col); else {mmi_trace(txt);}}
-#else
-#define DSPL_SET_BITCOLOUR(x,j,col,txt) {picture_col[j] = (col);}//faster version - no bounds check
-#endif
-#define DSPL_GET_LWORD(px,py) ((py)*LCD_ROW_NUM_LWORDS + (px))
-#define DSPL_GET_BYTE(px,py) (((py)*4)*LCD_ROW_NUM_LWORDS + ((px)*4))
-#define DSPL_GET_BITCOLOUR(col32) (~(((((col32) &0x00F80000)  >> 8) | (((col32) &0x0000FC00)	>> 5) | (((col32) &0x000000F8)	>> 3))))
-#define DSPL_GET_PIXELCOLOUR(col32) (((((col32)<<8) &0x00F80000) | (((col32)<<5) &0x0000FC00) | (((col32)<<3) &0x000000F8)))
-#endif
-
-#ifdef DSAMPLE_COLOUR16
-//	July 1, 2005 REF: CRR 32677 - xpradipg
-//	the extra word padding is not required for the ISAMPLE AND CALLISTO
-#if (defined(ISAMPLE) || defined(CALLISTO))
-#define LCD_ROW_NUM_LWORDS ((LCD_COL)/2) /* col size in longwords         */
-#else
-#define LCD_ROW_NUM_LWORDS ((LCD_COL+1)/2) /* col size in longwords         */
-#endif
-#define BYTEPERPIXEL 2
-#ifdef PIXEL_0_IN_LSW
-#ifdef CHECK_LIMITS
-#define DSPL_SET_BITCOLOUR(x,j,col,txt) \
-{\
-if (((j)>=0) && ((j)<DISPLAY_SIZE)) \
-{	if ((x)&0x01)\
-		picture_col[j] = (picture_col[j] & 0xFFFF0000) | (col & 0x0000FFFF);\
-	else\
-		picture_col[j] = (picture_col[j] & 0x0000FFFF) | ((col <<16) & 0xFFFF0000);\
-}else {mmi_trace(txt);}\
-}
-#else
-#define DSPL_SET_BITCOLOUR(x,j,col,txt) \
-{	if ((x)&0x01)\
-		picture_col[j] = (picture_col[j] & 0xFFFF0000) | (col & 0x0000FFFF);\
-	else\
-		picture_col[j] = (picture_col[j] & 0x0000FFFF) | ((col <<16) & 0xFFFF0000);\
-}
-#endif
-#else
-#ifdef CHECK_LIMITS
-#define DSPL_SET_BITCOLOUR(x,j,col,txt) \
-{\
-if (((j)>=0) && ((j)<DISPLAY_SIZE)) \
-{	if ((x)&0x01)\
-		picture_col[j] = (picture_col[j] & 0x0000FFFF) | ((col <<16) & 0xFFFF0000);\
-	else\
-		picture_col[j] = (picture_col[j] & 0xFFFF0000) | (col & 0x0000FFFF);\
-}else {mmi_trace(txt);}\
-}
-#else
-#define DSPL_SET_BITCOLOUR(x,j,col,txt) \
-{	if ((x)&0x01)\
-		picture_col[j] = (picture_col[j] & 0x0000FFFF) | ((col <<16) & 0xFFFF0000);\
-	else\
-		picture_col[j] = (picture_col[j] & 0xFFFF0000) | (col & 0x0000FFFF);\
-}
-#endif
-
-#endif
-//GW Added () round 'px' in definition below
-#define DSPL_GET_LWORD(px,py) ((py)*LCD_ROW_NUM_LWORDS + ((px)/2))
-#define DSPL_GET_BYTE(px,py) (((py)*4)*LCD_ROW_NUM_LWORDS + ((px)*2))
-//	July 1, 2005 REF: CRR 32677 - xpradipg
-//	the value is not negated here since the LCD driver expects without negation
-#if (defined(ISAMPLE) || defined(CALLISTO))
-#define DSPL_GET_BITCOLOUR(col32) (((((col32) &0x00F80000)  >> 8) | (((col32) &0x0000FC00)	>> 5) | (((col32) &0x000000F8)	>> 3)))
-#else
-#define DSPL_GET_BITCOLOUR(col32) (~(((((col32) &0x00F80000)  >> 8) | (((col32) &0x0000FC00)	>> 5) | (((col32) &0x000000F8)	>> 3))))
-#endif
-#define DSPL_GET_PIXELCOLOUR(col32) (((((col32)<<8) &0x00F80000) | (((col32)<<5) &0x0000FC00) | (((col32)<<3) &0x000000F8)))
-#endif
-
-// 3 words of header info for 'pictures'
-#ifdef DSAMPLE_LITE
-static UINT32*  picture_bw    = NULL;//Pointer to data in display.
-static UINT32*  pictureCopy_bw= NULL;//Pointer to data in display.
-#endif//DSAMPLE_LITE
-
-#ifdef DSAMPLE_COLOUR
-static UINT32*  picture_col    = NULL;//Pointer to data in display.
-//	Mar 30, 2005	REF: CRR 29986	xpradipg
-//	removed the unused variable
-#ifndef FF_MMI_OPTIM
-static UINT32*  pictureCopy_col= NULL;//Pointer to data in display.
-#endif
-#endif
-
-#ifdef CSAMPLE
-#define HEADER_INFO (3)
-#define DISPLAY_SIZE (LCD_COL*LCD_COL_NUM_LWORDS)
-static UINT32 	display_bw [DISPLAY_SIZE+HEADER_INFO+10];
-#ifdef USE_PLOT
-static UINT32 	displayCopy_bw [DISPLAY_SIZE+HEADER_INFO+1];   /* copy to flag differences */
-#endif
-static UINT32*  picture_bw=NULL;//Pointer to data in display.
-static UINT32*  pictureCopy_bw= NULL;//Pointer to data in display.
-/* static char scratch [100];      */ /* command buffer - does not support output of new display  */
-#endif //CSAMPLE
-
-#ifdef BSAMPLE
-static UBYTE displayScr [LCD_ROW][LCD_COL_B];   /* display buffer           */
-static UBYTE displayCopy [LCD_ROW][LCD_COL_B];   /* copy to flag differences */
-/* static char scratch [LCD_ROW*LCD_COL_B*2+100]; */     /* command buffer           */
-#endif //BSAMPLE
-
-
-//Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg
-//the frame buffer will be defined in the MMI, this has to be put under the
-//section DMA in the memory - need to find out how it is done
-#if defined(ISAMPLE ) || defined(CALLISTO)
-#ifdef FF_MMI_NEW_LCD_API_MIG
-#pragma DATA_SECTION(lcd_frame_buffer, ".r2dbuffer")
-UINT32 lcd_frame_buffer [LCD_ROW*LCD_ROW_NUM_LWORDS];
-#endif
-#endif
-
-
-static int mobEnabled = 1;              /* mobile simulation disabled      */
-
-extern int mfwExtOut (char *cmd);       /* forward to ext. display  */
-UBYTE lcd_output_ready  = TRUE;
-UBYTE lcd_output_needed = FALSE;
-
-#define scrHlen 18
-static const char *scrHeader = "CONFIG MFWMOB SCR ";
-
-static int scrX, scrY;                  /* display size             */
-#if defined (WIN32)
-static int mtkEnabled = 0;              /* MMI Toolkit              */
-#endif
-
-static int internal = 0;                /* internal use only        */
-
-static int xIndex;                      /* data transfer index      */
-
-//accessible from outside e.g 3th application MMS
-void scrPoint (int px, int py, int col);
-#if (BOARD == 70) || (BOARD == 71)
-U8* get_LCD_bitmap(void)
-{
-       return NULL;
-}
-
-U32 get_screen_size(void)
-{
-    return 0;
-}
-
-
-void get_screen_capture(U8 *dest_data)
-{
-
-}
-
-#else
-
-
-//xrashmic 22 Aug, 2004 MMI-SPR-32798
-#ifdef DSAMPLE_COLOUR16
-#define SC_BITMAP_SIZE ( ((R2D_WIDTH + 7) / 8) * R2D_HEIGHT + 2 * sizeof(U16))
-#endif
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : get_LCD_bitmap                |
-+--------------------------------------------------------------------+
-
-  PURPOSE : Return the frame buffer  
-                   xrashmic 22 Aug, 2004 MMI-SPR-32798
-                   Implemented by xreddymn
-*/
-
-U8* get_LCD_bitmap(void)
-{
-#ifdef DSAMPLE_COLOUR16
-	return((U8*)picture_col);
-#else
-       return NULL;
-#endif
-}
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : get_screen_size                |
-+--------------------------------------------------------------------+
-
-  PURPOSE : Return the size of the bitmap to hold the screen shot
-                   xrashmic 22 Aug, 2004 MMI-SPR-32798
-                   Implemented by xreddymn
-*/
-U32 get_screen_size(void)
-{
-#ifdef DSAMPLE_COLOUR16
-    return SC_BITMAP_SIZE;
-#else
-    return 0;
-#endif
-}
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : get_screen_capture                |
-+--------------------------------------------------------------------+
-
-  PURPOSE : Dumps the frame buffer data(16bit) into a monochrome data
-                   xrashmic 22 Aug, 2004 MMI-SPR-32798
-                   Implemented by xreddymn
-*/
-
-void get_screen_capture(U8 *dest_data)
-{
-#ifdef DSAMPLE_COLOUR16
-	U8 *source_data;
-	U32 source_offset=0;
-	U32 dest_offset=4;
-	S32 i,j;
-	U16 pixel_RGB16;
-	U8 R, G, B;
-	S32 avg;
-	U8 color=0; 
-
-	/* First two fields (u16) are width and height */
-	dest_data[0]=((R2D_WIDTH) & 0xFF);
-	dest_data[1]=((R2D_WIDTH) & 0xFF00)>>8;
-	dest_data[2]=((R2D_HEIGHT) & 0xFF);
-	dest_data[3]=((R2D_HEIGHT) & 0xFF00)>>8;
-	source_data=get_LCD_bitmap();
-	for(j=0;j<R2D_HEIGHT;j++)
-	{
-		for(i=0;i<R2D_WIDTH;i++)
-		{
-			if((i%8)==0)
-			{
-				dest_data[dest_offset]=0;
-				dest_offset++;
-			}
-			pixel_RGB16=source_data[source_offset++];
-			pixel_RGB16|=source_data[source_offset++]<<8;
-			pixel_RGB16=~pixel_RGB16;
-			R=((pixel_RGB16>>11)<<3)|0x07;
-			G=(((pixel_RGB16>>5)&0x3f)<<2)|0x03;
-			B=((pixel_RGB16&0x1f)<<3)|0x07;
-			avg=R+G+B;
-			avg/=3;
-			if(avg<0x80) color=0;
-			else color=1;
-			dest_data[dest_offset-1]|=(color<<(i%8));
-		}
-		source_offset+=4;	/* Add framebuffer padding bytes here */
-	} 
-#endif    
-}
-#endif
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
-| STATE   : code                ROUTINE : dspl_BitBlt                |
-+--------------------------------------------------------------------+
-
-  PURPOSE : This function is used to display a bitmap at the
-            specified location using the raster operation provided.
-            The bitmap format MUST be the same as the display and
-            cannot contain any transparent colours
-            If the bitmap does not cover the entire screen area, the rest of the
-            area is drawn in the background colour provided.
-
-*/
-#ifdef DSAMPLE_COLOUR
-void fastCopyBitmap(int startX, 	int startY, 	// start position of bitmap
-						int bmpSx,	int bmpSy,		//size of bitmap
-						char*	srcBitmap,
-						int posX,   	int posY,   	// start of area to be copied into
-						int sx,     	int sy,     	// size of area to be copied into
-						U32 bgd_col,	int bmpFormat)
-{
-	char * image;
-	int image_sx,image_x;
-	int bgd_sx_left;
-	int bgd_sx_right;
-	int i,y;
-	char *screen = (char*)picture_col;
-	U32 bgdColour;
-
-	if (posX < win_x1)
-	{
-		sx = sx - (win_x1-posX);
-		posX = win_x1;
-	}
-	if (posX+sx >win_x2)
-	{
-		sx = win_x2 - posX;
-	}
-	if (posY < win_y1)
-	{
-		sy = sy - (win_y1-posY);
-		posY = win_y1;
-	}
-	if (posY+sy >win_y2)
-	{
-		sy = win_y2 - posY;
-	}
-{
-	char trc[80];
-	sprintf(trc,"%d,%d,%d,%d,%d,%d",sx,sy,win_x1,win_y1,win_x2,win_y2);
-	mmi_trace(trc);
-}
-#ifdef DSAMPLE_COLOUR32
-	if (bmpFormat != BMP_FORMAT_16BIT_LCD_COLOUR)
-#endif
-#ifdef DSAMPLE_COLOUR16
-	if (bmpFormat != BMP_FORMAT_16BIT_LCD_COMPRESSED_COLOUR)
-#endif
-	{
-		int maxY;
-		//Either display as much of the image as possible or as much as will fit.
-		if (bmpSy > sy)
-			maxY = sy;
-		else
-			maxY = bmpSy;
-		dspl_Clear(posX,posY,(U16)(posX+sx-1),(U16)(posY+sy-1));
-		dspl_BitBlt2((short) posX,(short)posY,(USHORT)bmpSx,(USHORT)maxY,
-					(void *)srcBitmap,0, bmpFormat);
-		return;
-	}
-
-	bgdColour = DSPL_GET_BITCOLOUR(bgd_col);
-	bgdColourArray[0] = (bgdColour & 0x000000FF);
-	bgdColourArray[1] = (bgdColour & 0x0000FF00) >>8;
-	bgdColourArray[2] = (bgdColour & 0x00FF0000) >>16;
-	bgdColourArray[3] = (bgdColour & 0xFF000000) >>24;
-	for (i=BYTEPERPIXEL;i<LCD_COL*BYTEPERPIXEL;i++)
-		bgdColourArray[i] = bgdColourArray[i-BYTEPERPIXEL];
-	bgd_sx_left = (startX- posX);
-
-	if (srcBitmap)
-	{
-		image_x = posX - startX;
-		image_sx = bmpSx;
-		if (image_x < 0)
-		{
-			image_x = 0;
-		}
-		else
-			image_sx = image_sx - image_x;
-	}
-	else
-	{
-		image_sx = 0;
-		image_x  = 0;
-	}
-	if (bgd_sx_left <0)
-		bgd_sx_left=0;
-	if ((image_sx + bgd_sx_left) > sx)
-	{
-		image_sx = sx - bgd_sx_left;
-		bgd_sx_right = 0;
-	}
-	else
-	{
-		bgd_sx_right = sx-(image_sx+bgd_sx_left);
-	}
-	if (bgd_sx_right <0)
-		bgd_sx_right=0;
-	bgd_sx_right = bgd_sx_right*BYTEPERPIXEL;
-	bgd_sx_left  = bgd_sx_left*BYTEPERPIXEL;
-	if (image_sx > 0)
-		image_sx = image_sx*BYTEPERPIXEL;
-	else
-		image_sx = 0;
-	if (image_x > 0)
-		image_x = image_x*BYTEPERPIXEL;
-	else
-		image_x = 0;
-	if (posY+sy > LCD_ROW)
-		sy = LCD_ROW - posY;
-	for (y=posY; y<posY+sy; y++)
-	{
-		int yOfs = DSPL_GET_BYTE(posX,y);
-		if ((yOfs >=0) && (yOfs<DISPLAY_SIZE*4))
-		{
-		if (((srcBitmap) && (y>startY) && (y <bmpSy+startY) && (image_sx >0)))
-		{
-				image = &srcBitmap[(y-startY)*bmpSx*BYTEPERPIXEL];
-			if (bgd_sx_left >0)
-				memcpy(&screen[yOfs],&bgdColourArray[0],bgd_sx_left);
-			memcpy(&screen[yOfs+bgd_sx_left],&image[image_x],image_sx);
-			if (bgd_sx_right >0)
-				memcpy(&screen[yOfs+bgd_sx_left+image_sx],&bgdColourArray[0],bgd_sx_right);
-
-		}
-		else
-		{
-				memcpy(&screen[yOfs],&bgdColourArray[0],sx*BYTEPERPIXEL);
-			}
-		}
-	}
-}
-#else
-void fastCopyBitmap(int startX, 	int startY, 	// start position of bitmap
-						int bmpSx,	int bmpSy,		//size of bitmap
-						char*	srcBitmap,
-						int posX,   	int posY,   	// start of area to be copied into
-						int sx,     	int sy,     	// size of area to be copied into
-						U32 bgd_col,	int bmpFormat)
-{
-	//Fast copy is currently only required for colour bitmaps
-}
-#endif
-
-
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
-| STATE   : code                        ROUTINE : scrMobUpdate       |
-+--------------------------------------------------------------------+
-
-  PURPOSE : Shadow display to mobile simulation
-
-*/
-
-void scrMobUpdate (void)
-{
-#if defined (WIN32)
-  USHORT x,y;
-  USHORT i;
-  USHORT z;
-
-  if (mtkEnabled)
-  {
-    USHORT   sdu_len;
-
-    switch (mtkEnabled)
-    {
-    case 1: // ASAMPLE
-      z= LCD_ROW;
-      sdu_len = 13 * z; // (100 * z Pixels);
-      {
-        PALLOC_SDU (mmi_display_req, MMI_DISPLAY_REQ, (USHORT)(sdu_len<<3));
-        {
-          mmi_display_req->c_x = LCD_COL;
-          mmi_display_req->c_y = z;
-          i=0;
-          for (y=0;y<z;y++)
-            for (x=0; x < 13; x++)
-              mmi_display_req->sdu.buf[i++] = displayScr[y][x];
-        }
-
-        TRACE_EVENT ("Send Display Content");
-#if defined NEW_FRAME
-        {
-          {
-            T_QMSG Message;
-
-              Message.MsgType = MSG_PRIMITIVE;
-              Message.Msg.Primitive.Prim = D2P(mmi_display_req);
-              Message.Msg.Primitive.PrimLen = sizeof (T_MMI_DISPLAY_REQ) + LCD_COL_B*z;
-            #ifdef MEMORY_SUPERVISION
-              vsi_c_send (VSI_CALLER hCommL1 ,&Message, __FILE__, __LINE__);
-            #else
-              vsi_c_send (VSI_CALLER hCommL1 ,&Message);
-            #endif
-          }
-        }
-#else
-//        vsi_c_send (VSI_CALLER hCommL1, D2P(mmi_display_req), sizeof (T_MMI_DISPLAY_REQ) + LCD_COL_B*z);
-#endif
-      }
-      break;
-
-    case 2: // another target with other dimensions
-      {
-        char buf[40];
-        sprintf (buf, "LCD NEEDED %d READY %d", lcd_output_needed, lcd_output_ready);
-        TRACE_EVENT (buf);
-      }
-      lcd_output_needed = TRUE;
-      if (lcd_output_ready)
-      {
-        lcd_output_needed = FALSE;
-        lcd_output_ready = FALSE;
-
-        sdu_len = 14 * 16 + 20;
-#if (LCD_ROW >= 64)
-        {
-          PALLOC_SDU (mmi_display_req, MMI_DISPLAY_REQ, sdu_len<<3);
-
-          mmi_display_req->c_x = LCD_COL;
-          mmi_display_req->c_y = 16;
-          mmi_display_req->attrib.content = 3;
-          i=0;
-          for (y=48;y<64;y++)
-            for (x=0; x < 13; x++)
-              mmi_display_req->sdu.buf[i++] = displayScr[y][x];
-#if defined NEW_FRAME
-          {
-            T_QMSG Message;
-
-              Message.MsgType = MSG_PRIMITIVE;
-              Message.Msg.Primitive.Prim = D2P(mmi_display_req);
-              Message.Msg.Primitive.PrimLen = sizeof (T_MMI_DISPLAY_REQ) + 14*16+20;
-            #ifdef MEMORY_SUPERVISION
-              vsi_c_send (VSI_CALLER hCommL1 ,&Message, __FILE__, __LINE__);
-            #else
-              vsi_c_send (VSI_CALLER hCommL1 ,&Message);
-            #endif
-          }
-#else
-          vsi_c_send (VSI_CALLER hCommL1, D2P(mmi_display_req), sizeof (T_MMI_DISPLAY_REQ) + 14*16+20);
-#endif
-        }
-#endif
-#if (LCD_ROW >= 48)
-        {
-          PALLOC_SDU (mmi_display_req, MMI_DISPLAY_REQ, (USHORT)(sdu_len<<3));
-
-          mmi_display_req->c_x = LCD_COL;
-          mmi_display_req->c_y = 16;
-          mmi_display_req->attrib.content = 2;
-          i=0;
-          for (y=32;y<48;y++)
-            for (x=0; x < 13; x++)
-              mmi_display_req->sdu.buf[i++] = displayScr[y][x];
-#if defined NEW_FRAME
-          {
-            T_QMSG Message;
-
-              Message.MsgType = MSG_PRIMITIVE;
-              Message.Msg.Primitive.Prim = D2P(mmi_display_req);
-              Message.Msg.Primitive.PrimLen = sizeof (T_MMI_DISPLAY_REQ) + 14*16+20;
-            #ifdef MEMORY_SUPERVISION
-              vsi_c_send (VSI_CALLER hCommL1 ,&Message, __FILE__, __LINE__);
-            #else
-              vsi_c_send (VSI_CALLER hCommL1 ,&Message);
-            #endif
-          }
-#else
-          vsi_c_send (VSI_CALLER hCommL1, D2P(mmi_display_req), sizeof (T_MMI_DISPLAY_REQ) + 14*16+20);
-#endif
-        }
-#endif
-        {
-          PALLOC_SDU (mmi_display_req, MMI_DISPLAY_REQ, (USHORT)(sdu_len<<3));
-
-          mmi_display_req->c_x = LCD_COL;
-          mmi_display_req->c_y = 16;
-          mmi_display_req->attrib.content = 1;
-          i=0;
-          for (y=16;y<32;y++)
-            for (x=0; x < 13; x++)
-              mmi_display_req->sdu.buf[i++] = displayScr[y][x];
-#if defined NEW_FRAME
-          {
-            T_QMSG Message;
-
-              Message.MsgType = MSG_PRIMITIVE;
-              Message.Msg.Primitive.Prim = D2P(mmi_display_req);
-              Message.Msg.Primitive.PrimLen = sizeof (T_MMI_DISPLAY_REQ) + 14*16+20;
-            #ifdef MEMORY_SUPERVISION
-              vsi_c_send (VSI_CALLER hCommL1 ,&Message, __FILE__, __LINE__);
-            #else
-              vsi_c_send (VSI_CALLER hCommL1 ,&Message);
-            #endif
-          }
-#else
-          vsi_c_send (VSI_CALLER hCommL1, D2P(mmi_display_req), sizeof (T_MMI_DISPLAY_REQ) + 14*16+20);
-#endif
-        }
-        {
-          PALLOC_SDU (mmi_display_req, MMI_DISPLAY_REQ, (USHORT)(sdu_len<<3));
-
-          mmi_display_req->c_x = LCD_COL;
-          mmi_display_req->c_y = 16;
-          mmi_display_req->attrib.content = 0;
-          i=0;
-          for (y=0;y<16;y++)
-            for (x=0; x < 13; x++)
-              mmi_display_req->sdu.buf[i++] = displayScr[y][x];
-#if defined NEW_FRAME
-          {
-            T_QMSG Message;
-
-              Message.MsgType = MSG_PRIMITIVE;
-              Message.Msg.Primitive.Prim = D2P(mmi_display_req);
-              Message.Msg.Primitive.PrimLen = sizeof (T_MMI_DISPLAY_REQ) + 14*16+20;
-            #ifdef MEMORY_SUPERVISION
-              vsi_c_send (VSI_CALLER hCommL1 ,&Message, __FILE__, __LINE__);
-            #else
-              vsi_c_send (VSI_CALLER hCommL1 ,&Message);
-            #endif
-          }
-#else
-          vsi_c_send (VSI_CALLER hCommL1, D2P(mmi_display_req), sizeof (T_MMI_DISPLAY_REQ) + 14*16+20);
-#endif
-        }
-        TRACE_EVENT ("Send Display Content");
-      }
-      break;
-    }
-  }
-#endif
-
-#ifdef BSAMPLE
-  if (mobEnabled)
-  {
-/*  ## scratch is not required and function mfwExtOut is 
-      ## not doing anything
-     sprintf(scratch,"%s%s %d",scrHeader,"disp",LCD_COL_B);
-    xIndex = 0;
-    mfwExtOut(scratch);
-    */
-  }
-#endif
-}
-
-
-int dspl_GetContrastColour( int ipCol)
-{
-	switch (ipCol & 0x00808080)
-	{
-		case 0x000000:		return (0x00FFFFFF);
-		case 0x000080:		return (0x00FFFF00);
-		case 0x008000:		return (0x00FF00FF);
-		case 0x008080:		return (0x00FF0000);
-		case 0x800000:		return (0x0000FFFF);
-		case 0x800080:		return (0x0000FF00);
-		case 0x808000:		return (0x000000FF);
-		case 0x808080:		return (0x00000000);
-		default:			return (0x00808080);
-	}
-	return (0x00808080);
-}
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
-| STATE   : code                        ROUTINE : scrLCDUpdate       |
-+--------------------------------------------------------------------+
-
-  PURPOSE : Shadow display to LCD
-
-*/
-
-//GW Procedure/data supplied by new TI Driver V5.3.1
-#ifdef R2D_ENABLED
-
-static T_R2D_SHAPE_PTR	scrDisplayRect = NULL; //rectangle defined as shape of the display
-static T_R2D_GC_PTR		scrPicPtr = NULL; //Pointer to gc with picture in it (b+w and col)
-static T_RVF_MB_ID			mb_id;	//ID of memory bank
-void r2d_refresh(void);
-int riv_err;
-extern T_R2D_GC_PTR r2d_g_lcd_gc;
-#endif // R2D_ENABLED
-static int picInit = 0;	//Have we set up the mb id etc yet ?
-
-//Initialises data required for bolck copy of a 'picture'
-void scrRivPictureClear(void)
-{
-#ifdef CSAMPLE
-    memset(display_bw,0,sizeof(display_bw));
-#ifdef USE_PLOT
-    memset(displayCopy_bw,0,sizeof(displayCopy_bw));
-	pictureCopy_bw = &displayCopy_bw[3]; //start of input data
-#endif
-
-	display_bw[0] = LCD_COL;
-	display_bw[1] = LCD_ROW;
-	display_bw[2] = DISPLAY_SIZE;
-	picture_bw = &display_bw[3]; //start of input data
-#endif
-
-#ifdef DSAMPLE_COLOUR
-#ifdef USEBUFFER
-	display_colour[0] = LCD_COL;
-	display_colour[1] = LCD_ROW;
-	display_colour[2] = DISPLAY_SIZE;
-	picture_col = &display_colour[3]; //start of input data
-#else
-//Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg
-//the picture_col is assigned with the address of the new frame buffer
-	#ifdef FF_MMI_NEW_LCD_API_MIG
-		picture_col = lcd_frame_buffer;
-	#else
-	picture_col = r2d_get_pixmap(r2d_g_lcd_gc);
-#endif
-#endif
-	{
-		U32 lWord,bitCol;
-		int j,y;
-		//GW When clearing screen - do not allow transparent background colours!
-		int bgdCol = dspl_GetBgdColour();
-		int fgdCol = dspl_GetFgdColour();
-		if (((bgdCol & 0x00F0F0F0) == (fgdCol  & 0x00F0F0F0)) ||
-		    ((bgdCol & 0xFF000000) == TRANSPARENT_32BIT_COLOUR))
-		{
-			/*Foreground and background colours are the same (or near enough) */
-			/* or background colour is transparent                            */
-			/*Select a colour that will contrast with the current foreground colour */
-			bgdCol = dspl_GetContrastColour(fgdCol);
-		}
-		bitCol = (DSPL_GET_BITCOLOUR(bgdCol)) & 0x00FFFFFF;
-
-#ifdef DSAMPLE_COLOUR32
-		bgdColourArray[0] = (bitCol & 0x000000FF);
-		bgdColourArray[1] = (bitCol & 0x0000FF00) >>8;
-		bgdColourArray[2] = (bitCol & 0x00FF0000) >>16;
-		bgdColourArray[3] = (bitCol & 0xFF000000) >>24;
-		for (j=4;j<LCD_COL*4;j++)
-			bgdColourArray[j] = bgdColourArray[j-4];
-		for (y=0; y<LCD_ROW; y++)
-		{
-			int yOfs = (y*LCD_ROW_NUM_LWORDS);
-			memcpy(&picture_col[yOfs] ,bgdColourArray,LCD_COL*4);
-		}
-#endif
-#ifdef DSAMPLE_COLOUR16
-		bgdColourArray[0] = (bitCol & 0x000000FF);
-		bgdColourArray[1] = (bitCol & 0x0000FF00) >>8;
-		for (j=2;j<LCD_COL*2;j++)
-			bgdColourArray[j] = bgdColourArray[j-2];
-		for (y=0; y<LCD_ROW; y++)
-		{
-			int yOfs = (y*LCD_ROW_NUM_LWORDS);
-			memcpy(&picture_col[yOfs] ,bgdColourArray,LCD_COL*2);
-		}
-#endif
-	}
-
-#endif
-
-#ifdef DSAMPLE_LITE
-	picture_bw = r2d_get_pixmap(r2d_g_lcd_gc);
-	memset(picture_bw,0,DISPLAY_SIZE*4);
-#endif
-
-
-}
-void scrRivPictureInit( void )
-{
-	static int err = -1;
-	T_RVF_MB_NAME 		mb_name;
-	T_RVF_MB_PARAM 		mb_param;
-	//Ensure data is only created once.
-//Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg
-//the scrRivePictureClear() is called even in case of ISAMPLE and CALLSTO boards	
-#if defined( R2D_ENABLED) || defined (ISAMPLE) || defined (CALLISTO)
-	if (picInit != 0)
-		return;
-	picInit = 1; //int underway.
-	scrRivPictureClear();
-#endif
-
-#ifdef CSAMPLE
-	strcpy(mb_name, "FRED");
-	mb_param.size = 256;
-	mb_param.watermark = 128;
-	riv_err = rvf_create_mb( mb_name, mb_param, &mb_id);
-
-	if (riv_err == 0)
-	{
-		scrPicPtr = r2d_new_picture_context(mb_id, display_bw,R2D_LCD_KIND);
-		scrDisplayRect = r2d_new_rectangle(mb_id,0,0,LCD_COL-1,LCD_ROW-1);
-	}
-	else
-	{
-		scrPicPtr = NULL;
-		scrDisplayRect  = NULL;
-	}
-#endif
-
-#ifdef DSAMPLE_COLOUR
-#ifdef USEBUFFER
-	strcpy(mb_name, "FRED");
-	mb_param.size = 256;
-	mb_param.watermark = 128;
-	err = rvf_create_mb( mb_name, mb_param, &mb_id);
-	if (err == 0)
-	{
-		scrPicPtr = r2d_new_picture_context(mb_id, display_colourPtr,R2D_FULL_KIND);// R2D_LCD_KIND);
-		scrDisplayRect = r2d_new_rectangle(mb_id,0,0,LCD_COL+1,LCD_ROW+1);
-	}
-	else
-#endif
-	{
-#ifndef FF_MMI_NEW_LCD_API_MIG
-		scrPicPtr = NULL;
-		scrDisplayRect  = NULL;
-#endif		
-	}
-#endif
-
-}
-
-//GW Change the display to  
-#ifdef DSAMPLE_COLOUR
-#ifdef DSAMPLE_COLOUR32
-#define TOP_BITS_SET 0xC618
-#endif
-#ifdef DSAMPLE_COLOUR16
-#define TOP_BITS_SET 0xC618C618
-#endif
-#endif
-/*
-+--------------------------------------------------------------------+
-| PROJECT : GSM-PS (6147)         MODULE  : SMI_WM                   |
-| STATE   : code                  ROUTINE : scrUnfocusDisplay      |
-+--------------------------------------------------------------------+
-
-  PURPOSE : Causes the entire display to appear much darker, allowing the pop-up 
-  			dialog to be more clearly the focus especially the softkeys.
-
-GW #2294 23/07/03 - Created
-*/
-void scrUnfocusDisplay(void)
-{
-#ifndef _SIMULATION_  // Turn off this BMI Schnickschnack ...
-	int x,y;
-	UINT32 *picPtr;
-#ifndef DSAMPLE_COLOUR
-	UINT32 mask;
-#endif
-#ifdef DSAMPLE_COLOUR
-	picPtr = picture_col;
-#else
-	picPtr = picture_bw;
-#endif
-	if (picPtr != NULL)
-	{
-		for (y=0;y<LCD_ROW;y++)
-		{
-#ifndef DSAMPLE_COLOUR
-			if (y & 0x01)
-				mask = 0xAAAAAAAA;
-			else
-				mask = 0x55555555;
-#endif
-			for (x=0;x<LCD_ROW_NUM_LWORDS;x++)
-			{
-#ifdef DSAMPLE_COLOUR
-				//We Want to reduce colour by 50% (shift left) and set top bits to bits to 0
-				//Since picture colours are inverted, set top bits.
-				//Also, colouris very bright - reduce by 75%
-				if ((*picPtr & TOP_BITS_SET) != TOP_BITS_SET)
-					*picPtr = ((*picPtr) >> 2) | TOP_BITS_SET;
-#else
-				//B+W display - blank every second pixel
-				*picPtr = (*picPtr) & mask;
-#endif
-				picPtr++;
-			}
-		}
-	}
-#endif /* _SIMULATION_ */
-}
-
-
-//Set colour (only when different from last time)
-void scrSetR2DFgdCol(UINT32 col)
-{
-	U16 opCol_a,opCol_r,opCol_g,opCol_b;
-	static UINT32 oldCol = 0xFFFFFFFF;
-	if (col != oldCol)
-	{
-#ifdef DSAMPLE_COLOUR
-		opCol_a = 0xFF; // ((col & 0x0000FF00) >> 16);
-		opCol_r = ((col & 0x0000F800) >>  8);
-		opCol_g = ((col & 0x000007E0) >>  3);
-		opCol_b = ((col & 0x0000001F) <<  3);
-#else
-		opCol_a = 0xFF; // ((col & 0x0000FF00) >> 16);
-		opCol_r = ((col & 0x000000E0)       );
-		opCol_g = ((col & 0x0000001C) <<  3);
-		opCol_b = ((col & 0x00000003) <<  6);
-		if (opCol_r == 0)	opCol_r = 0x80;
-		if (opCol_g == 0)	opCol_g = 0x40;
-#endif
-#ifdef R2D_ENABLED
-		r2d_set_foreground_color_with_argb(r2d_g_lcd_gc, opCol_a, opCol_r, opCol_g, opCol_b );
-		oldCol = col;
-#endif
-	}
-}
-//Set colour (only when different from last time)
-void scrSetR2DBgdCol(UINT32 col)
-{
-	U16 opCol_a,opCol_r,opCol_g,opCol_b;
-	static UINT32 oldCol = 0xFFFFFFFF;
-	if (col != oldCol)
-	{
-#ifdef DSAMPLE_COLOUR
-		opCol_a = 0xFF; // ((col & 0x0000FF00) >> 16);
-		opCol_r = ((col & 0x0000F800) >>  8);
-		opCol_g = ((col & 0x000007E0) >>  3);
-		opCol_b = ((col & 0x0000001F) <<  3);
-#else
-		opCol_a = 0xFF; // ((col & 0x0000FF00) >> 16);
-		opCol_r = ((col & 0x000000E0)       );
-		opCol_g = ((col & 0x0000001C) <<  3);
-		opCol_b = ((col & 0x00000003) <<  6);
-		if (opCol_r == 0)	opCol_r = 0x80;
-		if (opCol_g == 0)	opCol_g = 0x40;
-#endif
-#ifdef R2D_ENABLED
-		r2d_set_background_color_with_argb(r2d_g_lcd_gc, opCol_a, opCol_r, opCol_g, opCol_b );
-		oldCol = col;
-#endif
-	}
-}
-//GW Procedure/data supplied by new TI Driver V5.3.1
-//length of array (32bit words) to hold a copy of the screen (maybe)
-#ifdef R2D_ENABLED
-extern T_R2D_GC_PTR r2d_g_lcd_gc;
-#endif
-/*  */
-void scrPlotR2DPoint(U32 col, INT16 x, INT16 y)
-{
-#ifdef R2D_ENABLED
-	static U32 fCol=0xFFFFFFFF;
-	static U32 bCol=0xFFFFFFFF;
-	static U32 flip=0;
-	if (fCol==col)
-	{
-		scrSetR2DFgdCol(col );
-		r2d_draw_point(r2d_g_lcd_gc,x,y);
-	}
-	else if (bCol == col)
-	{
-		scrSetR2DBgdCol(col );
-		r2d_erase_point(r2d_g_lcd_gc,x,y);
-	}
-	else if (flip)
-	{
-		flip = 0;
-		scrSetR2DBgdCol(col );
-
-		r2d_erase_point(r2d_g_lcd_gc,x,y);
-		bCol = col;
-	}
-	else
-	{
-		flip = 1;
-		scrSetR2DFgdCol(col );
-		r2d_draw_point(r2d_g_lcd_gc,x,y);
-		fCol = col;
-	}
-#endif
-}
-
-#ifdef BSAMPLE
-void scrLCDUpdate (void)
-{
-#ifdef USE_PLOT
-	int nPlots=0;
-
-	int row,rowstart;
-	int kstart,kend,k;
-	UBYTE *bcopy;
-	int i,j;
-	UBYTE m;
-	UBYTE  *bm;
-#else
-	int i;
-#endif
-
-#if defined (WIN32_SIM)
-    return;
-#endif
-    if (!scrEnabled)
-        return;
-
-#ifdef USE_PLOT
-	bm   = &displayScr[0][0];
-    bcopy = &displayCopy[0][0];
-    m = 0x80;
-    for (j = 0; j < LCD_ROW; j++)
-    {
-        for (k = 0; k < (LCD_COL+7)/8; k++)
-        {
-          //Only plot data if it has changed since last time
-          if (*bm != *bcopy)
-          {
-            m = 0x80;
-            kstart = k*8;
-            kend = k*8+8;
-            if (kend>LCD_COL)
-              kend = LCD_COL;
-            for (i = kstart; i < kend; i++)
-            {
-#ifdef R2D_ENABLED
-                if ((*bm) & m)
-
-					r2d_draw_point(r2d_g_lcd_gc,i,j);
-                else
-					r2d_erase_point(r2d_g_lcd_gc,j,i);
-#endif
-                m >>= 1;
-            }
-            *bcopy = *bm;//Update value
-          }
-          bm++;
-          bcopy++;
-        }
-    }
-
-#else
-    //* work around limitations of TI driver !                       *
-    for (i = 0; i < LCD_ROW; i++)
-    {
-        displayScr[i][LCD_COL_B-1] &= 0xF0;
-        displayScr[i][LCD_COL_B-1] |= (UBYTE) ((displayScr[i][6] >> 2) & 0x0F);
-    }
-
-    LCD_PixBlt(0,0,LCD_COL_B*8,8,(char*)&displayScr[0][0]);
-    LCD_PixBlt(0,8,LCD_COL_B*8,8,(char*)(&(displayScr[8][0])));
-    LCD_PixBlt(0,16,LCD_COL_B*8,8,(char*)(&(displayScr[16][0])));
-    LCD_PixBlt(0,24,LCD_COL_B*8,8,(char*)(&(displayScr[24][0])));
-#if (!CUST)//JVJE #if (CUST==1)
-	LCD_PixBlt(0,32,LCD_COL_B*8,8,(char*)(&(displayScr[32][0])));
-	LCD_PixBlt(0,40,LCD_COL_B*8,8,(char*)(&(displayScr[40][0])));
-#endif
-#endif
-
-}
-#endif
-
-
-
-
-#ifdef CSAMPLE
-void scrLCDUpdate (void)
-{
-int kstart,kend,k;
-int row,rowstart;
-int   i,j;
-INT16 x1,y1;
-UINT32  m;
-UINT32  *bm;
-UINT32  *bcopy;
-static UINT32 col=0;
-int count;
-int nPlots=0;
-
-#if defined (WIN32_SIM)
-    return;
-#endif
-    if (!scrEnabled)
-        return;
-
-#ifdef USE_PLOT
-
-	bm   = picture_bw;
-    bcopy = pictureCopy_bw;
-	for (j = 0; j < DISPLAY_SIZE; j++)
-	{
-		if (*bm != *bcopy)
-	    {
-        	//Only plot data if it has changed since last time
-		    m = 0x80000000;
-
-		    x1 = j / LCD_COL_NUM_LWORDS;
-		    y1 = j % LCD_COL_NUM_LWORDS;
-		    y1 = y1 << 5;
-		    y1 = (y1 + 16);
-		    x1 = (scrX-1)-x1;
-		    kstart = y1;
-		    kend = y1+32;
-		    for (i = kstart; i < kend; i++)
-        	{
-				nPlots++;
-#ifdef R2D_ENABLED
-				if ((*bm) & m)
-					r2d_draw_point(r2d_g_lcd_gc,x1,(i%64));
-            	else
-
-					r2d_erase_point(r2d_g_lcd_gc,x1,(i%64));
-#endif
-				m >>= 1;
-			}
- 			*bcopy = *bm;//Update value
-       	}
-      	bm++;
-      	bcopy++;
-      	if (nPlots > MAX_NUMBER_PLOTS)
-      			return;
-    }
-#else
-	if (scrPicPtr != NULL)
-	{
-#ifdef R2D_ENABLED
-		r2d_fast_blit(scrPicPtr,r2d_g_lcd_gc);
-#endif
-		vsi_t_sleep(VSI_CALLER (20));
-	}
-#endif //old/new
-}
-#endif //CSAMPLE
-
-//June 03, 2005 REF: GSM-ENH-31636 xpradipg
-//CRR 28825:  xpradipg - 11 Feb 2005
-#if (defined(DSAMPLE) || defined(ESAMPLE) || defined(ISAMPLE) || defined(CALLISTO))// changes for flag cleanup and addition for ISAMPLE
-void scrLCDUpdate (void)
-{
-//	Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg
-//the co-ordinates are set to the entire LCD as we will be refreshing whole LCD
-#ifdef FF_MMI_NEW_LCD_API_MIG
-lcd_fb_coordinates p_lcd_coord = { 0,0,LCD_COL,LCD_ROW};
-#endif
-#if defined (WIN32_SIM)
-    return;
-#endif
-    if (!scrEnabled)
-        return;
-//Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg
-//call the new lcd AP in place of the old for refresh
-#ifdef FF_MMI_NEW_LCD_API_MIG
-	lcd_display(DISPLAY_MAIN_LCD,(U16*)picture_col,&p_lcd_coord);
-#else
-#ifdef R2D_ENABLED
-	r2d_flush();
-#endif
-#endif
-}
-#endif//D-sample
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
-| STATE   : code                        ROUTINE : scrMobCommand      |
-+--------------------------------------------------------------------+
-
-  PURPOSE : Command string from mobile simulation
-
-*/
-
-
-void scrMobCommand (char *s)
-{
-#ifdef BSAMPLE
-    char *p;
-    unsigned char *q;
-    int i;
-    char scratch [LCD_ROW*LCD_COL_B*2+100];     /* command buffer           */	
-
-    if (strstr(s,"ena") == s)
-    {
-        mobEnabled = 1;
-        return;
-    }
-    if (strstr(s,"dis") == s)
-    {
-        mobEnabled = 0;
-        return;
-    }
-    if (strstr(s,"ok") == s)
-    {
-        if (xIndex < 0)
-            return;
-        strcpy(scratch,scrHeader);
-        if (xIndex >= sizeof(displayScr))
-        {
-            strcat(scratch,"done");
-            mfwExtOut(scratch);
-            return;
-        }
-        strcat(scratch,"data ");
-        p = scratch + strlen(scratch);
-        sprintf(p,"%04d %04d ",xIndex,LCD_COL_B*LCD_ROW/DISPL_DIV);
-        p = scratch + strlen(scratch);
-        q = (UBYTE *) displayScr;
-        for (i = 0; i < LCD_COL_B * LCD_ROW / DISPL_DIV; i++)
-        {
-            sprintf(p,"%02x",q[xIndex++]);
-            p += 2;
-        }
-        *p = '\0';
-        mfwExtOut(scratch);
-        return;
-    }
-    #endif
-}
-
-
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
-| STATE   : code                        ROUTINE : scrInit            |
-+--------------------------------------------------------------------+
-
-  PURPOSE : initialize screen driver
-
-*/
-
-void scrInit (void)
-{
-//	Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg
-//New LCD API for initialization
-#ifdef FF_MMI_NEW_LCD_API_MIG
-	lcd_initialization(DISPLAY_MAIN_LCD);
-#else	
-    LCD_SetPower(); /* ES!! */
-    LCD_Reset();
-    LCD_Enable(1);
-
-#endif	
-	dspl_InitColour ();
-
-#ifdef LSCREEN
-	font_initFont(1);
-#else
-	font_initFont(0);
-#endif
-
-#ifdef BSAMPLE
-    memset(displayScr,0,sizeof(displayScr));
-    memset(displayCopy,0,sizeof(displayCopy));
-#else
-	scrRivPictureInit();
-#endif
-//Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg
-//clear the buffer with background color, since r2d_erase does the same
-#ifdef FF_MMI_NEW_LCD_API_MIG
-	scrRivPictureClear();
-#else
-#ifdef R2D_ENABLED
-	r2d_erase( r2d_g_lcd_gc );
-#endif
-#endif
-    mobEnabled = 0;
-    scrEnabled = 1;
-    internal = 0;
-    scrX = LCD_COL;
-    scrY = LCD_ROW;
-    xIndex = -1;
-	displayData.DisplayType = DSPL_TYPE_GRAPHIC;
-	 //GW Set display window to full screen
-	dspl_ResetWindow();
-}
-
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
-| STATE   : code                        ROUTINE : scrExit            |
-+--------------------------------------------------------------------+
-
-  PURPOSE : finalize screen driver
-
-*/
-
-void scrExit (void)
-{
-    LCD_Enable(0);
-    mobEnabled = 0;
-    scrEnabled = 0;
-    xIndex = -1;
-}
-
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
-| STATE   : code                        ROUTINE : scrUpdate          |
-+--------------------------------------------------------------------+
-
-  PURPOSE : set screen update mode
-
-GW 18/09/01 clear text invert flag whenever display is enabled/disabled.
-*/
-//GW mmi_trace is a call to the MMI to provide timings for MMI updates -
-//REMOVE FROM FINAL BUILD (if I forget!)
-int scrUpdate (int onOff)
-{
-    int ena = scrEnabled;
-	txtInvert = 0;	//clear text invert flag whenever display is enabled/disabled.
-    scrEnabled = onOff;
-    if (scrEnabled)
-    {
-#ifdef MMI_TRACE
-mmi_trace("scrupdate() enable start");
-#endif
-        scrLCDUpdate();
-        scrMobUpdate();
-#ifdef MMI_TRACE
-mmi_trace("scrupdate() enable end");
-#endif
-    }
-    else
-	{
-#ifdef MMI_TRACE
-mmi_trace("scrupdate() disabled");
-#endif
-	}
-    return ena;
-}
-
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
-| STATE   : code                        ROUTINE : scrSize            |
-+--------------------------------------------------------------------+
-
-  PURPOSE : retrieve display size
-
-*/
-
-void scrSize (int *x, int *y)
-{
-    *x = scrX;
-    *y = scrY;
-}
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
-| STATE   : code                        ROUTINE : scrOnOff           |
-+--------------------------------------------------------------------+
-
-  PURPOSE : switch display On/Off
-
-*/
-
-void scrOnOff (int on)
-{
-//kk to be checked
-/*  ## scratch is not required and function mfwExtOut is 
-      ## not doing anything
-   sprintf(scratch,"%sscrOnOff:%d",scrHeader,on);
-   mfwExtOut(scratch);
-   */
-}
-
-#if (!CUST)//JVJE #if (CUST==1)
-/*
-+--------------------------------------------------------------------+
-| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
-| STATE   : code                        ROUTINE : scrLight           |
-+--------------------------------------------------------------------+
-
-  PURPOSE : switch display backlight On/Off
-
-*/
-
-void scrLight (int on)
-{
-//kk to be checked
-/*  ## scratch is not required and function mfwExtOut is 
-      ## not doing anything
-    sprintf(scratch,"%sscrLight:%d",scrHeader,on);
-   mfwExtOut(scratch);
- */
-}
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
-| STATE   : code                        ROUTINE : scrClear           |
-+--------------------------------------------------------------------+
-
-  PURPOSE : clear display
-
-*/
-
-void scrClear (void)
-{
-
-#ifdef BSAMPLE
-    memset(displayScr,0,sizeof(displayScr));
-#else
-	scrRivPictureClear();
-#endif
-
-    if (scrEnabled)
-    {
-//Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg
-//this is specific to old driver. A corresponding API exist with new apis. 
-//need to check if it can be used 
-#ifndef FF_MMI_NEW_LCD_API_MIG
-        LCD_Clear();                    /* TI driver function       */
-#endif
-        scrMobUpdate();                 /* update mobile simulation */
-    }
-}
-#endif //CUST==1
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
-| STATE   : code                        ROUTINE : scrClearRect       |
-+--------------------------------------------------------------------+
-
-  PURPOSE : clear display area
-
-*/
-#ifdef DSAMPLE_LITE
-
-void scrDrawFilledRect (int px, int py, int sx, int sy, U32 col)
-{
-	int i,j;
-	U32 opCol;
-	int word;
-
-	//Limit rectangle to the size of the screen.
-	if ((px >= scrX) || (py >= scrY))
-		return;
-
-	if ((col& 0xFF000000) == TRANSPARENT_32BIT_COLOUR)
-		return; //Background colour is transparent
-
-	//Allow -ve sizes but change data round
-	if (sx <0)
-	{
-		px = px+sx;
-		sx = -sx;
-	}
-	if (sy <0)
-	{
-		py = py+sy;
-		sy = -sy;
-	}
-	//Limit rectangle to size of window
-	if (px<win_x1)
-	{
-		sx = sx - win_x1;
-		px = win_x1;
-	}
-	if (py<win_y1)
-	{
-		sy = sy - win_y1;
-		py = win_y1;
-	}
-
-	if (px+sx >=win_x2)
-		sx = win_x2 - px-1;
-	if (py+sy >=win_y2)
-		sy = win_y2 - py-1;
-	if ((sx <= 0) || (sy<=0))
-		return;//cannot draw zero width rectangle.
-
-	opCol = col;
-	{
-		U32 maskL, maskR;
-		int skipBits,startWord,endWord;
-		maskL = 0xFFFFFFFF;
-		skipBits = px & 0x1F;
-		maskL = maskL << skipBits;
-		startWord = px >> 5;
-		maskR = 0xFFFFFFFF;
-		skipBits = (px+sx) & 0x1F;
-		maskR = ~(maskR << skipBits);
-		endWord = (px+sx) >> 5;
-		if (startWord == endWord)
-		{
-			maskL = maskL & maskR;
-			maskR = maskL;
-		}
-
-		if (col == 0)
-		{	//Set bgd colour to Black (0)
-		    for (j = py; j < py + sy; j++)
-		    {
-				word = DSPL_GET_LWORD(px,j);
-				picture_bw[word] = picture_bw[word] & (~maskL);
-				word++;
-				for (i = startWord+1; i < endWord; i++)
-				{
-					picture_bw[word] = 0;
-					word++;
-				}
-				word = DSPL_GET_LWORD(px+sx,j);
-				picture_bw[word] = picture_bw[word] & (~maskR);
-		    }
-		}
-		else
-		{	//Set bgd colour to White (1)
-		    for (j = py; j < py + sy; j++)
-		    {
-				word = DSPL_GET_LWORD(px,j);
-				picture_bw[word] = picture_bw[word] | (maskL);
-				word++;
-				for (i = startWord+1; i < endWord; i++)
-				{
-					picture_bw[word] = 0xFFFFFFFF;
-					word++;
-				}
-				word = DSPL_GET_LWORD(px+sx,j);
-				picture_bw[word] = picture_bw[word] | (maskR);
-		    }
-		}
-	}
-}
-#endif
-
-#ifdef DSAMPLE_COLOUR
-
-void scrDrawFilledRect (int px, int py, int sx, int sy, U32 col)
-{
-	int i,j;
-	U32 opCol;
-	char* screen;
-
-	//Limit rectangle to the size of the screen.
-	if ((px >= scrX) || (py >= scrY))
-		return;
-
-	if ((col& 0xFF000000) == TRANSPARENT_32BIT_COLOUR)
-		return; //Background colour is transparent
-
-	//Allow -ve sizes but change data round
-	if (sx <0)
-	{
-		px = px+sx;
-		sx = -sx;
-	}
-	if (sy <0)
-	{
-		py = py+sy;
-		sy = -sy;
-	}
-	//Limit rectangle to size of window
-	if (px<win_x1)
-	{
-		sx = sx - win_x1;
-		px = win_x1;
-	}
-	if (py<win_y1)
-	{
-		sy = sy - win_y1;
-		py = win_y1;
-	}
-
-	if (px+sx > win_x2)
-		sx = win_x2 - px;
-	if (py+sy > win_y2)
-		sy = win_y2 - py;
-	if ((sx <= 0) || (sy<=0))
-		return;//cannot draw zero width rectangle.
-
-	opCol = col;
-	//GW Fix - invert colour
-#ifdef USE_PLOT
-    for (j = py; j < py + sy; j++)
-    {
-		for (i = px; i < px+sx; i++)
-			scrPoint(i,j,opCol);
-    }
-#else
-	{
-		U32 lWord,bgdColour;
-		int y;
-		screen = (char*)picture_col;
-		bgdColour = DSPL_GET_BITCOLOUR(col);
-		bgdColourArray[0] = (bgdColour & 0x000000FF);
-		bgdColourArray[1] = (bgdColour & 0x0000FF00) >>8;
-		bgdColourArray[2] = (bgdColour & 0x00FF0000) >>16;
-		bgdColourArray[3] = (bgdColour & 0xFF000000) >>24;
-		for (i=BYTEPERPIXEL;i<sx*BYTEPERPIXEL;i++)
-			bgdColourArray[i] = bgdColourArray[i-BYTEPERPIXEL];
-		for (y=py; y<py+sy; y++)
-		{
-//			int yOfs = (y*LCD_COL+px);
-			int yOfs = DSPL_GET_BYTE(px,y);
-			memcpy(&screen[yOfs] ,bgdColourArray,sx*BYTEPERPIXEL);
-		}
-	}
-#endif//use plot
-}
-#endif
-
-
-#ifdef BSAMPLE
-void scrDrawFilledRect (int px, int py, int sx, int sy, U32 col)
-{
-	scrClearRect (px, py, sx, sy);
-}
-#endif
-#ifdef CSAMPLE
-void scrDrawFilledRect (int px, int py, int sx, int sy, U32 col)
-{
-	scrClearRect (px, py, sx, sy);
-}
-#endif
-
-void scrClearRect (int px, int py, int sx, int sy)
-{
-
-#ifdef BSAMPLE
-	int i,j;
-    int x1, x2;
-    UBYTE m1, m2;
-#endif
-
-#ifdef CSAMPLE
-	int x1;
-	int i,j;
-    int y1s, y2s;
-    int y1f, y2f;
-	U32 m1s,m2s;
-	U32 m1f,m2f;
-
-    int y1, y2;
-	U32 m1,m2;
-#endif
-
-    if (px < 0 || py < 0 || px >= scrX || py >= scrY
-                                       || sx < 0 || sy < 0)
-        return;
-    if (px + sx > scrX)
-        sx = scrX - px;
-    if (py + sy > scrY)
-        sy = scrY - py;
-
-	//Limit rectangle to size of window
-	if (px<win_x1)
-      {
-		sx = sx - win_x1;
-		px = win_x1;
-      }
-	if (py<win_y1)
-	{
-		sy = sy - win_y1;
-		py = win_y1;
-	}
-
-	if (px+sx >win_x2)
-		sx = win_x2 - px;
-	if (py+sy >win_y2)
-		sy = win_y2 - py;
-	if ((sx <= 0) || (sy<=0))
-		return;//cannot draw zero width rectangle.
-
-#ifdef BSAMPLE
-    x1 = px / 8;                        /* first x offset           */
-    x2 = (px + sx) / 8;                 /* last x offset            */
-    m1 = m2 = 0xff;
-    m1 = (UBYTE) ~(m1 >> (px & 7));        /* left mask                */
-    m2 = (UBYTE) (m2 >> ((px + sx) & 7));  /* right mask               */
-    if (x1 == x2)
-        m1 = m2 = m1 | m2;              /* combined masks           */
-    for (j = py; j < py + sy; j++)
-    {
-        displayScr[j][x1] &= m1;
-        for (i = x1 + 1; i < x2; i++)
-            displayScr[j][i] = '\0';
-        displayScr[j][x2] &= m2;
-    }
-#endif
-
-#ifdef CSAMPLE
-    for (i=0;i<sx;i++)
-    	for (j=0;j<sy;j++)
-    		scrPoint(px+i,py+j,0);
-#endif
-
-//June 03, 2005 REF: GSM-ENH-31636 xpradipg
-//CRR 28825:  xpradipg - 11 Feb 2005
-#if (defined(DSAMPLE) || defined(ESAMPLE) || defined(ISAMPLE) || defined(CALLISTO)) //clean up of flag and addition for ISAMPLE
-	scrDrawFilledRect ( px, py, sx, sy, dspl_GetBgdColour());
-#endif
-}
-
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr              |
-| STATE   : code                        ROUTINE : scrText_Unicode      |
-+--------------------------------------------------------------------+
-
-  PURPOSE : draw text
-
-*/
-
-void scrText_Unicode (int x, int y, USHORT *txt)
-{
-  UBYTE current_width=0;
-  USHORT current_code,first_byte_code,second_byte_code;
-  t_font_bitmap* current_bitmap,*error_bitmap;
-
-    if ( y > scrY)
-        return;
-
-    while ((*txt) && (x <= scrX))
-    {
-    current_code = (USHORT)((*txt)<<8)+(USHORT)((*txt)>>8);/*The USHORT is inverted, therefore we have to apply this simple change*/
-    current_bitmap = get_bitmap(current_code);
-		if (!current_bitmap)	/*ASCII codes will be represented*/
-    {
-			first_byte_code = (USHORT)((*txt)&0xFF);
-      error_bitmap = get_bitmap(first_byte_code);
-      if (error_bitmap)
-      {
-        dspl_show_bitmap(x,y,error_bitmap,SHOWBITMAP_INVERT);
-            x += error_bitmap->width;
-      }
-      second_byte_code = (USHORT)((*txt)>>8);
-      error_bitmap = get_bitmap(second_byte_code);
-      if (error_bitmap)
-      {
-        dspl_show_bitmap(x,y,error_bitmap,SHOWBITMAP_INVERT);
-            x += error_bitmap->width;
-      }
-    }
-    else
-    {
-      dspl_show_bitmap(x,y,current_bitmap,SHOWBITMAP_NORMAL);
-          x += current_bitmap->width;
-    }
-      txt++;
-  }
-
-}
-
-
-#ifndef DSAMPLE_COLOUR
-//Should work for DSAMPLE_LITE
-void dspl_show_bitmap(int x,int y,t_font_bitmap* current_bitmap,U32 attr )
-{
- 	USHORT i, j,a,b;
-	int bmpWidthBytes;
-	bmpWidthBytes = (current_bitmap->width + 0x07) >> 3;
-
-	for (i = 0; i < current_bitmap->height; i++)
-    	for (j = 0; j < current_bitmap->width; j++)
- 		{
-			a = (j&(0x07));
-			b = i*(bmpWidthBytes)+((j&0xF8)>>3);
-			if ((attr & SHOWBITMAP_SCALE_2x4) == 0)
-			{
-				if ((attr & SHOWBITMAP_NORMAL_MASK) == SHOWBITMAP_NORMAL)
-					scrPoint(x+j,y+i,current_bitmap->bitmap[b]&(0x80>>a));
-				else
-					scrPoint(x+j,y+i,((UBYTE)~(current_bitmap->bitmap[b]))&(0x80>>a));
-			}
-			else
-			{
-				int x1,y1;
-				int px = (current_bitmap->bitmap[b]&(0x80>>a));
-				for (x1 = x+j*2;x1 < x+j*2+2; x1++)
-					for (y1 = y+i*4; y1<y+i*4+4; y1++)
-						scrPoint(x1,y1,px);
-			}
-		}
-}
-
-#endif
-
-#ifdef DSAMPLE_COLOUR
-void dspl_show_bitmap(int x,int y,t_font_bitmap* current_bitmap,U32 attr )
-{
-	int i, j;
-	int bmpByte;		// which byte in bitmap we are looking at
-	UBYTE bmpMask;		// which bit in the (b+w) bitmap we are looking at
-	UBYTE bitSet;		// is the bit set or clear.
-	U32 bitCol;			// colour of bit in a colour bitmap
-	U32 fCol,bCol, col;/*MC SPR 1526*/
-	int step;
-	int lWord;
-
-	if (current_bitmap==NULL)
-		return;
-	switch (current_bitmap->format)
-	{
-	case BMP_FORMAT_BW_UNPACKED:
-	case BMP_FORMAT_BW_PACKED:
-		//b+w bitmap - deal with both packed and unpacked.
-		bmpMask = 0x80;
-		bmpByte = 0;
-		if (attr & SHOWBITMAP_INVERT) //invert
-		{
-			fCol = dspl_GetBgdColour();
-			bCol = dspl_GetFgdColour();
-		}
-		else
-		{
-			fCol = dspl_GetFgdColour();
-			bCol = dspl_GetBgdColour();
-		}
-		if (fCol==bCol)
-		{
-			fCol = 0x000000FF;
-			bCol =0x00FFFF00;
-		}
-		for (i = 0; i < current_bitmap->height; i++)
-		{
-			for (j = 0; j < current_bitmap->width; j++)
-		    {
-				/*	a = (j&(0x07));
-					b = i*((current_bitmap->bitmapSize)/(current_bitmap->height))+((j&0xF8)>>3);
-					bitSet = current_bitmap->bitmap[b]&(0x80>>a);*/
-		    	bitSet = current_bitmap->bitmap[bmpByte]&(bmpMask);
-
-				/*MC SPR 1526*/
-				if (bitSet)
-					col = fCol;
-				else
-					col = bCol;
-				if (col!=TRANSPARENT_32BIT_COLOUR)/*if colour transparent, don't draw point*/
-				{
-					scrPoint(x+j,y+i,col);
-				}
-				/*MC 1526 end*/
-
-				if (bmpMask <= 1)
-				{
-					bmpMask = 0x80;
-					bmpByte++;
-				}
-				else
-					bmpMask = bmpMask >>1;
-			}
-			// If we have an unpacked bitmaps and we are not already on a new byte, we move to a new byte
-			if ((current_bitmap->format == BMP_FORMAT_BW_UNPACKED) && (bmpMask != 0x80))
-			{
-				bmpMask = 0x80;
-				bmpByte++;
-			}
-		}
-		break;
-	case BMP_FORMAT_256_COLOUR:
-	  //bitmap is 256 colour bitmap - ignore 'attr'
-		bmpByte = 0;
-
-		for (i = 0; i < current_bitmap->height; i++)
-		{
-			for (j = 0; j < current_bitmap->width; j++)
-		    {
-		    	UINT32 col;
-		    	UINT32 colR,colG,colB;
-		    	col = current_bitmap->bitmap[bmpByte];
-				if (col!=TRANSPARENT_256_COL)
-				{
-				bitCol = (((col &0xE0)   <<16) |
-						  ((col &0x1C)	<<11) |
-						  ((col &0x03)	<< 6));/**/
-					//assume 16 bit colour
-					scrPoint(x+j,   y+i,bitCol);
-				}
-				bmpByte = bmpByte+1; //move to next byte
-
-			}
-		}
-		break;
-	case BMP_FORMAT_32BIT_COLOUR:
-	  //bitmap is a 32 bit colour bitmap - ignore 'attr'
-		bmpByte = 0;
-		for (i = 0; i < current_bitmap->height; i++)
-		{
-			for (j = 0; j < current_bitmap->width; j++)
-		    {
-		    	//32 bit bitmap - data is in bytes
-				//bmpByte = (i*current_bitmap->width+j)*4;
-				bitCol = ((current_bitmap->bitmap[bmpByte]   	<<24) |
-						(current_bitmap->bitmap[bmpByte+1]	<<16) |
-						(current_bitmap->bitmap[bmpByte+2]	<<8)  |
-						(current_bitmap->bitmap[bmpByte+3]));
-		    	if ((bitCol & 0xFF000000)!=TRANSPARENT_32BIT_COLOUR)
-					scrPoint(x+j,y+i,bitCol);
-				bmpByte = bmpByte+4; //move to next 32bit word
-			}
-		}
-		break;
-	case BMP_FORMAT_16BIT_LCD_COLOUR:				 //32 bits only first 2 bytes used
-	case BMP_FORMAT_16BIT_LCD_COMPRESSED_COLOUR: //16 bits
-		bmpByte = 0;
-		if (current_bitmap->format == BMP_FORMAT_16BIT_LCD_COMPRESSED_COLOUR)
-			step = 2;
-		else
-			step = 4;
-		for (i = 0; i < current_bitmap->height; i++)
-		{
-			for (j = 0; j < current_bitmap->width; j++)
-		    {
-		    	//32 bit bitmap - data is in bytes
-				//bmpByte = (i*current_bitmap->width+j)*4;
-				bitCol = ((current_bitmap->bitmap[bmpByte+1]     <<8) |
-						(current_bitmap->bitmap[bmpByte]));
-		    	if ((bitCol & 0x0000FFFF)!=TRANSPARENT_16BIT_COL)
-		    	{
-
-					lWord = DSPL_GET_LWORD(x+j,y+i);
-//	July 1, 2005 REF: CRR 32677 - xpradipg
-//	The data present of all 16bit images are in the negated format hence we 
-//    renegate to get it in the right format
-#if (defined(ISAMPLE) ||defined(CALLISTO))
-					bitCol = ~bitCol;
-#endif
-		    		DSPL_SET_BITCOLOUR(x+j,lWord,bitCol,"dsplShowbitmap");
-}
-		    	bmpByte = bmpByte+step; //move to next 32/16bit word
-			}
-		}
-
-		break;
-	default: //Unknown format
-		break;
-	}
-}
-#endif
-
-
-#define NO_COLOUR 0xFF123456
-/*
-+--------------------------------------------------------------------+
-| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr             |
-| STATE   : code                        ROUTINE : dspl_setBorderWidth  |
-+--------------------------------------------------------------------+
-
-  PURPOSE : sets current border width
-
-GW 10/02/03 SPR#1721 - Created
-*/
-static int txtBorder=0;
-int dspl_setBorderWidth(int borderSize)
-{
-	int oldBorder;
-	oldBorder = txtBorder;
-	if ((borderSize >=0) && (borderSize <=4))
-		txtBorder = borderSize;
-	return (oldBorder);
-}
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr             |
-| STATE   : code                        ROUTINE : dspl_getBorderWidth   |
-+--------------------------------------------------------------------+
-
-  PURPOSE : returns current border width
-
-GW 10/02/03 SPR#1721 - Created
-
-*/
-int dspl_getBorderWidth(void)
-{
-	return(txtBorder);
-}
-/*
-+--------------------------------------------------------------------+
-| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr             |
-| STATE   : code                        ROUTINE : scrCharBorderOutput  |
-+--------------------------------------------------------------------+
-
-  PURPOSE : draw text with a border
-
-GW 10/02/03 SPR#1721 - Created
-*/
-void scrCharBorderOutput(t_font_bitmap* chrBmp,
-						unsigned int fgdCol,unsigned int bgdCol,unsigned int borderCol,
-						int bWidth,
-						int px,int py
-						)
-{
-	int x,y,i;
-	int line[10];
-	int ofs;
-	int bgdLine;
-	int col;
-	int emask,pmask;
-	int init_emask = (0x01 << (28+bWidth));
-	int init_pmask = (0x01 << (28+bWidth));
-/*
-
-*/
-	for (i=0;i<10;i++)
-		line[i] = 0;
-
-	//trace("col=",fgdCol, bgdCol,borderCol,0x13);
-
-	//set up border mask
-	for (i=1;i<bWidth*2;i++)
-	{
-		init_emask = init_emask |  (init_pmask >> i) |  (init_pmask << i);
-	}
-	//trace("masks=",init_emask,init_pmask,0,0x12);
-
-	for (y=-bWidth;y<chrBmp->height+bWidth;y++)
-	{
-		//trace("y,ht,bWidth",y,chrBmp->height,bWidth, 0x03);
-		for (i=0;i<bWidth*2;i++)
-			line[i]=line[i+1];
-		line[bWidth*2] =0;
-
-		if (y+bWidth<chrBmp->height)
-		{
-			//work out where we want to display background
-			bgdLine = 0x0FFFFFF0;
-			bgdLine = bgdLine & (bgdLine << (24-chrBmp->width));
-			//Assume bitmaps are unpacked
-			switch((chrBmp->width+7) & (0xF8))
-			{
-			case 0x00:	//no data
-					break;
-			case 0x08: // 1 byte/char
-				ofs = y+bWidth;
-				line[bWidth*2] = ((unsigned int)chrBmp->bitmap[ofs]) << 20;
-				break;
-			case 0x10: // 2 bytes/char
-				ofs = (y+bWidth)*2;
-				line[bWidth*2] = (((unsigned int)chrBmp->bitmap[ofs]) << 20) |
-								(((unsigned int)chrBmp->bitmap[ofs+1]) << 12) ;
-				break;
-			case 0x18: // 3 bytes/char
-				ofs = (y+bWidth)*3;
-				line[bWidth*2] = (((unsigned int)chrBmp->bitmap[ofs]) << 20) |
-								(((unsigned int)chrBmp->bitmap[ofs+1]) << 12)  |
-								(((unsigned int)chrBmp->bitmap[ofs+2]) << 4) ;
-				break;
-			default:// unable to handle bitmaps > 24 pixels wide
-				//output checkerboard pattern as an error
-				if (y &0x01)
-					line[bWidth*2] = 0x0CCCCCC0;
-				else
-					line[bWidth*2] = 0x05555550;
-				break;
-			}
-		}
-		else
-		{
-			line[bWidth*2] = 0x00000000;
-			bgdLine = 0x00;
-		}
-		//trace("line=",line[0],line[1], line[2], 0x13);
-
-		emask = init_emask; // if any of the 3 pixels are set - erase point
-		pmask = init_pmask; // only when pixel is set - plot point.
-
-		for (x=-bWidth;x<chrBmp->width+bWidth;x++)
-		{
-			col = NO_COLOUR;
-			if (line[bWidth] & pmask)
-			{
-				//pixel is in fgd colour
-				col = fgdCol;
-			}
-			else
-			{
-				for (i=0;i<bWidth*2+1;i++)
-				{
-					if (line[i] & emask)
-						col = borderCol;
-				}
-				if ((bgdLine & pmask) && (col == NO_COLOUR))
-				{
-					col = bgdCol;
-				}
-			}
-			if ((col != NO_COLOUR) && (col != TRANSPARENT_32BIT_COLOUR))
-				scrPoint(px+x,py+y,col);
-			emask = emask>>1;
-			pmask = pmask>>1;
-//			trace("masks=",emask,pmask,col,0x13);
-		}
-	}
-}
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr             |
-| STATE   : code                        ROUTINE : scrFastCharOutput    |
-+--------------------------------------------------------------------+
-
-  PURPOSE : draw text avoiding using scrPoint
-
-GW 10/02/03 SPR#1736 - Created
-*/
-#ifdef DSAMPLE_COLOUR
-
-void scrFastCharOutput(t_font_bitmap* chrBmp,
-						unsigned int fColconv,unsigned int bColconv,
-						int x,int y
-						)
-{
-	int fHeight = dspl_GetFontHeight();
-	int ofs = chrBmp->height - fHeight;
-	int width = chrBmp->width;
-	int i,j,k = 0;
-	int sx,sy,ex,ey,lWord;
-	int bitSet;
-	UBYTE mask;
-	int ofsj,nbytes;
-	unsigned int col;
-	//ensure that the data is never wiritten 'off-screen'
-	if (x+width > win_x2)
-		ex = win_x2-x;
-	else
-		ex = width;
-	if (y+fHeight > win_y2)
-		ey = win_y2-y;
-	else
-		ey = fHeight;
-	if (x < win_x1)
-		sx = win_x1-x;
-	else
-		sx = 0;
-	if (y < win_y1)
-		sy = win_y1-y;
-	else
-		sy = 0;
-
-	nbytes = (width+7) >>3;
-	ofs = ofs + sy;
-	for (i=sy;i<ey;i++)
-	{
-		mask = 0x80 >> (sx & 0x07);
-		ofsj = sx >> 3;
-		for (j=sx;j<ex;j++)
-		{
-			//Have we data for the bitmap ?. If not, output a blank line.
-			if (ofs >=0)
-				bitSet = chrBmp->bitmap[ofs*nbytes+ofsj]&(mask);
-			else
-				bitSet = 0;
-
-			if (bitSet)
-				col = fColconv;
-			else
-				col = bColconv;
-			if (col!=TRANSPARENT_32BIT_COLOUR)
-			{
-			    lWord = DSPL_GET_LWORD(j+x,i+y);
-			    DSPL_SET_BITCOLOUR(j+x,lWord,col,"scrFastCharOutput");
-			}
-			mask = mask >> 1;
-			if (mask==0)
-			{
-				ofsj++;
-				mask = 0x80;
-			}
-		}
-		ofs++;
-	}
-}
-#endif
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr              |
-| STATE   : code                        ROUTINE : scrCharOutput        |
-+--------------------------------------------------------------------+
-
-  PURPOSE : draw text
-
-GW 10/02/03 SPR#1736 - Created
-*/
-void scrCharOutput(t_font_bitmap* chrBmp,
-						unsigned int fCol,unsigned int bCol,
-						int x,int y,
-						int wChar, int hChar
-						)
-{
-	int fHeight = dspl_GetFontHeight();
-	int ofs = chrBmp->height - fHeight;
-	int width = chrBmp->width;
-	int i,j,k = 0;
-	int bitSet;
-	UBYTE mask;
-	int ofsj,nbytes;
-	unsigned int col;
-	int shiftj;
-	ofs = chrBmp->height - fHeight;
-	width = chrBmp->width;
-	k = 0;
-	for (i=0;i<fHeight;i++)
-	{
-		k = 0;
-		nbytes = (width+7) >>3;
-		for (j=0;j<width;j++)
-		{
-			shiftj= j & 0x07;
-			ofsj = j >> 3;
-			//Have we data for the bitmap ?. If not, output a blank line.
-			if (ofs >=0)
-				bitSet = chrBmp->bitmap[ofs*nbytes+ofsj]&(0x80>>shiftj);
-			else
-				bitSet = 0;
-
-			if (bitSet)
-				col = fCol;
-			else
-				col = bCol;
-			if (col!=TRANSPARENT_32BIT_COLOUR)
-			{
-				if (!hChar)
-					scrPoint(k+x,i+y,col);
-				else
-				{
-					scrPoint(k+x,i*2+y,col);
-					scrPoint(k+x,i*2+1+y,col);
-				}
-				if (wChar)
-				{
-					if ((j>=1) && (j<=wChar))
-					{	//for j=1,2,3 - plot 2 pixels
-						k++;
-						if (!hChar)
-							scrPoint(k+x,i+y,col);
-						else
-						{
-							scrPoint(k+x,i*2+y,col);
-							scrPoint(k+x,i*2+1+y,col);
-						}
-					}
-				}
-			}
-			k++;
-		}
-		ofs++;
-	}
-}
-
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr              |
-| STATE   : code                        ROUTINE : dspl_ScrText         |
-+--------------------------------------------------------------------+
-
-  PURPOSE : draw a line of ascii/unicode text
-
-GW 18/09/01 - Made invert flag local to file not procedure
-GW 10/02/03 SPR#1721	Added code to call separate procedure if a border is required.
-						Removed existing 'border' code.
-GW 14/02/03 SPR#1736 - Split code into separate procedures
-						Modified error display code to output ascii characters of the code if no
-						matching bitmap is found.
-*/
-void dspl_ScrText (int x, int y, char *txt, int style)
-{
-	int nChar = 0;
-    int i, j, k;
-	t_font_bitmap* chrBmp;
-	t_font_bitmap* errBmp[2] = {NULL,NULL};
-	int str1, str2;
-	int border = 0;
-	int shadow = 0;
-	int fHeight;
-	int wChar,hChar,shadowHt;
-	unsigned int fCol,bCol,borderCol,shadowCol,fColconv,bColconv;
-	unsigned int col;
-	int startX;
-    USHORT code;
-
-	startX = x;
-	shadowCol = 0;
-	borderCol = 0;
-	border = dspl_getBorderWidth();
-	//default to wide chars (for the moment)
-	if (style & TXT_STYLE_WIDECHAR)
-		wChar = 3;
-	else
-		wChar = 0;
-	if (style & TXT_STYLE_HIGHCHAR)
-		hChar = 1;
-	else
-		hChar = 0;
-
-	//Set-up default colours
-	fCol = dspl_GetFgdColour();
-	bCol = dspl_GetBgdColour();
-	switch (style & TXT_STYLE_MASK)
-    {
-	case TXT_STYLE_NORMAL:	//Normal
-	default:
-		break;
-	case TXT_STYLE_INVERT:	//Invert
-		fCol = dspl_GetBgdColour();
-		bCol = dspl_GetFgdColour();
-		break;
-	case TXT_STYLE_HIGHLIGHT:	//highlight - colour background of selected item in differently.
-		bCol = dspl_GetHighlightColour();
-		break;
-	case TXT_STYLE_BORDER:	// 1 pixelborder
-		if (border==0)
-			border = 1;
-		break;
-	case TXT_STYLE_2PIXEL_BORDER:	// 2 pixelborder
-		if (border==0)
-			border = 2;
-		break;
-	case TXT_STYLE_3PIXEL_BORDER:	// 3 pixelborder
-		if (border==0)
-			border = 3;
-		break;
-	case TXT_STYLE_4PIXEL_BORDER:	// 4 pixelborder
-		if (border==0)
-			border = 4;
-		break;
-	case TXT_STYLE_SHADOW1: //shadow
-		shadow = 1;
-		break;
-	case TXT_STYLE_SHADOW2: //deeper shadow
-		shadow = 2;
-		break;
-	}
-
-	if (fCol==bCol)
-	{
-		fCol = 0x00FF0000;
-		bCol = 0x0000FFFF;
-	}
-	if (border)
-	{
-		borderCol = dspl_GetBorderColour();
-		if (borderCol == fCol)
-		{	//A border colour the same as the text colour - get a contrasting colour
-			borderCol = dspl_GetContrastColour(fCol);
-		}
-	}
-	else
-		borderCol = 0;
-
-	if (shadow)
-		shadowCol = dspl_GetShadowColour();
-	else
-		shadowCol = 0;
-
-	//	SH - modified because it doesn't allow text to start off the screen
-	// GW - allow text to start off-screen but finish if completely off-screen
-    if (y > scrY)
-        return;
-	if (txt ==NULL)
-		return;
-
-	fHeight = dspl_GetFontHeight();
-	if (hChar)
-		shadowHt = fHeight*2;
-	else
-		shadowHt = fHeight;
-
-	//For faster operation - precalculate colours
-#ifdef DSAMPLE_COLOUR
-	if (fCol!=TRANSPARENT_32BIT_COLOUR)
-		fColconv = DSPL_GET_BITCOLOUR(fCol);
-	else
-		fColconv = fCol;
-	if (bCol!=TRANSPARENT_32BIT_COLOUR)
-		bColconv = DSPL_GET_BITCOLOUR(bCol);
-	else
-		bColconv = bCol;
-#endif
-	code = 0xFFFF;
-    while ((code !=0) &&(x <= scrX))
-    {
-    	nChar++;
-	    /*mc SPR 1319*/
-    	if (style &TXT_STYLE_UNICODE)
-    	{
-    		str1 = *txt;
-    		str2 = *(txt+1);
-    		code = ((str1<<8)&0xFF00) | (str2&0x00ff);
-    	}
-    	else/*mc end*/
-    	{
-    		str1 = *txt;
-    		str2 = 0x00;
-    		/*SPR 1508, convert ASCII char to unicode before drawing it*/
-    		code = translation_ascii_2_unicode[*txt];
-    	}
-    	if (code != 0)
-		{
-			chrBmp = get_bitmap(code);
-			if (chrBmp == NULL)
-			{
-				errBmp[0] = get_bitmap(str1);
-				errBmp[1] = get_bitmap(str2);
-			}
-#ifdef MMI_TRACE
-			{
-				char bfr[40];
-				if ((chrBmp==NULL) || (chrBmp->code==0xFFFF))
-				{
-					sprintf(bfr,"Undefined bitmap for 0x%04X",code);
-					mmi_trace(bfr);
-				}
-			}
-#endif
-		}
-    	else //end of string reached
-			chrBmp =NULL;
-		if (chrBmp != NULL)
-		{
-			if (border)
-			{
-				scrCharBorderOutput(chrBmp,fCol,bCol,borderCol,border,x,y);
-			}
-#ifdef DSAMPLE_COLOUR
-			else if ((!hChar) && (!wChar))
-			{	//GW 28/11/02 - for speed, don't use 'scrPoint'
-				//NB Code is only correct for a D-sample
-				scrFastCharOutput(chrBmp,fColconv,bColconv,x,y);
-			}
-#endif //DSAMPLE_COLOUR
-			else
-			{
-				scrCharOutput(chrBmp,fCol,bCol,x,y,wChar,hChar);
-			}
-		    x = x + chrBmp->width + wChar; //add 3 for 'wide' chars
-		    //If there is a pixel border between chars at the moment -
-		    x = x+border;
-		}
-		else if (code!=0)
-		{	//We have no bitmap - display ascii equivalent
-			for (i=0;i<2;i++)
-			{	if (errBmp[i]!= NULL)
-				{
-					scrCharOutput(errBmp[i],fCol,bCol,x,y,wChar,hChar);
-				    x = x + errBmp[i]->width + wChar;
-				    errBmp[i] = NULL;
-				}
-			}
-		}
-		/*MC SPR 1319*/
-		if (style &TXT_STYLE_UNICODE)
-			txt+=2;
-		else
-		/*mc end*/
-			txt++;
-	}
-    if (shadow)
-	{
-		for (i=0;i<shadowHt;i++)
-		{
-			for (k=0;k<shadow;k++)
-				scrPoint(x+k,i+y+k,shadowCol);
-		}
-		for (j=startX;j<x;j++)
-		{
-			for (k=0;k<shadow;k++)
-				scrPoint(j+1+k,shadowHt+y+k, shadowCol);
-		}
-	}
-#ifdef MMI_TRACE
-
-	{
-		char bfr[40];
-		sprintf(bfr,"Nchr=%d (%d,%d)",nChar,x,y);
-		mmi_trace(bfr);
-	}
-#endif
-}
-
-
-void scrText (int x, int y, char *txt)
-{
-	//Display non-inverted text
-	dspl_ScrText (x,y, txt, TXT_STYLE_NORMAL);
-}
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
-| STATE   : code                        ROUTINE : scrText_Invert_Unicode|
-+--------------------------------------------------------------------+
-
-  PURPOSE : draw text inverted
-
-*/
-
-void scrText_Invert_Unicode (int x, int y, USHORT *txt)
-{
-  UBYTE current_width=0;
-  USHORT current_code,first_byte_code,second_byte_code;
-  t_font_bitmap* current_bitmap,*error_bitmap;
-    if (x < 0 || y < 0 || y + 12 > scrY)
-        return;
-
-
-
-    while ((*txt) && (x + current_width <= scrX))
-    {
-    current_code = (USHORT)((*txt)<<8)+(USHORT)((*txt)>>8);/*The USHORT is inverted, therefore we have to apply this simple change*/
-    current_bitmap = get_bitmap(current_code);
-		if (!current_bitmap)	/*ASCII codes will be represented*/
-    {
-      first_byte_code = (USHORT)((*txt)&0xFF);
-      error_bitmap = get_bitmap(first_byte_code);
-      if (error_bitmap)
-      {
-        dspl_show_bitmap(x,y,error_bitmap,SHOWBITMAP_INVERT);
-            x += error_bitmap->width;
-      }
-      second_byte_code = (USHORT)((*txt)>>8);
-      error_bitmap = get_bitmap(second_byte_code);
-      if (error_bitmap)
-      {
-        dspl_show_bitmap(x,y,error_bitmap,SHOWBITMAP_INVERT);
-            x += error_bitmap->width;
-      }
-
-    }
-    else
-    {
-      dspl_show_bitmap(x,y,current_bitmap,SHOWBITMAP_INVERT);
-          x += current_bitmap->width;
-    }
-      txt++;
-  }
-
-}
-
-
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
-| STATE   : code                        ROUTINE : scrText_Invert     |
-+--------------------------------------------------------------------+
-
-  PURPOSE : draw text inverted
-
-*/
-
-void scrText_Invert (int x, int y, char *txt)
-{
-	//Display inverted text
-	dspl_ScrText (x,y, txt, TXT_STYLE_INVERT);
-}
-
-
-EXTERN UBYTE   dspl_str_length(char * str)
-{
-  UBYTE count=0;
-  USHORT* current;
-
-  if (dspl_get_char_type() == DSPL_TYPE_ASCII)
-        return (strlen(str));
-  else
-  {
-    current = (USHORT*) str;
-    while (*current)
-    {
-      count++;
-      current++;
-    }
-    return count;
-  }
-}
-
-
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
-| STATE   : code                        ROUTINE : scrLine            |
-+--------------------------------------------------------------------+
-
-  PURPOSE : draw line
-
-*/
-
-void scrLine (int x1, int y1, int x2, int y2)
-{
-    int x, y, dx, dy, c1, c2, err, swap = 0;
-	U32 fCol;
-
-    if (x1 < 0 || x1 >= scrX || x2 < 0 || x2 >= scrX ||
-        y1 < 0 || y1 >= scrY || y2 < 0 || y2 >= scrY)
-        return;
-	fCol = dspl_GetFgdColour();
-    dx = x2 - x1; dy = y2 - y1;
-    if (((dx < 0) ? -dx : dx) < ((dy < 0) ? -dy : dy))
-    {
-        swap = 1;                       /* take the long way        */
-        x = x1; x1 = y1; y1 = x;
-        x = x2; x2 = y2; y2 = x;
-    }
-    if (x1 > x2)
-    {
-        x = x1; x1 = x2; x2 = x;        /* always move to the right */
-        y = y1; y1 = y2; y2 = y;
-    }
-
-    dx = x2 - x1; dy = y2 - y1;
-    c1 = dy * 2; dy = 1;
-    if (c1 < 0)
-    {
-        c1 = -c1;
-        dy = -1;
-    }
-    err = c1 - dx; c2 = err - dx;
-    x = x1; y = y1;
-    while (x <= x2)
-    {
-        scrPoint(swap?y:x,swap?x:y,fCol);
-        x++;
-        if (err < 0)
-            err += c1;
-        else
-        {
-            y += dy;
-            err += c2;
-        }
-    }
-
-    if (internal)
-        return;
-}
-
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
-| STATE   : code                        ROUTINE : scrRect            |
-+--------------------------------------------------------------------+
-
-  PURPOSE : draw rectangle
-
-*/
-
-void scrRect (int px, int py, int sx, int sy)
-{
-    internal = 1;
-    scrLine(px,py,px+sx,py);
-    scrLine(px,py+sy,px+sx,py+sy);
-    scrLine(px,py,px,py+sy);
-    internal = 0;
-    scrLine(px+sx,py,px+sx,py+sy);
-}
-
-
-
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
-| STATE   : code                        ROUTINE : scrFntSelect       |
-+--------------------------------------------------------------------+
-
-  PURPOSE : select the current font
-
-*/
-
-int scrFntSelect (int font)
-{
-    return 1;                           /* always OK                */
-}
-
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
-| STATE   : code                        ROUTINE : scrFntHeight       |
-+--------------------------------------------------------------------+
-
-  PURPOSE : get height of current font
-
-*/
-
-int scrFntHeight (void)
-{
-#ifdef LSCREEN
-	return 16;
-#endif
-
-  if (dspl_char_type == DSPL_TYPE_ASCII)
-    return 8;
-  else
-    return 12;
-}
-
-
-
-//Really get information about
-//	(1) how many chars we can have on a line
-//  (2) how many pixels are in a string
-//GW SPR#1721 - Include a border in the calculations
-int scrGetRealLength(char *str, int* totChar, int* totPixel)
-{
-	int nChar=0;
-	int nPixel=0;
-	int maxChar,maxPixel;
-	t_font_bitmap* bmp;
-	int strEnd;
-	USHORT str16,str1,str2;
-	UBYTE current_display_char_type = dspl_char_type;/*mc SPR 1319*/
-	int border;
-
-	//Calculate extra pixels allowed for the border
-	border = dspl_getBorderWidth();
-
-	if (*totChar<=0) //assume full str required.
-		maxChar = 256; //stop after 256 chars
-	else
-		maxChar = *totChar; //stop after 256 chars
-	if (*totPixel<=0)// assume no limit to len - limit at 2x screen
-		maxPixel = 2*scrX;
-	else
-		maxPixel = *totPixel;
-	strEnd = FALSE;
-	/*MC SPR 1319, char type is unicode if unicode tag*/
-	if(str[0] == 0x80)
-	{	current_display_char_type = DSPL_TYPE_UNICODE;
-		str+=2; /*ignore first char SPR 1442*/
-		nChar+=2;/*MC*/
-	}
-	else /*SPR 1526, assume if no unicode tag, we're in ASCII*/
-		current_display_char_type = DSPL_TYPE_ASCII;
-	/*MC 1526, end*/
-	while (!strEnd)
-	{
-		if (current_display_char_type == DSPL_TYPE_ASCII)
-		{
-			str16 = *str;
-			str++;
-		}
-		else
-		{
-			str1 = *str;
-			str++;
-			str2 = *str;
-			str++;
-			str16 = ((str1 << 8) & 0xFF00) + (str2 & 0x00FF);/*MC, fixed bitmask 1319*/
-
-		}
-		if (str16 == 0)
-		{	//reached end of string.
-			strEnd = TRUE;
-			bmp = NULL;
-		}
-		else
-			bmp = get_bitmap(str16);
-		if (bmp!= NULL)
-		{
-			if (nPixel +bmp->width < maxPixel)
-			{
-				nPixel = nPixel + bmp->width+border;
-				if (current_display_char_type == DSPL_TYPE_ASCII)
-					nChar++;
-				else
-					nChar+=2;
-				if (nChar >= maxChar)
-					strEnd = TRUE;
-			}
-			else
-				strEnd=TRUE;
-		}
-	}
-	*totChar = nChar;
-	*totPixel = nPixel;
-
-	return (nPixel);
-}
-
-
-
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
-| STATE   : code                        ROUTINE : scrFntGetFit       |
-+--------------------------------------------------------------------+
-
-  PURPOSE : number of string chars that fit into the line
-
-*/
-
-
-int scrFntGetFit (char *tp, int lineWidth)
-{
-	int totChar = 0;
-
-//	scrGetRealLength(tp, &totChar, &lineWidth);
-//	return (totChar);
-
-
-  if (dspl_char_type == DSPL_TYPE_ASCII)
-    return (lineWidth /6);
-  else
-      return (lineWidth / 12);
-}
-
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
-| STATE   : code                        ROUTINE : scrFntGetLen       |
-+--------------------------------------------------------------------+
-
-  PURPOSE : number of pixel used by first n string chars
-
-*/
-
-
-
-
-int scrFntGetLen(char *tp, int nChars)
-{
-	int lineWidth = 0;
-
-
-  int count=0;
-
-  if (dspl_char_type == DSPL_TYPE_ASCII)
-      return (nChars * 6);
-  else
-  {
-    USHORT* temp = (USHORT*)tp;
-
-    while (*temp)
-    {
-      UBYTE first_byte = (UBYTE)(*temp);
-      if (first_byte)
-        count+=12;
-      else
-        count+=6;
-      temp++;
-    }
-      return count;
-  }
-}
-
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
-| STATE   : code                        ROUTINE : scrBmpDraw         |
-+--------------------------------------------------------------------+
-
-  PURPOSE : draw bitmap
-
-*/
-
-int scrBmpDraw (int px, int py, int sx, int sy,
-                    int ix, char *bm, int mode)
-{
-    int i, j;
-    unsigned char m;
-
-    if (px < 0 || px >= scrX || py < 0 || py >= scrY
-                                       || sx < 0 || sy < 0)
-        return 0;
-    if (px + sx > scrX)
-        sx = scrX - px;
-    if (py + sy > scrY)
-        sy = scrY - py;
-
-    m = 0x80;
-    bm += (sx * sy * ix) / 8;
-    for (j = 0; j < sy; j++)
-    {
-        for (i = 0; i < sx; i++)
-        {
-            scrPoint(px+i,py+j,*bm & m);
-            m >>= 1;
-            if (!m)
-            {
-                m = 0x80;
-                bm++;
-            }
-        }
-        if (m != 0x80)
-        {
-            m = 0x80;
-            bm++;
-        }
-    }
-
-    return 0;
-}
-
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
-| STATE   : code                        ROUTINE : scrCurType         |
-+--------------------------------------------------------------------+
-
-  PURPOSE : set cursor type (0 = no cursor)
-
-*/
-
-void scrCurType (int type)
-{
-}
-
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
-| STATE   : code                        ROUTINE : scrCursor          |
-+--------------------------------------------------------------------+
-
-  PURPOSE : set cursor at specified position
-
-*/
-
-void scrCursor (int x, int y)
-{
-    scrLine(x,y+7,x+5,y+7);
-}
-
-
-/*
-+--------------------------------------------------------------------+
-| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
-| STATE   : code                        ROUTINE : scrPoint           |
-+--------------------------------------------------------------------+
-
-  PURPOSE : draw point
-
-*/
-
-//Return colour of pixel at point (px,py) or zero if not on screen.
-static int getScrPoint (int px, int py)
-{
-#ifdef BSAMPLE
-    unsigned char m = 0x80;
-#endif //BSAMPLE
-#ifdef CSAMPLE
-	U32 m2;
-#endif //CSAMPLE
-	int x1,y1;
-	int lWord; // index for colour word
-	U32 opWord; //olour word
-	U32 op_col;
-	U32 picCol;
-
-    if (px < 0 || py < 0 || px >= scrX || py >= scrY)
-        return (0);
-
-#ifdef BSAMPLE
-    m >>= px & 7;                       // mask
-    px >>= 3; // x offset
-	if (displayScr[py][px] & m)
-		return (0x00FFFFFF);
-	else
-		return (0x00000000);
-
-#endif //BSAMPLE
-
-#ifdef CSAMPLE
-    //Display plots data from Right to Left
-    // - reverse x-coordinate
-    //Also display seems to be 16 pixels down the screen -
-    //plot points at y=(y-16) mod 64
-    x1 = (scrX-1)-px;
-    y1 = (py+48) & 63; //(py-16) ;
-    //Display is in columns for TI drivers
-	m2 = 0x80000000;
-    m2 = m2 >> (y1 & 31); //shift m2 by 0-31
-    y1 = y1 >> 5; // 32bits/word
-	return (picture_bw[lWord] & m2);
-#endif //CSAMPLE
-
-#ifdef DSAMPLE_COLOUR
-	//i/p colour is 32 bit - reduce to 16
-    x1 = px;
-    y1 = py;
-    lWord = y1*LCD_ROW_NUM_LWORDS + x1;
-    //GW invert pic bits
-	opWord = ~picture_col[lWord];
-
-	//Change from 16(8) bits to 32(24) bits
-#ifdef DSAMPLE_COLOUR32
-	opWord = opWord & 0x0000FFFF;
-#endif //DSAMPLE_COLOUR32
-#ifdef DSAMPLE_COLOUR16
-#ifdef PIXEL_0_IN_LSW
-	if (lWord & 0x01)
-		opWord = ((opWord >>16) & 0x0000FFFF);
-	else
-		opWord = ((opWord     ) & 0x0000FFFF);
-#else
-	if (lWord & 0x01)
-		opWord = ((opWord     ) & 0x0000FFFF);
-	else
-		opWord = ((opWord >>16) & 0x0000FFFF);
-#endif
-#endif //DSAMPLE_COLOUR16
-	return(DSPL_GET_PIXELCOLOUR(opWord));
-#endif //DSAMPLE_COLOUR
-
-#ifdef DSAMPLE_LITE
-	//i/p colour is 32 bit - reduce to 16
-    {
-    	int xmask;
-    	x1 = px;
-    	y1 = py;
-    	lWord = DSPL_GET_LWORD(x1,y1); //y1*LCD_ROW_NUM_LWORDS + x1 >> 5;
-    	xmask = 0x01 << (x1 & 0x1F);
-    	//GW invert pic bits
-		if (picture_bw[lWord] & xmask)
-			opWord = 0x00FFFFFF;
-		else
-			opWord = 0x00000000;
-		//Change from 16(8) bits to 32(24) bits
-	}
-	return (opWord);
-#endif //DSAMPLE_LITE
-
-}
-
-
-static int checkPixelColour(int px, int py, U32 col)
-{
-	U32 currCol;
-
-	currCol = getScrPoint (px, py);
-	if ((currCol & 0x00F8FCF8) == (col & 0x00F8FCF8))//16bit colour
-		return (1); //colours match
-	else
-		return (0); //colours are different
-}
-
-unsigned int translucence(unsigned int ipCol,unsigned int picCol)
-{
-	int trans1,trans2;
-	U32 col_red1,col_green1,col_blue1;
-	U32 col_red2,col_green2,col_blue2;
-	U32 rmerge,gmerge,bmerge;
-	U32 opCol;
-
-	//0xFF=transparent	(col=picCol)
-	//0x00=solid 		(col=ipCol)
-	trans1 = (ipCol >>24) & 0xFF;
-	trans2 = 255-trans1;
-	if (trans1 == 0x00)
-		return (ipCol);
-	else if (trans1 == 0xFF)
-		return (picCol);
-
-	//Read in colour from 24 bits
-	col_red1  	= (ipCol & 0x00FF0000) >> 8;
-	col_green1	= (ipCol & 0x0000FF00) >> 8;
-	col_blue1	= (ipCol & 0x000000FF);
-
-	//Read in colour from 8 bits
-	col_red2  	= (picCol & 0x00FF0000) >> 8;
-	col_green2	= (picCol & 0x0000FF00) >> 8;
-	col_blue2	= (picCol & 0x000000FF);
-	//red = 0x0000xx00, green = 0x000000xx, blue = 0x000000xx (256x higher than it should be)
-
-	//Round values up
-//	rmerge = (col_red1  *trans1+col_red2  *trans2+0x0FFFF)      & 0x00FF0000;
-//	gmerge = (col_green1*trans1+col_green2*trans2+0x000FF)      & 0x0000FF00;
-//	bmerge =((col_blue1 *trans1+col_blue2 *trans2+0x000FF) >> 8)& 0x000000FF;
-	rmerge = (col_red1  *trans2+col_red2  *trans1+0x1F0000)      & 0x00FF0000;
-	gmerge = (col_green1*trans2+col_green2*trans1+0x001000)      & 0x0000FF00;
-	bmerge =((col_blue1 *trans2+col_blue2 *trans1+0x001000) >> 8)& 0x000000FF;
-
-	opCol = rmerge|gmerge|bmerge;
-	return (opCol);
-}
-
-
-#ifdef BSAMPLE
-static void scrPoint (int px, int py, int col)
-{
-    unsigned char m = 0x80;
-
-    //GW Do not plot if outside of the defined window
-    if (px < win_x1 || py < win_y1 || px >= win_x2 || py >= win_y2)
-        return;
-
-    m >>= px & 7;                       // mask
-    px >>= 3;                           // x offset
-
-    if (col)
-		displayScr[py][px] |= m;
-    else
-    	displayScr[py][px] &= (UBYTE) ~m;
-}
-#endif //BSAMPLE
-
-#ifdef CSAMPLE
-static void scrPoint (int px, int py, int col)
-{
-	U32 m2;
-	int x1,y1;
-	int lWord; // index for colour word
-    if (px < win_x1 || py < win_y1 || px >= win_x2 || py >= win_y2)
-        return;
-    //Display plots data from Right to Left
-    // - reverse x-coordinate
-    //Also display seems to be 16 pixels down the screen -
-    //plot points at y=(y-16) mod 64
-    x1 = (scrX-1)-px;
-    y1 = (py+48) & 63; //(py-16) ;
-    //Display is in columns for TI drivers
-	m2 = 0x80000000;
-    m2 = m2 >> (y1 & 31); //shift m2 by 0-31
-    y1 = y1 >> 5; // 32bits/word
-    lWord = x1*LCD_COL_NUM_LWORDS+y1;
-	if (col)
-		picture_bw[lWord] |= m2;
-	else
-		picture_bw[lWord] &= (U32)(~m2);
-}
-#endif //CSAMPLE
-
-#ifdef DSAMPLE_COLOUR
-void scrPoint (int px, int py, int col)
-{
-	int lWord; // index for colour word
-	U32 bitCol;
-	//i/p colour is 32 bit
-    if (px < win_x1 || py < win_y1 || px >= win_x2 || py >= win_y2)
-        return;
-    lWord = DSPL_GET_LWORD(px,py);
-	bitCol = DSPL_GET_BITCOLOUR(col);
-    DSPL_SET_BITCOLOUR(px,lWord,bitCol,"plot");
-}
-#endif //DSAMPLE_COLOUR
-
-#ifdef DSAMPLE_LITE
-void scrPoint (int px, int py, int col)
-{
-	int m_px;
-	int word ;
-	//i/p colour is 32 bit
-    if (px < win_x1 || py < win_y1 || px >= win_x2 || py >= win_y2)
-        return;
-
-	m_px = 1 << (px & 0x1F);
-	word = DSPL_GET_LWORD(px,py);
-	if (col)
-		picture_bw[word] = picture_bw[word] | m_px;
-	else
-		picture_bw[word] = picture_bw[word] & (~m_px);
-}
-#endif //DSAMPLE_LITE
-
-
-
-/*******************************************************************
- *                                                                 *
- * PART III: LCD Simulation for Windows                            *
- *                                                                 *
- *******************************************************************/
-#if defined (WIN32)
-
-#define LCDE_COL 20
-#define LCDE_ROW 4
-static int screensize_x = 16;	
-static int screensize_y = 4;
-
-#define NULL_TERM   '\0'  /* string termination                   */
-
-static CHAR lcd_screen [LCDE_ROW+2][LCDE_COL+3];
-static CHAR cursor_line[LCDE_COL+3];
-
-static int lcd_cursX, lcd_cursY, lcd_enabled = FALSE;
-
-LOCAL void LCD_Refresh (void)
-{
-  int i;
-  CHAR buf[100];
-
-  for (i=0; i<screensize_y+2; i++)
-  {
-    sprintf (buf, "~LCD~%s", &lcd_screen[i][0]);
-#if defined NEW_FRAME
-    vsi_o_ttrace (0, 0xffff, buf);
-#else
-#endif
-    if (lcd_cursY+1 EQ i)
-    {
-      cursor_line[lcd_cursX+1] = '^';
-      sprintf (buf, "~LCD~%s", cursor_line);
-#if defined NEW_FRAME
-      vsi_o_ttrace (0, 0xffff, buf);
-#else
-#endif
-      cursor_line[lcd_cursX+1] = ' ';
-    }
-    else
-    {
-      if (i < screensize_y+1)
-      {
-        sprintf (buf, "~LCD~%s", cursor_line);
-#if defined NEW_FRAME
-        vsi_o_ttrace (0, 0xffff, buf);
-#else
-#endif
-      }
-    }
-  }
-}
-
-GLOBAL void LCD_Enable (int on)
-{
-  lcd_enabled = (on EQ 1);
-}
-
-GLOBAL void LCD_Clear (void)
-{
-  int r, c;
-
-  if (lcd_enabled)
-  {
-    lcd_cursX = lcd_cursY = 0;
-
-    for (r=1; r<screensize_y+1; r++)
-      for (c=1; c<screensize_x+1; c++)
-        lcd_screen[r][c] = ' ';
-
-    LCD_Refresh ();
-  }
-}
-
-GLOBAL void LCD_Reset (void)
-{
-  int r, c, i;
-
-  memset (cursor_line, ' ', screensize_x+3);
-  cursor_line[0] = cursor_line[screensize_x+1] = '|';
-  cursor_line[screensize_x+2] = NULL_TERM;
-
-  for (r=1; r < screensize_y+1; r++)
-  {
-    lcd_screen[r][0] = '|';
-    lcd_screen[r][screensize_x+1] = '|';
-  }
-  for (c=1; c < screensize_x+1; c++)
-  {
-    lcd_screen[0][c] = '-';
-    lcd_screen[screensize_y+1][c] = '-';
-  }
-
-  lcd_screen[0][0]                 = '+';
-  lcd_screen[screensize_y+1][0]         = '+';
-  lcd_screen[0][screensize_x+1]         = '+';
-  lcd_screen[screensize_y+1][screensize_x+1] = '+';
-
-  for (i=0; i<screensize_y+2; i++)
-    lcd_screen [i][screensize_x+2] = NULL_TERM;
-
-  lcd_enabled = TRUE;
-
-  LCD_Clear ();
-
-  lcd_enabled = FALSE;
-}
-
-GLOBAL void LCD_WriteString (int row, int col, CHAR *s)
-{
-  if (s == NULL)
-  {
-    TRACE_EVENT("LCD_WriteString got NULL Pointer as Text");
-    return;
-  }
-  if (lcd_enabled)
-  {
-    int len = strlen (s);
-
-    if (row < screensize_y AND col < screensize_x)
-    {
-      if ((col + len) > screensize_x)
-      {
-        /* clip the string */
-        s[(len = screensize_x-col)] = NULL_TERM;
-      }
-      memcpy (&lcd_screen[row+1][col+1], s, len);
-      LCD_Refresh ();
-    }
-  }
-}
-
-GLOBAL void LCD_Cursor (int row, int col)
-{
-  if (lcd_enabled)
-  {
-    if (row < screensize_y AND col < screensize_x)
-    {
-      lcd_cursY = row;
-      lcd_cursX = col;
-      LCD_Refresh ();
-    }
-  }
-}
-
-GLOBAL void LCD_SetPower (void)
-{
-}
-
-GLOBAL void LCD_PixBlt (int x, int y, int w, int h, char *bmp)
-{
-}
-
-/*
- * Stimulation of the lcd driver
- */
-GLOBAL void lcd_test (UBYTE mode)
-{
-  TRACE_EVENT ("Display Redirection activated");
-  mtkEnabled = mode;
-  scrInit();
-  if (mtkEnabled EQ 2)
-  {
-    scrY = 64;
- }
-}
-#endif /* WIN32 */
-
-//Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg
-//New function added to control the refreshing of the LCD
-/*******************************************************************************
-
- $Function:    	dspl_refresh
- $Description:	controls the refresh of the LCD from MMI
- $Returns:		the current status of refresh
- $Arguments:	State - indicating the state to be set to.
-
-*******************************************************************************/
-int	dspl_control(int state)
-{
-	//	Nov 04, 2005 DR: OMAPS00052595
-#ifndef _SIMULATION_
-
-
-#ifdef FF_MMI_NEW_LCD_API_MIG
-	static BOOL refresh_status = DSPL_ACCESS_ENABLE;
-	T_LCD_REFCONTROL status;
-	TRACE_EVENT_P1("dspl_referesh() - state =>%d",state);	
-
-
-	if(state == refresh_status)
-		return refresh_status;
-//	Nov 02, 2005 DR: OMAPS00051051 - xpradipg
-//	Check for the state is made before the assignment
-	if( state != DSPL_ACCESS_QUERY)
-		refresh_status = state;
-#endif
-		
-	switch(state)
-	{
-		case DSPL_ACCESS_DISABLE:
-#ifdef FF_MMI_NEW_LCD_API_MIG
-			status = REF_DISABLED;
-			TRACE_EVENT("calling lcd_control with disable lcd");
-			lcd_control(DISPLAY_MAIN_LCD,LCD_REFCONTROL, (void *)&status);
-			return refresh_status;
-#endif			
-		case DSPL_ACCESS_ENABLE:
-#ifdef FF_MMI_NEW_LCD_API_MIG		
-			status = REF_ENABLED;
-			TRACE_EVENT("calling lcd_control with disable lcd");
-			lcd_control(DISPLAY_MAIN_LCD,LCD_REFCONTROL, (void *)&status);
-#else
-			r2d_g_refresh_disabled = state;
-#endif			
-		case DSPL_ACCESS_QUERY:	
-		default:
-#ifdef FF_MMI_NEW_LCD_API_MIG
-			return refresh_status;
-#else
-			return r2d_g_refresh_disabled;
-#endif
-	}
-#else
-	return 0;
-#endif
-
-}	
-
-#endif /* MMI != 0 */
+/*
++-----------------------------------------------------------------------------
+|  Project :
+|  Modul   :  display.c
++-----------------------------------------------------------------------------
+|  Copyright 2002 Texas Instruments Berlin, AG
+|                 All rights reserved.
+|
+|                 This file is confidential and a trade secret of Texas
+|                 Instruments Berlin, AG
+|                 The receipt of or possession of this file does not convey
+|                 any rights to reproduce or disclose its contents or to
+|                 manufacture, use, or sell anything it may describe, in
+|                 whole, or in part, without the specific written consent of
+|                 Texas Instruments Berlin, AG.
++-----------------------------------------------------------------------------
+|  Purpose :
++-----------------------------------------------------------------------------
+*/
+/*
+    Nov 04, 2005 DR: OMAPS00052595
+	Description: Simulation build fails for Locosto
+	Solution	: This function is not being used for the simulation build hence
+		the contents of the same are put under the compiler flag #ifndef WIN32
+
+
+	Nov 02, 2005 DR: OMAPS00051051 - xpradipg
+	Description:The display is cluttered when the camera is in the viewfinder 
+			    mode for a long time
+	Solution: The check for requested state and current state is moved before
+			the assignment of the current state with the requested state.
+	
+	Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg
+	Description: Locosto: MIgration to New LCD APIs
+	Solution: Migrated to New APIs by replacing the old driver APIs with
+	corresponding New LCD APIs
+       xrashmic 22 Aug, 2004 MMI-SPR-32798
+       Adding the support for screen capture using a dynamically assigned key.
+   
+	July 1, 2005 REF: CRR 32677 - xpradipg
+	Description: Alignmnet of the display for each row. Send the un negated value to LCD driver
+	Solution: The alignment of the display is corrected by decreasing the number of columns by 1.
+			The negated value is corrected and sent to the driver
+
+	June 03, 2005 REF: GSM-ENH-31636 xpradipg
+	Description:	Change the board ID for Isample to 71 and add new defination
+					for the CALLISTO with baord ID 70
+	Solution:		Add the definition of ALLISTO with board ID 70 and change the
+					board Id to 71 for Isample
+   
+	Mar 30, 2005	REF: CRR 29986	xpradipg
+	Description: Optimisation 1: Removal of unused variables and dynamically
+	allocate/ deallocate mbndata
+	Solution: removed the unused variable pictureCopy_col and the static 
+	qualifier so as to be accessed by the ATB module
+
+
+	CRR 28825:  xpradipg - 11 Feb 2005
+	Description:Extension of GDI-for display of ISample and code cleanup
+	Solution: The code replication for D_Sample and E_sample are removed and a 
+	new	flag is added for the ISample. currently the BOARD ID is set to 70 for
+	CALLISTO and 71 for ISample.
+
+GW 31/01/03 -	Added support for 16 bit LCD buffer -
+					Split DSAMPLE_COLOUR code into DSAMPLE_COLOUR32 (original 32bits/pixel)
+					and DSAMPLE_COLOUR16 (16 bits/pixel - untested)
+				Removed CSAMPLE_COLOUR option
+				Removed 'PLOT' option for D-sample - too slow to be useful
+
+*/
+
+#ifndef DRV_DSPL_C
+#define DRV_DSPL_C
+#endif
+
+/*==== INCLUDES ===================================================*/
+#define ENTITY_CST
+
+#include <string.h>
+#if defined (WIN32)
+#include <stdio.h>
+#endif
+
+#include "typedefs.h"
+#include "gdi.h"
+#include "dspl.h"
+#include "font_bitmaps.h"
+#include "vsi.h"
+#include "custom.h"
+#include "gsm.h"
+#include "prim.h"
+#include "p_mmi.h"
+#include "tok.h"
+#include "cst/cst.h"
+#include "os.h"
+
+#include "rvf/rvf_api.h"
+
+#undef R2D_ENABLED
+#ifndef _SIMULATION_
+
+#if (defined(_TARGET_) && (BOARD!=10) && (BOARD!=34)&& (BOARD!=35)&& (BOARD!=46) && (BOARD !=70) && (BOARD != 71))
+/*
+ * R2D is not supported by EP2 module (BOARD == 10, of customer 6351/36)
+ * and by Avenger2/Perseus1 board (BOARD == 34). (dbachran / 2002-11-27)
+ * and by P2 board (BOARD == 35) and F-sample (BOARD == 46) (rsauer / 2004-05-27)
+ */
+#define R2D_ENABLED
+#endif
+#endif
+#ifdef FF_MMI_NEW_LCD_API_MIG
+#include "lcd_manager.h"
+#endif
+#ifndef _SIMULATION_
+    #ifdef R2D_ENABLED
+        #include "r2d/r2d.h"
+        #include "r2d/r2d_config.h"
+    #endif
+#endif
+/* GW enable/disable trace using the MMI */
+/* NB. Traces are only for diagnostics while developing and must be removed for code deliveries!*/
+/* defining mmi_trace as <empty> will remove them */
+//#define MMI_TRACE
+#define mmi_trace
+//void mmi_trace(char* str);
+/*==== EXPORT =====================================================*/
+#define ENCODE_OFFSET 24
+//define EASY_TEXT_ENABLED
+
+/************************************************************************
+* The following macros define what hardware we are running on and what 	*
+* drivers are being used to drive the display							*
+* BSAMPLE - 84x48 display												*
+* CSAMPLE - 84x48 display												*
+* CSAMPLE_COLOUR - no longer supported									*
+* DSAMPLE - 176x220 display which can be driven as 16 bit colour or b+w	*
+*      DSAMPLE_COLOUR - colour display 									*
+*           DSAMPLE_COLOUR16 - 16 bits per pixel displayed 				*
+*                              NB. This has not been tested at all - it	*
+*                              may not display correctly or may crash	*
+*                              although it does not crash when enabled 	*
+*                              with the 32bit drivers)                	*
+*                                                                       *
+*           DSAMPLE_COLOUR32 - 32 bits per pixel displayed (16 bits are	*
+*								 zero and have no effect)				*
+*      DSAMPLE_LITE - 1 bit per pixel (b+w display)                    	*
+* GW SPR#1840 25/03/03													*
+* Also, the compiler switches have been added to allow us to develop  	*
+* the MMI for a different final format (b+w/smaller display).			*
+* COLOURDISPLAY - If not defined - all output is to be b+w				*
+* LSCREEN - If not defined - screen is 'small' - use the 8x6 font 		*
+*************************************************************************/
+#if (defined(_TARGET_))
+//#if (BOARD==33)
+#if ((BOARD == 8) || (BOARD == 9))
+#define CSAMPLE
+#elif ((BOARD == 40) || (BOARD == 41))
+#define DSAMPLE
+#elif (BOARD == 43)
+#define ESAMPLE
+//June 03, 2005 REF: GSM-ENH-31636 xpradipg
+#elif (BOARD == 70)
+#define CALLISTO
+//CRR 28825:  xpradipg - 11 Feb 2005
+#elif (BOARD == 71)  // LCD enabling of ISAMPLE
+#define ISAMPLE
+#else
+//Other board type
+#define BSAMPLE
+#endif
+#else
+//_TARGET_ not defined
+//Not running on hardware - select the hw for simulation purposes.
+#define BSAMPLE
+
+//Also, if not already disabled - disable trace code
+#ifdef MMI_TRACE
+#undef MMI_TRACE
+#endif
+#endif
+//June 03, 2005 REF: GSM-ENH-31636 xpradipg
+//CRR 28825:  xpradipg - 11 Feb 2005
+#if (defined(DSAMPLE) || defined(ESAMPLE) || defined(ISAMPLE) || defined(CALLISTO))
+  /* For a start, we use exactly the same definitions for E-Sample as we do
+     for D-Sample. IMPORTANT: If the E-Sample LCD differs from D-Sample, the
+     following lines must be properly adapted!
+  */
+  #if (R2D_LCD_DISPLAY == R2D_COLOR)
+    #define DSAMPLE_COLOUR
+    #if (R2D_PIXEL_POS_TO_BIT_POS == 5)
+      #define DSAMPLE_COLOUR32
+    #endif
+    #if (R2D_PIXEL_POS_TO_BIT_POS == 4)
+      #define DSAMPLE_COLOUR16
+    #endif
+  #else
+    #define DSAMPLE_LITE
+    #undef COLOURDISPLAY
+  #endif
+#endif /* ESAMPLE */
+
+#ifdef FF_MMI_NEW_LCD_API_MIG
+	#define DSAMPLE_COLOUR
+	#if ( LCD_PIXEL_FORMAT == RGB565)
+		#define DSAMPLE_COLOUR16
+	#endif
+#endif	
+//Ensure that if the H/W does not support colour, the compiler option is overridden
+//- we can display b+w only on a colour display but not the other way round
+#ifndef DSAMPLE_COLOUR
+#ifdef COLOURDISPLAY
+#undef COLOURDISPLAY
+#endif
+#endif
+
+
+/*
+USE_PLOT -	Defined if we are to use r2d_draw_point to output a display
+			This method will always produce a display (of sorts) but can be very slow
+USE_BLIT_RECT - Defined if we provide a 24 bit colour display and allow the riviera code to
+				translate into the LCD format.
+USE_BUFFER - 	This must be defined if USE_BLIT_RECT is being used. This will require an image
+				of the colour display to be stored in local memory.
+
+If neither are defined then we must create our buffer in the same format as the LCD.
+NB if 'USE_BLIT_RECT' is not defined, any changes to the h/w or driver software will have an
+impact on the code below.
+
+*/
+
+/*==== CONSTANTS ==================================================*/
+//	Mar 30, 2005	REF: CRR 29986	xpradipg
+//	removed the static qualifier to be accessed by the ATB module.
+#ifdef FF_MMI_OPTIM
+const int translation_ascii_2_unicode[256] = {
+#else
+static const int translation_ascii_2_unicode[256] = {
+#endif
+	0x0000, 0x00A4, 0x00d8, 0xFFFF, 0x0394, 0x03A8, 0x00BF, 0x00F8, 0xFFFF, 0xFFFF, 0x000A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
+	0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
+	0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026,0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+	0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+	0x0040,0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+	0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, /* SPR#2034 - SH */
+	0xFFFF, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+	0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
+
+	0xFFFF, 0x00C7, 0x00FC, 0x00E9, 0x00E4, 0x00E0, 0x00E5, 0xFFFF, 0xFFFF, 0xFFFF, 0x00E8, 0xFFFF, 0xFFFF, 0x00EC, 0x00C4, 0x00C5, 
+	0x00C9, 0x00E6, 0x00C6, 0xFFFF, 0x00F6, 0x00F2, 0xFFFF, 0x00F9, 0xFFFF, 0x00D6, 0x00DC, 0xFFFF, 0x00A3, 0x00A5, 0xFFFF, 0xFFFF,
+	0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x00F1, 0x00D1, 0xFFFF, 0xFFFF, 0x00A7, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x00A1, 0xFFFF, 0xFFFF,
+	0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
+	0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
+	0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
+	0xFFFF, 0x00DF, 0x0393, 0x03A0, 0x03A3, 0xFFFF, 0xFFFF, 0xFFFF, 0x03A6, 0x0398, 0x03A9, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x039B, 
+	0x039E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF
+	
+	};
+/*==== VARIABLES ==================================================*/
+//EXTERN UBYTE        extDisplay;          /* external display ? */
+EXTERN UBYTE        extDisplay;          /* external display ? */
+GLOBAL UBYTE dspl_char_type;
+
+/*
+ * We don't need display.c with ACI-only builds, but CST references extDisplay
+ * above, so we need to keep that one for now.
+ * Only process this file, if MMI is set to 1 (SMI) or 2 (BMI).
+ */
+#if (MMI != 0)
+
+GLOBAL dspl_DevCaps displayData;
+#if defined (NEW_FRAME)
+EXTERN T_HANDLE       hCommL1;
+#else
+EXTERN T_VSI_CHANDLE  hCommL1;
+#endif
+
+static int scrEnabled = 0;              /* screen update enable     */
+static int txtInvert = 0;         //Text invert
+
+static T_HANDLE mmi_handle;
+static T_HANDLE hCommMMI = VSI_ERROR;
+
+/*==== FUNCTIONS ==================================================*/
+/*
+ * send to external Display
+ */
+LOCAL void dspl_SendDisplayReq (USHORT x, USHORT y, char *text);
+GLOBAL void kbd_test (UBYTE key);
+
+/*
+ * TI driver functions
+ */
+extern void LCD_SetPower        (void);
+extern void LCD_Reset           (void);
+extern void LCD_Enable          (int);
+extern void LCD_Clear           (void);
+extern void LCD_WriteString     (int y, int x, char *s);
+extern void LCD_PixBlt          (int x, int y, int w, int h, char *bmp);
+extern void LCD_DrawIcon        (int x, int y, char id);
+extern void LCD_TranslateBitmap (int w, int h, char *bo, char *bt);
+extern void LCD_Cursor          (int row, int col);
+
+GLOBAL void rt_ExtPrimitive ( USHORT TaskHandle, USHORT DestComHandle,
+                              char *ExtDest, OS_QDATA *Msg );
+/*
+ * Internal Functions for Graphic Driver (Workaround)
+ */
+LOCAL  void scrInit      (void);
+LOCAL  void scrExit      (void);
+LOCAL  void scrSize      (int *x, int *y);
+#if (!CUST)//JVJE #if (CUST==1)
+
+LOCAL  void scrClear     (void);
+#endif
+LOCAL  void scrClearRect (int px, int py, int sx, int sy);
+LOCAL  void scrText      (int x, int y, char *txt);
+LOCAL  void scrText_Unicode      (int x, int y, USHORT *txt);
+LOCAL  void scrLine      (int px, int py, int sx, int sy);
+LOCAL  void scrRect      (int px, int py, int sx, int sy);
+LOCAL  int  scrFntSelect (int font);
+LOCAL  int  scrFntHeight (void);
+LOCAL  int  scrFntGetFit (char *tp, int lineWidth);
+LOCAL  int  scrFntGetLen (char *tp, int nChars);
+LOCAL  int  scrBmpDraw   (int px, int py, int sx, int sy,
+                          int ix, char *bm, int mode);
+LOCAL  void scrCurType   (int type);
+LOCAL  void scrCursor    (int x, int y);
+//accessible from outside e.g 3th application MMS
+void scrPoint     (int px, int py, int col);
+LOCAL  int  scrUpdate    (int onOff);
+
+LOCAL  void scrText_Invert_Unicode (int x, int y, USHORT *txt); /*kk*/
+
+LOCAL int checkPixelColour(int px, int py, U32 col);
+LOCAL void scrLCDUpdate (void);
+
+void scrText_Invert (int x, int y, char *txt);
+
+void scrDrawFilledRect (int px, int py, int sx, int sy, U32 col);
+
+int scrGetRealLength(char *str, int* totChar, int* totPixel);
+
+LOCAL void scrUnfocusDisplay(void);
+
+
+
+
+void dspl_show_bitmap(int x, int y,t_font_bitmap* current_bitmap,U32 attr );
+
+
+
+
+GLOBAL UBYTE dspl_SetWindow(USHORT   in_X1,
+                         USHORT   in_Y1,
+                         USHORT   in_X2,
+                         USHORT   in_Y2);
+
+
+
+
+
+
+
+/*==== CONSTANTS ==================================================*/
+
+/*******************************************************************
+ *                                                                 *
+ * PART I: Driver Interface                                        *
+ *                                                                 *
+ *******************************************************************/
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : dspl_Init                  |
++--------------------------------------------------------------------+
+
+  PURPOSE : The function initializes the driverīs internal data. The
+            function returns DRV_INITIALIZED if the driver has already
+            been initialized and is ready to be used or already in use.
+            In case of an initialization failure, which means that the
+            driver cannot be used, the function returns DRV_INITFAILURE.
+
+*/
+
+GLOBAL UBYTE dspl_Init (void)
+{
+  /*
+   * Default is character Display
+   */
+  displayData.DisplayType = DSPL_TYPE_CHARACTER;
+
+  if (!extDisplay)                /* use internal display */
+  {
+#if defined (SIMULATE_LCD)
+    LCD_Reset  ();                /* use character oriented display */
+    LCD_Enable (1);
+    LCD_Clear  ();
+  scrInit();          /* we need this also for glob vars, kk 14.02.2000*/
+#else
+    scrInit();                    /* use graphic display */
+#endif
+  }
+  else
+#if defined (SIMULATE_LCD)
+  LCD_Enable (0);
+#else
+  scrExit();
+#endif
+
+  return DRV_OK;
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : dspl_Exit                  |
++--------------------------------------------------------------------+
+
+  PURPOSE : The function is called when the driver functionality is
+            not longer needed. The function "de-allocates" all
+            allocated resources and finalizes the driver.
+
+*/
+
+GLOBAL void dspl_Exit (void)
+{
+  scrExit();
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : dspl_Clear                 |
++--------------------------------------------------------------------+
+
+  PURPOSE : This function is used to clear a specific region of the
+            display using the current background colour. The region
+            is specified by the upper left corner (X1, Y1) and the
+            lower right corner (X2, Y2) inclusive. The background
+            color can be set using dspl_SetBkgColor () function.
+
+*/
+
+GLOBAL UBYTE dspl_Clear (USHORT   in_X1,
+                         USHORT   in_Y1,
+                         USHORT   in_X2,
+                         USHORT   in_Y2)
+{
+  scrClearRect ((int)in_X1,(int)in_Y1,(int)(in_X2-in_X1+1),(int)(in_Y2-in_Y1+1));
+
+  return DRV_OK;
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : dspl_Clear                 |
++--------------------------------------------------------------------+
+
+  PURPOSE : This function is used to clear a specific region of the
+            display using the current background colour. The region
+            is specified by the upper left corner (X1, Y1) and the
+            lower right corner (X2, Y2) inclusive. The background
+            color can be set using dspl_SetBkgColor () function.
+
+*/
+
+GLOBAL UBYTE dspl_ClearAll (void)
+{
+#if (!CUST)
+  scrClear ();
+#endif
+
+  return DRV_OK;
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)         MODULE  : SMI_WM                   |
+| STATE   : code                  ROUTINE : dspl_UnfocusDisplay      |
++--------------------------------------------------------------------+
+
+  PURPOSE : Calls the function that will cause the entire display to appear much 
+  			darker, allowing the pop-up dialog to be more clearly the focus 
+  			especially the softkeys.
+GW #2294 23/07/03 - Created
+*/
+GLOBAL UBYTE dspl_unfocusDisplay (void)
+{
+	scrUnfocusDisplay();
+	return DRV_OK;
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : dspl_Enable                |
++--------------------------------------------------------------------+
+
+  PURPOSE : The function is used to turn the display on or off. While
+            a display is switched off, it is possible to perform any
+            drawing function.
+
+*/
+
+GLOBAL UBYTE dspl_Enable (UBYTE   in_Enable)
+{
+  return scrUpdate (in_Enable);
+}
+
+/*
+xreddymn Apr-07-2005 MMI-SPR-29655: Added function to update region
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : dspl_Enable_Region         |
++--------------------------------------------------------------------+
+
+  PURPOSE : The function is used to update a region on the screen
+
+*/
+
+void dspl_Enable_Region(INT16 x1, INT16 y1, INT16 x2, INT16 y2)
+{
+#ifdef R2D_ENABLED
+	r2d_flush_region(x1, y1, x2, y2);
+#endif
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : dspl_GetDeviceCaps         |
++--------------------------------------------------------------------+
+
+  PURPOSE : This function is used to retrieve the capabilities of the
+            display device including the dimensions of the display and
+            the logical unit in which the dimensions is measured.
+
+*/
+
+GLOBAL void dspl_GetDeviceCaps (dspl_DevCaps * out_DeviceCapsPtr)
+{
+  int x,y;
+
+  scrSize (&x, &y);
+
+  out_DeviceCapsPtr->Height = (USHORT)y;
+  out_DeviceCapsPtr->Width  = (USHORT)x;
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : dspl_SetDeviceCaps         |
++--------------------------------------------------------------------+
+
+  PURPOSE : This function is used to set the capabilities of the
+            display device including the dimensions of the display and
+            the logical unit in which the dimensions is measured.
+
+*/
+
+GLOBAL void dspl_SetDeviceCaps (dspl_DevCaps * in_DeviceCapsPtr)
+{
+  displayData.DisplayType = in_DeviceCapsPtr->DisplayType;
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : dspl_GetIconImage          |
++--------------------------------------------------------------------+
+
+  PURPOSE : This function is used to copy the image of a driver
+            internal icon into an application specific icon buffer.
+            The icon may modify the icon. In case of a successful
+            completion the function returns DRV_OK. In case the
+            size of the buffer where the icon image shall be copied
+            is too small the driver returns DRV_INVALID_PARAMS. In
+            case a specific driver implementation does not support
+            this functionality the driver returns DSPL_FCT_NOTSUPPORTED.
+
+*/
+
+GLOBAL UBYTE dspl_GetIconImage (UBYTE     in_Icon,
+                                USHORT    in_Size,
+                                UBYTE   * out_IconImagePtr)
+{
+  return DSPL_FCT_NOTSUPPORTED;
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : dspl_SetCursor             |
++--------------------------------------------------------------------+
+
+  PURPOSE : This function is used to change the current cursor settings.
+            These settings include the type of cursor and the mode
+            (e.g. static cursor, not flashing). A set of standard
+            types and modes is defined.
+
+*/
+
+GLOBAL UBYTE dspl_SetCursor (UBYTE in_CursorType,
+                             UBYTE in_CursorMode)
+{
+  return DRV_OK;
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : dspl_SetCursorPos          |
++--------------------------------------------------------------------+
+
+  PURPOSE : This function is used to set the current cursor position.
+            If the function succeeds, the cursor is set to the new
+            position. If one of the values is out of range, the function
+            returns DRV_INVALID_PARAMS. The number of rows and columns
+            the display supports can be retrieved using the function
+            dspl_GetDevCaps(). The upper left corner has the coordinates
+            0,0. The values in_X and in_Y are measured in logical units
+            depending on the capabilities of the device. The means a
+            graphical display will use pixels.
+
+GW 05/09/01 Added size x and size y parameters to allow for chinese chars.
+*/
+
+GLOBAL UBYTE dspl_SetCursorPos (USHORT   in_X,
+                                USHORT   in_Y,
+                USHORT   in_SizeX,
+                USHORT   in_SizeY
+                )
+{
+  if (displayData.DisplayType EQ DSPL_TYPE_CHARACTER)
+  {
+     LCD_Cursor (in_Y, in_X);               /* set cursor position */
+     if (extDisplay)                        /* if external display */
+       dspl_SendDisplayReq (in_X, in_Y, NULL);
+  }
+  else
+     scrLine(in_X,in_Y+in_SizeY-1,in_X+in_SizeX-1,in_Y+in_SizeY-1);
+  return DRV_OK;
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : dspl_ShowCursor            |
++--------------------------------------------------------------------+
+
+  PURPOSE : This function is used to change the status of the cursor.
+            The cursor can be visible or invisible. The function returns
+            the previous status of the cursor.
+
+*/
+
+GLOBAL UBYTE dspl_ShowCursor (UBYTE in_Show)
+{
+  return DSPL_CURSOR_VISIBLE;
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : dspl_SetBkgColor           |
++--------------------------------------------------------------------+
+
+  PURPOSE : This function is used to change the color used for
+            background painting. If the color is out of range, the
+            driver returns DRV_INVALID_PARAMS and leaves the color
+            unchanged.
+
+*/
+
+GLOBAL UBYTE dspl_SetBkgColor (UBYTE in_Color)
+{
+  return DRV_OK;
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : dspl_SetFrgColor           |
++--------------------------------------------------------------------+
+
+  PURPOSE : This function is used to change the color used for
+            foreground painting, e.g. text color. If the color is
+            out of range, the driver returns DRV_INVALID_PARAMS and
+            leaves the color unchanged.
+            set a call-back function which
+
+*/
+
+GLOBAL UBYTE dspl_SetFrgColor (UBYTE in_Color)
+{
+  return DSPL_FCT_NOTSUPPORTED;
+}
+
+enum
+{
+	COL_TYPE_FGD =0,
+	COL_TYPE_BGD,
+	COL_TYPE_HIGHLIGHT,
+	COL_TYPE_BORDER,
+	COL_TYPE_SHADOW,
+	MAX_COL_TYPE
+};
+enum
+{
+	COL_CMD_INIT,
+	COL_CMD_GET,
+	COL_CMD_SET,
+	COL_CMD_SETSHADOW,
+	COL_CMD_RESTORECOL,
+	MAX_COL_CMD
+};
+
+//This definition allows us to have a transparent colour in 256 colour bitmaps.
+//We lose the colour nearly-black gray but I don't think it will be missed!
+//Better to lose white than gray but will require all icons to be updated!
+#define TRANSPARENT_256_COL 0x25
+
+//This definition allows us to have a transparent colour in 16bit LCD colour bitmaps.
+//We lose almost white R=0xF8 G=0xFC B=0xF8. NB word is inverted
+#define TRANSPARENT_16BIT_COL 0x0020
+
+//using ARGB format, transparent = 0xFFxxxxxx
+#define TRANSPARENT_32BIT_COLOUR 0xFF000000
+
+//Hide colours
+LOCAL U32 colour_class (int cmd, int colId, U32 inColour)
+{
+static U32 g_col[MAX_COL_TYPE];
+static U32 g_colOld[MAX_COL_TYPE];
+	switch (cmd)
+	{
+		case COL_CMD_INIT:
+			colour_class(COL_CMD_SET,	COL_TYPE_FGD,			0x00404040	);
+			colour_class(COL_CMD_SET,	COL_TYPE_BGD,			0x00FFFFFF	); //white
+			colour_class(COL_CMD_SET,	COL_TYPE_HIGHLIGHT,		0x00FF00FF	);
+			colour_class(COL_CMD_SET,	COL_TYPE_BORDER,		0x00FFFFFF	);
+			colour_class(COL_CMD_SET,	COL_TYPE_SHADOW,		0x40010101	); //50% translucency
+			return (0);
+			break;
+		case COL_CMD_SET:
+			if (inColour != 0)
+			{
+				g_colOld[colId]	=	g_col[colId];
+				g_col[colId]	=	inColour;
+			}
+			return(g_colOld[colId]);
+			break;
+		case COL_CMD_GET:
+#ifdef COLOURDISPLAY
+#ifdef DSAMPLE_COLOUR
+			return(g_col[colId]);
+#endif
+#else
+			switch (colId)
+			{
+				case COL_TYPE_FGD:			return (0x00FFFFFF);
+				case COL_TYPE_BGD:			return (0x00000000);
+				case COL_TYPE_HIGHLIGHT:	return (0x00000000);
+				case COL_TYPE_BORDER:		return (0x00000000);
+				case COL_TYPE_SHADOW:		return (0x00000000);
+				default:					return (0);
+			}
+#endif
+			break;
+		case COL_CMD_SETSHADOW:
+			g_colOld[colId]	=	g_col[colId];//currently we dont really need to save the old value
+			// set shadow to 50% black
+			g_col[colId] = 0x40010101;// | ((inColour >> 2) & 0x003F3F3F);
+			return(0x40010101);
+			break;
+		case COL_CMD_RESTORECOL:
+			g_col[colId] = g_colOld[colId];
+			return (0);
+			break;
+		default:
+			break;
+	}
+	return (0);
+}
+
+GLOBAL U32 dspl_SetFgdColour (U32 inColour)			{	return (colour_class(COL_CMD_SET,		COL_TYPE_FGD,		inColour));	}
+GLOBAL U32 dspl_SetBgdColour (U32 inColour)			{	return (colour_class(COL_CMD_SET,		COL_TYPE_BGD,		inColour));	}
+GLOBAL U32 dspl_SetHighlightColour (U32 inColour)	{	return (colour_class(COL_CMD_SET,		COL_TYPE_HIGHLIGHT,	inColour));	}
+GLOBAL U32 dspl_SetBorderColour (U32 inColour)		{	return (colour_class(COL_CMD_SET,		COL_TYPE_BORDER,  	inColour));	}
+GLOBAL U32 dspl_SetShadowColour (U32 inColour)		{	return (colour_class(COL_CMD_SETSHADOW,	COL_TYPE_SHADOW,  	inColour));	}
+
+GLOBAL U32 dspl_GetFgdColour ( void )				{	return (colour_class(COL_CMD_GET,		COL_TYPE_FGD,		0));	}
+GLOBAL U32 dspl_GetBgdColour ( void )				{	return (colour_class(COL_CMD_GET,		COL_TYPE_BGD,		0));	}
+GLOBAL U32 dspl_GetHighlightColour ( void )			{	return (colour_class(COL_CMD_GET,		COL_TYPE_HIGHLIGHT,	0));	}
+GLOBAL U32 dspl_GetBorderColour ( void )			{	return (colour_class(COL_CMD_GET,		COL_TYPE_BORDER,	0));	}
+GLOBAL U32 dspl_GetShadowColour (void)				{	return (colour_class(COL_CMD_GET,		COL_TYPE_SHADOW,  	0));	}
+
+GLOBAL void dspl_InitColour (void)
+{
+	colour_class(COL_CMD_INIT,	0,	0);
+}
+GLOBAL void dspl_RestoreColour (void)
+{
+	colour_class(COL_CMD_RESTORECOL,	COL_TYPE_FGD,	0);
+	colour_class(COL_CMD_RESTORECOL,	COL_TYPE_BGD,	0);
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : dspl_DrawIcon              |
++--------------------------------------------------------------------+
+
+  PURPOSE : This function is used to draw a driver internal icon.
+            The origin of the icon is the upper left corner, defined
+            by the parameters in_X/in_Y.
+
+*/
+
+GLOBAL UBYTE dspl_DrawIcon (UBYTE  in_IconID,
+                            USHORT in_X,
+                            USHORT in_Y)
+{
+  return DSPL_FCT_NOTSUPPORTED;
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : dspl_DrawLine              |
++--------------------------------------------------------------------+
+
+  PURPOSE : This function is used to draw a line from a specific
+            location defined by the parameters in_X1/in_Y1, to a
+            specific location defined by the parameters in_X2/in_Y2.
+            The displayīs origin is the upper left corner with the
+            co-ordinates (0,0). The function uses the current
+            foreground color, which can be set using the
+            dspl_SetFrgColor (), to draw the line.
+
+*/
+
+GLOBAL UBYTE dspl_DrawLine (USHORT in_X1,
+                            USHORT in_Y1,
+                            USHORT in_X2,
+                            USHORT in_Y2)
+{
+    scrLine(in_X1,in_Y1,in_X2,in_Y2);
+
+    return DRV_OK;
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : dspl_DrawRect              |
++--------------------------------------------------------------------+
+
+  PURPOSE : This function is used to draw a rectangle. The upper left
+            corner of the rectangle is defined by the parameters
+            in_X1/in_Y1. The lower right corner of the rectangle is
+            defined by the parameters in_X2/in_Y2.
+            The displayīs origin is the upper left corner with the
+            co-ordinates (0,0). The function uses the current
+            foreground color, which can be set using the
+            dspl_SetFrgColor (), to draw the rectangle.
+
+*/
+
+GLOBAL UBYTE dspl_roundRectFill (int px,
+                            	int  py,
+                            	int sx,
+                            	int sy,
+                            	int border)
+{
+	int i,j,col;
+	col = dspl_GetBgdColour();
+	scrDrawFilledRect(px-border,py,	sx+border*2,sy, col );
+	scrDrawFilledRect(px,py-border,	sx,sy+border*2, col );
+
+	for (i=0;i<border;i++)
+		for (j=0;j<border-i;j++)
+		{
+			scrPoint(px-i,		py-j,col);
+			scrPoint(px+sx+i,	py-j,col);
+			scrPoint(px+sx+i,	py+sy+j,col);
+			scrPoint(px-i,		py+sy+j,col);
+		}
+
+  return DRV_OK;
+}
+GLOBAL UBYTE dspl_roundRect (int px,
+                            	int  py,
+                            	int sx,
+                            	int sy,
+                            	int border)
+{
+    scrLine(px ,py-border,		px+sx,py-border);
+    scrLine(px,py+sy+border,	px+sx,py+sy+border);
+    scrLine(px-border ,py,		px-border,py+sy);
+    scrLine(px+sx+border,py,	px+sx+border,py+sy);
+
+    scrLine(px ,py-border,		px-border ,py				);
+    scrLine(px,py+sy+border,	px-border,py+sy			);
+    scrLine(px+sx,py+sy+border,	px+sx+border,py+sy			);
+    scrLine(px+sx+border,py,	px+sx,py-border		);
+
+  return DRV_OK;
+}
+
+GLOBAL UBYTE dspl_DrawRect (USHORT in_X1,
+                            USHORT in_Y1,
+                            USHORT in_X2,
+                            USHORT in_Y2)
+{
+  scrRect(in_X1,in_Y1,in_X2-in_X1,in_Y2-in_Y1);
+
+  return DRV_OK;
+}
+
+GLOBAL UBYTE dspl_DrawFilledRect (USHORT in_X1,
+								  USHORT in_Y1,
+								  USHORT in_X2,
+								  USHORT in_Y2)
+{
+  scrDrawFilledRect(in_X1,in_Y1,in_X2-in_X1,in_Y2-in_Y1, dspl_GetFgdColour() );
+  return DRV_OK;
+}
+GLOBAL UBYTE dspl_DrawFilledBgdRect (USHORT in_X1,
+								  USHORT in_Y1,
+								  USHORT in_X2,
+								  USHORT in_Y2)
+{
+  scrDrawFilledRect(in_X1,in_Y1,in_X2-in_X1,in_Y2-in_Y1, dspl_GetBgdColour() );
+  return DRV_OK;
+}
+GLOBAL UBYTE dspl_DrawFilledColRect (USHORT in_X1,
+								  USHORT in_Y1,
+								  USHORT in_X2,
+								  USHORT in_Y2,
+								  U32 Col)
+{
+  scrDrawFilledRect(in_X1,in_Y1,in_X2-in_X1,in_Y2-in_Y1, Col );
+  return DRV_OK;
+}
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : dspl_DrawEllipse           |
++--------------------------------------------------------------------+
+
+  PURPOSE : This function is used to draw an ellipse. The center of
+            the ellipse is the center of the bounding rectangle
+            specified by the parameters.
+            The displayīs origin is the upper left corner with the
+            co-ordinates (0,0). The function uses the current
+            foreground color, which can be set using the
+            dspl_SetFrgColor (), to draw the ellipse.
+
+*/
+
+GLOBAL UBYTE dspl_DrawEllipse (USHORT in_X1,
+                               USHORT in_Y1,
+                               USHORT in_X2,
+                               USHORT in_Y2)
+{
+  return DSPL_FCT_NOTSUPPORTED;
+}
+
+
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : dspl_BitBlt                |
++--------------------------------------------------------------------+
+
+  PURPOSE : This function is used to display a bitmap at the
+            specified location using the raster operation provided.
+            The bitmap format is customer specific but must include
+            the size of the bitmap.
+
+
+*/
+
+GLOBAL UBYTE dspl_BitBlt2(short in_X,
+                          short in_Y,
+                          USHORT in_Width,
+                          USHORT in_Height,
+                          void * in_BmpPtr,
+                          USHORT in_index,
+                          int bmpFormat)
+{
+	t_font_bitmap current_bitmap;
+	char *bmpPtr;
+	int bmpSize;
+	int fScale = 1;
+	int attr = SHOWBITMAP_NORMAL;
+	bmpPtr = (char *)in_BmpPtr;
+	if (bmpFormat == BMP_FORMAT_256_COLOUR)
+	{
+		bmpSize = in_Height*in_Width; //bitmaps are 256 colour
+		bmpPtr = &bmpPtr[bmpSize*in_index]; //for bitmaps that have multiple states
+	}
+	else if (bmpFormat == BMP_FORMAT_32BIT_COLOUR)
+	{
+		bmpSize = in_Height*in_Width; //bitmaps are 256 colour
+		bmpPtr = &bmpPtr[bmpSize*in_index]; //for bitmaps that have multiple states
+	}
+	else if (bmpFormat == BMP_FORMAT_16BIT_LCD_COLOUR)
+	{
+#ifdef DSAMPLE_COLOUR32
+		fastCopyBitmap(in_X,in_Y, 					// start position of bitmap
+						in_Width,	in_Height,		//size of bitmap
+						(char*)	in_BmpPtr,
+						in_X,in_Y, 					// start position of output area
+						in_Width,	in_Height,		//size of output area
+						dspl_GetBgdColour(), bmpFormat);
+		return DRV_OK;
+#else
+		bmpSize = in_Height*in_Width*4; //bitmaps are 16bit colour
+		bmpPtr = &bmpPtr[bmpSize*in_index]; //for bitmaps that have multiple states
+#endif
+	}
+	else if (bmpFormat == BMP_FORMAT_16BIT_LCD_COMPRESSED_COLOUR)
+	{
+#ifdef DSAMPLE_COLOUR16
+		fastCopyBitmap(in_X,in_Y, 					// start position of bitmap
+						in_Width,	in_Height,		//size of bitmap
+						(char*)	in_BmpPtr,
+						in_X,in_Y, 					// start position of output area
+						in_Width,	in_Height,		//size of output area
+						dspl_GetBgdColour(), bmpFormat);
+		return DRV_OK;
+#else
+		bmpSize = in_Height*in_Width*2; //bitmaps are 16bit colour
+		bmpPtr = &bmpPtr[bmpSize*in_index]; //for bitmaps that have multiple states
+#endif
+	}
+	else //b+w image
+	{
+		#ifdef MMI_TRACE
+		mmi_trace("b+w image");
+		#endif
+		if (bmpFormat == BMP_FORMAT_BW_2x4 )
+		{
+			//Temp fix to display larger b+w bitmaps (160x124)
+			attr = SHOWBITMAP_SCALE_2x4;
+			in_Width = in_Width /2;
+			in_Height = in_Height /4;
+			#ifdef MMI_TRACE
+			mmi_trace("Icontype = scale 2x4");
+			#endif
+		}
+
+		bmpSize = in_Height*((in_Width+7) >> 3); //bitmaps are unpacked
+		bmpPtr = &bmpPtr[bmpSize*in_index]; //for bitmaps that have multiple states
+
+	}
+	current_bitmap.height	= in_Height;
+	current_bitmap.width	= in_Width;
+	current_bitmap.bitmapSize = 0;// bmpSize;
+	current_bitmap.bitmap	= bmpPtr;
+	current_bitmap.format	= bmpFormat;
+	dspl_show_bitmap(in_X,in_Y, &current_bitmap, attr);
+
+  return DRV_OK;
+
+}
+
+GLOBAL UBYTE dspl_BitBlt (USHORT in_X,
+                          USHORT in_Y,
+                          USHORT in_Width,
+                          USHORT in_Height,
+                          USHORT in_Index,
+                          void * in_BmpPtr,
+                          USHORT in_Rop)
+{
+#ifdef BSAMPLE
+//Use old procedure
+  scrBmpDraw ((int)in_X, (int) in_Y, (int) in_Width,
+              (int)in_Height, (int)in_Index,
+              (char *)in_BmpPtr, (int)in_Rop);
+  return DRV_OK;
+#else
+  return (dspl_BitBlt2( (short) in_X, (short) in_Y, in_Width, in_Height, in_BmpPtr, in_Index, BMP_FORMAT_BW_UNPACKED));
+#endif
+
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : dspl_SelectFontbyID        |
++--------------------------------------------------------------------+
+
+  PURPOSE : This function is used to select a font used for
+            displaying text. Text can be displayed using the
+            functions dspl_TextOut_Cmode.
+            Driver specific fonts are identified be a font ID
+            (parameter in_Font). The definition of fonts and font
+            identifiers is not in scope of G23. Fonts and font
+            identifiers have to be defined by the customer. The
+            specific implementation of the display driver and the MMI
+            using the driver have the knowledge about the available
+            fonts, their identification and how to use them.
+
+*/
+
+GLOBAL UBYTE dspl_SelectFontbyID (UBYTE in_Font)
+{
+  return DSPL_FCT_NOTSUPPORTED;
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : dspl_SelectFontbyImage     |
++--------------------------------------------------------------------+
+
+  PURPOSE : This function is used to select a font used for
+            displaying text. Text can be displayed using the
+            functions dspl_TextOut_Cmode.
+            Application specific fonts are identified by the parameter
+            in_FontPtr, the address of the buffer containing the
+            application specific font. The structure of the font image
+            in not in the scope of G23. The structure of the font images
+            have to be defined by the customer implementing the driver.
+
+*/
+
+GLOBAL UBYTE dspl_SelectFontbyImage (UBYTE * in_FontPtr)
+{
+  return DSPL_FCT_NOTSUPPORTED;
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : dspl_GetFontImage          |
++--------------------------------------------------------------------+
+
+  PURPOSE : This function is used to copy the image of a font into an
+            application specific font buffer. The application may modify
+            the font. In case of a successful completion the function
+            returns DRV_OK. In case the size of the buffer where the
+            font image shall be copied to is too small the driver returns
+            DRV_INVALID_PARAMS. In case a specific driver implementation
+            does not support this functionality the driver returns
+            DSPL_FCT_NOTSUPPORTED.
+
+*/
+
+GLOBAL UBYTE dspl_GetFontImage (UBYTE    in_Font,
+                                USHORT   in_Size,
+                                UBYTE *  out_FontPtr)
+{
+  return DSPL_FCT_NOTSUPPORTED;
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : dspl_GetFontHeight         |
++--------------------------------------------------------------------+
+
+  PURPOSE : This function is used to retrieve the vertical size of
+            the currently selected font. The function returns the
+            height measured in logical units depending on the device
+            capabilities (e.g. pixels or multiple of characters). Call
+            the function dspl_SelectFont() to select a font.
+
+*/
+
+GLOBAL UBYTE dspl_GetFontHeight (void)
+{
+  return scrFntHeight();
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : dspl_GetTextExtent         |
++--------------------------------------------------------------------+
+
+  PURPOSE : This function is used to calculate the size of a 0-terminated
+            string, to which the parameter in_Text points. The function
+            returns the size needed to display the text. The value of
+            the size is measured in units depending on the device
+            capabilities (e.g. pixels or multiple of characters). Call
+            the function dspl_SelectFont() to select a font.
+
+*/
+
+GLOBAL USHORT dspl_GetTextExtent_old (char * in_Text, USHORT in_Length)
+{
+ if (displayData.DisplayType EQ DSPL_TYPE_CHARACTER)
+   return in_Length;
+ else
+   return scrFntGetLen ( in_Text, ( int ) in_Length );
+}
+
+
+GLOBAL USHORT dspl_GetTextExtent (char * in_Text, USHORT in_Length)
+{
+	int nPixel=0;
+	int nChar = in_Length;
+	if (in_Text==NULL)
+		return(0);
+
+ 	if (displayData.DisplayType EQ DSPL_TYPE_CHARACTER )
+   	{
+   		return in_Length;
+   	}
+	scrGetRealLength(in_Text, &nChar, &nPixel);
+
+	return (nPixel);
+}
+
+
+
+
+
+int dspl_GetTextExtent2 (char * in_Text, USHORT in_Length)
+{
+	return (dspl_GetTextExtent ( in_Text, in_Length));
+
+}
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : dspl_GetNcharToFit         |
++--------------------------------------------------------------------+
+
+  PURPOSE : This function is used to calculate the number of characters of the input
+  string that will fit into the specified width.
+
+*/
+/*SPR 1541, added function*/
+//Calculate number of chars that fit in the available space.
+GLOBAL USHORT dspl_GetNcharToFit (char * in_Text, USHORT pixelWidth)
+{
+        int nPixel=pixelWidth;
+        int nChar= 0;
+        if (in_Text==NULL)
+                return(0);
+
+        scrGetRealLength(in_Text, &nChar, &nPixel);
+
+        return (nChar);
+}
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : dspl_GetMaxTextLen         |
++--------------------------------------------------------------------+
+
+  PURPOSE : This function is used to calculate the sub-string
+            (number of characters) of a 0-terminated string (in_Text)
+            that can be displayed in the region given by the parameter
+            in_HSize. The value of in_HSize is measured in logical
+            units (e.g. pixels or multiple of characters). Call
+            the function dspl_SelectFont() to select a font.
+
+*/
+
+GLOBAL USHORT dspl_GetMaxTextLen (char  * in_Text,
+                                  USHORT   in_HSize)
+{
+  if (displayData.DisplayType EQ DSPL_TYPE_CHARACTER)
+    return strlen (in_Text);
+  else
+    return scrFntGetFit ( in_Text, ( int ) in_HSize );
+}
+
+
+
+
+GLOBAL void dspl_set_char_type(UBYTE char_type){
+  dspl_char_type = char_type;
+}
+
+GLOBAL UBYTE dspl_get_char_type(void){
+  return dspl_char_type;
+}
+
+int dspl_getDisplayType( void )
+{
+//	Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg
+#if defined(FF_MMI_NEW_LCD_API_MIG) && ( defined(ISAMPLE) || defined (CALLISTO))
+	return DSPL_COLOUR;
+#endif
+#ifndef COLOURDISPLAY
+	return (DSPL_BW);
+#endif
+
+#ifdef R2D_ENABLED
+	if (R2D_LCD_DISPLAY == R2D_COLOR)
+		return (DSPL_COLOUR);
+	else
+#endif
+		return (DSPL_BW);
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : dspl_TextOut_Cmode               |
++--------------------------------------------------------------------+
+
+  PURPOSE : This function is used to display a text at the given
+            location in_X/in_Y uding the defined attributes (in_Attrib)
+            and the currently selected color (foreground and background).
+            The cursor position is left unchanged. The driver will not
+            take the displays bounding rectangle into consideration and
+            therefore text may be cut off.
+            Linefeeds and carriage returns are not supported and there-
+            fore must be handled by upper layers.
+
+GW 14/02/03 - SPR#1736 Modified code to call 'dspl_ScrText' to allow a border to be drawn
+						round chinese characters.
+
+*/
+
+
+GLOBAL UBYTE dspl_TextOut_Cmode (USHORT  in_X,
+                           USHORT  in_Y,
+                           UBYTE   in_Attrib,
+                           char * in_Text)
+{
+  int in_X_signed;
+  int in_Y_signed;
+	int txtStyle=0;
+  // SH - If we want signed coordinates (i.e. if x and y can have negative numbers)
+  // we need to convert the unsigned values into two's complement.
+
+   if (in_Attrib & DSPL_TXTATTR_SIGNED_COORDS)
+    {
+    in_X_signed = (SHORT)in_X;
+    in_Y_signed = (SHORT)in_Y;
+    }
+   else
+    {
+    in_X_signed = in_X;
+    in_Y_signed = in_Y;
+    }
+
+#if defined (WIN32)
+   if (scrEnabled)
+   {
+     if (in_Attrib & DSPL_TXTATTR_INVERS)
+     {
+       scrText_Invert(in_X, in_Y, in_Text);
+     }
+     else
+     {
+       scrText(in_X, in_Y, in_Text);
+     }
+   }
+   else
+     LCD_WriteString (in_Y, in_X, (UBYTE *) in_Text);
+#else
+   if (displayData.DisplayType EQ DSPL_TYPE_CHARACTER)
+   {
+     if (in_Attrib & DSPL_TXTATTR_INVERS)
+   	   {
+    if (dspl_char_type == DSPL_TYPE_ASCII)
+      scrText_Invert(6 * in_X + 2, 8 * in_Y, in_Text);
+    else
+      scrText_Invert_Unicode(12 * in_X + 2, 12 * in_Y,(USHORT*) in_Text);
+     }
+     else
+     {
+    if (dspl_char_type == DSPL_TYPE_ASCII)
+      scrText(6 * in_X_signed + 2, 8 * in_Y_signed, in_Text);
+    else
+      scrText_Unicode(12 * in_X_signed + 2, 12 * in_Y_signed, (USHORT*)in_Text);
+     }
+   }
+   else
+   {
+   		txtStyle = 0;
+   		if (in_Attrib & DSPL_TXTATTR_INVERS)
+   			txtStyle = TXT_STYLE_INVERT;
+   		else
+   			txtStyle = TXT_STYLE_NORMAL;
+		if (dspl_char_type != DSPL_TYPE_ASCII)
+   			txtStyle = txtStyle  | TXT_STYLE_UNICODE;
+   	 	dspl_ScrText( in_X_signed,in_Y_signed,in_Text, txtStyle);
+//      		scrText_Unicode(in_X_signed,in_Y_signed, (USHORT*)in_Text);
+
+   }
+#endif
+   /*
+    * if an external display simulation is used and switched on with the
+    * EXT_DISPLAY config primitive - send a MMI_DISPLAY_REQ primitive.
+    */
+   if (extDisplay)
+     dspl_SendDisplayReq (in_X, in_Y, in_Text);
+
+  return DRV_OK;
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : dspl_TextOut                 |
++--------------------------------------------------------------------+
+
+  PURPOSE : This function is used to display a text at the given
+            location in_X/in_Y using the defined attributes (in_Attrib)
+			It calls dspl_ScrText to actually display the text
+
+GW 14/02/03 - SPR#1736 Modified code to call 'dspl_ScrText' to allow a border to be drawn
+						round chinese characters.
+*/
+
+GLOBAL UBYTE dspl_TextOut(USHORT  in_X,
+                           USHORT  in_Y,
+                           UBYTE   in_Attrib,
+                           char * in_Text)
+{
+	UBYTE temp;
+	int in_X_signed;
+	int in_Y_signed;
+	int txtStyle=0;
+	char* op_str;
+
+	/*MC SPR 1319*/
+	if (in_Text == NULL)
+		return DRV_OK;
+	/*MC end*/
+
+	op_str = in_Text;
+
+#if defined (WIN32)
+	if (!scrEnabled)
+	{
+		LCD_WriteString (in_Y, in_X, (UBYTE *) in_Text);
+	}
+	else
+#endif
+	{
+
+		if (in_Attrib & DSPL_TXTATTR_SIGNED_COORDS)
+		{
+			in_X_signed = (SHORT)in_X;
+			in_Y_signed = (SHORT)in_Y;
+		}
+		else
+		{
+			in_X_signed = in_X;
+			in_Y_signed = in_Y;
+		}
+
+		/*Mc SPR 1526, we no longer check for current mode*/
+		if (in_Attrib & DSPL_TXTATTR_INVERS)
+			txtStyle = TXT_STYLE_INVERT;
+		else
+			txtStyle = TXT_STYLE_NORMAL;
+
+
+		if ((in_Attrib&DSPL_TXTATTR_UNICODE) || (in_Text[0] ==0x80))
+		{
+			txtStyle = txtStyle | TXT_STYLE_UNICODE;
+			if (op_str[0] ==0x80)//if unicode tag at beginning of string
+				op_str = &op_str[2];
+		}
+		if (displayData.DisplayType EQ DSPL_TYPE_CHARACTER)
+		{
+			/* the following is only accurate for a fixed-width font*/
+			if (txtStyle & TXT_STYLE_UNICODE)
+			{
+				in_X_signed = in_X_signed*12+2;
+				in_Y_signed = in_Y_signed*12;
+			}
+			else
+			{
+				in_X_signed = in_X_signed*6+2;
+				in_Y_signed = in_Y_signed*8;
+			}
+		}
+
+   	 	dspl_ScrText( in_X_signed,in_Y_signed,op_str, txtStyle);
+	}
+   /*
+    * if an external display simulation is used and switched on with the
+    * EXT_DISPLAY config primitive - send a MMI_DISPLAY_REQ primitive.
+    */
+   if (extDisplay)
+     dspl_SendDisplayReq (in_X, in_Y, in_Text);
+
+	return DRV_OK;
+}
+/**/
+
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : dspl_SetWorkShadow         |
++--------------------------------------------------------------------+
+
+  PURPOSE : This function is used to define the address of the
+            shadow RAM for drawing operations.
+
+*/
+
+GLOBAL UBYTE dspl_SetWorkShadow (UBYTE * in_ShadowPtr)
+{
+  return DSPL_FCT_NOTSUPPORTED;
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : dspl_SetDisplayShadow      |
++--------------------------------------------------------------------+
+
+  PURPOSE : This function is used to define the address of the
+            shadow RAM for displaying operations.
+
+*/
+
+GLOBAL UBYTE dspl_SetDisplayShadow (UBYTE * in_ShadowPtr)
+{
+  return DSPL_FCT_NOTSUPPORTED;
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)         MODULE  : SMI_WM                   |
+| STATE   : code                  ROUTINE : dspl_SendDisplayReq      |
++--------------------------------------------------------------------+
+
+  PURPOSE : sends an MMI_DISPLAY_REQ primitive to write
+            the text at position X,Y to PL. If the parameter
+            text is NULL only the cursor position
+            should change. If in this case the X and Y value
+            is 0xffff the cursor will be hide.
+
+*/
+LOCAL void dspl_SendDisplayReq (USHORT x, USHORT y, char *text)
+{
+#ifdef NEW_FRAME
+T_QMSG Msg;
+T_VOID_STRUCT *prim;
+#endif
+
+  USHORT sdu_len = (text NEQ NULL) ? strlen (text) : 0;
+  PALLOC_SDU (mmi_display_req, MMI_DISPLAY_REQ, (USHORT)(sdu_len<<3));
+
+  mmi_display_req->c_x = x;
+  mmi_display_req->c_y = y;
+
+  if (text NEQ NULL)
+  {
+    /*
+     * text output
+     */
+    mmi_display_req->attrib.content = CON_TEXT;
+    mmi_display_req->attrib.control = CTL_NORMAL;
+    mmi_display_req->sdu.o_buf = 0;
+    mmi_display_req->sdu.l_buf = (sdu_len<<3);
+    memcpy (mmi_display_req->sdu.buf, text, sdu_len);
+  }
+  else
+  {
+    /*
+     * change the cursor position
+     */
+    mmi_display_req->attrib.content = CON_CURSOR;
+    mmi_display_req->attrib.control = ((x EQ 0xffff) ? CTL_HIDDEN : CTL_NORMAL);
+    mmi_display_req->sdu.o_buf = 0;
+    mmi_display_req->sdu.l_buf = 0;
+  }
+
+#if defined NEW_FRAME
+    if ( hCommMMI == VSI_ERROR )
+    {
+      mmi_handle = vsi_e_handle ( 0, "MMI" );
+      hCommMMI = vsi_c_open ( 0, "MMI" );
+      prim = vsi_c_pnew ( 100, 0x8000 FILE_LINE_MACRO );
+      strcpy ((char*)prim, "REDIRECT MMI 0000111000001010 PAN");
+      vsi_c_primitive ( mmi_handle, D2P(prim) );
+    }
+    PSEND(hCommMMI,mmi_display_req);
+
+#else
+    ext_primitive (D2P(mmi_display_req), "CST", "PAN",
+                   sizeof (T_PRIM_HEADER) +
+                   sizeof (T_MMI_DISPLAY_REQ) +
+                   sdu_len);
+    PFREE (mmi_display_req);
+#endif
+}
+
+GLOBAL UBYTE dspl_DrawWin (USHORT px, USHORT py, USHORT sx, USHORT sy, int format, t_font_bitmap *bgdBmp)
+{
+	USHORT x1,y1,x2,y2;
+	int xOfs,yOfs;
+
+	if (bgdBmp == NULL)
+	{
+		scrDrawFilledRect( px+3,py+3, sx, sy, 0x00010101 ); //shadow
+		scrDrawFilledRect( px,py, sx, sy, dspl_GetBgdColour() );
+
+		scrRect( px-1,py-1, sx+1, sy+1);
+	}
+	else
+	{
+		xOfs = (sx-bgdBmp->width)/2;
+		yOfs = (sy-bgdBmp->height)/2;
+
+		dspl_GetWindow(&x1,&y1,&x2,&y2 );
+
+		switch (format)
+		{
+			case DSPL_WIN_NORMAL:
+					dspl_show_bitmap(px, py, bgdBmp, SHOWBITMAP_NORMAL );
+					break;
+			case DSPL_WIN_CENTRE:
+					dspl_show_bitmap(px+xOfs, py+yOfs, bgdBmp, SHOWBITMAP_NORMAL );
+					break;
+			case DSPL_WIN_CLIP:
+					dspl_SetWindow(px,py,px+sx,px+sy );
+					dspl_show_bitmap(px, py, bgdBmp, SHOWBITMAP_NORMAL );
+					break;
+			case DSPL_WIN_CENTRE_CLIP:
+					dspl_SetWindow(px,py,px+sx,px+sy );
+					dspl_show_bitmap(px+xOfs, py+yOfs, bgdBmp, SHOWBITMAP_NORMAL );
+					break;
+			case DSPL_WIN_TILE:
+					dspl_SetWindow(px,py,px+sx,px+sy );
+					yOfs=0;
+					while(yOfs < sy)
+					{
+						xOfs=0;
+						while (xOfs < sx)
+						{
+							dspl_show_bitmap(px+xOfs, py+yOfs, bgdBmp, SHOWBITMAP_NORMAL );
+							xOfs=xOfs+bgdBmp->width;
+						}
+						yOfs=yOfs+bgdBmp->height;
+					}
+					break;
+		}
+		dspl_SetWindow(x1,y1,x2,y2 );
+	}
+
+/*	switch (format)
+	{
+		case 0:
+		default:
+		break;
+	}*/
+	return DRV_OK;
+}
+static int win_x1, win_x2, win_y1, win_y2;
+
+//Set-up area to be drawn in - limit window to the size of the screen
+//Inputs in_x1/y1 - first column/row that can be drawn on
+//		in_x2/y2 - last column/row
+//NB:-	inputs are the same as used to clear/draw rectangles BUT
+//		values stored in win_x2/y2 are +1 to ensure values are treated the same as scrX/Y
+GLOBAL UBYTE dspl_SetWindow(USHORT   in_X1,
+                         USHORT   in_Y1,
+                         USHORT   in_X2,
+                         USHORT   in_Y2)
+{
+int sizeX,sizeY;
+
+	scrSize (&sizeX, &sizeY);
+	if (in_X1>0)
+		win_x1 = in_X1;
+	else
+		win_x1 = 0;
+	if (in_Y1>0)
+		win_y1 = in_Y1;
+	else
+		win_y1 = 0;
+	if (in_X2<sizeX)
+		win_x2 = in_X2+1;
+	else
+		win_x2 = sizeX;
+	if (in_Y2<sizeY)
+		win_y2 = in_Y2+1;
+	else
+		win_y2 = sizeY;
+	return DRV_OK;
+
+}
+
+GLOBAL UBYTE dspl_ResetWindow( void )
+{
+	win_x1 = 0;
+	win_y1 = 0;
+	scrSize (&win_x2, &win_y2);
+
+	return DRV_OK;
+
+}
+
+GLOBAL UBYTE dspl_GetWindow(USHORT* x1,USHORT* y1,USHORT* x2,USHORT* y2 )
+{
+	*x1= win_x1;
+	*x2= win_x2;
+	*y1= win_y1;
+	*y2= win_y2;
+	return DRV_OK;
+	
+}
+
+
+/*******************************************************************
+ *                                                                 *
+ * PART II: Workaround for Graphical Displays                      *
+ *                                                                 *
+ *******************************************************************/
+//June 03, 2005 REF: GSM-ENH-31636 xpradipg
+//CRR 28825:  xpradipg - 11 Feb 2005
+#if (defined(DSAMPLE) || defined(ESAMPLE) || defined(ISAMPLE) || defined(CALLISTO))
+/*GW 21/02/03 - There is an unused long word at the end of each line for the new drivers for some good reason I'm sure.*/
+#ifdef DSAMPLE_COLOUR16
+#ifdef FF_MMI_NEW_LCD_API_MIG
+#define LCD_COL	(LCD_WIDTH+1)
+#else
+#define LCD_COL   (R2D_WIDTH+1)                      /* display size+32 bits    */
+#endif
+#else
+#define LCD_COL   (R2D_WIDTH)                      /* display size             */
+#endif
+#ifdef FF_MMI_NEW_LCD_API_MIG
+#define LCD_ROW (LCD_HEIGHT)
+#else
+#define LCD_ROW 	(R2D_HEIGHT)
+#endif
+#define HEADER_INFO (3)
+#define DISPLAY_SIZE (LCD_ROW*LCD_ROW_NUM_LWORDS)
+/* static char scratch [100];      *//* command buffer - does not support output of new display  */
+#ifndef DSAMPLE_LITE
+unsigned char bgdColourArray[LCD_COL*4];
+#endif
+#endif
+
+#ifdef CSAMPLE
+#define LCD_COL 84                      /* display size             */
+#define LCD_ROW 48
+#define LCD_COL_NUM_LWORDS ((LCD_ROW+31)/32) /* col size in longwords         */
+#endif //CSAMPLE
+
+#ifdef BSAMPLE
+#define LCD_COL 84                     /* display size             */
+#define LCD_COL_B ((LCD_COL+7)/8)       /* row size in byte         */
+#define LCD_ROW 48
+#define DISPL_DIV 4
+#endif
+
+/*
+LCD_ROW_NUM_LWORDS - number of long words used to store a row of pixels
+BYTEPERPIXEL - number of bytes used to store apixel on-screen
+*/
+
+#define CHECK_LIMITS /*Add bounds checks to code */
+/*******************************************************************************
+ $Macro:    	DSPL_SET_BITCOLOUR
+ $Description:	This macro sets the colour of the bit at the provided long word address
+ $Returns:		None.
+ $Arguments:	x - x position of pixel (may be unused)
+ 				j - 32 bit offset within array of the pixel to be set
+ 				col - colour (in LCD format) of the pixel to be set
+ 				txt - debug text for traces - used if 'j' is bounds checked first.
+*******************************************************************************/
+/*******************************************************************************
+ $Macro:    	DSPL_GET_LWORD
+ $Description:	This macro
+ $Returns:		The 32bit offset of the word containing the pixel
+ $Arguments:	px - x position of pixel
+ 				py - y position of pixel
+*******************************************************************************/
+/*******************************************************************************
+ $Macro:    	DSPL_GET_BYTE
+ $Description:	This macro
+ $Returns:		The 8bit offset of the word containing the pixel
+ $Arguments:	px - x position of pixel
+ 				py - y position of pixel
+*******************************************************************************/
+/*******************************************************************************
+ $Macro:    	DSPL_GET_BITCOLOUR
+ $Description:	This macro
+ $Returns:		The colour in LCD format of the RGB input
+ $Arguments:	col - 32 bit RGB colour value
+*******************************************************************************/
+/*******************************************************************************
+ $Macro:    	DSPL_SET_XYBIT_COLOUR
+ $Description:	This macro
+ $Returns:		None
+ $Arguments:	x,y - posiiton of pixel to be set
+ 				col - 0 =clear bixel, anything else - set pixel
+ 				txt - trace for debug (if position is out-of-range)
+*******************************************************************************/
+#ifdef DSAMPLE_LITE
+#define LCD_ROW_NUM_LWORDS ((LCD_COL+31)/32) /* col size in longwords         */
+#define BYTEPERPIXEL (1/8 - unused)
+#ifdef CHECK_LIMITS
+#define DSPL_SET_BITCOLOUR(x,j,col,txt) \
+{\
+if (((j)>=0) && ((j)<DISPLAY_SIZE)) \
+{\
+	int m_px = 1 << (x & 0x1F);\
+	if (col)  picture_col[j] = picture_col[j] | (m_px);\
+	else    picture_col[j] = picture_col[j]  & (~m_px);\
+}else {mmi_trace(txt);}\
+}
+#define DSPL_SET_XYBIT_COLOUR(x,y,col,txt) \
+{\
+	int m_px = 1 << (x & 0x1F);\
+	int word = DSPL_GET_LWORD(x,y);\
+	if (((word)>=0) && ((word)<DISPLAY_SIZE)) \
+	{\
+		if (col) word = word | m_px;\
+		else word = word & (~m_px);\
+	}\
+}
+
+#else
+#define DSPL_SET_BITCOLOUR(x,j,col,txt) \
+{\
+	int m_px = 1 << (x & 0x1F);\
+	if (col) picture_col[j] = picture_col[j] | (m_px);\
+	else  picture_col[j] = picture_col[j]  & (~m_px);\
+}
+#define DSPL_SET_XYBIT_COLOUR(x,y,col,txt) \
+{\
+	int m_px = 1 << (x & 0x1F);\
+	int word = DSPL_GET_LWORD(x,y);\
+	if (col) word = word | m_px;\
+	else word = word & (~m_px);\
+}
+
+#endif
+#define DSPL_GET_LWORD(px,py) ((py)*LCD_ROW_NUM_LWORDS + ((px)/32))
+#define DSPL_GET_BYTE(px,py) (((py)*4)*LCD_ROW_NUM_LWORDS + ((px)/8))
+#define DSPL_GET_BITCOLOUR(col32) (not used!)
+#define DSPL_GET_PIXELCOLOUR(col32) (not used!)
+#endif //DSAMPLE_LITE
+
+
+
+
+#ifdef DSAMPLE_COLOUR32
+#define LCD_ROW_NUM_LWORDS (LCD_COL) /* col size in longwords         */
+#define BYTEPERPIXEL 4
+#ifdef CHECK_LIMITS
+//safe version-includes trace for errors
+#define DSPL_SET_BITCOLOUR(x,j,col,txt) {if (((j)>=0) && ((j)<DISPLAY_SIZE)) picture_col[j] = (col); else {mmi_trace(txt);}}
+#else
+#define DSPL_SET_BITCOLOUR(x,j,col,txt) {picture_col[j] = (col);}//faster version - no bounds check
+#endif
+#define DSPL_GET_LWORD(px,py) ((py)*LCD_ROW_NUM_LWORDS + (px))
+#define DSPL_GET_BYTE(px,py) (((py)*4)*LCD_ROW_NUM_LWORDS + ((px)*4))
+#define DSPL_GET_BITCOLOUR(col32) (~(((((col32) &0x00F80000)  >> 8) | (((col32) &0x0000FC00)	>> 5) | (((col32) &0x000000F8)	>> 3))))
+#define DSPL_GET_PIXELCOLOUR(col32) (((((col32)<<8) &0x00F80000) | (((col32)<<5) &0x0000FC00) | (((col32)<<3) &0x000000F8)))
+#endif
+
+#ifdef DSAMPLE_COLOUR16
+//	July 1, 2005 REF: CRR 32677 - xpradipg
+//	the extra word padding is not required for the ISAMPLE AND CALLISTO
+#if (defined(ISAMPLE) || defined(CALLISTO))
+#define LCD_ROW_NUM_LWORDS ((LCD_COL)/2) /* col size in longwords         */
+#else
+#define LCD_ROW_NUM_LWORDS ((LCD_COL+1)/2) /* col size in longwords         */
+#endif
+#define BYTEPERPIXEL 2
+#ifdef PIXEL_0_IN_LSW
+#ifdef CHECK_LIMITS
+#define DSPL_SET_BITCOLOUR(x,j,col,txt) \
+{\
+if (((j)>=0) && ((j)<DISPLAY_SIZE)) \
+{	if ((x)&0x01)\
+		picture_col[j] = (picture_col[j] & 0xFFFF0000) | (col & 0x0000FFFF);\
+	else\
+		picture_col[j] = (picture_col[j] & 0x0000FFFF) | ((col <<16) & 0xFFFF0000);\
+}else {mmi_trace(txt);}\
+}
+#else
+#define DSPL_SET_BITCOLOUR(x,j,col,txt) \
+{	if ((x)&0x01)\
+		picture_col[j] = (picture_col[j] & 0xFFFF0000) | (col & 0x0000FFFF);\
+	else\
+		picture_col[j] = (picture_col[j] & 0x0000FFFF) | ((col <<16) & 0xFFFF0000);\
+}
+#endif
+#else
+#ifdef CHECK_LIMITS
+#define DSPL_SET_BITCOLOUR(x,j,col,txt) \
+{\
+if (((j)>=0) && ((j)<DISPLAY_SIZE)) \
+{	if ((x)&0x01)\
+		picture_col[j] = (picture_col[j] & 0x0000FFFF) | ((col <<16) & 0xFFFF0000);\
+	else\
+		picture_col[j] = (picture_col[j] & 0xFFFF0000) | (col & 0x0000FFFF);\
+}else {mmi_trace(txt);}\
+}
+#else
+#define DSPL_SET_BITCOLOUR(x,j,col,txt) \
+{	if ((x)&0x01)\
+		picture_col[j] = (picture_col[j] & 0x0000FFFF) | ((col <<16) & 0xFFFF0000);\
+	else\
+		picture_col[j] = (picture_col[j] & 0xFFFF0000) | (col & 0x0000FFFF);\
+}
+#endif
+
+#endif
+//GW Added () round 'px' in definition below
+#define DSPL_GET_LWORD(px,py) ((py)*LCD_ROW_NUM_LWORDS + ((px)/2))
+#define DSPL_GET_BYTE(px,py) (((py)*4)*LCD_ROW_NUM_LWORDS + ((px)*2))
+//	July 1, 2005 REF: CRR 32677 - xpradipg
+//	the value is not negated here since the LCD driver expects without negation
+#if (defined(ISAMPLE) || defined(CALLISTO))
+#define DSPL_GET_BITCOLOUR(col32) (((((col32) &0x00F80000)  >> 8) | (((col32) &0x0000FC00)	>> 5) | (((col32) &0x000000F8)	>> 3)))
+#else
+#define DSPL_GET_BITCOLOUR(col32) (~(((((col32) &0x00F80000)  >> 8) | (((col32) &0x0000FC00)	>> 5) | (((col32) &0x000000F8)	>> 3))))
+#endif
+#define DSPL_GET_PIXELCOLOUR(col32) (((((col32)<<8) &0x00F80000) | (((col32)<<5) &0x0000FC00) | (((col32)<<3) &0x000000F8)))
+#endif
+
+// 3 words of header info for 'pictures'
+#ifdef DSAMPLE_LITE
+static UINT32*  picture_bw    = NULL;//Pointer to data in display.
+static UINT32*  pictureCopy_bw= NULL;//Pointer to data in display.
+#endif//DSAMPLE_LITE
+
+#ifdef DSAMPLE_COLOUR
+static UINT32*  picture_col    = NULL;//Pointer to data in display.
+//	Mar 30, 2005	REF: CRR 29986	xpradipg
+//	removed the unused variable
+#ifndef FF_MMI_OPTIM
+static UINT32*  pictureCopy_col= NULL;//Pointer to data in display.
+#endif
+#endif
+
+#ifdef CSAMPLE
+#define HEADER_INFO (3)
+#define DISPLAY_SIZE (LCD_COL*LCD_COL_NUM_LWORDS)
+static UINT32 	display_bw [DISPLAY_SIZE+HEADER_INFO+10];
+#ifdef USE_PLOT
+static UINT32 	displayCopy_bw [DISPLAY_SIZE+HEADER_INFO+1];   /* copy to flag differences */
+#endif
+static UINT32*  picture_bw=NULL;//Pointer to data in display.
+static UINT32*  pictureCopy_bw= NULL;//Pointer to data in display.
+/* static char scratch [100];      */ /* command buffer - does not support output of new display  */
+#endif //CSAMPLE
+
+#ifdef BSAMPLE
+static UBYTE displayScr [LCD_ROW][LCD_COL_B];   /* display buffer           */
+static UBYTE displayCopy [LCD_ROW][LCD_COL_B];   /* copy to flag differences */
+/* static char scratch [LCD_ROW*LCD_COL_B*2+100]; */     /* command buffer           */
+#endif //BSAMPLE
+
+
+//Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg
+//the frame buffer will be defined in the MMI, this has to be put under the
+//section DMA in the memory - need to find out how it is done
+#if defined(ISAMPLE ) || defined(CALLISTO)
+#ifdef FF_MMI_NEW_LCD_API_MIG
+#pragma DATA_SECTION(lcd_frame_buffer, ".r2dbuffer")
+UINT32 lcd_frame_buffer [LCD_ROW*LCD_ROW_NUM_LWORDS];
+#endif
+#endif
+
+
+static int mobEnabled = 1;              /* mobile simulation disabled      */
+
+extern int mfwExtOut (char *cmd);       /* forward to ext. display  */
+UBYTE lcd_output_ready  = TRUE;
+UBYTE lcd_output_needed = FALSE;
+
+#define scrHlen 18
+static const char *scrHeader = "CONFIG MFWMOB SCR ";
+
+static int scrX, scrY;                  /* display size             */
+#if defined (WIN32)
+static int mtkEnabled = 0;              /* MMI Toolkit              */
+#endif
+
+static int internal = 0;                /* internal use only        */
+
+static int xIndex;                      /* data transfer index      */
+
+//accessible from outside e.g 3th application MMS
+void scrPoint (int px, int py, int col);
+#if (BOARD == 70) || (BOARD == 71)
+U8* get_LCD_bitmap(void)
+{
+       return NULL;
+}
+
+U32 get_screen_size(void)
+{
+    return 0;
+}
+
+
+void get_screen_capture(U8 *dest_data)
+{
+
+}
+
+#else
+
+
+//xrashmic 22 Aug, 2004 MMI-SPR-32798
+#ifdef DSAMPLE_COLOUR16
+#define SC_BITMAP_SIZE ( ((R2D_WIDTH + 7) / 8) * R2D_HEIGHT + 2 * sizeof(U16))
+#endif
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : get_LCD_bitmap                |
++--------------------------------------------------------------------+
+
+  PURPOSE : Return the frame buffer  
+                   xrashmic 22 Aug, 2004 MMI-SPR-32798
+                   Implemented by xreddymn
+*/
+
+U8* get_LCD_bitmap(void)
+{
+#ifdef DSAMPLE_COLOUR16
+	return((U8*)picture_col);
+#else
+       return NULL;
+#endif
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : get_screen_size                |
++--------------------------------------------------------------------+
+
+  PURPOSE : Return the size of the bitmap to hold the screen shot
+                   xrashmic 22 Aug, 2004 MMI-SPR-32798
+                   Implemented by xreddymn
+*/
+U32 get_screen_size(void)
+{
+#ifdef DSAMPLE_COLOUR16
+    return SC_BITMAP_SIZE;
+#else
+    return 0;
+#endif
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : get_screen_capture                |
++--------------------------------------------------------------------+
+
+  PURPOSE : Dumps the frame buffer data(16bit) into a monochrome data
+                   xrashmic 22 Aug, 2004 MMI-SPR-32798
+                   Implemented by xreddymn
+*/
+
+void get_screen_capture(U8 *dest_data)
+{
+#ifdef DSAMPLE_COLOUR16
+	U8 *source_data;
+	U32 source_offset=0;
+	U32 dest_offset=4;
+	S32 i,j;
+	U16 pixel_RGB16;
+	U8 R, G, B;
+	S32 avg;
+	U8 color=0; 
+
+	/* First two fields (u16) are width and height */
+	dest_data[0]=((R2D_WIDTH) & 0xFF);
+	dest_data[1]=((R2D_WIDTH) & 0xFF00)>>8;
+	dest_data[2]=((R2D_HEIGHT) & 0xFF);
+	dest_data[3]=((R2D_HEIGHT) & 0xFF00)>>8;
+	source_data=get_LCD_bitmap();
+	for(j=0;j<R2D_HEIGHT;j++)
+	{
+		for(i=0;i<R2D_WIDTH;i++)
+		{
+			if((i%8)==0)
+			{
+				dest_data[dest_offset]=0;
+				dest_offset++;
+			}
+			pixel_RGB16=source_data[source_offset++];
+			pixel_RGB16|=source_data[source_offset++]<<8;
+			pixel_RGB16=~pixel_RGB16;
+			R=((pixel_RGB16>>11)<<3)|0x07;
+			G=(((pixel_RGB16>>5)&0x3f)<<2)|0x03;
+			B=((pixel_RGB16&0x1f)<<3)|0x07;
+			avg=R+G+B;
+			avg/=3;
+			if(avg<0x80) color=0;
+			else color=1;
+			dest_data[dest_offset-1]|=(color<<(i%8));
+		}
+		source_offset+=4;	/* Add framebuffer padding bytes here */
+	} 
+#endif    
+}
+#endif
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)       MODULE  : DRV_DSPL                   |
+| STATE   : code                ROUTINE : dspl_BitBlt                |
++--------------------------------------------------------------------+
+
+  PURPOSE : This function is used to display a bitmap at the
+            specified location using the raster operation provided.
+            The bitmap format MUST be the same as the display and
+            cannot contain any transparent colours
+            If the bitmap does not cover the entire screen area, the rest of the
+            area is drawn in the background colour provided.
+
+*/
+#ifdef DSAMPLE_COLOUR
+void fastCopyBitmap(int startX, 	int startY, 	// start position of bitmap
+						int bmpSx,	int bmpSy,		//size of bitmap
+						char*	srcBitmap,
+						int posX,   	int posY,   	// start of area to be copied into
+						int sx,     	int sy,     	// size of area to be copied into
+						U32 bgd_col,	int bmpFormat)
+{
+	char * image;
+	int image_sx,image_x;
+	int bgd_sx_left;
+	int bgd_sx_right;
+	int i,y;
+	char *screen = (char*)picture_col;
+	U32 bgdColour;
+
+	if (posX < win_x1)
+	{
+		sx = sx - (win_x1-posX);
+		posX = win_x1;
+	}
+	if (posX+sx >win_x2)
+	{
+		sx = win_x2 - posX;
+	}
+	if (posY < win_y1)
+	{
+		sy = sy - (win_y1-posY);
+		posY = win_y1;
+	}
+	if (posY+sy >win_y2)
+	{
+		sy = win_y2 - posY;
+	}
+{
+	char trc[80];
+	sprintf(trc,"%d,%d,%d,%d,%d,%d",sx,sy,win_x1,win_y1,win_x2,win_y2);
+	mmi_trace(trc);
+}
+#ifdef DSAMPLE_COLOUR32
+	if (bmpFormat != BMP_FORMAT_16BIT_LCD_COLOUR)
+#endif
+#ifdef DSAMPLE_COLOUR16
+	if (bmpFormat != BMP_FORMAT_16BIT_LCD_COMPRESSED_COLOUR)
+#endif
+	{
+		int maxY;
+		//Either display as much of the image as possible or as much as will fit.
+		if (bmpSy > sy)
+			maxY = sy;
+		else
+			maxY = bmpSy;
+		dspl_Clear(posX,posY,(U16)(posX+sx-1),(U16)(posY+sy-1));
+		dspl_BitBlt2((short) posX,(short)posY,(USHORT)bmpSx,(USHORT)maxY,
+					(void *)srcBitmap,0, bmpFormat);
+		return;
+	}
+
+	bgdColour = DSPL_GET_BITCOLOUR(bgd_col);
+	bgdColourArray[0] = (bgdColour & 0x000000FF);
+	bgdColourArray[1] = (bgdColour & 0x0000FF00) >>8;
+	bgdColourArray[2] = (bgdColour & 0x00FF0000) >>16;
+	bgdColourArray[3] = (bgdColour & 0xFF000000) >>24;
+	for (i=BYTEPERPIXEL;i<LCD_COL*BYTEPERPIXEL;i++)
+		bgdColourArray[i] = bgdColourArray[i-BYTEPERPIXEL];
+	bgd_sx_left = (startX- posX);
+
+	if (srcBitmap)
+	{
+		image_x = posX - startX;
+		image_sx = bmpSx;
+		if (image_x < 0)
+		{
+			image_x = 0;
+		}
+		else
+			image_sx = image_sx - image_x;
+	}
+	else
+	{
+		image_sx = 0;
+		image_x  = 0;
+	}
+	if (bgd_sx_left <0)
+		bgd_sx_left=0;
+	if ((image_sx + bgd_sx_left) > sx)
+	{
+		image_sx = sx - bgd_sx_left;
+		bgd_sx_right = 0;
+	}
+	else
+	{
+		bgd_sx_right = sx-(image_sx+bgd_sx_left);
+	}
+	if (bgd_sx_right <0)
+		bgd_sx_right=0;
+	bgd_sx_right = bgd_sx_right*BYTEPERPIXEL;
+	bgd_sx_left  = bgd_sx_left*BYTEPERPIXEL;
+	if (image_sx > 0)
+		image_sx = image_sx*BYTEPERPIXEL;
+	else
+		image_sx = 0;
+	if (image_x > 0)
+		image_x = image_x*BYTEPERPIXEL;
+	else
+		image_x = 0;
+	if (posY+sy > LCD_ROW)
+		sy = LCD_ROW - posY;
+	for (y=posY; y<posY+sy; y++)
+	{
+		int yOfs = DSPL_GET_BYTE(posX,y);
+		if ((yOfs >=0) && (yOfs<DISPLAY_SIZE*4))
+		{
+		if (((srcBitmap) && (y>startY) && (y <bmpSy+startY) && (image_sx >0)))
+		{
+				image = &srcBitmap[(y-startY)*bmpSx*BYTEPERPIXEL];
+			if (bgd_sx_left >0)
+				memcpy(&screen[yOfs],&bgdColourArray[0],bgd_sx_left);
+			memcpy(&screen[yOfs+bgd_sx_left],&image[image_x],image_sx);
+			if (bgd_sx_right >0)
+				memcpy(&screen[yOfs+bgd_sx_left+image_sx],&bgdColourArray[0],bgd_sx_right);
+
+		}
+		else
+		{
+				memcpy(&screen[yOfs],&bgdColourArray[0],sx*BYTEPERPIXEL);
+			}
+		}
+	}
+}
+#else
+void fastCopyBitmap(int startX, 	int startY, 	// start position of bitmap
+						int bmpSx,	int bmpSy,		//size of bitmap
+						char*	srcBitmap,
+						int posX,   	int posY,   	// start of area to be copied into
+						int sx,     	int sy,     	// size of area to be copied into
+						U32 bgd_col,	int bmpFormat)
+{
+	//Fast copy is currently only required for colour bitmaps
+}
+#endif
+
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
+| STATE   : code                        ROUTINE : scrMobUpdate       |
++--------------------------------------------------------------------+
+
+  PURPOSE : Shadow display to mobile simulation
+
+*/
+
+void scrMobUpdate (void)
+{
+#if defined (WIN32)
+  USHORT x,y;
+  USHORT i;
+  USHORT z;
+
+  if (mtkEnabled)
+  {
+    USHORT   sdu_len;
+
+    switch (mtkEnabled)
+    {
+    case 1: // ASAMPLE
+      z= LCD_ROW;
+      sdu_len = 13 * z; // (100 * z Pixels);
+      {
+        PALLOC_SDU (mmi_display_req, MMI_DISPLAY_REQ, (USHORT)(sdu_len<<3));
+        {
+          mmi_display_req->c_x = LCD_COL;
+          mmi_display_req->c_y = z;
+          i=0;
+          for (y=0;y<z;y++)
+            for (x=0; x < 13; x++)
+              mmi_display_req->sdu.buf[i++] = displayScr[y][x];
+        }
+
+        TRACE_EVENT ("Send Display Content");
+#if defined NEW_FRAME
+        {
+          {
+            T_QMSG Message;
+
+              Message.MsgType = MSG_PRIMITIVE;
+              Message.Msg.Primitive.Prim = D2P(mmi_display_req);
+              Message.Msg.Primitive.PrimLen = sizeof (T_MMI_DISPLAY_REQ) + LCD_COL_B*z;
+            #ifdef MEMORY_SUPERVISION
+              vsi_c_send (VSI_CALLER hCommL1 ,&Message, __FILE__, __LINE__);
+            #else
+              vsi_c_send (VSI_CALLER hCommL1 ,&Message);
+            #endif
+          }
+        }
+#else
+//        vsi_c_send (VSI_CALLER hCommL1, D2P(mmi_display_req), sizeof (T_MMI_DISPLAY_REQ) + LCD_COL_B*z);
+#endif
+      }
+      break;
+
+    case 2: // another target with other dimensions
+      {
+        char buf[40];
+        sprintf (buf, "LCD NEEDED %d READY %d", lcd_output_needed, lcd_output_ready);
+        TRACE_EVENT (buf);
+      }
+      lcd_output_needed = TRUE;
+      if (lcd_output_ready)
+      {
+        lcd_output_needed = FALSE;
+        lcd_output_ready = FALSE;
+
+        sdu_len = 14 * 16 + 20;
+#if (LCD_ROW >= 64)
+        {
+          PALLOC_SDU (mmi_display_req, MMI_DISPLAY_REQ, sdu_len<<3);
+
+          mmi_display_req->c_x = LCD_COL;
+          mmi_display_req->c_y = 16;
+          mmi_display_req->attrib.content = 3;
+          i=0;
+          for (y=48;y<64;y++)
+            for (x=0; x < 13; x++)
+              mmi_display_req->sdu.buf[i++] = displayScr[y][x];
+#if defined NEW_FRAME
+          {
+            T_QMSG Message;
+
+              Message.MsgType = MSG_PRIMITIVE;
+              Message.Msg.Primitive.Prim = D2P(mmi_display_req);
+              Message.Msg.Primitive.PrimLen = sizeof (T_MMI_DISPLAY_REQ) + 14*16+20;
+            #ifdef MEMORY_SUPERVISION
+              vsi_c_send (VSI_CALLER hCommL1 ,&Message, __FILE__, __LINE__);
+            #else
+              vsi_c_send (VSI_CALLER hCommL1 ,&Message);
+            #endif
+          }
+#else
+          vsi_c_send (VSI_CALLER hCommL1, D2P(mmi_display_req), sizeof (T_MMI_DISPLAY_REQ) + 14*16+20);
+#endif
+        }
+#endif
+#if (LCD_ROW >= 48)
+        {
+          PALLOC_SDU (mmi_display_req, MMI_DISPLAY_REQ, (USHORT)(sdu_len<<3));
+
+          mmi_display_req->c_x = LCD_COL;
+          mmi_display_req->c_y = 16;
+          mmi_display_req->attrib.content = 2;
+          i=0;
+          for (y=32;y<48;y++)
+            for (x=0; x < 13; x++)
+              mmi_display_req->sdu.buf[i++] = displayScr[y][x];
+#if defined NEW_FRAME
+          {
+            T_QMSG Message;
+
+              Message.MsgType = MSG_PRIMITIVE;
+              Message.Msg.Primitive.Prim = D2P(mmi_display_req);
+              Message.Msg.Primitive.PrimLen = sizeof (T_MMI_DISPLAY_REQ) + 14*16+20;
+            #ifdef MEMORY_SUPERVISION
+              vsi_c_send (VSI_CALLER hCommL1 ,&Message, __FILE__, __LINE__);
+            #else
+              vsi_c_send (VSI_CALLER hCommL1 ,&Message);
+            #endif
+          }
+#else
+          vsi_c_send (VSI_CALLER hCommL1, D2P(mmi_display_req), sizeof (T_MMI_DISPLAY_REQ) + 14*16+20);
+#endif
+        }
+#endif
+        {
+          PALLOC_SDU (mmi_display_req, MMI_DISPLAY_REQ, (USHORT)(sdu_len<<3));
+
+          mmi_display_req->c_x = LCD_COL;
+          mmi_display_req->c_y = 16;
+          mmi_display_req->attrib.content = 1;
+          i=0;
+          for (y=16;y<32;y++)
+            for (x=0; x < 13; x++)
+              mmi_display_req->sdu.buf[i++] = displayScr[y][x];
+#if defined NEW_FRAME
+          {
+            T_QMSG Message;
+
+              Message.MsgType = MSG_PRIMITIVE;
+              Message.Msg.Primitive.Prim = D2P(mmi_display_req);
+              Message.Msg.Primitive.PrimLen = sizeof (T_MMI_DISPLAY_REQ) + 14*16+20;
+            #ifdef MEMORY_SUPERVISION
+              vsi_c_send (VSI_CALLER hCommL1 ,&Message, __FILE__, __LINE__);
+            #else
+              vsi_c_send (VSI_CALLER hCommL1 ,&Message);
+            #endif
+          }
+#else
+          vsi_c_send (VSI_CALLER hCommL1, D2P(mmi_display_req), sizeof (T_MMI_DISPLAY_REQ) + 14*16+20);
+#endif
+        }
+        {
+          PALLOC_SDU (mmi_display_req, MMI_DISPLAY_REQ, (USHORT)(sdu_len<<3));
+
+          mmi_display_req->c_x = LCD_COL;
+          mmi_display_req->c_y = 16;
+          mmi_display_req->attrib.content = 0;
+          i=0;
+          for (y=0;y<16;y++)
+            for (x=0; x < 13; x++)
+              mmi_display_req->sdu.buf[i++] = displayScr[y][x];
+#if defined NEW_FRAME
+          {
+            T_QMSG Message;
+
+              Message.MsgType = MSG_PRIMITIVE;
+              Message.Msg.Primitive.Prim = D2P(mmi_display_req);
+              Message.Msg.Primitive.PrimLen = sizeof (T_MMI_DISPLAY_REQ) + 14*16+20;
+            #ifdef MEMORY_SUPERVISION
+              vsi_c_send (VSI_CALLER hCommL1 ,&Message, __FILE__, __LINE__);
+            #else
+              vsi_c_send (VSI_CALLER hCommL1 ,&Message);
+            #endif
+          }
+#else
+          vsi_c_send (VSI_CALLER hCommL1, D2P(mmi_display_req), sizeof (T_MMI_DISPLAY_REQ) + 14*16+20);
+#endif
+        }
+        TRACE_EVENT ("Send Display Content");
+      }
+      break;
+    }
+  }
+#endif
+
+#ifdef BSAMPLE
+  if (mobEnabled)
+  {
+/*  ## scratch is not required and function mfwExtOut is 
+      ## not doing anything
+     sprintf(scratch,"%s%s %d",scrHeader,"disp",LCD_COL_B);
+    xIndex = 0;
+    mfwExtOut(scratch);
+    */
+  }
+#endif
+}
+
+
+int dspl_GetContrastColour( int ipCol)
+{
+	switch (ipCol & 0x00808080)
+	{
+		case 0x000000:		return (0x00FFFFFF);
+		case 0x000080:		return (0x00FFFF00);
+		case 0x008000:		return (0x00FF00FF);
+		case 0x008080:		return (0x00FF0000);
+		case 0x800000:		return (0x0000FFFF);
+		case 0x800080:		return (0x0000FF00);
+		case 0x808000:		return (0x000000FF);
+		case 0x808080:		return (0x00000000);
+		default:			return (0x00808080);
+	}
+	return (0x00808080);
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
+| STATE   : code                        ROUTINE : scrLCDUpdate       |
++--------------------------------------------------------------------+
+
+  PURPOSE : Shadow display to LCD
+
+*/
+
+//GW Procedure/data supplied by new TI Driver V5.3.1
+#ifdef R2D_ENABLED
+
+static T_R2D_SHAPE_PTR	scrDisplayRect = NULL; //rectangle defined as shape of the display
+static T_R2D_GC_PTR		scrPicPtr = NULL; //Pointer to gc with picture in it (b+w and col)
+static T_RVF_MB_ID			mb_id;	//ID of memory bank
+void r2d_refresh(void);
+int riv_err;
+extern T_R2D_GC_PTR r2d_g_lcd_gc;
+#endif // R2D_ENABLED
+static int picInit = 0;	//Have we set up the mb id etc yet ?
+
+//Initialises data required for bolck copy of a 'picture'
+void scrRivPictureClear(void)
+{
+#ifdef CSAMPLE
+    memset(display_bw,0,sizeof(display_bw));
+#ifdef USE_PLOT
+    memset(displayCopy_bw,0,sizeof(displayCopy_bw));
+	pictureCopy_bw = &displayCopy_bw[3]; //start of input data
+#endif
+
+	display_bw[0] = LCD_COL;
+	display_bw[1] = LCD_ROW;
+	display_bw[2] = DISPLAY_SIZE;
+	picture_bw = &display_bw[3]; //start of input data
+#endif
+
+#ifdef DSAMPLE_COLOUR
+#ifdef USEBUFFER
+	display_colour[0] = LCD_COL;
+	display_colour[1] = LCD_ROW;
+	display_colour[2] = DISPLAY_SIZE;
+	picture_col = &display_colour[3]; //start of input data
+#else
+//Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg
+//the picture_col is assigned with the address of the new frame buffer
+	#ifdef FF_MMI_NEW_LCD_API_MIG
+		picture_col = lcd_frame_buffer;
+	#else
+	picture_col = r2d_get_pixmap(r2d_g_lcd_gc);
+#endif
+#endif
+	{
+		U32 lWord,bitCol;
+		int j,y;
+		//GW When clearing screen - do not allow transparent background colours!
+		int bgdCol = dspl_GetBgdColour();
+		int fgdCol = dspl_GetFgdColour();
+		if (((bgdCol & 0x00F0F0F0) == (fgdCol  & 0x00F0F0F0)) ||
+		    ((bgdCol & 0xFF000000) == TRANSPARENT_32BIT_COLOUR))
+		{
+			/*Foreground and background colours are the same (or near enough) */
+			/* or background colour is transparent                            */
+			/*Select a colour that will contrast with the current foreground colour */
+			bgdCol = dspl_GetContrastColour(fgdCol);
+		}
+		bitCol = (DSPL_GET_BITCOLOUR(bgdCol)) & 0x00FFFFFF;
+
+#ifdef DSAMPLE_COLOUR32
+		bgdColourArray[0] = (bitCol & 0x000000FF);
+		bgdColourArray[1] = (bitCol & 0x0000FF00) >>8;
+		bgdColourArray[2] = (bitCol & 0x00FF0000) >>16;
+		bgdColourArray[3] = (bitCol & 0xFF000000) >>24;
+		for (j=4;j<LCD_COL*4;j++)
+			bgdColourArray[j] = bgdColourArray[j-4];
+		for (y=0; y<LCD_ROW; y++)
+		{
+			int yOfs = (y*LCD_ROW_NUM_LWORDS);
+			memcpy(&picture_col[yOfs] ,bgdColourArray,LCD_COL*4);
+		}
+#endif
+#ifdef DSAMPLE_COLOUR16
+		bgdColourArray[0] = (bitCol & 0x000000FF);
+		bgdColourArray[1] = (bitCol & 0x0000FF00) >>8;
+		for (j=2;j<LCD_COL*2;j++)
+			bgdColourArray[j] = bgdColourArray[j-2];
+		for (y=0; y<LCD_ROW; y++)
+		{
+			int yOfs = (y*LCD_ROW_NUM_LWORDS);
+			memcpy(&picture_col[yOfs] ,bgdColourArray,LCD_COL*2);
+		}
+#endif
+	}
+
+#endif
+
+#ifdef DSAMPLE_LITE
+	picture_bw = r2d_get_pixmap(r2d_g_lcd_gc);
+	memset(picture_bw,0,DISPLAY_SIZE*4);
+#endif
+
+
+}
+void scrRivPictureInit( void )
+{
+	static int err = -1;
+	T_RVF_MB_NAME 		mb_name;
+	T_RVF_MB_PARAM 		mb_param;
+	//Ensure data is only created once.
+//Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg
+//the scrRivePictureClear() is called even in case of ISAMPLE and CALLSTO boards	
+#if defined( R2D_ENABLED) || defined (ISAMPLE) || defined (CALLISTO)
+	if (picInit != 0)
+		return;
+	picInit = 1; //int underway.
+	scrRivPictureClear();
+#endif
+
+#ifdef CSAMPLE
+	strcpy(mb_name, "FRED");
+	mb_param.size = 256;
+	mb_param.watermark = 128;
+	riv_err = rvf_create_mb( mb_name, mb_param, &mb_id);
+
+	if (riv_err == 0)
+	{
+		scrPicPtr = r2d_new_picture_context(mb_id, display_bw,R2D_LCD_KIND);
+		scrDisplayRect = r2d_new_rectangle(mb_id,0,0,LCD_COL-1,LCD_ROW-1);
+	}
+	else
+	{
+		scrPicPtr = NULL;
+		scrDisplayRect  = NULL;
+	}
+#endif
+
+#ifdef DSAMPLE_COLOUR
+#ifdef USEBUFFER
+	strcpy(mb_name, "FRED");
+	mb_param.size = 256;
+	mb_param.watermark = 128;
+	err = rvf_create_mb( mb_name, mb_param, &mb_id);
+	if (err == 0)
+	{
+		scrPicPtr = r2d_new_picture_context(mb_id, display_colourPtr,R2D_FULL_KIND);// R2D_LCD_KIND);
+		scrDisplayRect = r2d_new_rectangle(mb_id,0,0,LCD_COL+1,LCD_ROW+1);
+	}
+	else
+#endif
+	{
+#ifndef FF_MMI_NEW_LCD_API_MIG
+		scrPicPtr = NULL;
+		scrDisplayRect  = NULL;
+#endif		
+	}
+#endif
+
+}
+
+//GW Change the display to  
+#ifdef DSAMPLE_COLOUR
+#ifdef DSAMPLE_COLOUR32
+#define TOP_BITS_SET 0xC618
+#endif
+#ifdef DSAMPLE_COLOUR16
+#define TOP_BITS_SET 0xC618C618
+#endif
+#endif
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)         MODULE  : SMI_WM                   |
+| STATE   : code                  ROUTINE : scrUnfocusDisplay      |
++--------------------------------------------------------------------+
+
+  PURPOSE : Causes the entire display to appear much darker, allowing the pop-up 
+  			dialog to be more clearly the focus especially the softkeys.
+
+GW #2294 23/07/03 - Created
+*/
+void scrUnfocusDisplay(void)
+{
+#ifndef _SIMULATION_  // Turn off this BMI Schnickschnack ...
+	int x,y;
+	UINT32 *picPtr;
+#ifndef DSAMPLE_COLOUR
+	UINT32 mask;
+#endif
+#ifdef DSAMPLE_COLOUR
+	picPtr = picture_col;
+#else
+	picPtr = picture_bw;
+#endif
+	if (picPtr != NULL)
+	{
+		for (y=0;y<LCD_ROW;y++)
+		{
+#ifndef DSAMPLE_COLOUR
+			if (y & 0x01)
+				mask = 0xAAAAAAAA;
+			else
+				mask = 0x55555555;
+#endif
+			for (x=0;x<LCD_ROW_NUM_LWORDS;x++)
+			{
+#ifdef DSAMPLE_COLOUR
+				//We Want to reduce colour by 50% (shift left) and set top bits to bits to 0
+				//Since picture colours are inverted, set top bits.
+				//Also, colouris very bright - reduce by 75%
+				if ((*picPtr & TOP_BITS_SET) != TOP_BITS_SET)
+					*picPtr = ((*picPtr) >> 2) | TOP_BITS_SET;
+#else
+				//B+W display - blank every second pixel
+				*picPtr = (*picPtr) & mask;
+#endif
+				picPtr++;
+			}
+		}
+	}
+#endif /* _SIMULATION_ */
+}
+
+
+//Set colour (only when different from last time)
+void scrSetR2DFgdCol(UINT32 col)
+{
+	U16 opCol_a,opCol_r,opCol_g,opCol_b;
+	static UINT32 oldCol = 0xFFFFFFFF;
+	if (col != oldCol)
+	{
+#ifdef DSAMPLE_COLOUR
+		opCol_a = 0xFF; // ((col & 0x0000FF00) >> 16);
+		opCol_r = ((col & 0x0000F800) >>  8);
+		opCol_g = ((col & 0x000007E0) >>  3);
+		opCol_b = ((col & 0x0000001F) <<  3);
+#else
+		opCol_a = 0xFF; // ((col & 0x0000FF00) >> 16);
+		opCol_r = ((col & 0x000000E0)       );
+		opCol_g = ((col & 0x0000001C) <<  3);
+		opCol_b = ((col & 0x00000003) <<  6);
+		if (opCol_r == 0)	opCol_r = 0x80;
+		if (opCol_g == 0)	opCol_g = 0x40;
+#endif
+#ifdef R2D_ENABLED
+		r2d_set_foreground_color_with_argb(r2d_g_lcd_gc, opCol_a, opCol_r, opCol_g, opCol_b );
+		oldCol = col;
+#endif
+	}
+}
+//Set colour (only when different from last time)
+void scrSetR2DBgdCol(UINT32 col)
+{
+	U16 opCol_a,opCol_r,opCol_g,opCol_b;
+	static UINT32 oldCol = 0xFFFFFFFF;
+	if (col != oldCol)
+	{
+#ifdef DSAMPLE_COLOUR
+		opCol_a = 0xFF; // ((col & 0x0000FF00) >> 16);
+		opCol_r = ((col & 0x0000F800) >>  8);
+		opCol_g = ((col & 0x000007E0) >>  3);
+		opCol_b = ((col & 0x0000001F) <<  3);
+#else
+		opCol_a = 0xFF; // ((col & 0x0000FF00) >> 16);
+		opCol_r = ((col & 0x000000E0)       );
+		opCol_g = ((col & 0x0000001C) <<  3);
+		opCol_b = ((col & 0x00000003) <<  6);
+		if (opCol_r == 0)	opCol_r = 0x80;
+		if (opCol_g == 0)	opCol_g = 0x40;
+#endif
+#ifdef R2D_ENABLED
+		r2d_set_background_color_with_argb(r2d_g_lcd_gc, opCol_a, opCol_r, opCol_g, opCol_b );
+		oldCol = col;
+#endif
+	}
+}
+//GW Procedure/data supplied by new TI Driver V5.3.1
+//length of array (32bit words) to hold a copy of the screen (maybe)
+#ifdef R2D_ENABLED
+extern T_R2D_GC_PTR r2d_g_lcd_gc;
+#endif
+/*  */
+void scrPlotR2DPoint(U32 col, INT16 x, INT16 y)
+{
+#ifdef R2D_ENABLED
+	static U32 fCol=0xFFFFFFFF;
+	static U32 bCol=0xFFFFFFFF;
+	static U32 flip=0;
+	if (fCol==col)
+	{
+		scrSetR2DFgdCol(col );
+		r2d_draw_point(r2d_g_lcd_gc,x,y);
+	}
+	else if (bCol == col)
+	{
+		scrSetR2DBgdCol(col );
+		r2d_erase_point(r2d_g_lcd_gc,x,y);
+	}
+	else if (flip)
+	{
+		flip = 0;
+		scrSetR2DBgdCol(col );
+
+		r2d_erase_point(r2d_g_lcd_gc,x,y);
+		bCol = col;
+	}
+	else
+	{
+		flip = 1;
+		scrSetR2DFgdCol(col );
+		r2d_draw_point(r2d_g_lcd_gc,x,y);
+		fCol = col;
+	}
+#endif
+}
+
+#ifdef BSAMPLE
+void scrLCDUpdate (void)
+{
+#ifdef USE_PLOT
+	int nPlots=0;
+
+	int row,rowstart;
+	int kstart,kend,k;
+	UBYTE *bcopy;
+	int i,j;
+	UBYTE m;
+	UBYTE  *bm;
+#else
+	int i;
+#endif
+
+#if defined (WIN32_SIM)
+    return;
+#endif
+    if (!scrEnabled)
+        return;
+
+#ifdef USE_PLOT
+	bm   = &displayScr[0][0];
+    bcopy = &displayCopy[0][0];
+    m = 0x80;
+    for (j = 0; j < LCD_ROW; j++)
+    {
+        for (k = 0; k < (LCD_COL+7)/8; k++)
+        {
+          //Only plot data if it has changed since last time
+          if (*bm != *bcopy)
+          {
+            m = 0x80;
+            kstart = k*8;
+            kend = k*8+8;
+            if (kend>LCD_COL)
+              kend = LCD_COL;
+            for (i = kstart; i < kend; i++)
+            {
+#ifdef R2D_ENABLED
+                if ((*bm) & m)
+
+					r2d_draw_point(r2d_g_lcd_gc,i,j);
+                else
+					r2d_erase_point(r2d_g_lcd_gc,j,i);
+#endif
+                m >>= 1;
+            }
+            *bcopy = *bm;//Update value
+          }
+          bm++;
+          bcopy++;
+        }
+    }
+
+#else
+    //* work around limitations of TI driver !                       *
+    for (i = 0; i < LCD_ROW; i++)
+    {
+        displayScr[i][LCD_COL_B-1] &= 0xF0;
+        displayScr[i][LCD_COL_B-1] |= (UBYTE) ((displayScr[i][6] >> 2) & 0x0F);
+    }
+
+    LCD_PixBlt(0,0,LCD_COL_B*8,8,(char*)&displayScr[0][0]);
+    LCD_PixBlt(0,8,LCD_COL_B*8,8,(char*)(&(displayScr[8][0])));
+    LCD_PixBlt(0,16,LCD_COL_B*8,8,(char*)(&(displayScr[16][0])));
+    LCD_PixBlt(0,24,LCD_COL_B*8,8,(char*)(&(displayScr[24][0])));
+#if (!CUST)//JVJE #if (CUST==1)
+	LCD_PixBlt(0,32,LCD_COL_B*8,8,(char*)(&(displayScr[32][0])));
+	LCD_PixBlt(0,40,LCD_COL_B*8,8,(char*)(&(displayScr[40][0])));
+#endif
+#endif
+
+}
+#endif
+
+
+
+
+#ifdef CSAMPLE
+void scrLCDUpdate (void)
+{
+int kstart,kend,k;
+int row,rowstart;
+int   i,j;
+INT16 x1,y1;
+UINT32  m;
+UINT32  *bm;
+UINT32  *bcopy;
+static UINT32 col=0;
+int count;
+int nPlots=0;
+
+#if defined (WIN32_SIM)
+    return;
+#endif
+    if (!scrEnabled)
+        return;
+
+#ifdef USE_PLOT
+
+	bm   = picture_bw;
+    bcopy = pictureCopy_bw;
+	for (j = 0; j < DISPLAY_SIZE; j++)
+	{
+		if (*bm != *bcopy)
+	    {
+        	//Only plot data if it has changed since last time
+		    m = 0x80000000;
+
+		    x1 = j / LCD_COL_NUM_LWORDS;
+		    y1 = j % LCD_COL_NUM_LWORDS;
+		    y1 = y1 << 5;
+		    y1 = (y1 + 16);
+		    x1 = (scrX-1)-x1;
+		    kstart = y1;
+		    kend = y1+32;
+		    for (i = kstart; i < kend; i++)
+        	{
+				nPlots++;
+#ifdef R2D_ENABLED
+				if ((*bm) & m)
+					r2d_draw_point(r2d_g_lcd_gc,x1,(i%64));
+            	else
+
+					r2d_erase_point(r2d_g_lcd_gc,x1,(i%64));
+#endif
+				m >>= 1;
+			}
+ 			*bcopy = *bm;//Update value
+       	}
+      	bm++;
+      	bcopy++;
+      	if (nPlots > MAX_NUMBER_PLOTS)
+      			return;
+    }
+#else
+	if (scrPicPtr != NULL)
+	{
+#ifdef R2D_ENABLED
+		r2d_fast_blit(scrPicPtr,r2d_g_lcd_gc);
+#endif
+		vsi_t_sleep(VSI_CALLER (20));
+	}
+#endif //old/new
+}
+#endif //CSAMPLE
+
+//June 03, 2005 REF: GSM-ENH-31636 xpradipg
+//CRR 28825:  xpradipg - 11 Feb 2005
+#if (defined(DSAMPLE) || defined(ESAMPLE) || defined(ISAMPLE) || defined(CALLISTO))// changes for flag cleanup and addition for ISAMPLE
+void scrLCDUpdate (void)
+{
+//	Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg
+//the co-ordinates are set to the entire LCD as we will be refreshing whole LCD
+#ifdef FF_MMI_NEW_LCD_API_MIG
+lcd_fb_coordinates p_lcd_coord = { 0,0,LCD_COL,LCD_ROW};
+#endif
+#if defined (WIN32_SIM)
+    return;
+#endif
+    if (!scrEnabled)
+        return;
+//Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg
+//call the new lcd AP in place of the old for refresh
+#ifdef FF_MMI_NEW_LCD_API_MIG
+	lcd_display(DISPLAY_MAIN_LCD,(U16*)picture_col,&p_lcd_coord);
+#else
+#ifdef R2D_ENABLED
+	r2d_flush();
+#endif
+#endif
+}
+#endif//D-sample
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
+| STATE   : code                        ROUTINE : scrMobCommand      |
++--------------------------------------------------------------------+
+
+  PURPOSE : Command string from mobile simulation
+
+*/
+
+
+void scrMobCommand (char *s)
+{
+#ifdef BSAMPLE
+    char *p;
+    unsigned char *q;
+    int i;
+    char scratch [LCD_ROW*LCD_COL_B*2+100];     /* command buffer           */	
+
+    if (strstr(s,"ena") == s)
+    {
+        mobEnabled = 1;
+        return;
+    }
+    if (strstr(s,"dis") == s)
+    {
+        mobEnabled = 0;
+        return;
+    }
+    if (strstr(s,"ok") == s)
+    {
+        if (xIndex < 0)
+            return;
+        strcpy(scratch,scrHeader);
+        if (xIndex >= sizeof(displayScr))
+        {
+            strcat(scratch,"done");
+            mfwExtOut(scratch);
+            return;
+        }
+        strcat(scratch,"data ");
+        p = scratch + strlen(scratch);
+        sprintf(p,"%04d %04d ",xIndex,LCD_COL_B*LCD_ROW/DISPL_DIV);
+        p = scratch + strlen(scratch);
+        q = (UBYTE *) displayScr;
+        for (i = 0; i < LCD_COL_B * LCD_ROW / DISPL_DIV; i++)
+        {
+            sprintf(p,"%02x",q[xIndex++]);
+            p += 2;
+        }
+        *p = '\0';
+        mfwExtOut(scratch);
+        return;
+    }
+    #endif
+}
+
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
+| STATE   : code                        ROUTINE : scrInit            |
++--------------------------------------------------------------------+
+
+  PURPOSE : initialize screen driver
+
+*/
+
+void scrInit (void)
+{
+//	Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg
+//New LCD API for initialization
+#ifdef FF_MMI_NEW_LCD_API_MIG
+	lcd_initialization(DISPLAY_MAIN_LCD);
+#else	
+    LCD_SetPower(); /* ES!! */
+    LCD_Reset();
+    LCD_Enable(1);
+
+#endif	
+	dspl_InitColour ();
+
+#ifdef LSCREEN
+	font_initFont(1);
+#else
+	font_initFont(0);
+#endif
+
+#ifdef BSAMPLE
+    memset(displayScr,0,sizeof(displayScr));
+    memset(displayCopy,0,sizeof(displayCopy));
+#else
+	scrRivPictureInit();
+#endif
+//Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg
+//clear the buffer with background color, since r2d_erase does the same
+#ifdef FF_MMI_NEW_LCD_API_MIG
+	scrRivPictureClear();
+#else
+#ifdef R2D_ENABLED
+	r2d_erase( r2d_g_lcd_gc );
+#endif
+#endif
+    mobEnabled = 0;
+    scrEnabled = 1;
+    internal = 0;
+    scrX = LCD_COL;
+    scrY = LCD_ROW;
+    xIndex = -1;
+	displayData.DisplayType = DSPL_TYPE_GRAPHIC;
+	 //GW Set display window to full screen
+	dspl_ResetWindow();
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
+| STATE   : code                        ROUTINE : scrExit            |
++--------------------------------------------------------------------+
+
+  PURPOSE : finalize screen driver
+
+*/
+
+void scrExit (void)
+{
+    LCD_Enable(0);
+    mobEnabled = 0;
+    scrEnabled = 0;
+    xIndex = -1;
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
+| STATE   : code                        ROUTINE : scrUpdate          |
++--------------------------------------------------------------------+
+
+  PURPOSE : set screen update mode
+
+GW 18/09/01 clear text invert flag whenever display is enabled/disabled.
+*/
+//GW mmi_trace is a call to the MMI to provide timings for MMI updates -
+//REMOVE FROM FINAL BUILD (if I forget!)
+int scrUpdate (int onOff)
+{
+    int ena = scrEnabled;
+	txtInvert = 0;	//clear text invert flag whenever display is enabled/disabled.
+    scrEnabled = onOff;
+    if (scrEnabled)
+    {
+#ifdef MMI_TRACE
+mmi_trace("scrupdate() enable start");
+#endif
+        scrLCDUpdate();
+        scrMobUpdate();
+#ifdef MMI_TRACE
+mmi_trace("scrupdate() enable end");
+#endif
+    }
+    else
+	{
+#ifdef MMI_TRACE
+mmi_trace("scrupdate() disabled");
+#endif
+	}
+    return ena;
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
+| STATE   : code                        ROUTINE : scrSize            |
++--------------------------------------------------------------------+
+
+  PURPOSE : retrieve display size
+
+*/
+
+void scrSize (int *x, int *y)
+{
+    *x = scrX;
+    *y = scrY;
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
+| STATE   : code                        ROUTINE : scrOnOff           |
++--------------------------------------------------------------------+
+
+  PURPOSE : switch display On/Off
+
+*/
+
+void scrOnOff (int on)
+{
+//kk to be checked
+/*  ## scratch is not required and function mfwExtOut is 
+      ## not doing anything
+   sprintf(scratch,"%sscrOnOff:%d",scrHeader,on);
+   mfwExtOut(scratch);
+   */
+}
+
+#if (!CUST)//JVJE #if (CUST==1)
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
+| STATE   : code                        ROUTINE : scrLight           |
++--------------------------------------------------------------------+
+
+  PURPOSE : switch display backlight On/Off
+
+*/
+
+void scrLight (int on)
+{
+//kk to be checked
+/*  ## scratch is not required and function mfwExtOut is 
+      ## not doing anything
+    sprintf(scratch,"%sscrLight:%d",scrHeader,on);
+   mfwExtOut(scratch);
+ */
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
+| STATE   : code                        ROUTINE : scrClear           |
++--------------------------------------------------------------------+
+
+  PURPOSE : clear display
+
+*/
+
+void scrClear (void)
+{
+
+#ifdef BSAMPLE
+    memset(displayScr,0,sizeof(displayScr));
+#else
+	scrRivPictureClear();
+#endif
+
+    if (scrEnabled)
+    {
+//Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg
+//this is specific to old driver. A corresponding API exist with new apis. 
+//need to check if it can be used 
+#ifndef FF_MMI_NEW_LCD_API_MIG
+        LCD_Clear();                    /* TI driver function       */
+#endif
+        scrMobUpdate();                 /* update mobile simulation */
+    }
+}
+#endif //CUST==1
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
+| STATE   : code                        ROUTINE : scrClearRect       |
++--------------------------------------------------------------------+
+
+  PURPOSE : clear display area
+
+*/
+#ifdef DSAMPLE_LITE
+
+void scrDrawFilledRect (int px, int py, int sx, int sy, U32 col)
+{
+	int i,j;
+	U32 opCol;
+	int word;
+
+	//Limit rectangle to the size of the screen.
+	if ((px >= scrX) || (py >= scrY))
+		return;
+
+	if ((col& 0xFF000000) == TRANSPARENT_32BIT_COLOUR)
+		return; //Background colour is transparent
+
+	//Allow -ve sizes but change data round
+	if (sx <0)
+	{
+		px = px+sx;
+		sx = -sx;
+	}
+	if (sy <0)
+	{
+		py = py+sy;
+		sy = -sy;
+	}
+	//Limit rectangle to size of window
+	if (px<win_x1)
+	{
+		sx = sx - win_x1;
+		px = win_x1;
+	}
+	if (py<win_y1)
+	{
+		sy = sy - win_y1;
+		py = win_y1;
+	}
+
+	if (px+sx >=win_x2)
+		sx = win_x2 - px-1;
+	if (py+sy >=win_y2)
+		sy = win_y2 - py-1;
+	if ((sx <= 0) || (sy<=0))
+		return;//cannot draw zero width rectangle.
+
+	opCol = col;
+	{
+		U32 maskL, maskR;
+		int skipBits,startWord,endWord;
+		maskL = 0xFFFFFFFF;
+		skipBits = px & 0x1F;
+		maskL = maskL << skipBits;
+		startWord = px >> 5;
+		maskR = 0xFFFFFFFF;
+		skipBits = (px+sx) & 0x1F;
+		maskR = ~(maskR << skipBits);
+		endWord = (px+sx) >> 5;
+		if (startWord == endWord)
+		{
+			maskL = maskL & maskR;
+			maskR = maskL;
+		}
+
+		if (col == 0)
+		{	//Set bgd colour to Black (0)
+		    for (j = py; j < py + sy; j++)
+		    {
+				word = DSPL_GET_LWORD(px,j);
+				picture_bw[word] = picture_bw[word] & (~maskL);
+				word++;
+				for (i = startWord+1; i < endWord; i++)
+				{
+					picture_bw[word] = 0;
+					word++;
+				}
+				word = DSPL_GET_LWORD(px+sx,j);
+				picture_bw[word] = picture_bw[word] & (~maskR);
+		    }
+		}
+		else
+		{	//Set bgd colour to White (1)
+		    for (j = py; j < py + sy; j++)
+		    {
+				word = DSPL_GET_LWORD(px,j);
+				picture_bw[word] = picture_bw[word] | (maskL);
+				word++;
+				for (i = startWord+1; i < endWord; i++)
+				{
+					picture_bw[word] = 0xFFFFFFFF;
+					word++;
+				}
+				word = DSPL_GET_LWORD(px+sx,j);
+				picture_bw[word] = picture_bw[word] | (maskR);
+		    }
+		}
+	}
+}
+#endif
+
+#ifdef DSAMPLE_COLOUR
+
+void scrDrawFilledRect (int px, int py, int sx, int sy, U32 col)
+{
+	int i,j;
+	U32 opCol;
+	char* screen;
+
+	//Limit rectangle to the size of the screen.
+	if ((px >= scrX) || (py >= scrY))
+		return;
+
+	if ((col& 0xFF000000) == TRANSPARENT_32BIT_COLOUR)
+		return; //Background colour is transparent
+
+	//Allow -ve sizes but change data round
+	if (sx <0)
+	{
+		px = px+sx;
+		sx = -sx;
+	}
+	if (sy <0)
+	{
+		py = py+sy;
+		sy = -sy;
+	}
+	//Limit rectangle to size of window
+	if (px<win_x1)
+	{
+		sx = sx - win_x1;
+		px = win_x1;
+	}
+	if (py<win_y1)
+	{
+		sy = sy - win_y1;
+		py = win_y1;
+	}
+
+	if (px+sx > win_x2)
+		sx = win_x2 - px;
+	if (py+sy > win_y2)
+		sy = win_y2 - py;
+	if ((sx <= 0) || (sy<=0))
+		return;//cannot draw zero width rectangle.
+
+	opCol = col;
+	//GW Fix - invert colour
+#ifdef USE_PLOT
+    for (j = py; j < py + sy; j++)
+    {
+		for (i = px; i < px+sx; i++)
+			scrPoint(i,j,opCol);
+    }
+#else
+	{
+		U32 lWord,bgdColour;
+		int y;
+		screen = (char*)picture_col;
+		bgdColour = DSPL_GET_BITCOLOUR(col);
+		bgdColourArray[0] = (bgdColour & 0x000000FF);
+		bgdColourArray[1] = (bgdColour & 0x0000FF00) >>8;
+		bgdColourArray[2] = (bgdColour & 0x00FF0000) >>16;
+		bgdColourArray[3] = (bgdColour & 0xFF000000) >>24;
+		for (i=BYTEPERPIXEL;i<sx*BYTEPERPIXEL;i++)
+			bgdColourArray[i] = bgdColourArray[i-BYTEPERPIXEL];
+		for (y=py; y<py+sy; y++)
+		{
+//			int yOfs = (y*LCD_COL+px);
+			int yOfs = DSPL_GET_BYTE(px,y);
+			memcpy(&screen[yOfs] ,bgdColourArray,sx*BYTEPERPIXEL);
+		}
+	}
+#endif//use plot
+}
+#endif
+
+
+#ifdef BSAMPLE
+void scrDrawFilledRect (int px, int py, int sx, int sy, U32 col)
+{
+	scrClearRect (px, py, sx, sy);
+}
+#endif
+#ifdef CSAMPLE
+void scrDrawFilledRect (int px, int py, int sx, int sy, U32 col)
+{
+	scrClearRect (px, py, sx, sy);
+}
+#endif
+
+void scrClearRect (int px, int py, int sx, int sy)
+{
+
+#ifdef BSAMPLE
+	int i,j;
+    int x1, x2;
+    UBYTE m1, m2;
+#endif
+
+#ifdef CSAMPLE
+	int x1;
+	int i,j;
+    int y1s, y2s;
+    int y1f, y2f;
+	U32 m1s,m2s;
+	U32 m1f,m2f;
+
+    int y1, y2;
+	U32 m1,m2;
+#endif
+
+    if (px < 0 || py < 0 || px >= scrX || py >= scrY
+                                       || sx < 0 || sy < 0)
+        return;
+    if (px + sx > scrX)
+        sx = scrX - px;
+    if (py + sy > scrY)
+        sy = scrY - py;
+
+	//Limit rectangle to size of window
+	if (px<win_x1)
+      {
+		sx = sx - win_x1;
+		px = win_x1;
+      }
+	if (py<win_y1)
+	{
+		sy = sy - win_y1;
+		py = win_y1;
+	}
+
+	if (px+sx >win_x2)
+		sx = win_x2 - px;
+	if (py+sy >win_y2)
+		sy = win_y2 - py;
+	if ((sx <= 0) || (sy<=0))
+		return;//cannot draw zero width rectangle.
+
+#ifdef BSAMPLE
+    x1 = px / 8;                        /* first x offset           */
+    x2 = (px + sx) / 8;                 /* last x offset            */
+    m1 = m2 = 0xff;
+    m1 = (UBYTE) ~(m1 >> (px & 7));        /* left mask                */
+    m2 = (UBYTE) (m2 >> ((px + sx) & 7));  /* right mask               */
+    if (x1 == x2)
+        m1 = m2 = m1 | m2;              /* combined masks           */
+    for (j = py; j < py + sy; j++)
+    {
+        displayScr[j][x1] &= m1;
+        for (i = x1 + 1; i < x2; i++)
+            displayScr[j][i] = '\0';
+        displayScr[j][x2] &= m2;
+    }
+#endif
+
+#ifdef CSAMPLE
+    for (i=0;i<sx;i++)
+    	for (j=0;j<sy;j++)
+    		scrPoint(px+i,py+j,0);
+#endif
+
+//June 03, 2005 REF: GSM-ENH-31636 xpradipg
+//CRR 28825:  xpradipg - 11 Feb 2005
+#if (defined(DSAMPLE) || defined(ESAMPLE) || defined(ISAMPLE) || defined(CALLISTO)) //clean up of flag and addition for ISAMPLE
+	scrDrawFilledRect ( px, py, sx, sy, dspl_GetBgdColour());
+#endif
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr              |
+| STATE   : code                        ROUTINE : scrText_Unicode      |
++--------------------------------------------------------------------+
+
+  PURPOSE : draw text
+
+*/
+
+void scrText_Unicode (int x, int y, USHORT *txt)
+{
+  UBYTE current_width=0;
+  USHORT current_code,first_byte_code,second_byte_code;
+  t_font_bitmap* current_bitmap,*error_bitmap;
+
+    if ( y > scrY)
+        return;
+
+    while ((*txt) && (x <= scrX))
+    {
+    current_code = (USHORT)((*txt)<<8)+(USHORT)((*txt)>>8);/*The USHORT is inverted, therefore we have to apply this simple change*/
+    current_bitmap = get_bitmap(current_code);
+		if (!current_bitmap)	/*ASCII codes will be represented*/
+    {
+			first_byte_code = (USHORT)((*txt)&0xFF);
+      error_bitmap = get_bitmap(first_byte_code);
+      if (error_bitmap)
+      {
+        dspl_show_bitmap(x,y,error_bitmap,SHOWBITMAP_INVERT);
+            x += error_bitmap->width;
+      }
+      second_byte_code = (USHORT)((*txt)>>8);
+      error_bitmap = get_bitmap(second_byte_code);
+      if (error_bitmap)
+      {
+        dspl_show_bitmap(x,y,error_bitmap,SHOWBITMAP_INVERT);
+            x += error_bitmap->width;
+      }
+    }
+    else
+    {
+      dspl_show_bitmap(x,y,current_bitmap,SHOWBITMAP_NORMAL);
+          x += current_bitmap->width;
+    }
+      txt++;
+  }
+
+}
+
+
+#ifndef DSAMPLE_COLOUR
+//Should work for DSAMPLE_LITE
+void dspl_show_bitmap(int x,int y,t_font_bitmap* current_bitmap,U32 attr )
+{
+ 	USHORT i, j,a,b;
+	int bmpWidthBytes;
+	bmpWidthBytes = (current_bitmap->width + 0x07) >> 3;
+
+	for (i = 0; i < current_bitmap->height; i++)
+    	for (j = 0; j < current_bitmap->width; j++)
+ 		{
+			a = (j&(0x07));
+			b = i*(bmpWidthBytes)+((j&0xF8)>>3);
+			if ((attr & SHOWBITMAP_SCALE_2x4) == 0)
+			{
+				if ((attr & SHOWBITMAP_NORMAL_MASK) == SHOWBITMAP_NORMAL)
+					scrPoint(x+j,y+i,current_bitmap->bitmap[b]&(0x80>>a));
+				else
+					scrPoint(x+j,y+i,((UBYTE)~(current_bitmap->bitmap[b]))&(0x80>>a));
+			}
+			else
+			{
+				int x1,y1;
+				int px = (current_bitmap->bitmap[b]&(0x80>>a));
+				for (x1 = x+j*2;x1 < x+j*2+2; x1++)
+					for (y1 = y+i*4; y1<y+i*4+4; y1++)
+						scrPoint(x1,y1,px);
+			}
+		}
+}
+
+#endif
+
+#ifdef DSAMPLE_COLOUR
+void dspl_show_bitmap(int x,int y,t_font_bitmap* current_bitmap,U32 attr )
+{
+	int i, j;
+	int bmpByte;		// which byte in bitmap we are looking at
+	UBYTE bmpMask;		// which bit in the (b+w) bitmap we are looking at
+	UBYTE bitSet;		// is the bit set or clear.
+	U32 bitCol;			// colour of bit in a colour bitmap
+	U32 fCol,bCol, col;/*MC SPR 1526*/
+	int step;
+	int lWord;
+
+	if (current_bitmap==NULL)
+		return;
+	switch (current_bitmap->format)
+	{
+	case BMP_FORMAT_BW_UNPACKED:
+	case BMP_FORMAT_BW_PACKED:
+		//b+w bitmap - deal with both packed and unpacked.
+		bmpMask = 0x80;
+		bmpByte = 0;
+		if (attr & SHOWBITMAP_INVERT) //invert
+		{
+			fCol = dspl_GetBgdColour();
+			bCol = dspl_GetFgdColour();
+		}
+		else
+		{
+			fCol = dspl_GetFgdColour();
+			bCol = dspl_GetBgdColour();
+		}
+		if (fCol==bCol)
+		{
+			fCol = 0x000000FF;
+			bCol =0x00FFFF00;
+		}
+		for (i = 0; i < current_bitmap->height; i++)
+		{
+			for (j = 0; j < current_bitmap->width; j++)
+		    {
+				/*	a = (j&(0x07));
+					b = i*((current_bitmap->bitmapSize)/(current_bitmap->height))+((j&0xF8)>>3);
+					bitSet = current_bitmap->bitmap[b]&(0x80>>a);*/
+		    	bitSet = current_bitmap->bitmap[bmpByte]&(bmpMask);
+
+				/*MC SPR 1526*/
+				if (bitSet)
+					col = fCol;
+				else
+					col = bCol;
+				if (col!=TRANSPARENT_32BIT_COLOUR)/*if colour transparent, don't draw point*/
+				{
+					scrPoint(x+j,y+i,col);
+				}
+				/*MC 1526 end*/
+
+				if (bmpMask <= 1)
+				{
+					bmpMask = 0x80;
+					bmpByte++;
+				}
+				else
+					bmpMask = bmpMask >>1;
+			}
+			// If we have an unpacked bitmaps and we are not already on a new byte, we move to a new byte
+			if ((current_bitmap->format == BMP_FORMAT_BW_UNPACKED) && (bmpMask != 0x80))
+			{
+				bmpMask = 0x80;
+				bmpByte++;
+			}
+		}
+		break;
+	case BMP_FORMAT_256_COLOUR:
+	  //bitmap is 256 colour bitmap - ignore 'attr'
+		bmpByte = 0;
+
+		for (i = 0; i < current_bitmap->height; i++)
+		{
+			for (j = 0; j < current_bitmap->width; j++)
+		    {
+		    	UINT32 col;
+		    	UINT32 colR,colG,colB;
+		    	col = current_bitmap->bitmap[bmpByte];
+				if (col!=TRANSPARENT_256_COL)
+				{
+				bitCol = (((col &0xE0)   <<16) |
+						  ((col &0x1C)	<<11) |
+						  ((col &0x03)	<< 6));/**/
+					//assume 16 bit colour
+					scrPoint(x+j,   y+i,bitCol);
+				}
+				bmpByte = bmpByte+1; //move to next byte
+
+			}
+		}
+		break;
+	case BMP_FORMAT_32BIT_COLOUR:
+	  //bitmap is a 32 bit colour bitmap - ignore 'attr'
+		bmpByte = 0;
+		for (i = 0; i < current_bitmap->height; i++)
+		{
+			for (j = 0; j < current_bitmap->width; j++)
+		    {
+		    	//32 bit bitmap - data is in bytes
+				//bmpByte = (i*current_bitmap->width+j)*4;
+				bitCol = ((current_bitmap->bitmap[bmpByte]   	<<24) |
+						(current_bitmap->bitmap[bmpByte+1]	<<16) |
+						(current_bitmap->bitmap[bmpByte+2]	<<8)  |
+						(current_bitmap->bitmap[bmpByte+3]));
+		    	if ((bitCol & 0xFF000000)!=TRANSPARENT_32BIT_COLOUR)
+					scrPoint(x+j,y+i,bitCol);
+				bmpByte = bmpByte+4; //move to next 32bit word
+			}
+		}
+		break;
+	case BMP_FORMAT_16BIT_LCD_COLOUR:				 //32 bits only first 2 bytes used
+	case BMP_FORMAT_16BIT_LCD_COMPRESSED_COLOUR: //16 bits
+		bmpByte = 0;
+		if (current_bitmap->format == BMP_FORMAT_16BIT_LCD_COMPRESSED_COLOUR)
+			step = 2;
+		else
+			step = 4;
+		for (i = 0; i < current_bitmap->height; i++)
+		{
+			for (j = 0; j < current_bitmap->width; j++)
+		    {
+		    	//32 bit bitmap - data is in bytes
+				//bmpByte = (i*current_bitmap->width+j)*4;
+				bitCol = ((current_bitmap->bitmap[bmpByte+1]     <<8) |
+						(current_bitmap->bitmap[bmpByte]));
+		    	if ((bitCol & 0x0000FFFF)!=TRANSPARENT_16BIT_COL)
+		    	{
+
+					lWord = DSPL_GET_LWORD(x+j,y+i);
+//	July 1, 2005 REF: CRR 32677 - xpradipg
+//	The data present of all 16bit images are in the negated format hence we 
+//    renegate to get it in the right format
+#if (defined(ISAMPLE) ||defined(CALLISTO))
+					bitCol = ~bitCol;
+#endif
+		    		DSPL_SET_BITCOLOUR(x+j,lWord,bitCol,"dsplShowbitmap");
+}
+		    	bmpByte = bmpByte+step; //move to next 32/16bit word
+			}
+		}
+
+		break;
+	default: //Unknown format
+		break;
+	}
+}
+#endif
+
+
+#define NO_COLOUR 0xFF123456
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr             |
+| STATE   : code                        ROUTINE : dspl_setBorderWidth  |
++--------------------------------------------------------------------+
+
+  PURPOSE : sets current border width
+
+GW 10/02/03 SPR#1721 - Created
+*/
+static int txtBorder=0;
+int dspl_setBorderWidth(int borderSize)
+{
+	int oldBorder;
+	oldBorder = txtBorder;
+	if ((borderSize >=0) && (borderSize <=4))
+		txtBorder = borderSize;
+	return (oldBorder);
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr             |
+| STATE   : code                        ROUTINE : dspl_getBorderWidth   |
++--------------------------------------------------------------------+
+
+  PURPOSE : returns current border width
+
+GW 10/02/03 SPR#1721 - Created
+
+*/
+int dspl_getBorderWidth(void)
+{
+	return(txtBorder);
+}
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr             |
+| STATE   : code                        ROUTINE : scrCharBorderOutput  |
++--------------------------------------------------------------------+
+
+  PURPOSE : draw text with a border
+
+GW 10/02/03 SPR#1721 - Created
+*/
+void scrCharBorderOutput(t_font_bitmap* chrBmp,
+						unsigned int fgdCol,unsigned int bgdCol,unsigned int borderCol,
+						int bWidth,
+						int px,int py
+						)
+{
+	int x,y,i;
+	int line[10];
+	int ofs;
+	int bgdLine;
+	int col;
+	int emask,pmask;
+	int init_emask = (0x01 << (28+bWidth));
+	int init_pmask = (0x01 << (28+bWidth));
+/*
+
+*/
+	for (i=0;i<10;i++)
+		line[i] = 0;
+
+	//trace("col=",fgdCol, bgdCol,borderCol,0x13);
+
+	//set up border mask
+	for (i=1;i<bWidth*2;i++)
+	{
+		init_emask = init_emask |  (init_pmask >> i) |  (init_pmask << i);
+	}
+	//trace("masks=",init_emask,init_pmask,0,0x12);
+
+	for (y=-bWidth;y<chrBmp->height+bWidth;y++)
+	{
+		//trace("y,ht,bWidth",y,chrBmp->height,bWidth, 0x03);
+		for (i=0;i<bWidth*2;i++)
+			line[i]=line[i+1];
+		line[bWidth*2] =0;
+
+		if (y+bWidth<chrBmp->height)
+		{
+			//work out where we want to display background
+			bgdLine = 0x0FFFFFF0;
+			bgdLine = bgdLine & (bgdLine << (24-chrBmp->width));
+			//Assume bitmaps are unpacked
+			switch((chrBmp->width+7) & (0xF8))
+			{
+			case 0x00:	//no data
+					break;
+			case 0x08: // 1 byte/char
+				ofs = y+bWidth;
+				line[bWidth*2] = ((unsigned int)chrBmp->bitmap[ofs]) << 20;
+				break;
+			case 0x10: // 2 bytes/char
+				ofs = (y+bWidth)*2;
+				line[bWidth*2] = (((unsigned int)chrBmp->bitmap[ofs]) << 20) |
+								(((unsigned int)chrBmp->bitmap[ofs+1]) << 12) ;
+				break;
+			case 0x18: // 3 bytes/char
+				ofs = (y+bWidth)*3;
+				line[bWidth*2] = (((unsigned int)chrBmp->bitmap[ofs]) << 20) |
+								(((unsigned int)chrBmp->bitmap[ofs+1]) << 12)  |
+								(((unsigned int)chrBmp->bitmap[ofs+2]) << 4) ;
+				break;
+			default:// unable to handle bitmaps > 24 pixels wide
+				//output checkerboard pattern as an error
+				if (y &0x01)
+					line[bWidth*2] = 0x0CCCCCC0;
+				else
+					line[bWidth*2] = 0x05555550;
+				break;
+			}
+		}
+		else
+		{
+			line[bWidth*2] = 0x00000000;
+			bgdLine = 0x00;
+		}
+		//trace("line=",line[0],line[1], line[2], 0x13);
+
+		emask = init_emask; // if any of the 3 pixels are set - erase point
+		pmask = init_pmask; // only when pixel is set - plot point.
+
+		for (x=-bWidth;x<chrBmp->width+bWidth;x++)
+		{
+			col = NO_COLOUR;
+			if (line[bWidth] & pmask)
+			{
+				//pixel is in fgd colour
+				col = fgdCol;
+			}
+			else
+			{
+				for (i=0;i<bWidth*2+1;i++)
+				{
+					if (line[i] & emask)
+						col = borderCol;
+				}
+				if ((bgdLine & pmask) && (col == NO_COLOUR))
+				{
+					col = bgdCol;
+				}
+			}
+			if ((col != NO_COLOUR) && (col != TRANSPARENT_32BIT_COLOUR))
+				scrPoint(px+x,py+y,col);
+			emask = emask>>1;
+			pmask = pmask>>1;
+//			trace("masks=",emask,pmask,col,0x13);
+		}
+	}
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr             |
+| STATE   : code                        ROUTINE : scrFastCharOutput    |
++--------------------------------------------------------------------+
+
+  PURPOSE : draw text avoiding using scrPoint
+
+GW 10/02/03 SPR#1736 - Created
+*/
+#ifdef DSAMPLE_COLOUR
+
+void scrFastCharOutput(t_font_bitmap* chrBmp,
+						unsigned int fColconv,unsigned int bColconv,
+						int x,int y
+						)
+{
+	int fHeight = dspl_GetFontHeight();
+	int ofs = chrBmp->height - fHeight;
+	int width = chrBmp->width;
+	int i,j,k = 0;
+	int sx,sy,ex,ey,lWord;
+	int bitSet;
+	UBYTE mask;
+	int ofsj,nbytes;
+	unsigned int col;
+	//ensure that the data is never wiritten 'off-screen'
+	if (x+width > win_x2)
+		ex = win_x2-x;
+	else
+		ex = width;
+	if (y+fHeight > win_y2)
+		ey = win_y2-y;
+	else
+		ey = fHeight;
+	if (x < win_x1)
+		sx = win_x1-x;
+	else
+		sx = 0;
+	if (y < win_y1)
+		sy = win_y1-y;
+	else
+		sy = 0;
+
+	nbytes = (width+7) >>3;
+	ofs = ofs + sy;
+	for (i=sy;i<ey;i++)
+	{
+		mask = 0x80 >> (sx & 0x07);
+		ofsj = sx >> 3;
+		for (j=sx;j<ex;j++)
+		{
+			//Have we data for the bitmap ?. If not, output a blank line.
+			if (ofs >=0)
+				bitSet = chrBmp->bitmap[ofs*nbytes+ofsj]&(mask);
+			else
+				bitSet = 0;
+
+			if (bitSet)
+				col = fColconv;
+			else
+				col = bColconv;
+			if (col!=TRANSPARENT_32BIT_COLOUR)
+			{
+			    lWord = DSPL_GET_LWORD(j+x,i+y);
+			    DSPL_SET_BITCOLOUR(j+x,lWord,col,"scrFastCharOutput");
+			}
+			mask = mask >> 1;
+			if (mask==0)
+			{
+				ofsj++;
+				mask = 0x80;
+			}
+		}
+		ofs++;
+	}
+}
+#endif
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr              |
+| STATE   : code                        ROUTINE : scrCharOutput        |
++--------------------------------------------------------------------+
+
+  PURPOSE : draw text
+
+GW 10/02/03 SPR#1736 - Created
+*/
+void scrCharOutput(t_font_bitmap* chrBmp,
+						unsigned int fCol,unsigned int bCol,
+						int x,int y,
+						int wChar, int hChar
+						)
+{
+	int fHeight = dspl_GetFontHeight();
+	int ofs = chrBmp->height - fHeight;
+	int width = chrBmp->width;
+	int i,j,k = 0;
+	int bitSet;
+	UBYTE mask;
+	int ofsj,nbytes;
+	unsigned int col;
+	int shiftj;
+	ofs = chrBmp->height - fHeight;
+	width = chrBmp->width;
+	k = 0;
+	for (i=0;i<fHeight;i++)
+	{
+		k = 0;
+		nbytes = (width+7) >>3;
+		for (j=0;j<width;j++)
+		{
+			shiftj= j & 0x07;
+			ofsj = j >> 3;
+			//Have we data for the bitmap ?. If not, output a blank line.
+			if (ofs >=0)
+				bitSet = chrBmp->bitmap[ofs*nbytes+ofsj]&(0x80>>shiftj);
+			else
+				bitSet = 0;
+
+			if (bitSet)
+				col = fCol;
+			else
+				col = bCol;
+			if (col!=TRANSPARENT_32BIT_COLOUR)
+			{
+				if (!hChar)
+					scrPoint(k+x,i+y,col);
+				else
+				{
+					scrPoint(k+x,i*2+y,col);
+					scrPoint(k+x,i*2+1+y,col);
+				}
+				if (wChar)
+				{
+					if ((j>=1) && (j<=wChar))
+					{	//for j=1,2,3 - plot 2 pixels
+						k++;
+						if (!hChar)
+							scrPoint(k+x,i+y,col);
+						else
+						{
+							scrPoint(k+x,i*2+y,col);
+							scrPoint(k+x,i*2+1+y,col);
+						}
+					}
+				}
+			}
+			k++;
+		}
+		ofs++;
+	}
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr              |
+| STATE   : code                        ROUTINE : dspl_ScrText         |
++--------------------------------------------------------------------+
+
+  PURPOSE : draw a line of ascii/unicode text
+
+GW 18/09/01 - Made invert flag local to file not procedure
+GW 10/02/03 SPR#1721	Added code to call separate procedure if a border is required.
+						Removed existing 'border' code.
+GW 14/02/03 SPR#1736 - Split code into separate procedures
+						Modified error display code to output ascii characters of the code if no
+						matching bitmap is found.
+*/
+void dspl_ScrText (int x, int y, char *txt, int style)
+{
+	int nChar = 0;
+    int i, j, k;
+	t_font_bitmap* chrBmp;
+	t_font_bitmap* errBmp[2] = {NULL,NULL};
+	int str1, str2;
+	int border = 0;
+	int shadow = 0;
+	int fHeight;
+	int wChar,hChar,shadowHt;
+	unsigned int fCol,bCol,borderCol,shadowCol,fColconv,bColconv;
+	unsigned int col;
+	int startX;
+    USHORT code;
+
+	startX = x;
+	shadowCol = 0;
+	borderCol = 0;
+	border = dspl_getBorderWidth();
+	//default to wide chars (for the moment)
+	if (style & TXT_STYLE_WIDECHAR)
+		wChar = 3;
+	else
+		wChar = 0;
+	if (style & TXT_STYLE_HIGHCHAR)
+		hChar = 1;
+	else
+		hChar = 0;
+
+	//Set-up default colours
+	fCol = dspl_GetFgdColour();
+	bCol = dspl_GetBgdColour();
+	switch (style & TXT_STYLE_MASK)
+    {
+	case TXT_STYLE_NORMAL:	//Normal
+	default:
+		break;
+	case TXT_STYLE_INVERT:	//Invert
+		fCol = dspl_GetBgdColour();
+		bCol = dspl_GetFgdColour();
+		break;
+	case TXT_STYLE_HIGHLIGHT:	//highlight - colour background of selected item in differently.
+		bCol = dspl_GetHighlightColour();
+		break;
+	case TXT_STYLE_BORDER:	// 1 pixelborder
+		if (border==0)
+			border = 1;
+		break;
+	case TXT_STYLE_2PIXEL_BORDER:	// 2 pixelborder
+		if (border==0)
+			border = 2;
+		break;
+	case TXT_STYLE_3PIXEL_BORDER:	// 3 pixelborder
+		if (border==0)
+			border = 3;
+		break;
+	case TXT_STYLE_4PIXEL_BORDER:	// 4 pixelborder
+		if (border==0)
+			border = 4;
+		break;
+	case TXT_STYLE_SHADOW1: //shadow
+		shadow = 1;
+		break;
+	case TXT_STYLE_SHADOW2: //deeper shadow
+		shadow = 2;
+		break;
+	}
+
+	if (fCol==bCol)
+	{
+		fCol = 0x00FF0000;
+		bCol = 0x0000FFFF;
+	}
+	if (border)
+	{
+		borderCol = dspl_GetBorderColour();
+		if (borderCol == fCol)
+		{	//A border colour the same as the text colour - get a contrasting colour
+			borderCol = dspl_GetContrastColour(fCol);
+		}
+	}
+	else
+		borderCol = 0;
+
+	if (shadow)
+		shadowCol = dspl_GetShadowColour();
+	else
+		shadowCol = 0;
+
+	//	SH - modified because it doesn't allow text to start off the screen
+	// GW - allow text to start off-screen but finish if completely off-screen
+    if (y > scrY)
+        return;
+	if (txt ==NULL)
+		return;
+
+	fHeight = dspl_GetFontHeight();
+	if (hChar)
+		shadowHt = fHeight*2;
+	else
+		shadowHt = fHeight;
+
+	//For faster operation - precalculate colours
+#ifdef DSAMPLE_COLOUR
+	if (fCol!=TRANSPARENT_32BIT_COLOUR)
+		fColconv = DSPL_GET_BITCOLOUR(fCol);
+	else
+		fColconv = fCol;
+	if (bCol!=TRANSPARENT_32BIT_COLOUR)
+		bColconv = DSPL_GET_BITCOLOUR(bCol);
+	else
+		bColconv = bCol;
+#endif
+	code = 0xFFFF;
+    while ((code !=0) &&(x <= scrX))
+    {
+    	nChar++;
+	    /*mc SPR 1319*/
+    	if (style &TXT_STYLE_UNICODE)
+    	{
+    		str1 = *txt;
+    		str2 = *(txt+1);
+    		code = ((str1<<8)&0xFF00) | (str2&0x00ff);
+    	}
+    	else/*mc end*/
+    	{
+    		str1 = *txt;
+    		str2 = 0x00;
+    		/*SPR 1508, convert ASCII char to unicode before drawing it*/
+    		code = translation_ascii_2_unicode[*txt];
+    	}
+    	if (code != 0)
+		{
+			chrBmp = get_bitmap(code);
+			if (chrBmp == NULL)
+			{
+				errBmp[0] = get_bitmap(str1);
+				errBmp[1] = get_bitmap(str2);
+			}
+#ifdef MMI_TRACE
+			{
+				char bfr[40];
+				if ((chrBmp==NULL) || (chrBmp->code==0xFFFF))
+				{
+					sprintf(bfr,"Undefined bitmap for 0x%04X",code);
+					mmi_trace(bfr);
+				}
+			}
+#endif
+		}
+    	else //end of string reached
+			chrBmp =NULL;
+		if (chrBmp != NULL)
+		{
+			if (border)
+			{
+				scrCharBorderOutput(chrBmp,fCol,bCol,borderCol,border,x,y);
+			}
+#ifdef DSAMPLE_COLOUR
+			else if ((!hChar) && (!wChar))
+			{	//GW 28/11/02 - for speed, don't use 'scrPoint'
+				//NB Code is only correct for a D-sample
+				scrFastCharOutput(chrBmp,fColconv,bColconv,x,y);
+			}
+#endif //DSAMPLE_COLOUR
+			else
+			{
+				scrCharOutput(chrBmp,fCol,bCol,x,y,wChar,hChar);
+			}
+		    x = x + chrBmp->width + wChar; //add 3 for 'wide' chars
+		    //If there is a pixel border between chars at the moment -
+		    x = x+border;
+		}
+		else if (code!=0)
+		{	//We have no bitmap - display ascii equivalent
+			for (i=0;i<2;i++)
+			{	if (errBmp[i]!= NULL)
+				{
+					scrCharOutput(errBmp[i],fCol,bCol,x,y,wChar,hChar);
+				    x = x + errBmp[i]->width + wChar;
+				    errBmp[i] = NULL;
+				}
+			}
+		}
+		/*MC SPR 1319*/
+		if (style &TXT_STYLE_UNICODE)
+			txt+=2;
+		else
+		/*mc end*/
+			txt++;
+	}
+    if (shadow)
+	{
+		for (i=0;i<shadowHt;i++)
+		{
+			for (k=0;k<shadow;k++)
+				scrPoint(x+k,i+y+k,shadowCol);
+		}
+		for (j=startX;j<x;j++)
+		{
+			for (k=0;k<shadow;k++)
+				scrPoint(j+1+k,shadowHt+y+k, shadowCol);
+		}
+	}
+#ifdef MMI_TRACE
+
+	{
+		char bfr[40];
+		sprintf(bfr,"Nchr=%d (%d,%d)",nChar,x,y);
+		mmi_trace(bfr);
+	}
+#endif
+}
+
+
+void scrText (int x, int y, char *txt)
+{
+	//Display non-inverted text
+	dspl_ScrText (x,y, txt, TXT_STYLE_NORMAL);
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
+| STATE   : code                        ROUTINE : scrText_Invert_Unicode|
++--------------------------------------------------------------------+
+
+  PURPOSE : draw text inverted
+
+*/
+
+void scrText_Invert_Unicode (int x, int y, USHORT *txt)
+{
+  UBYTE current_width=0;
+  USHORT current_code,first_byte_code,second_byte_code;
+  t_font_bitmap* current_bitmap,*error_bitmap;
+    if (x < 0 || y < 0 || y + 12 > scrY)
+        return;
+
+
+
+    while ((*txt) && (x + current_width <= scrX))
+    {
+    current_code = (USHORT)((*txt)<<8)+(USHORT)((*txt)>>8);/*The USHORT is inverted, therefore we have to apply this simple change*/
+    current_bitmap = get_bitmap(current_code);
+		if (!current_bitmap)	/*ASCII codes will be represented*/
+    {
+      first_byte_code = (USHORT)((*txt)&0xFF);
+      error_bitmap = get_bitmap(first_byte_code);
+      if (error_bitmap)
+      {
+        dspl_show_bitmap(x,y,error_bitmap,SHOWBITMAP_INVERT);
+            x += error_bitmap->width;
+      }
+      second_byte_code = (USHORT)((*txt)>>8);
+      error_bitmap = get_bitmap(second_byte_code);
+      if (error_bitmap)
+      {
+        dspl_show_bitmap(x,y,error_bitmap,SHOWBITMAP_INVERT);
+            x += error_bitmap->width;
+      }
+
+    }
+    else
+    {
+      dspl_show_bitmap(x,y,current_bitmap,SHOWBITMAP_INVERT);
+          x += current_bitmap->width;
+    }
+      txt++;
+  }
+
+}
+
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
+| STATE   : code                        ROUTINE : scrText_Invert     |
++--------------------------------------------------------------------+
+
+  PURPOSE : draw text inverted
+
+*/
+
+void scrText_Invert (int x, int y, char *txt)
+{
+	//Display inverted text
+	dspl_ScrText (x,y, txt, TXT_STYLE_INVERT);
+}
+
+
+EXTERN UBYTE   dspl_str_length(char * str)
+{
+  UBYTE count=0;
+  USHORT* current;
+
+  if (dspl_get_char_type() == DSPL_TYPE_ASCII)
+        return (strlen(str));
+  else
+  {
+    current = (USHORT*) str;
+    while (*current)
+    {
+      count++;
+      current++;
+    }
+    return count;
+  }
+}
+
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
+| STATE   : code                        ROUTINE : scrLine            |
++--------------------------------------------------------------------+
+
+  PURPOSE : draw line
+
+*/
+
+void scrLine (int x1, int y1, int x2, int y2)
+{
+    int x, y, dx, dy, c1, c2, err, swap = 0;
+	U32 fCol;
+
+    if (x1 < 0 || x1 >= scrX || x2 < 0 || x2 >= scrX ||
+        y1 < 0 || y1 >= scrY || y2 < 0 || y2 >= scrY)
+        return;
+	fCol = dspl_GetFgdColour();
+    dx = x2 - x1; dy = y2 - y1;
+    if (((dx < 0) ? -dx : dx) < ((dy < 0) ? -dy : dy))
+    {
+        swap = 1;                       /* take the long way        */
+        x = x1; x1 = y1; y1 = x;
+        x = x2; x2 = y2; y2 = x;
+    }
+    if (x1 > x2)
+    {
+        x = x1; x1 = x2; x2 = x;        /* always move to the right */
+        y = y1; y1 = y2; y2 = y;
+    }
+
+    dx = x2 - x1; dy = y2 - y1;
+    c1 = dy * 2; dy = 1;
+    if (c1 < 0)
+    {
+        c1 = -c1;
+        dy = -1;
+    }
+    err = c1 - dx; c2 = err - dx;
+    x = x1; y = y1;
+    while (x <= x2)
+    {
+        scrPoint(swap?y:x,swap?x:y,fCol);
+        x++;
+        if (err < 0)
+            err += c1;
+        else
+        {
+            y += dy;
+            err += c2;
+        }
+    }
+
+    if (internal)
+        return;
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
+| STATE   : code                        ROUTINE : scrRect            |
++--------------------------------------------------------------------+
+
+  PURPOSE : draw rectangle
+
+*/
+
+void scrRect (int px, int py, int sx, int sy)
+{
+    internal = 1;
+    scrLine(px,py,px+sx,py);
+    scrLine(px,py+sy,px+sx,py+sy);
+    scrLine(px,py,px,py+sy);
+    internal = 0;
+    scrLine(px+sx,py,px+sx,py+sy);
+}
+
+
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
+| STATE   : code                        ROUTINE : scrFntSelect       |
++--------------------------------------------------------------------+
+
+  PURPOSE : select the current font
+
+*/
+
+int scrFntSelect (int font)
+{
+    return 1;                           /* always OK                */
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
+| STATE   : code                        ROUTINE : scrFntHeight       |
++--------------------------------------------------------------------+
+
+  PURPOSE : get height of current font
+
+*/
+
+int scrFntHeight (void)
+{
+#ifdef LSCREEN
+	return 16;
+#endif
+
+  if (dspl_char_type == DSPL_TYPE_ASCII)
+    return 8;
+  else
+    return 12;
+}
+
+
+
+//Really get information about
+//	(1) how many chars we can have on a line
+//  (2) how many pixels are in a string
+//GW SPR#1721 - Include a border in the calculations
+int scrGetRealLength(char *str, int* totChar, int* totPixel)
+{
+	int nChar=0;
+	int nPixel=0;
+	int maxChar,maxPixel;
+	t_font_bitmap* bmp;
+	int strEnd;
+	USHORT str16,str1,str2;
+	UBYTE current_display_char_type = dspl_char_type;/*mc SPR 1319*/
+	int border;
+
+	//Calculate extra pixels allowed for the border
+	border = dspl_getBorderWidth();
+
+	if (*totChar<=0) //assume full str required.
+		maxChar = 256; //stop after 256 chars
+	else
+		maxChar = *totChar; //stop after 256 chars
+	if (*totPixel<=0)// assume no limit to len - limit at 2x screen
+		maxPixel = 2*scrX;
+	else
+		maxPixel = *totPixel;
+	strEnd = FALSE;
+	/*MC SPR 1319, char type is unicode if unicode tag*/
+	if(str[0] == 0x80)
+	{	current_display_char_type = DSPL_TYPE_UNICODE;
+		str+=2; /*ignore first char SPR 1442*/
+		nChar+=2;/*MC*/
+	}
+	else /*SPR 1526, assume if no unicode tag, we're in ASCII*/
+		current_display_char_type = DSPL_TYPE_ASCII;
+	/*MC 1526, end*/
+	while (!strEnd)
+	{
+		if (current_display_char_type == DSPL_TYPE_ASCII)
+		{
+			str16 = *str;
+			str++;
+		}
+		else
+		{
+			str1 = *str;
+			str++;
+			str2 = *str;
+			str++;
+			str16 = ((str1 << 8) & 0xFF00) + (str2 & 0x00FF);/*MC, fixed bitmask 1319*/
+
+		}
+		if (str16 == 0)
+		{	//reached end of string.
+			strEnd = TRUE;
+			bmp = NULL;
+		}
+		else
+			bmp = get_bitmap(str16);
+		if (bmp!= NULL)
+		{
+			if (nPixel +bmp->width < maxPixel)
+			{
+				nPixel = nPixel + bmp->width+border;
+				if (current_display_char_type == DSPL_TYPE_ASCII)
+					nChar++;
+				else
+					nChar+=2;
+				if (nChar >= maxChar)
+					strEnd = TRUE;
+			}
+			else
+				strEnd=TRUE;
+		}
+	}
+	*totChar = nChar;
+	*totPixel = nPixel;
+
+	return (nPixel);
+}
+
+
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
+| STATE   : code                        ROUTINE : scrFntGetFit       |
++--------------------------------------------------------------------+
+
+  PURPOSE : number of string chars that fit into the line
+
+*/
+
+
+int scrFntGetFit (char *tp, int lineWidth)
+{
+	int totChar = 0;
+
+//	scrGetRealLength(tp, &totChar, &lineWidth);
+//	return (totChar);
+
+
+  if (dspl_char_type == DSPL_TYPE_ASCII)
+    return (lineWidth /6);
+  else
+      return (lineWidth / 12);
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
+| STATE   : code                        ROUTINE : scrFntGetLen       |
++--------------------------------------------------------------------+
+
+  PURPOSE : number of pixel used by first n string chars
+
+*/
+
+
+
+
+int scrFntGetLen(char *tp, int nChars)
+{
+	int lineWidth = 0;
+
+
+  int count=0;
+
+  if (dspl_char_type == DSPL_TYPE_ASCII)
+      return (nChars * 6);
+  else
+  {
+    USHORT* temp = (USHORT*)tp;
+
+    while (*temp)
+    {
+      UBYTE first_byte = (UBYTE)(*temp);
+      if (first_byte)
+        count+=12;
+      else
+        count+=6;
+      temp++;
+    }
+      return count;
+  }
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
+| STATE   : code                        ROUTINE : scrBmpDraw         |
++--------------------------------------------------------------------+
+
+  PURPOSE : draw bitmap
+
+*/
+
+int scrBmpDraw (int px, int py, int sx, int sy,
+                    int ix, char *bm, int mode)
+{
+    int i, j;
+    unsigned char m;
+
+    if (px < 0 || px >= scrX || py < 0 || py >= scrY
+                                       || sx < 0 || sy < 0)
+        return 0;
+    if (px + sx > scrX)
+        sx = scrX - px;
+    if (py + sy > scrY)
+        sy = scrY - py;
+
+    m = 0x80;
+    bm += (sx * sy * ix) / 8;
+    for (j = 0; j < sy; j++)
+    {
+        for (i = 0; i < sx; i++)
+        {
+            scrPoint(px+i,py+j,*bm & m);
+            m >>= 1;
+            if (!m)
+            {
+                m = 0x80;
+                bm++;
+            }
+        }
+        if (m != 0x80)
+        {
+            m = 0x80;
+            bm++;
+        }
+    }
+
+    return 0;
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
+| STATE   : code                        ROUTINE : scrCurType         |
++--------------------------------------------------------------------+
+
+  PURPOSE : set cursor type (0 = no cursor)
+
+*/
+
+void scrCurType (int type)
+{
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
+| STATE   : code                        ROUTINE : scrCursor          |
++--------------------------------------------------------------------+
+
+  PURPOSE : set cursor at specified position
+
+*/
+
+void scrCursor (int x, int y)
+{
+    scrLine(x,y+7,x+5,y+7);
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
+| STATE   : code                        ROUTINE : scrPoint           |
++--------------------------------------------------------------------+
+
+  PURPOSE : draw point
+
+*/
+
+//Return colour of pixel at point (px,py) or zero if not on screen.
+static int getScrPoint (int px, int py)
+{
+#ifdef BSAMPLE
+    unsigned char m = 0x80;
+#endif //BSAMPLE
+#ifdef CSAMPLE
+	U32 m2;
+#endif //CSAMPLE
+	int x1,y1;
+	int lWord; // index for colour word
+	U32 opWord; //olour word
+	U32 op_col;
+	U32 picCol;
+
+    if (px < 0 || py < 0 || px >= scrX || py >= scrY)
+        return (0);
+
+#ifdef BSAMPLE
+    m >>= px & 7;                       // mask
+    px >>= 3; // x offset
+	if (displayScr[py][px] & m)
+		return (0x00FFFFFF);
+	else
+		return (0x00000000);
+
+#endif //BSAMPLE
+
+#ifdef CSAMPLE
+    //Display plots data from Right to Left
+    // - reverse x-coordinate
+    //Also display seems to be 16 pixels down the screen -
+    //plot points at y=(y-16) mod 64
+    x1 = (scrX-1)-px;
+    y1 = (py+48) & 63; //(py-16) ;
+    //Display is in columns for TI drivers
+	m2 = 0x80000000;
+    m2 = m2 >> (y1 & 31); //shift m2 by 0-31
+    y1 = y1 >> 5; // 32bits/word
+	return (picture_bw[lWord] & m2);
+#endif //CSAMPLE
+
+#ifdef DSAMPLE_COLOUR
+	//i/p colour is 32 bit - reduce to 16
+    x1 = px;
+    y1 = py;
+    lWord = y1*LCD_ROW_NUM_LWORDS + x1;
+    //GW invert pic bits
+	opWord = ~picture_col[lWord];
+
+	//Change from 16(8) bits to 32(24) bits
+#ifdef DSAMPLE_COLOUR32
+	opWord = opWord & 0x0000FFFF;
+#endif //DSAMPLE_COLOUR32
+#ifdef DSAMPLE_COLOUR16
+#ifdef PIXEL_0_IN_LSW
+	if (lWord & 0x01)
+		opWord = ((opWord >>16) & 0x0000FFFF);
+	else
+		opWord = ((opWord     ) & 0x0000FFFF);
+#else
+	if (lWord & 0x01)
+		opWord = ((opWord     ) & 0x0000FFFF);
+	else
+		opWord = ((opWord >>16) & 0x0000FFFF);
+#endif
+#endif //DSAMPLE_COLOUR16
+	return(DSPL_GET_PIXELCOLOUR(opWord));
+#endif //DSAMPLE_COLOUR
+
+#ifdef DSAMPLE_LITE
+	//i/p colour is 32 bit - reduce to 16
+    {
+    	int xmask;
+    	x1 = px;
+    	y1 = py;
+    	lWord = DSPL_GET_LWORD(x1,y1); //y1*LCD_ROW_NUM_LWORDS + x1 >> 5;
+    	xmask = 0x01 << (x1 & 0x1F);
+    	//GW invert pic bits
+		if (picture_bw[lWord] & xmask)
+			opWord = 0x00FFFFFF;
+		else
+			opWord = 0x00000000;
+		//Change from 16(8) bits to 32(24) bits
+	}
+	return (opWord);
+#endif //DSAMPLE_LITE
+
+}
+
+
+static int checkPixelColour(int px, int py, U32 col)
+{
+	U32 currCol;
+
+	currCol = getScrPoint (px, py);
+	if ((currCol & 0x00F8FCF8) == (col & 0x00F8FCF8))//16bit colour
+		return (1); //colours match
+	else
+		return (0); //colours are different
+}
+
+unsigned int translucence(unsigned int ipCol,unsigned int picCol)
+{
+	int trans1,trans2;
+	U32 col_red1,col_green1,col_blue1;
+	U32 col_red2,col_green2,col_blue2;
+	U32 rmerge,gmerge,bmerge;
+	U32 opCol;
+
+	//0xFF=transparent	(col=picCol)
+	//0x00=solid 		(col=ipCol)
+	trans1 = (ipCol >>24) & 0xFF;
+	trans2 = 255-trans1;
+	if (trans1 == 0x00)
+		return (ipCol);
+	else if (trans1 == 0xFF)
+		return (picCol);
+
+	//Read in colour from 24 bits
+	col_red1  	= (ipCol & 0x00FF0000) >> 8;
+	col_green1	= (ipCol & 0x0000FF00) >> 8;
+	col_blue1	= (ipCol & 0x000000FF);
+
+	//Read in colour from 8 bits
+	col_red2  	= (picCol & 0x00FF0000) >> 8;
+	col_green2	= (picCol & 0x0000FF00) >> 8;
+	col_blue2	= (picCol & 0x000000FF);
+	//red = 0x0000xx00, green = 0x000000xx, blue = 0x000000xx (256x higher than it should be)
+
+	//Round values up
+//	rmerge = (col_red1  *trans1+col_red2  *trans2+0x0FFFF)      & 0x00FF0000;
+//	gmerge = (col_green1*trans1+col_green2*trans2+0x000FF)      & 0x0000FF00;
+//	bmerge =((col_blue1 *trans1+col_blue2 *trans2+0x000FF) >> 8)& 0x000000FF;
+	rmerge = (col_red1  *trans2+col_red2  *trans1+0x1F0000)      & 0x00FF0000;
+	gmerge = (col_green1*trans2+col_green2*trans1+0x001000)      & 0x0000FF00;
+	bmerge =((col_blue1 *trans2+col_blue2 *trans1+0x001000) >> 8)& 0x000000FF;
+
+	opCol = rmerge|gmerge|bmerge;
+	return (opCol);
+}
+
+
+#ifdef BSAMPLE
+static void scrPoint (int px, int py, int col)
+{
+    unsigned char m = 0x80;
+
+    //GW Do not plot if outside of the defined window
+    if (px < win_x1 || py < win_y1 || px >= win_x2 || py >= win_y2)
+        return;
+
+    m >>= px & 7;                       // mask
+    px >>= 3;                           // x offset
+
+    if (col)
+		displayScr[py][px] |= m;
+    else
+    	displayScr[py][px] &= (UBYTE) ~m;
+}
+#endif //BSAMPLE
+
+#ifdef CSAMPLE
+static void scrPoint (int px, int py, int col)
+{
+	U32 m2;
+	int x1,y1;
+	int lWord; // index for colour word
+    if (px < win_x1 || py < win_y1 || px >= win_x2 || py >= win_y2)
+        return;
+    //Display plots data from Right to Left
+    // - reverse x-coordinate
+    //Also display seems to be 16 pixels down the screen -
+    //plot points at y=(y-16) mod 64
+    x1 = (scrX-1)-px;
+    y1 = (py+48) & 63; //(py-16) ;
+    //Display is in columns for TI drivers
+	m2 = 0x80000000;
+    m2 = m2 >> (y1 & 31); //shift m2 by 0-31
+    y1 = y1 >> 5; // 32bits/word
+    lWord = x1*LCD_COL_NUM_LWORDS+y1;
+	if (col)
+		picture_bw[lWord] |= m2;
+	else
+		picture_bw[lWord] &= (U32)(~m2);
+}
+#endif //CSAMPLE
+
+#ifdef DSAMPLE_COLOUR
+void scrPoint (int px, int py, int col)
+{
+	int lWord; // index for colour word
+	U32 bitCol;
+	//i/p colour is 32 bit
+    if (px < win_x1 || py < win_y1 || px >= win_x2 || py >= win_y2)
+        return;
+    lWord = DSPL_GET_LWORD(px,py);
+	bitCol = DSPL_GET_BITCOLOUR(col);
+    DSPL_SET_BITCOLOUR(px,lWord,bitCol,"plot");
+}
+#endif //DSAMPLE_COLOUR
+
+#ifdef DSAMPLE_LITE
+void scrPoint (int px, int py, int col)
+{
+	int m_px;
+	int word ;
+	//i/p colour is 32 bit
+    if (px < win_x1 || py < win_y1 || px >= win_x2 || py >= win_y2)
+        return;
+
+	m_px = 1 << (px & 0x1F);
+	word = DSPL_GET_LWORD(px,py);
+	if (col)
+		picture_bw[word] = picture_bw[word] | m_px;
+	else
+		picture_bw[word] = picture_bw[word] & (~m_px);
+}
+#endif //DSAMPLE_LITE
+
+
+
+/*******************************************************************
+ *                                                                 *
+ * PART III: LCD Simulation for Windows                            *
+ *                                                                 *
+ *******************************************************************/
+#if defined (WIN32)
+
+#define LCDE_COL 20
+#define LCDE_ROW 4
+static int screensize_x = 16;	
+static int screensize_y = 4;
+
+#define NULL_TERM   '\0'  /* string termination                   */
+
+static CHAR lcd_screen [LCDE_ROW+2][LCDE_COL+3];
+static CHAR cursor_line[LCDE_COL+3];
+
+static int lcd_cursX, lcd_cursY, lcd_enabled = FALSE;
+
+LOCAL void LCD_Refresh (void)
+{
+  int i;
+  CHAR buf[100];
+
+  for (i=0; i<screensize_y+2; i++)
+  {
+    sprintf (buf, "~LCD~%s", &lcd_screen[i][0]);
+#if defined NEW_FRAME
+    vsi_o_ttrace (0, 0xffff, buf);
+#else
+#endif
+    if (lcd_cursY+1 EQ i)
+    {
+      cursor_line[lcd_cursX+1] = '^';
+      sprintf (buf, "~LCD~%s", cursor_line);
+#if defined NEW_FRAME
+      vsi_o_ttrace (0, 0xffff, buf);
+#else
+#endif
+      cursor_line[lcd_cursX+1] = ' ';
+    }
+    else
+    {
+      if (i < screensize_y+1)
+      {
+        sprintf (buf, "~LCD~%s", cursor_line);
+#if defined NEW_FRAME
+        vsi_o_ttrace (0, 0xffff, buf);
+#else
+#endif
+      }
+    }
+  }
+}
+
+GLOBAL void LCD_Enable (int on)
+{
+  lcd_enabled = (on EQ 1);
+}
+
+GLOBAL void LCD_Clear (void)
+{
+  int r, c;
+
+  if (lcd_enabled)
+  {
+    lcd_cursX = lcd_cursY = 0;
+
+    for (r=1; r<screensize_y+1; r++)
+      for (c=1; c<screensize_x+1; c++)
+        lcd_screen[r][c] = ' ';
+
+    LCD_Refresh ();
+  }
+}
+
+GLOBAL void LCD_Reset (void)
+{
+  int r, c, i;
+
+  memset (cursor_line, ' ', screensize_x+3);
+  cursor_line[0] = cursor_line[screensize_x+1] = '|';
+  cursor_line[screensize_x+2] = NULL_TERM;
+
+  for (r=1; r < screensize_y+1; r++)
+  {
+    lcd_screen[r][0] = '|';
+    lcd_screen[r][screensize_x+1] = '|';
+  }
+  for (c=1; c < screensize_x+1; c++)
+  {
+    lcd_screen[0][c] = '-';
+    lcd_screen[screensize_y+1][c] = '-';
+  }
+
+  lcd_screen[0][0]                 = '+';
+  lcd_screen[screensize_y+1][0]         = '+';
+  lcd_screen[0][screensize_x+1]         = '+';
+  lcd_screen[screensize_y+1][screensize_x+1] = '+';
+
+  for (i=0; i<screensize_y+2; i++)
+    lcd_screen [i][screensize_x+2] = NULL_TERM;
+
+  lcd_enabled = TRUE;
+
+  LCD_Clear ();
+
+  lcd_enabled = FALSE;
+}
+
+GLOBAL void LCD_WriteString (int row, int col, CHAR *s)
+{
+  if (s == NULL)
+  {
+    TRACE_EVENT("LCD_WriteString got NULL Pointer as Text");
+    return;
+  }
+  if (lcd_enabled)
+  {
+    int len = strlen (s);
+
+    if (row < screensize_y AND col < screensize_x)
+    {
+      if ((col + len) > screensize_x)
+      {
+        /* clip the string */
+        s[(len = screensize_x-col)] = NULL_TERM;
+      }
+      memcpy (&lcd_screen[row+1][col+1], s, len);
+      LCD_Refresh ();
+    }
+  }
+}
+
+GLOBAL void LCD_Cursor (int row, int col)
+{
+  if (lcd_enabled)
+  {
+    if (row < screensize_y AND col < screensize_x)
+    {
+      lcd_cursY = row;
+      lcd_cursX = col;
+      LCD_Refresh ();
+    }
+  }
+}
+
+GLOBAL void LCD_SetPower (void)
+{
+}
+
+GLOBAL void LCD_PixBlt (int x, int y, int w, int h, char *bmp)
+{
+}
+
+/*
+ * Stimulation of the lcd driver
+ */
+GLOBAL void lcd_test (UBYTE mode)
+{
+  TRACE_EVENT ("Display Redirection activated");
+  mtkEnabled = mode;
+  scrInit();
+  if (mtkEnabled EQ 2)
+  {
+    scrY = 64;
+ }
+}
+#endif /* WIN32 */
+
+//Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg
+//New function added to control the refreshing of the LCD
+/*******************************************************************************
+
+ $Function:    	dspl_refresh
+ $Description:	controls the refresh of the LCD from MMI
+ $Returns:		the current status of refresh
+ $Arguments:	State - indicating the state to be set to.
+
+*******************************************************************************/
+int	dspl_control(int state)
+{
+	//	Nov 04, 2005 DR: OMAPS00052595
+#ifndef _SIMULATION_
+
+
+#ifdef FF_MMI_NEW_LCD_API_MIG
+	static BOOL refresh_status = DSPL_ACCESS_ENABLE;
+	T_LCD_REFCONTROL status;
+	TRACE_EVENT_P1("dspl_referesh() - state =>%d",state);	
+
+
+	if(state == refresh_status)
+		return refresh_status;
+//	Nov 02, 2005 DR: OMAPS00051051 - xpradipg
+//	Check for the state is made before the assignment
+	if( state != DSPL_ACCESS_QUERY)
+		refresh_status = state;
+#endif
+		
+	switch(state)
+	{
+		case DSPL_ACCESS_DISABLE:
+#ifdef FF_MMI_NEW_LCD_API_MIG
+			status = REF_DISABLED;
+			TRACE_EVENT("calling lcd_control with disable lcd");
+			lcd_control(DISPLAY_MAIN_LCD,LCD_REFCONTROL, (void *)&status);
+			return refresh_status;
+#endif			
+		case DSPL_ACCESS_ENABLE:
+#ifdef FF_MMI_NEW_LCD_API_MIG		
+			status = REF_ENABLED;
+			TRACE_EVENT("calling lcd_control with disable lcd");
+			lcd_control(DISPLAY_MAIN_LCD,LCD_REFCONTROL, (void *)&status);
+#else
+			r2d_g_refresh_disabled = state;
+#endif			
+		case DSPL_ACCESS_QUERY:	
+		default:
+#ifdef FF_MMI_NEW_LCD_API_MIG
+			return refresh_status;
+#else
+			return r2d_g_refresh_disabled;
+#endif
+	}
+#else
+	return 0;
+#endif
+
+}	
+
+#endif /* MMI != 0 */