view src/ui3/bmi/mmiFileManager.c @ 659:4c07bb438030

doc/Compiling: luna target added
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 08 May 2020 03:03:03 +0000
parents e8ddbb0837ed
children
line wrap: on
line source


#ifdef FF_MMI_FILEMANAGER

/* =========================================================
*             Texas Instruments OMAP(TM) Platform Software
*  (c) Copyright Texas Instruments, Incorporated.  All Rights Reserved.
*
*  Use of this software is controlled by the terms and conditions found
*  in the license agreement under which this software has been supplied.
* ========================================================== */

/*==========================================================
* @file mmi_FileManager.c
*
* This provides the functionality of File Manager Applications.
* It supports file/folder related operations on FFS and MMC
*
* @path  \bmi\condat\ms\src\bmi
*
* @rev  00.01
*/
/* ========================================================== */
/*===========================================================
*!
*! Revision History
*! ===================================

	Nov 06, 2007 DRT: OMAPS00151698 x0056422
    Description: BMI requirments needed to support Bluetooth AVRCP in Locosto 5.x
    Solution : In mfw_audResume, Pause, Stop functions, if BT is connected, send a callback. 
               In the case of audio play, handle the callback of START_IND from audio task and 
               post a callback to BT if expected. 

	August 03, 2007 DRT:OMAPS00138886 x0080701 (Bharat)
	Description:  COMBO: Board reboots on receiving call during file viewer
	Issue:          When an incoming call / SMS arrives, a winShow of Idle's
	                   window is done (to update the Icons etc..) which causes all windows
	                   chained to Idle's window to be updated. In this process, even the
	                   Image List and Image Viewer Windows' Updates happen, wherein the existing
	                   MSL Pipeline is used to draw the Viewer (ThumbNail / QCIF). During this,
	                   many of the global flags to maintain the status, command etc.. seem to get
	                   reinitialized and corrupted and this lead to a weird memory corruption and hence
	                   a crash.
	Solution:      A Status Indicator is maintained each for Image List and Image Viewer cases.
	                   This shall be updated / set whenever the window gets suspended. In such cases,
	                   the MSL Viewer Drawing shall not be done even when a WinVisible is received
	                   and this flag shall be reset during the window create/destroy/resume.
	                   Essentially, the Image List window / Image Viewer window shall call
	                   MSL_Viewer_View ONLY when it is in the foreground and shall not do the same


    	Jul 10, 2007 DRT:OMAPS00138065 x0062174(Nimitha)
    	Description: Stop button disappears while we play an audio file when progressbar is on and  the only way to stop the file is to press back.
    	STOP button is appearing for a moment if progress bar is ON.
    	Solution: STOP button should not appear in progressbar window. STOP button is displayed at proper place.
    	When progressbar is on, to stop the audio play we have to press BACK button, that is by design.

    	Jul 04, 2007 DRT:OMAPS00135749  x0062174(Nimitha)
    	Description: Once the audio file has finished automatically play button has to be pressed twice,
    	in order to be played again.
    	Solution : a) A Global variable aud_state_status is added to maintain the status of the player once the user presses Back button 
    	                  during the file playing and coming back to File Management window. Two function  mmi_set_aud_state_status and 
    	                  mmi_get_aud_state_status is added to set/get the status of the audio player.
    	               b) A condition is added to check the status of the audio player when user presses the joystick, 
    	                   audio state is made to FM_AUD_PLAY if the audio is still playing. 
    	               c) While drawing File Management window a condition is added to check the status of the audio player and proper PLAY/STOP key is displayed
    	                  according to the status of the player. 
    
	June 11, 2007 DRT:OMAPS00132505 x0061088
	Description:  Impossible to see an 303kb image
	Solution: Now  thumb generation error given by MSL  synchronously is handled MMI.  
      May28,07 DRT:OMAPS00132459  x0061560(sateeshg)
      Description: while midi is playing stop button makes restart the playing
      Solution:A flag been added when user plays the file and this flag is checked after coming back from current
      directory to pause the play using joystick.

	April 27, 2007 DRT:OMAPS00128836 x0073106
	Description: Unexpected behavior when copying images with the same names  from a memory to another.
	Solution:In function mmi_fm_copy_start() added FM_COPY_NONE flag 
	and in function mmi_copy_End() added  FM_COPY_NONE in two conditions.

	Apr 10, 2007 DRT: OMAPS00125325 x0039928
	Description: Hang up key doesn't work in File Manager audio and image lists
	Solution: Hang up key is now mapped to back operation in the list.
	
	Apr 05, 2007 DRT: OMAPS00124859 x0039928
	Description: MM: Imelody can not be moved or copied
	Solution: Copy-Move is displayed for all audio files
	
	Apr 06, 2007 DRT: OMAPS00124874 x0039928
	Description: MM: Renaming process of an Imy file is incorrect
	Solution: Seperate enum values for different audio files is added.
	
      Apr 06, 2007    DRT: OMAPS00124877  x0039928
      Description: MM: Voice limit Options doesn't work
      Solution: voice limit value is taken from the global variable set by menu options.
    
	Mar 30, 2007 DRT: OMAPS00122768 x0039928
	Description: MM: The board is blocked after having moved a file between NOR and T-FLASH
	Solution: Image viewer is deinitialized when there are no image files in image viewer.
	
	Mar 30, 2007 DRT: OMAPS00122772 x0039928
	Description: MM: Image viewer in Filemanagement is blocked when there is just a directory
	Solution: An invalid condition is removed which is checked aginst press of back key in FMA 
	
	Mar 28, 2007   ER: OMAPS00106188  x0039928
	Description: Align Midi application menu choices and audio Player menu choices 
	
	Mar 29, 2007 DRT: OMAPS00122677 x0039928
	Description: MM: By default, Storage devices in Camera Application is not set, taking a snapshot is impossible
	Solution: Root directories are created on entering camera application.
	
	Mar 15, 2007 DRT: OMAPS00120225 x0039928
	Description: File Manager:Copy, move between NOR-MS,T-FLASH,NAND failed
	Solution: A condition is added to check the source and destination device are same.
   			
	Mar 15, 2007 DRT: OMAPS00120187 x0039928
	Description: MMI shows error if back button is pressed while playing audio files with N5.23 Pre release
	Solution: mfw_fm_audStop is commented in func mmi_fm_aud_list_cb for event
	LISTS_REASON_DRAWCOMPLETE which was being called twice in the scenario.


*! 10-Apr-2006 mf:  Modified x0020906.  Change required per SRxxxx
*! to provide File Manager Functionality.
*!
*!
*! 17-Jan-2006 mf: Revisions appear in reverse chronological order;
*! that is, newest first.  The date format is dd-Mon-yyyy.

	
* =========================================================== */
/******************************************************************************  
                                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_mfw.h"
#include "mfw_win.h"
#include "mfw_icn.h"	/* included for mfw_mnu.h */
#include "mfw_mnu.h"
#include "mfw_tim.h"
#include "mfw_kbd.h"
#include "mfw_sat.h" /* included for MmiDummy.h, included for MmiMenu.h */
#include "mfw_camapp.h"
#include "mfw_fm.h"
#include "MmiBlkLangDB.h"
#include "mmiColours.h"
#include "MmiDialogs.h"
#include "MmiDummy.h" /* included for MmiMenu.h */
#include "MmiLists.h"
#include "MmiMenu.h"
#include "MmiSoftKeys.h"
#include "AUIEditor.h"
#include "MmiMain.h"
#include "Mmiicons.h"
#include "MmiWindow.h"
#include "MmiCall.h"

#include "mfw_ffs.h"

#include "mmiFileManager.h" 
#include "mmiBookShared.h"



/* OMAPS00151698, x0056422 */
#ifdef FF_MMI_A2DP_AVRCP
#include "mfw_bt_api.h"
#include "mfw_bt_private.h"
#endif



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

                              Defines

*******************************************************************************/
T_MMI_FM_STRUCT *fm_data;
GLOBAL BOOL mslPrimHandler (USHORT opc, void * data);
extern  MfwHnd winIconsLists;

const unsigned char file[]={
0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,
0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,
0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,
0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,
0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,
0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,
0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,
0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,
0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,
0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,
0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,
0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,
0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,
0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,
0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,
0x25,0x25,0x25,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,
0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,
0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,
0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,
0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,
0x25,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,
0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,
0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,
};
const unsigned char folder[]=
{
0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,
0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,
0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,
0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,
0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,
0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,
0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,
0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,
0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,
0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,
0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,
0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,
0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,
0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,
0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,
0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,
0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,
0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,
0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,
0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,
0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,
0x25,0x25,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,
0x25,0x25,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,
0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,
0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,
0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,
0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,
0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,
};	
const unsigned char audiofile[]=
{
0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,
0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,
0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,
0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,
0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,
0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,
0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,
0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,
0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,
0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,
0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,
0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0xFF,
0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,
0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,
0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,
0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0x00,
0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,
0x25,0x25,0x25,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,
0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x00,0x00,0x00,0x25,
0x25,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x00,0x00,0x00,0x25,0x25,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x00,0x00,
0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x00,0x00,0x25,0x25,0x00,0x00,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x00,0x00,0x25,0x00,0x00,
0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x00,0x00,0x00,
0x25,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x00,0x00,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,
0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x00,0x00,0x00,0x00,0x25,
};
MfwIcnAttr fmIconFile = 
{
    { 0, 0,48,48 }, 1, COLOUR_ICON_XX, ICON_TYPE_256_COL, (char *) file
};
MfwIcnAttr fmIconFolder  =  
{
    { 0, 0,48,48 }, 1, COLOUR_ICON_XX, ICON_TYPE_256_COL, (char *) folder
};
MfwIcnAttr fmIconAudioFile = 
{
    { 0, 0,48,48 }, 1, COLOUR_ICON_XX, ICON_TYPE_256_COL, (char *) audiofile
};

#define PB_OFF 0
#define PB_ON 1
BOOL mmi_progress_bar = PB_ON;
//Jun 26, 2007 DRT:OMAPS00135749  x0062174(Nimitha)
/* //May28,07 DRT:OMAPS00132459  x0061560(sateeshg)
BOOL aud_state_back=0;*/

//Jun 25,2007 DRT:OMAPS00135749  x0062174(Nimitha)
int aud_state_status = 1;

//Daisy tang added for Real Resume feature 20071107
//start
BOOL IsMP3Playing = FALSE;
extern BOOL IsRealPaused;
//end

extern UBYTE aud_state;
extern T_MFW_AUD_PARA para_aud;
extern T_MFW_HND pb_win;


/* OMAPS00151698, x0056422 */
#ifdef FF_MMI_A2DP_AVRCP
extern BMI_BT_STRUCTTYPE tGlobalBmiBtStruct;
#endif //FF_MMI_A2DP_AVRCP





/* August 03, 2007 DRT:OMAPS00138886 x0080701 (Bharat) -- Start --> */

static unsigned char ucImgList_Sts 		= 0;
static unsigned char ucImgViewer_Sts 	= 0;

#define MMI_IMGLIST_STS					ucImgList_Sts
#define MMI_IMGVIEWER_STS				ucImgViewer_Sts

#define MMI_IMGLIST_STS_NORMAL			0x00
#define MMI_IMGLIST_STS_SUSPENDED		0x01

#define MMI_IMGVIEWER_STS_NORMAL		0x00
#define MMI_IMGVIEWER_STS_SUSPENDED		0x01

#define MMI_IMGLIST_CHANGE_STS(a)		( ucImgList_Sts = a )

#define MMI_IMGVIEWER_CHANGE_STS(a)		( ucImgViewer_Sts = a )

/* August 03, 2007 DRT:OMAPS00138886 x0080701 (Bharat) -- End -->  */
/*******************************************************************************

                                Local prototypes

*******************************************************************************/
static T_MFW_HND mmi_fm_start( T_MFW_HND parent_win);
static T_MFW_HND mmi_fm_create (T_MFW_HND parent_win);
static int mmi_fm_app_root_cb(T_MFW_EVENT evnt, void *para);
int mmi_fm_win_cb (MfwEvt e, MfwWin *w);
void mmi_fm_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter);
static void mmi_fm_destroy(MfwHnd own_window);

void mmi_fm_drives_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter);
void mmi_fm_root_folders_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter);

void mmi_fm_list_create( T_MFW_HND win);
static void mmi_fm_list_destroy(MfwHnd own_window);

void mmi_fm_imgThmbGen_start(void);
void mmi_fm_imgThmbGen_resume(void);
void mmi_fm_imgThmbGen(void);
void mmi_fm_imgThmbGen_identifyFile(void);

void mmi_fm_imgThmbDraw_start(void);
void mmi_fm_imgThmbDraw_resume(void)	;
void mmi_fm_imgThmbDraw_identifyFile(void);
void mmi_fm_imgThmbDraw(void);

T_MFW_HND mmi_fm_img_list_create(T_MFW_HND win);
void mmi_fm_img_list_cb(T_MFW_HND * Parent, ListMenuData * ListData);
BOOL mmi_fm_img_validate(void);
void mmi_fm_imgDraw(void);

T_MFW_HND mmi_fm_aud_list_create(T_MFW_HND win);
void mmi_fm_aud_validate(void);
void mmi_fm_aud_list_cb(T_MFW_HND * Parent, ListMenuData * ListData);

void mmi_fm_view_start(void);
T_MFW_HND mmi_fm_view_create(void);
int mmi_fm_view_win_cb (MfwEvt e, MfwWin *w);
void mmi_fm_view_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter);
static int mmi_fm_view_kbd_cb (MfwEvt e, MfwKbd *k);
void mmi_fm_view_destroy(T_MMI_FM_IMGDRAW_STRUCT  * imgDraw_data);

T_MFW_HND mmi_fm_rename_editor_create(T_MFW_HND parent_win);
static void mmi_fm_rename_editor_exec_cb(T_MFW_HND win, USHORT identifier, SHORT reason);
void mmi_fm_rename_cb (T_MFW_HND win, USHORT identifier, SHORT reason);
void mmi_fm_rename_editor_destroy(void);

T_MFW_HND mmi_fm_newdir_editor_create(T_MFW_HND parent_win);
static void mmi_fm_newdir_editor_exec_cb(T_MFW_HND win, USHORT identifier, SHORT reason);
void mmi_fm_newdir_cb (T_MFW_HND win, USHORT identifier, SHORT reason);
void mmi_fm_newdir_editor_destroy(void);

void mmi_fm_remove_confirm_cb (T_MFW_HND win, USHORT identifier, SHORT reason);
void mmi_fm_remove_cb (T_MFW_HND win, USHORT identifier, SHORT reason);

T_MFW_HND mmi_fm_properties_editor_create(T_MFW_HND parent_win);
static void mmi_fm_properties_editor_exec_cb(T_MFW_HND win, USHORT identifier, SHORT reason);
void mmi_fm_properties_editor_destroy(void);
void mmi_fm_format_confirm_cb (T_MFW_HND win, USHORT identifier, SHORT reason);

T_MFW_HND mmi_fm_memStat_editor_create(T_MFW_HND parent_win);
static void mmi_fm_memStat_editor_exec_cb(T_MFW_HND win, USHORT identifier, SHORT reason);
void mmi_fm_memStat_editor_destroy(void);

void mmi_fm_nofile_cb (T_MFW_HND win, USHORT identifier, SHORT reason);
void mmi_fm_open (void);
void mmi_fm_goback(void);
T_MFW_HND mmi_fm_app_show_info(T_MFW_HND parent_win, int str1, int str2,int skey1, int skey2, T_VOID_FUNC callback,int timer, T_MFW_EVENT keyEvents);
void mmi_fm_get_filename( char * filename);
char * mmi_fm_get_ext( char * filename);
void mmi_fm_dest_root_folders_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter);
static T_MFW_HND mmi_fm_dest_start( T_MFW_HND parent_win);
static T_MFW_HND mmi_fm_dest_create (T_MFW_HND parent_win);
int mmi_fm_dest_win_cb (MfwEvt e, MfwWin *w);
void mmi_fm_dest_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter);
static void mmi_fm_dest_destroy(MfwHnd own_window);
T_MFW_HND mmi_fm_dest_list_create( T_MFW_HND win);
void mmi_fm_dest_list_cb(T_MFW_HND * Parent, ListMenuData * ListData);
void mmi_fm_destnofile_cb (T_MFW_HND win, USHORT identifier, SHORT reason);

static void mmi_fm_dest_list_destroy(MfwHnd own_window);
void mmi_fm_copy_create(char * dest_folder);
T_MFW_HND mmi_fm_copy_dialog_create(T_MFW_HND parent_win);
static int mmi_fm_copy_dialog_kbd_cb (MfwEvt e, MfwKbd *k);
int mmi_fm_copy_dialog_win_cb (MfwEvt e, MfwWin *w);
void mmi_fm_copy_dialog_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter);
void mmi_fm_copy_dialog_destroy();
void mmi_fm_copy_progress_cb (T_MFW_HND win, USHORT identifier, SHORT reason);
void mmi_fm_copy_start(void);
void mmi_fm_copy_end(void);
int mmi_fm_copy_timer_cb ( MfwEvt e, MfwTim *m );
void mmi_fm_copy_destroy(T_FM_COPY_STATE status);
void mmi_fm_displayDestDrive_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter);
void mmi_fm_copy_end_cb (T_MFW_HND win, USHORT identifier, SHORT reason);
void mmi_fm_displayDestDrive(void);
void mmi_fm_destgoback(void);
void mmi_fm_set_mmi_plane_to_front(void);
/* Jun 26, 200 07, 2007 DRT: OMAPS00135749 x0062174 */
GLOBAL void mmi_set_aud_state_status( T_FM_AUD_STATE status);
T_FM_AUD_STATE mmi_get_aud_state_status( );
/* January 29, 2008 DRT:OMAPS00156759 (x0082844) For Unicode Support*/
static void unicode_to_char_array(T_WCHAR *inp, char *out);

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

 $Function:  mmi_set_aud_state_status

 $Description:	 set audio state status

 $Returns:    none.

 $Arguments:

*******************************************************************************/
//Jun 26, 2007 DRT:OMAPS00135749  x0062174(Nimitha)

GLOBAL void mmi_set_aud_state_status( T_FM_AUD_STATE status)
{
	TRACE_FUNCTION("mmi_set_aud_status()");

	aud_state_status = status;	
	TRACE_EVENT_P1("aud_state in set_aud_status %d", aud_state_status);
	
}

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

 $Function:  mmi_get_aud_state_status

 $Description:	  get audio state status

 $Returns:    none.

 $Arguments:

*******************************************************************************/
//Jun 26, 2007 DRT:OMAPS00135749  x0062174(Nimitha)

T_FM_AUD_STATE mmi_get_aud_state_status( )
{
	TRACE_FUNCTION("mmi_get_aud_status()");
	TRACE_EVENT_P1("aud_state in get_aud_status %d", aud_state_status);

	return aud_state_status;	
	
}



/*******************************************************************************
 $Function:    		mmi_fm_app_show_info

 $Description:		information Dialog function

 $Returns:		Created Window Pointer

 $Arguments:		parent_win:	 	-Parent window 
				str1,  str2	-String IDs
				skey1, skey2	-Softkey lables
				callback	 	-Callback Function 
				timer		-Timeout value
				keyEvents	-Key events to be handled
*******************************************************************************/
T_MFW_HND mmi_fm_app_show_info(T_MFW_HND parent_win, int str1, int str2,int skey1, int skey2, T_VOID_FUNC callback,int timer, T_MFW_EVENT keyEvents)
{
	T_DISPLAY_DATA display_info;
	T_MFW_HND win;
	
	TRACE_FUNCTION ("mmi_fm_app_show_info()");
	
	dlg_initDisplayData_TextId( &display_info, skey1, skey2, str1, str2, COLOUR_STATUS);
	dlg_initDisplayData_events( &display_info, callback, timer, keyEvents);
	win = info_dialog(parent_win, &display_info);
	return win;
}


/*******************************************************************************
 $Function:    		mmi_fm_drives

 $Description:		Display the drive options open , memory status, format 

 $Returns:		Execution status

 $Arguments:		mnu		-Pointer to current menu
 				item 	-Pointer to current menu item
*******************************************************************************/
GLOBAL int  mmi_fm_drives(MfwMnu* mnu, MfwMnuItem* item)
{
	T_MFW_HND       parent_win;
	T_MFW_HND       win; 

	TRACE_FUNCTION("mmi_fm_drives" );

	fm_data = (T_MMI_FM_STRUCT *)mfwAlloc(sizeof(T_MMI_FM_STRUCT));
	parent_win  = mfwParent(mfw_header());
	fm_data->source = (T_FM_DEVICE_TYPE)mnu->lCursor[mnu->level];
	TRACE_EVENT_P1("Selected Drive  %d",fm_data->source);
	/* Apr 06, 2007    DRT: OMAPS00124877  x0039928 */
	/* Fix: Default settings for audio player */
	mfw_player_init();
	win=(T_MFW_HND)bookMenuStart( parent_win, FMDrivesOptionsListAttributes(), 0);
	SEND_EVENT(win,ADD_CALLBACK,NULL,(void *)mmi_fm_drives_cb);

	return MFW_EVENT_CONSUMED;
}

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

 $Function:    		mmi_fm_drives_cb

 $Description:		Callback function for the drive option window 

 $Returns:		Execution status

 $Arguments:		win			-current window
				event		-window event Id
				value		-unique Id
				parameter	-optional data.
*******************************************************************************/
void mmi_fm_drives_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
	TRACE_FUNCTION("mmi_fm_drives_cb");
	
	mfwFree((U8 *)fm_data, sizeof (T_MMI_FM_STRUCT));
	fm_data = NULL;	
}

/*******************************************************************************
 $Function:    		mmi_fm_root_folders

 $Description:		Display the root Image, Audio Directories

 $Returns:		Execution status

 $Arguments:		mnu		-Pointer to current menu
 				item 	-Pointer to current menu item
*******************************************************************************/
GLOBAL int  mmi_fm_root_folders(MfwMnu* mnu, MfwMnuItem* item)
{
	T_MFW_HND       parent_win;
	T_MFW_HND       win;    
	
	TRACE_FUNCTION("mmi_fm_root_folders" );
	
	parent_win  = mfwParent(mfw_header());
	fm_data->cur_dir = (T_FM_CURDIR *)mfwAlloc(sizeof(T_FM_CURDIR));
	win = (T_MFW_HND)bookMenuStart( parent_win, FMRootFolderAttributes(), 0);
	SEND_EVENT(win,ADD_CALLBACK,NULL,(void *)mmi_fm_root_folders_cb);
	return MFW_EVENT_CONSUMED;
}

/*******************************************************************************
 $Function:    		mmi_fm_root_event_cb

 $Description:		Callback function for the root Image, Audio Directory window

 $Returns:		None

 $Arguments:		win			-current window
				event		-window event Id
				value		-unique Id
				parameter	-optional data.
*******************************************************************************/
void mmi_fm_root_folders_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
	TRACE_FUNCTION("mmi_fm_root_event_cb");
	
	mfwFree((U8 *)fm_data->cur_dir , sizeof (T_FM_CURDIR));
	fm_data->cur_dir = NULL;
}
/*******************************************************************************
 $Function:    		mmi_fm_display

 $Description:		Displays the files and folders given path

 $Returns:		Execution status

 $Arguments:		mnu		-Pointer to current menu
 				item 	-Pointer to current menu item
*******************************************************************************/
GLOBAL int  mmi_fm_display(MfwMnu* mnu, MfwMnuItem* item)
{
	T_FM_CURDIR *cur_dir = fm_data->cur_dir;
	T_MFW_HND parent_win = mfwParent(mfw_header());
	
	TRACE_FUNCTION("mmi_fm_display");
	//TRACE_EVENT_P1("cur_dir->dirinfo.aud.state11 %d",cur_dir->dirinfo.aud.state);

	cur_dir->depth = 0;
	cur_dir->dir_type = OBJECT_TYPE_NONE;
	cur_dir->currentIndex = 0;
	cur_dir->num_objs = 0;
	cur_dir->startIndex = 0;
	switch(mnu->lCursor[mnu->level])
	{
		case 0:
			fm_data->app = FM_IMAGE;
			cur_dir->dir_type=OBJECT_TYPE_IMAGE_FOLDER;
			break;
		case 1:
			fm_data->app = FM_AUDIO;
			cur_dir->dir_type=OBJECT_TYPE_AUDIO_FOLDER;
			break;
	}
	//Based on the selected drive, load the root image, audio directory names
	switch(fm_data->source)
	{
		case FM_NOR_FLASH:
			if(cur_dir->dir_type==OBJECT_TYPE_IMAGE_FOLDER)
			{
				strcpy( cur_dir->dir_path,  NORDIR);
				strcpy( cur_dir->dir_name,  NORDIR_IMG);
			}
			else if(cur_dir->dir_type==OBJECT_TYPE_AUDIO_FOLDER)
			{
				strcpy( cur_dir->dir_path,  NORDIR);
				strcpy( cur_dir->dir_name,  NORDIR_AUD);
			}
			break;
		case FM_NORMS_FLASH:
			if(cur_dir->dir_type==OBJECT_TYPE_IMAGE_FOLDER)
			{
				strcpy( cur_dir->dir_path,  NORMSDIR);
				strcpy( cur_dir->dir_name,  NORMSDIR_IMG);
			}
			else if(cur_dir->dir_type==OBJECT_TYPE_AUDIO_FOLDER)
			{
				strcpy( cur_dir->dir_path,  NORMSDIR);
				strcpy( cur_dir->dir_name,  NORMSDIR_AUD);
			}
			break;			
		case FM_NAND_FLASH:
			if(cur_dir->dir_type==OBJECT_TYPE_IMAGE_FOLDER)
			{
				strcpy( cur_dir->dir_path,  NANDDIR);
				strcpy( cur_dir->dir_name,  NANDDIR_IMG);
			}
			else if(cur_dir->dir_type==OBJECT_TYPE_AUDIO_FOLDER)
			{
				strcpy( cur_dir->dir_path,  NANDDIR);
				strcpy( cur_dir->dir_name,  NANDDIR_AUD);
			}
			break;
		case FM_T_FLASH:
			if(cur_dir->dir_type==OBJECT_TYPE_IMAGE_FOLDER)
			{
				strcpy( cur_dir->dir_path,  TFLASHDIR);
				strcpy( cur_dir->dir_name,  TFLASHDIR_IMG);
			}
			else if(cur_dir->dir_type==OBJECT_TYPE_AUDIO_FOLDER)
			{
				strcpy( cur_dir->dir_path,  TFLASHDIR);
				strcpy( cur_dir->dir_name,  TFLASHDIR_AUD);
			}
			break;
	}	
	TRACE_EVENT_P2("Path %s Dir %s", cur_dir->dir_path,cur_dir->dir_name);
	cur_dir->depth = 1;
	//TRACE_EVENT_P1("cur_dir->dirinfo.aud.state12 %d",cur_dir->dirinfo.aud.state);
	mmi_fm_start( parent_win);
	return MFW_EVENT_CONSUMED;
	//TRACE_EVENT_P1("cur_dir->dirinfo.aud.state13 %d",cur_dir->dirinfo.aud.state);
}

/*******************************************************************************
 $Function:    		mmi_fm_start

 $Description:		To create the FileManager window

 $Returns:		Created Window Pointer

 $Arguments:		parent_win	-Parent Window
*******************************************************************************/
static T_MFW_HND mmi_fm_start( T_MFW_HND parent_win)
{
	TRACE_FUNCTION("mmi_fm_list_Start");
	
	//Checks and creates the root directories for image and audio
	mfw_fm_createRootDir(fm_data->source);
	
	//Creating the root window for FileManager
	fm_data->root_win=mmi_fm_create(parent_win);
	
	if (fm_data->root_win NEQ NULL)
	{
		fm_data->opt_type=FM_NONE;
	    SEND_EVENT (fm_data->root_win, FM_INIT, 0, (void *)NULL);
	}
	return fm_data->root_win;
}

/*******************************************************************************
 $Function:    		mmi_fm_create

 $Description:		To create the FileManager window

 $Returns:		Created Window Pointer

 $Arguments:		parent_win	-Parent Window
*******************************************************************************/
static T_MFW_HND mmi_fm_create (T_MFW_HND parent_win)
{

	T_MFW_WIN  * win;
	T_FM_CURDIR *cur_dir = fm_data->cur_dir;

	TRACE_FUNCTION("mmi_fm_create");
	//TRACE_EVENT_P1("cur_dir->dirinfo.aud.state31 %d",cur_dir->dirinfo.aud.state);
	
	//Creating the root window for FileManager
	fm_data->root_win = win_create (parent_win, 0, E_WIN_VISIBLE, (T_MFW_CB)mmi_fm_win_cb);
	//TRACE_EVENT_P1("cur_dir->dirinfo.aud.state32 %d",cur_dir->dirinfo.aud.state);
	TRACE_EVENT_P1("fm_data->root_win %x",fm_data->root_win);
	if (fm_data->root_win EQ NULL)
	{
		mfwFree((U8 *)fm_data, (U16)sizeof(T_MMI_FM_STRUCT));
		fm_data=NULL;
		return NULL;
	}
	/*
		connect the dialog data to the MFW-window
	*/
	fm_data->mmi_control.dialog = (T_DIALOG_FUNC)mmi_fm_exec_cb;
	fm_data->mmi_control.data   = fm_data;
	fm_data->parent_win= parent_win;	
	win                           = ((T_MFW_HDR *)fm_data->root_win)->data;
	win->user                = (void *)fm_data;
	if(fm_data->mfw_win == NULL)
	{
		//Creating the mfw component for the root window for FileManager
		fm_data->mfw_win = (T_MFW_HND)mfw_fm_create(fm_data->root_win, E_FM_ALL_SERVICES, (MfwCb)mmi_fm_app_root_cb);
	}
	if (fm_data->mfw_win== NULL)
	{
		winDelete(fm_data->root_win);
		mfwFree((U8 *)fm_data, (U16)sizeof(T_MMI_FM_STRUCT));
		fm_data=NULL;
		return NULL;
	}
	
	fm_data->list_win=NULL;
	cur_dir->startIndex=0;
	winShow(fm_data->root_win);
	return fm_data->root_win;
}

