diff src/ui/mfw/mfw_cnvt.c @ 3:67bfe9f274f6

src/ui: import of src/ui3 from Magnetite
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 16 Oct 2020 06:33:10 +0000
parents
children 92abb46dc1ba
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ui/mfw/mfw_cnvt.c	Fri Oct 16 06:33:10 2020 +0000
@@ -0,0 +1,366 @@
+/*
++--------------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         $Workfile:: mfw_cnvt.c      $|
+| $Author:: Es  $ CONDAT GmbH           $Revision:: 1               $|
+| CREATED: 03.08.00                     $Modtime:: 03.08.00 18:57   $|
+| STATE  : code                                                      |
++--------------------------------------------------------------------+
+
+   MODULE  : MFW_CNVT
+
+   PURPOSE : string convertion
+
+   EXPORT  :
+
+   TO DO   :
+
+   $History:: mfw_cnvt.c                                             $
+*/
+
+#define ENTITY_MFW
+
+#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_phb.h"
+#include "mfw_phbi.h"
+#include "mfw_cm.h"
+#include "mfw_cmi.h"
+#include "mfw_nm.h"
+#include "mfw_sim.h"
+#include "mfw_sima.h"
+#include "mfw_nmi.h"
+#include "mfw_simi.h"
+#include "mfw_win.h"
+
+#include "mfw_tim.h"
+
+#include "ksd.h"
+#include "psa.h"
+
+#if defined (FAX_AND_DATA)
+#include "aci_fd.h"
+#endif
+
+#include "cmh.h"
+#include "phb.h"
+#include "cmh_phb.h"
+
+#include "mfw_ss.h"
+#include "mfw_ssi.h"
+
+#define PASSED 0
+#define FAILED 1
+#define LEN_OFFSET 1
+
+/* Added to remove warning Aug - 11 */
+EXTERN char   ATB_char_GSM (char ascii_character);
+/* End - remove warning Aug - 11 */ 
+/*
++---------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         MODULE: MFW_CNVT        |
+| STATE  : code                         ROUTINE: mfw_getStrMode |
++---------------------------------------------------------------+
+
+   PURPOSE : This function is used to request the coding format
+             of a given string. The return value is 
+             "MFW_DCS_7bits" or " MFW_DCS_UCS2".
+
+*/
+
+T_MFW_DCS mfw_getStrMode( UBYTE *str, // alpha string in MFW
+                          UBYTE len)  // length of alpha string
+                         
+{
+  
+  if( str[0] == 0x80)
+    return MFW_DCS_UCS2;
+  else
+    return MFW_DCS_7bits;
+}
+
+/*
++---------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         MODULE: MFW_CNVT        |
+| STATE  : code                         ROUTINE: mfw_SIM2GsmStr |
++---------------------------------------------------------------+
+
+   PURPOSE : This function is used to convert the MFW alpha
+             formatted string (consisting of alpha name and
+             length of name in bytes) to a GSM default string
+             (including zero-termination) and to additionally
+             set the @ code to 0x80. 
+   
+*/
+
+T_MFW mfw_SIM2GsmStr( UBYTE inLen, 
+                      UBYTE *inMfwStr, 
+                      UBYTE maxOutSize,   /* in byte */
+                      UBYTE *outGsmStr )
+                     
+{
+  int i;
+  UBYTE len;
+  
+  if (!inLen OR !maxOutSize)
+    return FAILED;        /* string is zero length */
+  
+  if (*inMfwStr EQ 0x80)  /* input UCS, output GSM default */
+  {
+    len = inLen / 2;      /* GSM string is half length of unicode string */
+    for( i=0; i<MINIMUM(len,maxOutSize-1); i++ )
+    {
+      if (inMfwStr[(i*2)+2] == 0x00)
+        * (outGsmStr + i) = 0x80;
+      else
+        * (outGsmStr + i) = inMfwStr[(i*2)+2]; /* copy every 2nd byte */
+    }
+    outGsmStr[i] = '\0';
+    return PASSED;
+  }
+  else                   /* input GSM default, output GSM default */
+  {
+    for( i=0; i<MINIMUM(inLen,maxOutSize-1); i++ )
+    {
+      if (inMfwStr[i] EQ 0x00)
+        * (outGsmStr + i) = 0x80;
+      else
+        * (outGsmStr + i) = inMfwStr[i];
+    }
+    outGsmStr[i] = '\0';
+    return PASSED;
+  }            
+
+}
+
+/*
++---------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         MODULE: MFW_CNVT        |
+| STATE  : code                         ROUTINE: mfw_SIM2UcsStr |
++---------------------------------------------------------------+
+
+   PURPOSE : This function is used to convert the MFW alpha
+             formatted string to a unicode string. The first
+             two bytes of this unicode string indicates the
+             number of characters in the string.
+   
+*/
+
+T_MFW mfw_SIM2UcsStr( UBYTE   inLen, 
+                      UBYTE*  inMfwStr, 
+                      UBYTE   maxOutSize,    /* in short */
+                      U16*    outUcsStr)
+                     
+{
+  int i;
+  short cnt;
+  
+  if (!inLen OR !maxOutSize)
+    return FAILED;
+  
+  if (inMfwStr[0] EQ 0x80)  /* input UCS, output UCS */
+  {
+  TRACE_FUNCTION("First byte is indeed 0x80");
+    //inMfwStr++;
+    inLen--;
+    
+    // NOTE: do not add '\0' termination!
+    // len should not include termination
+    cnt = 1;
+    for( i=0; i<MINIMUM(inLen/2,maxOutSize-1); i++ )
+    {
+      outUcsStr[ i + LEN_OFFSET] = ((U16)inMfwStr[cnt] << 8)&0xFF00 + ((U16)inMfwStr[cnt + 1])&0xFF;
+      cnt += 2;
+    } 
+    outUcsStr[0] = i;
+    return PASSED;
+  }
+  else                    /* input GSM default, output UCS */
+  {
+    for( i=0; i<MINIMUM(inLen,maxOutSize-1); i++ )
+      * (outUcsStr + i + LEN_OFFSET) = (U16) inMfwStr[i];
+    
+    outUcsStr[0] = i;     /* length of unicode string */
+    return PASSED;
+  }
+}
+
+/*
++---------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         MODULE: MFW_CNVT        |
+| STATE  : code                         ROUTINE: mfw_Gsm2SIMStr |
++---------------------------------------------------------------+
+
+   PURPOSE : This function is used to convert a zero-terminated
+             GSM default string ( @ code is 0x80) to a MFW 
+             alpha formatted string (consisting of alpha name
+             and length of name in bytes and @ code is 0x00). 
+             The MFW alpha format is dependent on the parameter "outMode" 
+             "outMode" is set to either " MFW_DCS_7bits" or " MFW_DCS_UCS2" 
+
+GW-SPR#762- Increased array size - required for larger phonebook entries (>40 chars). 
+*/
+
+#define MAX_CONVERT_LEN 255
+T_MFW mfw_Gsm2SIMStr( T_MFW_DCS outMode, 
+                      UBYTE *inGsmStr, 
+                      UBYTE maxOutSize,
+                      UBYTE *outMfwStr,
+                      UBYTE *outLen )
+{
+  
+  UBYTE temp_str[MAX_CONVERT_LEN];
+  int i;
+  UBYTE len = (UBYTE) strlen( (char *)inGsmStr );
+  char GSM_char;/*SPR2175*/
+  
+  len=MINIMUM(len,sizeof(temp_str));
+  memcpy( temp_str,inGsmStr,len );
+  
+  if( outMode EQ MFW_DCS_7bits )
+  {
+    /* write to outMfwStr */
+    for( i=0; i<MINIMUM(len,maxOutSize); i++ )
+    {	/*SPR2175, convert to GSM encoding*/
+       GSM_char= ATB_char_GSM( temp_str[i] );
+       temp_str[i]= GSM_char;
+      * (outMfwStr + i) = temp_str[i];
+    }
+    /* write length of name to outLen */
+    *outLen = len;
+    return PASSED;
+  }
+  else if( outMode EQ MFW_DCS_UCS2 )
+  {
+    /* write to outMfwStr */
+    outMfwStr[0] = 0x80;
+    for( i=0; i<MINIMUM(len,maxOutSize-1); i++ )
+    {
+      if( temp_str[i] EQ 0x80 ) /* check for occurance of @ */
+        temp_str[i] = 0x00;
+      * (outMfwStr + (i*2) + 1) = 0x00;
+      * (outMfwStr + (i*2) + 2) = temp_str[i];
+    }
+    /* write length of name to outLen */
+    *outLen = len*2 + 1;
+    return PASSED;
+  }
+  else
+  {
+    TRACE_EVENT ("mfw_Gsm2SIMStr() - outMode is not valid");
+    return FAILED;
+  }
+  
+//  return PASSED;  // RAVI
+}
+
+/*
++---------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         MODULE: MFW_CNVT        |
+| STATE  : code                         ROUTINE: mfw_Ucs2SIMStr |
++---------------------------------------------------------------+
+
+   PURPOSE : This function is used to convert a unicode string
+             to MFW alpha format. The MFW alpha format is 
+             dependent on the parameter "outMode". "outMode" 
+             is " MFW_DCS_7bits" or " MFW_DCS_UCS2".
+   
+*/
+
+T_MFW mfw_Ucs2SIMStr( T_MFW_DCS outMode, 
+                      U16 *inDcsStr, 
+                      UBYTE maxOutSize,
+                      UBYTE *outMfwStr,
+                      UBYTE *outLen )
+{
+  int i;
+  U16 len;
+  
+  len = inDcsStr[0];
+  
+  if( outMode EQ MFW_DCS_7bits )
+  {
+    /* write to outMfwStr */
+    for( i=0; i<MINIMUM(len,maxOutSize); i++ )
+    {
+      * (outMfwStr + (i*2) + 1) = (UBYTE) (inDcsStr[i+1] & 0xff);
+      * (outMfwStr + (i*2)) = (UBYTE) ((inDcsStr[i+1] & 0xff00) >> 8);
+    }
+    /* write length of name to outLen */
+    *outLen = len * 2;
+    
+    return PASSED;
+  }
+  else if( outMode EQ MFW_DCS_UCS2 )
+  {
+    /* write to outMfwStr */
+    outMfwStr[0] = 0x80;
+    for( i=0; i<len; i++)
+    {/*MC, SPR 1752, bytes are no longer swapped*/
+      * (outMfwStr + (i*2) + 1) = (UBYTE) (inDcsStr[i+1] & 0xff);
+      * (outMfwStr + (i*2) + 2) = (UBYTE) ((inDcsStr[i+1] & 0xff00) >> 8);
+    }
+    /* write length to outLen */
+    *outLen = (len*2) + 1;
+    
+    return PASSED;
+    
+  }
+  else	/* string does not require conversion to unicode */
+  {
+    TRACE_EVENT ("mfw_Ucs2SIMStr() - outMode is not valid");
+    return FAILED;
+  }
+  
+//  return PASSED;  // RAVI
+}
+
+/*CONQUEST 5992(related) MC added function to convert GSM string to ASCII*/
+static const unsigned char gsm_2_ascii_table[128] = { 64, 156, 36, 157, 138, 130, 151, 141, 149, 128,
+													 10,   2 ,  7,  32, 143, 134,   4,  95, 232, 226, 239, 234, 227,   5, 228,
+											 		233, 240,  32, 146, 145, 225, 144,  32,  33,  34,  35,   1,  37,  38,  39,
+											 		 40,  41,  42,  43,  44, 45,  46,  47,  48,  49,  50,  51,  52,  53,  54,
+											 		 55,  56,  57,  58,  59,  60,  61,  62,  63, 173,  65,  66,  67,  68,  69,
+											 		 70,  71,  72,  73,  74,  75,  76,  77,  78,  79,  80,  81,  82,  83,  84,
+											 		 85,  86,  87,  88,  89,  90, 142, 153, 165, 154,  06, 168,  97,  98,  99,
+											 		100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
+											 		115, 116, 117, 118, 119, 120, 121, 122, 132, 148, 164, 129, 133};
+/* PATCH JPS 29.09 END */
+
+/*
++---------------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)         MODULE  : MFW_SMS                  |
+| STATE   : code                         ROUTINE :   mfw_GSM_2_ASCII      |
++---------------------------------------------------------------------------+
+
+  PURPOSE : copy the index and status of a short message
+
+*/
+void mfw_GSM_2_ASCII(UBYTE* gsm_string, UBYTE* ascii_string, SHORT length)
+{	int i;
+
+	for(i=0;i<length;i++)
+	{
+		ascii_string[i] = gsm_2_ascii_table[gsm_string[i]];
+	}
+}
+