view src/aci2/bmi/mmiBookController.c @ 701:35e7f9d0379f

targets: add TARGET_HAS_BUZZER to c11x, c139 and dsample This new target config preprocessor symbol was introduced in Tourmaline in connection with the new approach to playing buzzer melodies via PWT, properly omitting the responsible code on targets where BU output controls the vibrator instead. That code is not present in Magnetite and we have no plans to backport it here, but target header files should be kept consistent between the two trees, especially given that we plan to support FC Venus target in Magnetite.
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 26 Mar 2022 19:51:34 +0000
parents 3c2acfa1a72f
children
line wrap: on
line source

/*******************************************************************************

          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:   PhoneBook
 $File:       MmiBookController.c
 $Revision:   1.0

 $Author:   Condat(UK)
 $Date:       25/10/00

********************************************************************************

 Description:

  The book controller module provides the external
  interface to the phone book. It provides ALL external
  entry points to the phone book system.

********************************************************************************

 $History: MmiBookController.c

       Jun 13, 2005	REF: SPR 31705 x0021308
       Description: Once  maximum limit of the My Number is exceeded, display info : Phonebook full, 
       expected is MyNumber Full
       Solution: Replaced the Return tag in function Protected Menu Handler(booksetownNumber) from 
       Phonebookfull with MyNumberfull.

       Jun 13, 2005	REF: SPR 31710 x0021308
 	Description: Once  maximum limit of the FDN Number  is exceeded, display info : Phonebook full, 
       expected is FDNList Full
       Solution: Replaced the Return tag in function Protected Menu Handler(booksetownNumber) from 
       Phonebookfull with FDNListfull While checking whether in FDNMenu is active using MenuFDN global 
       variable.  

        
   	Sep 22, 2004        REF: CRR 21392  xvilliva  
	Bug:		PIN2 Screen is not displaying, While Adding FDN Number thru 
			Recent call Menu.
	Fix:	 	We add the "bookRepRedNameEnter" to "ProtectedActions" array.
			If FDN is enabled, Pin2 will be asked. 


  25/10/00      Original Condat(UK) BMI version.



 $End

 // Issue Number : MMI-FIX-12161 on 07/04/04 by Nishikant Kulkarni/Ajith K.P

*******************************************************************************/


/*******************************************************************************

                                Include Files

*******************************************************************************/

/* MMI phone book specific 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 "mfw_mfw.h"
#include "mfw_win.h"
#include "mfw_kbd.h"
#include "mfw_lng.h"
/* SPR#1428 - SH - New Editor changes */
#ifndef NEW_EDITOR
#include "mfw_edt.h"
#endif
#include "mfw_icn.h"
#include "mfw_mnu.h"
#include "mfw_tim.h"

#include "mfw_sim.h"
#include "mfw_cm.h"
#include "mfw_nm.h"
#include "mfw_phb.h"
#include "mfw_mme.h"
#include "mfw_sat.h"
#include "mfw_sms.h"

#include "dspl.h"

#include "ksd.h"
#include "psa.h"

#include "MmiMain.h"
#include "MmiBookController.h"
#include "MmiDummy.h"
#include "MmiDialogs.h"
#include "MmiLists.h"



#include "MmiMenu.h"
#include "mmiCall.h"
#include "Mmiicons.h"
#include "MmiIdle.h"

#include "MmiSoftKeys.h"
#include "MmiSounds.h"
#include "MmiIdle.h"
#include "MmiNetwork.h"
#include "mmiSat_i.h"
#include "MmiAoc.h"

#include "gdi.h"
#include "audio.h"

#include "cus_aci.h"
#include "MmiTimers.h"


#include "MmiBookController.h"
#include "MmiBookUtils.h"

/* MMI specific includes, outside scope of phone book
*/
#include "MmiPins.h"
#include "mmiSmsMenu.h"
#include "mmismssend.h"
#include "mmiCall.h"
#include "MmiIdle.h"
#include "MmiCPHS.h"


/*******************************************************************************

                                Definitions

*******************************************************************************/