/*******************************************************************************
 $Function:    		mmi_fm_app_root_cb

 $Description:		Handler for all the events from mfw for FileManager

 $Returns:		Execution status

 $Arguments:		event	-window event Id
				para		-optional data.
*******************************************************************************/
static int mmi_fm_app_root_cb(T_MFW_EVENT event, void *para)
{
	T_MFW_HND win = mfw_parent(mfw_header());
	T_MFW_WIN * win_data;
	T_MMI_FM_STRUCT *fm_data;
	T_FM_CURDIR *cur_dir ;
	T_MFW_FM_PARA *fm_para=(T_MFW_FM_PARA*) para;
	T_FM_IMG_STATE result = FM_UCP_NO_ERROR;
	
    	TRACE_FUNCTION ("mmi_fm_app_root_cb()");

	win_data = ((T_MFW_HDR *) win)->data;
	fm_data = (T_MMI_FM_STRUCT *)win_data->user;
	cur_dir = fm_data->cur_dir;

	TRACE_EVENT_P2(" Event %x, state %d",event,fm_para->img_state); 
	switch (event)
	{
		case E_FM_THMB_INIT:
			if(fm_para->img_state == FM_UCP_NO_ERROR)
			{
				//Initialization successful. Start generating thumbnails
				cur_dir->dirinfo.img.cmd = FM_UCP_THMB_GEN;
				cur_dir->dirinfo.img.state = FM_UCP_NONE;
				result = mfw_fm_imgThmb_generate();
				if(result != FM_UCP_NO_ERROR)
				{
					//Error Generating thumbnails
					//Deinitialize the Thumbnail UCP and destroy it
					TRACE_ERROR("Error generating thumbnails");
					cur_dir->dirinfo.img.cmd=FM_UCP_THMB_DEINIT;
					cur_dir->dirinfo.img.state=FM_UCP_ERROR;
					result = mfw_fm_imgThmb_deinit();
					if(result != FM_UCP_NO_ERROR)
					{
						TRACE_ERROR("Error deinitializing the thumbnail UCP");
						cur_dir->dirinfo.img.cmd=FM_UCP_NONE;
						cur_dir->dirinfo.img.state=FM_UCP_NONE;
						result = mfw_fm_imgThmb_destroy();
						if(result != FM_UCP_NO_ERROR)
							TRACE_ERROR("Error destroying the thumbnail UCP");
					}
				}
			}
			else
			{
				//Error in initialization. Destroy the Thumbnail UCP 
				//Create the Viewer UCP
				result = mfw_fm_imgThmb_destroy();
				if(result != FM_UCP_NO_ERROR)
					TRACE_ERROR("Error destroying the thumbnail UCP");
				cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
				cur_dir->dirinfo.img.state = FM_UCP_NONE;
				cur_dir->currentIndex = cur_dir->startIndex;
				mmi_fm_img_validate();
				mmi_fm_imgThmbDraw_start();
			}
			break;
		case E_FM_THMB_GEN:
			switch(fm_para->img_state)
			{
				case FM_UCP_NO_ERROR:
					//Thumbanail generation successful. Continue generating thumbnails
					cur_dir->dirinfo.img.state = FM_UCP_NO_ERROR;
					mmi_fm_imgThmbGen();
					break;
				case FM_UCP_ERROR_BAD_STREAM:
				case FM_UCP_ERROR_UNKNOWN:
					//NonFatal Error in generation. Deinitialize and Initialize the Thumbnail UCP 
					cur_dir->dirinfo.img.cmd = FM_UCP_THMB_DEINIT;
					cur_dir->dirinfo.img.state = FM_UCP_ERROR_NONFATAL;
					result = mfw_fm_imgThmb_deinit();
					if(result != FM_UCP_NO_ERROR)
					{
						TRACE_ERROR("Error deinitializing the thumbnail UCP");
						cur_dir->dirinfo.img.cmd=FM_UCP_NONE;
						cur_dir->dirinfo.img.state=FM_UCP_NONE;
						result = mfw_fm_imgThmb_destroy();
						if(result != FM_UCP_NO_ERROR)
							TRACE_ERROR("Error destroying the thumbnail UCP");
					}
					break;
				case FM_UCP_ERROR_NO_MEM:
				case FM_UCP_ERROR_INVALID_ARGUMENT:
				case FM_UCP_ERROR:
					//Fatal Error in generation. Deinitialize and Destroy the Thumbnail UCP 
					cur_dir->dirinfo.img.cmd = FM_UCP_THMB_DEINIT;
					cur_dir->dirinfo.img.state = FM_UCP_ERROR_FATAL;
					result = mfw_fm_imgThmb_deinit();
					if(result != FM_UCP_NO_ERROR)
					{
						TRACE_ERROR("Error deinitializing the thumbnail UCP");
						cur_dir->dirinfo.img.cmd=FM_UCP_NONE;
						cur_dir->dirinfo.img.state=FM_UCP_NONE;
						result = mfw_fm_imgThmb_destroy();
						if(result != FM_UCP_NO_ERROR)
							TRACE_ERROR("Error destroying the thumbnail UCP");
					}
					break;
			}
			break;
		case E_FM_THMB_DEINIT:
			if(fm_para->img_state == FM_UCP_NO_ERROR)
			{
				switch(cur_dir->dirinfo.img.state)
				{
					case FM_UCP_NONE:
						//Had completed thumbnail generation successfully
						//Thumbnail UCP deinitialized, Destroy the Thumbnail UCP.
						//Create the Viewer UCP for drawing the thumbnails
						result = mfw_fm_imgThmb_destroy();
						if(result != FM_UCP_NO_ERROR)
							TRACE_ERROR("Error destroying the thumbnail UCP");
						cur_dir->dirinfo.img.cmd=FM_UCP_NONE;
						cur_dir->dirinfo.img.state=FM_UCP_NONE;
						cur_dir->currentIndex=cur_dir->startIndex;
						mmi_fm_img_validate();
						mmi_fm_imgThmbDraw_start();
						break;
					case FM_UCP_ERROR_FATAL:
						//Had Encountered a fatal error. 
						//Thumbnail UCP deinitialized, Destroy the Thumbnail UCP.
						//Create the Viewer UCP for drawing the thumbnails
						result = mfw_fm_imgThmb_destroy();
						if(result != FM_UCP_NO_ERROR)
							TRACE_ERROR("Error destroying the thumbnail UCP");
						cur_dir->dirinfo.img.cmd=FM_UCP_NONE;
						cur_dir->dirinfo.img.state=FM_UCP_NONE;
						cur_dir->currentIndex=cur_dir->startIndex;
						mmi_fm_img_validate();
						mmi_fm_imgThmbDraw_start();
						break;
			/*May 11, 2007 DRT:OMAPS00132505 x0061088*/	
			        case FM_UCP_ERROR:
					case FM_UCP_ERROR_NONFATAL:
						//Had Encountered a nonfatal error. Thumbnail UCP was deinitialized						
						//initialize again to continue with the next thumbnail generation
						mmi_fm_imgThmbGen_resume();
						break;
				}
			}
			else
			{
				//Error in deinitializing the Thumbnail UCP. Destroy the Thumbnail UCP.
				cur_dir->dirinfo.img.cmd=FM_UCP_NONE;
				cur_dir->dirinfo.img.state = FM_UCP_NONE;
				result = mfw_fm_imgThmb_destroy();
				if(result != FM_UCP_NO_ERROR)
					TRACE_ERROR("Error destroying the thumbnail UCP");
			}
			break;
		case E_FM_IMG_INIT:
			if(fm_para->img_state == FM_UCP_NO_ERROR)
			{
				//Viewer UCP is successfully initialized. 
				if(cur_dir->dirinfo.img.cmd == FM_UCP_THMBIMG_INIT)
				{
					//Draw the 48 X 48 thumbnail
					cur_dir->dirinfo.img.cmd = FM_UCP_THMBIMG_DRAW;
					cur_dir->dirinfo.img.state = FM_UCP_NONE;
				}
				else if (cur_dir->dirinfo.img.cmd == FM_UCP_QCIFIMG_INIT)
				{
					//Draw the QCIF Width X QCIF Height image
					cur_dir->dirinfo.img.cmd = FM_UCP_QCIFIMG_DRAW;
					cur_dir->dirinfo.img.state = FM_UCP_NONE;
				}
				result = mfw_fm_imgViewer_view();
				if(result != FM_UCP_NO_ERROR)
				{
					//Error drawing thumbnail in the Viewer UCP, deinit and destroy it
					TRACE_ERROR("Error drawing thumbnail in the Viewer UCP");
					if( cur_dir->dirinfo.img.cmd == FM_UCP_THMBIMG_DRAW)
						cur_dir->dirinfo.img.cmd = FM_UCP_THMBIMG_DEINIT;
					else
						cur_dir->dirinfo.img.cmd = FM_UCP_QCIFIMG_DEINIT;
					cur_dir->dirinfo.img.state = FM_UCP_ERROR;
					result = mfw_fm_imgViewer_deinit();
					if(result != FM_UCP_NO_ERROR)
					{
						//Error deinitializing the Viewer UCP, destroy it
						TRACE_ERROR("Error deinitializing the Viewer UCP");
						cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
						cur_dir->dirinfo.img.state = FM_UCP_NONE;
						result = mfw_fm_imgViewer_destroy();
						if(result != FM_UCP_NO_ERROR)
							TRACE_ERROR("Error destroying the Viewer UCP");
					}
				}
			}
			else
			{
				//Error initializing the Viewer UCP. Destroy it
				//Unlock the keys
				if(cur_dir->dirinfo.img.cmd == FM_UCP_THMBIMG_INIT)
					displayMenuKeys(MENU_KEY_UP_DOWN_CENTER);
				else
					displayMenuKeys(MENU_KEY_ALL);
				fm_data->menu_list_data->block_keys =  (BOOL)FALSE;
				result = mfw_fm_imgViewer_destroy();
				if(result != FM_UCP_NO_ERROR)
					TRACE_ERROR("Error destroying the Viewer UCP");
				cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
				cur_dir->dirinfo.img.state = FM_UCP_NONE;
			}
			break;
		case E_FM_IMG_DRAW:
			switch(fm_para->img_state )
			{
				case FM_UCP_NO_ERROR:
					cur_dir->dirinfo.img.state = FM_UCP_NO_ERROR;
					if(cur_dir->dirinfo.img.cmd == FM_UCP_THMBIMG_DRAW)
					{
						//Drawing the 48 X 48 thumbnail was successful. Conitnue to the next one
						cur_dir->currentIndex++;
						mmi_fm_imgThmbDraw();
					}
					else if(cur_dir->dirinfo.img.cmd == FM_UCP_QCIFIMG_DRAW)
					{
						//Drawing the QCIF Width X QCIF Height image was successful. Unlock the keys now.
						displayMenuKeys(MENU_KEY_ALL);
					}
					break;
				case FM_UCP_ERROR_UNKNOWN:
				case FM_UCP_ERROR_BAD_STREAM:
				case FM_UCP_ERROR_READ_FAILED:
					if(cur_dir->dirinfo.img.cmd == FM_UCP_THMBIMG_DRAW)
					{
						//Error drawing the thumbnail image. Deinitialize the Viewer UCP, Initialize again to draw the next thumbnail.
						cur_dir->dirinfo.img.cmd=FM_UCP_THMBIMG_DEINIT;
						cur_dir->dirinfo.img.state = FM_UCP_ERROR_NONFATAL;
					}
					else if(cur_dir->dirinfo.img.cmd == FM_UCP_QCIFIMG_DRAW)
					{
						//Error drawing theQCIF  image. Deinitialize the Viewer UCP and destroy it
						cur_dir->dirinfo.img.cmd=FM_UCP_QCIFIMG_DEINIT;
						cur_dir->dirinfo.img.state = FM_UCP_ERROR_FATAL;
					}
					result = mfw_fm_imgViewer_deinit();				
					if(result != FM_UCP_NO_ERROR)
					{
						//Error deinitializing the Viewer UCP, destroy it
						TRACE_ERROR("Error deinitializing the Viewer UCP");
						cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
						cur_dir->dirinfo.img.state = FM_UCP_NONE;
						result = mfw_fm_imgViewer_destroy();
						if(result != FM_UCP_NO_ERROR)
							TRACE_ERROR("Error destroying the Viewer UCP");
					}
					break;
				case FM_UCP_ERROR_INVALID_ARGUMENT:
				case FM_UCP_ERROR :
					//Error drawing the image. Deinitialize the Viewer UCP, unblock the keys and destroy it.
					//48 X 48 Thumbnail drawing
					if(cur_dir->dirinfo.img.cmd == FM_UCP_THMBIMG_DRAW)
					{
						cur_dir->dirinfo.img.cmd=FM_UCP_THMBIMG_DEINIT;
						displayMenuKeys(MENU_KEY_UP_DOWN_CENTER);
						fm_data->menu_list_data->block_keys =  (BOOL)FALSE;
					}
					//QCIF Image Drawing 
					else if(cur_dir->dirinfo.img.cmd == FM_UCP_QCIFIMG_DRAW)
					{
						cur_dir->dirinfo.img.cmd=FM_UCP_QCIFIMG_DEINIT;
						displayMenuKeys(MENU_KEY_ALL);
					}
					cur_dir->dirinfo.img.state = FM_UCP_ERROR_FATAL;
					result = mfw_fm_imgViewer_deinit();				
					if(result != FM_UCP_NO_ERROR)
					{
						//Error deinitializing the Viewer UCP, destroy it
						TRACE_ERROR("Error deinitializing the Viewer UCP");
						cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
						cur_dir->dirinfo.img.state = FM_UCP_NONE;
						result = mfw_fm_imgViewer_destroy();
						if(result != FM_UCP_NO_ERROR)
							TRACE_ERROR("Error destroying the Viewer UCP");
					}
					break;
				}
			break;
		case E_FM_IMG_DEINIT:
			switch(cur_dir->dirinfo.img.state)
			{
				case FM_UCP_NONE:
					//Viewer UCP is deinitialized, destroy it
					result = mfw_fm_imgViewer_destroy();
					break;
				case FM_UCP_ERROR_NONFATAL:
					//Viewer UCP is deinitialized, initialize and continue with next one
					mmi_fm_imgThmbDraw_resume();
					break;
				case FM_UCP_ERROR_FATAL:
					//Viewer UCP is deinitialized, destroy it
					result = mfw_fm_imgViewer_destroy();
					break;
			}
			if(result != FM_UCP_NO_ERROR)
				TRACE_ERROR("Error destroying the Viewer UCP");
			cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
			cur_dir->dirinfo.img.state = FM_UCP_NONE;
			switch(fm_data->opt_type)
			{
				case FM_OPEN:
					mmi_fm_open();
					break;
				case FM_BACK:
					mmi_fm_goback();
					break;
			}
 			break;
		case E_FM_AUDIO_PROG:
			pbar_update(para_aud.aud_pt, para_aud.aud_tt);
			break;
		case E_FM_AUDIO_STOP:
			if(fm_para->aud_state != FM_AUD_NONE)
			{
				USHORT       TextId = TxtAudNotAllowed;
				//Jul 03,07 DRT:OMAPS00135749  x0062174(Nimitha)
				//May28,07 DRT:OMAPS00132459  x0061560(sateeshg)
				/*if(aud_state_back )
				{
					aud_state_back =0;
				}*/
				switch(fm_para->aud_state)
				{
					case FM_AUD_ERROR_NOTALLOWED:
							TextId = TxtAudNotAllowed;
						break;
					case FM_AUD_ERROR_AUDIO:
						TextId = TxtAudAudioError;
						break;
					case FM_AUD_ERROR_DENIED:
						TextId = TxtAudDenied;
						break;
					case FM_AUD_ERROR_PLAYER:
						TextId = TxtAudPlayerError;
						break;
					case FM_AUD_ERROR_FFS:
						TextId = TxtAudFFSError;
						break;
					case FM_AUD_ERROR_MSGING:
						TextId = TxtAudMessagingError;
						break;
					case FM_AUD_ERROR_NOTREADY:
						TextId = TxtAudNotReady;
						break;
					case FM_AUD_ERROR_INVALIDPARAM:
						TextId = TxtAudInvalidParam;
						break;
					case FM_AUD_ERROR_INTERNAL:
						TextId = TxtAudInternalError;
						break;
					case FM_AUD_ERROR_MEM:
						TextId = TxtAudMemoryError;
						break;
					case FM_AUD_ERROR_NOTSUPPORTED:
						TextId = TxtAudNotSupported;
						break;
				}
				mmi_fm_app_show_info(win,TxtError,TextId,TxtNull,TxtSoftBack,0,THREE_SECS,KEY_RIGHT | KEY_CLEAR | KEY_HUP);
			}
			/*a0393213(R.Prabakar) OMAPS00128976 - No return to File Management screen when a corrupted file is played
			   The window was not getting destroyed in case of error. Now it's destroyed.*/
			if(!IsRealPaused)//Daisy tang added for Real Resume feature 20071107
			{
				if(mmi_progress_bar == PB_ON)
				{
					winDelete(pb_win);
					pb_win = 0;
				}
/* Mar 15, 2007 DRT: OMAPS00120187 x0039928 */
/* Fix: Proper soft keys are displayed                  */
				if(fm_data->opt_win)
					displaySoftKeys(TxtSelect, TxtSoftBack);
				else
					displayMenuKeys(MENU_KEY_UP_DOWN_PLAY);
			}	
			cur_dir->dirinfo.aud.state = FM_AUD_NONE;
			aud_state = 1;
			break;
	}
	return MFW_EVENT_CONSUMED;
}



/*******************************************************************************
 $Function:    		mmi_fm_win_cb

 $Description:	 	Handler for window events for the FileManager window

 $Returns:		Execution status

 $Arguments:		e	-window event Id
				w	-current window
*******************************************************************************/
int mmi_fm_win_cb (MfwEvt e, MfwWin *w)
{
	TRACE_FUNCTION ("mmi_fm_win_cb()");
//	TRACE_EVENT_P1("cur_dir->dirinfo.aud.state6 %d",cur_dir->dirinfo.aud.state);
	
	switch (e)
	{
	case MfwWinVisible:  
		break;
	case MfwWinFocussed: 
		break;
	case MfwWinDelete:   
		break;
	default:
		return MFW_EVENT_REJECTED;
	}
	return MFW_EVENT_CONSUMED;
	//TRACE_EVENT_P1("cur_dir->dirinfo.aud.state7 %d",cur_dir->dirinfo.aud.state);
}

/*******************************************************************************
 $Function:    		mmi_fm_exec_cb

 $Description:	 	Handler for events for the FileManager window

 $Returns:		None

 $Arguments:		win			-current window
				event		-window event Id
				value		-unique Id
				parameter	-optional data.
*******************************************************************************/
void mmi_fm_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
	T_MFW_WIN        * win_data = ((T_MFW_HDR *) win)->data;
	T_MMI_FM_STRUCT  * fm_data     = (T_MMI_FM_STRUCT *)win_data->user;
	T_FM_CURDIR *cur_dir = fm_data->cur_dir;

	TRACE_FUNCTION ("mmi_fm_exec_cb()");
	//TRACE_EVENT_P1("cur_dir->dirinfo.aud.state9 %d",cur_dir->dirinfo.aud.state);
	
	TRACE_EVENT_P1("Event %d",event );
	switch (event)
	{
		case FM_INIT:
			mmi_fm_list_create(fm_data->root_win);
			break;
		case FM_DESTROY:
			mmi_fm_destroy(fm_data->root_win);
			break;
		case LISTS_REASON_RESUME:
			/* August 03, 2007 DRT:OMAPS00138886 x0080701 (Bharat) -- Start --> */

			MMI_IMGLIST_CHANGE_STS(MMI_IMGLIST_STS_NORMAL);

			/* August 03, 2007 DRT:OMAPS00138886 x0080701 (Bharat) -- End --> */
			if(cur_dir->dir_type == OBJECT_TYPE_IMAGE_FOLDER)
			{
				displaySoftKeys(fm_data->menu_list_data->LeftSoftKey,fm_data->menu_list_data->RightSoftKey);
				mmi_fm_set_mmi_plane_to_front();
			}
			break;
		case LISTS_REASON_SUSPEND:
			/* August 03, 2007 DRT:OMAPS00138886 x0080701 (Bharat) -- Start --> */

			MMI_IMGLIST_CHANGE_STS(MMI_IMGLIST_STS_SUSPENDED);

			/* August 03, 2007 DRT:OMAPS00138886 x0080701 (Bharat) -- End --> */
			if(cur_dir->dir_type == OBJECT_TYPE_IMAGE_FOLDER)
			{
				mmi_fm_set_mmi_plane_to_front();
			}
			break;
		default:
			break;
	}
}

/*******************************************************************************
 $Function:    		mmi_fm_destroy

 $Description:	 	To destroy the FileManager window

 $Returns:		None

 $Arguments:		own_window	-FileManager window
*******************************************************************************/
static void mmi_fm_destroy(MfwHnd own_window)
{
	TRACE_FUNCTION ("mmi_fm_destroy()");
//	TRACE_EVENT_P1("cur_dir->dirinfo.aud.state10 %d",cur_dir->dirinfo.aud.state);

	if (own_window)
	{
		if ( fm_data )
		{
			//Delete the mfw component of the FileManager
			if ( fm_data->mfw_win!=NULL)
			{
				mfw_fm_delete(fm_data->mfw_win);
				fm_data->mfw_win = NULL;
			}
			//Delete the FileManager window
			if ( fm_data->root_win!=NULL)
			{
				win_delete (fm_data->root_win);
				fm_data->root_win = NULL;
			}
		}
	}	
	dspl_Enable(1);
}

/*******************************************************************************
 $Function:    		mmi_fm_list_create

 $Description:	 	Start building the list

 $Returns:		None
 $Arguments:		win		-Parent window
*******************************************************************************/
void mmi_fm_list_create( T_MFW_HND win)
{
	T_MFW_FM_STATUS status;
	T_FM_CURDIR *cur_dir = fm_data->cur_dir;
	T_FM_IMG_STATE result = FM_UCP_NO_ERROR;
	
	TRACE_FUNCTION("mmi_fm_list_create" );
	//TRACE_EVENT_P1("cur_dir->dirinfo.aud.state34 %d",cur_dir->dirinfo.aud.state);

	//Read the objects in the given directory 
	status = mfw_fm_readDir(cur_dir->dir_path,cur_dir->dir_name,&cur_dir->num_objs,cur_dir->obj_list,fm_data->source,fm_data->app);
	if( status == FM_DIR_DOESNOTEXISTS)  
	{
		//Root directory does not exists, display dialog to user and exit FileManager application
		TRACE_EVENT("Directory does not exists");
		mmi_fm_app_show_info(win,TxtFileNotLoaded,TxtNull,TxtNull,TxtSoftBack,0,THREE_SECS,KEY_RIGHT | KEY_CLEAR | KEY_HUP);
		mmi_fm_list_destroy(fm_data->root_win);
		SEND_EVENT(fm_data->root_win,FM_DESTROY,0,NULL);
		return;
	}
	else if( cur_dir->num_objs == 0 )
	{
		//Directory is empty. Display dialog ot teh user and return to previous directory /exit FileManager application
		TRACE_EVENT("Empty Directory");
		/* Mar 30, 2007 DRT: OMAPS00122768 x0039928 */
		/* Fix: image viewer is deinitialized */
		if( (cur_dir->dirinfo.img.cmd == FM_UCP_QCIFIMG_DRAW || cur_dir->dirinfo.img.cmd == FM_UCP_THMBIMG_DRAW) &&
		      cur_dir->dirinfo.img.state == FM_UCP_NO_ERROR) 
			{
				cur_dir->dirinfo.img.cmd = FM_UCP_THMBIMG_DEINIT;
				cur_dir->dirinfo.img.state = FM_UCP_NONE;
				result = mfw_fm_imgViewer_deinit();
				if(result != FM_UCP_NO_ERROR)
				{
					//Error deinitializing the Viewer UCP, destroy it
					TRACE_ERROR("Error deinitializing the Viewer UCP");
					cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
					cur_dir->dirinfo.img.state = FM_UCP_NONE;
					result = mfw_fm_imgViewer_destroy();
					if(result != FM_UCP_NO_ERROR)
						TRACE_ERROR("Error destroying the Viewer UCP");
					}
				}
		mmi_fm_app_show_info(win,TxtFileNotLoaded,TxtNull,TxtNull,TxtSoftBack,(T_VOID_FUNC)mmi_fm_nofile_cb,THREE_SECS,KEY_RIGHT | KEY_CLEAR | KEY_HUP);
		return;  
	}
	//Read the properties for all the files
	mfw_fm_readProperties(cur_dir->dir_path,cur_dir->dir_name,cur_dir->num_objs,cur_dir->obj_list,cur_dir->obj_properties,fm_data->source, fm_data->app);
	fm_data->menu_list_data = (ListMenuData *)ALLOC_MEMORY(sizeof(ListMenuData));
	if(fm_data->menu_list_data == NULL )
	{
		TRACE_EVENT("Memory failure.");
		return;
	}
	fm_data->menu_list_data->List = (T_MFW_MNU_ITEM *)ALLOC_MEMORY( (cur_dir->num_objs) * sizeof(T_MFW_MNU_ITEM) );
	if(fm_data->menu_list_data->List == NULL)
	{
		TRACE_EVENT("Memory failure.");
		return;
	}
	//Based on the directory type, build the corresponding list
	switch(cur_dir->dir_type)
	{
		case OBJECT_TYPE_AUDIO_FOLDER:
			fm_data->list_win=mmi_fm_aud_list_create(win);
			break;
		case OBJECT_TYPE_IMAGE_FOLDER:
			fm_data->list_win=mmi_fm_img_list_create(win);
			break;
	}
}

/*******************************************************************************
 $Function:    		mmi_fm_list_destroy

 $Description:	 	Frees the memory allocated during list creation

 $Returns:		None

 $Arguments:		own_window	-FileManager window
*******************************************************************************/
static void mmi_fm_list_destroy(MfwHnd own_window)
{
	T_MFW_WIN * win_data;
	T_MMI_FM_STRUCT *fm_data;
	int i=0;
	T_FM_CURDIR *cur_dir;
	
	TRACE_FUNCTION ("mmi_fm_list_destroy()");
	//TRACE_EVENT_P1("cur_dir->dirinfo.aud.state8 %d",cur_dir->dirinfo.aud.state);

	/* August 03, 2007 DRT:OMAPS00138886 x0080701 (Bharat) -- Start --> */
	
	MMI_IMGLIST_CHANGE_STS(MMI_IMGLIST_STS_NORMAL);
	
	/* August 03, 2007 DRT:OMAPS00138886 x0080701 (Bharat) -- End --> */
	if (own_window)
	{
		win_data = ((T_MFW_HDR *)own_window)->data;
		fm_data = (T_MMI_FM_STRUCT *)win_data->user;
		cur_dir = fm_data->cur_dir;
		if ( fm_data )
		{
			if (fm_data->menu_list_data != NULL)
			{
			#ifdef FF_MMI_UNICODE_SUPPORT
				if (fm_data->app == FM_AUDIO)
				{
				for (i=0; i<cur_dir->num_objs; i++)
				{
						mfwFree(fm_data->menu_list_data->List[i].str, (wstrlen(cur_dir->obj_list[i]->name_uc)+1)*2);
					}
				}
			#endif
				mfwFree( (U8 *)fm_data->menu_list_data->List,(cur_dir->num_objs) * sizeof(T_MFW_MNU_ITEM) );
				mfwFree ((U8 *)fm_data->menu_list_data, sizeof(ListMenuData));
			}
			i=0;
			while(cur_dir->obj_list[i] != NULL)
			{
				mfwFree((U8 *)cur_dir->obj_list[i], sizeof(T_FM_OBJ));
				cur_dir->obj_list[i] = NULL;
				mfwFree((U8 *)cur_dir->obj_properties[i], sizeof(T_FM_OBJ_PROPERTIES));
				cur_dir->obj_properties[i] = NULL;
				mfwFree((U8 *)cur_dir->obj_data[i], sizeof(T_FM_OBJ_DATA));
				cur_dir->obj_data[i] = NULL;
				i++;
			}
			
		}
	}

}

/*******************************************************************************
 $Function:    		mmi_fm_img_validate

 $Description:	 	Validates the files in the image folder. Checks for thumbnail and updates 
 				the flag for each object in the given image folder

 $Returns:		None

 $Arguments:		None
*******************************************************************************/
BOOL mmi_fm_img_validate(void)
{
	USHORT  count = 0;
	char  curFilename[FM_MAX_OBJ_NAME_LENGTH];
	char  *ext;
	T_MFW_FM_STATUS status;
	T_FM_CURDIR *cur_dir = fm_data->cur_dir;
	BOOL thumbanil_generation= FALSE;
	
	TRACE_FUNCTION ("mmi_fm_img_validate()");
	for (count=0; count<cur_dir->num_objs; count++)
	{
		strcpy(curFilename,cur_dir->obj_list[count]->name);
		cur_dir->obj_data[count] = (T_FM_OBJ_DATA*)mfwAlloc(sizeof(T_FM_OBJ_DATA));
		if(cur_dir->obj_list[count]->type == OBJECT_TYPE_FILE || cur_dir->obj_list[count]->type == OBJECT_TYPE_IMAGE)
		{
			ext=(char *)mmi_fm_get_ext(curFilename);
			if(strcmp((const char*)ext, "jpg") == 0 ) 
			{
				cur_dir->obj_list[count]->type = OBJECT_TYPE_IMAGE;
				mmi_fm_get_filename(curFilename);
				status=mfw_fm_checkThumbnail(curFilename,fm_data->source);
				if(status == FM_FILE_EXISTS)
				{
					TRACE_EVENT("Thumbnail exists()");
					cur_dir->obj_data[count]->image.thumbnail = TRUE;
				}
				else
				{
					TRACE_EVENT("Thumbnail does not exists()");
					cur_dir->obj_data[count]->image.thumbnail = FALSE;
					//Thumbnail generation required
					thumbanil_generation = TRUE;
				}
			}
			else
			{
				//Other unsupported files
				cur_dir->obj_data[count]->image.thumbnail=FALSE;
			}
		}
		else
		{
			cur_dir->obj_data[count]->image.thumbnail=FALSE;
		}
	}
	return thumbanil_generation;
}


