view g23m/condat/ms/src/bmi/MmiUserData.c @ 72:43a6f6b32440
l1_cmplx.c: l1s_read_mon_result() reconstructed
author
Mychaela Falconia <falcon@ivan.Harhan.ORG>
date
Mon, 28 Mar 2016 05:29:40 +0000 (2016-03-28)
parents
509db1a7b7b8
children
line source
+ − /*******************************************************************************
+ −
+ − CONDAT (UK)
+ −
+ − ********************************************************************************
+ −
+ − This software product is the property of Condat (UK) Ltd and may not be
+ − disclosed to any third party without the express permission of the owner.
+ −
+ − ********************************************************************************
+ −
+ − $Project name: Basic MMI
+ − $Project code: BMI (6349)
+ − $Module: MMI
+ − $File: MmiUserData.c
+ − $Revision: 1.0
+ −
+ − $Author: Condat(UK)
+ − $Date: 22/02/01
+ −
+ − ********************************************************************************
+ −
+ − Description:
+ −
+ −
+ −
+ − ********************************************************************************
+ −
+ − $History: MmiUserData.c
+ −
+ − 25/10/00 Original Condat(UK) BMI version.
+ −
+ − $End
+ −
+ − *******************************************************************************/
+ −
+ − #define ENTITY_MFW
+ −
+ − /* includes */
+ − #include <string.h>
+ − #include <stdio.h>
+ − #include <stdlib.h>
+ −
+ − #if defined (NEW_FRAME)
+ −
+ − #include "typedefs.h"
+ − #include "vsi.h"
+ − #include "pei.h"
+ − #include "custom.h"
+ − #include "gsm.h"
+ −
+ − #else
+ −
+ − #include "STDDEFS.H"
+ − #include "custom.h"
+ − #include "gsm.h"
+ − #include "vsi.h"
+ −
+ − #endif
+ − #include "mfw_sys.h"
+ − #include "mfw_mfw.h"
+ − #include "mfw_win.h"
+ −
+ − #include "MmiMmi.h"
+ − #include "MmiUserData.h"
+ −
+ −
+ − typedef struct uDe
+ − {
+ − UserKey key;
+ − void *data;
+ − struct uDe *next;
+ − } UserDataElement, *UserDataLink;
+ −
+ −
+ − static UserDataLink userDataFind( UserDataLink first, UserKey key)
+ − {
+ − while( first != NULL && first->key != key )
+ − {
+ − first = first->next;
+ − }
+ −
+ − return first;
+ − }
+ −
+ −
+ − static UserDataLink userDataPrevious( UserDataLink first,
+ − UserDataLink beforeThis)
+ − {
+ − if( first == beforeThis ) // <beforeThis> is the first element in the list.
+ − {
+ − return NULL;
+ − }
+ −
+ − while( first->next != beforeThis )
+ − {
+ − first = first->next;
+ − }
+ −
+ − return first;
+ − }
+ −
+ −
+ − /*
+ − * Sets the user data for <window> with <key> to <data>,
+ − * and returns the previous contents of the user data.
+ − * If <data> itself is returned no user data with <key>
+ − * existed and a new user data element with <key> has been created
+ − * and set to <data>.
+ − * If NULL is returned, either <window> was invalid or a new user data
+ − * element could not be created.
+ − */
+ − void *userDataHndSet( MfwHnd window, UserKey key, void *data)
+ − {
+ − if( window == NULL ) { return NULL; }
+ −
+ − return userDataWinSet( (MfwWin *)((MfwHdr *)window)->data, key, data);
+ − }
+ −
+ −
+ − void *userDataWinSet( MfwWin *window, UserKey key, void *data)
+ − {
+ − UserDataLink thisOne;
+ −
+ − if( window == NULL ) { return NULL; }
+ −
+ − thisOne = userDataFind( (UserDataLink)window->user, key);
+ −
+ − if( thisOne == NULL ) // element with <key> does not exist: create.
+ − {
+ − thisOne = (UserDataLink)ALLOC_MEMORY(sizeof(UserDataElement));
+ −
+ − if( thisOne == NULL )
+ − {
+ − return NULL;
+ − }
+ −
+ − thisOne->key = key;
+ − thisOne->data = data;
+ − thisOne->next = (UserDataLink)window->user;
+ −
+ − window->user = (void *)thisOne;
+ −
+ − return data;
+ − }
+ − else
+ − {
+ − void *oldData = thisOne->data;
+ −
+ − thisOne->data = data;
+ −
+ − return oldData;
+ − }
+ − }
+ −
+ −
+ − /*
+ − * Returns the user data for <window> with <key>.
+ − * If NULL is returned, either <window> was invalid or no user data
+ − * with <key> existed.
+ − */
+ − void *userDataHndGet( MfwHnd window, UserKey key)
+ − {
+ − if( window == NULL ) { return NULL; }
+ −
+ − return userDataWinGet( (MfwWin *)((MfwHdr *)window)->data, key);
+ − }
+ −
+ −
+ − void *userDataWinGet( MfwWin *window, UserKey key)
+ − {
+ − UserDataLink thisOne;
+ −
+ − if( window == NULL ) { return NULL; }
+ −
+ − thisOne = userDataFind( (UserDataLink)window->user, key);
+ −
+ − if( thisOne == NULL ) { return NULL; }
+ −
+ − return thisOne->data;
+ − }
+ −
+ −
+ − /*
+ − * Deletes the user data for <window> with <key>, and returns the
+ − * contents of the user data.
+ − * If NULL is returned, either <window> was invalid or no user data
+ − * with <key> existed.
+ − */
+ − void *userDataHndDelete( MfwHnd window, UserKey key)
+ − {
+ − if( window == NULL ) { return NULL; }
+ −
+ − return userDataWinDelete( (MfwWin *)((MfwHdr *)window)->data, key);
+ − }
+ −
+ −
+ − void *userDataWinDelete( MfwWin *window, UserKey key)
+ − {
+ − UserDataLink doomed;
+ −
+ − if( window == NULL ) { return NULL; }
+ −
+ − doomed = userDataFind( (UserDataLink)window->user, key);
+ −
+ − if( doomed == NULL ) // element with <key> does not exist.
+ − {
+ − return NULL;
+ − }
+ − else
+ − {
+ − void * oldData = doomed->data;
+ − UserDataLink previous;
+ −
+ − previous = userDataPrevious( (UserDataLink)window->user, doomed);
+ −
+ − if( previous == NULL ) // <doomed> is the first element in the list.
+ − {
+ − window->user = (void *)doomed->next;
+ − }
+ − else
+ − {
+ − previous->next = doomed->next;
+ − }
+ −
+ − FREE_MEMORY( (void *)doomed, sizeof(UserDataElement));
+ −
+ − return oldData;
+ − }
+ − }
+ −