/* Since we want to make sure all of the menu handlers get
   treated the same way, and have a protected handler, define
   a new macro, in terms of the MENU_HANDLER, which will
   invoke the protected function correctly (See below for
   further details)
*/
#define PROTECTED_MENU_HANDLER( Name ) \
static MENU_HANDLER( Protected##Name ); \
MENU_HANDLER( Name ) \
{ \
    return Protected( Name, Protected##Name, Menu, Item ); \
} \
static MENU_HANDLER( Protected##Name )

/*
** Since PROTECTED_MENU_HANDLER handles only FDN protection, the following is a menu handler to ensure
** that PIN2 entry is required for any associated menu action
*/
#define PIN2RQD_MENU_HANDLER( Name ) \
static MENU_HANDLER( Pin2Rqd##Name ); \
MENU_HANDLER( Name ) \
{ \
    return Pin2Rqd( Name, Pin2Rqd##Name, Menu, Item ); \
} \
static MENU_HANDLER( Pin2Rqd##Name )

/*Added For Fix:  MMI-FIX-12161 on 07/04/04 by Nishikant Kulkarni/Ajith K.P */
extern T_idle idle_data;               


/*******************************************************************************

                                Local structures

*******************************************************************************/

/* A number of the actions the phone book is required to perform
   can only be activated when the user enters a security PIN number,
   the PIN2 code. In order to make the operation of the module
   clear, we will build a list of the protected actions, and then
   drive all menu operations through a single clearing process.

   The module will use the following action list perform the
   protection, note that the last entry in this list must be
   NULL
*/
typedef tBookStatus (*tProtectFunction)( tBookMfwMenu *Menu, tBookMfwMenuItem *Item );

tProtectFunction ProtectedActions[] = {
  bookNameEnter,
  bookNameEdit,
  bookNameDelete,
  bookNameDeleteAll,
  // Sep 22, 2004        REF: CRR 21392  xvilliva  
  // A function, if added to this array would ask Pin2 when called.
  // Storing a number from recent call list would ask for Pin2, if FDN is enabled.
  bookRepRedNameEnter, 
  NULL };

//    May 3, 2004        REF: CRR MMI-SPR-18555  Rashmi C N(Sasken) 
//	This flag will indicate when we are in FDN menu
int menuFDN; 
extern T_call call_data;


/*******************************************************************************

                                Private methods

*******************************************************************************/

/*******************************************************************************

 $Function:     Mmir_BaseAddress

 $Description:  returns the base address of the Master Index Table

 $Returns:    As above

 $Arguments:  none.

*******************************************************************************/

/* Provide a local routine which will perform the protection
   method. This will scan the list of protected actions, looking
   for the provided function, if it isn't a protected function
   then we will just call it directly, otherwise we will guard
   it with the PIN2 security code if we have a protected book
*/
static int Protected( tProtectFunction FunTag, tProtectFunction FunPtr, tBookMfwMenu *Menu, tBookMfwMenuItem *Item )
{
    pBookMfwWin    win_data = (pBookMfwWin) bookWindowData();
  pBookPhonebook book     = ((pBookStandard)win_data->user)->phbk;
  int i;

  /* Check for a protected book being used (details to be sorted
     out at a later date)
  */

   // Sep 22, 2004        REF: CRR 21388  xvilliva
   // We check if the call is not from FDN menu and if the current storage
   // for phonebook is internal phone book, we avoid asking Pin2 accordingly.
   if(menuFDN == 0 && bookActiveBook(WRITE) == PHB_IPB)
   {
   	//Do nothing.
   } 
// May 3, 2004        REF: CRR MMI-SPR-18555  Rashmi C N(Sasken) 
//	Pin2 should be prompted when user does FDN related operations in FDN menu
//   In FDN menu, receie an active call and FDN is disabled, pin2 should not be prompted for in call addressbook operations
  else if ( phb_get_mode() == PHB_RESTRICTED || (menuFDN && (call_data.calls.numCalls==0)))
  {
    /* Is the requested function one of the ones we need
       to protect ?
    */
    TRACE_FUNCTION("Phone Book in FDN mode:ask for pin 2");
    for ( i = 0; ProtectedActions[i]; i++ )
    {
      if ( FunTag == ProtectedActions[i] )
      {
        /* Yup, so we need to store the pending action for
           this window, this will be invoked by the checking
           operation, indirectly, if the check is successful
        */
        book->pin2_next = (T_VOID_FUNC) FunPtr;

        //We're cheating and passing the current window to the
        //handler via the unused menu parameter -- MC
        book->menu = (tBookMfwMenu*) bookCurrentWindow();
        book->item = Item;

        /* Call out to get the pin2 number checked, this will
           respond with a message back to this object, which
           we will deal with on receipt
        */
        return pin2_check( bookCurrentWindow());
      }
    }
  }

  /* we've come through the list of functions and either don't
     have a protected action to perform, or the book itself
     is not protected, so just invoke the requested action
  */
  return (FunPtr)( (tBookMfwMenu*) bookCurrentWindow()/*Menu*/, Item );
}


/*
** This function will apply PIN2 protection to the associated menu functions at ALL times
**
*/
static int Pin2Rqd( tProtectFunction FunTag, tProtectFunction FunPtr, tBookMfwMenu *Menu, tBookMfwMenuItem *Item )
{
	pBookMfwWin    win_data = (pBookMfwWin) bookWindowData();
	pBookPhonebook book     = ((pBookStandard)win_data->user)->phbk;
//	int i;   // RAVI

	/* Yup, so we need to store the pending action for
	this window, this will be invoked by the checking
	operation, indirectly, if the check is successful
	*/
	book->pin2_next = (T_VOID_FUNC) FunPtr;

	//We're cheating and passing the current window to the
	//handler via the unused menu parameter -- MC
	book->menu = (tBookMfwMenu*) bookCurrentWindow();
	book->item = Item;

	/* Call out to get the pin2 number checked, this will
	respond with a message back to this object, which
	we will deal with on receipt
	*/
	return pin2_check( bookCurrentWindow());
}

/*******************************************************************************

                                Public methods

*******************************************************************************/

/* Menu Handlers

   We are routing all of the phone book functionality through
   this module to allow the functional modules to be developed
   independantly where possible.

   This gives a single interface point for the rest of the
   MMI subsystem.

   All of the following functions use the MENU_HANDLER macro,
   as such they all have a common interface, this is not therefore
   documented in each case. The following information is common
   for each menu handler


   $Returns:  Status from worker routine

   $Arguments:  Menu, the menu from which the function was activated
                Item, the item associated with the call

*/


/*******************************************************************************

 $Function:     bookNameEnter

 $Description:

    Add new name to the phone book

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

*******************************************************************************/

PROTECTED_MENU_HANDLER( bookNameEnter )
{
  //recast the menu parameter as the current window -- MC
    T_MFW_HND     win         = (T_MFW_HND)Menu;
    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;
    T_phbk          *Phbk       = data->phbk;

  TRACE_FUNCTION("bookNameEnter");
    /* Clear the input editor structures before we go any further
    */

  if (Phbk->UpdateAction!=ADD_FROM_IDLE)
      memset( Phbk->phbk->edt_buf_number, '\0', PHB_MAX_LEN );
  /*MC SPR 1257, replacing PHB_MAX_LEN with MAX_ALPHA_LEN for name strings*/
  	  memset( Phbk->phbk->edt_buf_name,   '\0', MAX_ALPHA_LEN );
    /* Indicate this is an additional entry being created
    */
    Phbk->UpdateAction = CREATE_ENTRY;

	// May 3, 2004        REF: CRR MMI-SPR-18555  Rashmi C N(Sasken) 
	//	As the book is being changed for FDN menu operations, we need to 
	//    get back the current book for the normal phonbook operations
    Phbk->current.status.book = bookActiveBook(READ);

    /* Determine if we have room to add any new entries
    */
  bookGetCurrentStatus( &Phbk->phbk->current.status );
  if ( Phbk->phbk->current.status.avail_entries )
  {
        /* We are okay to input the number, use a worker routine
           from the input handler module to actually deal with this
        */
    Phbk->input_number_win = bookInputStartNumberEditor( win, Phbk->edt_buf_number );
  }
  else
  {
        /* We have no room available to add the name, so check if
           we have filled the namespace or not
        */
        
        /*If FDN menu active and no room for entries, then display FDN list full */
	tIndexTagNames Tag ;	
        if(menuFDN)  
        	{
        	 Tag = ( Phbk->phbk->current.status.used_entries )
        	    ? TxtFDNListFull : TxtOperationNotAvail;          //SPR 31710 x0021308:RamG	
        	}
         else
		{
		 Tag = ( Phbk->phbk->current.status.used_entries )
            ? TxtPhbkFull : TxtOperationNotAvail;
	      	} 
        bookShowInformation( win, Tag,NULL, NULL );
  
	
  }

    /* Always return event consumed
    */
    return MFW_EVENT_CONSUMED;
}


/*******************************************************************************

 $Function:     bookNameEdit

 $Description:

    Edit the name in the phone book

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

*******************************************************************************/

PROTECTED_MENU_HANDLER( bookNameEdit )
{
  //recast the menu parameter as the current window -- MC
    T_MFW_HND     win         = /*mfwParent( mfw_header() )*/(T_MFW_HND)Menu;
    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;
    T_phbk          *Phbk       = data->phbk;

    /* Indicate this is an edit of a current entry
    */
    Phbk->UpdateAction = MODIFY_EXISTING;
	/*MC SPR 1327, if UPN don't change phonebook type*/
    if (data->phbk->current.status.book != PHB_UPN)
		data->phbk->current.status.book = bookActiveBook(READ);

	/*api - clear buffers before edit
	*/
	memset( Phbk->phbk->edt_buf_number, '\0', PHB_MAX_LEN );
  	memset( Phbk->phbk->edt_buf_name,   '\0', MAX_ALPHA_LEN );

TRACE_EVENT_P2("current phbk is = %d and current entry is = %d", data->phbk->current.status.book,data->phbk->current.entry[ data->phbk->current.selectedName ].book);
	
	if(data->phbk->current.status.book == PHB_ADN_FDN)
	{
		if(data->phbk->current.entry[ data->phbk->current.selectedName ].book==PHB_FDN)
		{
			bookActivateFDN((T_MFW_HND)Menu);
		}	
		else
		{
		    	/* And populate the buffers with the information to be modified
    			*/
				#ifdef NO_ASCIIZ
				/*MC , SPR 1242 copy whole name, merged from b-sample build*/
				  memcpy( Phbk->phbk->edt_buf_name,   Phbk->current.entry[ Phbk->current.selectedName ].name.data, MAX_ALPHA_LEN /*Phbk->current.entry[ Phbk->current.selectedName ].name.len*/);
				#else
				  memcpy( Phbk->phbk->edt_buf_name,   Phbk->current.entry[ Phbk->current.selectedName ].name, MAX_ALPHA_LEN );
				#endif
			    memcpy( Phbk->phbk->edt_buf_number, Phbk->current.entry[ Phbk->current.selectedName ].number, PHB_MAX_LEN );

			    /* And edit the entry we currently have active
			    */
			    Phbk->input_number_win = bookInputStartNumberEditor( win, Phbk->edt_buf_number );
		}
	}
    else
    	{
		    /* And populate the buffers with the information to be modified
    		*/
			#ifdef NO_ASCIIZ
			/*MC , SPR 1242 copy whole name, merged from b-sample build*/
			  memcpy( Phbk->phbk->edt_buf_name,   Phbk->current.entry[ Phbk->current.selectedName ].name.data, MAX_ALPHA_LEN/*Phbk->current.entry[ Phbk->current.selectedName ].name.len*/);
			#else
			  memcpy( Phbk->phbk->edt_buf_name,   Phbk->current.entry[ Phbk->current.selectedName ].name, MAX_ALPHA_LEN );
			#endif
		    memcpy( Phbk->phbk->edt_buf_number, Phbk->current.entry[ Phbk->current.selectedName ].number, PHB_MAX_LEN );
	
		    /* And edit the entry we currently have active
		    */
		   Phbk->input_number_win = bookInputStartNumberEditor( win, Phbk->edt_buf_number );
    	}
    /* Always return event consumed
    */
    return MFW_EVENT_CONSUMED;
}


/*******************************************************************************

 $Function:     bookNameDelete

 $Description:

    Delete name in phone book

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

*******************************************************************************/

PROTECTED_MENU_HANDLER( bookNameDelete )
{

	//recast the menu parameter as the current window -- MC
	//and pass it on 
	//when ADN_FDN phonebook in use check if current entry is FDN
	//is so then call information screen or allow entry to be deleted. --- AP 23/01/02
	//Issue 1944 MZ  Allow an entry in FDN list to be deleted.
    T_MFW_HND       win         = (T_MFW_HND)Menu;
    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data         = (tBookStandard *) win_data->user;
	
	 /*MC SPR 1327, if UPN don't change phonebook type*/
     if (data->phbk->current.status.book != PHB_UPN)
			data->phbk->current.status.book = bookActiveBook(READ);
	if(data->phbk->current.status.book == PHB_ADN_FDN)
		if(data->phbk->current.entry[ data->phbk->current.selectedName ].book==PHB_FDN)
			bookActivateFDN((T_MFW_HND)Menu);
		else	
			bookDeleteEntry((T_MFW_HND)Menu);
	else
		bookDeleteEntry((T_MFW_HND)Menu);	

    return MFW_EVENT_CONSUMED;
}

/*******************************************************************************

 $Function:     bookNameCall

 $Description:

    Call name in phone book

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

*******************************************************************************/

PROTECTED_MENU_HANDLER( bookNameCall )
{   T_MFW_HND     win         = mfwParent( mfw_header() );
    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;
    T_phbk          *Phbk       = data->phbk;

  callNumber( Phbk->current.entry[ Phbk->current.selectedName ].number );
    return MFW_EVENT_CONSUMED;
}



/*******************************************************************************

 $Function:     bookDeleteAll

 $Description:

    Delete name in phone book

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

*******************************************************************************/

PROTECTED_MENU_HANDLER( bookDeleteAll )
{
    T_MFW_HND     win         = mfwParent( mfw_header() );
    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;
    T_phbk          *Phbk       = data->phbk;

  if (phb_delete_book(Phbk->current.status.book)==MFW_PHB_OK)
  {
      MmiBookSetCurrentText(  TxtEntryDeleted);
    bookShowInformation( Phbk->win, MmiBookCurrentText(),NULL, NULL );
    bookPhonebookDestroy(Phbk->win);
  }
    return MFW_EVENT_CONSUMED;
}


/*******************************************************************************

 $Function:     bookNameSearch

 $Description:

    Search for name in phone book

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

*******************************************************************************/

PROTECTED_MENU_HANDLER( bookNameSearch )
{
    T_MFW_HND     win         = mfwParent( mfw_header() );
    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;

    data->phbk->current.KindOfSearch = SEARCH_BY_NAME;
  data->phbk->current.status.book = bookActiveBook(READ);
  data->phbk->search_win = bookSearchStart( data->phbk->win );

    return MFW_EVENT_CONSUMED;
}



/*******************************************************************************

 $Function:     bookNumberSearch

 $Description:

    Search for name in phone book, order the elements by the phone book number

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

*******************************************************************************/

PROTECTED_MENU_HANDLER( bookNumberSearch )
{
    T_MFW_HND     win         = mfwParent( mfw_header() );
    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;

    data->phbk->current.KindOfSearch = SEARCH_BY_NUMBER;
  data->phbk->current.status.book = bookActiveBook(READ);
  data->phbk->search_win = bookSearchStart( data->phbk->win );

    return MFW_EVENT_CONSUMED;
}


/*******************************************************************************

 $Function:     bookLocationSearch

 $Description:

    Search for number in phone book, using SIM location to order search
    window output

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

*******************************************************************************/

PROTECTED_MENU_HANDLER( bookLocationSearch )
{
    T_MFW_HND     win         = mfwParent( mfw_header() );
    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;

    data->phbk->current.KindOfSearch = SEARCH_BY_LOCATION;
  data->phbk->current.status.book = bookActiveBook(READ);
  data->phbk->search_win = bookSearchStart( data->phbk->win );

    return MFW_EVENT_CONSUMED;
}


/*******************************************************************************

 $Function:     bookNameDeleteAll

 $Description:

    Delete all names associated with a phone book

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

*******************************************************************************/

PROTECTED_MENU_HANDLER( bookNameDeleteAll )
{
return NULL;
}




/*******************************************************************************

 $Function:     bookNameMessage

 $Description:

    Send message to the number selected

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

*******************************************************************************/

PROTECTED_MENU_HANDLER( bookSendMessage )
{
    T_MFW_HND     win         = mfwParent( mfw_header() );
    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;
    T_phbk          *Phbk       = data->phbk;
    T_SmsUserData   SmsData;

    /* Copy the number and name information to the SMS buffer
    */
  /* API - 13-01-03 - 1409 - Minus the Phbk->current.missedCallsOffset to point at the correct number in the missed calls */ 
  memcpy( SmsData.NumberBuffer, (UBYTE *) Phbk->current.entry[ Phbk->current.selectedName - Phbk->current.missedCallsOffset ].number,
        sizeof( SmsData.NumberBuffer ) );
    /*MC SPR 1257, zero whole buffer for unicode*/
    memset(SmsData.TextBuffer, '\0', MAX_MSG_LEN_ARRAY);

    /* Create a dynamic menu window to perform the SMS sending
    */
  SmsSend_SEND_start( win, (void *) &SmsData );

  return MFW_EVENT_CONSUMED;

}


/*******************************************************************************

 $Function:     bookGetOwnNumber

 $Description:

    Get own number

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

*******************************************************************************/

PROTECTED_MENU_HANDLER( bookGetOwnNumber )
{
    T_MFW_HND     win         = mfwParent( mfw_header() );
    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;


    data->phbk->current.KindOfSearch = SEARCH_BY_NAME;
  data->phbk->current.status.book = PHB_UPN;
  data->phbk->search_win = bookSearchStart( data->phbk->win );

    return MFW_EVENT_CONSUMED;
}


/*******************************************************************************

 $Function:     bookSetOwnNumber

 $Description:

    Set own number

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

*******************************************************************************/

PROTECTED_MENU_HANDLER( bookSetOwnNumber )
{  T_MFW_HND      win         = mfwParent( mfw_header() );
    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;
    T_phbk          *Phbk       = data->phbk;

    /* Clear the input editor structures before we go any further
    */
    /*MC SPR 1257, replacing PHB_MAX_LEN with MAX_ALPHA_LEN for name strings*/
  memset( Phbk->phbk->edt_buf_name,   '\0', MAX_ALPHA_LEN );
    memset( Phbk->phbk->edt_buf_number, '\0', PHB_MAX_LEN );

    /* Indicate this is an additional entry being created
    */
    Phbk->UpdateAction = CREATE_ENTRY;
  data->phbk->current.status.book = PHB_UPN;
    /* Determine if we have room to add any new entries
    */
  bookGetCurrentStatus( &Phbk->phbk->current.status );
  if ( Phbk->phbk->current.status.avail_entries )
  {
        /* We are okay to input the number, use a worker routine
           from the input handler module to actually deal with this
        */
    Phbk->input_number_win = bookInputStartNumberEditor( win, Phbk->edt_buf_number );
  }
else
  {
        /* We have no room available to add the name, so check if
           we have filled the namespace or not
        */
        tIndexTagNames Tag = ( Phbk->phbk->current.status.used_entries )
            ? TxtMyNumberFull : TxtOperationNotAvail;    //SPR 31705 x0021308:RamG.
        bookShowInformation( win, Tag, NULL, NULL );
  }

    /* Always return event consumed
    */
    return MFW_EVENT_CONSUMED;
}


/*******************************************************************************

 $Function:     bookRepRedNameEnter

 $Description:

    Enter name associated with Reply-Redial number

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

*******************************************************************************/

PROTECTED_MENU_HANDLER( bookRepRedNameEnter )
{
    // Sep 22, 2004        REF: CRR 21392  xvilliva  
    // We use the variable "Menu", similar to bookNameEnter() to avoid a crash. 
    T_MFW_HND     win         = (T_MFW_HND)Menu;
    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;
    T_phbk          *Phbk       = data->phbk;
    char*     selected_number;

  selected_number = (char*)data->phbk->current.entry[data->phbk->current.selectedName].number;
	// Sep 22, 2004        REF: CRR 21392  xvilliva  
	// We get the exact book that is selected.
	data->phbk->current.status.book  = bookActiveBook(WRITE);
	
  Phbk->UpdateAction = CREATE_ENTRY;
  bookGetCurrentStatus( &Phbk->phbk->current.status );
  if ( Phbk->phbk->current.status.avail_entries )
  {
        /* We are okay to input the number, use a worker routine
           from the input handler module to actually deal with this
        */

    bookAddName(win,selected_number);
  }
  else
  {
        /* We have no room available to add the name, so check if
           we have filled the namespace or not
        */
        tIndexTagNames Tag = ( Phbk->phbk->current.status.used_entries )
            ? TxtPhbkFull : TxtOperationNotAvail;
        bookShowInformation( win, Tag, NULL, NULL );
  }
  free( selected_number);
  return 1;
}


/*******************************************************************************

 $Function:     bookRepRedDelete

 $Description:

    Delete name associated with Reply-Redial Number

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

*******************************************************************************/

PROTECTED_MENU_HANDLER( bookRepRedDelete )
{
    T_MFW_HND     win         = mfwParent( mfw_header() );
    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;
    T_phbk          *Phbk       = data->phbk;

  deleteFromFile(Phbk,Phbk->current.status.book);
  bookShowInformation( Phbk->win, MmiBookCurrentText(),NULL, NULL );
  bookMenuDestroy(Phbk->menu_call_options_win);
  if(Phbk->current.status.used_entries > 0)
	  SEND_EVENT(Phbk->calls_list_win, SEARCH_SCROLL_UP, 0, 0 );
  SEND_EVENT(Phbk->calls_list_win, CALLS_LIST_INIT, 0, (void*)Phbk->current.status.book );
  return 1;
}


/*******************************************************************************

 $Function:     bookCallListDetails

 $Description:

    Retrieve details for call list

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

*******************************************************************************/

PROTECTED_MENU_HANDLER( bookCallListDetails )
{
    T_MFW_HND     win         = mfwParent( mfw_header() );
    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;
    T_phbk          *Phbk       = data->phbk;

  bookCallDetailsStart( Phbk->win);
  return 1;

}



/*******************************************************************************

 $Function:     bookServiceNumbers

 $Description:

    Get service numbers

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

*******************************************************************************/

PROTECTED_MENU_HANDLER( bookServiceNumbers )
{
    T_MFW_HND     win         = mfwParent( mfw_header() );
    T_MFW_WIN       *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;

    data->phbk->current.KindOfSearch = SEARCH_BY_NAME;
  data->phbk->current.status.book = PHB_SDN;
  data->phbk->search_win = bookSearchStart( data->phbk->win );

    return MFW_EVENT_CONSUMED;
}


/*******************************************************************************

 $Function:     bookMemoryStatus

 $Description:

    Show the status of the phone book memory.

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

*******************************************************************************/

PROTECTED_MENU_HANDLER( bookMemoryStatus )
{
    /* This performs the memory view functions, and returns MFW_EVENT_CONSUMED
       in all cases.
    */
  bookMemoryView();
    return MFW_EVENT_CONSUMED;
}


/*******************************************************************************

 $Function:     bookFDNActivate

 $Description:

   The FDN Activate routine is simply a wrapper for the real
   FDN Activate handler which resides in mmiPins.c

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

*******************************************************************************/

PROTECTED_MENU_HANDLER( bookFDNActivate )
{
  return fdnActivate( Menu, Item );
}


/*******************************************************************************

 $Function:     bookFDNDeactivate

 $Description:

   The FDN Deactivate routine is simply a wrapper for the real
   FDN Deactivate handler which resides in mmiPins.c

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

*******************************************************************************/

PROTECTED_MENU_HANDLER( bookFDNDeactivate )
{
  return fdnDeactivate( Menu, Item );
}

/*******************************************************************************

 $Function:     bookEnterLDN

 $Description:

    Enters de LDN List

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

*******************************************************************************/

PROTECTED_MENU_HANDLER( bookEnterLDN )
{
    T_MFW_HND     win         = mfwParent( mfw_header() );

  bookPhonebookStart(win,PhbkRedialListNormal);
    return MFW_EVENT_CONSUMED;
}
/*******************************************************************************

 $Function:     bookEnterLRN

 $Description:

    Enters de LRN List

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

*******************************************************************************/

PROTECTED_MENU_HANDLER( bookEnterLRN )
{
    T_MFW_HND     win         = mfwParent( mfw_header() );

  bookPhonebookStart(win,PhbkReplyListNormal);
    return MFW_EVENT_CONSUMED;
}

/*******************************************************************************

 $Function:     bookEnterLMN

 $Description:

    Enters de LMN List

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

*******************************************************************************/

PROTECTED_MENU_HANDLER( bookEnterLMN )
{
    T_MFW_HND     win         = mfwParent( mfw_header() );

  /* Issue Number : MMI-FIX-1216 on 07/04/04 by Nishikant Kulkarni and Ajith K.P
  Bug : missed call message is displayed after deleting all missed calls from the list
  Solution:  idle_data.missedcalls flag was not updated if the user ckecks/deletes the missed call list
              We rectified the same.*/

  idle_data.missedCalls = 0;	

  bookPhonebookStart(win,PhbkMissedCallsListNormal);
    return MFW_EVENT_CONSUMED;
}

/* SPR#1112 - Internal phonebook menu options*/
#ifdef INT_PHONEBOOK

/*******************************************************************************

 $Function:     bookSelectBook

 $Description:  Open the select book menu, preselecting the appropriate option

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

*******************************************************************************/

PROTECTED_MENU_HANDLER( bookSelectBook )
{
    T_MFW_HND     win         = mfwParent( mfw_header() );
	T_MFW_WIN     *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;
    T_phbk          *Phbk       = data->phbk;
	T_MFW_HND		menu_win;
	UBYTE			selectedBook;
	
	TRACE_FUNCTION("bookSelectBook");

	if (bookGetBookAvailable())
	{
		selectedBook = (UBYTE)bookGetBookSelected();
		menu_win = bookMenuStart(Phbk->win, SelectBookAttributes(), 0);
		SEND_EVENT(menu_win, DEFAULT_OPTION, NULL, (void *)&selectedBook); // Add our own callback
	}
	else
	{
		bookShowInformation( Phbk->win, TxtNotAvailable, NULL, NULL);
	}
	
    return MFW_EVENT_CONSUMED;
}


/*******************************************************************************

 $Function:     bookSelectBookSIM

 $Description:  Select the SIM phone book

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

*******************************************************************************/

PROTECTED_MENU_HANDLER( bookSelectBookSIM )
{
    T_MFW_HND     win         = mfwParent( mfw_header() );
	T_MFW_WIN     *win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard   *data       = (tBookStandard *) win_data->user;
    T_phbk          *Phbk       = data->phbk;

	if (bookGetBookAvailable())
	{
		bookSetBookSelected(FALSE);
		bookShowInfoScreen( Phbk->win, TxtPleaseWait, NULL, (T_VOID_FUNC)bookChangePB, (USHORT)bookGetBookSelected(), 100);
	}
	else
		bookShowInfoScreen( Phbk->win, TxtPhonebook, TxtChanged, NULL, NULL, 3000);
	
    return MFW_EVENT_CONSUMED;
}


/*******************************************************************************

 $Function:     bookSelectBookSIM

 $Description:  Select the SIM phone book

 $Returns:    Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

*******************************************************************************/

PROTECTED_MENU_HANDLER( bookSelectBookPhone )
{
    T_MFW_HND		win			= mfwParent( mfw_header() );
	T_MFW_WIN		*win_data	= ( (T_MFW_HDR *) win )->data;
    tBookStandard	*data		= (tBookStandard *) win_data->user;
    T_phbk          *Phbk		= data->phbk;

	if (bookGetBookAvailable())
	{
		bookSetBookSelected(TRUE);
		bookShowInfoScreen( Phbk->win, TxtPleaseWait, NULL, (T_VOID_FUNC)bookChangePB, (USHORT)bookGetBookSelected(), 100);
	}
	else
	{
		bookShowInformation( Phbk->win, TxtNotAvailable,NULL, NULL );
	}
	
    return MFW_EVENT_CONSUMED;
}

/*******************************************************************************

 $Function:     bookCopyEntry

 $Description:  Copy a single entry from/to internal memory

 $Returns:     Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

*******************************************************************************/

PROTECTED_MENU_HANDLER( bookCopyEntry )
{
	T_MFW_HND			win         = mfwParent( mfw_header() );
	T_MFW_WIN			*win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard		*data       = (tBookStandard *) win_data->user;
    T_phbk				*Phbk       = data->phbk;
	
  	TRACE_FUNCTION( "bookCopyEntry()" );

	if (bookGetBookAvailable())
	{
	    /* Show Please Wait dialog briefly, then call copy function
	    */
	    bookShowInfoScreen( Phbk->win, TxtPleaseWait, NULL, (T_VOID_FUNC)bookCopySingle, (USHORT)FALSE, 100);
	}
	else
	{
		bookShowInformation( Phbk->win, TxtNotAvailable, NULL, NULL);
	}
	
    return MFW_EVENT_CONSUMED;
}

/*******************************************************************************

 $Function:     bookCopyAll

 $Description:  Copy all entries from/to internal memory

 $Returns:     Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

*******************************************************************************/

PROTECTED_MENU_HANDLER( bookCopyAll )
{
	T_MFW_HND			win         = mfwParent( mfw_header() );
	T_MFW_WIN			*win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard		*data       = (tBookStandard *) win_data->user;
    T_phbk				*Phbk       = data->phbk;
	
  	TRACE_FUNCTION( "bookCopyAll()" );

	if (bookGetBookAvailable())
	{
	    /* Copy
	    */
	    bookCopyMultiple(Phbk->win, FALSE, 0);
	}
	else
	{
		bookShowInformation( Phbk->win, TxtNotAvailable, NULL, NULL);
	}
	
    return MFW_EVENT_CONSUMED;
}

/*******************************************************************************

 $Function:     bookMoveEntry

 $Description:  Move a single entry from/to internal memory

 $Returns:     Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

*******************************************************************************/

PROTECTED_MENU_HANDLER( bookMoveEntry )
{
  	T_MFW_HND			win         = mfwParent( mfw_header() );
	T_MFW_WIN			*win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard		*data       = (tBookStandard *) win_data->user;
    T_phbk				*Phbk       = data->phbk;
	
  	TRACE_FUNCTION( "bookMoveEntry()" );

	if (bookGetBookAvailable())
	{
	    /* Show Please Wait dialog briefly, then call move function
	    */
	    bookShowInfoScreen( Phbk->win, TxtPleaseWait, NULL, (T_VOID_FUNC)bookCopySingle, (USHORT)TRUE, 100);
	}
	else
	{
		bookShowInformation( Phbk->win, TxtNotAvailable, NULL, NULL);
	}
	
    return MFW_EVENT_CONSUMED;
}

/*******************************************************************************

 $Function:     bookMoveAll

 $Description:  Move all entries from/to internal memory

 $Returns:     Refer Menu Handlers Definition Block Above

 $Arguments:  Refer Menu Handlers Definition Block Above

*******************************************************************************/

PROTECTED_MENU_HANDLER( bookMoveAll )
{
	T_MFW_HND			win         = mfwParent( mfw_header() );
	T_MFW_WIN			*win_data   = ( (T_MFW_HDR *) win )->data;
    tBookStandard		*data       = (tBookStandard *) win_data->user;
    T_phbk				*Phbk       = data->phbk;
	
  	TRACE_FUNCTION( "bookMoveAll()" );

	if (bookGetBookAvailable())
	{
	    /* Show Please Wait dialog briefly, then call copy function
	    */
	    bookCopyMultiple(Phbk->win, TRUE, 0);
	}
	else
	{
		bookShowInformation( Phbk->win, TxtNotAvailable, NULL, NULL);
	}
	
    return MFW_EVENT_CONSUMED;
}

#endif

PIN2RQD_MENU_HANDLER( CphsAlsLock )
{
	return cphs_lock_als( Menu, Item );
}

PIN2RQD_MENU_HANDLER( CphsAlsUnlock )
{
	return cphs_unlock_als( Menu, Item );
}
/*******************************************************************************

                                End of File

*******************************************************************************/