/*******************************************************************************
 $Function:    		mmi_fm_img_list_create

 $Description:		Creates the image files list

 $Returns:		Created Window Pointer

 $Arguments:		win		-Parent window
*******************************************************************************/
T_MFW_HND mmi_fm_img_list_create(T_MFW_HND win)
{
	USHORT  file_count = 0, list_count=0;
	BOOL thumbanil_generation= FALSE;

	T_FM_CURDIR *cur_dir = fm_data->cur_dir;
	
	TRACE_FUNCTION ("mmi_fm_img_list_create()");
	/* August 03, 2007 DRT:OMAPS00138886 x0080701 (Bharat) -- Start --> */
	
	MMI_IMGLIST_CHANGE_STS(MMI_IMGLIST_STS_NORMAL);
	
	/* August 03, 2007 DRT:OMAPS00138886 x0080701 (Bharat) -- End --> */
	
	//Traverse through the list to find out valid image objects in the given directory, 
	//and if thumbnail generation is needed
	thumbanil_generation = mmi_fm_img_validate();
	cur_dir->startIndex = 0;
	for (file_count=0; file_count<cur_dir->num_objs; file_count++)
	{
		if(cur_dir->obj_list[file_count]->type == OBJECT_TYPE_FILE || cur_dir->obj_list[file_count]->type == OBJECT_TYPE_IMAGE)
		{
			mnuInitDataItem(&fm_data->menu_list_data->List[list_count]);
			fm_data->menu_list_data->List[list_count].icon=&fmIconFile;
			fm_data->menu_list_data->List[list_count].str  = (char *)cur_dir->obj_list[file_count]->name;
			fm_data->menu_list_data->List[list_count].flagFunc = item_flag_none;
			list_count++;
		}
		else if( cur_dir->obj_list[file_count]->type == OBJECT_TYPE_FOLDER)
		{
			mnuInitDataItem(&fm_data->menu_list_data->List[list_count]);
			fm_data->menu_list_data->List[list_count].icon=&fmIconFolder;
			fm_data->menu_list_data->List[list_count].str  = (char *)cur_dir->obj_list[file_count]->name;
			fm_data->menu_list_data->List[list_count].flagFunc = item_flag_none;
			list_count++;
		}
	}
	fm_data->menu_list_data->ListLength = list_count;
	fm_data->menu_list_data->ListPosition = cur_dir->startIndex+1;
	fm_data->menu_list_data->CursorPosition = cur_dir->startIndex+1;
	if(cur_dir->num_objs < 3)
		fm_data->menu_list_data->SnapshotSize =cur_dir->num_objs;// list_count;		
	else
		fm_data->menu_list_data->SnapshotSize =3;// list_count;
	fm_data->menu_list_data->Font = 1;
	fm_data->menu_list_data->LeftSoftKey = TxtSoftOptions;
	fm_data->menu_list_data->RightSoftKey = TxtSoftBack;
	fm_data->menu_list_data->KeyEvents = KEY_ALL;
	fm_data->menu_list_data->Reason = 0;
	fm_data->menu_list_data->Strings = TRUE;
	fm_data->menu_list_data->Attr   = (MfwMnuAttr*)&FMList_Attrib;
	fm_data->menu_list_data->autoDestroy    = FALSE;
	fm_data->menu_list_data->block_keys =  (BOOL)FALSE;
	fm_data->list_state = FM_LIST_CREATE;
	
	//Create the List window with default file and folder icons
	listIconsDisplayListMenu(win, fm_data->menu_list_data, (ListCbFunc)mmi_fm_img_list_cb, 0);
	dspl_Enable(1);
	cur_dir->currentIndex=cur_dir->startIndex;
	TRACE_EVENT_P2("Num of obj %d, CurrIndex %d",cur_dir->num_objs, cur_dir->currentIndex);
	if(thumbanil_generation && (fm_data->opt_type == FM_NONE || fm_data->opt_type == FM_OPEN))
	{
		//Thumbnails need to be generated
		mmi_fm_imgThmbGen_start();
	}
	else
	{
		//Thumbnails are already generated
		mmi_fm_imgThmbDraw_start();
	}
	return fm_data->menu_list_data->win;
}

/*******************************************************************************
 $Function:    		mmi_fm_img_list_cb

 $Description:		 Call back function for the image list window

 $Returns:		None

 $Arguments:		Parent		-window handler
 				List Data		-Menu list data
*******************************************************************************/
void mmi_fm_img_list_cb(T_MFW_HND * Parent, ListMenuData * ListData)
{
	T_FM_CURDIR *cur_dir ;
	T_FM_IMG_STATE result = FM_UCP_NO_ERROR;

	TRACE_FUNCTION("mmi_fm_img_list_cb");

	cur_dir = fm_data->cur_dir;
	mmi_fm_set_mmi_plane_to_front();
	TRACE_EVENT_P1("Reason %d",ListData->Reason);
	switch(ListData->Reason)
	{
		case LISTS_REASON_SELECT:
			cur_dir->currentIndex=ListData->CursorPosition;
			if(ListData->selectKey==TRUE)
			{
				fm_data->opt_type=FM_OPEN;
				switch(cur_dir->obj_list[cur_dir->currentIndex]->type) 
				{
					case OBJECT_TYPE_IMAGE :
						TRACE_EVENT("OBJECT_TYPE_IMAGE" );
						if(cur_dir->obj_data[cur_dir->currentIndex]->image.thumbnail == TRUE && 
							cur_dir->dirinfo.img.cmd == FM_UCP_THMBIMG_DRAW && 
							cur_dir->dirinfo.img.state == FM_UCP_NO_ERROR)
						{
							mmi_fm_view_start();
						}
						else
						{
							mmi_fm_app_show_info(fm_data->list_win,TxtNo,TxtThumbnail,TxtNull,TxtSoftBack,0,THREE_SECS,KEY_RIGHT | KEY_CLEAR | KEY_HUP);
						}
					break;
					case OBJECT_TYPE_FOLDER:
					case OBJECT_TYPE_IMAGE_FOLDER:
						TRACE_EVENT("OBJECT_TYPE_FOLDER" );
						if( (cur_dir->dirinfo.img.cmd == FM_UCP_QCIFIMG_DRAW || cur_dir->dirinfo.img.cmd == FM_UCP_THMBIMG_DRAW) &&
						      cur_dir->dirinfo.img.state == FM_UCP_NO_ERROR) 
						{
							cur_dir->dirinfo.img.cmd = FM_UCP_THMBIMG_DEINIT;
							cur_dir->dirinfo.img.state = FM_UCP_NONE;
							result = mfw_fm_imgViewer_deinit();
							if(result != FM_UCP_NO_ERROR)
							{
								//Error deinitializing the Viewer UCP, destroy it
								TRACE_ERROR("Error deinitializing the Viewer UCP");
								cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
								cur_dir->dirinfo.img.state = FM_UCP_NONE;
								result = mfw_fm_imgViewer_destroy();
								if(result != FM_UCP_NO_ERROR)
									TRACE_ERROR("Error destroying the Viewer UCP");
							}
						}
						else
							mmi_fm_open();
						break;
					case OBJECT_TYPE_FILE:
						TRACE_EVENT("OBJECT_TYPE_FILE" );
						mmi_fm_app_show_info(fm_data->list_win,TxtNo,TxtThumbnail,TxtNull,TxtSoftBack,0,THREE_SECS,KEY_RIGHT | KEY_CLEAR | KEY_HUP);
						break;
				}
			}
			else
			{
				TRACE_EVENT("Left Softkey" );
				fm_data->opt_type=FM_OPTIONS_FOLDER;
				fm_data->opt_win=(T_MFW_HND)bookMenuStart(fm_data->root_win, FMMenuOptionAttributes(),0);
			}
			break;
		case LISTS_REASON_BACK:	
		case LISTS_REASON_HANGUP:  /* Apr 10, 2007 DRT: OMAPS00125325 x0039928 */
			TRACE_EVENT("Going back" );
			fm_data->opt_type=FM_BACK;
			if( (cur_dir->dirinfo.img.cmd == FM_UCP_QCIFIMG_DRAW || cur_dir->dirinfo.img.cmd == FM_UCP_THMBIMG_DRAW) &&
			      cur_dir->dirinfo.img.state == FM_UCP_NO_ERROR) 
			{
				cur_dir->dirinfo.img.cmd=FM_UCP_THMBIMG_DEINIT;
				cur_dir->dirinfo.img.state = FM_UCP_NONE;
				if(cur_dir->num_objs)
				{
					result = mfw_fm_imgViewer_deinit();
					if(result != FM_UCP_NO_ERROR)
					{
						//Error deinitializing the Viewer UCP, destroy it
						TRACE_ERROR("Error deinitializing the Viewer UCP");
						cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
						cur_dir->dirinfo.img.state = FM_UCP_NONE;
						result = mfw_fm_imgViewer_destroy();
						if(result != FM_UCP_NO_ERROR)
							TRACE_ERROR("Error destroying the Viewer UCP");
					}
				}
				else
					result = mfw_fm_imgViewer_destroy();
			}
			else 
				/* Mar 30, 2007 DRT: OMAPS00122772 x0039928 */
				mmi_fm_goback();  
			break;
		case LISTS_REASON_DRAWCOMPLETE:
			TRACE_EVENT("LISTS_REASON_DRAWCOMPLETE " );
			/* August 03, 2007 DRT:OMAPS00138886 x0080701 (Bharat) -- Start --> */
			
			if ( MMI_IMGLIST_STS == MMI_IMGLIST_STS_SUSPENDED )
			{
				displaySoftKeys(TxtSoftOptions,TxtSoftBack);
			}
			else
			{
			
				fm_data->lineheight = ListData->lineHeight;
				displaySoftKeys(TxtSoftOptions,TxtSoftBack);
				if(fm_data->list_state == FM_LIST_UPDATE)
				{
					
					/* Aug 06, 2007 DRT: OMAPS00140423, x0081909 (Deepak)
					
					 In a list of 5 images when scrolled from 4th image to 3rd,the first file has the thumbnail of the fourth the,
					 second one has the fifth and the third one doesn't have a thumbnail */
					
					/*Now thumbnails are displayed correctly and correspond to the name of the file */
						
					if( (cur_dir->startIndex = (ListData->CursorPosition / ListData->SnapshotSize)*3) != 0) 
					{
						cur_dir->currentIndex = cur_dir->startIndex;
					}
					else
					{
						cur_dir->startIndex = 0;
						cur_dir->currentIndex = cur_dir->startIndex;
					}
					/* Aug 06, 2007 DRT: OMAPS00140423, x0081909 (Deepak) end */
					
					mmi_fm_imgThmbDraw();
				}
				else if(fm_data->list_state == FM_LIST_CREATE)
					fm_data->list_state = FM_LIST_UPDATE;
			}
			
			/* August 03, 2007 DRT:OMAPS00138886 x0080701 (Bharat) -- End --> */
			break;
	}
}

/*******************************************************************************
 $Function:    		mmi_fm_view_start

 $Description:		Starts drawing the image in QCIF width and height in a new window

 $Returns:		None

 $Arguments:		None
*******************************************************************************/
void  mmi_fm_view_start(void)
{
	TRACE_FUNCTION("mmi_fm_view_start");
	
	fm_data->img_win = mmi_fm_view_create();
}

/*******************************************************************************
 $Function:    		mmi_fm_view_create

 $Description:		Creates a new window for drawing the image in QCIF width and height

 $Returns:		None

 $Arguments:		None
*******************************************************************************/
T_MFW_HND mmi_fm_view_create(void)
{
	T_MMI_FM_IMGDRAW_STRUCT *imgDraw_data;
	T_MFW_WIN  * win;

	TRACE_FUNCTION("mmi_fm_view_create");
	/* August 03, 2007 DRT:OMAPS00138886 x0080701 (Bharat) -- Start --> */
	
	MMI_IMGVIEWER_CHANGE_STS(MMI_IMGVIEWER_STS_NORMAL);
	
	/* August 03, 2007 DRT:OMAPS00138886 x0080701 (Bharat) -- End --> */
	
	imgDraw_data =  (T_MMI_FM_IMGDRAW_STRUCT *)mfwAlloc(sizeof(T_MMI_FM_IMGDRAW_STRUCT));

	//Create a window for drawing the image in QCIF width and height
	imgDraw_data->img_win = win_create (fm_data->list_win, 0, E_WIN_VISIBLE|E_WIN_SUSPEND|E_WIN_RESUME|E_WIN_DELETE, (T_MFW_CB)mmi_fm_view_win_cb);

	imgDraw_data ->mmi_control.dialog = (T_DIALOG_FUNC)mmi_fm_view_exec_cb;
	imgDraw_data ->mmi_control.data   = imgDraw_data ;
	imgDraw_data->parent_win= fm_data->list_win;	
	win                      = (T_MFW_WIN *)getWinData(imgDraw_data->img_win);
	win->user                = (MfwUserDataPtr)imgDraw_data;
       imgDraw_data->kbd = kbd_create (imgDraw_data->img_win,KEY_ALL|KEY_MAKE,(T_MFW_CB)mmi_fm_view_kbd_cb);
	SEND_EVENT(imgDraw_data->img_win, FM_IMGDRAW_INIT, 0, (void *)NULL);
	winShow(imgDraw_data->img_win );
	return imgDraw_data->img_win ;
}

/*******************************************************************************
 $Function:    	mmi_fm_view_exec_cb

 $Description:	 Img draw call back for the

 $Returns:	None

 $Arguments:		win			-current window
				event		-window event Id
				value		-unique Id
				parameter	-optional data.
*******************************************************************************/
void mmi_fm_view_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
	T_MFW_WIN        * win_data = ((T_MFW_HDR *) win)->data;
	T_MMI_FM_IMGDRAW_STRUCT  * imgDraw_data     = (T_MMI_FM_IMGDRAW_STRUCT *)win_data->user;

	TRACE_FUNCTION("mmi_fm_view_exec_cb");
	TRACE_EVENT_P1("event %d",event);
	switch (event)
	{ 
		case FM_IMGDRAW_INIT:
			dspl_ClearAll();
			displaySoftKeys(TxtSoftOptions,TxtSoftBack);
			mmi_fm_set_mmi_plane_to_front();
			imgDraw_data->zoom = MFW_FM_ZOOM_LOW; 
			imgDraw_data->rotate = MFW_FM_ROTATE_0;
			break;
		case FM_IMGDRAW_DRAW:
			/* August 03, 2007 DRT:OMAPS00138886 x0080701 (Bharat) -- Start --> */
			
			if ( MMI_IMGVIEWER_STS == MMI_IMGVIEWER_STS_SUSPENDED )
			{
				displayMenuKeys(MENU_KEY_ALL);
			}
			else
			{
				displayMenuKeys(MENU_KEY_WAIT);
				mmi_fm_imgDraw();
			}

			/* August 03, 2007 DRT:OMAPS00138886 x0080701 (Bharat) -- End --> */
			break;
		case FM_IMGDRAW_SUSPEND:
			mmi_fm_set_mmi_plane_to_front();
			break;
		case FM_IMGDRAW_RESUME:
			mmi_fm_set_mmi_plane_to_front();
			displaySoftKeys(TxtSoftOptions,TxtSoftBack);
			break;
		case FM_IMGDRAW_DESTROY:
			mmi_fm_view_destroy(imgDraw_data);
			break;		
	}
}

/*******************************************************************************
 $Function:    	mmi_fm_view_win_cb

 $Description:	 	Handler for window events for the image window

 $Returns:		Execution status

 $Arguments:		e	-window event Id
				w	-current window
*******************************************************************************/
int mmi_fm_view_win_cb (MfwEvt e, MfwWin *w)
{
	T_MMI_FM_IMGDRAW_STRUCT  * imgDraw_data     = (T_MMI_FM_IMGDRAW_STRUCT *)w->user;
	TRACE_FUNCTION ("mmi_fm_view_win_cb()");
	TRACE_EVENT_P1("event %d",e);
	switch (e)
	{
	case MfwWinVisible:  /* window is visible  */
		SEND_EVENT(imgDraw_data->img_win, FM_IMGDRAW_DRAW, 0, (void *)NULL);
		break;
	case MfwWinSuspend: /* input focus / selected   */
		/* August 03, 2007 DRT:OMAPS00138886 x0080701 (Bharat) -- Start --> */
		
		MMI_IMGVIEWER_CHANGE_STS(MMI_IMGVIEWER_STS_SUSPENDED);
		
		/* August 03, 2007 DRT:OMAPS00138886 x0080701 (Bharat) -- End --> */
		SEND_EVENT(imgDraw_data->img_win, FM_IMGDRAW_SUSPEND, 0, (void *)NULL);
		break;
	case MfwWinResume: /* input focus / selected   */
		/* August 03, 2007 DRT:OMAPS00138886 x0080701 (Bharat) -- Start --> */
		
		MMI_IMGVIEWER_CHANGE_STS(MMI_IMGVIEWER_STS_NORMAL);
		
		/* August 03, 2007 DRT:OMAPS00138886 x0080701 (Bharat) -- End --> */
		SEND_EVENT(imgDraw_data->img_win, FM_IMGDRAW_RESUME, 0, (void *)NULL);
		break;
	case MfwWinDelete:   /* window will be deleted   */
		/* August 03, 2007 DRT:OMAPS00138886 x0080701 (Bharat) -- Start --> */
		
		MMI_IMGVIEWER_CHANGE_STS(MMI_IMGVIEWER_STS_NORMAL);
		
		/* August 03, 2007 DRT:OMAPS00138886 x0080701 (Bharat) -- End --> */
		break;
	default:
		return MFW_EVENT_REJECTED;
	}
	return MFW_EVENT_CONSUMED;
}

/*******************************************************************************
 $Function:    	mmi_fm_view_kbd_cb

 $Description:	 	Handler for key events for the image window

 $Returns:		Execution status

 $Arguments:		e	-window event Id
				k	-key event
*******************************************************************************/
static int mmi_fm_view_kbd_cb (MfwEvt e, MfwKbd *k)
{
	T_MFW_HND    win  = mfwParent(mfw_header());
	T_MFW_WIN  * win_data = ((T_MFW_HDR *)win)->data;
	T_MMI_FM_IMGDRAW_STRUCT      * data = (T_MMI_FM_IMGDRAW_STRUCT *)win_data->user;
	char  currFile[FM_MAX_DIR_PATH_LENGTH];
	T_FM_CURDIR *cur_dir = fm_data->cur_dir;
	T_FM_IMG_STATE result = FM_UCP_NO_ERROR;

	TRACE_FUNCTION("mmi_fm_view_kbd_cb");

	if (!(e & KEY_MAKE))
	{
		return MFW_EVENT_CONSUMED;
	}
	if(cur_dir->dirinfo.img.cmd == FM_UCP_QCIFIMG_DRAW && cur_dir->dirinfo.img.state == FM_UCP_NO_ERROR)
	{
		//Viewer UCP created successfully. Handle the key events
		switch (k->code)
		{
			case KCD_LEFT:
				fm_data->opt_type = FM_OPTIONS_FILE;
				fm_data->opt_win = (T_MFW_HND)bookMenuStart(data->img_win, FMMenuOptionAttributes(),0);
				break;
			case KCD_RIGHT:
			case KCD_HUP:
				SEND_EVENT(win,FM_IMGDRAW_DESTROY,0,(void *)NULL);
				break;		
			case KCD_MNUUP:
				data->zoom = data->zoom * 2;
				if(data->zoom > MFW_FM_ZOOM_MAX)
					data->zoom = MFW_FM_ZOOM_MAX;
				sprintf(currFile,"%s%s/%s",cur_dir->dir_path,cur_dir->dir_name,cur_dir->obj_list[cur_dir->currentIndex ]->name);
				result = mfw_fm_imgViewer_setConfigs(currFile,FM_MFW_QCIF_WIDTH,FM_MFW_QCIF_HEIGHT,0,0,data->zoom, data->rotate, fm_data->source);			
				if(result != FM_UCP_NO_ERROR)
				{
					//Error configuring the Viewer UCP, deinit and destroy it
					TRACE_ERROR("Error configuring Viewer UCP");
					cur_dir->dirinfo.img.cmd = FM_UCP_QCIFIMG_DEINIT;
					cur_dir->dirinfo.img.state = FM_UCP_ERROR;
					result = mfw_fm_imgViewer_deinit();
					if(result != FM_UCP_NO_ERROR)
					{
						//Error deinitializing the Viewer UCP, destroy it
						TRACE_ERROR("Error deinitializing the Viewer UCP");
						cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
						cur_dir->dirinfo.img.state = FM_UCP_NONE;
						result = mfw_fm_imgViewer_destroy();
						if(result != FM_UCP_NO_ERROR)
							TRACE_ERROR("Error destroying the Viewer UCP");
					}
					return MFW_EVENT_CONSUMED;
				}
				displayMenuKeys(MENU_KEY_WAIT);
				cur_dir->dirinfo.img.cmd = FM_UCP_QCIFIMG_DRAW;		
				cur_dir->dirinfo.img.state = FM_UCP_NONE;
				result = mfw_fm_imgViewer_view();
				if(result != FM_UCP_NO_ERROR)
				{
					//Error drawing thumbnail in the Viewer UCP, deinit and destroy it
					TRACE_ERROR("Error drawing thumbnail in the Viewer UCP");
					cur_dir->dirinfo.img.cmd = FM_UCP_QCIFIMG_DEINIT;
					cur_dir->dirinfo.img.state = FM_UCP_ERROR;
					result = mfw_fm_imgViewer_deinit();
					if(result != FM_UCP_NO_ERROR)
					{
						//Error deinitializing the Viewer UCP, destroy it
						TRACE_ERROR("Error deinitializing the Viewer UCP");
						cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
						cur_dir->dirinfo.img.state = FM_UCP_NONE;
						result = mfw_fm_imgViewer_destroy();
						if(result != FM_UCP_NO_ERROR)
							TRACE_ERROR("Error destroying the Viewer UCP");
					}
				}
				break;
			case KCD_MNUDOWN:
				data->zoom = data->zoom / 2;
				if(data->zoom < MFW_FM_ZOOM_LOW)
					data->zoom = MFW_FM_ZOOM_LOW;
				sprintf(currFile,"%s%s/%s",cur_dir->dir_path,cur_dir->dir_name,cur_dir->obj_list[cur_dir->currentIndex ]->name);
				result = mfw_fm_imgViewer_setConfigs(currFile,FM_MFW_QCIF_WIDTH,FM_MFW_QCIF_HEIGHT,0,0,data->zoom, data->rotate,fm_data->source);			
				if(result != FM_UCP_NO_ERROR)
				{
					//Error configuring the Viewer UCP, deinit and destroy it
					TRACE_ERROR("Error configuring Viewer UCP");
					cur_dir->dirinfo.img.cmd = FM_UCP_QCIFIMG_DEINIT;
					cur_dir->dirinfo.img.state = FM_UCP_ERROR;
					result = mfw_fm_imgViewer_deinit();
					if(result != FM_UCP_NO_ERROR)
					{
						//Error deinitializing the Viewer UCP, destroy it
						TRACE_ERROR("Error deinitializing the Viewer UCP");
						cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
						cur_dir->dirinfo.img.state = FM_UCP_NONE;
						result = mfw_fm_imgViewer_destroy();
						if(result != FM_UCP_NO_ERROR)
							TRACE_ERROR("Error destroying the Viewer UCP");
					}
					return MFW_EVENT_CONSUMED;
				}
				displayMenuKeys(MENU_KEY_WAIT);
				cur_dir->dirinfo.img.cmd =FM_UCP_QCIFIMG_DRAW;		
				cur_dir->dirinfo.img.state = FM_UCP_NONE;
				result = mfw_fm_imgViewer_view();
				if(result != FM_UCP_NO_ERROR)
				{
					//Error drawing thumbnail in the Viewer UCP, deinit and destroy it
					TRACE_ERROR("Error drawing thumbnail in the Viewer UCP");
					cur_dir->dirinfo.img.cmd = FM_UCP_QCIFIMG_DEINIT;
					cur_dir->dirinfo.img.state = FM_UCP_ERROR;
					result = mfw_fm_imgViewer_deinit();
					if(result != FM_UCP_NO_ERROR)
					{
						//Error deinitializing the Viewer UCP, destroy it
						TRACE_ERROR("Error deinitializing the Viewer UCP");
						cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
						cur_dir->dirinfo.img.state = FM_UCP_NONE;
						result = mfw_fm_imgViewer_destroy();
						if(result != FM_UCP_NO_ERROR)
							TRACE_ERROR("Error destroying the Viewer UCP");
					}
				}
				break;
			case KCD_MNURIGHT:
				data->rotate = (T_FM_IMG_ROTATE) (data->rotate+1);
				if(data->rotate > MFW_FM_ROTATE_270) 
					data->rotate = MFW_FM_ROTATE_0;
				sprintf(currFile,"%s%s/%s",cur_dir->dir_path,cur_dir->dir_name,cur_dir->obj_list[cur_dir->currentIndex ]->name);
				dspl_ClearAll();
				displaySoftKeys(TxtSoftOptions,TxtSoftBack);
				 dspl_Enable(1);
	 			 mmi_fm_set_mmi_plane_to_front();
				result = mfw_fm_imgViewer_setConfigs(currFile,FM_MFW_QCIF_WIDTH,FM_MFW_QCIF_HEIGHT,0,0,data->zoom, data->rotate,fm_data->source);			
				if(result != FM_UCP_NO_ERROR)
				{
					//Error configuring the Viewer UCP, deinit and destroy it
					TRACE_ERROR("Error configuring Viewer UCP");
					cur_dir->dirinfo.img.cmd = FM_UCP_QCIFIMG_DEINIT;
					cur_dir->dirinfo.img.state = FM_UCP_ERROR;
					result = mfw_fm_imgViewer_deinit();
					if(result != FM_UCP_NO_ERROR)
					{
						//Error deinitializing the Viewer UCP, destroy it
						TRACE_ERROR("Error deinitializing the Viewer UCP");
						cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
						cur_dir->dirinfo.img.state = FM_UCP_NONE;
						result = mfw_fm_imgViewer_destroy();
						if(result != FM_UCP_NO_ERROR)
							TRACE_ERROR("Error destroying the Viewer UCP");
					}
					return MFW_EVENT_CONSUMED;
				}
				displayMenuKeys(MENU_KEY_WAIT);
				cur_dir->dirinfo.img.cmd =FM_UCP_QCIFIMG_DRAW;		
				cur_dir->dirinfo.img.state = FM_UCP_NONE;
				result = mfw_fm_imgViewer_view();
				if(result != FM_UCP_NO_ERROR)
				{
					//Error drawing thumbnail in the Viewer UCP, deinit and destroy it
					TRACE_ERROR("Error drawing thumbnail in the Viewer UCP");
					cur_dir->dirinfo.img.cmd = FM_UCP_QCIFIMG_DEINIT;
					cur_dir->dirinfo.img.state = FM_UCP_ERROR;
					result = mfw_fm_imgViewer_deinit();
					if(result != FM_UCP_NO_ERROR)
					{
						//Error deinitializing the Viewer UCP, destroy it
						TRACE_ERROR("Error deinitializing the Viewer UCP");
						cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
						cur_dir->dirinfo.img.state = FM_UCP_NONE;
						result = mfw_fm_imgViewer_destroy();
						if(result != FM_UCP_NO_ERROR)
							TRACE_ERROR("Error destroying the Viewer UCP");
					}
				}
				break;
			case KCD_MNULEFT:
				data->rotate = (T_FM_IMG_ROTATE) (data->rotate-1);
				if(data->rotate < MFW_FM_ROTATE_0)
					data->rotate = MFW_FM_ROTATE_270;
				sprintf(currFile,"%s%s/%s",cur_dir->dir_path,cur_dir->dir_name,cur_dir->obj_list[cur_dir->currentIndex ]->name);
				dspl_ClearAll();
				displaySoftKeys(TxtSoftOptions,TxtSoftBack);
				 dspl_Enable(1);
	 			 mmi_fm_set_mmi_plane_to_front();
				result = mfw_fm_imgViewer_setConfigs(currFile,FM_MFW_QCIF_WIDTH,FM_MFW_QCIF_HEIGHT,0,0,data->zoom, data->rotate,fm_data->source);			
				if(result != FM_UCP_NO_ERROR)
				{
					//Error configuring the Viewer UCP, deinit and destroy it
					TRACE_ERROR("Error configuring Viewer UCP");
					cur_dir->dirinfo.img.cmd = FM_UCP_QCIFIMG_DEINIT;
					cur_dir->dirinfo.img.state = FM_UCP_ERROR;
					result = mfw_fm_imgViewer_deinit();
					if(result != FM_UCP_NO_ERROR)
					{
						//Error deinitializing the Viewer UCP, destroy it
						TRACE_ERROR("Error deinitializing the Viewer UCP");
						cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
						cur_dir->dirinfo.img.state = FM_UCP_NONE;
						result = mfw_fm_imgViewer_destroy();
						if(result != FM_UCP_NO_ERROR)
							TRACE_ERROR("Error destroying the Viewer UCP");
					}
					return MFW_EVENT_CONSUMED;
				}
				displayMenuKeys(MENU_KEY_WAIT);
				cur_dir->dirinfo.img.cmd =FM_UCP_QCIFIMG_DRAW;	
				cur_dir->dirinfo.img.state = FM_UCP_NONE;
				result = mfw_fm_imgViewer_view();
				if(result != FM_UCP_NO_ERROR)
				{
					//Error drawing thumbnail in the Viewer UCP, deinit and destroy it
					TRACE_ERROR("Error drawing thumbnail in the Viewer UCP");
					cur_dir->dirinfo.img.cmd = FM_UCP_QCIFIMG_DEINIT;
					cur_dir->dirinfo.img.state = FM_UCP_ERROR;
					result = mfw_fm_imgViewer_deinit();
					if(result != FM_UCP_NO_ERROR)
					{
						//Error deinitializing the Viewer UCP, destroy it
						TRACE_ERROR("Error deinitializing the Viewer UCP");
						cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
						cur_dir->dirinfo.img.state = FM_UCP_NONE;
						result = mfw_fm_imgViewer_destroy();
						if(result != FM_UCP_NO_ERROR)
							TRACE_ERROR("Error destroying the Viewer UCP");
					}
				}
				break;
		} 
	}
	else if(cur_dir->dirinfo.img.cmd == FM_UCP_NONE && cur_dir->dirinfo.img.state == FM_UCP_NONE)
	{
		//Viewer UCP was not created successfully.
		switch (k->code)
		{
			case KCD_LEFT:
				fm_data->opt_type=FM_OPTIONS_FILE;
				fm_data->opt_win=(T_MFW_HND)bookMenuStart(data->img_win, FMMenuOptionAttributes(),0);
				break;
			case KCD_RIGHT:
			case KCD_HUP:
				SEND_EVENT(win,FM_IMGDRAW_DESTROY,0,(void *)NULL);
				break;		
		}
	}
	return MFW_EVENT_CONSUMED;
}

