ft_utils.cpp
上传用户:gelin96
上传日期:2017-01-08
资源大小:20993k
文件大小:36k
源码类别:

MTK

开发平台:

C++ Builder

  1. /*****************************************************************************
  2. *  Copyright Statement:
  3. *  --------------------
  4. *  This software is protected by Copyright and the information contained
  5. *  herein is confidential. The software may not be copied and the information
  6. *  contained herein may not be used or disclosed except with the written
  7. *  permission of MediaTek Inc. (C) 2005
  8. *
  9. *  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
  10. *  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
  11. *  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
  12. *  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
  13. *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
  14. *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
  15. *  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
  16. *  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
  17. *  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
  18. *  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
  19. *  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
  20. *  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
  21. *
  22. *  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
  23. *  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
  24. *  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
  25. *  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
  26. *  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
  27. *
  28. *  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
  29. *  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
  30. *  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
  31. *  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
  32. *  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
  33. *
  34. *****************************************************************************/
  35. /*****************************************************************************
  36.  *
  37.  * Filename:
  38.  * ---------
  39.  *   ft_utils.cpp
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   Maui META APP
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *  Format transformation function source
  48.  *
  49.  * Author:
  50.  * -------
  51.  *  Andy Ueng (mtk00490)
  52.  *
  53.  *============================================================================
  54.  *             HISTORY
  55.  * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  56.  *------------------------------------------------------------------------------
  57.  * $Revision$
  58.  * $Modtime$
  59.  * $Log$
  60.  * 
  61.  *------------------------------------------------------------------------------
  62.  * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  63.  *============================================================================
  64.  ****************************************************************************/
  65. #include <vcl.h>
  66. #include <math.h>
  67. #include <stdio.h>
  68. #ifndef __VISATYPE_HEADER__
  69. #include "visatype.h"
  70. #endif
  71. #pragma hdrstop
  72. #include "man_error.h"
  73. #ifndef  _META_UTILS_H_
  74. #include "meta_utils.h"
  75. #endif
  76. #ifndef  _RF_COMMON_H_
  77. #include "rf_common.h"
  78. #endif
  79. #ifndef  _STR_UTILS_H_
  80. #include "str_utils.h"
  81. #endif
  82. //------------------------------------------------------------------------------
  83. AnsiString Double_To_AnsiString(double d)
  84. {
  85.     char str[1024];
  86.     sprintf(str, "%f", d);
  87.     AnsiString ansi_str(str);
  88.     return ansi_str;
  89. }
  90. //------------------------------------------------------------------------------
  91. bool  AnsiString_To_Short(AnsiString ansi_str, short &out_value, short range_min=0, short range_max=-1 )
  92. {
  93.    /* check if each char is valid */
  94.    {  int   i;
  95.       char  ch;
  96.       char  str[256];
  97.       int   str_len = ansi_str.Length();
  98.       if(str_len==0)  return(false);
  99.       strcpy( str, ansi_str.c_str() );
  100.       for( i=0; i<str_len; i++ )
  101.       {  ch = str[i];
  102.          if( ((ch>='0')&&(ch<='9')) || (ch=='+') || (ch=='-') || (ch==' ') )   continue;
  103.          break;
  104.       }
  105.       if( i!=str_len )
  106.          return(false);
  107.    }
  108.    /* convert string to integer */
  109.    double d_out_value = atof(ansi_str.c_str());
  110.    if( d_out_value >= pow(2.0, sizeof(short)*8-1) )  return false;
  111.    out_value = ansi_str.ToInt();
  112.    /* chack value range */
  113.    if(range_min<=range_max)
  114.    {  if( (out_value<range_min)||(out_value>range_max) )
  115.          return(false);
  116.    }
  117.    return( true );
  118. }
  119. //---------------------------------------------------------------------------
  120. bool  AnsiString_To_UnsignedShort(AnsiString ansi_str, unsigned short &out_value, unsigned short range_min, unsigned short range_max )
  121. {
  122.    /* check if each char is valid */
  123.    {  int   i;
  124.       char  ch;
  125.       char  str[256];
  126.       int   str_len = ansi_str.Length();
  127.       if(str_len==0)  return(false);
  128.       strcpy( str, ansi_str.c_str() );
  129.       for( i=0; i<str_len; i++ )
  130.       {  ch = str[i];
  131.          if( ((ch>='0')&&(ch<='9')) || (ch=='+') || (ch=='-') || (ch==' ') )   continue;
  132.          break;
  133.       }
  134.       if( i!=str_len )
  135.          return(false);
  136.    }
  137.    /* convert string to integer */
  138.    double d_out_value = atof(ansi_str.c_str());
  139.    if( d_out_value >= pow(2.0, sizeof(unsigned short)*8) )  return false;
  140.    out_value = ansi_str.ToInt();
  141.    /* chack value range */
  142.    if(range_min<=range_max)
  143.    {  if( (out_value<range_min)||(out_value>range_max) )
  144.          return(false);
  145.    }
  146.    return( true );
  147. }
  148. //---------------------------------------------------------------------------
  149. bool  AnsiString_To_Integer(AnsiString ansi_str, int &out_value, int range_min=0, int range_max=-1 )
  150. {
  151.    /* check if each char is valid */
  152.    {  int   i;
  153.       char  ch;
  154.       char  str[256];
  155.       int   str_len = ansi_str.Length();
  156.       if(str_len==0)  return(false);
  157.       strcpy( str, ansi_str.c_str() );
  158.       for( i=0; i<str_len; i++ )
  159.       {  ch = str[i];
  160.          if( ((ch>='0')&&(ch<='9')) || (ch=='+') || (ch=='-') || (ch==' ') )   continue;
  161.          break;
  162.       }
  163.       if( i!=str_len )
  164.          return(false);
  165.    }
  166.    /* convert string to integer */
  167.    double d_out_value = atof(ansi_str.c_str());
  168.    if( d_out_value >= pow(2.0, sizeof(int)*8-1) )  return false;
  169.    out_value = ansi_str.ToInt();
  170.    /* chack value range */
  171.    if(range_min<=range_max)
  172.    {  if( (out_value<range_min)||(out_value>range_max) )
  173.          return(false);
  174.    }
  175.    return( true );
  176. }
  177. //---------------------------------------------------------------------------
  178. bool  AnsiString_To_UnsignedInteger(AnsiString ansi_str, unsigned int &out_value, unsigned int range_min, unsigned int range_max )
  179. {
  180.    /* check if each char is valid */
  181.    {  int   i;
  182.       char  ch;
  183.       char  str[256];
  184.       int   str_len = ansi_str.Length();
  185.       if(str_len==0)  return(false);
  186.       strcpy( str, ansi_str.c_str() );
  187.       for( i=0; i<str_len; i++ )
  188.       {  ch = str[i];
  189.          if( ((ch>='0')&&(ch<='9')) || (ch=='+') || (ch=='-') || (ch==' ') )   continue;
  190.          break;
  191.       }
  192.       if( i!=str_len )
  193.          return(false);
  194.    }
  195.    /* convert string to integer */
  196.    double d_out_value = atof(ansi_str.c_str());
  197.    if( d_out_value >= pow(2.0, sizeof(unsigned int)*8-1) )  return false;
  198.    out_value = ansi_str.ToInt();
  199.    /* chack value range */
  200.    if(range_min<=range_max)
  201.    {  if( (out_value<range_min)||(out_value>range_max) )
  202.          return(false);
  203.    }
  204.    return( true );
  205. }
  206. //---------------------------------------------------------------------------
  207. bool  AnsiString_To_char(AnsiString ansi_str, char &out_value, int range_min=0, int range_max=-1 )
  208. {
  209.    /* check if each char is valid */
  210.    {  int   i;
  211.       char  ch;
  212.       char  str[256];
  213.       int   str_len = ansi_str.Length();
  214.       if(str_len==0 || str_len >5)  return(false); // 2^8 = 256
  215.       strcpy( str, ansi_str.c_str() );
  216.       for( i=0; i<str_len; i++ )
  217.       {  ch = str[i];
  218.          if( ((ch>='0')&&(ch<='9')) || (ch=='+') || (ch=='-') || (ch==' ') )   continue;
  219.          break;
  220.       }
  221.       if( i!=str_len )
  222.          return(false);
  223.    }
  224.    /* convert string to integer */
  225.    double d_out_value = atof(ansi_str.c_str());
  226.    if( d_out_value >= pow(2.0, sizeof(char)*8-1) )  return false;
  227.   int int_out_value = ansi_str.ToInt();
  228.    /* chack value range */
  229.    if(range_min<=range_max)
  230.    {  if( (int_out_value<range_min)||(int_out_value>range_max) )
  231.          return(false);
  232.    }
  233.    out_value = (char) int_out_value & 0xFF;
  234.    return( true );
  235. }
  236. //---------------------------------------------------------------------------
  237. bool  AnsiString_To_signedchar(AnsiString ansi_str, signed char &out_value, int range_min=0, int range_max=-1 )
  238. {
  239.    /* check if each char is valid */
  240.    {  int   i;
  241.       char  ch;
  242.       char  str[256];
  243.       int   str_len = ansi_str.Length();
  244.       if(str_len==0 || str_len >5)  return(false); // 2^8 = 256
  245.       strcpy( str, ansi_str.c_str() );
  246.       for( i=0; i<str_len; i++ )
  247.       {  ch = str[i];
  248.          if( ((ch>='0')&&(ch<='9')) || (ch=='+') || (ch=='-') || (ch==' ') )   continue;
  249.          break;
  250.       }
  251.       if( i!=str_len )
  252.          return(false);
  253.    }
  254.    /* convert string to integer */
  255.    double d_out_value = atof(ansi_str.c_str());
  256.    if( d_out_value >= pow(2.0, sizeof(signed char)*8-1) )  return false;
  257.   int int_out_value = ansi_str.ToInt();
  258.    /* chack value range */
  259.    if(range_min<=range_max)
  260.    {  if( (int_out_value<range_min)||(int_out_value>range_max) )
  261.          return(false);
  262.    }
  263.    out_value = (signed char) int_out_value & 0xFF;
  264.    return( true );
  265. }
  266. //---------------------------------------------------------------------------
  267. bool  AnsiString_To_UnsignedChar(AnsiString ansi_str, unsigned char &out_value, int range_min=0, int range_max=-1 )
  268. {
  269.    /* check if each char is valid */
  270.    {  int   i;
  271.       char  ch;
  272.       char  str[256];
  273.       int   str_len = ansi_str.Length();
  274.       if(str_len==0 || str_len >5)  return(false); // 2^8 = 256
  275.       strcpy( str, ansi_str.c_str() );
  276.       for( i=0; i<str_len; i++ )
  277.       {  ch = str[i];
  278.          if( ((ch>='0')&&(ch<='9')) || (ch=='+') || (ch=='-') || (ch==' ') )   continue;
  279.          break;
  280.       }
  281.       if( i!=str_len )
  282.          return(false);
  283.    }
  284.    /* convert string to integer */
  285.    double d_out_value = atof(ansi_str.c_str());
  286.    if( d_out_value >= pow(2.0, sizeof(unsigned char)*8) )  return false;
  287.   int int_out_value = ansi_str.ToInt();
  288.    /* chack value range */
  289.    if(range_min<=range_max)
  290.    {  if( (int_out_value<range_min)||(int_out_value>range_max) )
  291.          return(false);
  292.    }
  293.    out_value = (unsigned char) int_out_value & 0xFF;
  294.    return( true );
  295. }
  296. //---------------------------------------------------------------------------
  297. bool  AnsiString_To_msbsignchar(AnsiString ansi_str, signed char &out_value, int range_min=0, int range_max=-1 )
  298. {
  299.    /* check if each char is valid */
  300.      int   i;
  301.       unsigned char  ch;
  302.       char  str[256];
  303.       int int_out_value;
  304.       int   str_len = ansi_str.Length();
  305.       if(str_len==0 || str_len >5)  return(false); // 2^8 = 256
  306.       strcpy( str, ansi_str.c_str() );
  307.       for( i=0; i<str_len; i++ )
  308.       {  ch = str[i];
  309.          if( ((ch>='0')&&(ch<='9')) || (ch=='+') || (ch=='-') || (ch==' ') )   continue;
  310.          break;
  311.       }
  312.       if( i!=str_len )
  313.          return(false);
  314.    /* convert string to integer */
  315.    if( str[0] == '-' )
  316.    {
  317.         int_out_value = ansi_str.SubString(2, ansi_str.Length()).ToInt();
  318.    }
  319.    else
  320.    {
  321.         int_out_value = ansi_str.ToInt();
  322.    }
  323.    /* chack value range */
  324.    if(range_min<=range_max)
  325.    {  if( (int_out_value<range_min)||(int_out_value>range_max) )
  326.          return(false);
  327.    }
  328.    if( str[0] == '-' )
  329.    {
  330.         out_value = (signed char) int_out_value | 0x80;
  331.    }
  332.    else
  333.    {
  334.         out_value = (signed char) int_out_value;
  335.    }
  336.    return( true );
  337. }
  338. //---------------------------------------------------------------------------
  339. bool  AnsiString_To_msbUnsignedChar(AnsiString ansi_str, unsigned char &out_value, int range_min=0, int range_max=-1 )
  340. {
  341.    /* check if each char is valid */
  342.      int   i;
  343.       unsigned char  ch;
  344.       unsigned char  str[256];
  345.       int int_out_value;
  346.       int   str_len = ansi_str.Length();
  347.       if(str_len==0 || str_len >5)  return(false); // 2^8 = 256
  348.       strcpy( str, ansi_str.c_str() );
  349.       for( i=0; i<str_len; i++ )
  350.       {  ch = str[i];
  351.          if( ((ch>='0')&&(ch<='9')) || (ch=='+') || (ch=='-') || (ch==' ') )   continue;
  352.          break;
  353.       }
  354.       if( i!=str_len )
  355.          return(false);
  356.    /* convert string to integer */
  357.    if( str[0] == '-' )
  358.    {
  359.         int_out_value = ansi_str.SubString(2, ansi_str.Length()).ToInt();
  360.    }
  361.    else
  362.    {
  363.         int_out_value = ansi_str.ToInt();
  364.    }
  365.    /* chack value range */
  366.    if(range_min<=range_max)
  367.    {  if( (int_out_value<range_min)||(int_out_value>range_max) )
  368.          return(false);
  369.    }
  370.    if( str[0] == '-' )
  371.    {
  372.         out_value = (unsigned char) int_out_value | 0x80;
  373.    }
  374.    else
  375.    {
  376.         out_value = (unsigned char) int_out_value;
  377.    }
  378.    return( true );
  379. }
  380. //---------------------------------------------------------------------------
  381. bool  AnsiString_To_UnsignedBinary(AnsiString ansi_str, unsigned short &out_value, int range_min=0, int range_max=-1 )
  382. {
  383.     /* check if each char is valid */
  384.     int   i;
  385.       char  ch;
  386.       char  str[256];
  387.       int   str_len = ansi_str.Length();
  388.       if(str_len==0 || str_len >16)  return(false); // 2^8 = 256
  389.       strcpy( str, ansi_str.c_str() );
  390.       for( i=0; i<str_len; i++ )
  391.       {  ch = str[i];
  392.          if( ((ch>='0')&&(ch<='1')) )   continue;
  393.          break;
  394.       }
  395.       if( i!=str_len )
  396.          return(false);
  397.    /* convert string to integer */
  398.    int int_out_value=0;
  399.    int i_str;
  400.    for( i=0; i<str_len; i++ )
  401.    {
  402.         i_str = (int) str[i]-'0';
  403.         int_out_value += i_str*pow(2,str_len-i-1);
  404.    }
  405.    /* chack value range */
  406.    if(range_min<=range_max)
  407.    {  if( (int_out_value<range_min)||(int_out_value>range_max) )
  408.          return(false);
  409.    }
  410.    out_value = (unsigned short) int_out_value & 0xFFFF;
  411.    return( true );
  412. }
  413. //------------------------------------------------------------------------------
  414. bool  AnsiString_To_Float(AnsiString ansi_str, float &out_value, float range_min=0.0, float range_max=-1.0 )
  415. {
  416.    /* check if each char is valid */
  417.    {  int   i;
  418.       char  ch;
  419.       char  str[256];
  420.       int   str_len = ansi_str.Length();
  421.       if(str_len==0)  return(false);
  422.       strcpy( str, ansi_str.c_str() );
  423.       for( i=0; i<str_len; i++ )
  424.       {  ch = str[i];
  425.          if( ((ch>='0')&&(ch<='9')) || (ch=='.') || (ch=='+') || (ch=='-') || (ch==' ') )   continue;
  426.          break;
  427.       }
  428.       if( i!=str_len )
  429.          return(false);
  430.    }
  431.    /* convert string to integer */
  432.    out_value = (float) atof(ansi_str.c_str());
  433.    /* chack value range */
  434.    if(range_min<=range_max)
  435.    {  if( (out_value<range_min)||(out_value>range_max) )
  436.          return(false);
  437.    }
  438.    return( true );
  439. }
  440. //------------------------------------------------------------------------------
  441. bool  AnsiString_To_Double(AnsiString ansi_str, double &out_value, double range_min=0.0, double range_max=-1.0 )
  442. {
  443.    /* check if each char is valid */
  444.    {  int   i;
  445.       char  ch;
  446.       char  str[256];
  447.       int   str_len = ansi_str.Length();
  448.       if(str_len==0)  return(false);
  449.       strcpy( str, ansi_str.c_str() );
  450.       for( i=0; i<str_len; i++ )
  451.       {  ch = str[i];
  452.          if( ((ch>='0')&&(ch<='9')) || (ch=='.') || (ch=='+') || (ch=='-') || (ch==' ') )   continue;
  453.          break;
  454.       }
  455.       if( i!=str_len )
  456.          return(false);
  457.    }
  458.    /* convert string to integer */
  459.    out_value = atof(ansi_str.c_str());
  460.    /* chack value range */
  461.    if(range_min<=range_max)
  462.    {  if( (out_value<range_min)||(out_value>range_max) )
  463.          return(false);
  464.    }
  465.    return( true );
  466. }
  467. //---------------------------------------------------------------------------
  468. bool  AnsiString_Hex_To_UnsignedChar(AnsiString ansi_str, unsigned char &out_value ,int range_min=0, int range_max=-1 )
  469. {
  470.    char  str[256];
  471.    unsigned  char  val;
  472.    /* check if each char is valid */
  473.    {  int   i;
  474.       unsigned char  ch;
  475.       int   str_len = ansi_str.Length();
  476.       if(str_len==0)  return(false);
  477.       strcpy( str, ansi_str.c_str() );
  478.       val = 0;
  479.       for( i=0; i<str_len; i++ )
  480.       {  ch = str[i];
  481.          if( (ch>='0')&&(ch<='9') )
  482.          {  val <<= 4;
  483.             val += ch-'0';
  484.          }
  485.          else if( (ch>='A')&&(ch<='F') )
  486.          {  val <<= 4;
  487.             val += ch-'A'+10;
  488.          }
  489.          else if( (ch>='a')&&(ch<='f') )
  490.          {  val <<= 4;
  491.             val += ch-'a'+10;
  492.          }
  493.          else if( ch==' ' )
  494.          {
  495.          }
  496.          else
  497.          {  break;
  498.          }
  499.          continue;
  500.       }
  501.       if( i!=str_len )
  502.          return(false);
  503.    }
  504.    /* chack value range */
  505.    if(range_min<=range_max)
  506.    {  if( (val<range_min)||(val>range_max) )
  507.          return(false);
  508.    }
  509.    /* convert string to integer */
  510.    out_value = val;
  511.    return( true );
  512. }
  513. //---------------------------------------------------------------------------
  514. bool  AnsiString_Hex_To_Int(AnsiString ansi_str, int &out_value )
  515. {
  516.    char  str[256];
  517.    int  val;
  518.    /* check if each char is valid */
  519.    {  int   i;
  520.       char  ch;
  521.       int   str_len = ansi_str.Length();
  522.       if(str_len==0)  return(false);
  523.       strcpy( str, ansi_str.c_str() );
  524.       val = 0;
  525.       for( i=0; i<str_len; i++ )
  526.       {  ch = str[i];
  527.          if( (ch>='0')&&(ch<='9') )
  528.          {  val <<= 4;
  529.             val += ch-'0';
  530.          }
  531.          else if( (ch>='A')&&(ch<='F') )
  532.          {  val <<= 4;
  533.             val += ch-'A'+10;
  534.          }
  535.          else if( (ch>='a')&&(ch<='f') )
  536.          {  val <<= 4;
  537.             val += ch-'a'+10;
  538.          }
  539.          else if( ch==' ' )
  540.          {
  541.          }
  542.          else
  543.          {  break;
  544.          }
  545.          continue;
  546.       }
  547.       if( i!=str_len )
  548.          return(false);
  549.    }
  550.    /* convert string to integer */
  551.    out_value = val;
  552.    return( true );
  553. }
  554. //---------------------------------------------------------------------------
  555. bool  AnsiString_Hex_To_UnsignedShort(AnsiString ansi_str, unsigned short &out_value )
  556. {
  557.    char  str[256];
  558.    unsigned  short  val;
  559.    /* check if each char is valid */
  560.    {  int   i;
  561.       char  ch;
  562.       int   str_len = ansi_str.Length();
  563.       if(str_len==0)  return false;
  564.       strcpy( str, ansi_str.c_str() );
  565.       val = 0;
  566.       for( i=0; i<str_len; i++ )
  567.       {  ch = str[i];
  568.          if( (ch>='0')&&(ch<='9') )
  569.          {  val <<= 4;
  570.             val += ch-'0';
  571.          }
  572.          else if( (ch>='A')&&(ch<='F') )
  573.          {  val <<= 4;
  574.             val += ch-'A'+10;
  575.          }
  576.          else if( (ch>='a')&&(ch<='f') )
  577.          {  val <<= 4;
  578.             val += ch-'a'+10;
  579.          }
  580.          else if( ch==' ' )
  581.          {
  582.          }
  583.          else
  584.          {  break;
  585.          }
  586.          continue;
  587.       }
  588.       if( i!=str_len )
  589.          return false;
  590.    }
  591.    /* convert string to integer */
  592.    out_value = val;
  593.    return( true );
  594. }
  595. //---------------------------------------------------------------------------
  596. bool  AnsiString_Hex_To_UnsignedInt(AnsiString ansi_str, unsigned  int &out_value )
  597. {
  598.    char  str[256];
  599.    unsigned  int  val;
  600.    /* check if each char is valid */
  601.    {  int   i;
  602.       char  ch;
  603.       int   str_len = ansi_str.Length();
  604.       if(str_len==0)  return(false);
  605.       strcpy( str, ansi_str.c_str() );
  606.       val = 0;
  607.       for( i=0; i<str_len; i++ )
  608.       {  ch = str[i];
  609.          if( (ch>='0')&&(ch<='9') )
  610.          {  val <<= 4;
  611.             val += ch-'0';
  612.          }
  613.          else if( (ch>='A')&&(ch<='F') )
  614.          {  val <<= 4;
  615.             val += ch-'A'+10;
  616.          }
  617.          else if( (ch>='a')&&(ch<='f') )
  618.          {  val <<= 4;
  619.             val += ch-'a'+10;
  620.          }
  621.          else if( ch==' ' )
  622.          {
  623.          }
  624.          else
  625.          {  break;
  626.          }
  627.          continue;
  628.       }
  629.       if( i!=str_len )
  630.          return(false);
  631.    }
  632.    /* convert string to integer */
  633.    out_value = val;
  634.    return( true );
  635. }
  636. //---------------------------------------------------------------------------
  637. bool  AnsiString_Hex_To_Long(AnsiString ansi_str, unsigned long &out_value )
  638. {
  639.    char  str[256];
  640.    long  val;
  641.    /* check if each char is valid */
  642.    {  int   i;
  643.       char  ch;
  644.       int   str_len = ansi_str.Length();
  645.       if(str_len==0)  return(false);
  646.       strcpy( str, ansi_str.c_str() );
  647.       val = 0;
  648.       for( i=0; i<str_len; i++ )
  649.       {  ch = str[i];
  650.          if( (ch>='0')&&(ch<='9') )
  651.          {  val <<= 4;
  652.             val += ch-'0';
  653.          }
  654.          else if( (ch>='A')&&(ch<='F') )
  655.          {  val <<= 4;
  656.             val += ch-'A'+10;
  657.          }
  658.          else if( (ch>='a')&&(ch<='f') )
  659.          {  val <<= 4;
  660.             val += ch-'a'+10;
  661.          }
  662.          else if( ch==' ' )
  663.          {
  664.          }
  665.          else
  666.          {  break;
  667.          }
  668.          continue;
  669.       }
  670.       if( i!=str_len )
  671.          return(false);
  672.    }
  673.    /* convert string to integer */
  674.    out_value = val;
  675.    return( true );
  676. }
  677. //==============================================================================
  678. bool  CharArray_To_Float( Char* str, int str_len, float &out_value, float range_min=0.0, float range_max=-1.0 )
  679. {
  680.    /* check if each char is valid */
  681.    {  int   i;
  682.       char  ch;
  683.       //char  str[256];
  684.       //int   str_len = ansi_str.Length();
  685.       if(str_len==0)  return(false);
  686.       out_value = 0.0;
  687.       //strcpy( str, ansi_str.c_str() );
  688.       //for( i=0; i<str_len; i++ )
  689.      // {  ch = *(str+i);
  690.      //    if( ((ch>='0')&&(ch<='9')) || (ch=='.') || (ch=='+') || (ch=='-') || (ch==' ') )   continue;
  691.       //   break;
  692.      // }
  693.       for( i=0; i<str_len; i++ )
  694.       {  ch = *(str+i);
  695.          if( ((ch>='0')&&(ch<='9')) )
  696.          {
  697.              out_value = (out_value*10.0) + ch;
  698.          }
  699.          // || (ch=='.') || (ch=='+') || (ch=='-') || (ch==' ') )   continue;
  700.          break;
  701.       }
  702.       if( i!=str_len )
  703.          return(false);
  704.    }
  705.    /* convert string to integer */
  706.   // out_value = (float) atof(ansi_str.c_str());
  707.    /* chack value range */
  708.    if(range_min<=range_max)
  709.    {  if( (out_value<range_min)||(out_value>range_max) )
  710.          return(false);
  711.    }
  712.    return( true );
  713. }
  714. //===========================================================================
  715. int   _ArrayString_Parse( char *src, char* dst, short* dst_pos )
  716. {
  717.    char  ch = src[0];
  718.    char  last_char_is_null = 1;
  719.    int   dst_idx = 0;
  720.    int   i;
  721.    for( i=0; (ch!=0)&&(i<2047); i++ )
  722.    {
  723.       ch = src[i];
  724.       if(  ((ch>='0')&&(ch<='9'))||(ch=='-')||(ch=='+')||(ch=='.')||(ch=='E') ||(ch=='e'))
  725.       {  if( last_char_is_null )
  726.          {  dst_pos[dst_idx] = i;
  727.             dst_idx++;
  728.          }
  729.          dst[i] = ch;
  730.          last_char_is_null = 0;
  731.       }
  732.       else
  733.       {  dst[i] = 0;
  734.          last_char_is_null = 1;
  735.       }
  736.    }
  737.    dst[i] = 0;
  738.    dst_pos[dst_idx] = -1;
  739.    return( dst_idx );
  740. }
  741. //---------------------------------------------------------------------------
  742. int   Hex_ArrayString_Parse( char *src, char* dst, short* dst_pos )
  743. {
  744.    char  ch = src[0];
  745.    char  last_char_is_null = 1;
  746.    int   dst_idx = 0;
  747.    int   i;
  748.    for( i=0; (ch!=0)&&(i<2047); i++ )
  749.    {
  750.       ch = src[i];
  751.       if( ((ch>='0')&&(ch<='9')) ||
  752.           ((ch>='A')&&(ch<='F')) ||
  753.           ((ch>='a')&&(ch<='f')) ||
  754.           (ch=='-')              ||
  755.           (ch=='+')              ||
  756.           (ch=='.')
  757.         )
  758.       {  if( last_char_is_null )
  759.          {  dst_pos[dst_idx] = i;
  760.             dst_idx++;
  761.          }
  762.          dst[i] = ch;
  763.          last_char_is_null = 0;
  764.       }
  765.       else
  766.       {  dst[i] = 0;
  767.          last_char_is_null = 1;
  768.       }
  769.    }
  770.    dst[i] = 0;
  771.    dst_pos[dst_idx] = -1;
  772.    return( dst_idx );
  773. }
  774. //---------------------------------------------------------------------------
  775. bool  double_To_Array_ASCII_char( double d, char* array  )
  776. {
  777.     AnsiString as_d = Double_To_AnsiString( d );
  778.     int i;
  779.     for( i=0; i<as_d.Length(); i++)
  780.     {
  781.         strcpy( (array+i), as_d.SubString(i+1,1).c_str());
  782.     }
  783.     *(array+i) = '';
  784.     return true;
  785. }
  786. //---------------------------------------------------------------------------
  787. void  ASCII_char_To_Array_double( char* array, double &d  )
  788. {
  789.     for(int i=0; ; i++)
  790.     {
  791.         if( *(array+i) == '' )  break;
  792.         *(array+i) &= 0x7F;
  793.     }
  794.     AnsiString as_d(array);
  795.     d = atof(as_d.c_str());
  796. }
  797. //---------------------------------------------------------------------------
  798. int   String_To_Array_Char( char *src, char* array, int max_count )
  799. {
  800.     char  str[2048];
  801.     short str_pos[512];
  802.     int   i, count;
  803.     count = _ArrayString_Parse( src, str, str_pos );
  804.     if( count>max_count )  count = max_count;
  805.     for(i=0; i<count; i++)
  806.     {  array[i] = (char) atoi( &str[str_pos[i]] );
  807.     }
  808.     return( count );
  809. }
  810. //---------------------------------------------------------------------------
  811. int   String_To_Array_UnsignedChar( char *src, unsigned char* array, int max_count )
  812. {
  813.    char  str[2048];
  814.    short str_pos[512];
  815.    int   i, count;
  816.    count = _ArrayString_Parse( src, str, str_pos );
  817.    if( count>max_count )  count = max_count;
  818.    for(i=0; i<count; i++)
  819.    {  array[i] = (unsigned char) atoi( &str[str_pos[i]] );
  820.    }
  821.    return( count );
  822. }
  823. //---------------------------------------------------------------------------
  824. int   AnsiString_Hex_To_Array_UnsignedChar(AnsiString as_str, unsigned char* array, int max_count, char c_sep )
  825. {
  826.    char  str[2048];
  827.    char  ch;
  828.    short str_pos[512];
  829.    int   i, count;
  830.    unsigned  char  val;
  831.   // AnsiString as_str(src);
  832.   // count = Hex_ArrayString_Parse( src, str, str_pos );
  833.   // count = Get_CharAppearCount( as_str, ',' );
  834.    count = Get_CharAppearCount( as_str, c_sep );
  835.    if( count>max_count )  count = max_count;
  836.    for(i=0; i<=count; i++)
  837.    {
  838.        // int iLD_l = as_str.AnsiPos(",");
  839.         int iLD_l = as_str.AnsiPos( c_sep );
  840.         if( iLD_l != 0 )
  841.         {
  842.             AnsiString_Hex_To_UnsignedChar( as_str.SubString( 1, iLD_l-1), array[i]  );
  843.         }
  844.         else
  845.         {   AnsiString_Hex_To_UnsignedChar( as_str, array[i]  );
  846.         }
  847.         as_str = as_str.SubString( iLD_l+1, as_str.Length() - iLD_l );
  848.    }
  849.    return( count );
  850. }
  851. //---------------------------------------------------------------------------
  852. int   String_To_Array_UnsignedShort( char *src, unsigned short* array, int max_count )
  853. {
  854.    char  str[2048];
  855.    short str_pos[512];
  856.    int   i, count;
  857.    count = _ArrayString_Parse( src, str, str_pos );
  858.    if( count>max_count )  count = max_count;
  859.    for(i=0; i<count; i++)
  860.    {  array[i] = (unsigned short) atoi( &str[str_pos[i]] );
  861.    }
  862.    return( count );
  863. }
  864. //---------------------------------------------------------------------------
  865. int   String_To_Array_short( char *src, short* array, int max_count )
  866. {
  867.    char  str[2048];
  868.    short str_pos[512];
  869.    int   i, count;
  870.    count = _ArrayString_Parse( src, str, str_pos );
  871.    if( count>max_count )  count = max_count;
  872.    for(i=0; i<count; i++)
  873.    {  array[i] = (short)atoi( &str[str_pos[i]] );
  874.    }
  875.    return( count );
  876. }
  877. //---------------------------------------------------------------------------
  878. int   String_To_Array_int( char *src, int* array, int max_count )
  879. {
  880.    char  str[2048];
  881.    short str_pos[512];
  882.    int   i, count;
  883.    count = _ArrayString_Parse( src, str, str_pos );
  884.    if( count>max_count )  count = max_count;
  885.    for(i=0; i<count; i++)
  886.    {  array[i] = atoi( &str[str_pos[i]] );
  887.    }
  888.    return( count );
  889. }
  890. //---------------------------------------------------------------------------
  891. int   String_To_Array_UnsignedInteger( char *src, unsigned int* array, int max_count )
  892. {
  893.    char  str[2048];
  894.    short str_pos[512];
  895.    int   i, count;
  896.    count = _ArrayString_Parse( src, str, str_pos );
  897.    if( count>max_count )  count = max_count;
  898.    for(i=0; i<count; i++)
  899.    {  array[i] = ( unsigned int) atoi( &str[str_pos[i]] );
  900.    }
  901.    return( count );
  902. }
  903. //---------------------------------------------------------------------------
  904. int   String_To_Array_long( char *src, long* array, int max_count )
  905. {
  906.    char  str[2048];
  907.    short str_pos[512];
  908.    int   i, count;
  909.    count = _ArrayString_Parse( src, str, str_pos );
  910.    if( count>max_count )  count = max_count;
  911.    for(i=0; i<count; i++)
  912.    {  array[i] = atol( &str[str_pos[i]] );
  913.    }
  914.    return( count );
  915. }
  916. //---------------------------------------------------------------------------
  917. int   String_To_Array_float( char *src, float* array, int max_count )
  918. {
  919.    char  str[2048];
  920.    short str_pos[512];
  921.    int   i, count;
  922.    count = _ArrayString_Parse( src, str, str_pos );
  923.    if( count>max_count )  count = max_count;
  924.    for(i=0; i<count; i++)
  925.    {  array[i] = (float)atof( &str[str_pos[i]] );
  926.    }
  927.    return( count );
  928. }
  929. //---------------------------------------------------------------------------
  930. int   String_To_Array_double( char *src, double* array, int max_count )
  931. {
  932.    char  str[2048];
  933.    short str_pos[512];
  934.    int   i, count;
  935.    count = _ArrayString_Parse( src, str, str_pos );
  936.    if( count>max_count )  count = max_count;
  937.    for(i=0; i<count; i++)
  938.    {  array[i] = atof( &str[str_pos[i]] );
  939.    }
  940.    return( count );
  941. }
  942. //===========================================================================
  943. int   Array_To_String_Char( char *str, char* array, int count, char separate_char )
  944. {
  945.     char  *ptr = str;
  946.     int   i;
  947.     for( i=0; i<count-1; i++ )
  948.     {   ptr += sprintf( ptr, "%d%c", (char)array[i], separate_char );
  949.     }
  950.     ptr += sprintf( ptr, "%d", (char)array[i] );
  951.     i = (int)((unsigned long)ptr - (unsigned long)str);
  952.     return i;
  953. }
  954. //--------------------------------------------------------------------------
  955. int   Array_To_String_UnsignedChar( char *str, unsigned char* array, int count, char separate_char )
  956. {
  957.    char  *ptr = str;
  958.    int   i;
  959.    for( i=0; i<count-1; i++ )
  960.    {  ptr += sprintf( ptr, "%d%c", (unsigned char)array[i], separate_char );
  961.    }
  962.    ptr += sprintf( ptr, "%d", (unsigned char)array[i] );
  963.    i = (int)((unsigned long)ptr - (unsigned long)str);
  964.    return( i );
  965. }
  966. //--------------------------------------------------------------------------
  967. int   Array_To_String_UnsignedShort( char *str, unsigned short* array, int count, char separate_char )
  968. {
  969.    char  *ptr = str;
  970.    int   i;
  971.    for( i=0; i<count-1; i++ )
  972.    {  ptr += sprintf( ptr, "%d%c", (unsigned short)array[i], separate_char );
  973.    }
  974.    ptr += sprintf( ptr, "%d", (unsigned short)array[i] );
  975.    i = (int)((unsigned long)ptr - (unsigned long)str);
  976.    return( i );
  977. }
  978. //--------------------------------------------------------------------------
  979. int   Array_To_String_short( char *str, short* array, int count, char separate_char )
  980. {
  981.    char  *ptr = str;
  982.    int   i;
  983.    for( i=0; i<count-1; i++ )
  984.    {  ptr += sprintf( ptr, "%d%c", (int)array[i], separate_char );
  985.    }
  986.    ptr += sprintf( ptr, "%d", (int)array[i] );
  987.    i = (int)((unsigned long)ptr - (unsigned long)str);
  988.    return( i );
  989. }
  990. //---------------------------------------------------------------------------
  991. int   Array_To_String_UnsignedInteger( char *str, unsigned int* array, int count, char separate_char )
  992. {
  993.    char  *ptr = str;
  994.    int   i;
  995.    for( i=0; i<count-1; i++ )
  996.    {  ptr += sprintf( ptr, "%d%c", array[i], separate_char );
  997.    }
  998.    ptr += sprintf( ptr, "%d", array[i] );
  999.    i = (unsigned int)((unsigned long)ptr - (unsigned long)str);
  1000.    return( i );
  1001. }
  1002. //---------------------------------------------------------------------------
  1003. int   Array_To_String_int( char *str, int* array, int count, char separate_char )
  1004. {
  1005.    char  *ptr = str;
  1006.    int   i;
  1007.    for( i=0; i<count-1; i++ )
  1008.    {  ptr += sprintf( ptr, "%d%c", array[i], separate_char );
  1009.    }
  1010.    ptr += sprintf( ptr, "%d", array[i] );
  1011.    i = (int)((unsigned long)ptr - (unsigned long)str);
  1012.    return( i );
  1013. }
  1014. //---------------------------------------------------------------------------
  1015. int   Array_To_String_long( char *str, long* array, int count, char separate_char )
  1016. {
  1017.    char  *ptr = str;
  1018.    int   i;
  1019.    for( i=0; i<count-1; i++ )
  1020.    {  ptr += sprintf( ptr, "%l%c", array[i], separate_char );
  1021.    }
  1022.    ptr += sprintf( ptr, "%l", array[i] );
  1023.    i = (int)((unsigned long)ptr - (unsigned long)str);
  1024.    return( i );
  1025. }
  1026. //---------------------------------------------------------------------------
  1027. int   Array_To_String_float( char *str, float* array, int count, char separate_char )
  1028. {
  1029.    char  *ptr = str;
  1030.    int   i;
  1031.    for( i=0; i<count-1; i++ )
  1032.    {  ptr += sprintf( ptr, "%.3f%c", array[i], separate_char );
  1033.    }
  1034.    ptr += sprintf( ptr, "%.3f%c", array[i], '0' );
  1035.    i = (int)((unsigned long)ptr - (unsigned long)str);
  1036.    return( i );
  1037. }
  1038. //===========================================================================
  1039. int   Array_To_Hex_String_UnsignedChar( char *str, unsigned char* array, int count, char separate_char )
  1040. {
  1041.    char  *ptr = str;
  1042.    int   i;
  1043.    for( i=0; i<count-1; i++ )
  1044.    {  ptr += sprintf( ptr, "%X%c", (unsigned char)array[i], separate_char );
  1045.    }
  1046.    ptr += sprintf( ptr, "%X", (unsigned char)array[i] );
  1047.    i = (int)((unsigned long)ptr - (unsigned long)str);
  1048.    return( i );
  1049. }
  1050. //---------------------------------------------------------------------------
  1051. bool AnsiString_To_dBm( AnsiString asStr, ViReal64* virTx )
  1052. {
  1053.     bool result;
  1054.     AnsiString asBase, asExponent;
  1055.     result = getBaseFromStr( asStr, asBase );
  1056.     if( result == false )  return false;
  1057.     result = getExponentFromStr( asStr, asExponent );
  1058.     if( result == false )  return false;
  1059.     if( (asExponent.SubString(1,1)).AnsiCompareIC( "+" ) == 0 )
  1060.     {
  1061.         *virTx = asBase.ToInt() * asExponent.ToInt();
  1062.     }
  1063.     return true;
  1064. }
  1065. //===========================================================================
  1066. static const int  pcl2power_table[][32] =
  1067. {  //  0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5  6  7  8  9  0  1
  1068.    {  39,39,39,37,35,33,31,29,27,25,23,21,19,17,15,13,11, 9, 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5  },  // GSM900
  1069.    {  30,28,26,24,22,20,18,16,14,12,10, 8, 6, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,36,34,32  },  // DCS1800
  1070.    {  30,28,26,24,22,20,18,16,14,12,10, 8, 6, 4, 2, 0, 0, 0, 0, 0, 0, 0,33,33,33,33,33,33,33,33,33,32  },  // PCS1900
  1071.    {  39,39,39,37,35,33,31,29,27,25,23,21,19,17,15,13,11, 9, 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5  },  // GSM850
  1072. };
  1073. //---------------------------------------------------------------------------
  1074. int  PCL2POWER( int band, int pcl )
  1075. {  if(pcl<0)  pcl=0;
  1076.    if(pcl>31) pcl = 31;
  1077.    int  power=pcl2power_table[band][pcl];
  1078.    return(power);
  1079. }
  1080. //---------------------------------------------------------------------------
  1081. static const int  power2pcl_table[][32] =
  1082. {  //  0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5  6  7  8
  1083.    {  19,18,17,16,15,14,13,12,11,10, 9, 8, 7, 6, 5, 4, 3, 2, 2  },  // GSM900
  1084.    {  15,14,13,12,11,10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0,31,30,29  },  // DCS1800
  1085.    {  15,14,13,12,11,10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0,31,30,29  },  // PCS1900
  1086.    {  19,18,17,16,15,14,13,12,11,10, 9, 8, 7, 6, 5, 4, 3, 2, 2  },  // GSM850
  1087. };
  1088. //---------------------------------------------------------------------------
  1089. int  POWER2PCL( int band, int power )
  1090. {
  1091.    if(band == BANDSEL_GSM900 || band==BANDSEL_GSM850)  power -= 5;
  1092.    power/=2;
  1093.    if(power<0)  power = 0;
  1094.    if(power>31)  power = 31;
  1095.    int pcl = power2pcl_table[band][power];
  1096.    return(pcl);
  1097. }