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

initial import: leo2moko-r1
author Space Falcon <falcon@ivan.Harhan.ORG>
date Mon, 01 Jun 2015 03:24:05 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/g23m/condat/ms/src/bmi/MmiNetwork.c	Mon Jun 01 03:24:05 2015 +0000
@@ -0,0 +1,3135 @@
+/*******************************************************************************
+
+					CONDAT (UK)
+
+********************************************************************************                                                                              
+
+ This software product is the property of Condat (UK) Ltd and may not be
+ disclosed to any third party without the express permission of the owner.                                 
+                                                                              
+********************************************************************************
+
+ $Project name:	Basic MMI                                                      
+ $Project code:	BMI (6349)                                                           
+ $Module:		Network
+ $File:		    MmiNetwork.c
+ $Revision:		1.0                                                       
+                                                                              
+ $Author:		Condat(UK)                                                         
+ $Date:		    22/02/01                                                      
+                                                                               
+********************************************************************************
+                                                                              
+ Description:
+
+  
+
+********************************************************************************
+
+ $Hist       
+
+	Feb 15, 2006    ER: OMAPS00065203 x0pleela
+   	Description: Cingular Operator Name Prioritization implementation required
+   	Solution: Incorporated review comments
+   			- Included flag NEPTUNE_BOARD to retain old code for operator get name and 
+				added new code for this ER also
+			- Removed the global variable gOper_sel_done and have introduced 2 functions which will 
+				set and get the status of the operator selection
+
+	Feb 09, 2006    ER: OMAPS00065203 x0pleela
+   	Description: Cingular Operator Name Prioritization implementation required
+   	Solution: In function network(), check if EONS is allocated and activated. If not, get operator name from other sources
+			Removed CPHS check code as prioritized operator name is already updated to network_data
+   	
+	xrashmic 10 Nov, 2004 MMI-SPR-OMAPS00044200-OMAPS00044851
+	Added a please wait screen so that the sim is updated with the new code before 
+	populating the list again when deleting or when entering a newtwork code
+       
+    Nov 02, 2005	REF: omaps00044855   Sumanth Kumar.C
+    Description:	Phone crashes on invoking Manual option in Network Selection Menu.
+    Solution:		Memory free of network_data.pplmn is done when the editor exits instead of 
+    list exit by option selection so that the pplmn data is available when the list is invoked once again.
+
+	Jun 14, 2005 REF: MMI-FIX-30439 x0018858
+   	Description: The homezone/cityzone tags were not being displayed properly.
+   	Solution: Modified to save the tags properly in caches and also made the 
+	appropriate modifications to update the same properly during mobility.
+
+    Sep 23, 2004        REF: CRR 24562  xvilliva
+    Bug:	Enable/disable the manual network selection option depending
+			on ENS.
+    Fix:	If the manual network selection is disabled we check if an 
+			error is returned and flash an alert to the user.
+
+	Sep 8, 2004        REF: CRR 16062  xvilliva
+    Bug:	If a PLMN is selected (by using the middle key) from the PLMN list 
+    		presented upon a manual search the D-Sample may freeze.
+    Fix:	The "KEY_MNUSELECT" event is also monitered which was not
+    		done earlier and was resulting in the PLMN list shown again.
+
+    Jul 21, 2004        REF: CRR 13348  xvilliva
+    Bug:	After selecting HPLMN manually, the idle screen is not shown.
+    Fix:	After the "Network Selected" alert is flashed, we destroy the 
+    		phonebook menu to return to the idle screen.
+
+
+	 //  Apr 14, 2004        REF: CRR 12641  xpradipg
+	 //		The network when selected using "Automatic" is not showing an alert after selection.
+	 //		A flag has been used to show the alert when ever network is selected using 
+	 //		"Automatic" method. As the flag is present it will not flash this alert when the
+	 //		device is restarted.
+ 
+	25/10/00			Original Condat(UK) BMI version.	
+	
+	08-03-2006   REF: OMAPS00061049    x0020906
+	
+	Bug: The sample crashed many times while trying to camp onto a FPLMN. PCO stucked when tracing this TC, 
+	therefore no PCO traces available; only L1 traces (TestHarness).
+
+	Fix: During manual selection from the indication will get the plmn list count and used the count for allocating 
+	plmn_list pointer and then destorying the list and free the pointer allocation when particular network is selected
+	or when back softkey is pressed.
+
+	   
+ $End
+ // Issue Number : SPR#12654 on 07/04/04 by Pradeep/Vadiraj
+*******************************************************************************/
+
+
+/*******************************************************************************
+                                                                              
+                                Include Files
+                                                                              
+*******************************************************************************/
+
+#define ENTITY_MFW
+
+/* includes */
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#if defined (NEW_FRAME)
+
+#include "typedefs.h"
+#include "vsi.h"
+#include "pei.h"
+#include "custom.h"
+#include "gsm.h"
+
+#else
+
+#include "STDDEFS.H"
+#include "custom.h"
+#include "gsm.h"
+#include "vsi.h"
+
+#endif
+#include "mfw_sys.h"
+
+#include "prim.h"
+
+#include "mfw_mfw.h"
+#include "mfw_win.h"
+#include "mfw_kbd.h"
+/* SPR#1428 - SH - New Editor changes */
+#ifndef NEW_EDITOR
+#include "mfw_edt.h"
+#endif
+#include "mfw_lng.h"
+#include "mfw_icn.h"
+#include "mfw_mnu.h"
+#include "mfw_tim.h"
+#include "mfw_sim.h"
+#include "mfw_nm.h"
+#include "mfw_cm.h"
+#include "mfw_sat.h"
+#include "mfw_phb.h"
+#include "mfw_sms.h"
+
+
+#include "dspl.h"
+
+#include "ksd.h"
+#include "psa.h"
+
+
+#include "MmiDummy.h"
+#include "MmiMmi.h"
+#include "MmiMain.h"
+#include "MmiStart.h"
+#include "MmiPins.h"
+
+#include "MmiDialogs.h"
+#include "MmiLists.h"
+/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+#include "ATBCommon.h"
+#include "ATBDisplay.h"
+#include "ATBEditor.h"
+#include "AUIEditor.h"
+#else
+#include "MmiEditor.h"
+#endif
+
+#include "MmiMenu.h"
+#include "MmiIdle.h"
+#include "mmiCall.h"
+#include "MmiBookController.h"
+#include "MmiNetwork.h"
+#include "MmiSoftKeys.h"
+#include "MmiSounds.h"
+#include "MmiPcm.h"
+
+#include "prim.h"
+#ifndef PCM_2_FFS
+#include "pcm.h"
+#endif
+
+#include "mfw_ffs.h"
+#include "MmiCPHS.h"
+
+#ifdef MMI_HOMEZONE_ENABLED
+#include "MmiHomezone.h"
+#endif
+
+#include "MmiNetwork.h"
+
+#include "cus_aci.h"
+
+#include "mmiColours.h"
+
+/* BEGIN ADD: Neptune Alignment */
+#ifdef NEPTUNE_BOARD
+#include "bmi_integ_misc.h"
+#endif 
+/* END ADD: Neptune Alignment */
+#ifdef NEPTUNE_BOARD
+/* PLMN list count obtained from indication, stored in the global static variable*/
+/*OMAPS00061049 - 08-03-2006 */
+static int Plmn_list_count = 0;
+#endif
+
+
+/*
+ * Data for top window
+ */
+typedef struct
+{
+  T_MMI_CONTROL    mmi_control;
+  T_MFW_HND        network_win;        /* MFW win handler      */
+  T_MFW_HND        nm_handle;          /* MFW network handler  */
+  UBYTE			   aborted;
+  UBYTE			forbidden;
+  UBYTE			   keep_plmn_list;
+  T_MFW_NETWORK_STRUCT  *pplmn;              /* pref. PLMN list */
+  T_MFW_PPLMN_MEM  pplmn_mem;
+  UBYTE            plmn_name[SIZE_PLMN_NAME];      /* textual network name */
+  UBYTE            network_name[SIZE_NETWORK_NAME];    /* numeric network name */
+  USHORT           status;             /* current status       */
+  UBYTE            roaming_indicator;  /* Roaming Indicator    */
+  ListMenuData   * network_list;       /* PLMN available List  */
+  UBYTE            network_list_status;/* Network List Status */
+  UBYTE            network_search_name[MAX_PLMN][6]; /* numeric network name */
+  T_MFW_HND        network_search_win;
+  UBYTE			    Listposition;
+} T_network;
+
+T_network network_data;
+
+typedef struct
+{
+    T_MMI_CONTROL    mmi_control;
+    T_MFW_HND        win;
+    SHORT            id;
+    T_MFW_HND        parent;
+    T_MFW_HND        kbd;
+    T_MFW_HND        kbd_long;
+    T_MFW_HND        menu;
+    T_MFW_HND        dialog_win;
+	ListMenuData     *network_list;
+/*SPR 2635, replace pplmn data structure pointer with pointer to array of strings*/
+	char**		pplmn_longnames;
+    CHAR 			   buffer[6];
+#ifdef NEW_EDITOR
+	T_AUI_EDITOR_DATA	editor_info;	/* SPR#1428 - SH - New Editor data */
+#else
+	T_EDITOR_DATA     editor_info; /* storage for editor attributes */ 
+#endif
+} T_network_OPT;
+
+
+typedef enum
+{
+    E_INIT,
+    E_BACK,
+    E_RETURN,
+    E_ABORT,
+    E_EXIT
+} e_lists_events;
+
+//  Apr 14, 2004        REF: CRR 12641  xpradipg
+static BOOLEAN	Auto_Network_Select=false;
+extern T_MFW_HND gPhbkMenu;//    Jul 21, 2004        REF: CRR 13348  xvilliva
+//    Sep 23, 2004        REF: CRR 24562  xvilliva
+extern int g_ensErr;
+
+//x0pleela 10 Feb, 2006 ER: OMAPS00065203
+EXTERN UBYTE gEons_alloc_active; 		/* EONS allocation and activation */
+
+/*
+ * Local prototypes
+ */
+static int            network_win_cb                 (T_MFW_EVENT event, T_MFW_WIN * win);
+static int            network_nm_cb                  (T_MFW_EVENT event, T_MFW_HND para);
+static void           network_remove_network_log     (void);
+static UBYTE          network_log_enabled            (void);
+static void           network_list_cb                (T_MFW_HND win, ListMenuData * ListData);
+static void           network_pref_list_cb           (T_MFW_HND win, ListMenuData * ListData);
+static ListMenuData * network_create_list            (T_network * data, T_MFW_PLMN_LIST * plmn_list);
+static ListMenuData * network_create_pref_list       (T_network * data);
+static ListMenuData * network_create_mobile_list     (T_network_OPT * data);
+static void 		network_start_animation_plmn_selection	(int plmn_value);
+static void           network_start_animation        (void);
+static void           network_stop_animation         (void);
+static void           network_selected				         (void);
+static void           network_forbidden_plmn         (void);
+static void           network_no_plmns               (void);
+       void           network_animation_cb           (T_MFW_HND win, UBYTE identifier, UBYTE reason);
+//Jul 21, 2004        REF: CRR 13348  xvilliva
+//We use a seperate callback for "Network Selected".
+void           network_select_animation_cb           (T_MFW_HND win, UBYTE identifier, UBYTE reason);
+     T_MFW_HND      network_MNU_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr);
+static T_MFW_HND      network_MNU_create(MfwHnd parent_window);
+static void           network_MNU_destroy(MfwHnd own_window);
+     void           network_MNU_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter);
+static int            network_MNU_mnu_cb (MfwEvt e, MfwMnu *m);
+static int            network_MNU_win_cb (MfwEvt e, MfwWin *w);
+static int            network_MNU_kbd_cb (MfwEvt e, MfwKbd *k);
+static int		   network_request_plnm_list (MfwMnu* m, MfwMnuItem* i);
+void                network_delete_pref_plnm (T_MFW_HND win , USHORT identifier, UBYTE reason);
+void                network_info_screen (T_MFW_HND win, USHORT MessageId, T_VOID_FUNC funt_ptr );// xrashmic 10 Nov, 2004 MMI-SPR-OMAPS00044200-OMAPS00044851
+static int            network_delete(MfwMnu* m, MfwMnuItem* i);
+	T_MFW_HND network_EDT_start (MfwMnu* m, MfwMnuItem* i);
+static T_MFW_HND network_EDT_create (T_MFW_HND parent);
+static void network_EDT_destroy (T_MFW_HND window);
+static void network_EDT_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter);
+static void network_EDT_editor_cb (T_MFW_HND win, USHORT Identifier, USHORT event);
+/* SPR#2354 - SH -Added two new callbacks */
+static void network_request_plmn_list_cb(T_MFW_HND win, USHORT identifier, UBYTE reason);
+void network_mobile_list_changed_cb(T_MFW_HND win , USHORT identifier, UBYTE reason);
+
+
+/*
+ * Local Definitions
+ */
+#define NETWORK_LIMITED_SERVICE   420
+#define NETWORK_NO_NETWORK        421
+#define NETWORK_PLMN_LIST         422
+#define NETWORK_PREFERRED_LIST    423
+#define NETWORK_PPLMN_MEM_LIST    424
+/* SPR759 - SH - Cell reselection */
+#define NETWORK_CELL_SELECT        425
+
+#define NETWORK_LIST_DISPLAY      430
+#define NETWORK_LIST_SELECT_PLMN  432
+
+#ifdef NEPTUNE_BOARD
+/* List destory not done - added - OMAPS00061049 - 08-03-2006 */
+#define NETWORK_LIST_DESTORY          440   
+#endif
+
+/*
+ * Local Network List Status
+ */
+#define NETWORK_LIST_DISPLAY_FIRST   1
+#define NETWORK_LIST_SELECTED        2
+#define NETWORK_LIST_REGISTRATION    3
+#define NETWORK_PREF_LIST_SELECTED   4
+#define NETWORK_MENU_ITEM            2
+
+//nm 5.3.01 this number will be change
+#define MAX_SHOW_OF_PLMN 			99
+
+static MfwMnuItem network_OPTItems [] =
+{
+    {0,0,0,(char *)TxtSelectFromList,    0,  (MenuFunc)network_request_plnm_list, item_flag_none},
+    {0,0,0,(char *)TxtEnterNetworkCode, 0,  (MenuFunc)network_EDT_start,   item_flag_none},
+    {0,0,0,(char *)TxtDelete,           0,  (MenuFunc)network_delete,          item_flag_none}
+};
+
+static MfwMnuAttr network_OPTAttrib =
+{
+    &network_menuArea,
+    MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu       */
+    -1,                                 /* use default font         */
+    network_OPTItems,                      /* with these items         */
+    sizeof(network_OPTItems)/sizeof(MfwMnuItem), /* number of items     */
+	COLOUR_LIST_NETWORK, TxtNull, NULL, MNUATTRSPARE
+
+
+};
+
+
+
+static MfwMnuAttr network_menuAttrib =
+{
+    &network_menuArea,
+    MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu       */
+    -1,                                 /* use default font         */
+    NULL,                               /* with these items         */
+    0,                                   /* number of items     */
+	COLOUR_LIST_NETWORK, TxtNull, NULL, MNUATTRSPARE
+
+};
+
+
+/*******************************************************************************
+
+ $Function:    	networkInit
+
+ $Description:	
+
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+T_MFW_HND networkInit (T_MFW_HND parent_window)
+{
+  return (network_create (parent_window));
+}
+
+
+/*******************************************************************************
+
+ $Function:    	networkExit
+
+ $Description:	exit network handling (Backward Compatibility interface)
+
+ $Returns:		
+
+ $Arguments:	
+ *********************************************************************/
+
+
+void networkExit (void)
+{
+  network_destroy (network_data.network_win);
+}
+
+/*********************************************************************
+ *
+ * Network Dialog
+ *
+ * Window - Structure
+ *
+ * network    -->  network_list
+ *            -->  network_search_animation
+ *
+ *********************************************************************/
+
+/*******************************************************************************
+
+ $Function:    	network_create
+
+ $Description:	create network top window
+
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+T_MFW_HND network_create (T_MFW_HND parent_window)
+{
+  T_network * data = &network_data;
+  T_MFW_WIN * win;
+
+  TRACE_FUNCTION ("network_create()");
+
+  data->network_win = win_create (parent_window, 0, 0, (T_MFW_CB)network_win_cb);
+
+  if (data->network_win EQ 0)
+    return 0;
+
+  /*
+   * Create window handler
+   */
+  data->mmi_control.dialog = (T_DIALOG_FUNC)network;
+  data->mmi_control.data   = data;
+  win                      = ((T_MFW_HDR *)data->network_win)->data;
+  win->user                = (void *) data;
+
+  /*
+   * Initialise MFW
+   */
+  nm_init ();
+
+  /*
+   * Create any other handler
+   */
+    data->nm_handle = nm_create (data->network_win, E_NM_ALL_SERVICES, (T_MFW_CB)network_nm_cb);
+
+  memset (data->plmn_name, 0, SIZE_PLMN_NAME);
+  memset (data->network_name, 0, SIZE_NETWORK_NAME);
+
+  data->aborted = FALSE;
+  data->keep_plmn_list = FALSE;
+  data->forbidden = FALSE;
+
+  data->status   = NETWORK_NO_SERVICE;
+  data->network_list = NULL;
+  data->network_search_win = 0;
+  data->Listposition = 0;
+
+
+
+  winShow(data->network_win);
+  /*
+   * return window handle
+   */
+  return data->network_win;
+}
+
+/*******************************************************************************
+
+ $Function:    	network_destroy
+
+ $Description:	destroy network top window
+
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+void network_destroy (T_MFW_HND own_window)
+{
+  T_MFW_WIN * win;
+  T_network * data;
+
+  TRACE_FUNCTION ("network_destroy()");
+
+  if (own_window)
+  {
+    win  = ((T_MFW_HDR *)own_window)->data;
+    data = (T_network *)win->user;
+
+    if (data)
+    {
+      /*
+       * Exit NM and delete NM handler
+       */
+      nm_exit ();
+      nm_delete (data->nm_handle);
+
+      /*
+       * Delete WIN handler
+       */
+      win_delete (data->network_win);
+    }
+  }
+}
+
+/*******************************************************************************
+
+ $Function:    	network
+
+ $Description:	network top window dialog function
+
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+void network (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
+{
+  T_MFW_WIN         * win_data = ((T_MFW_HDR *) win)->data;
+  T_network         * data     = (T_network *)win_data->user;
+  T_MFW_NETWORK_STRUCT  * plmn_ident;
+
+  TRACE_FUNCTION(">>> network()");
+
+
+  switch (event)
+  {
+    case NETWORK_NO_SERVICE:
+    case NETWORK_LIMITED_SERVICE:
+      TRACE_EVENT ("NETWORK NO/LIMITED SERVICE");
+      /*
+       * Set Status
+       */
+      data->status = NETWORK_NO_SERVICE;
+
+      /*
+       * Check if network log is enabled
+       */
+      if (network_log_enabled ())
+      {
+        SEND_EVENT (idle_get_window(), NETWORK_NO_PLMN_XXX_AVAIL, 0, 0);
+      }
+      else
+      {
+        SEND_EVENT (idle_get_window(), NETWORK_NO_SERVICE, 0, 0);
+        if (data->network_list NEQ NULL)
+        {
+          switch (data->network_list_status)
+          {
+            case NETWORK_LIST_REGISTRATION:
+		TRACE_EVENT ("NETWORK_LIST_REGISTRATION");
+              /*
+               * Present list of available PLMNs again
+               *
+		 * Start the available plmn search
+		 */
+		nm_avail_plmn_list();
+		//Sep 23, 2004        REF: CRR 24562  xvilliva
+		//After retrieving the list we see if an error occured 
+		//and flash an alert to the user accordingly.
+		if(g_ensErr == 1)
+		{
+			g_ensErr = 0;
+			info_screen(0, TxtNotAllowed, TxtNull, NULL);
+		}
+
+		/*
+		 * remove network log if needed
+		 */
+		network_remove_network_log ();
+
+		network_data.forbidden = TRUE;
+              break;
+
+            case NETWORK_LIST_SELECTED:
+		TRACE_EVENT ("NETWORK_LIST_SELECTED");
+              /*
+               * After registration start, MFW returns the current status
+               */
+              data->network_list_status= NETWORK_LIST_REGISTRATION;
+              data->keep_plmn_list = TRUE;
+              break;
+          }
+        }
+      }
+#ifdef MMI_HOMEZONE_ENABLED
+	/* sh - tell homezone there is no network */
+	//Jun 14, 2005 REF: MMI-FIX-30439 x0018858
+	//Modified to incorporate the third argument.
+	homezoneUpdate(0,0,0);
+#endif
+      break;
+
+    case NETWORK_SEARCH_NETWORK:
+      TRACE_EVENT ("NETWORK SEARCH NETWORK");
+      SEND_EVENT (idle_get_window(), NETWORK_SEARCH_NETWORK, 0, 0);
+      break;
+
+    case NETWORK_FULL_SERVICE:
+      TRACE_EVENT("NETWORK_FULL_SERVICE");
+      /*
+       * Set Status
+       */
+      data->status = NETWORK_FULL_SERVICE; 
+
+      /*
+       * Copy Network Name in textual and numerical format
+       *
+       * NOTE: Service Provider Name is not used
+       *       Operator Name from SIM needs CPHS support by MFW
+       */
+      plmn_ident = (T_MFW_NETWORK_STRUCT *)parameter;
+
+	//x0pleela 15 Feb, 2006  ER: OMAPs00065203
+	//Removed the global variable gOper_sel_done and have introduced 2 functions which will 
+	//set and get the status of the operator selection
+	
+       //x0pleela 9 Feb, 2006  ER:OMAPS00065203
+	//Check if EONS is allocated and activated. If not,  and if operator name is not yet obtained from other sources
+	//get operator name from other sources
+      if((!gEons_alloc_active ) AND(!get_opn_sel_done()) )
+      {
+        //get operator name from other sources CPHS or NITZ or ROM
+        nm_get_opername(plmn_ident);
+      }
+	set_opn_sel_done(FALSE);
+
+#ifdef NO_ASCIIZ
+      memcpy (data->plmn_name, &plmn_ident->network_long.data, SIZE_PLMN_NAME);
+#else
+      memcpy (data->plmn_name, plmn_ident->network_long, SIZE_PLMN_NAME);
+#endif      
+      memcpy (data->network_name, plmn_ident->network_numeric, SIZE_NETWORK_NAME);
+
+      /*
+       * If network name is not known use numeric representation as default.
+       */
+#ifdef NO_ASCIIZ
+      if (plmn_ident->network_long.len EQ 0)
+#else       
+      if (strlen ((char *)(plmn_ident->network_long)) EQ 0)
+#endif
+        strcpy ((char *)data->plmn_name, (char *)data->network_name);
+
+      /*
+       * Store Roaming Indicator
+       */
+      data->roaming_indicator = plmn_ident->roaming_indicator;
+
+      network_stop_animation ();
+      /*
+       * Inform Idle screen
+       */
+	  SEND_EVENT (idle_get_window(), NETWORK_FULL_SERVICE, 0, 0);
+
+      /*
+       * If network list is available
+       */
+      if (data->network_list NEQ NULL)
+      {
+        switch (data->network_list_status)
+        {
+          case NETWORK_LIST_REGISTRATION:
+            if(data->keep_plmn_list EQ FALSE)
+            {
+	          TRACE_EVENT("NETWORK_LIST_REGISTRATION No 1");
+				
+#ifdef FF_2TO1_PS
+#ifndef NEPTUNE_BOARD
+                 FREE_MEMORY ((UBYTE *)data->network_list->List, 
+                                        MMREG_MAX_PLMN_ID * sizeof (T_MFW_MNU_ITEM)); 
+#else
+                /* Free the allocated memory for PLMN list window - 
+                    OMAPS00061049 - 08-03-2006 */
+		  FREE_MEMORY ((UBYTE *)data->network_list->List, 
+                                       Plmn_list_count * sizeof (T_MFW_MNU_ITEM));
+#endif
+
+#else
+               
+#ifndef NEPTUNE_BOARD
+		  FREE_MEMORY ((UBYTE *)data->network_list->List, 
+                                        MAX_PLMN_ID * sizeof (T_MFW_MNU_ITEM)); 
+#else
+                 /* Free the allocated memory for PLMN list window - 
+                     OMAPS00061049 - 08-03-2006 */
+		  FREE_MEMORY ((UBYTE *)data->network_list->List, 
+                                        Plmn_list_count * sizeof (T_MFW_MNU_ITEM));
+#endif
+
+#endif
+                FREE_MEMORY ((UBYTE *)data->network_list, sizeof (ListMenuData));
+                data->network_list = NULL;
+            }
+            data->keep_plmn_list = FALSE;
+            break;
+          case NETWORK_LIST_SELECTED:
+            /*
+             * After registration start, MFW returns the current status
+             */
+            TRACE_EVENT("NETWORK_LIST_SELECTED");
+            data->network_list_status= NETWORK_LIST_REGISTRATION;
+			/* Commented out and moved
+       		network_selected(); */
+            break;
+        }
+        // API - Moved from previous position
+		network_selected(); 
+      }
+
+	  //  Apr 14, 2004        REF: CRR 12641  xpradipg
+	  if(Auto_Network_Select==true)
+	  {
+	  	network_selected();
+		Auto_Network_Select=false;
+	  }
+	  	
+      break;
+
+    case NETWORK_NO_NETWORK:
+      TRACE_EVENT ("NETWORK NO NETWORK");
+      /*
+       * No PLMN found after search for available PLMNs
+       */
+      network_stop_animation ();
+      if (network_log_enabled ())
+      {
+        data->status = NETWORK_NO_SERVICE;
+        SEND_EVENT (idle_get_window(), NETWORK_NO_PLMN_XXX_AVAIL, 0, 0);
+      }
+      else
+      {
+        /*
+         * No Networks found.
+         */
+        data->status = NETWORK_NO_SERVICE;
+        SEND_EVENT (idle_get_window(), NETWORK_NO_SERVICE, 0, 0);
+      }
+#ifdef MMI_HOMEZONE_ENABLED
+	/* sh - tell homezone there is no network */
+	//Jun 14, 2005 REF: MMI-FIX-30439 x0018858
+	//Modified to incorporate the third argument.
+	homezoneUpdate(0,0,0);
+#endif
+      break;
+
+    case NETWORK_PLMN_LIST:
+      TRACE_EVENT ("NETWORK PLMN LIST");
+       TRACE_EVENT (">>NETWORK PLMN LIST");
+      /*
+       * PLMN list found
+       */
+	  if (network_data.aborted != TRUE)
+	  {
+		  if (network_log_enabled ())
+		  {
+			data->status = NETWORK_NO_SERVICE;
+			SEND_EVENT (idle_get_window(), NETWORK_NO_PLMN_XXX_AVAIL, 0, 0);
+		  }
+		  else
+		  {
+			T_MFW_PLMN_LIST * plmn_list;
+			/*
+			 * Networks founds.
+			 */
+			data->status = NETWORK_NO_SERVICE;
+			/*
+			 * If network list is available, destroy
+			 */
+			if (data->network_list NEQ NULL)
+			{
+
+#ifdef FF_2TO1_PS                       
+#ifndef NEPTUNE_BOARD
+			  FREE_MEMORY ((UBYTE *)data->network_list->List, 
+                                               MMREG_MAX_PLMN_ID * sizeof (T_MFW_MNU_ITEM)); 
+#else
+                       /* Free the allocated memory for PLMN list window - 
+                           OMAPS00061049 - 08-03-2006 */
+			  FREE_MEMORY ((UBYTE *)data->network_list->List, 
+                                              Plmn_list_count * sizeof (T_MFW_MNU_ITEM));
+#endif
+
+#else
+#ifndef NEPTUNE_BOARD
+			  FREE_MEMORY ((UBYTE *)data->network_list->List, 
+                                               MAX_PLMN_ID * sizeof (T_MFW_MNU_ITEM)); 
+#else
+                       /* Free the allocated memory for PLMN list window - 
+                           OMAPS00061049 - 08-03-2006 */  
+			  FREE_MEMORY ((UBYTE *)data->network_list->List, 
+                                              Plmn_list_count * sizeof (T_MFW_MNU_ITEM));
+#endif
+
+#endif
+			  
+			  FREE_MEMORY ((UBYTE *)data->network_list, sizeof (ListMenuData));
+			  data->network_list = NULL;
+			}
+
+			/*
+			 * If list is empty, show info screen
+			 */
+			plmn_list = (T_MFW_PLMN_LIST *)parameter;
+
+#ifdef NEPTUNE_BOARD
+			/* Count assigned to global static variable - OMAPS00061049 - 08-03-2006 */
+			Plmn_list_count = plmn_list->count;
+#endif
+			
+			if (plmn_list->count EQ 0)
+			{
+			  network_stop_animation ();
+			  network_no_plmns ();
+			}
+			else
+			{
+			  /*
+			   * Create and present list of available PLMNs
+			   *
+			   */
+
+			  /* Pass the plmn_list which already hold the parameter data - OMAPS00061049 - 08-03-2006 */
+#ifndef NEPTUNE_BOARD			  
+			  data->network_list = network_create_list (data, parameter);
+#else
+			  data->network_list = network_create_list (data, plmn_list );
+#endif
+			  data->network_list_status = NETWORK_LIST_DISPLAY_FIRST;
+			  network_stop_animation ();
+			  listDisplayListMenu (win, data->network_list,  (ListCbFunc)network_list_cb,0);
+	 
+	               // change by Sasken ( Pradeep/Vadiraj) on Apr 07th 2004
+			// Issue Number : SPR#12654 on 07/04/04 by Pradeep/Vadiraj
+			// Bug : Pressing "search" button does not trigger anything
+			// Solution: When the ME is already camped on to a network the NoNetwork event is not sent.
+			// Commented the following line
+			  // SEND_EVENT (idle_get_window(), NETWORK_NO_SERVICE, 0, 0);
+
+			  if (network_data.forbidden == TRUE)
+			  {
+				network_forbidden_plmn();
+				network_data.forbidden = FALSE;
+			  }
+			}
+		}
+      }
+	  else
+	  {
+		  network_data.aborted = FALSE;
+	  }
+#ifdef MMI_HOMEZONE_ENABLED
+	/* sh - tell homezone there is no network */
+	//Jun 14, 2005 REF: MMI-FIX-30439 x0018858
+	//Modified to incorporate the third argument.
+	homezoneUpdate(0,0,0);
+#endif
+      break;
+
+    case NETWORK_LIST_SELECT_PLMN:
+      TRACE_EVENT ("NETWORK LIST_SELECT");
+       TRACE_EVENT (">> NETWORK LIST_SELECT");
+      /*
+       * A network has been selected from the PLMN available list
+       * Start manual registration and start Search animation.
+       */
+      network_start_animation_plmn_selection (value);
+      data->network_list_status = NETWORK_LIST_SELECTED;
+      nm_select_plmn ((U8 *)network_data.network_search_name[value]);
+		//Sep 23, 2004        REF: CRR 24562  xvilliva
+		//After retrieving the list we see if an error occured 
+		//and flash an alert to the user accordingly.
+		if(g_ensErr == 1)
+		{
+			g_ensErr = 0;
+			info_screen(0, TxtNotAllowed, TxtNull, NULL);
+		}
+      break;
+   case NETWORK_PPLMN_MEM_LIST:
+	  {
+      T_MFW_PPLMN_MEM *pplmn_mem;
+	  UBYTE i;
+
+      TRACE_EVENT (">> NETWORK PPLMN MEM LIST");
+      /*  Save the number of PLMN records:
+       *  maxRcd  = maximum preferred PLMN records on the SIM card
+       *  usedRcd = used preferred PLMN records on the SIM card
+       */
+      pplmn_mem = (T_MFW_PPLMN_MEM *)parameter; 
+
+	  network_data.pplmn_mem.maxRcd  = pplmn_mem->maxRcd;
+	  network_data.pplmn_mem.usedRcd = pplmn_mem->usedRcd;
+
+      /*
+       * Request preferred PLMN list from the SIM
+       */
+
+      	
+	    network_data.pplmn = (T_MFW_NETWORK_STRUCT *)ALLOC_MEMORY ((pplmn_mem->maxRcd) * sizeof (T_MFW_NETWORK_STRUCT));
+      	
+		if (network_data.pplmn EQ 0)
+		{
+			return;
+		}
+
+	 	if (pplmn_mem->usedRcd > 0)
+		 {
+		 	 // request MFW to fill up the pref. PLMN list
+		     nm_pref_plmn_list(network_data.pplmn, pplmn_mem->maxRcd, 1);
+		 }
+	 	else
+	 	{
+	 		// doesnt make sense to request the MFW to fill up the list
+	 		// when the "pplmn_mem->usedRcd" is  0
+
+	 		 TRACE_EVENT(">> NETWORK PPLMN MEM LIST - ELSE Loop");
+			 for (i=0; i < (network_data.pplmn_mem.maxRcd); i++)
+			 {
+#ifdef NO_ASCIIZ
+				network_data.pplmn[i].network_long.len = 0;
+				network_data.pplmn[i].network_short.len = 0;
+#else			 	
+				memset(network_data.pplmn[i].network_long,   '\0', LONG_NAME);
+				memset(network_data.pplmn[i].network_short,   '\0', SHORT_NAME);
+#endif
+				memset(network_data.pplmn[i].network_numeric, '\0', NUMERIC_LENGTH);
+			 }
+			
+		    data->network_list = network_create_pref_list (data);
+		    listDisplayListMenu (win, data->network_list,(ListCbFunc)network_pref_list_cb,0);
+	 	}
+
+      }
+      break;
+
+   case NETWORK_PREFERRED_LIST:
+	  {			
+
+	    /* UBYTE i; */ /* Warning Correction */
+
+	  
+      TRACE_EVENT (">>NETWORK PREFERRED LIST");
+      /*
+       *  Create and present the preferred list of PLMNs
+       * 
+       */
+
+      //nm      network_stop_animation ();
+
+    
+    data->network_list = network_create_pref_list (data);
+	
+    /* cq12719 Check if prefered list info resource has been created.16-03-04 MZ */
+    if(data->network_list  != NULL)
+    		listDisplayListMenu (win, data->network_list,(ListCbFunc)network_pref_list_cb,0);
+      }   
+      break;
+
+  case NETWORK_CELL_SELECT:
+  	{
+  	/* If Homezone is active, inform it of the new cell data */
+  	T_MFW_CELL_STRUCT *cell_data;
+  	
+  	TRACE_EVENT(">>NETWORK CELL SELECT");
+
+	cell_data = (T_MFW_CELL_STRUCT *)parameter;
+
+#ifdef MMI_HOMEZONE_ENABLED
+	/* SPR759 - SH - send cell reselection info to homezone */
+	
+	//Jun 14, 2005 REF: MMI-FIX-30439 x0018858
+	//Modified to incorporate the third argument.
+	homezoneUpdate(cell_data->lid, cell_data->ci, 0);
+#endif
+	break;
+#ifdef NEPTUNE_BOARD
+    /* Destory the list when select softkey is pressed / back softkey is pressed */
+   /* OMAPS00061049 - 08-03-2006 - BEGIN*/	
+   case  NETWORK_LIST_DESTORY:
+              TRACE_EVENT ("Inside NETWORK_LIST_DESTORY Event");
+			  
+		/* Destory the list window */	  
+	       listsDestroy(data->network_list->win);
+
+		TRACE_EVENT ("Destoryed list window successfully");
+		
+		/*
+		 * If network list is available, destroy
+		 */
+		if (data->network_list NEQ NULL)
+		{
+
+#ifdef FF_2TO1_PS
+                /* Free the allocated memory for PLMN list window - OMAPS00061049 - 08-03-2006 */ 
+		  FREE_MEMORY ((UBYTE *)data->network_list->List, Plmn_list_count * sizeof (T_MFW_MNU_ITEM));
+#else
+                /* Free the allocated memory for PLMN list window - OMAPS00061049 - 08-03-2006 */ 
+		  FREE_MEMORY ((UBYTE *)data->network_list->List, Plmn_list_count * sizeof (T_MFW_MNU_ITEM));
+#endif
+		  
+		  FREE_MEMORY ((UBYTE *)data->network_list, sizeof (ListMenuData));
+		  data->network_list = NULL;
+		}
+
+		TRACE_EVENT ("List window memory freed");
+	  break;
+	/* OMAPS00061049 - 08-03-2006 - END */ 	
+#endif	
+		
+
+  }
+  }
+}
+
+/*******************************************************************************
+
+ $Function:    	network_win_cb
+
+ $Description:	network top window
+
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+static int network_win_cb (T_MFW_EVENT event, T_MFW_WIN * win)
+{
+  /*
+   * Top Window has no output
+   */
+  return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	network_nm_cb
+
+ $Description:	network handler (mfw callback handler)
+
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+static int network_nm_cb (T_MFW_EVENT event, T_MFW_HND para)
+{
+  TRACE_FUNCTION("network_nm_cb");
+
+  switch(event)
+  {
+    case E_NM_FULL_SERVICE:
+//x0pleela 9 Feb, 2006  ER:OMAPS00065203
+//Handling E_NM_OPN for operator name display
+    	case E_NM_OPN:
+       SEND_EVENT (network_data.network_win, NETWORK_FULL_SERVICE, 0, para);
+      break;
+   	
+    case E_NM_LIMITED_SERVICE:
+      SEND_EVENT (network_data.network_win, NETWORK_LIMITED_SERVICE, 0, para);
+      break;
+
+    case E_NM_NO_SERVICE:
+      SEND_EVENT (network_data.network_win, NETWORK_NO_SERVICE, 0, para);
+   	  break;
+
+    case E_NM_SEARCH_NETWORK:
+	  SEND_EVENT (network_data.network_win, NETWORK_SEARCH_NETWORK, 0, para);
+   	  break;
+
+    case E_NM_NO_NETWORK:
+	  SEND_EVENT (network_data.network_win, NETWORK_NO_NETWORK, 0, para);
+  	  break;
+
+	case E_NM_PLMN_LIST:
+	  SEND_EVENT (network_data.network_win, NETWORK_PLMN_LIST, 0, para);
+      break;
+
+	case E_NM_DEREGISTRATION:
+		TRACE_EVENT("MmiNetwork:E_NM_DEREGISTRATION");
+		mainShutdown();
+		break;
+	case E_NM_PREF_PLMN_LIST:
+		TRACE_EVENT("MmiNetwork:E_NM_PREF_PLMN_LIST");
+        SEND_EVENT (network_data.network_win, NETWORK_PREFERRED_LIST, 0, para);
+		break;
+	case E_NM_PPLMN_MEM:
+		TRACE_EVENT("MmiNetwork:E_NM_PPLMN_MEM");
+        SEND_EVENT (network_data.network_win, NETWORK_PPLMN_MEM_LIST, 0, para);
+		break;
+	/* SH 29-04-02 - Cell reselection */
+	case E_NM_CELL_SELECT:
+		TRACE_EVENT("MmiNetwork:E_NM_CELL_SELECT");
+		SEND_EVENT (network_data.network_win, NETWORK_CELL_SELECT, 0, para);
+		break;
+	/* SPR919 - SH - Band selection */
+	case E_NM_BAND:
+		TRACE_EVENT("MmiNetwork:E_NM_BAND");
+		nm_registration (nm_get_mode (),0, 0);
+		//Sep 23, 2004        REF: CRR 24562  xvilliva
+		//After retrieving the list we see if an error occured 
+		//and flash an alert to the user accordingly.
+		if(g_ensErr == 1)
+		{
+			g_ensErr = 0;
+			info_screen(0, TxtNotAllowed, TxtNull, NULL);
+		}
+		break;
+		
+    default:
+  	  return 0;
+  }
+  return 1;
+}
+
+/*******************************************************************************
+
+ $Function:    	nm_flag_log_off
+
+ $Description:	 Attribut function for menu entries.
+    	       It defines whether the network log off function shall
+	            be displayed or not.
+
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+USHORT nm_flag_log_off (T_MFW_MNU * m, T_MFW_MNU_ATTR * ma, T_MFW_MNU_ITEM * mi)
+{
+  if (FFS_flashData.net_log_status EQ NM_LOG_AVAIL_USED)
+    return 0;
+
+  return MNU_ITEM_HIDE;
+}
+/*******************************************************************************
+
+ $Function:    	nm_flag_log_off
+
+ $Description:	 Attribut function for menu entries.
+    	       It defines whether the network log off function shall
+	            be displayed or not.
+
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+USHORT nm_flag_log_on (T_MFW_MNU * m, T_MFW_MNU_ATTR * ma, T_MFW_MNU_ITEM * mi)
+{
+  if (FFS_flashData.network_name == NULL)
+  {
+    return MNU_ITEM_HIDE;
+  }
+  if (FFS_flashData.net_log_status EQ NM_LOG_AVAIL_NOT_USED)
+    return 0;
+
+  return MNU_ITEM_HIDE;
+}
+
+/*******************************************************************************
+
+ $Function:    	network_set_mode_auto
+
+ $Description:	 Start a automatic registration
+    	     
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+int network_set_mode_auto(T_MFW_MNU *m, T_MFW_MNU_ITEM *i)
+{
+  TRACE_FUNCTION ("network_set_mode_auto()");
+
+  /*
+   * Save the automatic mode in PCM for next power on
+   */
+  nm_set_mode(NM_AUTOMATIC);
+
+  /*
+   * Start the registration of full service
+   */
+  nm_registration (NM_AUTOMATIC,0, FALSE);
+
+  /*
+   * remove network log if needed
+   */
+  network_remove_network_log ();
+
+  /*
+   * Remove Main Menu
+   */
+  //JVJEmenuExit();
+
+  network_start_animation ();
+//  Apr 14, 2004        REF: CRR 12641  xpradipg
+	Auto_Network_Select=true;
+  return 1;
+}
+/*******************************************************************************
+
+ $Function:    	network_set_mode_man
+
+ $Description:	 Start a manual registration
+    	     
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+int network_set_mode_man(T_MFW_MNU *m, T_MFW_MNU_ITEM *i)
+{
+  TRACE_FUNCTION ("network_set_mode_man()");
+
+  /*
+   * Save the automatic mode in PCM for next power on
+   */
+  nm_set_mode(NM_MANUAL);
+
+  /*
+   * Start the available plmn search
+   */
+  nm_avail_plmn_list();
+	//Sep 23, 2004        REF: CRR 24562  xvilliva
+	//After retrieving the list we see if an error occured 
+	//and flash an alert to the user accordingly.
+	if(g_ensErr == 1)
+	{
+		g_ensErr = 0;
+		info_screen(0, TxtNotAllowed, TxtNull, NULL);
+		  return 1;
+	}
+
+  /*
+   * remove network log if needed
+   */
+  network_remove_network_log ();
+
+  /*
+   * Remove Main Menu
+   */
+  //nm menuExit();
+
+  network_start_animation ();
+
+  network_data.aborted = FALSE;
+  return 1;
+}
+
+ /*
++--------------------------------------------------------------------+
+| PROJECT : MMI       (6366)	     MODULE  : MmiNetwork            |
+| STATE   : code                     ROUTINE : network_pref_list     |
++--------------------------------------------------------------------+
+
+  PURPOSE : Show the preferred list
+
+*/
+int network_pref_list(T_MFW_MNU *m, T_MFW_MNU_ITEM *mi)
+{
+//TRACE_FUNCTION ("network_pref_list()");
+
+  /*
+   * Request the maximum number of preferred PLMN records 
+   * on the SIM card
+   */
+	nm_pplmn_mem_req();
+
+
+  
+  return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	network_remove_network_log
+
+ $Description:	Reset network log if set.
+    	     
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+static void network_remove_network_log (void)
+{
+
+  if (FFS_flashData.net_log_status EQ NM_LOG_AVAIL_USED)
+  {
+    /*
+     * Until now the network log has been used.
+     * Now write to FFS
+     */
+    FFS_flashData.net_log_status = NM_LOG_AVAIL_NOT_USED;
+    flash_write();
+   
+  }
+}
+
+/*******************************************************************************
+
+ $Function:    	network_log_off
+
+ $Description:	Removes a network log and returns to automatic registration.
+    	     
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+int network_log_off(T_MFW_MNU *m, T_MFW_MNU_ITEM *i)
+{
+  TRACE_FUNCTION ("network_log_off()");
+
+  /*
+   * Same behaviour as automatic registration
+   */
+  network_set_mode_auto (m,i);
+
+
+  network_start_animation ();
+
+  return 1;
+}
+
+/*******************************************************************************
+
+ $Function:    	network_log_on
+
+ $Description:	 Sets a network log.
+    	     
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+int network_log_on(T_MFW_MNU *m, T_MFW_MNU_ITEM *i)
+{
+ 
+
+  TRACE_FUNCTION ("network_log_on()");
+
+
+  if (FFS_flashData.net_log_status EQ NM_LOG_AVAIL_NOT_USED OR
+     FFS_flashData.net_log_status EQ NM_LOG_AVAIL_USED)
+  {
+    /*
+     * Until now the network log has been not used.
+     * Now set the PCM.
+     */
+    FFS_flashData.net_log_status = NM_LOG_AVAIL_USED;
+    memcpy (FFS_flashData.plmn_name, network_data.plmn_name, SIZE_PLMN_NAME);
+    memcpy (FFS_flashData.network_name, network_data.network_name, SIZE_NETWORK_NAME);
+
+    
+	flash_write();
+    /*
+     * Save the manual mode in PCM for next power on
+     */
+    nm_set_mode(NM_MANUAL);
+
+    /*
+     * Start the registration of the logged network
+     */
+    nm_select_plmn (network_data.network_name);
+	//Sep 23, 2004        REF: CRR 24562  xvilliva
+	//After retrieving the list we see if an error occured 
+	//and flash an alert to the user accordingly.
+  	if(g_ensErr == 1)
+	{
+		g_ensErr = 0;
+		info_screen(0, TxtNotAllowed, TxtNull, NULL);
+	}
+  }
+
+
+  network_start_animation ();
+
+  return 1;
+}
+
+/*******************************************************************************
+
+ $Function:    	network_start_full_service
+
+ $Description: Starts a full service registration.
+              a) manual selection
+              b) automatic selection
+              c) network log selection
+    	     
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+void network_start_full_service(void)
+{
+ 
+  TRACE_FUNCTION ("network_start_full_service()");
+
+  network_data.status = NETWORK_SEARCH_NETWORK;
+
+ if(FFS_flashData.plmn_name == NULL) //if no network data
+ {   /*
+     * Start normal Registration
+     */
+#if defined (WIN32)
+    EXTERN UBYTE mmi_reg_mode;
+
+    if (mmi_reg_mode EQ 0)
+      nm_registration (NM_AUTOMATIC,0, 0);
+    else
+      nm_registration (NM_MANUAL,0, 0);
+#else
+    if (nm_get_mode() == NM_MANUAL)
+         SEND_EVENT (idle_get_window(), NETWORK_SEARCH_NETWORK, 0, 0);
+    nm_registration (nm_get_mode (),0, 0);
+#endif
+  }
+  else
+  {
+    switch (FFS_flashData.net_log_status)
+    {
+      case NM_LOG_AVAIL_USED:
+        memcpy (network_data.plmn_name, FFS_flashData.plmn_name, SIZE_PLMN_NAME);
+        memcpy (network_data.network_name, FFS_flashData.network_name, SIZE_NETWORK_NAME);
+        nm_select_plmn (network_data.network_name);
+        break;
+      default:
+	    if (nm_get_mode() == NM_MANUAL)
+	         SEND_EVENT (idle_get_window(), NETWORK_SEARCH_NETWORK, 0, 0);
+        nm_registration (nm_get_mode (),0, 0);
+        break;
+    }
+  }
+	//Sep 23, 2004        REF: CRR 24562  xvilliva
+	//After retrieving the list we see if an error occured 
+	//and flash an alert to the user accordingly.
+	if(g_ensErr == 1)
+	{
+		g_ensErr = 0;
+		info_screen(0, TxtNotAllowed, TxtNull, NULL);
+	}
+}
+
+/*******************************************************************************
+
+ $Function:    	network_get_name
+
+ $Description:	 Returns the textual and numeric representation of the
+    	         network name.
+    	     
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+void network_get_name(T_CURRENT_NETWORK * nm)
+{
+#ifdef NO_ASCIIZ
+    T_MFW_SP_NAME service_provider_name;
+#else
+    U8 service_provider_name[LONG_NAME];
+#endif
+  TRACE_FUNCTION ("network_get_name()");
+
+//x0pleela 15 Feb, 2006   ER: OMAPS00065203
+//Included flag NEPTUNE_BOARD to retain old code for operator get name and 
+//added new code for this ER also 
+
+#ifndef NEPTUNE_BOARD
+
+  //x0pleela 09 Feb, 2006 ER: OMAPS00065203
+  //Removed the code as prioritized operator name is already updated to network_data
+  // and CPHS check is not required
+
+  //x0pleela 09 Feb, 2006 ER: OMAPS00065203
+  //Updating prioritized operator name 
+  memset(  nm->plmn_name, 0, SIZE_PLMN_NAME );
+  memset(  nm->network_name, 0, SIZE_NETWORK_NAME );
+  memcpy (nm->plmn_name, network_data.plmn_name, SIZE_PLMN_NAME);
+  memcpy (nm->network_name, network_data.network_name, SIZE_NETWORK_NAME);
+
+  memset(  nm->service_provider_name, 0, SP_NAME );
+ #else
+   if (CphsPresent() )//if CPHS supported
+  {	
+      T_MFW_CPHS_OP_NAME* operator_name;
+      operator_name = CphsRequestOperatorName(); //get operator name
+  		
+      if (operator_name->longName.data[0] != NULL)//if name not blank
+      {	
+        memcpy(nm->plmn_name, operator_name->longName.data, SIZE_PLMN_NAME);
+        TRACE_EVENT("Reading PLMN from SIM");    	
+      }
+      else
+        memcpy (nm->plmn_name, network_data.plmn_name, SIZE_PLMN_NAME);
+      
+      if (operator_name->shortName.data[0] != NULL)//if name not blank
+      {
+        memcpy(nm->network_name, operator_name->shortName.data, SIZE_NETWORK_NAME);
+      }
+      else
+        memcpy (nm->network_name, network_data.network_name, SIZE_NETWORK_NAME);
+    }
+    else
+    {
+        
+      	memcpy (nm->plmn_name, network_data.plmn_name, SIZE_PLMN_NAME);
+      	memcpy (nm->network_name, network_data.network_name, SIZE_NETWORK_NAME);
+    
+    }
+	  /* Marcus: Issue 1618: 24/01/2003: Start */
+    /* Obtain the service provider name (from the SIM EF-SPN file) if any */
+    nm->service_provider_name[0] = '\0';
+#endif
+#ifdef NO_ASCIIZ
+    nm_get_spn(&service_provider_name);
+ 	if ((service_provider_name.len != 0) &&
+ 	    (service_provider_name.data[0] != '\0'))
+  	{
+   	  	if (service_provider_name.len > sizeof(nm->service_provider_name)-1)
+   	  	    service_provider_name.len = sizeof(nm->service_provider_name)-1;
+   	  	
+   	  	memcpy(nm->service_provider_name,
+   	  	    service_provider_name.data,
+   	  	    service_provider_name.len);
+   	  	
+  	    nm->service_provider_name[service_provider_name.len] = '\0';
+  	}
+#else
+    nm_get_spn(service_provider_name);
+  	if (strlen(service_provider_name))
+  	{
+   	  	strncpy(nm->service_provider_name,
+   	  	    service_provider_name,
+   	  	    sizeof(nm->service_provider_name)-1);
+   	  	
+  	   	nm->service_provider_name[sizeof(nm->service_provider_name)-1] = '\0';
+    }
+#endif
+    /* Marcus: Issue 1618: 24/01/2003: End */
+    nm->roaming_indicator = network_data.roaming_indicator;
+}
+
+/*******************************************************************************
+
+ $Function:    	network_log_enabled
+
+ $Description:	 Checks whether a network log is active or not.
+    	     
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+static UBYTE network_log_enabled (void)
+{
+
+  TRACE_FUNCTION ("network_log_enabled()");
+
+  if (FFS_flashData.net_log_status EQ NM_LOG_AVAIL_USED)
+    return TRUE;
+
+  return FALSE;
+}
+
+/*******************************************************************************
+
+ $Function:    	ListMenuData
+
+ $Description:	 Creates a list of available PLMNs for selection.
+    	     
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+static ListMenuData * network_create_list (T_network * data, T_MFW_PLMN_LIST * plmn_list)
+{
+  UBYTE i;
+
+  ListMenuData *list_menu_data = (ListMenuData *)ALLOC_MEMORY (sizeof (ListMenuData));
+
+  if (list_menu_data EQ 0)
+    return NULL;
+
+  /* Allocated memory only for availble number of plmn list count */
+  /* OMAPS00061049 - 08-03-2006 */
+#ifndef NEPTUNE_BOARD  
+  list_menu_data->List = (T_MFW_MNU_ITEM *) ALLOC_MEMORY (MAX_PLMN * sizeof (T_MFW_MNU_ITEM));  
+#else
+  list_menu_data->List = (T_MFW_MNU_ITEM *) ALLOC_MEMORY (plmn_list->count * sizeof (T_MFW_MNU_ITEM));
+#endif
+
+  if (list_menu_data->List EQ 0)
+    return NULL;
+
+  /*
+   * Fill Menu List
+   */
+#ifdef FF_2TO1_PS
+  for (i=0;i<MMREG_MAX_PLMN_ID;i++)
+#else
+  for (i=0;i<MAX_PLMN_ID;i++)
+#endif
+  {
+#ifndef NEPTUNE_BOARD  
+       /* Taken this statement inside the condition */
+	/* OMAPS00061049 - 08-03-2006 */   
+       mnuInitDataItem(&list_menu_data->List[i]); 
+#endif
+
+    if (i < plmn_list->count)
+    {
+#ifdef NEPTUNE_BOARD
+       mnuInitDataItem(&list_menu_data->List[i]);
+#endif
+	
+      /*
+       * set network name
+       */
+#ifdef NO_ASCIIZ
+      if (plmn_list->plmn[i].network_long.len NEQ 0)
+      {
+            list_menu_data->List[i].str = (char *)plmn_list->plmn[i].network_long.data;
+      }
+#else       
+      if (strlen((char *)plmn_list->plmn[i].network_long) NEQ 0)
+      {
+            list_menu_data->List[i].str = (char *)plmn_list->plmn[i].network_long;
+      }
+#endif            
+      else
+      {
+         list_menu_data->List[i].str = (char *)plmn_list->plmn[i].network_numeric;
+      }
+
+      /*
+       * Store numeric network name in any case
+       */
+      strncpy ((char *)data->network_search_name[i], (char *)plmn_list->plmn[i].network_numeric, 6);
+
+
+      /*
+       * NOTE : add forbidden indicator
+       */
+      list_menu_data->List[i].flagFunc = item_flag_none;
+    }
+    else
+    {
+    }
+  }
+
+  /*
+   * Fill common parameter for list handling
+   */
+
+  list_menu_data->ListLength     = plmn_list->count;
+  list_menu_data->ListPosition   = 1;
+  list_menu_data->CursorPosition = 1;
+  list_menu_data->SnapshotSize   = plmn_list->count;
+  list_menu_data->Font           = 0;
+  list_menu_data->LeftSoftKey    = TxtSoftSelect;
+  list_menu_data->RightSoftKey   = TxtSoftBack;
+  // Sep 8, 2004        REF: CRR 16062  xvilliva
+  //Though all the key events are monitered, the listsKeyEvent()
+  //responds to a few keys which includes KCD_MNUSELECT.
+  list_menu_data->KeyEvents      =  KEY_ALL;
+  list_menu_data->Reason         = 0;
+  list_menu_data->Strings        = TRUE;
+  list_menu_data->Attr           = &network_menuAttrib;
+  list_menu_data->autoDestroy    = TRUE;
+  list_menu_data->listCol = COLOUR_LIST_XX;
+  	
+
+  return list_menu_data;
+}
+
+/*******************************************************************************
+
+ $Function:    	network_create_pref_list
+
+ $Description:	 Creates a list of preferred PLMNs for selection.
+    	     
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+static ListMenuData * network_create_pref_list (T_network * data)
+{
+  UBYTE i;
+
+  ListMenuData *list_menu_data = (ListMenuData *)ALLOC_MEMORY (sizeof (ListMenuData));
+
+  if (list_menu_data EQ 0)
+  {
+    return NULL;
+  }
+
+  list_menu_data->List = (T_MFW_MNU_ITEM *) ALLOC_MEMORY ((data->pplmn_mem.maxRcd) * sizeof (T_MFW_MNU_ITEM));
+
+  if (list_menu_data->List EQ 0)
+  {
+  
+    /* cq12719 If second memory alloc fails Free the memory allocated for  list menu data. 16-03-04 MZ */
+	if(NULL != list_menu_data)
+	  	  FREE_MEMORY ((void *)list_menu_data, sizeof (ListMenuData));
+	
+    return NULL;
+   }
+
+  TRACE_EVENT ("network_create_pref_list ()");
+
+
+
+  /*
+   * Fill Menu List
+   */
+  for (i=0; i < (network_data.pplmn_mem.maxRcd); i++)
+  {
+	mnuInitDataItem(&list_menu_data->List[i]);
+ 
+   /*
+    * set network name
+    */
+
+#ifdef NO_ASCIIZ
+    if (network_data.pplmn[i].network_long.len NEQ 0 )
+    {
+		list_menu_data->List[i].str = (char *)network_data.pplmn[i].network_long.data;
+	}
+#else       
+    if (strlen((char *)network_data.pplmn[i].network_long) NEQ 0 )
+    {
+		list_menu_data->List[i].str = (char *)network_data.pplmn[i].network_long;
+	}
+#endif
+    else
+    {
+      list_menu_data->List[i].str = GET_TEXT(TxtEmpty);
+      TRACE_EVENT ("network_long == 0");
+    }
+
+      list_menu_data->List[i].flagFunc = item_flag_none;
+
+  }
+  /*
+   * Fill common parameter for list handling
+   */
+
+
+  list_menu_data->ListLength     = network_data.pplmn_mem.maxRcd;
+  list_menu_data->ListPosition    = 1;
+  list_menu_data->CursorPosition   = 1;
+  list_menu_data->SnapshotSize	= network_data.pplmn_mem.maxRcd;
+  list_menu_data->Font          = 0;
+  list_menu_data->LeftSoftKey   = TxtSoftOptions; /* SPR#2354 - SH - Change 'Select' to 'Options' */
+  list_menu_data->RightSoftKey  = TxtSoftBack;
+  list_menu_data->KeyEvents      = KEY_CLEAR | KEY_RIGHT | KEY_LEFT | KEY_MNUUP | KEY_MNUDOWN;
+  list_menu_data->Reason         = 0;
+  list_menu_data->Strings        = TRUE;
+  list_menu_data->Attr           = &network_menuAttrib;
+  list_menu_data->autoDestroy    = TRUE; 
+  list_menu_data->listCol = COLOUR_LIST_XX;
+
+  return list_menu_data;
+}
+
+/*******************************************************************************
+
+ $Function:    	network_create_mobile_list
+
+ $Description:	 
+    	     
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+static ListMenuData * network_create_mobile_list (T_network_OPT * data)
+{
+  UBYTE i;
+
+  ListMenuData *list_menu_data = (ListMenuData *)ALLOC_MEMORY (sizeof(ListMenuData));
+
+  if (list_menu_data EQ 0)
+  {
+    return NULL;
+	TRACE_EVENT ("failed to create the list");
+  }
+
+  mfwCheckMemoryLeft();
+  
+  list_menu_data->List = (T_MFW_MNU_ITEM *) ALLOC_MEMORY (MAX_SHOW_OF_PLMN * sizeof (T_MFW_MNU_ITEM));
+
+  mfwCheckMemoryLeft();
+
+  if (list_menu_data->List EQ 0)
+  {
+    return NULL;
+	TRACE_EVENT ("failed to create the list");
+  }
+
+  TRACE_EVENT ("network_create_mobile_list ()");  
+
+
+
+  /*
+   * Fill Menu List
+   */
+  for (i=0; i < MAX_SHOW_OF_PLMN; i++)
+  {
+	mnuInitDataItem(&list_menu_data->List[i]);
+ 
+   /*
+    * set network name
+    */
+
+/*SPR 2635 copy set list strings pointing at longname strings*/
+ 	if (data->pplmn_longnames[i][0] NEQ 0 )
+    {
+		list_menu_data->List[i].str =data->pplmn_longnames[i];
+	}
+	else
+	    
+    {
+      list_menu_data->List[i].str = GET_TEXT(TxtEmpty);
+	}	
+
+/*SPR 2635, end*/
+
+      list_menu_data->List[i].flagFunc = item_flag_none;
+
+  }
+  /*
+   * Fill common parameter for list handling
+   */
+
+
+  list_menu_data->ListLength     = MAX_SHOW_OF_PLMN;
+  list_menu_data->ListPosition     = 1;
+  list_menu_data->CursorPosition  = 1;
+  list_menu_data->SnapshotSize   = MAX_SHOW_OF_PLMN;
+  list_menu_data->Font           = 0;
+  list_menu_data->LeftSoftKey     = TxtSoftSelect;
+  list_menu_data->RightSoftKey   = TxtSoftBack;
+  list_menu_data->KeyEvents      = KEY_CLEAR | KEY_RIGHT | KEY_LEFT | KEY_MNUUP | KEY_MNUDOWN;
+  list_menu_data->Reason         = 0;
+  list_menu_data->Strings        = TRUE;
+  list_menu_data->Attr           = &network_menuAttrib;
+  list_menu_data->autoDestroy    = TRUE;  /*destroy the menulist after press any sofkey*/
+  list_menu_data->listCol = COLOUR_LIST_XX;
+
+  return list_menu_data;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	network_submenu
+
+ $Description:	Creates a submenu for the preferred list. 
+    	     
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+static ListMenuData * network_submenu (T_network * data, T_MFW_NETWORK_STRUCT * plmn_list)
+{
+  UBYTE i;
+ 
+
+  ListMenuData *list_menu_data = (ListMenuData *)ALLOC_MEMORY (sizeof (ListMenuData));
+
+  if (list_menu_data EQ 0)
+    return NULL;
+
+  list_menu_data->List = (T_MFW_MNU_ITEM *) ALLOC_MEMORY ((NETWORK_MENU_ITEM) * sizeof (T_MFW_MNU_ITEM));
+  if (list_menu_data->List EQ 0)
+    return NULL;
+
+  /*
+   * Fill Menu List
+   */
+  for (i=0;i<(NETWORK_MENU_ITEM);i++)
+  {
+	mnuInitDataItem(&list_menu_data->List[i]);
+    
+   /*
+    * set network name
+    */
+#ifdef NO_ASCIIZ
+    if (plmn_list->network_long.len NEQ 0)
+		list_menu_data->List[i].str = (char *)plmn_list->network_long.data;
+#else 
+    if (strlen((char *)plmn_list->network_long) NEQ 0)
+		list_menu_data->List[i].str = (char *)plmn_list->network_long;
+#endif
+
+    else
+    ;
+		//strncpy ((char *)list_menu_data->List[i].str,(char *)empty, 6);
+
+
+    plmn_list ++;
+
+  }
+  /*
+   * Fill common parameter for list handling
+   */
+  list_menu_data->ListLength     = data->pplmn_mem.maxRcd;
+  list_menu_data->ListPosition   = 1;
+  list_menu_data->CursorPosition = 1;
+  list_menu_data->SnapshotSize   = data->pplmn_mem.maxRcd;
+  list_menu_data->Font           = 0;
+  list_menu_data->LeftSoftKey    = TxtSoftSelect;
+  list_menu_data->RightSoftKey   = TxtSoftBack;
+  list_menu_data->KeyEvents      = KEY_CLEAR | KEY_RIGHT | KEY_LEFT | KEY_MNUUP | KEY_MNUDOWN;
+  list_menu_data->Reason         = NETWORK_PREF_LIST_SELECTED;
+  list_menu_data->Strings        = TRUE;
+  list_menu_data->Attr           = &network_menuAttrib;
+  list_menu_data->listCol = COLOUR_LIST_XX;
+
+  return list_menu_data;
+}
+
+
+
+/*******************************************************************************
+
+ $Function:    	network_list_cb
+
+ $Description:	Callback function list dialog.
+    	     
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+static void network_list_cb(T_MFW_HND win, ListMenuData * ListData)
+{
+  TRACE_FUNCTION ("network_list_cb()");
+
+#ifndef NEPTUNE_BOARD
+  if (ListData->Reason != LISTS_REASON_BACK)
+  {
+	SEND_EVENT (win, NETWORK_LIST_SELECT_PLMN, ListData->CursorPosition, NULL);
+  }
+
+#else
+  if (ListData->Reason EQ LISTS_REASON_SELECT)
+  {
+	SEND_EVENT (win, NETWORK_LIST_SELECT_PLMN, ListData->CursorPosition, NULL);
+	SEND_EVENT (win, NETWORK_LIST_DESTORY, NULL, NULL);
+  }
+
+  if ((ListData->Reason EQ LISTS_REASON_BACK) || 
+    (ListData->Reason EQ LISTS_REASON_CLEAR)||
+    (ListData->Reason EQ LISTS_REASON_HANGUP))
+
+  {
+        SEND_EVENT (win, NETWORK_LIST_DESTORY, NULL, NULL);
+  }
+#endif
+
+}
+
+/*******************************************************************************
+
+ $Function:    	network_pref_list_cb
+
+ $Description:	Callback function pref. list dialog.
+    	     
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+static void network_pref_list_cb(T_MFW_HND win, ListMenuData * ListData)
+{
+  TRACE_FUNCTION ("network_pref_list_cb()");
+
+  if (ListData->Reason EQ LISTS_REASON_SELECT)
+  {
+     
+// call here the MenuOptions with the items "Select from the list"
+
+      FREE_MEMORY ((UBYTE *)network_data.network_list->List, (network_data.pplmn_mem.maxRcd) * sizeof (T_MFW_MNU_ITEM));
+
+      FREE_MEMORY ((UBYTE *)network_data.network_list, sizeof (ListMenuData));
+// xrashmic 10 Nov, 2004 MMI-SPR-OMAPS00044200-OMAPS00044851
+//Commented FREE_MEMORY for network_data.pplmn as this is required when we enter the option menu.
+      //    Nov 02, 2005	REF: omaps00044855   Sumanth Kumar.C
+      //    Solution:		Comment network_data.pplmn memory free.
+/* 
+    // cq12719 Stop the memory leak 17-03-04 MZ.
+      FREE_MEMORY ((UBYTE *)network_data.pplmn,(network_data.pplmn_mem.maxRcd) * sizeof (T_MFW_NETWORK_STRUCT));
+*/
+	//keep the position of the selected PLMN, need it later to update the list
+	network_data.Listposition = ListData->ListPosition;
+
+	network_MNU_start(win,&network_OPTAttrib);
+  }
+  else
+  {
+	  
+	  //user pressed Exit to go back to the network submenu
+	  FREE_MEMORY ((UBYTE *)network_data.network_list->List, (network_data.pplmn_mem.maxRcd) * sizeof (T_MFW_MNU_ITEM));
+
+	  FREE_MEMORY ((UBYTE *)network_data.network_list, sizeof (ListMenuData));
+	  
+	  FREE_MEMORY ((UBYTE *)network_data.pplmn,(network_data.pplmn_mem.maxRcd) * sizeof (T_MFW_NETWORK_STRUCT));
+
+  }
+
+  
+}
+
+/*******************************************************************************
+
+ $Function:    	network_mobile_list_cb
+
+ $Description:	Callback function international list dialog.
+    	     
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+static void network_mobile_list_cb(T_MFW_HND win, ListMenuData * ListData)
+{
+
+	/* UBYTE i;*/ /* Warning Correction */
+
+	T_MFW_PPLMN_MODE mode;
+
+    T_MFW_WIN       * win_data = ((T_MFW_HDR *)win)->data;
+    T_network_OPT    * data     = (T_network_OPT *)win_data->user;
+    T_DISPLAY_DATA display_info;
+    
+	TRACE_EVENT ("network_mobile_list_cb()");
+
+
+    switch (ListData->Reason)
+    {
+		case LISTS_REASON_SELECT: /*  */
+			
+			mode =   REPLACE_PREF_PLMN;    /* Overwrite an existing entry  at a given index */
+			/*SPR 2635, use new function to replace preferred PLMN using the longname*/
+			nm_change_pref_plmn_longname(mode,(network_data.Listposition) +1 , 0, data->pplmn_longnames[ListData->ListPosition]);
+
+			/* SPR#2354 - SH - Now display "Changed".  On callback, redraw network list */
+			dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtChanged, TxtNull, COLOUR_STATUS_NETWORKS);
+			dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)network_mobile_list_changed_cb, THREE_SECS, 0 );
+
+		    info_dialog (win, &display_info); 
+
+	    break;
+		case LISTS_REASON_BACK: /* back to previous menu */
+
+			TRACE_EVENT ("pressed Back-key");
+
+			//API - SPR 2025 - 22/05/03 - De Allocate memory to avoid memory leak and also Crash
+			if ( network_data.pplmn != NULL )
+			  FREE_MEMORY ((UBYTE *)network_data.pplmn,(network_data.pplmn_mem.maxRcd) * sizeof (T_MFW_NETWORK_STRUCT));
+
+			network_MNU_destroy(data->win);
+
+	    break;
+		default:
+	    return;
+    }
+
+
+}
+
+/*******************************************************************************
+
+ $Function:    	network_mobile_list_changed_cb
+
+ $Description:	Callback from "Changed" message.  Destroys the list and recreates the
+ 				updated network list.
+    	     
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+
+void network_mobile_list_changed_cb(T_MFW_HND win , USHORT identifier, UBYTE reason)
+{
+    T_MFW_WIN       * win_data = ((T_MFW_HDR *)win)->data;
+    T_network_OPT    * data     = (T_network_OPT *)win_data->user;
+    /* T_DISPLAY_DATA display_info; */ /* Warning Correction */
+    
+	/* destroy the Menu */
+    network_MNU_destroy(data->win);
+
+    /* request the pref. PLMN list */
+    nm_pref_plmn_list(network_data.pplmn, network_data.pplmn_mem.maxRcd, 1);
+
+    return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	network_start_animation
+
+ $Description:	Starts the network animation.
+    	     
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+static void network_start_animation(void)
+{
+  T_DISPLAY_DATA display_info;
+
+  TRACE_FUNCTION ("network_start_animation()");
+
+	if (network_data.network_search_win != NULL)
+	{
+		network_stop_animation();
+	}
+
+	dlg_initDisplayData_TextStr( &display_info, TxtNull, TxtNull, "Searching for", "Networks", COLOUR_STATUS_NETWORKS);
+	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)network_animation_cb, FOREVER, KEY_CLEAR| KEY_RIGHT );
+  /*
+   * Call Info Screen
+   */
+
+  network_data.network_search_win = info_dialog (network_data.network_win, &display_info);
+}
+
+
+/*******************************************************************************
+
+ $Function:    	network_start_animation_plmn_selection
+
+ $Description:	Starts the plmn selection animation.
+    	     
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+static void network_start_animation_plmn_selection(int plmn_value)
+{
+  T_DISPLAY_DATA display_info;
+/*  T_MFW_PLMN_LIST * plmn_list; */  /* Warning Correction */
+
+  TRACE_FUNCTION ("network_start_animation()");
+
+	dlg_initDisplayData_TextStr( &display_info, TxtNull, TxtNull, "Requesting....", NULL, COLOUR_STATUS_NETWORKS);
+	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)network_animation_cb, FOREVER, KEY_CLEAR| KEY_RIGHT );
+	
+  /*
+   * Call Info Screen
+   */
+
+  network_data.network_search_win = info_dialog (network_data.network_win, &display_info);
+}
+
+
+/*******************************************************************************
+
+ $Function:    	network_forbidden_plmn
+
+ $Description:	Starts the forbidden plmn data screen.
+    	     
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+static void network_forbidden_plmn(void)
+{
+  T_DISPLAY_DATA display_info;
+
+  TRACE_FUNCTION ("network_forbidden_plmn()");
+
+	if (network_data.network_search_win != NULL)
+	{
+		network_stop_animation();
+	}
+
+	dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtNetwork, TxtForbidden, COLOUR_STATUS_NETWORKS);
+	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)network_animation_cb, 3500, KEY_CLEAR| KEY_RIGHT );
+  /*
+   * Call Info Screen
+   */
+
+  network_data.network_search_win = info_dialog (network_data.network_win, &display_info);
+}
+
+
+/*******************************************************************************
+
+ $Function:    	network_selected
+
+ $Description:	displays info screen on network selected
+    	     
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+static void network_selected(void)
+{
+  T_DISPLAY_DATA display_info;
+
+  TRACE_FUNCTION ("network_start_animation()");
+
+	dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtNetwork, TxtSelected, COLOUR_STATUS_NETWORKS);
+	// Jul 21, 2004        REF: CRR 13348  xvilliva
+	// We use a new callback to return to idle screen after the alert is flashed.
+	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)network_select_animation_cb, 3500, KEY_CLEAR| KEY_RIGHT );
+
+  /*
+   * Call Info Screen
+   */
+
+  network_data.network_search_win = info_dialog (network_data.network_win, &display_info);
+}
+
+/*******************************************************************************
+
+ $Function:    	network_no_plmns
+
+ $Description:	 Indicate Info Screen that the network list is empty.
+    	     
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+static void network_no_plmns(void)
+{
+  T_DISPLAY_DATA display_info;
+
+  TRACE_FUNCTION ("network_no_plmns()");
+
+	dlg_initDisplayData_TextStr( &display_info, TxtNull, TxtNull, "No networks", "available", COLOUR_STATUS_NETWORKS);
+	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)network_animation_cb, THREE_SECS, KEY_CLEAR| KEY_RIGHT );
+  /*
+   * Call Info Screen
+   */
+  info_dialog (0, &display_info);
+
+}
+/*******************************************************************************
+
+ $Function:    	network_stop_animation
+
+ $Description:	 Stops the network animation.
+    	     
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+static void network_stop_animation(void)
+{
+  TRACE_FUNCTION ("network_stop_animation()");
+
+  if (network_data.network_search_win)
+  {
+	SEND_EVENT(network_data.network_search_win,DIALOG_DESTROY,0,0);
+    network_data.network_search_win = 0;
+  }
+}
+/*******************************************************************************
+
+ $Function:    	network_animation_cb
+
+ $Description:	Callback for information dialog (not used)n
+    	     
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+void network_animation_cb(T_MFW_HND win, UBYTE identifier, UBYTE reason)
+{
+  TRACE_FUNCTION ("network_animation_cb()");
+
+  network_data.network_search_win = 0;
+  network_data.aborted = TRUE;
+}
+
+/*******************************************************************************
+
+ $Function:    	network_select_animation_cb
+
+ $Description:	Callback for information dialog "Network Selected".
+    	     
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+void network_select_animation_cb(T_MFW_HND win, UBYTE identifier, UBYTE reason)
+{
+	TRACE_FUNCTION ("network_select_animation_cb()");
+
+	network_data.network_search_win = 0;
+	network_data.aborted = TRUE;
+	// Jul 21, 2004        REF: CRR 13348  xvilliva
+	// If "gPhbkMenu" is not NULL, we destroy phonebook menu 
+	// to return to idle screen.
+	if(gPhbkMenu != NULL)
+	{
+		bookPhonebookDestroy( gPhbkMenu );
+	}
+}
+
+/*******************************************************************************
+
+ $Function:    	network_MNU_start
+
+ $Description:	called when the user press the Edit Softkey to enter the 
+                Option Menu "Select from the list" & "Enter the Network Code" &
+                            "Delete"
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+
+T_MFW_HND network_MNU_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr)
+{
+    T_MFW_HND win;
+
+    TRACE_FUNCTION ("network_MNU_start()");
+
+    win = network_MNU_create (parent_window);
+    if (win NEQ NULL)
+	{
+	    SEND_EVENT (win, E_INIT, NULL, (void *)menuAttr);
+	}
+    return win;
+}
+
+/*******************************************************************************
+
+ $Function:    	network_MNU_create
+
+ $Description:	Create the Option window
+ 
+ $Returns:		mfw window handle
+
+ $Arguments:	parent_window -parent window handle
+ 			
+*******************************************************************************/
+
+static T_MFW_HND network_MNU_create(MfwHnd parent_window)
+{
+    T_network_OPT   * data = (T_network_OPT *)ALLOC_MEMORY (sizeof (T_network_OPT));
+    T_MFW_WIN       * win;
+
+    TRACE_FUNCTION ("network_MNU_create()");
+
+    /*
+     * Create window handler
+     */
+
+    data->win = 
+	win_create (parent_window, 0, E_WIN_VISIBLE, (T_MFW_CB)network_MNU_win_cb);
+    if (data->win EQ NULL)
+	{
+	    return NULL;
+	}
+  
+    /* 
+     * connect the dialog data to the MFW-window
+     */
+
+    data->mmi_control.dialog = (T_DIALOG_FUNC)network_MNU_exec_cb;
+    data->mmi_control.data   = data;
+    win                      = ((T_MFW_HDR *)data->win)->data;
+    win->user                = (void *)data;
+    data->parent             = parent_window;
+
+    /*
+     * return window handle
+     */
+
+    return data->win;
+}
+
+/*******************************************************************************
+
+ $Function:    	network_MNU_destroy
+
+ $Description:	Destroy the Option window
+ 
+ $Returns:		mfw window handle
+
+ $Arguments:	own_window - current window
+ 			
+*******************************************************************************/
+
+static void network_MNU_destroy(MfwHnd own_window)
+{
+    T_MFW_WIN       * win_data;
+    T_network_OPT   * data;
+    /*   T_MFW_PPLMN_MEM *pplmn_mem;  */ /* Warning Correction */
+
+    TRACE_FUNCTION ("network_MNU_destroy()");
+
+    if (own_window)
+	{
+	    win_data = ((T_MFW_HDR *)own_window)->data;
+	    data     = (T_network_OPT *)win_data->user;
+		
+	    if (data)
+		{
+			kbd_delete(data->kbd);
+			kbd_delete(data->kbd_long);
+			mnuDelete (data->menu);
+			/*
+		     * Delete WIN handler
+		     */ 
+		       win_delete (data->win); 
+			TRACE_EVENT("END of WIN DELETE");
+			
+			if(data->network_list != NULL)
+			{    
+				TRACE_EVENT("START FREE MEMORY"); 
+				
+				/* Free the allocated memory for PLMN list window - OMAPS00061049 - 08-03-2006 */ 
+#ifndef NEPTUNE_BOARD
+				FREE_MEMORY ((UBYTE *)data->network_list->List, MAX_SHOW_OF_PLMN* sizeof (T_MFW_MNU_ITEM)); 
+#else
+				FREE_MEMORY ((UBYTE *)data->network_list->List, Plmn_list_count * sizeof (T_MFW_MNU_ITEM));
+#endif
+
+				FREE_MEMORY ((UBYTE *)data->network_list, sizeof (ListMenuData));
+
+				/*SPR 2635, free list of pointers to longname atrings*/
+				FREE_MEMORY ((UBYTE *)data->pplmn_longnames,MAX_SHOW_OF_PLMN* sizeof (char*));
+				
+				TRACE_EVENT("END of FREE MEMORY");
+			}
+	
+		    /*     
+		     * Free Memory
+		     */
+		     
+		    FREE_MEMORY ((void *)data, sizeof (T_network_OPT));
+		}
+	    else
+		{
+		    TRACE_EVENT ("network_MNU_destroy() called twice");
+		}
+	}
+}
+
+/*******************************************************************************
+
+ $Function:    	network_MNU_exec_cb
+
+ $Description:	Exec callback function for the Option window
+ 
+ $Returns:		none
+
+ $Arguments:	win - current window
+ 				event - event id
+ 				value - unique id
+ 				parameter - optional data.
+ 			
+*******************************************************************************/
+
+void network_MNU_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
+{
+    T_MFW_WIN        * win_data = ((T_MFW_HDR *) win)->data;
+    T_network_OPT    * data     = (T_network_OPT *)win_data->user;
+  /*  T_MFW_HND        * l_parent;  */ /* Warning Correction */
+  /*  SHORT            l_id;  */ /* Warning Correction */
+  /*  T_MFW_HDR        * parent      =  data->parent;  */ /* Warning Correction */
+ /*	T_MFW_EVENT         MfwEvents; */  /* Warning Correction */
+	
+    TRACE_FUNCTION ("network_MNU_exec_cb()");
+
+
+    switch (event)
+	{
+	case E_INIT:
+		data->kbd     =   kbdCreate(data->win,KEY_ALL,         (MfwCb)network_MNU_kbd_cb);
+    	data->kbd_long =   kbdCreate(data->win,KEY_ALL|KEY_LONG,(MfwCb)network_MNU_kbd_cb);
+    	data->menu    =   mnuCreate(data->win,&network_OPTAttrib, E_MNU_ESCAPE, (MfwCb)network_MNU_mnu_cb);
+    	mnuLang(data->menu,mainMmiLng);
+
+    	/* put the (new) dialog window on top of the window stack */
+    	mnuUnhide(data->menu);
+	    winShow(win);
+	    
+	    break;
+	default:
+	    return;
+	}
+}
+
+/*******************************************************************************
+
+ $Function:    	network_MNU_mnu_cb
+
+ $Description:	Menu callback function for the Option window
+ 
+ $Returns:		none
+
+ $Arguments:	e - event id
+ 				m - menu handle
+*******************************************************************************/
+
+static int network_MNU_mnu_cb (MfwEvt e, MfwMnu *m)
+{
+    T_MFW_HND        win      = mfwParent(mfw_header());
+    T_MFW_WIN      * win_data = ((T_MFW_HDR *)win)->data;
+    T_network_OPT   * data     = (T_network_OPT *)win_data->user;
+  /*  T_MFW_HND      * l_parent;  */ /* Warning Correction */
+  /*  SHORT            l_id;  */  /* Warning Correction */
+
+    TRACE_FUNCTION ("network_MNU_mnu_cb()");
+
+    switch (e)
+        {
+	case E_MNU_ESCAPE: /* back to previous menu "pref. network list"*/
+	    network_MNU_destroy(data->win);
+
+	 // request MFW to fill up the pref. PLMN list
+	 nm_pref_plmn_list(network_data.pplmn, network_data.pplmn_mem.maxRcd, 1);
+
+	    
+	    break;
+	default: /* in mnuCreate() only E_MNU_ESCAPE has been enabled! */
+	    return MFW_EVENT_REJECTED;
+        }
+    return MFW_EVENT_CONSUMED;
+}
+
+/*******************************************************************************
+
+ $Function:    	network_MNU_win_cb
+
+ $Description:	Window callback function for the Option window
+ 
+ $Returns:		execution status
+
+ $Arguments:	e - event id
+ 				w - window handle 
+*******************************************************************************/
+
+static int network_MNU_win_cb (MfwEvt e, MfwWin *w)
+{
+    TRACE_FUNCTION ("network_MNU_win_cb()");
+
+    switch (e)
+	{
+        case MfwWinVisible:  /* window is visible  */
+	    displaySoftKeys(TxtSoftSelect,TxtSoftBack);
+	    break;
+	case MfwWinFocussed: /* input focus / selected   */
+	case MfwWinDelete:   /* window will be deleted   */
+        default:
+	    return MFW_EVENT_REJECTED;
+	}
+    return MFW_EVENT_CONSUMED;
+}
+
+/*******************************************************************************
+
+ $Function:    	network_MNU_kbd_cb
+
+ $Description:	Exec callback function for the Option window
+ 
+ $Returns:		execution status
+
+ $Arguments:	e - event id
+ 				k - keyboard info
+*******************************************************************************/
+
+static int network_MNU_kbd_cb (MfwEvt e, MfwKbd *k)
+{
+    T_MFW_HND            win      = mfwParent(mfw_header());
+    T_MFW_WIN          * win_data = ((T_MFW_HDR *)win)->data;
+    T_network_OPT    * data       = (T_network_OPT *)win_data->user;
+
+    TRACE_FUNCTION ("network_MNU_kbd_cb()");
+
+    if (e & KEY_LONG)
+	{
+	    switch (k->code)
+		{
+		case KCD_HUP: /* back to previous menu */
+		    mnuEscape(data->menu);
+		    break;
+		case KCD_RIGHT: /* Power Down */
+		    return MFW_EVENT_REJECTED; /* handled by idle */
+		default: /* no response to all other keys */
+		    return MFW_EVENT_CONSUMED;
+		}
+	}
+    else
+	{
+	    switch (k->code)
+		{
+		case KCD_MNUUP: /* highlight previous entry */
+		    mnuUp(data->menu);
+		    break;
+		case KCD_MNUDOWN: /* highlight next entry */
+		    mnuDown(data->menu);
+		    break;
+		case KCD_LEFT: /* activate this entry */
+		    mnuSelect(data->menu);
+		    break;
+		case KCD_HUP: /* back to previous menu */
+		case KCD_RIGHT: /* back to previous menu */
+		    mnuEscape(data->menu);
+		    break;
+		default: /* no response to all other keys */
+		    return MFW_EVENT_CONSUMED;
+		}
+	}
+    return MFW_EVENT_CONSUMED;
+}
+
+/*******************************************************************************
+
+ $Function:    	network_request_plnm_list
+
+ $Description:	Request existing network list in Mobile
+ 
+ $Returns:		
+
+ $Arguments:	
+
+
+ *******************************************************************************/
+static int network_request_plnm_list(MfwMnu* m, MfwMnuItem* i)
+{
+    T_MFW_HND          win      = mfwParent(mfw_header());
+  /*  T_MFW_WIN        * win_data = ((T_MFW_HDR *)win)->data;  */ /* Warning Correction */
+/*    T_network_OPT    * data     = (T_network_OPT *)win_data->user; */  /* Warning Correction */
+	T_DISPLAY_DATA display_info;
+	
+	TRACE_FUNCTION("network_request_plnm_list");
+
+	/* SPR#2354 - SH - Display "Choose Replacement" dialogue,
+	 * so the function of the second list is more evident */
+
+	dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtChooseReplacement1, TxtChooseReplacement2, COLOUR_STATUS_NETWORKS);
+	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)network_request_plmn_list_cb, TWO_SECS, 0 );
+
+    info_dialog (win, &display_info); 
+
+    return 1;
+}
+
+/*******************************************************************************
+
+ $Function:    	network_request_plnm_list_cb
+
+ $Description:	User has been advised to "choose replacement", now display the list!
+ 
+ $Returns:		None
+
+ $Arguments:	Usual info dialogue callback arguments.
+
+*******************************************************************************/
+
+static void network_request_plmn_list_cb(T_MFW_HND win, USHORT identifier, UBYTE reason)
+{
+    T_MFW_WIN        * win_data = ((T_MFW_HDR *)win)->data;
+    T_network_OPT    * data     = (T_network_OPT *)win_data->user;
+	/*SPR 2635, just alloc pointers to strings */
+ 	data->pplmn_longnames = (char**)ALLOC_MEMORY ((MAX_SHOW_OF_PLMN) * sizeof (char*));
+
+	if (data->pplmn_longnames NEQ 0)
+	{
+		//now fill up the "data->pplmn_longnames" with the PLMN list from ACI
+		nm_plnm_list_longnames(data->pplmn_longnames, 1, MAX_SHOW_OF_PLMN);
+
+	}
+	/*SPR 2635 end*/
+	else
+	{
+		TRACE_EVENT("create the list failed");
+		return;
+	}
+
+	//show the list on the screen now
+	data->network_list = network_create_mobile_list (data);
+    listDisplayListMenu (data->win, data->network_list,(ListCbFunc)network_mobile_list_cb,0);
+
+    return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	network_delete
+
+ $Description:	
+ 
+ $Returns:		
+
+ $Arguments:	
+
+
+ *******************************************************************************/
+
+static int network_delete(MfwMnu* m, MfwMnuItem* i)
+{
+
+    T_MFW_HND win      = mfwParent(mfw_header());
+
+	TRACE_FUNCTION ("network_delete()");
+
+#ifdef NO_ASCIIZ
+	if (network_data.pplmn[network_data.Listposition].network_short.len NEQ 0 )
+#else 
+	if (strlen((char *)network_data.pplmn[network_data.Listposition].network_short) NEQ 0 )
+#endif	
+	{
+		// if the user selected a pref. PLMN
+		// xrashmic 10 Nov, 2004 MMI-SPR-OMAPS00044200-OMAPS00044851
+		//Made network_info_screen as a generic function as it can be reused to display different messgaes to the user
+		//Hence need to pass the callback funtion as a parameter
+		network_info_screen (win, TxtDeleted,(T_VOID_FUNC)network_delete_pref_plnm);
+	}
+	else
+	{
+		// if the user selected a empty item
+		// xrashmic 10 Nov, 2004 MMI-SPR-OMAPS00044200-OMAPS00044851
+		//Made network_info_screen as a generic function as it can be reused to display different messgaes to the user
+		//Hence need to pass the callback funtion as a parameter
+		network_info_screen (win, TxtEmptyList,(T_VOID_FUNC)network_delete_pref_plnm);
+	}
+
+	// destroy the Menu 
+	network_MNU_destroy(win);
+
+      /* Warning Correction - BEGIN */
+	return 1;
+      /* END */
+	  
+
+}
+
+/*******************************************************************************
+
+ $Function:    	network_delete_pref_plnm
+
+ $Description:	Delete the selected pref. PLMN l
+ 
+ $Returns:		
+
+ $Arguments:	
+
+
+ *******************************************************************************/
+ void network_delete_pref_plnm (T_MFW_HND win , USHORT identifier, UBYTE reason)
+{
+
+	T_MFW_PPLMN_MODE mode;
+	UBYTE i;
+  /*  T_MFW_WIN       * win_data = ((T_MFW_HDR *)win)->data;         */  /* Warning Correction */
+  /*  T_network_OPT    * data     = (T_network_OPT *)win_data->user; */ /* Warning Correction */
+
+	TRACE_FUNCTION ("network_delete_pref_plnm()");
+
+  
+	mode =   DELETE_PREF_PLMN;      /* Delete an entry from the list  */
+
+	//update now the pref. PLMN list
+	//(network_data.Listposition) "+1" because the zero is counted as well
+	nm_change_pref_plmn(mode, (network_data.Listposition) +1 , 0, 0);
+
+	// clear all the PLMN and fill up with updated list
+	for (i=0; i < network_data.pplmn_mem.maxRcd; i++)
+	{
+
+#ifdef NO_ASCIIZ
+		network_data.pplmn[i].network_long.len = 0;
+		network_data.pplmn[i].network_short.len = 0;
+#else 
+		memset(network_data.pplmn[i].network_long,   '\0', LONG_NAME);
+		memset(network_data.pplmn[i].network_short,   '\0', SHORT_NAME);
+#endif		
+		memset(network_data.pplmn[i].network_numeric, '\0', NUMERIC_LENGTH);
+	}
+
+
+    // request the updated pref. PLMN list
+	nm_pref_plmn_list(network_data.pplmn, network_data.pplmn_mem.maxRcd, 1);
+
+}
+
+/*******************************************************************************
+
+ $Function:    	network_info_screen
+
+ $Description:	confirm the deleted PLMN
+ 
+ $Returns:		
+
+ $Arguments:	
+
+// xrashmic 10 Nov, 2004 MMI-SPR-OMAPS00044200-OMAPS00044851
+//Made this as a generic function so that it can be reused to display different messgaes to the user
+//Added the call back function pointer as the argument.
+ *******************************************************************************/
+void network_info_screen (T_MFW_HND win, USHORT MessageId, T_VOID_FUNC funt_ptr )
+{
+    T_DISPLAY_DATA display_info;
+
+    TRACE_FUNCTION ("network_info_screen()");
+
+	dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, MessageId, TxtNull, COLOUR_STATUS_NETWORKS);
+	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)funt_ptr, THREE_SECS, 0 );
+
+    info_dialog (win, &display_info); 
+}
+
+
+/*******************************************************************************
+
+ $Function:    	network_OPT_EDT_start
+
+ $Description:	
+
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+T_MFW_HND network_EDT_start (MfwMnu* m, MfwMnuItem* i)
+{
+	T_MFW_HND   win;
+	T_MFW_HND   parent_window   = mfwParent(mfw_header());
+
+    TRACE_FUNCTION ("network_OPT_EDT_start()");
+
+    win = network_EDT_create (parent_window);
+
+    if (win NEQ NULL)
+	{
+	    SEND_EVENT (win, E_INIT, 0, 0);
+	}
+    return win;
+}
+
+/*******************************************************************************
+
+ $Function:    	network_OPT_EDT_create
+
+ $Description:	
+
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+static T_MFW_HND network_EDT_create(MfwHnd parent_window)
+{
+    T_network_OPT  * data = (T_network_OPT *)ALLOC_MEMORY (sizeof (T_network_OPT));
+    T_MFW_WIN     * win;
+
+    TRACE_FUNCTION ("network_EDT_create()");
+
+    /*
+     * Create window handler
+     */
+
+    data->win = win_create (parent_window, 0, 0, NULL);
+    
+    if (data->win EQ NULL)
+	{
+	    return NULL;
+	}
+
+    /* 
+     * connect the dialog data to the MFW-window
+     */
+
+    data->mmi_control.dialog = (T_DIALOG_FUNC)network_EDT_exec_cb;
+    data->mmi_control.data   = data;
+    win                      = ((T_MFW_HDR *)data->win)->data;
+    win->user                = (void *)data;
+    data->parent             = parent_window;
+
+    /*
+     * return window handle
+     */
+
+    winShow(data->win);
+    return data->win;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	network_EDT_destroy
+
+ $Description:	
+
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+static void network_EDT_destroy(MfwHnd own_window)
+{
+    T_MFW_WIN        * win_data;
+    T_network_OPT     * data;
+
+
+    TRACE_FUNCTION ("networkT_EDT_destroy()");
+
+    if (own_window)
+	{
+	    win_data = ((T_MFW_HDR *)own_window)->data;
+	    data     = (T_network_OPT *)win_data->user;
+
+	    if (data)
+		{
+		    /*
+		     * Delete WIN handler
+		     */ 
+		    win_delete (data->win);
+
+		    /*     
+		     * Free Memory
+		     */
+		    FREE_MEMORY ((void *)data, sizeof (T_network_OPT));
+		}
+	    else
+		{
+		    TRACE_EVENT ("network_EDT_destroy() called twice");
+		}
+	}
+}
+
+
+/*******************************************************************************
+
+ $Function:    	network_EDT_exec_cb
+
+ $Description:	
+ 
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+void network_EDT_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
+{
+    T_MFW_WIN       * win_data = ((T_MFW_HDR *) win)->data;
+    T_network_OPT    * data     = (T_network_OPT *)win_data->user;
+  /*  T_MFW_HND      * l_parent; */  /* Warning Correction */
+  /*  SHORT             l_id; */ /* Warning Correction */
+  /*  int                index; */  /* Warning Correction */
+
+    TRACE_FUNCTION ("network_EDT_exec_cb()");
+
+    switch (event)
+	{
+	case E_INIT:
+	/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+		AUI_edit_SetDefault(&data->editor_info);
+		AUI_edit_SetDisplay(&data->editor_info, ZONE_FULL_SK_TITLE, COLOUR_EDITOR_XX, EDITOR_FONT);
+		AUI_edit_SetEvents(&data->editor_info, value, TRUE, FOREVER, (T_AUI_EDIT_CB)network_EDT_editor_cb);
+		AUI_edit_SetTextStr(&data->editor_info, TxtSoftOK, TxtDelete, TxtMCCMNC, NULL);
+		AUI_edit_SetMode(&data->editor_info, 0, ED_CURSOR_UNDERLINE);
+		AUI_edit_SetAltTextStr(&data->editor_info, 5, TxtNull, TRUE, TxtSoftBack);
+		AUI_edit_SetBuffer(&data->editor_info, ATB_DCS_ASCII, (UBYTE *)data->buffer, 6);
+
+		AUI_edit_Start(data->win, &data->editor_info);
+#else /* NEW_EDITOR */
+	    data->editor_info.editor_attr.win.px   = 6;
+	    data->editor_info.editor_attr.win.py   = /*12*/Mmi_layout_line(2);
+	    data->editor_info.editor_attr.win.sx   = /*80*/SCREEN_SIZE_X;
+	    data->editor_info.editor_attr.win.sy   = /*20 */Mmi_layout_line_height()*2;
+	    data->editor_info.editor_attr.edtCol  = COLOUR_EDITOR_XX;
+	    data->editor_info.editor_attr.font     = 0;
+	    data->editor_info.editor_attr.mode     = edtCurBar1;
+	    data->editor_info.editor_attr.controls = 0;
+	    data->editor_info.editor_attr.text     = data->buffer;  /* buffer to be edited */
+        data->editor_info.editor_attr.size     = 6;
+	    data->editor_info.LeftSoftKey       = TxtSoftOK;	    
+	    data->editor_info.RightSoftKey      = TxtDelete;
+	    data->editor_info.TextId            = TxtMCCMNC;
+	    data->editor_info.Identifier        = value;  /* optional */
+	    data->editor_info.mode              = DIGITS_MODE;
+	    data->editor_info.Callback          = (T_EDIT_CB)network_EDT_editor_cb;
+		data->editor_info.destroyEditor		= TRUE;
+	    data->editor_info.hide                 = FALSE;
+	    data->editor_info.AlternateLeftSoftKey = TxtNull;
+	    data->editor_info.TextString           = NULL;
+	    data->editor_info.min_enter            = 5;
+	    data->editor_info.timeout              = FOREVER;
+
+	    /* create the dialog handler */
+	    editor_start(data->win, &data->editor_info);  /* start the editor */ 
+#endif /* NEW_EDITOR */
+	   
+   
+	    break;
+	case E_ABORT:
+	case E_EXIT: /* defaultreaction */
+	    network_EDT_destroy(data->win);
+	    break;
+	default:
+	    return;
+	}
+}
+
+
+/*******************************************************************************
+
+ $Function:    	network_change_pref_plmn
+
+ $Description:	Populates the preffered plmn List.
+
+ $Returns:		
+
+ $Arguments:	
+ // xrashmic 10 Nov, 2004 MMI-SPR-OMAPS00044200-OMAPS00044851
+*******************************************************************************/
+ void network_change_pref_plmn (T_MFW_HND win , USHORT identifier, UBYTE reason)
+{
+	    T_MFW_WIN       * win_data = ((T_MFW_HDR *)win)->data;
+    T_network_OPT    * data     = (T_network_OPT *)win_data->user;
+
+	nm_pref_plmn_list(network_data.pplmn, network_data.pplmn_mem.maxRcd, 1);			
+
+}
+/*******************************************************************************
+
+ $Function:    	network_EDT_editor_cb
+
+ $Description:	
+
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+static void network_EDT_editor_cb (T_MFW_HND win, USHORT Identifier, USHORT event)
+{
+    T_MFW_WIN    * win_data = ((T_MFW_HDR *)win)->data;
+    T_network_OPT * data     = (T_network_OPT *)win_data->user;
+    T_MFW_HND    * l_parent;
+	T_MFW_PPLMN_MODE mode;
+
+    TRACE_FUNCTION ("network_EDT_editor_cb()");
+
+
+     l_parent = data->parent;
+
+    switch(event)
+    	{
+			case INFO_KCD_LEFT:
+  
+			mode =   REPLACE_PREF_PLMN;    /* Overwrite an existing entry  at a given index */
+
+			//update now the pref. PLMN list
+			//Overwrite an existing entry
+			//(network_data.Listposition) "+1" because the zero is counted as well
+			nm_change_pref_plmn(mode, (network_data.Listposition) +1 , 0, (UBYTE*) data->buffer);
+
+			// destroy the Editor 
+			network_EDT_destroy(data->win);
+			 // xrashmic 10 Nov, 2004 MMI-SPR-OMAPS00044200-OMAPS00044851
+			//Added this info screen so that sim is updated by nm_change_pref_plmn with the new code
+			//before populating the new list with nm_pref_plmn_list 
+			network_info_screen (win, TxtPleaseWait,(T_VOID_FUNC)network_change_pref_plmn);
+			// destroy the MENU
+			network_MNU_destroy(l_parent);
+	    break;
+	case INFO_KCD_RIGHT:
+	case INFO_KCD_HUP:
+		// destroy the Editor 
+	       network_EDT_destroy(data->win);
+		// destroy the MENU
+		network_MNU_destroy(l_parent);
+
+      //    Nov 02, 2005	REF: omaps00044855   Sumanth Kumar.C
+      //    Solution:		Free network_data.pplmn.
+		FREE_MEMORY ((UBYTE *)network_data.pplmn,(network_data.pplmn_mem.maxRcd) * sizeof (T_MFW_NETWORK_STRUCT));
+		
+	    break;
+	default:
+	    break;
+    	}
+    return;
+}
+
+