/*******************************************************************************
 $Function:    		mmi_fm_view_destroy

 $Description:		Destroys the image window and releases the allocated memory for the internal structure

 $Returns:		None

 $Arguments:		None
*******************************************************************************/
void mmi_fm_view_destroy(T_MMI_FM_IMGDRAW_STRUCT  * imgDraw_data)
{
	TRACE_FUNCTION("mmi_fm_view_destroy");
	
	mmi_fm_set_mmi_plane_to_front();
	winDelete(imgDraw_data->img_win);
	fm_data->img_win = NULL;
	mfwFree((U8 *)imgDraw_data, sizeof(T_MMI_FM_IMGDRAW_STRUCT));

}

/*******************************************************************************
 $Function:    		mmi_fm_aud_validate

 $Description:	 	Validates the files in the audio folder. 

 $Returns:		None

 $Arguments:		None
*******************************************************************************/
void mmi_fm_aud_validate(void)
{
	USHORT  count = 0;
	#ifdef FF_MMI_UNICODE_SUPPORT
		T_WCHAR  curFilename_uc[FM_MAX_OBJ_NAME_LENGTH];
	#else
		char curFilename_u8[FM_MAX_OBJ_NAME_LENGTH];
	#endif
	/* January 29, 2008 DRT:OMAPS00156759 (x0082844) --> End*/
		
	char ext[FM_MAX_EXT_LENGTH];
	T_FM_CURDIR *cur_dir = fm_data->cur_dir;
	
	TRACE_FUNCTION ("mmi_fm_aud_validate()");
	//TRACE_EVENT_P1("cur_dir->dirinfo.aud.state03 %d",cur_dir->dirinfo.aud.state);
	for (count=0; count<cur_dir->num_objs; count++)
	{
		/* January 29, 2008 DRT:OMAPS00156759 (x0082844) For Unicode Support--> Start*/
		#ifdef FF_MMI_UNICODE_SUPPORT
		wstrcpy(curFilename_uc,cur_dir->obj_list[count]->name_uc);
		#else
		strcpy(curFilename_u8,cur_dir->obj_list[count]->name);
		#endif
		/* January 29, 2008 DRT:OMAPS00156759 (x0082844) --> End*/
		cur_dir->obj_data[count] = (T_FM_OBJ_DATA*)mfwAlloc(sizeof(T_FM_OBJ_DATA));
		/* January 29, 2008 DRT:OMAPS00156759 (x0082844) For Unicode Support--> Start*/
			#ifdef FF_MMI_UNICODE_SUPPORT
				TRACE_EVENT_P2("File %s type %d",cur_dir->obj_list[count]->name_uc,cur_dir->obj_list[count]->type);
			#else
				TRACE_EVENT_P2("File %s type %d",cur_dir->obj_list[count]->name,cur_dir->obj_list[count]->type);
			#endif
		/* January 29, 2008 DRT:OMAPS00156759 (x0082844) --> End*/
		if(cur_dir->obj_list[count]->type == OBJECT_TYPE_FILE )
		{
			/* January 29, 2008 DRT:OMAPS00156759 (x0082844) For Unicode Support--> Start*/
			#ifdef FF_MMI_UNICODE_SUPPORT
				convert_unicode_to_u8(wstrchr(curFilename_uc,'.')+1, ext);
			#else 
				strcpy(ext, mmi_fm_get_ext(curFilename_u8));
			#endif
			/* January 29, 2008 DRT:OMAPS00156759 (x0082844) --> End*/
			if(strcmp((const char*)ext, "mid") == 0 ) 
			{
				cur_dir->obj_list[count]->type = OBJECT_TYPE_AUDIO_MIDI;
			}
			else if(strcmp((const char*)ext, "mp3") == 0 ) 
			{
				cur_dir->obj_list[count]->type = OBJECT_TYPE_AUDIO_MP3;
			}
			else if(strcmp((const char*)ext, "aac") == 0 ) 
			{
				cur_dir->obj_list[count]->type = OBJECT_TYPE_AUDIO_AAC;
			}  /* Apr 06, 2007 DRT: OMAPS00124874 x0039928 */
			else if(strcmp((const char*)ext, "xmf") == 0 ) 
			{
				cur_dir->obj_list[count]->type = OBJECT_TYPE_AUDIO_XMF;
			}
			else if(strcmp((const char*)ext, "imy") == 0 ) 
			{
				cur_dir->obj_list[count]->type = OBJECT_TYPE_AUDIO_IMY;
			}
			else if(strcmp((const char*)ext, "mmf") == 0 ) 
			{
				cur_dir->obj_list[count]->type = OBJECT_TYPE_AUDIO_MMF;
			}
			else if(strcmp((const char*)ext, "mxmf") == 0 ) 
			{
				cur_dir->obj_list[count]->type = OBJECT_TYPE_AUDIO_MXMF;
			}
			else if(strcmp((const char*)ext, "sms") == 0 ) 
			{
				cur_dir->obj_list[count]->type = OBJECT_TYPE_AUDIO_SMS;
			}
			else if(strcmp((const char*)ext, "wav") == 0 ) 
			{
				cur_dir->obj_list[count]->type = OBJECT_TYPE_AUDIO_WAV;
			}
			else
				cur_dir->obj_list[count]->type = OBJECT_TYPE_AUDIO;
		}
		/* January 29, 2008 DRT:OMAPS00156759 (x0082844) For Unicode Support--> Start*/
		#ifdef FF_MMI_UNICODE_SUPPORT
			TRACE_EVENT_P2("File %s type %d",cur_dir->obj_list[count]->name_uc,cur_dir->obj_list[count]->type);
		#else
			TRACE_EVENT_P2("File %s type %d",cur_dir->obj_list[count]->name,cur_dir->obj_list[count]->type);
		#endif
		/* January 29, 2008 DRT:OMAPS00156759 (x0082844) --> End*/
	}
}

/*******************************************************************************
 $Function:    		mmi_fm_aud_list_cb

 $Description:		Call back function for the audio list window

 $Returns:		None

 $Arguments:		Parent		-window handler
 				List Data		-Menu list data
*******************************************************************************/

void mmi_fm_aud_list_cb(T_MFW_HND * Parent, ListMenuData * ListData)
{
	T_MFW_WIN       * win_data;
	T_MMI_FM_STRUCT* fm_data;
	T_FM_CURDIR *cur_dir;
	char  currFilePath[FM_MAX_DIR_PATH_LENGTH];
	T_FM_AUD_STATE aud_state;
	int state;
	
	
       win_data = ((T_MFW_HDR *)Parent)->data;
       fm_data = (T_MMI_FM_STRUCT*)win_data->user;
	cur_dir = fm_data->cur_dir;
	TRACE_EVENT_P1("Reason %d",ListData->Reason);
	switch(ListData->Reason)
	{
		case LISTS_REASON_SELECT:
			cur_dir->currentIndex=ListData->CursorPosition;
			//Jun 26, 2007 DRT:OMAPS00135749  x0062174(Nimitha)
			state = mmi_get_aud_state_status();
			if( state == FM_AUD_PLAY)
			{
			 	cur_dir->dirinfo.aud.state = FM_AUD_PLAY;
				mmi_set_aud_state_status(FM_AUD_NONE);
			}
			 /* Apr 06, 2007 DRT: OMAPS00124874 x0039928 */		

			//Jun 26, 2007 DRT:OMAPS00135749  x0062174(Nimitha)
                    //May28,07 DRT:OMAPS00132459  x0061560(sateeshg)
			/*if(aud_state_back )
			{
				displayMenuKeys(MENU_KEY_UP_DOWN_STOP);
				cur_dir->dirinfo.aud.state = FM_AUD_PLAY;  
				aud_state_back=0;
			}*/
				
			
			cur_dir->currentIndex=ListData->CursorPosition;
			 /* Apr 06, 2007 DRT: OMAPS00124874 x0039928 */
			
                   //May28,07 DRT:OMAPS00132459  x0061560(sateeshg)
			/*if(aud_state_back )
			{
				displayMenuKeys(MENU_KEY_UP_DOWN_STOP);
				cur_dir->dirinfo.aud.state = FM_AUD_PLAY;
				aud_state_back=0;
			}*/
				
			
			if(ListData->selectKey==TRUE)
			{
				if(cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_AUDIO  || 
				    cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_AUDIO_MIDI  ||
				    cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_AUDIO_MP3  ||
				    cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_AUDIO_AAC ||
				    cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_AUDIO_XMF ||
				    cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_AUDIO_IMY ||
				    cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_AUDIO_MMF ||
				    cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_AUDIO_MXMF ||
				    cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_AUDIO_SMS ||
				    cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_AUDIO_WAV)
				{

					switch(cur_dir->dirinfo.aud.state) 
					{
						case FM_AUD_NONE:
						{
							/* January 29, 2008 DRT:OMAPS00156759 (x0082844) For Unicode Support--> Start*/
							#ifdef FF_MMI_UNICODE_SUPPORT
								T_WCHAR filename_uc[FM_MAX_DIR_PATH_LENGTH];
							#endif
							/* January 29, 2008 DRT:OMAPS00156759 (x0082844) --> End*/
							
							cur_dir->dirinfo.aud.state = FM_AUD_PLAY;
							switch(fm_data->source)
							{
								case FM_NOR_FLASH:
									/* January 29, 2008 DRT:OMAPS00156759 (x0082844) For Unicode Support--> Start*/
									#ifdef FF_MMI_UNICODE_SUPPORT
										sprintf(currFilePath,"%s%s%s/","/FFS",cur_dir->dir_path,cur_dir->dir_name);
									#else
										sprintf(currFilePath,"%s%s%s/%s","/FFS",cur_dir->dir_path,cur_dir->dir_name,cur_dir->obj_list[cur_dir->currentIndex]->name);
									#endif
									/* January 29, 2008 DRT:OMAPS00156759 (x0082844) --> End*/								
									break;

								case FM_NORMS_FLASH:
									/* January 29, 2008 DRT:OMAPS00156759 (x0082844) For Unicode Support--> Start*/
									#ifdef FF_MMI_UNICODE_SUPPORT
										sprintf(currFilePath,"%s%s%s/","/NOR",cur_dir->dir_path,cur_dir->dir_name);
									#else
										sprintf(currFilePath,"%s%s%s/%s","/NOR",cur_dir->dir_path,cur_dir->dir_name,cur_dir->obj_list[cur_dir->currentIndex]->name);
									#endif
									/* January 29, 2008 DRT:OMAPS00156759 (x0082844) --> End*/	
									break;									

								case FM_NAND_FLASH:
									/* January 29, 2008 DRT:OMAPS00156759 (x0082844) For Unicode Support--> Start*/
									#ifdef FF_MMI_UNICODE_SUPPORT
										sprintf(currFilePath,"%s%s%s/","/NAND",cur_dir->dir_path,cur_dir->dir_name);
									#else
										sprintf(currFilePath,"%s%s%s/%s","/NAND",cur_dir->dir_path,cur_dir->dir_name,cur_dir->obj_list[cur_dir->currentIndex]->name);
									#endif
									/* January 29, 2008 DRT:OMAPS00156759 (x0082844) --> End*/	
									break;

								case FM_T_FLASH:
									#ifdef FF_MMI_UNICODE_SUPPORT
										sprintf(currFilePath,"%s%s%s/","/MMC",cur_dir->dir_path,cur_dir->dir_name);
									#else
										sprintf(currFilePath,"%s%s%s/%s","/MMC",cur_dir->dir_path,cur_dir->dir_name,cur_dir->obj_list[cur_dir->currentIndex]->name);
									#endif
									break;
							}

							/* January 29, 2008 DRT:OMAPS00156759 (x0082844) For Unicode Support--> Start*/
							#ifdef FF_MMI_UNICODE_SUPPORT
								convert_u8_to_unicode(currFilePath, filename_uc);
								wstrcat(filename_uc, cur_dir->obj_list[cur_dir->currentIndex]->name_uc);
							#endif
							/* January 29, 2008 DRT:OMAPS00156759 (x0082844) --> End*/	
						if(mmi_progress_bar == PB_OFF)
						{
							IsMP3Playing = TRUE;//Daisy tang added for Real Resume feature 20071107
								/* January 29, 2008 DRT:OMAPS00156759 (x0082844) For Unicode Support--> Start*/
								#ifdef FF_MMI_UNICODE_SUPPORT
								   aud_state =mfw_fm_audPlay(filename_uc, cur_dir->obj_list[cur_dir->currentIndex]->type, mmi_progress_bar);
								#else
							        aud_state =mfw_fm_audPlay(currFilePath, cur_dir->obj_list[cur_dir->currentIndex]->type, mmi_progress_bar);
								#endif
								/* January 29, 2008 DRT:OMAPS00156759 (x0082844) --> End*/	
							//Jun 28, 2007 DRT:OMAPS00135749  x0062174(Nimitha)
							/* //May28,07 DRT:OMAPS00132459  x0061560(sateeshg)
							aud_state_back=1;*/
							if(aud_state == FM_AUD_NO_ERROR)
								displayMenuKeys(MENU_KEY_UP_DOWN_STOP);
							else
								mmi_fm_app_show_info(Parent,TxtPlay,TxtFailed,TxtNull,TxtSoftBack,NULL,THREE_SECS,KEY_RIGHT | KEY_CLEAR | KEY_HUP);
						}
						else
						{	
							if((cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_AUDIO_MP3) ||
								(cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_AUDIO_AAC) ||
								(cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_AUDIO_MIDI))
							{
								IsMP3Playing = TRUE;//Daisy tang added for Real Resume feature 20071107
									/* January 29, 2008 DRT:OMAPS00156759 (x0082844) For Unicode Support--> Start*/
									#ifdef FF_MMI_UNICODE_SUPPORT
										aud_state =mfw_fm_audPlay(filename_uc, cur_dir->obj_list[cur_dir->currentIndex]->type, mmi_progress_bar);
									#else

								aud_state =mfw_fm_audPlay(currFilePath, cur_dir->obj_list[cur_dir->currentIndex]->type, mmi_progress_bar);
									#endif
								if(aud_state == FM_AUD_NO_ERROR)
								{
									//Jul 09, 2007 DRT:OMAPS00138065 x0062174(Nimitha)
									displayMenuKeys(MENU_KEY_UP_DOWN_STOP);
									progress_bar(Parent);
								}
								//Jul 09, 2007 DRT:OMAPS00138065 x0062174(Nimitha)
								else
									mmi_fm_app_show_info(Parent,TxtPlay,TxtFailed,TxtNull,TxtSoftBack,NULL,THREE_SECS,KEY_RIGHT | KEY_CLEAR | KEY_HUP);
							}
							else
							{
								IsMP3Playing = TRUE;//Daisy tang added for Real Resume feature 20071107
									/* January 29, 2008 DRT:OMAPS00156759 (x0082844) For Unicode Support--> Start*/
									#ifdef FF_MMI_UNICODE_SUPPORT
										aud_state =mfw_fm_audPlay(filename_uc, cur_dir->obj_list[cur_dir->currentIndex]->type, PB_OFF);
									#else

								aud_state =mfw_fm_audPlay(currFilePath, cur_dir->obj_list[cur_dir->currentIndex]->type, PB_OFF);
									#endif
									/* January 29, 2008 DRT:OMAPS00156759 (x0082844) --> End*/	

								if(aud_state == FM_AUD_NO_ERROR)
									displayMenuKeys(MENU_KEY_UP_DOWN_STOP);
								else
									mmi_fm_app_show_info(Parent,TxtPlay,TxtFailed,TxtNull,TxtSoftBack,NULL,THREE_SECS,KEY_RIGHT | KEY_CLEAR | KEY_HUP);
							}
						}
						}
						break;
						case FM_AUD_PLAY:
							cur_dir->dirinfo.aud.state = FM_AUD_NONE;
							IsMP3Playing = FALSE;//Daisy tang added for Real Resume feature 20071107
							aud_state = mfw_fm_audStop();
							if(aud_state != FM_AUD_NO_ERROR)
								mmi_fm_app_show_info(Parent,TxtError,TxtNull,TxtNull,TxtSoftBack,NULL,THREE_SECS,KEY_RIGHT | KEY_CLEAR | KEY_HUP);
							displayMenuKeys(MENU_KEY_UP_DOWN_PLAY);
							
							break;
					}
				}
				else
				{
					mmi_fm_open();
				}
			}
			else
			{
				
				if(cur_dir->dirinfo.aud.state == FM_AUD_PLAY)
				{
					cur_dir->dirinfo.aud.state = FM_AUD_NONE;
					IsMP3Playing = FALSE;//Daisy tang added for Real Resume feature 20071107
					mfw_fm_audStop();
					
				}
				fm_data->opt_type=FM_OPTIONS_FOLDER;
				fm_data->opt_win=(T_MFW_HND)bookMenuStart(fm_data->root_win, FMMenuOptionAttributes(),0);
			}
			break;
		case LISTS_REASON_BACK:	
		case LISTS_REASON_HANGUP: /* Apr 10, 2007 DRT: OMAPS00125325 x0039928 */
			fm_data->opt_type=FM_BACK;
			
	/*		if(cur_dir->dirinfo.aud.state == FM_AUD_PLAY)
			{
				cur_dir->dirinfo.aud.state = FM_AUD_NONE;
				mfw_fm_audStop();
			}*/

			//Jun 26, 2007 DRT:OMAPS00135749  x0062174(Nimitha)
			if(cur_dir->dirinfo.aud.state == FM_AUD_PLAY)
				mmi_set_aud_state_status( FM_AUD_PLAY);
			
			mmi_fm_goback();
	
			TRACE_EVENT_P1("cur_dir->dirinfo.aud.state222 %d",cur_dir->dirinfo.aud.state);
			break;
		case LISTS_REASON_DRAWCOMPLETE:
			displaySoftKeys(TxtSoftOptions,TxtSoftBack);
			//Jul 03, 2007 DRT:OMAPS00135749  x0062174(Nimitha)
			state = mmi_get_aud_state_status();
			if( state == FM_AUD_PLAY)
				displayMenuKeys(MENU_KEY_UP_DOWN_STOP);
			else	
			displayMenuKeys(MENU_KEY_UP_DOWN_PLAY);
			if(fm_data->list_state == FM_LIST_CREATE)
				fm_data->list_state = FM_LIST_UPDATE;
	/* Mar 15, 2007 DRT: OMAPS00120187 x0039928   */
	/* Fix: mfw_fm_audStop is commented                  */
	/*		if(cur_dir->dirinfo.aud.state == FM_AUD_PLAY)
			{
				cur_dir->dirinfo.aud.state = FM_AUD_NONE;
				mfw_fm_audStop();
			}*/
			TRACE_FUNCTION("LISTS_REASON_DRAWCOMPLETE");
			break;
				
	}
}

/*******************************************************************************
 $Function:    		mmi_fm_aud_list_create

 $Description:		Creates the audio files list

 $Returns:		Created Window Pointer

 $Arguments:		win		-Parent window
*******************************************************************************/
T_MFW_HND mmi_fm_aud_list_create(T_MFW_HND win)
{
	USHORT  file_count = 0, list_count=0;
	T_FM_CURDIR *cur_dir = fm_data->cur_dir;
	
	TRACE_FUNCTION ("mmi_fm_aud_list_create()");
	//TRACE_EVENT_P1("cur_dir->dirinfo.aud.state04 %d",cur_dir->dirinfo.aud.state);
	//Traverse through the list to find out valid audio objects in the given directory
	mmi_fm_aud_validate();
	
	for (file_count=0; file_count<cur_dir->num_objs; file_count++)
	{
		mnuInitDataItem(&fm_data->menu_list_data->List[list_count]);
		
		/* January 29, 2008 DRT:OMAPS00156759 (x0082844) For Unicode Support--> Start*/
		#ifdef FF_MMI_UNICODE_SUPPORT
			{
				char *filename; 
				
				filename = (char *)mfwAlloc((wstrlen(cur_dir->obj_list[file_count]->name_uc)+1)*2);
				unicode_to_char_array(cur_dir->obj_list[file_count]->name_uc, filename);
				
				fm_data->menu_list_data->List[list_count].str  = filename;
			}
		#else
			fm_data->menu_list_data->List[list_count].str  = (char *)cur_dir->obj_list[file_count]->name;
		#endif
		/* January 29, 2008 DRT:OMAPS00156759 (x0082844) --> End*/
		
		//TRACE_EVENT_P2("file %s type %d", cur_dir->obj_list[file_count]->name_uc,cur_dir->obj_list[file_count]->type);
		
		fm_data->menu_list_data->List[list_count].flagFunc = item_flag_none;
		 /* Apr 06, 2007 DRT: OMAPS00124874 x0039928 */
		switch( cur_dir->obj_list[file_count]->type)
		{
			case OBJECT_TYPE_AUDIO:
			case OBJECT_TYPE_AUDIO_MIDI:
			case OBJECT_TYPE_AUDIO_MP3:
		 	case OBJECT_TYPE_AUDIO_AAC:
			case OBJECT_TYPE_AUDIO_XMF:
			case OBJECT_TYPE_AUDIO_IMY:
			case OBJECT_TYPE_AUDIO_MMF:
			case OBJECT_TYPE_AUDIO_MXMF:
			case OBJECT_TYPE_AUDIO_SMS:
			case OBJECT_TYPE_AUDIO_WAV:
			{
				TRACE_EVENT("Audio");
				fm_data->menu_list_data->List[list_count].icon=&fmIconAudioFile;
			//	cur_dir->obj_list[file_count]->type = mfw_fm_aud_get_type(cur_dir->obj_list[file_count]->name);
			}
			list_count++;
			break;
			case OBJECT_TYPE_FILE:
			{
				TRACE_EVENT("File");
				fm_data->menu_list_data->List[list_count].icon=&fmIconFile;
			}
			list_count++;
			break;
			case OBJECT_TYPE_FOLDER:
			{
				TRACE_EVENT("Folder");
				fm_data->menu_list_data->List[list_count].icon=&fmIconFolder;
			}
			list_count++;
			break;
		}
		
	}
	TRACE_EVENT_P1("Total %d",list_count);
	//TRACE_EVENT_P1("cur_dir->dirinfo.aud.state05 %d",cur_dir->dirinfo.aud.state);
	fm_data->menu_list_data->ListLength = list_count;
	fm_data->menu_list_data->ListPosition = cur_dir->startIndex+1;
	fm_data->menu_list_data->CursorPosition = cur_dir->startIndex+1;
	if(cur_dir->num_objs < 3)
		fm_data->menu_list_data->SnapshotSize =cur_dir->num_objs;// list_count;		
	else
		fm_data->menu_list_data->SnapshotSize =3;// list_count;
	fm_data->menu_list_data->Font = 1;
	fm_data->menu_list_data->LeftSoftKey = TxtSoftOptions;
	fm_data->menu_list_data->RightSoftKey = TxtSoftBack;
	fm_data->menu_list_data->KeyEvents = KEY_ALL;
	fm_data->menu_list_data->Reason = 0;
	fm_data->menu_list_data->Strings = TRUE;
	fm_data->menu_list_data->Attr   = (MfwMnuAttr*)&FMList_Attrib;
	fm_data->menu_list_data->autoDestroy    = FALSE;
	fm_data->menu_list_data->block_keys =  (BOOL)FALSE;
	cur_dir->dirinfo.aud.state = FM_AUD_NONE;

	/* OMAPS00151698,x0056422 */
	#ifdef FF_MMI_A2DP_AVRCP
	mmi_set_aud_state_status(FM_AUD_NONE);
	tGlobalBmiBtStruct.tAudioState =FM_AUD_NONE;
	#endif //FF_MMI_A2DP_AVRCP

	fm_data->list_state = FM_LIST_CREATE;
	//Create the List window with default file and folder icons
	/* January 29, 2008 DRT:OMAPS00156759 (x0082844) For Unicode Support--> Start*/
	#ifdef FF_MMI_UNICODE_SUPPORT
		listIconsDisplayListMenu(win, fm_data->menu_list_data, (ListCbFunc)mmi_fm_aud_list_cb, TRUE);
	#else
		listIconsDisplayListMenu(win, fm_data->menu_list_data, (ListCbFunc)mmi_fm_aud_list_cb, FALSE);
	#endif
	/* January 29, 2008 DRT:OMAPS00156759 (x0082844) --> End*/

	dspl_Enable(1);
	return fm_data->menu_list_data->win;
}

/*******************************************************************************
 $Function:    		mmi_fm_nofile_cb

 $Description:		Callback function for "no files loaded" dialog

 $Returns:		None

 $Arguments:		win			-current window
				identifier		-window id
				reason		-Event cause.
*******************************************************************************/
void mmi_fm_nofile_cb (T_MFW_HND win, USHORT identifier, SHORT reason)
{
	TRACE_FUNCTION("mmi_fm_nofile_cb" );
	
	mmi_fm_goback();
}

/*******************************************************************************
 $Function:    		mmi_fm_goback

 $Description:		returns to the previous directory. 

 $Returns:		None

 $Arguments:		None
*******************************************************************************/
void mmi_fm_goback(void)
{
	char *strTempPtr;
	T_FM_CURDIR *cur_dir = fm_data->cur_dir;
	
	TRACE_FUNCTION("mmi_fm_goback");
	//TRACE_EVENT_P1("cur_dir->dirinfo.aud.state1 %d",cur_dir->dirinfo.aud.state);
	cur_dir->depth--;
	//TRACE_EVENT_P1("cur_dir->dirinfo.aud.state2 %d",cur_dir->dirinfo.aud.state);
	mmi_fm_set_mmi_plane_to_front();
	if( cur_dir->depth <= 0 )
	{
		//Root directory, exit the list window
		TRACE_EVENT("Root directory");
		if(fm_data->list_win)
		{
			listsIconsDestroy(fm_data->list_win);
			fm_data->list_win=NULL;
			mmi_fm_list_destroy( fm_data->root_win );
		}
		if(cur_dir->dir_type == OBJECT_TYPE_IMAGE_FOLDER)
		{
			if(cur_dir->dirinfo.img.ipMsl)
			{
				aci_delete(cur_dir->dirinfo.img.ipMsl);
				cur_dir->dirinfo.img.ipMsl=0;
			}
		}
		SEND_EVENT (fm_data->root_win, FM_DESTROY, 0, (void *)NULL);
	}
	else
	{
		
		//Extract the previous directory path 
		strTempPtr=(char*) &cur_dir->dir_path + strlen(cur_dir->dir_path)-1;
		*strTempPtr='\0';
		strTempPtr--;
		while( *strTempPtr != '/'  )
		{
			strTempPtr = strTempPtr - 1;
		}
		strTempPtr++;
		strcpy(cur_dir->dir_name,strTempPtr);
		*strTempPtr='\0';
		
		//Destroy the current list
		if(fm_data->list_win)
		{
			listsIconsDestroy(fm_data->list_win);
			fm_data->list_win=NULL;
			mmi_fm_list_destroy( fm_data->root_win );
		}
		
		//Populate the new list
		fm_data->opt_type=FM_BACK;
		SEND_EVENT (fm_data->root_win, FM_INIT, 0, (void *)NULL);
		return;
	}
}

/*******************************************************************************
 $Function:    		mmi_fm_goback

 $Description:		populates the list from the selected directory

 $Returns:		None

 $Arguments:		None
*******************************************************************************/
void mmi_fm_open (void)
{
	char curDir[FM_MAX_DIR_PATH_LENGTH];
	T_FM_CURDIR *cur_dir = fm_data->cur_dir;
	TRACE_FUNCTION ("mmi_fm_open()");
	if( (cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_IMAGE_FOLDER) ||
	     (cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_AUDIO_FOLDER) ||
	     (cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_FOLDER)  )
	{
		cur_dir->depth ++;
		//Update the current directory name with the selected directory
		if(cur_dir->dir_name[0]!='\0')
		{
			sprintf(curDir,"%s%s/",cur_dir->dir_path,cur_dir->dir_name);
			strcpy(cur_dir->dir_path,curDir);
			strcpy(cur_dir->dir_name , cur_dir->obj_list[cur_dir->currentIndex]->name);
		}
		//Destroy the current list
		if(fm_data->list_win)
		{
			listsIconsDestroy(fm_data->list_win);
			fm_data->list_win=NULL;
			mmi_fm_list_destroy( fm_data->root_win);
		}
		//Populate the new list
		fm_data->opt_type=FM_OPEN;
		SEND_EVENT (fm_data->root_win, FM_INIT, 0, (void *)NULL);
	}
	else if ( ( cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_IMAGE) ||
		( cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_IMAGE))
	{
		TRACE_EVENT("Invalid object found");
	}
}
 
/*******************************************************************************
 $Function:    		mmi_fm_rename

 $Description:		Creates an editor for editing the selected objects name

 $Returns:		Execution status

 $Arguments:		mnu		-Pointer to current menu
 				item 	-Pointer to current menu item
*******************************************************************************/
GLOBAL int mmi_fm_rename (MfwMnu* m, MfwMnuItem* i)
{
	T_MFW_HND parent_win = mfw_parent(mfw_header());

	TRACE_FUNCTION ("mmi_fm_rename()");
	
	mmi_fm_rename_editor_create(parent_win);
	
	return MFW_EVENT_CONSUMED;
}

/*******************************************************************************
 $Function:    		mmi_fm_rename_editor_create

 $Description:		Create an editor for editing the object name

 $Returns:		Created Window Pointer

 $Arguments:		parent_win		-parent_win window
*******************************************************************************/
T_MFW_HND mmi_fm_rename_editor_create(T_MFW_HND parent_win)
{
	T_MFW_HND  win;
	T_AUI_EDITOR_DATA	editor_data;
	T_FM_CURDIR *cur_dir = fm_data->cur_dir;

	TRACE_FUNCTION ("mmi_fm_rename_editor_create");

	fm_data->edt_buf = (char *)mfwAlloc(FM_MAX_OBJ_NAME_LENGTH);

	memset(&editor_data,'\0',sizeof(editor_data));
	//Update the editor buffer with the current object name 
/* February 8, 2008 DRT:OMAPS00156759 (x0083025) For Unicode Support--> Start*/	
#ifdef FF_MMI_UNICODE_SUPPORT
	// unicode support is there only for audio files
	if (fm_data->app == FM_AUDIO)
		convert_unicode_to_u8(cur_dir->obj_list[cur_dir->currentIndex]->name_uc, fm_data->edt_buf);
	else
#endif 
	strcpy(fm_data->edt_buf, cur_dir->obj_list[cur_dir->currentIndex]->name);
 	/*
	** Initialise the editor
	*/
	AUI_edit_SetDefault(&editor_data);
	AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)fm_data->edt_buf, FM_MAX_OBJ_NAME_LENGTH);
	AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtRename, NULL);
	AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtSoftBack);
	AUI_edit_SetEvents(&editor_data, 0, TRUE, FOREVER, (T_AUI_EDIT_CB)mmi_fm_rename_editor_exec_cb);
	win = AUI_edit_Start(parent_win, &editor_data);


	return win;

}

/*******************************************************************************
 $Function:    		mmi_fm_rename_editor_exec_cb

 $Description:		Event handler for the editor

 $Returns:		None

 $Arguments:		win			-current window
				identifier		-window id
				reason		-Event cause.
*******************************************************************************/
static void mmi_fm_rename_editor_exec_cb(T_MFW_HND win, USHORT identifier, SHORT reason)
{
	T_FM_CURDIR *cur_dir = fm_data->cur_dir;
	T_MFW_FM_STATUS status = FM_NO_ERROR;

	char * fileExt;
	BOOL valid_ext = FALSE;
	
	TRACE_FUNCTION ("mmi_fm_rename_editor_exec_cb()");

	
	switch (reason)
	{
		case INFO_KCD_LEFT:
		{	
			/*
			** If there is no string entered, treat this as if it was a "Cancel"
			*/
			if (fm_data->edt_buf[0] == NULL)
			{
				mmi_fm_app_show_info(win,TxtRename,TxtFailed,TxtNull,TxtSoftBack,(T_VOID_FUNC)mmi_fm_rename_cb,THREE_SECS,KEY_RIGHT | KEY_CLEAR | KEY_HUP);
			}
			else
			{
				//If the file extn is not jpg, send cancel event
				fileExt = (char *)mmi_fm_get_ext((char *) fm_data->edt_buf);
				switch(cur_dir->obj_list[cur_dir->currentIndex]->type)
				{
					case OBJECT_TYPE_IMAGE:
						if(strcmp((const char*)fileExt, "jpg") != 0 ) 
						{
							valid_ext = FALSE;
						}
						else
						{
							valid_ext = TRUE;
						}
						break;
					case OBJECT_TYPE_AUDIO_MIDI:
						if(strcmp((const char*)fileExt, "mid") != 0 ) 
						{
							valid_ext = FALSE;
						}
						else
						{
							valid_ext = TRUE;
						}
						break;
					case OBJECT_TYPE_AUDIO_MP3:
						if(strcmp((const char*)fileExt, "mp3") != 0 ) 
						{
							valid_ext = FALSE;
						}
						else
						{
							valid_ext = TRUE;
						}
						break;
					case OBJECT_TYPE_AUDIO_AAC:
						if(strcmp((const char*)fileExt, "aac") != 0 ) 
						{
							valid_ext = FALSE;
						}
						else
						{
							valid_ext = TRUE;
						}
						break;
				 /* Apr 06, 2007 DRT: OMAPS00124874 x0039928 */
					case OBJECT_TYPE_AUDIO_XMF:
						if(strcmp((const char*)fileExt, "xmf") != 0 ) 
						{
							valid_ext = FALSE;
						}
						else
						{
							valid_ext = TRUE;
						}
						break;
					case OBJECT_TYPE_AUDIO_IMY:
						if(strcmp((const char*)fileExt, "imy") != 0 ) 
						{
							valid_ext = FALSE;
						}
						else
						{
							valid_ext = TRUE;
						}
						break;
					case OBJECT_TYPE_AUDIO_MMF:
						if(strcmp((const char*)fileExt, "mmf") != 0 ) 
						{
							valid_ext = FALSE;
						}
						else
						{
							valid_ext = TRUE;
						}
						break;
					case OBJECT_TYPE_AUDIO_MXMF:
						if(strcmp((const char*)fileExt, "mxmf") != 0 ) 
						{
							valid_ext = FALSE;
						}
						else
						{
							valid_ext = TRUE;
						}
						break;
					case OBJECT_TYPE_AUDIO_SMS:
						if(strcmp((const char*)fileExt, "sms") != 0 ) 
						{
							valid_ext = FALSE;
						}
						else
						{
							valid_ext = TRUE;
						}
						break;
					case OBJECT_TYPE_AUDIO_WAV:
						if(strcmp((const char*)fileExt, "wav") != 0 ) 
						{
							valid_ext = FALSE;
						}
						else
						{
							valid_ext = TRUE;
						}
						break;
					case OBJECT_TYPE_FILE:
					case OBJECT_TYPE_AUDIO:
					case OBJECT_TYPE_FOLDER:
					case OBJECT_TYPE_IMAGE_FOLDER:
					case OBJECT_TYPE_AUDIO_FOLDER:
							valid_ext = TRUE;
						break;
				}
				if(valid_ext == FALSE)
				{
					TRACE_EVENT("Invalid Extension");
					mmi_fm_app_show_info( win,TxtNoExtension,TxtNull,TxtNull,TxtSoftBack,(T_VOID_FUNC)mmi_fm_rename_cb,THREE_SECS,KEY_RIGHT | KEY_CLEAR | KEY_HUP);
				}
				else 
				{
					if( cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_IMAGE&&
						cur_dir->obj_data[cur_dir->currentIndex]->image.thumbnail == TRUE)
					{
						char  t_oldFilename[FM_MAX_OBJ_NAME_LENGTH];
						char  t_newFilename[FM_MAX_OBJ_NAME_LENGTH];

						valid_ext = TRUE;
						strcpy(t_oldFilename,cur_dir->obj_list[cur_dir->currentIndex]->name);
						strcpy(t_newFilename,fm_data->edt_buf);
						mmi_fm_get_filename(t_oldFilename);
						mmi_fm_get_filename(t_newFilename);
						status =mfw_fm_rename_image(cur_dir->dir_path, cur_dir->dir_name,t_oldFilename,t_newFilename,fm_data->source);					
					}
					else
					{
					/* February 8, 2008 DRT:OMAPS00156759 (x0083025) For Unicode Support--> Start*/	
					#ifdef FF_MMI_UNICODE_SUPPORT
						T_WCHAR oldFilename[FM_MAX_DIR_PATH_LENGTH];
						T_WCHAR newFilename[FM_MAX_DIR_PATH_LENGTH];	

						char oldFilename_u8[FM_MAX_DIR_PATH_LENGTH];
						char newFilename_u8[FM_MAX_DIR_PATH_LENGTH];

						sprintf(oldFilename_u8,"%s%s/",cur_dir->dir_path, cur_dir->dir_name);
						sprintf(newFilename_u8,"%s%s/%s",cur_dir->dir_path, cur_dir->dir_name, fm_data->edt_buf);

						// only audio files have unicode support at the moment
						if (fm_data->app != FM_AUDIO)
							strcat(oldFilename_u8, cur_dir->obj_list[cur_dir->currentIndex]->name);
						
						convert_u8_to_unicode(oldFilename_u8, oldFilename);
						convert_u8_to_unicode(newFilename_u8, newFilename);

						if (fm_data->app == FM_AUDIO)
							wstrcat(oldFilename, cur_dir->obj_list[cur_dir->currentIndex]->name_uc);
						
					#else
						char oldFilename[FM_MAX_DIR_PATH_LENGTH];
						char newFilename[FM_MAX_DIR_PATH_LENGTH];	
						sprintf(oldFilename,"%s%s/%s",cur_dir->dir_path, cur_dir->dir_name,cur_dir->obj_list[cur_dir->currentIndex]->name);
						sprintf(newFilename,"%s%s/%s",cur_dir->dir_path, cur_dir->dir_name, fm_data->edt_buf);
					#endif
						status =mfw_fm_rename(oldFilename,newFilename,fm_data->source);
					}
					if(status == FM_NO_ERROR)
					{
						TRACE_EVENT("Rename Done");
						fm_data->list_state = FM_LIST_RECREATE;
						mmi_fm_app_show_info(win,TxtRename,TxtDone,TxtNull,TxtSoftBack,(T_VOID_FUNC)mmi_fm_rename_cb,THREE_SECS,KEY_RIGHT | KEY_CLEAR | KEY_HUP);
						
					}			
					else
					{
						TRACE_EVENT("Rename Error");
						//Display the error message to the user
						mmi_fm_app_show_info(win,TxtRename,TxtFailed,TxtNull,TxtSoftBack,(T_VOID_FUNC)mmi_fm_rename_cb,THREE_SECS,KEY_RIGHT | KEY_CLEAR | KEY_HUP);
					}
				}
			}
		}
		break;
		case INFO_KCD_RIGHT:
		case INFO_KCD_HUP:	
			mmi_fm_rename_editor_destroy( );
			break;
		default:
			/* otherwise no action to be performed
			*/
			break;	
	}
}

/*******************************************************************************
 $Function:    		mmi_fm_rename_cb

 $Description:		Callback function for rename success/failure dialog

 $Returns:		None

 $Arguments:		win			-current window
				identifier		-window id
				reason		-Event cause.
*******************************************************************************/
void mmi_fm_rename_cb (T_MFW_HND win, USHORT identifier, SHORT reason)
{
	T_MFW_HND parent_win = mfw_parent(mfw_header());
	
	TRACE_FUNCTION ("mmi_fm_rename_cb()");

	mmi_fm_rename_editor_destroy();

	if(fm_data->list_state == FM_LIST_RECREATE)
	{
		//Delete the options window
		if(fm_data->opt_win)
		{
			bookMenuDestroy(fm_data->opt_win);
			fm_data->opt_win = NULL;
		}
		//Delete the image window
		if(fm_data->img_win)
		{
			SEND_EVENT(fm_data->img_win,FM_IMGDRAW_DESTROY,0,(void *)NULL);
		}
		//Populate the list again
		if(fm_data->list_win)
		{
			listsIconsDestroy(fm_data->list_win);
			fm_data->list_win=NULL;
			mmi_fm_list_destroy( fm_data->root_win);
		}
		fm_data->opt_type=FM_RENAME;
		SEND_EVENT (fm_data->root_win, FM_INIT, 0, (void *)NULL);
	}
}

/*******************************************************************************
 $Function:    		mmi_fm_rename_editor_destroy

 $Description:		Frees the allocated memory

 $Returns:		None

 $Arguments:		None
*******************************************************************************/
void mmi_fm_rename_editor_destroy(void)
{
	TRACE_FUNCTION ("mmi_fm_rename_editor_destroy");
	
	mfwFree((U8 *)fm_data->edt_buf, FM_MAX_OBJ_NAME_LENGTH);
}

/*******************************************************************************
 $Function:    		mmi_fm_newdir

 $Description:		Creates an editor for creating a new directory

 $Returns:		Execution status

 $Arguments:		mnu		-Pointer to current menu
 				item 	-Pointer to current menu item
*******************************************************************************/
GLOBAL int mmi_fm_newdir (MfwMnu* m, MfwMnuItem* i)
{
	T_MFW_HND parent_win = mfw_parent(mfw_header());

	TRACE_FUNCTION ("mmi_fm_newdir()");
	
	mmi_fm_newdir_editor_create(parent_win);
	
	return MFW_EVENT_CONSUMED;
}

/*******************************************************************************
 $Function:    		mmi_fm_newdir_editor_create

 $Description:		Creates an editor for creating a new directory

 $Returns:		Execution status

 $Arguments:		parent_win		-Parent window
*******************************************************************************/
T_MFW_HND mmi_fm_newdir_editor_create(T_MFW_HND parent_win)
{
	T_MFW_HND  win;
	T_AUI_EDITOR_DATA	editor_data;

	TRACE_FUNCTION ("mmi_fm_newdir_editor_create");

	fm_data->edt_buf = (char *)mfwAlloc(FM_MAX_OBJ_NAME_LENGTH);

	memset(&editor_data,'\0',sizeof(editor_data));
	/*
	** Initialise the editor
	*/
	AUI_edit_SetDefault(&editor_data);
	AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII,(UBYTE *) fm_data->edt_buf, FM_MAX_OBJ_NAME_LENGTH);
	AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtNull, NULL);
	AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtSoftBack);
	AUI_edit_SetEvents(&editor_data, 0, TRUE, FOREVER, (T_AUI_EDIT_CB)mmi_fm_newdir_editor_exec_cb);
	win = AUI_edit_Start(parent_win, &editor_data);
	return win;
}

/*******************************************************************************
 $Function:    		mmi_fm_newdir_editor_exec_cb

 $Description:		Event handler for the editor

 $Returns:		None

 $Arguments:		win			-current window
				identifier		-window id
				reason		-Event cause.
*******************************************************************************/
static void mmi_fm_newdir_editor_exec_cb(T_MFW_HND win, USHORT identifier, SHORT reason)
{
	T_FM_CURDIR *cur_dir = fm_data->cur_dir;
	T_MFW_FM_STATUS status = FM_NO_ERROR;

	TRACE_FUNCTION ("mmi_fm_newdir_exec_cb()");

	switch (reason)
	{
		case INFO_KCD_LEFT:
			if (fm_data->edt_buf[0] == NULL)
			{
				mmi_fm_app_show_info(win,TxtCreateDir,TxtFailed,TxtNull,TxtSoftBack,(T_VOID_FUNC)mmi_fm_newdir_cb,THREE_SECS,KEY_RIGHT | KEY_CLEAR | KEY_HUP);
			}
			else
			{
				char dirname[FM_MAX_DIR_PATH_LENGTH];
				sprintf(dirname,"%s%s/%s",cur_dir->dir_path, cur_dir->dir_name,fm_data->edt_buf);
				status =mfw_fm_newdir(dirname,fm_data->source);
				if(status == FM_DIR_EXISTS)
					mmi_fm_app_show_info(win,TxtDirectory,TxtExists,TxtNull,TxtSoftBack,(T_VOID_FUNC)mmi_fm_newdir_cb,THREE_SECS,KEY_RIGHT | KEY_CLEAR | KEY_HUP);
				else
				{
					fm_data->list_state = FM_LIST_RECREATE;
					mmi_fm_app_show_info(win,TxtDirectory,TxtCreated,TxtNull,TxtSoftBack,(T_VOID_FUNC)mmi_fm_newdir_cb,THREE_SECS,KEY_RIGHT | KEY_CLEAR | KEY_HUP);
					
				}
			}
			break;
		case INFO_KCD_RIGHT:
		case INFO_KCD_HUP:	
			mmi_fm_newdir_editor_destroy( );
			break;

		default:
			/* otherwise no action to be performed
			*/
			break;	

		
	}
}

/*******************************************************************************
 $Function:    		mmi_fm_newdir_cb

 $Description:		Callback function for new directory create success/failure dialog

 $Returns:		None

 $Arguments:		win			-current window
				identifier		-window id
				reason		-Event cause.
*******************************************************************************/
void mmi_fm_newdir_cb (T_MFW_HND win, USHORT identifier, SHORT reason)
{
	T_MFW_HND parent_win = mfw_parent(mfw_header());
	TRACE_FUNCTION ("mmi_fm_newdir_cb()");

	mmi_fm_rename_editor_destroy();
	if(fm_data->list_state == FM_LIST_RECREATE)
	{
		//Delete the options window
		if(fm_data->opt_win)
		{
			bookMenuDestroy(fm_data->opt_win);
			fm_data->opt_win = NULL;
		}
		//Populate the list again
		if(fm_data->list_win)
		{
			listsIconsDestroy(fm_data->list_win);
			fm_data->list_win=NULL;
			mmi_fm_list_destroy( fm_data->root_win);
		}
		fm_data->opt_type=FM_NEWDIR;
		SEND_EVENT (fm_data->root_win, FM_INIT, 0, (void *)NULL);
	}
}

/*******************************************************************************
 $Function:    		mmi_fm_newdir_editor_destroy

 $Description:		Frees the allocated memory

 $Returns:		None

 $Arguments:		None
*******************************************************************************/
void mmi_fm_newdir_editor_destroy(void)
{
	TRACE_FUNCTION ("mmi_fm_newdir_destroy");
	
	mfwFree((U8 *)fm_data->edt_buf, FM_MAX_OBJ_NAME_LENGTH);
}

/*******************************************************************************
 $Function:    		mmi_fm_copy

 $Description:		Removes the selected object after user confirmation and displays the updated

 $Returns:		Execution status

 $Arguments:		mnu		-Pointer to current menu
 				item 	-Pointer to current menu item
*******************************************************************************/
GLOBAL int mmi_fm_remove (MfwMnu* m, MfwMnuItem* i)
{
	T_MFW_HND parent_win = mfw_parent(mfw_header());
	
	TRACE_FUNCTION ("mmi_fm_remove()");
	
	mmi_fm_app_show_info(parent_win,TxtDelete,TxtFile,TxtSoftOK,TxtSoftBack,(T_VOID_FUNC)mmi_fm_remove_confirm_cb,FOREVER,KEY_LEFT|KEY_RIGHT | KEY_CLEAR | KEY_HUP);
	return MFW_EVENT_CONSUMED;
}

/*******************************************************************************
 $Function:    		mmi_fm_remove_confirm_cb

 $Description:		Callback function for remove confirmation dialog

 $Returns:		None

 $Arguments:		win			-current window
				identifier		-window id
				reason		-Event cause.
*******************************************************************************/
void mmi_fm_remove_confirm_cb (T_MFW_HND win, USHORT identifier, SHORT reason)
{
	T_FM_CURDIR *cur_dir = fm_data->cur_dir;
	T_MFW_FM_STATUS status = FM_NO_ERROR;
	T_MFW_HND parent_win = mfw_parent(mfw_header());
	
	TRACE_FUNCTION ("mmi_fm_remove_confirm_cb()");

	switch(reason)
	{
		case INFO_KCD_LEFT:
			if( cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_IMAGE &&
				cur_dir->obj_data[cur_dir->currentIndex]->image.thumbnail == TRUE)
			{
				char  filename[FM_MAX_OBJ_NAME_LENGTH];
				strcpy(filename,cur_dir->obj_list[cur_dir->currentIndex]->name);
				mmi_fm_get_filename(filename);
				status =mfw_fm_remove_image(cur_dir->dir_path, cur_dir->dir_name,filename,fm_data->source);					
			}
			else
			{
			/* February 8, 2008 DRT:OMAPS00156759 (x0083025) For Unicode Support--> Start*/	
			#ifdef FF_MMI_UNICODE_SUPPORT
				T_WCHAR filename[FM_MAX_DIR_PATH_LENGTH];
				char dirPath[FM_MAX_DIR_PATH_LENGTH];
				sprintf(dirPath, "%s%s/",cur_dir->dir_path, cur_dir->dir_name);
				convert_u8_to_unicode(dirPath, filename);
				wstrcat(filename, cur_dir->obj_list[cur_dir->currentIndex]->name_uc);
			#else
				char filename[FM_MAX_DIR_PATH_LENGTH];
				sprintf(filename,"%s%s/%s",cur_dir->dir_path, cur_dir->dir_name,cur_dir->obj_list[cur_dir->currentIndex]->name);
				
			#endif
			/* February 8, 2008 DRT:OMAPS00156759 (x0083025) For Unicode Support--> End*/	
				status =mfw_fm_remove(filename, fm_data->source);
			}
			switch(status)
			{
				case FM_NO_ERROR:
					fm_data->list_state = FM_LIST_RECREATE;
					mmi_fm_app_show_info(parent_win,TxtDelete,TxtDone,TxtNull,TxtSoftBack,(T_VOID_FUNC)mmi_fm_remove_cb,THREE_SECS,KEY_RIGHT | KEY_CLEAR | KEY_HUP);
					
					break;
				case FM_DELETE_DIRNOTEMPTY:
					mmi_fm_app_show_info(parent_win,TxtDirectory,TxtNotEmpty,TxtNull,TxtSoftBack,(T_VOID_FUNC)mmi_fm_remove_cb,THREE_SECS,KEY_RIGHT | KEY_CLEAR | KEY_HUP);
					break;
				default:
					//Display the error message to the user
					mmi_fm_app_show_info(parent_win,TxtDelete,TxtFailed,TxtNull,TxtSoftBack,(T_VOID_FUNC)mmi_fm_remove_cb,THREE_SECS,KEY_RIGHT | KEY_CLEAR | KEY_HUP);
					break;
			}
			break;
	}
}

/*******************************************************************************
 $Function:    		mmi_fm_remove_cb

 $Description:		Callback function for remove success/failure dialog

 $Returns:		None

 $Arguments:		win			-current window
				identifier		-window id
				reason		-Event cause.
*******************************************************************************/
void mmi_fm_remove_cb (T_MFW_HND win, USHORT identifier, SHORT reason)
{
	T_MFW_HND parent_win = mfw_parent(mfw_header());
	
	TRACE_FUNCTION ("mmi_fm_remove_cb()");

	if(fm_data->list_state == FM_LIST_RECREATE)
	{
		//Delete the options window
		if(fm_data->opt_win)
		{
			TRACE_EVENT("bookMenuDestroy");
			bookMenuDestroy(fm_data->opt_win);
			fm_data->opt_win = NULL;
		}
		//Delete the image window
		if(fm_data->img_win)
		{
			TRACE_EVENT("FM_IMGDRAW_DESTROY");
			SEND_EVENT(fm_data->img_win,FM_IMGDRAW_DESTROY,0,(void *)NULL);
		}
		//Populate the list again
		if(fm_data->list_win)
		{
			listsIconsDestroy(fm_data->list_win);
			fm_data->list_win=NULL;
			mmi_fm_list_destroy( fm_data->root_win);
			TRACE_EVENT("List destroyed");
		}
		fm_data->opt_type=FM_REMOVE;
		SEND_EVENT (fm_data->root_win, FM_INIT, 0, (void *)NULL);
	}
		
}

/*******************************************************************************
 $Function:    		showCopyMove

 $Description:		Shows or hides the copy and move option

 $Returns:		0 - shows the item, 1 - hides the item

 $Arguments:		None
*******************************************************************************/
USHORT showCopyMove( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi )
{
	T_FM_CURDIR *cur_dir = fm_data->cur_dir;

	TRACE_FUNCTION ("showCopyMove()");

	/* Apr 05, 2007 DRT: OMAPS00124859 x0039928 */
	if(cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_FILE||
		cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_AUDIO ||
		cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_AUDIO_AAC ||
		cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_AUDIO_MIDI ||
		cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_AUDIO_MP3||
		cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_AUDIO_XMF||
		cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_AUDIO_IMY||
		cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_AUDIO_MMF||
		cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_AUDIO_MXMF||
		cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_AUDIO_SMS||
		cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_AUDIO_WAV||
		cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_IMAGE
	)
			return 0;
	else
			return 1;
}

/*******************************************************************************
 $Function:    		showCreate

 $Description:		Shows or hides the create directory option

 $Returns:		0 - shows the item, 1 - hides the item

 $Arguments:		None
*******************************************************************************/
USHORT showCreate( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi )
{
	TRACE_FUNCTION ("showCreate()");
	
	if (fm_data->opt_type == FM_OPTIONS_FOLDER)
	{
		return 0;
	}
	else
		return 1;
}

/*******************************************************************************
 $Function:    		mmi_fm_copy

 $Description:		Copies the selected object from source to destination

 $Returns:		Execution status

 $Arguments:		mnu		-Pointer to current menu
 				item 	-Pointer to current menu item
*******************************************************************************/
GLOBAL int mmi_fm_copy (MfwMnu* m, MfwMnuItem* i)
{
	TRACE_FUNCTION ("mmi_fm_copy()");
	
	fm_data->opt_type = FM_COPY;
	mmi_fm_displayDestDrive();
	
	return MFW_EVENT_CONSUMED;
}

/*******************************************************************************
 $Function:    		mmi_fm_displayDestDrive

 $Description:		Display the destination drive

 $Returns:		None

 $Arguments:		None
*******************************************************************************/
void mmi_fm_displayDestDrive(void)
{
	T_MFW_HND parent_win  = mfwParent(mfw_header());
	
	TRACE_FUNCTION ("mmi_fm_displayDestDrive()");
	
	 fm_data->copymove.data = (T_MFW_FM_COPYMOVE_STRUCT *)mfwAlloc(sizeof(T_MFW_FM_COPYMOVE_STRUCT));
	 fm_data->dest_data = (T_MMI_FM_DEST_STRUCT *)mfwAlloc(sizeof(T_MMI_FM_DEST_STRUCT));
	fm_data->dest_data->dest_drive_win=(T_MFW_HND)bookMenuStart( parent_win, FMDestDrivesListAttributes(), 0);
	SEND_EVENT(fm_data->dest_data->dest_drive_win,ADD_CALLBACK,NULL,(void *)mmi_fm_displayDestDrive_cb);

}
/*******************************************************************************
 $Function:    		mmi_fm_displayDestDrive_cb

 $Description:		Callback function for the destination Directory window

 $Returns:		None

 $Arguments:		win			-current window
				event		-window event Id
				value		-unique Id
				parameter	-optional data.
*******************************************************************************/
void mmi_fm_displayDestDrive_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
	TRACE_FUNCTION("mmi_fm_dest_root_folders_cb");

	mfwFree((U8 *)fm_data->copymove.data, sizeof(T_MFW_FM_COPYMOVE_STRUCT));
	mfwFree((U8 *)fm_data->dest_data , sizeof (T_MMI_FM_DEST_STRUCT));
	fm_data->dest_data = NULL;
}

/*******************************************************************************
 $Function:    		mmi_fm_dest_root_folders

 $Description:		Display the destination root folders

 $Returns:		Execution status

 $Arguments:		mnu		-Pointer to current menu
 				item 	-Pointer to current menu item
*******************************************************************************/
GLOBAL int  mmi_fm_dest_root_folders(MfwMnu* mnu, MfwMnuItem* item)
{
	T_MFW_HND       parent_win;

	TRACE_FUNCTION("mmi_fm_dest_root_folders" );

	parent_win  = mfwParent(mfw_header());
	fm_data->dest_data->destination= (T_FM_DEVICE_TYPE)mnu->lCursor[mnu->level];
	 fm_data->dest_data->dest_dir = (T_FM_DESTDIR *)mfwAlloc(sizeof(T_FM_DESTDIR));
	fm_data->dest_data->dest_rootfolderlist_win=(T_MFW_HND)bookMenuStart( parent_win, FMDestRootFolderAttributes(), 0);
	SEND_EVENT(fm_data->dest_data->dest_rootfolderlist_win,ADD_CALLBACK,NULL,(void *)mmi_fm_dest_root_folders_cb);
	return MFW_EVENT_CONSUMED;
}

/*******************************************************************************
 $Function:    		mmi_fm_dest_root_folders_cb

 $Description:		Callback function for the root Image, Audio Directory window

 $Returns:		None

 $Arguments:		win			-current window
				event		-window event Id
				value		-unique Id
				parameter	-optional data.
*******************************************************************************/
void mmi_fm_dest_root_folders_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
	TRACE_FUNCTION("mmi_fm_dest_root_folders_cb");

	mfwFree((U8 *)fm_data->dest_data->dest_dir , sizeof (T_FM_DESTDIR));
	fm_data->dest_data->dest_dir = NULL;
}

/*******************************************************************************
 $Function:    		mmi_fm_dest_display

 $Description:		Displays the folders given path

 $Returns:		Execution status

 $Arguments:		mnu		-Pointer to current menu
 				item 	-Pointer to current menu item
*******************************************************************************/
GLOBAL int  mmi_fm_dest_display(MfwMnu* mnu, MfwMnuItem* item)
{
	T_FM_DESTDIR *dest_dir = fm_data->dest_data->dest_dir;

	TRACE_FUNCTION("mmi_fm_dest_display");

	dest_dir->depth = 0;
	dest_dir->dir_type = OBJECT_TYPE_NONE;
	dest_dir->currentIndex = 0;
	dest_dir->num_objs = 0;
	switch(mnu->lCursor[mnu->level])
	{
		case 0:
			fm_data->dest_data->app = FM_IMAGE;
			dest_dir->dir_type=OBJECT_TYPE_IMAGE_FOLDER;
			break;
		case 1:
			fm_data->dest_data->app = FM_AUDIO;
			dest_dir->dir_type=OBJECT_TYPE_AUDIO_FOLDER;
			break;
	}
	//Based on the selected drive, load the root image, audio directory names
	switch(fm_data->dest_data->destination)
	{
		case FM_NOR_FLASH:
			if(dest_dir->dir_type==OBJECT_TYPE_IMAGE_FOLDER)
			{
				strcpy( dest_dir->dir_path,  NORDIR);
				strcpy( dest_dir->dir_name,  NORDIR_IMG);
			}
			else if(dest_dir->dir_type==OBJECT_TYPE_AUDIO_FOLDER)
			{
				strcpy( dest_dir->dir_path,  NORDIR);
				strcpy( dest_dir->dir_name,  NORDIR_AUD);
			}
			break;
		case FM_NORMS_FLASH:
			if(dest_dir->dir_type==OBJECT_TYPE_IMAGE_FOLDER)
			{
				strcpy( dest_dir->dir_path,  NORMSDIR);
				strcpy( dest_dir->dir_name,  NORMSDIR_IMG);
			}
			else if(dest_dir->dir_type==OBJECT_TYPE_AUDIO_FOLDER)
			{
				strcpy( dest_dir->dir_path,  NORMSDIR);
				strcpy( dest_dir->dir_name,  NORMSDIR_AUD);
			}
			break;			
		case FM_NAND_FLASH:
			if(dest_dir->dir_type==OBJECT_TYPE_IMAGE_FOLDER)
			{
				strcpy( dest_dir->dir_path,  NANDDIR);
				strcpy( dest_dir->dir_name,  NANDDIR_IMG);
			}
			else if(dest_dir->dir_type==OBJECT_TYPE_AUDIO_FOLDER)
			{
				strcpy( dest_dir->dir_path,  NANDDIR);
				strcpy( dest_dir->dir_name,  NANDDIR_AUD);
			}
			break;
		case FM_T_FLASH:
			if(dest_dir->dir_type==OBJECT_TYPE_IMAGE_FOLDER)
			{
				strcpy( dest_dir->dir_path,  TFLASHDIR);
				strcpy( dest_dir->dir_name,  TFLASHDIR_IMG);
			}
			else if(dest_dir->dir_type==OBJECT_TYPE_AUDIO_FOLDER)
			{
				strcpy( dest_dir->dir_path,  TFLASHDIR);
				strcpy( dest_dir->dir_name,  TFLASHDIR_AUD);
			}
			break;
	}	
	TRACE_EVENT_P2("Path %s Dir %s", dest_dir->dir_path,dest_dir->dir_name);
	dest_dir->depth = 1;
	mmi_fm_dest_start( fm_data->dest_data->dest_rootfolderlist_win);
	return MFW_EVENT_CONSUMED;
}

/*******************************************************************************
 $Function:    		mmi_fm_dest_start

 $Description:		To create the destination FileManager window

 $Returns:		Created Window Pointer

 $Arguments:		parent_win	-Parent Window
*******************************************************************************/
static T_MFW_HND mmi_fm_dest_start( T_MFW_HND parent_win)
{
	TRACE_FUNCTION("mmi_fm_dest_start");
	
	//Creating the root window for FileManager
	fm_data->dest_data->dest_root_win=mmi_fm_dest_create(parent_win);
	
       if (fm_data->dest_data->dest_root_win NEQ NULL)
	{
	    SEND_EVENT (fm_data->dest_data->dest_root_win, FM_INIT, 0, (void *)NULL);
	}
	return fm_data->dest_data->dest_root_win;
}

/*******************************************************************************
 $Function:    		mmi_fm_dest_create

 $Description:		To create the destination FileManager window

 $Returns:		Created Window Pointer

 $Arguments:		parent_win	-Parent Window
*******************************************************************************/
static T_MFW_HND mmi_fm_dest_create (T_MFW_HND parent_win)
{

	T_MFW_WIN  * win;
	T_MMI_FM_DEST_STRUCT *dest_data = fm_data->dest_data;

	TRACE_FUNCTION("mmi_fm_dest_create");

	//Creating the root window for FileManager
	dest_data->dest_root_win = win_create (parent_win, 0, E_WIN_VISIBLE, (T_MFW_CB)mmi_fm_dest_win_cb);
	/*
		connect the dialog data to the MFW-window
	*/
	dest_data->mmi_control.dialog = (T_DIALOG_FUNC)mmi_fm_dest_exec_cb;
	dest_data->mmi_control.data   = dest_data;
	dest_data->parent_win= parent_win;	
	win                           = ((T_MFW_HDR *)dest_data->dest_root_win)->data;
	win->user                = (void *)dest_data;
	
	winShow(dest_data->dest_root_win);
	return dest_data->dest_root_win;
}

/*******************************************************************************
 $Function:    		mmi_fm_dest_win_cb

 $Description:	 	Handler for window events for the destination FileManager window

 $Returns:		Execution status

 $Arguments:		e	-window event Id
				w	-current window
*******************************************************************************/
int mmi_fm_dest_win_cb (MfwEvt e, MfwWin *w)
{
	TRACE_FUNCTION ("mmi_fm_dest_win_cb()");
	
	switch (e)
	{
	case MfwWinVisible:  
		break;
	case MfwWinFocussed: 
		break;
	case MfwWinDelete:   
		break;
	default:
		return MFW_EVENT_REJECTED;
	}
	return MFW_EVENT_CONSUMED;
}

/*******************************************************************************
 $Function:    		mmi_fm_dest_exec_cb

 $Description:	 	Handler for events for the destination FileManager window

 $Returns:		None

 $Arguments:		win			-current window
				event		-window event Id
				value		-unique Id
				parameter	-optional data.
*******************************************************************************/
void mmi_fm_dest_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
	T_MFW_WIN        * win_data = ((T_MFW_HDR *) win)->data;
	T_MMI_FM_DEST_STRUCT  * dest_data     = (T_MMI_FM_DEST_STRUCT *)win_data->user;


	TRACE_FUNCTION ("mmi_fm_dest_exec_cb()");
	
	TRACE_EVENT_P1("Event %d",event );
	switch (event)
	{
		case FM_INIT:
			dest_data->dest_list_win=mmi_fm_dest_list_create(dest_data->dest_root_win);
			break;
		case FM_DESTROY:
			//Destroy the current list
			mmi_fm_dest_destroy(dest_data->dest_root_win);
			break;
		default:
			break;
	}
}

/*******************************************************************************
 $Function:    		mmi_fm_dest_destroy

 $Description:	 	To destroy the destination FileManager window

 $Returns:		None

 $Arguments:		own_window	-FileManager window
*******************************************************************************/
static void mmi_fm_dest_destroy(MfwHnd own_window)
{
	T_MMI_FM_DEST_STRUCT *dest_data;

	TRACE_FUNCTION ("mmi_fm_dest_destroy()");
	dest_data = fm_data->dest_data;

	if ( dest_data )
	{
		//Delete the dest_root_win window
		win_delete (dest_data->dest_root_win);
		dest_data->dest_root_win = NULL;
	}
	dspl_Enable(1);
}
/*******************************************************************************
 $Function:    		mmi_fm_dest_list_create

 $Description:	 	Start building the destination list

 $Returns:		Current created window
 
 $Arguments:		win		-Parent window
*******************************************************************************/
T_MFW_HND mmi_fm_dest_list_create( T_MFW_HND win)
{
	T_MMI_FM_DEST_STRUCT *dest_data = fm_data->dest_data;
	T_FM_DESTDIR *dest_dir = fm_data->dest_data->dest_dir;
	USHORT  file_count = 0, list_count=0;

	TRACE_FUNCTION("mmi_fm_dest_list_create" );
	
	//Read the objects in the given directory 
	mfw_fm_readDir(dest_dir->dir_path,dest_dir->dir_name,&dest_dir->num_objs,dest_dir->obj_list,fm_data->dest_data->destination, fm_data->dest_data->app);

	//Read the file/folder 
	mfw_fm_readFileFolders(dest_dir->dir_path,dest_dir->dir_name,dest_dir->num_objs,dest_dir->obj_list,fm_data->dest_data->destination);
	dest_data->dest_menu_list_data = (ListMenuData *)ALLOC_MEMORY(sizeof(ListMenuData));
	if(dest_data->dest_menu_list_data == NULL )
	{
		TRACE_EVENT("Memory failure.");
		return NULL;
	}
	dest_data->dest_menu_list_data->List = (T_MFW_MNU_ITEM *)ALLOC_MEMORY( (dest_dir->num_objs+1) * sizeof(T_MFW_MNU_ITEM) );
	if(dest_data->dest_menu_list_data->List == NULL)
	{
		TRACE_EVENT("Memory failure.");
		return NULL;
	}

	for (file_count=0; file_count<dest_dir->num_objs; file_count++)
	{
		if( dest_dir->obj_list[file_count]->type == OBJECT_TYPE_FOLDER)
		{
			mnuInitDataItem(&dest_data->dest_menu_list_data->List[list_count]);
			dest_data->dest_menu_list_data->List[list_count].str  = (char *)dest_dir->obj_list[file_count]->name;
			dest_data->dest_menu_list_data->List[list_count].flagFunc = item_flag_none;		
			dest_data->dest_menu_list_data->List[list_count].icon=&fmIconFolder;
			list_count++;
		}
	}
	mnuInitDataItem(&dest_data->dest_menu_list_data->List[list_count]);
	if(fm_data->opt_type == FM_COPY)
		dest_data->dest_menu_list_data->List[list_count].str  = "[Copy Here]";
	else
		dest_data->dest_menu_list_data->List[list_count].str  = "[Move Here]";
	dest_data->dest_menu_list_data->List[list_count].flagFunc = item_flag_none;		
	dest_data->dest_menu_list_data->List[list_count].icon=NULL;
	list_count++;
	TRACE_EVENT_P1("Total %d",list_count);
	dest_data->dest_menu_list_data->ListLength = list_count;
	dest_data->dest_menu_list_data->ListPosition = 1;
	dest_data->dest_menu_list_data->CursorPosition = 1;
	if((dest_dir->num_objs+1) < 3)
		dest_data->dest_menu_list_data->SnapshotSize =dest_dir->num_objs+1;// list_count;		
	else
		dest_data->dest_menu_list_data->SnapshotSize =3;// list_count;
	dest_data->dest_menu_list_data->Font = 1;
	if(fm_data->opt_type == FM_COPY)
		dest_data->dest_menu_list_data->LeftSoftKey = TxtCopy;
	else
		dest_data->dest_menu_list_data->LeftSoftKey = TxtMove;
	dest_data->dest_menu_list_data->RightSoftKey = TxtSoftBack;
	dest_data->dest_menu_list_data->KeyEvents = KEY_ALL;
	dest_data->dest_menu_list_data->Reason = 0;
	dest_data->dest_menu_list_data->Strings = TRUE;
	dest_data->dest_menu_list_data->Attr   = (MfwMnuAttr*)&FMList_Attrib;
	dest_data->dest_menu_list_data->autoDestroy    = FALSE;
	dest_data->dest_menu_list_data->block_keys =  (BOOL)FALSE;
	//Create the List window with default file and folder icons
	listIconsDisplayListMenu(win, dest_data->dest_menu_list_data, (ListCbFunc)mmi_fm_dest_list_cb, 0);
	dspl_Enable(1);
	return dest_data->dest_menu_list_data->win;
}

/*******************************************************************************
 $Function:    		mmi_fm_nofile_cb

 $Description:		Callback function for "no files loaded" dialog

 $Returns:		None

 $Arguments:		win			-current window
				identifier		-window id
				reason		-Event cause.
*******************************************************************************/
void mmi_fm_destnofile_cb (T_MFW_HND win, USHORT identifier, SHORT reason)
{
	TRACE_FUNCTION("mmi_fm_nofile_cb" );
	
	mmi_fm_destgoback();
}

/*******************************************************************************
 $Function:    		mmi_fm_dest_list_cb

 $Description:		Call back function for the destination list window

 $Returns:		None

 $Arguments:		Parent		-window handler
 				List Data		-Menu list data
*******************************************************************************/
void mmi_fm_dest_list_cb(T_MFW_HND * Parent, ListMenuData * ListData)
{
	T_MFW_WIN       * win_data;
	T_MMI_FM_DEST_STRUCT* dest_data;
	T_FM_DESTDIR *dest_dir;
	char curDir[FM_MAX_DIR_PATH_LENGTH];

	TRACE_FUNCTION("mmi_fm_dest_list_cb" );
       
	win_data = ((T_MFW_HDR *)Parent)->data;
	dest_data = (T_MMI_FM_DEST_STRUCT*)win_data->user;
	dest_dir = dest_data->dest_dir;
	TRACE_EVENT_P3("Reason %d length %d cur %d",ListData->Reason,ListData->ListLength , ListData->CursorPosition); 
	switch(ListData->Reason)
	{
		case LISTS_REASON_SELECT:
			if(ListData->CursorPosition == (ListData->ListLength-1) )
			{ //Selecting the [Copy here] item
				mmi_fm_copy_create(NULL);
			}
			else
			{
				dest_dir->currentIndex=ListData->CursorPosition;
				if(ListData->selectKey==TRUE)
				{
					//Update the current directory name with the selected directory
					if(dest_dir->dir_name[0]!='\0')
					{
						sprintf(curDir,"%s%s/",dest_dir->dir_path,dest_dir->dir_name);
						strcpy(dest_dir->dir_path,curDir);
						strcpy(dest_dir->dir_name , dest_data->dest_menu_list_data->List[dest_dir->currentIndex].str);
					}
					//Destroy the current list
					if(dest_data->dest_list_win)
					{
						listsIconsDestroy(dest_data->dest_list_win);
						dest_data->dest_list_win=NULL;
						mmi_fm_dest_list_destroy( dest_data->dest_root_win);
					}
					//Populate the new list
					SEND_EVENT (dest_data->dest_root_win, FM_INIT, 0, (void *)NULL);
				}
				else
				{
					mmi_fm_copy_create(dest_data->dest_menu_list_data->List[dest_dir->currentIndex].str);
				}
			}
			break;
		case LISTS_REASON_BACK:	
		case LISTS_REASON_HANGUP: /* Apr 10, 2007 DRT: OMAPS00125325 x0039928 */
			mmi_fm_destgoback();
			break;
		case LISTS_REASON_DRAWCOMPLETE:
			if(fm_data->opt_type == FM_COPY)
				displaySoftKeys(TxtCopy,TxtSoftBack);
			else
				displaySoftKeys(TxtMove,TxtSoftBack);
			break;
				
	}
}
/*******************************************************************************
 $Function:    		mmi_fm_destgoback

 $Description:		returns to the previous directory. 

 $Returns:		None

 $Arguments:		None
*******************************************************************************/
void mmi_fm_destgoback(void)
{
	char *strTempPtr;
	T_FM_DESTDIR *dest_dir = fm_data->dest_data->dest_dir;
	T_MMI_FM_DEST_STRUCT* dest_data = fm_data->dest_data;
	
	TRACE_FUNCTION("mmi_fm_destgoback");
	
	dest_dir->depth--;
	mmi_fm_set_mmi_plane_to_front();
	if( dest_dir->depth <= 0 )
	{
		//Root directory, exit the list window
		TRACE_EVENT("Root directory");
		if(dest_data->dest_list_win)
		{
			listsIconsDestroy( dest_data->dest_list_win);
			 dest_data->dest_list_win=NULL;
			mmi_fm_dest_list_destroy(  dest_data->dest_root_win );
		}
		SEND_EVENT ( dest_data->dest_root_win, FM_DESTROY, 0, (void *)NULL);
		winIconsLists = fm_data->list_win;
	}
	else
	{
		
		//Extract the previous directory path 
		strTempPtr=(char*) &dest_dir->dir_path + strlen(dest_dir->dir_path)-1;
		*strTempPtr='\0';
		strTempPtr--;
		while( *strTempPtr != '/'  )
		{
			strTempPtr = strTempPtr - 1;
		}
		strTempPtr++;
		strcpy(dest_dir->dir_name,strTempPtr);
		*strTempPtr='\0';
		
		//Destroy the current list
		if( dest_data->dest_list_win)
		{
			listsIconsDestroy( dest_data->dest_list_win);
			 dest_data->dest_list_win=NULL;
			mmi_fm_dest_list_destroy( dest_data->dest_root_win );
		}
		//Populate the new list
		SEND_EVENT ( dest_data->dest_root_win, FM_INIT, 0, (void *)NULL);
		return;
	}
}

/*******************************************************************************
 $Function:    		mmi_fm_dest_list_destroy

 $Description:	 	Frees the memory allocated during destination list creation

 $Returns:		None

 $Arguments:		own_window	-FileManager window
*******************************************************************************/
static void mmi_fm_dest_list_destroy(MfwHnd own_window)
{
	T_MFW_WIN * win_data;
	T_MMI_FM_DEST_STRUCT* dest_data;
	int i=0;
	T_FM_DESTDIR *dest_dir;
	
	TRACE_FUNCTION ("mmi_fm_dest_list_destroy()");

	if (own_window)
	{
		win_data = ((T_MFW_HDR *)own_window)->data;
		dest_data = (T_MMI_FM_DEST_STRUCT *)win_data->user;
		dest_dir = dest_data->dest_dir;
		if ( dest_data )
		{
			if (dest_data->dest_menu_list_data != NULL)
			{
				mfwFree( (U8 *)dest_data->dest_menu_list_data->List,(dest_dir->num_objs+1) * sizeof(T_MFW_MNU_ITEM) );
				mfwFree ((U8 *)dest_data->dest_menu_list_data, sizeof(ListMenuData));
			}
			i=0;
			while(dest_dir->obj_list[i] != NULL)
			{
				mfwFree((U8 *)dest_dir->obj_list[i], sizeof(T_FM_OBJ));
				dest_dir->obj_list[i] = NULL;
				i++;
			}
			
		}
	}
}

/*******************************************************************************
 $Function:    		mmi_fm_copy_create

 $Description:	 	To start copying the file

 $Returns:		None

 $Arguments:		dest_folder - destination folder name
*******************************************************************************/
void mmi_fm_copy_create(char * dest_folder)
{
	T_FM_DESTDIR *dest_dir = fm_data->dest_data->dest_dir;
	T_FM_CURDIR *cur_dir = fm_data->cur_dir;
	T_MMI_FM_DEST_STRUCT* dest_data =fm_data->dest_data;
	
	TRACE_FUNCTION ("mmi_fm_copy_create()");
	
	//User has selected the destination.
/* February 8, 2008 DRT:OMAPS00156759 (x0083025) For Unicode Support--> Start*/	
#ifdef FF_MMI_UNICODE_SUPPORT
	fm_data->copymove.data->sourceFile= (T_WCHAR *)mfwAlloc(FM_MAX_DIR_PATH_LENGTH);
	fm_data->copymove.data->destinationFile = (T_WCHAR *)mfwAlloc(FM_MAX_DIR_PATH_LENGTH);

	{
		char destFolder[FM_MAX_DIR_PATH_LENGTH];
		char sourceFolder[FM_MAX_DIR_PATH_LENGTH];
		T_WCHAR *dest, *source;
		
		dest = fm_data->copymove.data->destinationFile;
		source = fm_data->copymove.data->sourceFile;
		
		if(dest_folder == NULL)
			sprintf(destFolder,"%s%s/",dest_dir->dir_path,dest_dir->dir_name);
		else
			sprintf(destFolder,"%s%s/%s/",dest_dir->dir_path,dest_dir->dir_name,dest_folder);

		sprintf(sourceFolder,"%s%s/",cur_dir->dir_path, cur_dir->dir_name);

		// unicode support is there for audio only at the moment
		if (fm_data->app == FM_AUDIO)
		{
			//destination file
			convert_u8_to_unicode(destFolder, dest);
			wstrcat(dest, cur_dir->obj_list[cur_dir->currentIndex]->name_uc);

			//source file
			convert_u8_to_unicode(sourceFolder, source);
			wstrcat(source, cur_dir->obj_list[cur_dir->currentIndex]->name_uc);
		}
		else
		{
			//destination file
			strcat(destFolder, cur_dir->obj_list[cur_dir->currentIndex]->name);
			convert_u8_to_unicode(destFolder, dest);

			//source file
			strcat(sourceFolder, cur_dir->obj_list[cur_dir->currentIndex]->name);
			convert_u8_to_unicode(sourceFolder, source);
		}
	}		
#else
	 fm_data->copymove.data->sourceFile= (char *)mfwAlloc(FM_MAX_DIR_PATH_LENGTH);
	 fm_data->copymove.data->destinationFile = (char *)mfwAlloc(FM_MAX_DIR_PATH_LENGTH);
	 if(dest_folder == NULL)
		 sprintf( fm_data->copymove.data->destinationFile,"%s%s/%s",dest_dir->dir_path,dest_dir->dir_name,cur_dir->obj_list[cur_dir->currentIndex]->name);
	 else
		 sprintf( fm_data->copymove.data->destinationFile,"%s%s/%s/%s",dest_dir->dir_path,dest_dir->dir_name,dest_folder,cur_dir->obj_list[cur_dir->currentIndex]->name);
	 sprintf( fm_data->copymove.data->sourceFile,"%s%s/%s",cur_dir->dir_path, cur_dir->dir_name,cur_dir->obj_list[cur_dir->currentIndex]->name);
#endif
/* February 8, 2008 DRT:OMAPS00156759 (x0083025) For Unicode Support--> End*/	
	TRACE_EVENT_P2("Source %s Destination %s", fm_data->copymove.data->sourceFile, fm_data->copymove.data->destinationFile);
	if(dest_data->dest_list_win)
	{
		listsIconsDestroy(dest_data->dest_list_win);
		dest_data->dest_list_win=NULL;
		mmi_fm_dest_list_destroy( dest_data->dest_root_win );
		winIconsLists = fm_data->list_win;
	}
	SEND_EVENT (dest_data->dest_root_win, FM_DESTROY, 0, (void *)NULL);
	//Destroy the destinatin root folder list
	bookMenuDestroy(dest_data->dest_rootfolderlist_win);
	dest_data->dest_rootfolderlist_win = NULL;
	//Destroy the destination drive list
	bookMenuDestroy(dest_data->dest_drive_win);
	dest_data->dest_drive_win = NULL;
	//Free the buffer allocated for destination directory lists
	mfwFree((U8 *)dest_data->dest_dir , sizeof (T_FM_DESTDIR));
	dest_data->dest_dir = NULL;
	/* Mar 15, 2007 DRT: OMAPS00120225 x0039928 */
	/* Fix: Condition added to check source and destination device are same  */
/* February 8, 2008 DRT:OMAPS00156759 (x0083025) For Unicode Support--> Start*/	
#ifdef FF_MMI_UNICODE_SUPPORT
	if((wstrcmp(fm_data->copymove.data->sourceFile,fm_data->copymove.data->destinationFile) == 0) 
#else
	if((strcmp(fm_data->copymove.data->sourceFile,fm_data->copymove.data->destinationFile) == 0) 
#endif
/* February 8, 2008 DRT:OMAPS00156759 (x0083025) For Unicode Support--> End*/	
				&& (fm_data->source == fm_data->dest_data->destination))
	{
			mmi_fm_app_show_info(0,TxtSourceDest,TxtSame,TxtNull,TxtSoftBack,0,THREE_SECS,KEY_RIGHT | KEY_CLEAR | KEY_HUP);
			mmi_fm_copy_destroy(fm_data->copymove.data->state);
	}
	else
	{
		mmi_fm_copy_start();
	}
}

/*******************************************************************************
 $Function:    		mmi_fm_copy_start

 $Description:	 	To start copying the file

 $Returns:		None

 $Arguments:		None
*******************************************************************************/
void mmi_fm_copy_start(void)
{
	T_MFW_HND parent_win  = mfwParent(mfw_header());
	TRACE_FUNCTION ("mmi_fm_copy_start()");
	
	fm_data->copymove.data->source_type = fm_data->source;
	fm_data->copymove.data->sourceFileSize = fm_data->cur_dir->obj_properties[fm_data->cur_dir->currentIndex]->size;
	fm_data->copymove.data->destination_type = fm_data->dest_data->destination;
	fm_data->copymove.data->buf = (char *)mfwAlloc(FM_COPY_BUFFER_SIZE);
	fm_data->copymove.data->state = mfw_fm_copy_start(fm_data->copymove.data);
	if(fm_data->copymove.data->state == FM_COPY_PROGRESS)
	{
		fm_data->copymove.win = mmi_fm_copy_dialog_create(parent_win);
		SEND_EVENT(fm_data->copymove.win, FM_COPY_INIT, 0, (void *)NULL);
		fm_data->copymove.timer = timCreate( 0, FM_COPYMOVE_TIMER, (MfwCb)mmi_fm_copy_timer_cb );
		timStart(fm_data->copymove.timer) ;
	}
	else if(fm_data->copymove.data->state == FM_COPY_DONE ||fm_data->copymove.data->state == FM_COPY_ERROR||fm_data->copymove.data->state == FM_COPY_NONE)//April 27, 2007 DRT:OMAPS00128836 x0073106
	{
		mmi_fm_copy_end();
	}
}

/*******************************************************************************
 $Function:    		mmi_fm_copy_dialog_create

 $Description:		Creates a new window for showing the progress of copying

 $Returns:		None

 $Arguments:		None
*******************************************************************************/
T_MFW_HND mmi_fm_copy_dialog_create(T_MFW_HND parent_win)
{
	T_MMI_FM_COPY_STRUCT *copy_data;
	T_MFW_WIN  * win;

	TRACE_FUNCTION("mmi_fm_copy_dialog_create");
	
	copy_data =  (T_MMI_FM_COPY_STRUCT *)mfwAlloc(sizeof(T_MMI_FM_COPY_STRUCT));

	//Create a window for drawing the image in QCIF width and height
	copy_data->win = win_create (fm_data->list_win, 0, E_WIN_VISIBLE|E_WIN_SUSPEND|E_WIN_RESUME|E_WIN_DELETE, (T_MFW_CB)mmi_fm_copy_dialog_win_cb);

	copy_data ->mmi_control.dialog = (T_DIALOG_FUNC)mmi_fm_copy_dialog_exec_cb;
	copy_data ->mmi_control.data   = copy_data ;
	copy_data->parent_win= fm_data->list_win;	
	win                      = (T_MFW_WIN *)getWinData(copy_data->win);
	win->user                = (MfwUserDataPtr)copy_data;
       copy_data->kbd = kbd_create (copy_data->win,KEY_ALL|KEY_MAKE,(T_MFW_CB)mmi_fm_copy_dialog_kbd_cb);
	winShow(copy_data->win );	
	return copy_data->win ;
}

/*******************************************************************************
 $Function:   		mmi_fm_copy_dialog_kbd_cb

 $Description:	 	Handler for key events for the copy progress window

 $Returns:		Execution status

 $Arguments:		e	-window event Id
				k	-key event
*******************************************************************************/
static int mmi_fm_copy_dialog_kbd_cb (MfwEvt e, MfwKbd *k)
{
	TRACE_FUNCTION("mmi_fm_copy_dialog_kbd_cb");

	if (!(e & KEY_MAKE))
	{
		return MFW_EVENT_CONSUMED;
	}

	switch (k->code)
	{
		case KCD_LEFT:
			break;
		case KCD_RIGHT:
		case KCD_HUP:
			break;
	}
	return MFW_EVENT_CONSUMED;
}

/*******************************************************************************
 $Function:    		mmi_fm_copy_dialog_win_cb

 $Description:	 	Handler for window events for the copy progress window

 $Returns:		Execution status

 $Arguments:		e	-window event Id
				w	-current window
*******************************************************************************/
int mmi_fm_copy_dialog_win_cb (MfwEvt e, MfwWin *w)
{
	T_MMI_FM_COPY_STRUCT  * copy_data     = (T_MMI_FM_COPY_STRUCT *)w->user;

	TRACE_FUNCTION ("mmi_fm_copy_dialog_win_cb()");
	
	TRACE_EVENT_P1("event %d",e);
	switch (e)
	{
	case MfwWinVisible:  /* window is visible  */
		SEND_EVENT(copy_data->win, FM_COPY_DRAW, 0, (void *)NULL);
		break;
	case MfwWinSuspend: /* input focus / selected   */
		SEND_EVENT(copy_data->win, FM_COPY_SUSPEND, 0, (void *)NULL);
		break;
	case MfwWinResume: /* input focus / selected   */
		SEND_EVENT(copy_data->win, FM_COPY_RESUME, 0, (void *)NULL);
		break;
	case MfwWinDelete:   /* window will be deleted   */
		break;
	default:
		return MFW_EVENT_REJECTED;
	}
	return MFW_EVENT_CONSUMED;

}

/*******************************************************************************
 $Function:    		mmi_fm_copy_dialog_exec_cb

 $Description:	 	Eevnt handler copy progress window 

 $Returns:		None

 $Arguments:		win			-current window
				event		-window event Id
				value		-unique Id
				parameter	-optional data.
*******************************************************************************/
void mmi_fm_copy_dialog_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
	int x1, y1, x2, y2;
	int txtId1= TxtPleaseWait, txtId2 = TxtCopying; 
	char * str1, *str2;
	
	TRACE_FUNCTION("mmi_fm_copy_dialog_exec_cb");
	
	TRACE_EVENT_P1("event %d",event);
	switch (event)
	{ 
		case FM_COPY_INIT:
			break;
		case FM_COPY_DRAW:
			dspl_ClearAll(); 
			switch(fm_data->copymove.data->state)
			{
				case FM_COPY_START:
				case FM_COPY_PROGRESS:
					txtId1 = TxtPleaseWait;
					if(fm_data->opt_type == FM_COPY)
						txtId2 = TxtCopying;
					else
						txtId2 = TxtMove;
					break;
				case FM_COPY_DONE:
					break;
			}
			str1 = MmiRsrcGetText(txtId1);
			str2 = MmiRsrcGetText(txtId2);
			x1= (SCREEN_SIZE_X/2) - (dspl_GetTextExtent(str1,0) / 2) ;
			y1= (SCREEN_SIZE_Y -Mmi_layout_softkeyHeight())/2 - Mmi_layout_line_height();
			x2= (SCREEN_SIZE_X/2) - (dspl_GetTextExtent(str2,0) / 2) ;
			y2= y1+Mmi_layout_line_height();
			dspl_TextOut(x1,y1,DSPL_TXTATTR_NORMAL,str1);
			dspl_TextOut(x2,y2,DSPL_TXTATTR_NORMAL,str2);
			displaySoftKeys(TxtNull,TxtSoftBack);
			dspl_Enable(1);	
			break;
		case FM_COPY_SUSPEND:
			TRACE_EVENT("Suspend");
			timStop(fm_data->copymove.timer) ;
			break;
		case FM_COPY_RESUME:
			TRACE_EVENT("Resume");
			timStart(fm_data->copymove.timer) ;
			break;
		case FM_COPY_DESTROY:
			mmi_fm_copy_dialog_destroy();
			break;
	}
 }

/*******************************************************************************
 $Function:    		mmi_fm_copy_dialog_destroy

 $Description:		Destroys the copy progress window and releases the allocated memory for the internal structure

 $Returns:		None

 $Arguments:		None
*******************************************************************************/
void mmi_fm_copy_dialog_destroy(void)
{
	T_MFW_HND    win  = fm_data->copymove.win;//mfwParent(mfw_header());
	T_MFW_WIN  * win_data = ((T_MFW_HDR *)win)->data;
	T_MMI_FM_COPY_STRUCT      * copy_data = (T_MMI_FM_COPY_STRUCT *)win_data->user;
	TRACE_FUNCTION("mmi_fm_copy_dialog_destroy");
	mmi_fm_set_mmi_plane_to_front();
	winDelete(copy_data->win);
	mfwFree((U8 *)copy_data, sizeof(T_MMI_FM_COPY_STRUCT));
}

/*******************************************************************************
 $Function:    		mmi_fm_copy_end

 $Description:		Displays the result of Copy or Move operation 

 $Returns:		None

 $Arguments:		None
*******************************************************************************/
void mmi_fm_copy_end(void)
{
	TRACE_FUNCTION ("mmi_fm_copy_end()");
	
	if(fm_data->opt_type == FM_COPY)
	{
		if(fm_data->copymove.data->state == FM_COPY_DONE) 
		{
			fm_data->list_state = FM_LIST_RECREATE;
			mmi_fm_app_show_info(0,TxtCopy,TxtDone,TxtNull,TxtSoftBack,(T_VOID_FUNC)mmi_fm_copy_end_cb,THREE_SECS,KEY_RIGHT | KEY_CLEAR | KEY_HUP);
		}
		else if (fm_data->copymove.data->state == FM_COPY_ERROR)
			mmi_fm_app_show_info(0,TxtCopy,TxtError,TxtNull,TxtSoftBack,(T_VOID_FUNC)mmi_fm_copy_end_cb,THREE_SECS,KEY_RIGHT | KEY_CLEAR | KEY_HUP);
		else if (fm_data->copymove.data->state == FM_COPY_NONE)//April 27, 2007 DRT:OMAPS00128836 x0073106
		{
		mmi_fm_app_show_info(0,TxtFile,TxtExists,TxtNull,TxtSoftBack,(T_VOID_FUNC)mmi_fm_copy_end_cb,THREE_SECS,KEY_RIGHT | KEY_CLEAR | KEY_HUP);
		}

	}
	else
	{
		if(fm_data->copymove.data->state == FM_COPY_DONE) 
		{
			mfw_fm_remove(fm_data->copymove.data->sourceFile, fm_data->source);
			fm_data->list_state = FM_LIST_RECREATE;
			mmi_fm_app_show_info(0,TxtMove,TxtDone,TxtNull,TxtSoftBack,(T_VOID_FUNC)mmi_fm_copy_end_cb,THREE_SECS,KEY_RIGHT | KEY_CLEAR | KEY_HUP);
		}
		else if (fm_data->copymove.data->state == FM_COPY_ERROR)
			mmi_fm_app_show_info(0,TxtMove,TxtError,TxtNull,TxtSoftBack,(T_VOID_FUNC)mmi_fm_copy_end_cb,THREE_SECS,KEY_RIGHT | KEY_CLEAR | KEY_HUP);		
		else if (fm_data->copymove.data->state == FM_COPY_NONE)//April 27, 2007 DRT:OMAPS00128836 x0073106
		{
		mmi_fm_app_show_info(0,TxtFile,TxtFailed,TxtNull,TxtSoftBack,(T_VOID_FUNC)mmi_fm_copy_end_cb,THREE_SECS,KEY_RIGHT | KEY_CLEAR | KEY_HUP);
		}
	}
	mfwFree((U8 *)fm_data->copymove.data->buf, FM_COPY_BUFFER_SIZE);
	
}

/*******************************************************************************
 $Function:    		mmi_fm_copy_end_cb

 $Description:		Callback function for copy info dialog

 $Returns:		None

 $Arguments:		win			-current window
				identifier		-window id
				reason		-Event cause.
*******************************************************************************/
void mmi_fm_copy_end_cb (T_MFW_HND win, USHORT identifier, SHORT reason)
{
	TRACE_EVENT_P1("state %d",fm_data->copymove.data->state );
	mmi_fm_copy_destroy(fm_data->copymove.data->state);
}

/*******************************************************************************
 $Function:    		mmi_fm_copy_destroy

 $Description:		Destroy the source list and repopulates 

 $Returns:		None

 $Arguments:		status	- Status of Copy or Move operation
*******************************************************************************/
void mmi_fm_copy_destroy(T_FM_COPY_STATE status)
{
	T_MMI_FM_DEST_STRUCT* dest_data = fm_data->dest_data;
	
	TRACE_FUNCTION ("mmi_fm_copy_destroy()");
	
	mfwFree((U8 *)fm_data->copymove.data->sourceFile, FM_MAX_DIR_PATH_LENGTH);
	mfwFree((U8 *)fm_data->copymove.data->destinationFile, FM_MAX_DIR_PATH_LENGTH);
	mfwFree((U8 *)fm_data->copymove.data, sizeof(T_MFW_FM_COPYMOVE_STRUCT));
	mfwFree((U8 *)dest_data , sizeof (T_MMI_FM_DEST_STRUCT));
	fm_data->dest_data = NULL;
	TRACE_EVENT_P1("state %d",status );
	if(fm_data->list_state == FM_LIST_RECREATE)
	{
			//Delete the options window
		if(fm_data->opt_win)
		{
			TRACE_EVENT("bookMenuDestroy");
			bookMenuDestroy(fm_data->opt_win);
			fm_data->opt_win = NULL;
		}
		//Populate the list again
		if(fm_data->list_win)
		{
			listsIconsDestroy(fm_data->list_win);
			fm_data->list_win=NULL;
			mmi_fm_list_destroy( fm_data->root_win);
			TRACE_EVENT("List destroyed");
		}
		SEND_EVENT (fm_data->root_win, FM_INIT, 0, (void *)NULL);
	}
}

/*******************************************************************************
 $Function:    		mmi_fm_copy_timer_cb

 $Description:		Timer callback 

 $Returns:		None

 $Arguments:		e	-window event Id
 				m	- Timer Handle
*******************************************************************************/
int mmi_fm_copy_timer_cb ( MfwEvt e, MfwTim *m )
{
	TRACE_FUNCTION ("mmi_fm_copy_timer_cb()");
	fm_data->copymove.data->state = mfw_fm_copy_continue(fm_data->copymove.data);
	TRACE_EVENT_P1("state %d",fm_data->copymove.data->state );
	if(fm_data->copymove.data->state == FM_COPY_PROGRESS)
	{
		timStart(fm_data->copymove.timer) ;
	}
	else if(fm_data->copymove.data->state == FM_COPY_DONE || fm_data->copymove.data->state == FM_COPY_ERROR)
	{
		timDelete(fm_data->copymove.timer);
		fm_data->copymove.timer= NULL;
		SEND_EVENT(fm_data->copymove.win, FM_COPY_DESTROY,0, (void *)NULL);
		mmi_fm_copy_end();
	}
	   return MFW_EVENT_CONSUMED;
}

/*******************************************************************************
 $Function:    		mmi_fm_move

 $Description:		Moves the selected object from source to destination

 $Returns:		Execution status

 $Arguments:		mnu		-Pointer to current menu
 				item 	-Pointer to current menu item
*******************************************************************************/
GLOBAL int mmi_fm_move (MfwMnu* m, MfwMnuItem* i)
{
	TRACE_FUNCTION ("mmi_fm_move()");
	fm_data->opt_type = FM_MOVE;
	mmi_fm_displayDestDrive();
	return MFW_EVENT_CONSUMED;
}


/*******************************************************************************
 $Function:    		mmi_fm_properties

 $Description:		Display the selected object properties

 $Returns:		Execution status

 $Arguments:		mnu		-Pointer to current menu
 				item 	-Pointer to current menu item
*******************************************************************************/
GLOBAL int mmi_fm_properties(MfwMnu* m, MfwMnuItem* i)
{
	T_MFW_HND parent_win = mfw_parent(mfw_header());
	
	TRACE_FUNCTION ("mmi_fm_properties()");	

	mmi_fm_properties_editor_create(parent_win);
	
	return MFW_EVENT_CONSUMED;
}

/*******************************************************************************
 $Function:    		mmi_fm_properties_editor_create

 $Description:		Creates an editor for creating a new directory

 $Returns:		Execution status

 $Arguments:		parent_win		-Parent window
*******************************************************************************/
T_MFW_HND mmi_fm_properties_editor_create(T_MFW_HND parent_win)
{
	T_MFW_HND  win;
	T_AUI_EDITOR_DATA	editor_data;
	T_FM_CURDIR *cur_dir = fm_data->cur_dir;
/*#ifdef FF_MMI_UNICODE_SUPPORT	
	T_WCHAR name[FM_MAX_OBJ_NAME_LENGTH];
#else
	char name[FM_MAX_OBJ_NAME_LENGTH];
#endif*/
	char size[FM_MAX_OBJ_NAME_LENGTH];
	char date[FM_MAX_OBJ_NAME_LENGTH];
	char time[FM_MAX_OBJ_NAME_LENGTH];
	
	TRACE_FUNCTION ("mmi_fm_newdir_editor_create");

	fm_data->edt_buf = (char *)mfwAlloc(FM_MAX_DETAILS_BUFFER);

	memset(&editor_data,'\0',sizeof(editor_data));
 	/*
	** Initialise the editor
	*/
	AUI_edit_SetDefault(&editor_data);
	AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII,(UBYTE *) fm_data->edt_buf, 100);
	AUI_edit_SetMode(&editor_data,ED_MODE_ALPHA,0);
	AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtNull, TxtDetails, NULL);
	AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtNull);
	AUI_edit_SetEvents(&editor_data, 0, TRUE, FOREVER, (T_AUI_EDIT_CB)mmi_fm_properties_editor_exec_cb);
	win = AUI_edit_Start(parent_win, &editor_data);
	//Name
	AUI_edit_InsertString(win , (UBYTE *) "Name : ",ATB_DCS_ASCII);

#ifdef FF_MMI_UNICODE_SUPPORT
	//sprintf(name," : %s",cur_dir->obj_list[cur_dir->currentIndex]->name);
	if (fm_data->app == FM_AUDIO)
	{
		char *name;
		int size= (wstrlen(cur_dir->obj_list[cur_dir->currentIndex]->name_uc)+1)*2;
		name = (char *)mfwAlloc(size);
		
		unicode_to_char_array(cur_dir->obj_list[cur_dir->currentIndex]->name_uc, name);
		AUI_edit_InsertString(win , (UBYTE *)name,ATB_DCS_UNICODE);
		
		mfwFree(name, size);
	}
	else
#endif
	{
		//sprintf(name," : %s",cur_dir->obj_list[cur_dir->currentIndex]->name);
		AUI_edit_InsertString(win , (UBYTE *)cur_dir->obj_list[cur_dir->currentIndex]->name,ATB_DCS_ASCII);
	}
	
	AUI_edit_InsertChar(win , ctrlEnter);
	//size
	AUI_edit_InsertString(win , (UBYTE *) "Size",ATB_DCS_ASCII);
	sprintf(size," : %d bytes",cur_dir->obj_properties[cur_dir->currentIndex]->size);
	AUI_edit_InsertString(win , (UBYTE *)size,ATB_DCS_ASCII);
	AUI_edit_InsertChar(win , ctrlEnter);
	TRACE_EVENT("Date");
	//Date
	AUI_edit_InsertString(win , (UBYTE *) "Date",ATB_DCS_ASCII);
	sprintf(date," : %s",cur_dir->obj_properties[cur_dir->currentIndex]->date);
	AUI_edit_InsertString(win , (UBYTE *)date,ATB_DCS_ASCII);
	AUI_edit_InsertChar(win , ctrlEnter);
	//Time
	AUI_edit_InsertString(win , (UBYTE *) "Time",ATB_DCS_ASCII);
	sprintf(time," : %s",cur_dir->obj_properties[cur_dir->currentIndex]->time);
	AUI_edit_InsertString(win , (UBYTE *)time,ATB_DCS_ASCII);
	AUI_edit_InsertChar(win , ctrlEnter);
	
	AUI_edit_SetMode(&editor_data,ED_MODE_READONLY,0);
	win_show(win);
	return win;
}

/*******************************************************************************
 $Function:    		mmi_fm_properties_editor_exec_cb

 $Description:		Event handler for the editor
 
 $Returns:		None

 $Arguments:		win			-current window
				identifier		-window id
				reason		-Event cause.
*******************************************************************************/
static void mmi_fm_properties_editor_exec_cb(T_MFW_HND win, USHORT identifier, SHORT reason)
{
	TRACE_FUNCTION ("mmi_fm_properties_editor_exec_cb()");

	switch (reason)
	{
		case INFO_KCD_LEFT:
		case INFO_KCD_RIGHT:
		case INFO_KCD_HUP:	
			mmi_fm_properties_editor_destroy( );
			break;
		default:
			/* otherwise no action to be performed
			*/
			break;	
		
	}
}

/*******************************************************************************
 $Function:    		mmi_fm_properties_editor_destroy

 $Description:		Frees the allocated memory

 $Returns:		None

 $Arguments:		None
*******************************************************************************/
void mmi_fm_properties_editor_destroy(void)
{
	TRACE_FUNCTION ("mmi_fm_properties_editor_destroy");
	
	mfwFree((U8 *)fm_data->edt_buf, FM_MAX_DETAILS_BUFFER);
}

/*******************************************************************************
 $Function:    		mmi_fm_memStat

 $Description:		Display the selected drive's free, used space

 $Returns:		Execution status

 $Arguments:		mnu		-Pointer to current menu
 				item 	-Pointer to current menu item
*******************************************************************************/
GLOBAL int mmi_fm_memStat(MfwMnu* m, MfwMnuItem* i)
{
	T_MFW_HND parent_win = mfw_parent(mfw_header());
	
	TRACE_FUNCTION ("mmi_fm_memStat()");	
	
	mfw_fm_getMemStat(&fm_data->nFreeBytes, &fm_data->nUsedBytes,fm_data->source);
	mmi_fm_memStat_editor_create(parent_win);
	return MFW_EVENT_CONSUMED;	
}

/*******************************************************************************
 $Function:    		mmi_fm_memStat_editor_create

 $Description:		Creates an editor for creating a new directory

 $Returns:		Execution status

 $Arguments:		parent_win		-Parent window
*******************************************************************************/
T_MFW_HND mmi_fm_memStat_editor_create(T_MFW_HND parent_win)
{
	T_MFW_HND  win;
	T_AUI_EDITOR_DATA	editor_data;
	char free[FM_MAX_OBJ_NAME_LENGTH];
	char used[FM_MAX_OBJ_NAME_LENGTH];
	char total[FM_MAX_OBJ_NAME_LENGTH];
	
	TRACE_FUNCTION ("mmi_fm_newdir_editor_create");

	fm_data->edt_buf = (char *)mfwAlloc(FM_MAX_DETAILS_BUFFER);

	memset(&editor_data,'\0',sizeof(editor_data));
 	/*
	** Initialise the editor
	*/
	AUI_edit_SetDefault(&editor_data);
	AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII,(UBYTE *) fm_data->edt_buf, 100);
	AUI_edit_SetMode(&editor_data,ED_MODE_ALPHA,0);
	AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtNull, TxtMemorystat, NULL);
	AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtNull);
	AUI_edit_SetEvents(&editor_data, 0, TRUE, FOREVER, (T_AUI_EDIT_CB)mmi_fm_memStat_editor_exec_cb);
	win = AUI_edit_Start(parent_win, &editor_data);

	AUI_edit_InsertString(win , (UBYTE *) "Used",ATB_DCS_ASCII);
	sprintf(used," :%d KB ",(fm_data->nUsedBytes));
	AUI_edit_InsertString(win , (UBYTE *)used,ATB_DCS_ASCII);
	AUI_edit_InsertChar(win , ctrlEnter);
	AUI_edit_InsertChar(win , ctrlEnter);
	
	AUI_edit_InsertString(win , (UBYTE *) "Free",ATB_DCS_ASCII);
	sprintf(free," :%d KB ",fm_data->nFreeBytes);
	AUI_edit_InsertString(win , (UBYTE *)free,ATB_DCS_ASCII);
	AUI_edit_InsertChar(win , ctrlEnter);
	AUI_edit_InsertChar(win , ctrlEnter);
	
	AUI_edit_InsertString(win , (UBYTE *) "Total",ATB_DCS_ASCII);
	sprintf(total," :%d KB ",(fm_data->nFreeBytes+fm_data->nUsedBytes));
	AUI_edit_InsertString(win , (UBYTE *)total,ATB_DCS_ASCII);
	AUI_edit_InsertChar(win , ctrlEnter);
	
	AUI_edit_SetMode(&editor_data,ED_MODE_READONLY, ED_CURSOR_NONE);
	win_show(win);
	return win;
}

/*******************************************************************************
 $Function:    		mmi_fm_memStat_editor_exec_cb

 $Description:		Event handler for the editor
 
 $Returns:		None

 $Arguments:		win			-current window
				identifier		-window id
				reason		-Event cause.
*******************************************************************************/
static void mmi_fm_memStat_editor_exec_cb(T_MFW_HND win, USHORT identifier, SHORT reason)
{
	TRACE_FUNCTION ("mmi_fm_memStat_editor_exec_cb()");

	switch (reason)
	{
		case INFO_KCD_LEFT:
		case INFO_KCD_RIGHT:
		case INFO_KCD_HUP:	
			mmi_fm_memStat_editor_destroy( );
			break;
		default:
			/* otherwise no action to be performed
			*/
			break;	

		
	}
}

/*******************************************************************************
 $Function:    		mmi_fm_memStat_editor_destroy

 $Description:		Frees the allocated memory

 $Returns:		None

 $Arguments:		None
*******************************************************************************/
void mmi_fm_memStat_editor_destroy(void)
{
	TRACE_FUNCTION ("mmi_fm_properties_editor_destroy");
	
	mfwFree((U8 *)fm_data->edt_buf, FM_MAX_DETAILS_BUFFER);
}

/*******************************************************************************
 $Function:    		mmi_fm_format

 $Description:	 	Formats the seleted drive

 $Returns:		Execution status

 $Arguments:		mnu		-Pointer to current menu
 				item 	-Pointer to current menu item
*******************************************************************************/
GLOBAL int mmi_fm_format(MfwMnu* m, MfwMnuItem* i)
{
	T_MFW_HND parent_win = mfw_parent(mfw_header());
	
	TRACE_FUNCTION ("mmi_fm_format()");	
	
	if( fm_data->source == FM_NOR_FLASH)
		mmi_fm_app_show_info(parent_win,TxtFormat,TxtNotAllowed,TxtNull,TxtSoftBack,0,THREE_SECS,KEY_RIGHT | KEY_CLEAR | KEY_HUP);
	else
		mmi_fm_app_show_info(parent_win,TxtFormat,TxtNull,TxtSoftOK,TxtSoftBack,(T_VOID_FUNC)mmi_fm_format_confirm_cb,FOREVER,KEY_LEFT|KEY_RIGHT | KEY_CLEAR | KEY_HUP);
	return MFW_EVENT_CONSUMED;	
}

USHORT check_source_setting( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi )
{
	if((fm_data->app == FM_AUDIO) && (fm_data->cur_dir->dirinfo.aud.state == FM_AUD_NONE))	
		return 0;
	else
		return 1;
}

USHORT check_source_audio( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi )
{
	if(fm_data->app == FM_AUDIO)	
		return 0;
	else
		return 1;
}

USHORT check_source_image( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi )
{
	if(fm_data->app == FM_IMAGE)	
		return 0;
	else
		return 1;
}

USHORT format_check_dev( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi )
{
	if(fm_data->source == FM_NOR_FLASH)	
		return 1;
	else
		return 0;
}
USHORT check_dev( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi )
{

char curDir[10];
UINT16 curDir_uc[10];
UINT16 objName_uc[10];
char objName[10];
T_RFS_DIR f_dir;
			
			strcpy(curDir, "/");
			convert_u8_to_unicode(curDir, curDir_uc);

			if (rfs_opendir (curDir_uc, &f_dir) < 0)
			{
				TRACE_EVENT_P1("Opening dir %s Failed",curDir);
				return FM_DIR_DOESNOTEXISTS; 
			}

			while(rfs_readdir (&f_dir, objName_uc, FM_MAX_OBJ_NAME_LENGTH) > 0x0 )
			{
				if (objName_uc[0]  == '\0')
				{
					return FM_READDIR_ERROR;
				}

				convert_unicode_to_u8(objName_uc, objName);
				
				if(strcmp(objName,"MMC")==0)
				{
					rfs_closedir(&f_dir);
					return 0;
				}
			}    
			rfs_closedir(&f_dir);
  return 1;
}

/*******************************************************************************
 $Function:    		mmi_fm_format_confirm_cb

 $Description:		Callback function for remove confirmation dialog

 $Returns:		None

 $Arguments:		win			-current window
				identifier		-window id
				reason		-Event cause.
*******************************************************************************/
void mmi_fm_format_confirm_cb (T_MFW_HND win, USHORT identifier, SHORT reason)
{
	T_MFW_FM_STATUS status = FM_NO_ERROR;
	T_MFW_HND parent_win = mfw_parent(mfw_header());
	
	TRACE_FUNCTION ("mmi_fm_format_confirm_cb()");

	switch(reason)
	{
		case INFO_KCD_LEFT:
			status =mfw_fm_format( fm_data->source);
			switch(status)
			{
				case FM_NO_ERROR:
					mmi_fm_app_show_info(parent_win,TxtFormat,TxtDone,TxtNull,TxtSoftBack,0,THREE_SECS,KEY_RIGHT | KEY_CLEAR | KEY_HUP);
					break;
				case FM_FORMAT_ERROR:
					mmi_fm_app_show_info(parent_win,TxtFormat,TxtError,TxtNull,TxtSoftBack,0,THREE_SECS,KEY_RIGHT | KEY_CLEAR | KEY_HUP);
					break;
			}
			break;
	}
	
}

/*******************************************************************************
 $Function:    		mmi_fm_get_filename

 $Description:	 	Extracts the filename discarding the extension

 $Returns:		None

 $Arguments:		filename		-Pointer to filename
******************************************************************************/
void mmi_fm_get_filename( char * filename)
{
	char* temp;
	int s;

	TRACE_FUNCTION("mmi_fm_img_getfilename");
	
	temp=(char *)strchr(filename,'.');
	if(filename && temp)
	{
		s = temp -filename;
		filename[s] ='\0';
	}
	return;
}

/*******************************************************************************
 $Function:    		mmi_fm_get_ext

 $Description:	 	Extracts the extension discarding the filename

 $Returns:		Extention

 $Arguments:		filename	-Pointer to filename
******************************************************************************/
char * mmi_fm_get_ext( char * filename)
{
	char * ext;
	
	TRACE_FUNCTION("mmi_fm_img_getext");
	
	ext=(char *)strchr(filename,'.');
	if(ext)
		ext++;
	return ext;
}

/*******************************************************************************
 $Function:    		mmi_fm_imgThmbGen_identifyFile

 $Description:	 	Identifies the valid image file for which the thumbnail is not yet generated
				Index is updated in cur_dir->currentIndex
				
 $Returns:		None

 $Arguments:		None
******************************************************************************/
void mmi_fm_imgThmbGen_identifyFile()
{
	T_FM_CURDIR *cur_dir = fm_data->cur_dir;
	
	TRACE_FUNCTION ("mmi_fm_imgThmbGen_identifyFile()");
	
	while(cur_dir->currentIndex < cur_dir->num_objs)
	{
		if(   cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_IMAGE &&
			cur_dir->obj_data[cur_dir->currentIndex]->image.thumbnail == FALSE )
		{
			break;
		}
		cur_dir->currentIndex++;
	}
}

/*******************************************************************************
 $Function:    		mmi_fm_imgThmbGen_start

 $Description:	 	Starts the thumbnail generation UCP
				
 $Returns:		None

 $Arguments:		None
******************************************************************************/
void mmi_fm_imgThmbGen_start(void)
{
	T_FM_IMG_STATE result = FM_UCP_NO_ERROR;
	char  currFilePath[FM_MAX_DIR_PATH_LENGTH];
	char  curFilename[FM_MAX_OBJ_NAME_LENGTH];
	T_FM_CURDIR *cur_dir = fm_data->cur_dir;

	TRACE_FUNCTION ("mmi_fm_imgThmbGen_start()");

	cur_dir->dirinfo.img.ipMsl = aci_create(mslPrimHandler,NULL);	 
	//cur_dir->currentIndex would contain the index to the valid file for thumbnail generation
	mmi_fm_imgThmbGen_identifyFile();
	//No files for thumbnail generation or
	if( cur_dir->currentIndex < cur_dir->num_objs )
	{		
		displayMenuKeys(MENU_KEY_WAIT);
		fm_data->menu_list_data->block_keys =  (BOOL)TRUE;
		strcpy(curFilename,cur_dir->obj_list[cur_dir->currentIndex ]->name);
		mmi_fm_get_filename(curFilename);
	 	sprintf(currFilePath,"%s%s/",cur_dir->dir_path,cur_dir->dir_name);
		cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
		cur_dir->dirinfo.img.state = FM_UCP_NONE;
		result = mfw_fm_imgThmb_create();
		if(result == FM_UCP_NO_ERROR)
		{
			result = mfw_fm_imgThmb_setparams((char *)currFilePath,curFilename,FM_MFW_QCIF_WIDTH,FM_MFW_QCIF_HEIGHT, fm_data->source);
			if(result  == FM_UCP_NO_ERROR)
			{
				result = mfw_fm_imgThmb_setcallback();
				if(result  == FM_UCP_NO_ERROR)
				{
					cur_dir->dirinfo.img.cmd = FM_UCP_THMB_INIT;
					cur_dir->dirinfo.img.state = FM_UCP_NONE;
					result = mfw_fm_imgThmb_init();
					if(result  != FM_UCP_NO_ERROR)
					{
						//Error initializing thumbnail UCP
						TRACE_ERROR("Error initializing thumbnail UCP");
						cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
						cur_dir->dirinfo.img.state = FM_UCP_NONE;
						result = mfw_fm_imgThmb_destroy();
						if(result != FM_UCP_NO_ERROR)
							TRACE_ERROR("Error destroying the thumbnail UCP");
					}
				}
				else
				{
					//Error setting callback for thumbnail UCP
					TRACE_ERROR("Error setting callback for thumbnail UCP");
					cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
					cur_dir->dirinfo.img.state = FM_UCP_NONE;
					result = mfw_fm_imgThmb_destroy();
					if(result != FM_UCP_NO_ERROR)
						TRACE_ERROR("Error destroying the thumbnail UCP");
				}
			}
			else
			{
				//Error configuring thumbnail UCP
				TRACE_ERROR("Error configuring thumbnail UCP");
				cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
				cur_dir->dirinfo.img.state = FM_UCP_NONE;
				result = mfw_fm_imgThmb_destroy();
				if(result != FM_UCP_NO_ERROR)
					TRACE_ERROR("Error destroying the thumbnail UCP");
			}		
		}
		else
		{
			//Error creating thumbnail UCP
			TRACE_ERROR("Error creating thumbnail UCP");
		}
	}
	else
	{
		//No files for thumbnail generation
		cur_dir->currentIndex=cur_dir->startIndex;
		mmi_fm_imgThmbDraw_start();
	}			

}
/*******************************************************************************
 $Function:    		mmi_fm_imgThmbGen_resume

 $Description:	 	Starts the thumbnail generation UCP
				
 $Returns:		None

 $Arguments:		None
******************************************************************************/

void mmi_fm_imgThmbGen_resume(void)
{
	T_FM_IMG_STATE result = FM_UCP_NO_ERROR;
	char  currFilePath[FM_MAX_DIR_PATH_LENGTH];
	char  curFilename[FM_MAX_OBJ_NAME_LENGTH];
	T_FM_CURDIR *cur_dir = fm_data->cur_dir;

	TRACE_FUNCTION ("mmi_fm_imgThmbGen_resume()");
	
	cur_dir->currentIndex++;

	//cur_dir->currentIndex would contain the index to the valid file for thumbnail generation
	mmi_fm_imgThmbGen_identifyFile();
	
	if(cur_dir->currentIndex < cur_dir->num_objs )
	{
		displayMenuKeys(MENU_KEY_WAIT);
		fm_data->menu_list_data->block_keys =  (BOOL)TRUE;
		strcpy(curFilename,cur_dir->obj_list[cur_dir->currentIndex ]->name);
		mmi_fm_get_filename(curFilename);
	 	sprintf(currFilePath,"%s%s/",cur_dir->dir_path,cur_dir->dir_name);
		cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
		cur_dir->dirinfo.img.state = FM_UCP_NONE;
		result = mfw_fm_imgThmb_setparams((char *)currFilePath,curFilename,FM_MFW_QCIF_WIDTH,FM_MFW_QCIF_HEIGHT, fm_data->source);
		if(result  == FM_UCP_NO_ERROR)
		{
			result = mfw_fm_imgThmb_setcallback();
			if(result  == FM_UCP_NO_ERROR)
			{
				cur_dir->dirinfo.img.cmd = FM_UCP_THMB_INIT;
				cur_dir->dirinfo.img.state = FM_UCP_NONE;
				result = mfw_fm_imgThmb_init();
				if(result  != FM_UCP_NO_ERROR)
				{
					//Error initializing thumbnail UCP
					TRACE_ERROR("Error initializing thumbnail UCP");
					cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
					cur_dir->dirinfo.img.state = FM_UCP_NONE;
					result = mfw_fm_imgThmb_destroy();
					if(result != FM_UCP_NO_ERROR)
						TRACE_ERROR("Error destroying the thumbnail UCP");
				}
			}
			else
			{
				//Error setting callback for thumbnail UCP
				TRACE_ERROR("Error setting callback for thumbnail UCP");
				cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
				cur_dir->dirinfo.img.state = FM_UCP_NONE;
				result = mfw_fm_imgThmb_destroy();
				if(result != FM_UCP_NO_ERROR)
					TRACE_ERROR("Error destroying the thumbnail UCP");
			}
		}
		else
		{
			//Error configuring thumbnail UCP
			TRACE_ERROR("Error configuring thumbnail UCP");
			cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
			cur_dir->dirinfo.img.state = FM_UCP_NONE;
			result = mfw_fm_imgThmb_destroy();
			if(result != FM_UCP_NO_ERROR)
				TRACE_ERROR("Error destroying the thumbnail UCP");
		}		
	}
	else
	{
		//No files for thumbnail generation
		cur_dir->currentIndex=cur_dir->startIndex;
		cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
		cur_dir->dirinfo.img.state = FM_UCP_NONE;
		result = mfw_fm_imgThmb_destroy();
		if(result != FM_UCP_NO_ERROR)
			TRACE_ERROR("Error destroying the thumbnail UCP");
		mmi_fm_imgThmbDraw_start();
	}
}
/*******************************************************************************
 $Function:    		mmi_fm_imgThmbGen_start

 $Description:	 	Generates thumbnail
				
 $Returns:		None

 $Arguments:		None
******************************************************************************/
void mmi_fm_imgThmbGen(void)
{
	char  currFilePath[FM_MAX_DIR_PATH_LENGTH];
	char  curFilename[FM_MAX_OBJ_NAME_LENGTH];
	T_FM_IMG_STATE result = FM_UCP_NO_ERROR;
	T_FM_CURDIR *cur_dir = fm_data->cur_dir;

	TRACE_FUNCTION ("mmi_fm_imgThmbGen()");
	
	cur_dir->currentIndex++;
	//cur_dir->currentIndex would contain the index to the valid file for thumbnail generation
	mmi_fm_imgThmbGen_identifyFile();
	if(cur_dir->currentIndex < cur_dir->num_objs)
	{
		displayMenuKeys(MENU_KEY_WAIT);
		fm_data->menu_list_data->block_keys =  (BOOL)TRUE;
		strcpy(curFilename,cur_dir->obj_list[cur_dir->currentIndex]->name);
		mmi_fm_get_filename(curFilename);
	 	sprintf(currFilePath,"%s%s/",cur_dir->dir_path,cur_dir->dir_name);
		result= mfw_fm_imgThmb_setparams((char *)currFilePath,curFilename,FM_MFW_QCIF_WIDTH,FM_MFW_QCIF_HEIGHT,fm_data->source);
		if(result == FM_UCP_NO_ERROR)
		{
			cur_dir->dirinfo.img.cmd=FM_UCP_THMB_GEN;
			cur_dir->dirinfo.img.state=FM_UCP_NONE;
			result = mfw_fm_imgThmb_generate();
			if(result != FM_UCP_NO_ERROR)
			{
				//Error Generating thumbnails
				//Deinitialize the Thumbnail UCP and destroy it
				TRACE_ERROR("Error generating thumbnails");
				cur_dir->dirinfo.img.cmd=FM_UCP_THMB_DEINIT;
				cur_dir->dirinfo.img.state=FM_UCP_ERROR;
				result = mfw_fm_imgThmb_deinit();
				if(result != FM_UCP_NO_ERROR)
				{
					TRACE_ERROR("Error deinitializing the thumbnail UCP");
					cur_dir->dirinfo.img.cmd=FM_UCP_NONE;
					cur_dir->dirinfo.img.state=FM_UCP_NONE;
					result = mfw_fm_imgThmb_destroy();
					if(result != FM_UCP_NO_ERROR)
						TRACE_ERROR("Error destroying the thumbnail UCP");
				}
			}
		}
		else
		{
			//Error configuring thumbnail UCP
			//Deinitialize the Thumbnail UCP and destroy it
			TRACE_ERROR("Error configuring thumbnail UCP");
			cur_dir->dirinfo.img.cmd=FM_UCP_THMB_DEINIT;
			cur_dir->dirinfo.img.state=FM_UCP_ERROR;
			result = mfw_fm_imgThmb_deinit();
			if(result != FM_UCP_NO_ERROR)
			{
				TRACE_ERROR("Error deinitializing the thumbnail UCP");
				cur_dir->dirinfo.img.cmd=FM_UCP_NONE;
				cur_dir->dirinfo.img.state=FM_UCP_NONE;
				result = mfw_fm_imgThmb_destroy();
				if(result != FM_UCP_NO_ERROR)
					TRACE_ERROR("Error destroying the thumbnail UCP");
			}			
		}
	}
	else
	{
		//No more thumbnails to genearte
		//Deinitialize the thumbnail UCP and start the Viewer UCP for drawing the thumbnails
		TRACE_EVENT("Thumbnail generation complete");
		cur_dir->dirinfo.img.cmd=FM_UCP_THMB_DEINIT;
		cur_dir->dirinfo.img.state=FM_UCP_NONE;
		result = mfw_fm_imgThmb_deinit();
		if(result != FM_UCP_NO_ERROR)
		{
			TRACE_ERROR("Error deinitializing the thumbnail UCP");
			cur_dir->dirinfo.img.cmd=FM_UCP_NONE;
			cur_dir->dirinfo.img.state=FM_UCP_NONE;
			result = mfw_fm_imgThmb_destroy();
			if(result != FM_UCP_NO_ERROR)
				TRACE_ERROR("Error destroying the thumbnail UCP");
		}		
	}
}

/*******************************************************************************
 $Function:    		mmi_fm_imgThmbDraw_identifyFile

 $Description:	 	Identifies the valid image file which has thumbnail
				Index is updated in cur_dir->currentIndex
				
 $Returns:		None

 $Arguments:		None
******************************************************************************/
void mmi_fm_imgThmbDraw_identifyFile()
{
	T_FM_CURDIR *cur_dir =  fm_data->cur_dir;

	TRACE_FUNCTION ("mmi_fm_imgThmbDraw_identifyFile()");

	while( (cur_dir->currentIndex < cur_dir->num_objs) )
	{
		if(   cur_dir->obj_list[cur_dir->currentIndex]->type == OBJECT_TYPE_IMAGE &&
			cur_dir->obj_data[cur_dir->currentIndex]->image.thumbnail == TRUE )
		{
			break;
		}
		cur_dir->currentIndex++;
	}
}

/*******************************************************************************
 $Function:    		mmi_fm_imgThmbDraw_start

 $Description:	 	Starts the image display UCP
				
 $Returns:		None

 $Arguments:		None
******************************************************************************/
void mmi_fm_imgThmbDraw_start(void)	
{
	MfwMnuItem *menu_item;
	T_FM_IMG_STATE result = FM_UCP_NO_ERROR;
	char  currFilePath[FM_MAX_DIR_PATH_LENGTH];
	char  curFilename[FM_MAX_OBJ_NAME_LENGTH];
	T_FM_CURDIR *cur_dir = fm_data->cur_dir;
	int x_offset=0, y_offset;
	
	TRACE_FUNCTION ("mmi_fm_imgThmbDraw_start()");
	if(!cur_dir->dirinfo.img.ipMsl)
		cur_dir->dirinfo.img.ipMsl = aci_create(mslPrimHandler,NULL);	 
	

	//cur_dir->currentIndex would contain the index to the valid file for drawing the thumbnail
	mmi_fm_imgThmbDraw_identifyFile();
	if( ((cur_dir->currentIndex - cur_dir->startIndex )< fm_data->menu_list_data->SnapshotSize) 
		&&   cur_dir->currentIndex < cur_dir->num_objs)
	{
		displayMenuKeys(MENU_KEY_WAIT);
		fm_data->menu_list_data->block_keys =  (BOOL)TRUE;
		menu_item = fm_data->menu_list_data->List;
		y_offset=menu_item[0].icon->area.py+ ((cur_dir->currentIndex % 3)  * fm_data->lineheight );
		if(cur_dir->dirinfo.img.cmd == FM_UCP_NONE && cur_dir->dirinfo.img.state == FM_UCP_NONE)
		{
			//Viewer UCP is not yet created, so create it and then draw the thumbnails
			result = mfw_fm_imgViewer_create();
			if(result == FM_UCP_NO_ERROR)
			{
				strcpy(curFilename,cur_dir->obj_list[cur_dir->currentIndex ]->name);
				mmi_fm_get_filename(curFilename);
			 	sprintf(currFilePath,"%s%s/",cur_dir->dir_path,cur_dir->dir_name);
				result = mfw_fm_imgViewer_setImageProperty((char *)currFilePath,curFilename,FM_MFW_PREVIEW_WIDTH,FM_MFW_PREVIEW_HEIGHT,x_offset,y_offset, fm_data->source);			
				if(result == FM_UCP_NO_ERROR)
				{
					result = mfw_fm_imgViewer_setcallback();
					if(result == FM_UCP_NO_ERROR)
					{
						cur_dir->dirinfo.img.cmd = FM_UCP_THMBIMG_INIT;
						cur_dir->dirinfo.img.state = FM_UCP_NONE;
						result = mfw_fm_imgViewer_init();
						if(result != FM_UCP_NO_ERROR)
						{
							//Error initializing the Viewer UCP, destroy it
							TRACE_ERROR("Error initializing the Viewer UCP");
							cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
							cur_dir->dirinfo.img.state = FM_UCP_NONE;
							result = mfw_fm_imgViewer_destroy();
							if(result != FM_UCP_NO_ERROR)
								TRACE_ERROR("Error destroying the Viewer UCP");
						}
					}
					else
					{
						//Error configuring the callback for Viewer UCP, Destroy it
						TRACE_ERROR("Error configuring the callback for Viewer UCP");
						cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
						cur_dir->dirinfo.img.state = FM_UCP_NONE;
						result = mfw_fm_imgViewer_destroy();
						if(result != FM_UCP_NO_ERROR)
							TRACE_ERROR("Error destroying the Viewer UCP");
					}
				}
				else
				{
					//Error configuring the Viewer UCP, Destroy it
					TRACE_ERROR("Error configuring the Viewer UCP");
					cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
					cur_dir->dirinfo.img.state = FM_UCP_NONE;
					result = mfw_fm_imgViewer_destroy();
					if(result != FM_UCP_NO_ERROR)
						TRACE_ERROR("Error destroying the Viewer UCP");
				}
			}
			else
			{
				//Error creating Viewer UCP
				TRACE_ERROR("Error creating Viewer UCP");
			}		
		}
		else if( (cur_dir->dirinfo.img.cmd == FM_UCP_THMBIMG_DRAW || cur_dir->dirinfo.img.cmd == FM_UCP_QCIFIMG_DRAW) && 
			cur_dir->dirinfo.img.state == FM_UCP_NO_ERROR)
		{
			//Viewer UCP is already created, so draw the thumbnails
			strcpy(curFilename,cur_dir->obj_list[cur_dir->currentIndex ]->name);
			mmi_fm_get_filename(curFilename);
		 	sprintf(currFilePath,"%s%s/",cur_dir->dir_path,cur_dir->dir_name);
			result = mfw_fm_imgViewer_setImageProperty((char *)currFilePath,curFilename,FM_MFW_PREVIEW_WIDTH,FM_MFW_PREVIEW_HEIGHT,x_offset,y_offset, fm_data->source);			
			if(result == FM_UCP_NO_ERROR)
			{
				cur_dir->dirinfo.img.cmd=FM_UCP_THMBIMG_DRAW;
				cur_dir->dirinfo.img.state = FM_UCP_NONE;
				result = mfw_fm_imgViewer_view();
				if(result != FM_UCP_NO_ERROR)
				{
					//Error drawing thumbnail in the Viewer UCP, deinit and destroy it
					TRACE_ERROR("Error drawing thumbnail in the Viewer UCP");
					cur_dir->dirinfo.img.cmd = FM_UCP_THMBIMG_DEINIT;
					cur_dir->dirinfo.img.state = FM_UCP_ERROR;
					result = mfw_fm_imgViewer_deinit();
					if(result != FM_UCP_NO_ERROR)
					{
						//Error deinitializing the Viewer UCP, destroy it
						TRACE_ERROR("Error deinitializing the Viewer UCP");
						cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
						cur_dir->dirinfo.img.state = FM_UCP_NONE;
						result = mfw_fm_imgViewer_destroy();
						if(result != FM_UCP_NO_ERROR)
							TRACE_ERROR("Error destroying the Viewer UCP");
					}
				}
				
			}
			else
			{
				//Error configuring the Viewer UCP, Destroy it
				TRACE_ERROR("Error configuring the Viewer UCP");
				cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
				cur_dir->dirinfo.img.state = FM_UCP_NONE;
				result = mfw_fm_imgViewer_destroy();
				if(result != FM_UCP_NO_ERROR)
					TRACE_ERROR("Error destroying the Viewer UCP");
			}
		}
		else
		{
			TRACE_EVENT("UCP not valid state");
			displayMenuKeys(MENU_KEY_UP_DOWN_CENTER);
			fm_data->menu_list_data->block_keys = (BOOL)FALSE;
		}		
	}
	else
	{
		//No valid images to draw
		displayMenuKeys(MENU_KEY_UP_DOWN_CENTER);
		fm_data->menu_list_data->block_keys =  (BOOL)FALSE;
		TRACE_EVENT("No Files to draw");
	}
}

/*******************************************************************************
 $Function:    		mmi_fm_imgThmbDraw_resume

 $Description:	 	Starts the image display UCP
				
 $Returns:		None

 $Arguments:		None
******************************************************************************/
void mmi_fm_imgThmbDraw_resume(void)	
{
	MfwMnuItem *menu_item;
	T_FM_IMG_STATE result = FM_UCP_NO_ERROR;
	char  currFilePath[FM_MAX_DIR_PATH_LENGTH];
	char  curFilename[FM_MAX_OBJ_NAME_LENGTH];
	T_FM_CURDIR *cur_dir = fm_data->cur_dir;
	int x_offset=0, y_offset;
	
	TRACE_FUNCTION ("mmi_fm_imgThmbDraw_resume()");
	
	cur_dir->currentIndex++;
	
	//cur_dir->currentIndex would contain the index to the valid file for drawing the thumbnail
	mmi_fm_imgThmbDraw_identifyFile();
	if( ((cur_dir->currentIndex - cur_dir->startIndex )< fm_data->menu_list_data->SnapshotSize) 
		&&   cur_dir->currentIndex < cur_dir->num_objs)
	{
		displayMenuKeys(MENU_KEY_WAIT);
		fm_data->menu_list_data->block_keys =  (BOOL)TRUE;
		menu_item = fm_data->menu_list_data->List;
		y_offset=menu_item[0].icon->area.py+ ((cur_dir->currentIndex % 3)  * fm_data->lineheight );
		strcpy(curFilename,cur_dir->obj_list[cur_dir->currentIndex ]->name);
		mmi_fm_get_filename(curFilename);
	 	sprintf(currFilePath,"%s%s/",cur_dir->dir_path,cur_dir->dir_name);
		result = mfw_fm_imgViewer_setImageProperty((char *)currFilePath,curFilename,FM_MFW_PREVIEW_WIDTH,FM_MFW_PREVIEW_HEIGHT,x_offset,y_offset, fm_data->source);			
		if(result == FM_UCP_NO_ERROR)
		{
			result = mfw_fm_imgViewer_setcallback();
			if(result == FM_UCP_NO_ERROR)
			{
				cur_dir->dirinfo.img.cmd = FM_UCP_THMBIMG_INIT;
				cur_dir->dirinfo.img.state = FM_UCP_NONE;
				result = mfw_fm_imgViewer_init();
				if(result != FM_UCP_NO_ERROR)
				{
					//Error initializing the Viewer UCP, destroy it
					TRACE_ERROR("Error initializing the Viewer UCP");
					cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
					cur_dir->dirinfo.img.state = FM_UCP_NONE;
					result = mfw_fm_imgViewer_destroy();
					if(result != FM_UCP_NO_ERROR)
						TRACE_ERROR("Error destroying the Viewer UCP");
				}
			}
			else
			{
				//Error configuring the callback for Viewer UCP, Destroy it
				TRACE_ERROR("Error configuring the callback for Viewer UCP");
				cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
				cur_dir->dirinfo.img.state = FM_UCP_NONE;
				result = mfw_fm_imgViewer_destroy();
				if(result != FM_UCP_NO_ERROR)
					TRACE_ERROR("Error destroying the Viewer UCP");
			}
		}
		else
		{
			//Error configuring the Viewer UCP, Destroy it
			TRACE_ERROR("Error configuring the Viewer UCP");
			cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
			cur_dir->dirinfo.img.state = FM_UCP_NONE;
			result = mfw_fm_imgViewer_destroy();
			if(result != FM_UCP_NO_ERROR)
				TRACE_ERROR("Error destroying the Viewer UCP");
		}	
	}
	else
	{
		//No valid images to draw
		displayMenuKeys(MENU_KEY_UP_DOWN_CENTER);
		fm_data->menu_list_data->block_keys =  (BOOL)FALSE;
		TRACE_EVENT("No Files to draw");
	}
}

/*******************************************************************************
 $Function:    		mmi_fm_imgThmbGen_start

 $Description:	 	Drawa thumbnails 48 X 48
				
 $Returns:		None

 $Arguments:		None
******************************************************************************/
void mmi_fm_imgThmbDraw(void)
{
	MfwMnuItem *menu_item;
	char  currFilePath[FM_MAX_DIR_PATH_LENGTH];
	char  curFilename[FM_MAX_OBJ_NAME_LENGTH];
	T_FM_CURDIR *cur_dir = fm_data->cur_dir;
	int x_offset=0, y_offset;
	T_FM_IMG_STATE result = FM_UCP_NO_ERROR;
	
	TRACE_FUNCTION ("mmi_fm_imgThmbDraw()");
	
	mmi_fm_imgThmbDraw_identifyFile();
	if( ((cur_dir->currentIndex - cur_dir->startIndex )< fm_data->menu_list_data->SnapshotSize) 
		&&   cur_dir->currentIndex < cur_dir->num_objs)
	{
		TRACE_EVENT("Inside if");
	 	displayMenuKeys(MENU_KEY_WAIT);
		fm_data->menu_list_data->block_keys = (BOOL)TRUE;
		menu_item = fm_data->menu_list_data->List;
		y_offset=menu_item[0].icon->area.py + ((cur_dir->currentIndex % 3)  * fm_data->lineheight );
		if( (cur_dir->dirinfo.img.cmd == FM_UCP_THMBIMG_DRAW || cur_dir->dirinfo.img.cmd == FM_UCP_QCIFIMG_DRAW) 
			&& cur_dir->dirinfo.img.state == FM_UCP_NO_ERROR)
		{
			//Viewer UCP is already created, so draw the thumbnails
			strcpy(curFilename,cur_dir->obj_list[cur_dir->currentIndex ]->name);
			mmi_fm_get_filename(curFilename);
		 	sprintf(currFilePath,"%s%s/",cur_dir->dir_path,cur_dir->dir_name);
			result = mfw_fm_imgViewer_setImageProperty((char *)currFilePath,curFilename,FM_MFW_PREVIEW_WIDTH,FM_MFW_PREVIEW_HEIGHT,x_offset,y_offset,fm_data->source);			
			if(result == FM_UCP_NO_ERROR)			
			{
				cur_dir->dirinfo.img.cmd=FM_UCP_THMBIMG_DRAW;
				cur_dir->dirinfo.img.state = FM_UCP_NONE;
				result = mfw_fm_imgViewer_view();
				if(result != FM_UCP_NO_ERROR)
				{
					//Error drawing thumbnail in the Viewer UCP, deinit and destroy it
					TRACE_ERROR("Error drawing thumbnail in the Viewer UCP");
					cur_dir->dirinfo.img.cmd = FM_UCP_THMBIMG_DEINIT;
					cur_dir->dirinfo.img.state = FM_UCP_ERROR;
					result = mfw_fm_imgViewer_deinit();
					if(result != FM_UCP_NO_ERROR)
					{
						//Error deinitializing the Viewer UCP, destroy it
						TRACE_ERROR("Error deinitializing the Viewer UCP");
						cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
						cur_dir->dirinfo.img.state = FM_UCP_NONE;
						result = mfw_fm_imgViewer_destroy();
						if(result != FM_UCP_NO_ERROR)
							TRACE_ERROR("Error destroying the Viewer UCP");
					}
				}
			}
			else
			{
				//Error configuring the Viewer UCP, Destroy it
				TRACE_ERROR("Error configuring the Viewer UCP");
				cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
				cur_dir->dirinfo.img.state = FM_UCP_NONE;
				result = mfw_fm_imgViewer_destroy();
				if(result != FM_UCP_NO_ERROR)
					TRACE_ERROR("Error destroying the Viewer UCP");
			}
		}
		else if (cur_dir->dirinfo.img.cmd == FM_UCP_NONE && cur_dir->dirinfo.img.state == FM_UCP_NONE)
		{
			//Viewer UCP is not yet created, so create it and then draw the thumbnails
			result = mfw_fm_imgViewer_create();
			if(result == FM_UCP_NO_ERROR)
			{
				strcpy(curFilename,cur_dir->obj_list[cur_dir->currentIndex ]->name);
				mmi_fm_get_filename(curFilename);
			 	sprintf(currFilePath,"%s%s/",cur_dir->dir_path,cur_dir->dir_name);
				result = mfw_fm_imgViewer_setImageProperty((char *)currFilePath,curFilename,FM_MFW_PREVIEW_WIDTH,FM_MFW_PREVIEW_HEIGHT,x_offset,y_offset, fm_data->source);			
				if(result == FM_UCP_NO_ERROR)			
				{
					result = mfw_fm_imgViewer_setcallback();
					if(result == FM_UCP_NO_ERROR)
					{
						cur_dir->dirinfo.img.cmd = FM_UCP_THMBIMG_INIT;
						cur_dir->dirinfo.img.state = FM_UCP_NONE;
						result = mfw_fm_imgViewer_init();
						if(result != FM_UCP_NO_ERROR)
						{
							//Error initializing the Viewer UCP, destroy it
							TRACE_ERROR("Error initializing the Viewer UCP");
							cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
							cur_dir->dirinfo.img.state = FM_UCP_NONE;
							result = mfw_fm_imgViewer_destroy();
							if(result != FM_UCP_NO_ERROR)
								TRACE_ERROR("Error destroying the Viewer UCP");
						}
					}
					else
					{
						//Error configuring the callback for Viewer UCP, Destroy it
						TRACE_ERROR("Error configuring the callback for Viewer UCP");
						cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
						cur_dir->dirinfo.img.state = FM_UCP_NONE;
						result = mfw_fm_imgViewer_destroy();
						if(result != FM_UCP_NO_ERROR)
							TRACE_ERROR("Error destroying the Viewer UCP");
					}
				}
				else
				{
					//Error configuring the Viewer UCP, Destroy it
					TRACE_ERROR("Error configuring the Viewer UCP");
					cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
					cur_dir->dirinfo.img.state = FM_UCP_NONE;
					result = mfw_fm_imgViewer_destroy();
					if(result != FM_UCP_NO_ERROR)
						TRACE_ERROR("Error destroying the Viewer UCP");
				}
			}
			else
			{
				//Error creating Viewer UCP
				TRACE_ERROR("Error creating Viewer UCP");
			}		
		}
		else
		{
			TRACE_EVENT("UCP not valid state");
			displayMenuKeys(MENU_KEY_UP_DOWN_CENTER);
			fm_data->menu_list_data->block_keys = (BOOL)FALSE;
		}
	}
	else
	{
		displayMenuKeys(MENU_KEY_UP_DOWN_CENTER);
		fm_data->menu_list_data->block_keys =  (BOOL)FALSE;
		TRACE_EVENT("No Valid File to draw");
	}
}

/*******************************************************************************
 $Function:    		mmi_fm_imgThmbGen_start

 $Description:	 	Drawa images in QCIF width and height
				
 $Returns:		None

 $Arguments:		None
******************************************************************************/
void mmi_fm_imgDraw(void)
{
	char  currFilePath[FM_MAX_DIR_PATH_LENGTH];
	char  curFilename[FM_MAX_OBJ_NAME_LENGTH];
	T_FM_CURDIR *cur_dir = fm_data->cur_dir;
	T_FM_IMG_STATE result = FM_UCP_NO_ERROR;

	TRACE_FUNCTION ("mmi_fm_imgDraw()");
	
	 if( (cur_dir->dirinfo.img.cmd == FM_UCP_THMBIMG_DRAW || cur_dir->dirinfo.img.cmd == FM_UCP_QCIFIMG_DRAW ) && 
	 	cur_dir->dirinfo.img.state == FM_UCP_NO_ERROR)
	{
		//Viewer UCP is already created, so draw the image
		strcpy(curFilename,cur_dir->obj_list[cur_dir->currentIndex ]->name);
		mmi_fm_get_filename(curFilename);
		sprintf(currFilePath,"%s%s/",cur_dir->dir_path,cur_dir->dir_name);
		result = mfw_fm_imgViewer_setImageProperty((char *)currFilePath,curFilename,FM_MFW_QCIF_WIDTH,FM_MFW_QCIF_HEIGHT,0,0,fm_data->source);			
		if(result == FM_UCP_NO_ERROR)		
		{
			cur_dir->dirinfo.img.cmd=FM_UCP_QCIFIMG_DRAW;
			cur_dir->dirinfo.img.state = FM_UCP_NONE;  
			result = mfw_fm_imgViewer_view();
			if(result != FM_UCP_NO_ERROR)
			{
				//Error drawing thumbnail in the Viewer UCP, deinit and destroy it
				TRACE_ERROR("Error drawing thumbnail in the Viewer UCP");
				cur_dir->dirinfo.img.cmd = FM_UCP_QCIFIMG_DEINIT;
				cur_dir->dirinfo.img.state = FM_UCP_ERROR;
				result = mfw_fm_imgViewer_deinit();
				if(result != FM_UCP_NO_ERROR)
				{
					//Error deinitializing the Viewer UCP, destroy it
					TRACE_ERROR("Error deinitializing the Viewer UCP");
					cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
					cur_dir->dirinfo.img.state = FM_UCP_NONE;
					result = mfw_fm_imgViewer_destroy();
					if(result != FM_UCP_NO_ERROR)
						TRACE_ERROR("Error destroying the Viewer UCP");
				}
			}
		}
		else
		{
			//Error configuring the Viewer UCP, deinit and destroy it
			TRACE_ERROR("Error configuring Viewer UCP");
			cur_dir->dirinfo.img.cmd = FM_UCP_QCIFIMG_DEINIT;
			cur_dir->dirinfo.img.state = FM_UCP_ERROR;
			result = mfw_fm_imgViewer_deinit();
			if(result != FM_UCP_NO_ERROR)
			{
				//Error deinitializing the Viewer UCP, destroy it
				TRACE_ERROR("Error deinitializing the Viewer UCP");
				cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
				cur_dir->dirinfo.img.state = FM_UCP_NONE;
				result = mfw_fm_imgViewer_destroy();
				if(result != FM_UCP_NO_ERROR)
					TRACE_ERROR("Error destroying the Viewer UCP");
			}
		}
	 }
	else if(cur_dir->dirinfo.img.cmd != FM_UCP_NONE)
	{
		//Viewer UCP is not yet created, so create it and then draw the thumbnails
		result = mfw_fm_imgViewer_create();
		if(result == FM_UCP_NO_ERROR)
		{
			strcpy(curFilename,cur_dir->obj_list[cur_dir->currentIndex ]->name);
			mmi_fm_get_filename(curFilename);
		 	sprintf(currFilePath,"%s%s/",cur_dir->dir_path,cur_dir->dir_name);
			result = mfw_fm_imgViewer_setImageProperty((char *)currFilePath,curFilename,FM_MFW_QCIF_WIDTH,FM_MFW_QCIF_HEIGHT,0,0,fm_data->source);			
			if(result == FM_UCP_NO_ERROR)		
			{
				result = mfw_fm_imgViewer_setcallback();
				if(result == FM_UCP_NO_ERROR)	
				{
					cur_dir->dirinfo.img.cmd = FM_UCP_QCIFIMG_INIT;
					cur_dir->dirinfo.img.state = FM_UCP_NONE;
					result = mfw_fm_imgViewer_init();
					if(result != FM_UCP_NO_ERROR)
					{
						//Error initializing the Viewer UCP, destroy it
						TRACE_ERROR("Error initializing the Viewer UCP");
						cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
						cur_dir->dirinfo.img.state = FM_UCP_NONE;
						result = mfw_fm_imgViewer_destroy();
						if(result != FM_UCP_NO_ERROR)
							TRACE_ERROR("Error destroying the Viewer UCP");
					}
					
				}
				else
				{
					//Error configuring the callback for Viewer UCP, Destroy it
					TRACE_ERROR("Error configuring the callback for Viewer UCP");
					cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
					cur_dir->dirinfo.img.state = FM_UCP_NONE;
					result = mfw_fm_imgViewer_destroy();
					if(result != FM_UCP_NO_ERROR)
						TRACE_ERROR("Error destroying the Viewer UCP");
				}
			}
			else
			{
				//Error configuring the Viewer UCP, Destroy it
				TRACE_ERROR("Error configuring the Viewer UCP");
				cur_dir->dirinfo.img.cmd = FM_UCP_NONE;
				cur_dir->dirinfo.img.state = FM_UCP_NONE;
				result = mfw_fm_imgViewer_destroy();
				if(result != FM_UCP_NO_ERROR)
					TRACE_ERROR("Error destroying the Viewer UCP");
			}
		}
		else
		{
			//Error creating Viewer UCP
			TRACE_ERROR("Error creating Viewer UCP");
		}
	}
}


void mmi_fm_set_mmi_plane_to_front(void)
{
	TRACE_FUNCTION ("mmi_fm_set_mmi_plane_to_front()");
	//TRACE_EVENT_P1("cur_dir->dirinfo.aud.state3 %d",cur_dir->dirinfo.aud.state);
	dspl_set_mmi_to_idle_mode();
//	TRACE_EVENT_P1("cur_dir->dirinfo.aud.state4 %d",cur_dir->dirinfo.aud.state);
	dspl_set_mmi_to_execute_mode();
	//TRACE_EVENT_P1("cur_dir->dirinfo.aud.state5 %d",cur_dir->dirinfo.aud.state);

}

GLOBAL int mmi_pb_on_off(MfwMnu* m, MfwMnuItem* i)
{
	T_MFW_HND parent_win = mfw_parent(mfw_header());
	
	switch(m->lCursor[m->level])
	{
		case 0:
			mmi_progress_bar = PB_ON;
			mmi_fm_app_show_info(parent_win,TxtMidiLoopOn,TxtNull,TxtNull,TxtNull,0,THREE_SECS, KEY_CLEAR);
			break;

		case 1:
			mmi_progress_bar = PB_OFF;
			mmi_fm_app_show_info(parent_win,TxtMidiLoopOff,TxtNull,TxtNull,TxtNull,0,THREE_SECS, KEY_CLEAR);
			break;
	}
	return 1;
}

/* Mar 29, 2007 DRT: OMAPS00122677 x0039928 */
/* Fix: Initialize root directories */
/*******************************************************************************
 $Function:    		mmi_fm_init

 $Description:	 	Drawa images in QCIF width and height
				
 $Returns:		None

 $Arguments:		None
******************************************************************************/
void mmi_fm_init(void)
{
	mfw_fm_createRootDir(FM_NOR_FLASH);
	mfw_fm_createRootDir(FM_NORMS_FLASH);
	mfw_fm_createRootDir(FM_NAND_FLASH);
	if(check_dev(NULL, NULL, NULL) == 0)
		mfw_fm_createRootDir(FM_T_FLASH);
}
/* February 8, 2008 DRT:OMAPS00156759 (x0083025) For Unicode Support--> Start*/	
#ifdef FF_MMI_UNICODE_SUPPORT
static void unicode_to_char_array(T_WCHAR *inp, char *out)
{
	int i;
	int size = wstrlen(inp)+1;

	for (i=0; i<size; i++)
	{
		out[i*2] = (inp[i]&0xFF00)>>8;
		out[i*2+1] = (inp[i]&0x00FF);
		//out[i*2] = *(((char *) (inp+i)) + 1);
		//out[i*2+1] = *((char *) (inp+i));
	}
}
#endif
/* February 8, 2008 DRT:OMAPS00156759 (x0083025) For Unicode Support--> End*/	

#endif