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

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.  *   form_CFGTxPcl.cpp
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   Maui META APP
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *  TX PCL CFG form 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. //---------------------------------------------------------------------------
  66. #include <vcl.h>
  67. #pragma hdrstop
  68. #include "form_CFGTxPcl.h"
  69. #include "META_Factory.h"
  70. #include "META_factory_cfg.h"
  71. #include "meta_utils.h"
  72. // misc
  73. #include "misc.h"
  74. #ifndef  _FT_UTILS_H_
  75. #include "ft_utils.h"
  76. #endif
  77. //---------------------------------------------------------------------------
  78. #pragma package(smart_init)
  79. #pragma resource "*.dfm"
  80. TfrmCFGTxPcl *frmCFGTxPcl;
  81. //static int Default_PCL = 10;
  82. //---------------------------------------------------------------------------
  83. __fastcall TfrmCFGTxPcl::TfrmCFGTxPcl(TComponent* Owner)
  84.         : TForm(Owner)
  85. {
  86.     int i, j;
  87.     edtCAL_PCL[0] = edtCAL_PCL0;
  88.     edtCAL_PCL[1] = edtCAL_PCL1;
  89.     edtCAL_PCL[2] = edtCAL_PCL2;
  90.     edtPCL[ 0] = edtPCL00;
  91.     edtPCL[ 1] = edtPCL01;
  92.     edtPCL[ 2] = edtPCL02;
  93.     edtPCL[ 3] = edtPCL03;
  94.     edtPCL[ 4] = edtPCL04;
  95.     edtPCL[ 5] = edtPCL05;
  96.     edtPCL[ 6] = edtPCL06;
  97.     edtPCL[ 7] = edtPCL07;
  98.     edtPCL[ 8] = edtPCL08;
  99.     edtPCL[ 9] = edtPCL09;
  100.     edtPCL[10] = edtPCL10;
  101.     edtPCL[11] = edtPCL11;
  102.     edtPCL[12] = edtPCL12;
  103.     edtPCL[13] = edtPCL13;
  104.     edtPCL[14] = edtPCL14;
  105.     edtPCL[15] = edtPCL15;
  106.     edtCHECK_PCL[ 0] = edtCHECK_PCL00;
  107.     edtCHECK_PCL[ 1] = edtCHECK_PCL01;
  108.     edtCHECK_PCL[ 2] = edtCHECK_PCL02;
  109.     edtCHECK_PCL[ 3] = edtCHECK_PCL03;
  110.     edtCHECK_PCL[ 4] = edtCHECK_PCL04;
  111.     edtCHECK_PCL[ 5] = edtCHECK_PCL05;
  112.     edtCHECK_PCL[ 6] = edtCHECK_PCL06;
  113.     edtCHECK_PCL[ 7] = edtCHECK_PCL07;
  114.     edtCHECK_PCL[ 8] = edtCHECK_PCL08;
  115.     edtCHECK_PCL[ 9] = edtCHECK_PCL09;
  116.     edtCHECK_PCL[10] = edtCHECK_PCL10;
  117.     edtCHECK_PCL[11] = edtCHECK_PCL11;
  118.     edtCHECK_PCL[12] = edtCHECK_PCL12;
  119.     edtCHECK_PCL[13] = edtCHECK_PCL13;
  120.     edtCHECK_PCL[14] = edtCHECK_PCL14;
  121.     edtCHECK_PCL[15] = edtCHECK_PCL15;
  122.     edtMAX_P[ 0] = edtMAX_P00;
  123.     edtMAX_P[ 1] = edtMAX_P01;
  124.     edtMAX_P[ 2] = edtMAX_P02;
  125.     edtMAX_P[ 3] = edtMAX_P03;
  126.     edtMAX_P[ 4] = edtMAX_P04;
  127.     edtMAX_P[ 5] = edtMAX_P05;
  128.     edtMAX_P[ 6] = edtMAX_P06;
  129.     edtMAX_P[ 7] = edtMAX_P07;
  130.     edtMAX_P[ 8] = edtMAX_P08;
  131.     edtMAX_P[ 9] = edtMAX_P09;
  132.     edtMAX_P[10] = edtMAX_P10;
  133.     edtMAX_P[11] = edtMAX_P11;
  134.     edtMAX_P[12] = edtMAX_P12;
  135.     edtMAX_P[13] = edtMAX_P13;
  136.     edtMAX_P[14] = edtMAX_P14;
  137.     edtMAX_P[15] = edtMAX_P15;
  138.     edtWANTED_P[ 0] = edtWANTED_P00;
  139.     edtWANTED_P[ 1] = edtWANTED_P01;
  140.     edtWANTED_P[ 2] = edtWANTED_P02;
  141.     edtWANTED_P[ 3] = edtWANTED_P03;
  142.     edtWANTED_P[ 4] = edtWANTED_P04;
  143.     edtWANTED_P[ 5] = edtWANTED_P05;
  144.     edtWANTED_P[ 6] = edtWANTED_P06;
  145.     edtWANTED_P[ 7] = edtWANTED_P07;
  146.     edtWANTED_P[ 8] = edtWANTED_P08;
  147.     edtWANTED_P[ 9] = edtWANTED_P09;
  148.     edtWANTED_P[10] = edtWANTED_P10;
  149.     edtWANTED_P[11] = edtWANTED_P11;
  150.     edtWANTED_P[12] = edtWANTED_P12;
  151.     edtWANTED_P[13] = edtWANTED_P13;
  152.     edtWANTED_P[14] = edtWANTED_P14;
  153.     edtWANTED_P[15] = edtWANTED_P15;
  154.     edtMIN_P[ 0] = edtMIN_P00;
  155.     edtMIN_P[ 1] = edtMIN_P01;
  156.     edtMIN_P[ 2] = edtMIN_P02;
  157.     edtMIN_P[ 3] = edtMIN_P03;
  158.     edtMIN_P[ 4] = edtMIN_P04;
  159.     edtMIN_P[ 5] = edtMIN_P05;
  160.     edtMIN_P[ 6] = edtMIN_P06;
  161.     edtMIN_P[ 7] = edtMIN_P07;
  162.     edtMIN_P[ 8] = edtMIN_P08;
  163.     edtMIN_P[ 9] = edtMIN_P09;
  164.     edtMIN_P[10] = edtMIN_P10;
  165.     edtMIN_P[11] = edtMIN_P11;
  166.     edtMIN_P[12] = edtMIN_P12;
  167.     edtMIN_P[13] = edtMIN_P13;
  168.     edtMIN_P[14] = edtMIN_P14;
  169.     edtMIN_P[15] = edtMIN_P15;
  170.     edtC[ 0] = edtC00;
  171.     edtC[ 1] = edtC01;
  172.     edtC[ 2] = edtC02;
  173.     edtC[ 3] = edtC03;
  174.     edtC[ 4] = edtC04;
  175.     edtC[ 5] = edtC05;
  176.     edtC[ 6] = edtC06;
  177.     edtC[ 7] = edtC07;
  178.     edtC[ 8] = edtC08;
  179.     edtC[ 9] = edtC09;
  180.     edtC[10] = edtC10;
  181.     edtC[11] = edtC11;
  182.     edtC[12] = edtC12;
  183.     edtC[13] = edtC13;
  184.     edtC[14] = edtC14;
  185.     edtC[15] = edtC15;
  186.     edtCORRECTION[ 0] = edtCORRECTION00;
  187.     edtCORRECTION[ 1] = edtCORRECTION01;
  188.     edtCORRECTION[ 2] = edtCORRECTION02;
  189.     edtCORRECTION[ 3] = edtCORRECTION03;
  190.     edtCORRECTION[ 4] = edtCORRECTION04;
  191.     edtCORRECTION[ 5] = edtCORRECTION05;
  192.     edtCORRECTION[ 6] = edtCORRECTION06;
  193.     edtCORRECTION[ 7] = edtCORRECTION07;
  194.     edtCORRECTION[ 8] = edtCORRECTION08;
  195.     edtCORRECTION[ 9] = edtCORRECTION09;
  196.     edtCORRECTION[10] = edtCORRECTION10;
  197.     edtCORRECTION[11] = edtCORRECTION11;
  198.     edtCORRECTION[12] = edtCORRECTION12;
  199.     edtCORRECTION[13] = edtCORRECTION13;
  200.     edtCORRECTION[14] = edtCORRECTION14;
  201.     edtCORRECTION[15] = edtCORRECTION15;
  202.     for( i=0; i<5; i++ )
  203.     {
  204.         for( j=0; j<3; j++ )
  205.         {
  206.             i_CAL_PCL[i][j] = 10;
  207.         }
  208.     }
  209.     for( i=0; i<5; i++ )
  210.     {
  211.         for( j=0; j<16; j++ )
  212.         {
  213.             i_PCL[i][j] = 10;
  214.             i_CHECK_PCL[i][j] = 10;
  215.         }
  216.     }
  217. }
  218. //---------------------------------------------------------------------------
  219. void __fastcall TfrmCFGTxPcl::HintTimerTimer(TObject *Sender)
  220. {
  221.     HintTimer->Enabled = false;
  222.     lblHint->Visible = false;
  223. }
  224. //---------------------------------------------------------------------------
  225. void __fastcall TfrmCFGTxPcl::FormClose(TObject *Sender,
  226.       TCloseAction &Action)
  227. {
  228.     if(cfg != NULL)
  229.     {
  230.         delete cfg;
  231.         cfg = NULL;
  232.     }    
  233. }
  234. //---------------------------------------------------------------------------
  235. void TfrmCFGTxPcl::ShowHintLabel( TControl *sender, char* hint )
  236. {
  237.    TPoint pt0 = this->ClientOrigin;
  238.    TPoint pt1 = sender->ClientOrigin;
  239.    lblHint->Left = (pt1.x-pt0.x);
  240.    lblHint->Top  = (pt1.y-pt0.y)+sender->Height+3;
  241.    lblHint->Caption = hint;
  242.    lblHint->Visible = true;
  243.    HintTimer->Enabled = true;
  244. }
  245. //---------------------------------------------------------------------------
  246. void __fastcall TfrmCFGTxPcl::edtCAL_PCLCheck(TObject *Sender)
  247. {
  248.     int  data;
  249.     AnsiString  text;
  250.     TEdit *edit = (TEdit*)Sender;
  251.     char  hint[][256] =
  252.     {
  253.         " value shall be 4~31 ", // GSM400
  254.         " value shall be 4~31 ", // GSM850
  255.         " value shall be 4~31 ", // GSM900
  256.         " value shall be 0~28 ", // DCS1800
  257.         " value shall be 0~15 ", // PCS1900
  258.     };
  259.     CurBand = tctlAPC->TabIndex;
  260.     text = edit->Text;
  261.     if( !IsValidCFGPCL( text, CurBand, data ) )
  262.     {  ShowHintLabel( edit, hint[CurBand] );
  263.        edit->Text = IntToStr( Default_PCL );
  264.        edit->SetFocus();
  265.        return;
  266.     }
  267.     i_CHECK_PCL[CurBand][edit->Tag] = data;
  268. }
  269. //---------------------------------------------------------------------------
  270. void __fastcall TfrmCFGTxPcl::edtPCLCheck(TObject *Sender)
  271. {
  272.     int  data;
  273.     AnsiString  text;
  274.     TEdit *edit = (TEdit*)Sender;
  275.     char  hint[][256] =
  276.     {
  277.         " value shall be 4~31 ", // GSM400
  278.         " value shall be 4~31 ", // GSM850
  279.         " value shall be 4~31 ", // GSM900
  280.         " value shall be 0~28 ", // DCS1800
  281.         " value shall be 0~15 ", // PCS1900
  282.     };
  283.     CurBand = tctlAPC->TabIndex;
  284.     text = edit->Text;
  285.     if( !IsValidCFGPCL( text, CurBand, data ) )
  286.     {  ShowHintLabel( edit, hint[CurBand] );
  287.        edit->Text = IntToStr( Default_PCL );
  288.        edit->SetFocus();
  289.        return;
  290.     }
  291.     i_PCL[CurBand][edit->Tag] = data;
  292. }
  293. //---------------------------------------------------------------------------
  294. void __fastcall TfrmCFGTxPcl::edtCHECK_PCLCheck(TObject *Sender)
  295. {
  296.     int  data;
  297.     AnsiString  text;
  298.     TEdit *edit = (TEdit*)Sender;
  299.     char  hint[][256] =
  300.     {
  301.         " value shall be 4~31 ", // GSM400
  302.         " value shall be 4~31 ", // GSM850
  303.         " value shall be 4~31 ", // GSM900
  304.         " value shall be 0~28 ", // DCS1800
  305.         " value shall be 0~15 ", // PCS1900
  306.     };
  307.     CurBand = tctlAPC->TabIndex;
  308.     text = edit->Text;
  309.     if( !IsValidCFGPCL( text, CurBand, data ) )
  310.     {  ShowHintLabel( edit, hint[CurBand] );
  311.        edit->Text = IntToStr( Default_PCL );
  312.        edit->SetFocus();
  313.        return;
  314.     }
  315.     i_CHECK_PCL[CurBand][edit->Tag] = data;
  316. }
  317. //---------------------------------------------------------------------------
  318. void __fastcall TfrmCFGTxPcl::edtMAX_PCheck(TObject *Sender)
  319. {
  320.     double  data;
  321.     AnsiString  text;
  322.     TEdit *edit = (TEdit*)Sender;
  323.     char  hint[] =
  324.     {
  325.         " value is not valid "
  326.     };
  327.     CurBand = tctlAPC->TabIndex;
  328.     text = edit->Text;
  329.     if( !IsValidCFGMAX_P( text, data ) )
  330.     {  ShowHintLabel( edit, hint );
  331.       // edit->Text = IntToStr( Default_PCL );
  332.        edit->SetFocus();
  333.        return;
  334.     }
  335.     d_MAX_P[CurBand][edit->Tag] = data;
  336. }
  337. //---------------------------------------------------------------------------
  338. void __fastcall TfrmCFGTxPcl::edtWANTED_PCheck(TObject *Sender)
  339. {
  340.     double  data;
  341.     AnsiString  text;
  342.     TEdit *edit = (TEdit*)Sender;
  343.     char  hint[] =
  344.     {
  345.         " value is not valid "
  346.     };
  347.     CurBand = tctlAPC->TabIndex;
  348.     text = edit->Text;
  349.     if( !IsValidCFGWANTED_P( text, data ) )
  350.     {  ShowHintLabel( edit, hint );
  351.       // edit->Text = IntToStr( Default_PCL );
  352.        edit->SetFocus();
  353.        return;
  354.     }
  355.     d_WANTED_P[CurBand][edit->Tag] = data;
  356. }
  357. //---------------------------------------------------------------------------
  358. void __fastcall TfrmCFGTxPcl::edtMIN_PCheck(TObject *Sender)
  359. {
  360.     double  data;
  361.     AnsiString  text;
  362.     TEdit *edit = (TEdit*)Sender;
  363.     char  hint[] =
  364.     {
  365.         " value is not valid "
  366.     };
  367.     CurBand = tctlAPC->TabIndex;
  368.     text = edit->Text;
  369.     if( !IsValidCFGMIN_P( text, data ) )
  370.     {  ShowHintLabel( edit, hint );
  371.       // edit->Text = IntToStr( Default_PCL );
  372.        edit->SetFocus();
  373.        return;
  374.     }
  375.     d_MIN_P[CurBand][edit->Tag] = data;
  376. }
  377. //---------------------------------------------------------------------------
  378. void __fastcall TfrmCFGTxPcl::edtCCheck(TObject *Sender)
  379. {
  380.     double  data;
  381.     AnsiString  text;
  382.     TEdit *edit = (TEdit*)Sender;
  383.     char  hint[] =
  384.     {
  385.         " value is not valid "
  386.     };
  387.     CurBand = tctlAPC->TabIndex;
  388.     text = edit->Text;
  389.     if( !IsValidCFGC( text, data ) )
  390.     {  ShowHintLabel( edit, hint );
  391.       // edit->Text = IntToStr( Default_PCL );
  392.        edit->SetFocus();
  393.        return;
  394.     }
  395.     d_C[CurBand][edit->Tag] = data;
  396. }
  397. //---------------------------------------------------------------------------
  398. void __fastcall TfrmCFGTxPcl::edtCORRECTIONCheck(TObject *Sender)
  399. {
  400.     double  data;
  401.     AnsiString  text;
  402.     TEdit *edit = (TEdit*)Sender;
  403.     char  hint[] =
  404.     {
  405.         " value is not valid "
  406.     };
  407.     CurBand = tctlAPC->TabIndex;
  408.     text = edit->Text;
  409.     if( !IsValidCFGCORRECTION( text, data ) )
  410.     {  ShowHintLabel( edit, hint );
  411.       // edit->Text = IntToStr( Default_PCL );
  412.        edit->SetFocus();
  413.        return;
  414.     }
  415.     d_CORRECTION[CurBand][edit->Tag] = data;
  416. }
  417. //---------------------------------------------------------------------------
  418. void __fastcall TfrmCFGTxPcl::edtRecursiveTimesCheck(TObject *Sender)
  419. {
  420.     int  data;
  421.     AnsiString  text;
  422.     TEdit *edit = (TEdit*)Sender;
  423.     char  hint[] =
  424.     {
  425.         " value is not valid "
  426.     };
  427.     CurBand = tctlAPC->TabIndex;
  428.     text = edit->Text;
  429.     if( !IsValidCFGRecursiveTimes( text, data ) )
  430.     {  ShowHintLabel( edit, hint );
  431.       // edit->Text = IntToStr( Default_PCL );
  432.        edit->SetFocus();
  433.        return;
  434.     }
  435.     i_Recursive_Times = data;
  436. }
  437. //---------------------------------------------------------------------------
  438. void __fastcall TfrmCFGTxPcl::edtTSCCheck(TObject *Sender)
  439. {
  440.     char c_data;
  441.     AnsiString  text;
  442.     TEdit *edit = (TEdit*)Sender;
  443.     char  hint[] =
  444.     {
  445.         " value is not valid "
  446.     };
  447.     text = edit->Text;
  448.     if (!IsValidCFGTSC(text, c_data))
  449.     {
  450.         ShowHintLabel(edit, hint);
  451.         edit->SetFocus();
  452.         return;
  453.     }
  454.     c_TSC = c_data;
  455. }
  456. //---------------------------------------------------------------------------
  457. void __fastcall TfrmCFGTxPcl::edtAPCDeltaCheck(TObject *Sender)
  458. {
  459.     double  data;
  460.     AnsiString  text;
  461.     TEdit *edit = (TEdit*)Sender;
  462.     char  hint[] =
  463.     {
  464.         " value is not valid "
  465.     };
  466.    // CurBand = tctlAPC->TabIndex;
  467.     text = edit->Text;
  468.     if( !IsValidCFGAPCDelta( text, data ) )
  469.     {  ShowHintLabel( edit, hint );
  470.       // edit->Text = IntToStr( Default_PCL );
  471.        edit->SetFocus();
  472.        return;
  473.     }
  474.     d_APC_Delta = data;
  475. }
  476. //---------------------------------------------------------------------------
  477. bool TfrmCFGTxPcl::CheckFields( void )
  478. {
  479.     int  i;
  480.     int  i_data[10][16];
  481.     double d_data[10][16];
  482.     //int  band = CurBand;
  483.     AnsiString  text;
  484.     for(i=0; i<3; i++)
  485.     {
  486.         text = edtCAL_PCL[i]->Text;  if( !IsValidCFGPCL( text, CurBand, i_data[0][i] ) )         {  edtCAL_PCLCheck(edtCAL_PCL[i]);   return(false);   }
  487.     }
  488.     for(i=0; i<16; i++)
  489.     {
  490.         text = edtPCL[i]->Text;  if( !IsValidCFGPCL( text, CurBand, i_data[0][i] ) )         {  edtPCLCheck(edtPCL[i]);   return(false);   }
  491.         text = edtCHECK_PCL[i]->Text;  if( !IsValidCFGPCL( text, CurBand, i_data[0][i] ) )         {  edtCHECK_PCLCheck(edtCHECK_PCL[i]);   return(false);   }
  492.         text = edtMAX_P[i]->Text;  if( !IsValidCFGMAX_P( text, d_data[0][i] ) )         {  edtMAX_PCheck(edtMAX_P[i]);   return(false);   }
  493.         text = edtWANTED_P[i]->Text;  if( !IsValidCFGWANTED_P( text, d_data[0][i] ) )         {  edtWANTED_PCheck(edtWANTED_P[i]);   return(false);   }
  494.         text = edtMIN_P[i]->Text;  if( !IsValidCFGMIN_P( text, d_data[0][i] ) )         {  edtMIN_PCheck(edtMIN_P[i]);   return(false);   }
  495.         text = edtC[i]->Text;  if( !IsValidCFGC( text, d_data[0][i] ) )         {  edtCCheck(edtC[i]);   return(false);   }
  496.         text = edtCORRECTION[i]->Text;  if( !IsValidCFGCORRECTION( text, d_data[0][i] ) )         {  edtCORRECTIONCheck(edtC[i]);   return(false);   }
  497.     }
  498.     text = edtTSC->Text;     if( !IsValidCFGTSC( text, c_TSC ) )    {  edtTSCCheck(edtTSC);       return(false);   }
  499.     text = edtRecursiveTimes->Text;     if( !IsValidCFGRecursiveTimes( text, i_Recursive_Times ) )    {  edtRecursiveTimesCheck(edtRecursiveTimes);       return(false);   }
  500.     text = edtAPCDelta->Text;     if( !IsValidCFGAPCDelta( text, d_APC_Delta ) )    {  edtRecursiveTimesCheck(edtAPCDelta);       return(false);   }
  501.     if( 0 == cbAPCCheck->ItemIndex ) m_bAPCCheck = true;
  502.     else  m_bAPCCheck = false;
  503.     return(true);
  504. }
  505. //---------------------------------------------------------------------------
  506. void __fastcall TfrmCFGTxPcl::btnLoadFromCFGFileClick(TObject *Sender)
  507. {
  508.     bool ok;
  509.     int i;
  510.     AnsiString asPath, asFileName;
  511.     AnsiString as_GSM400_CAL_PCL;
  512.     AnsiString as_GSM850_CAL_PCL;
  513.     AnsiString as_GSM900_CAL_PCL;
  514.     AnsiString as_DCS1800_CAL_PCL;
  515.     AnsiString as_PCS1900_CAL_PCL;
  516.     AnsiString as_GSM400_2CAL_PCL;
  517.     AnsiString as_GSM850_2CAL_PCL;
  518.     AnsiString as_GSM900_2CAL_PCL;
  519.     AnsiString as_DCS1800_2CAL_PCL;
  520.     AnsiString as_PCS1900_2CAL_PCL;
  521.     AnsiString as_GSM400_PCL;
  522.     AnsiString as_GSM850_PCL;
  523.     AnsiString as_GSM900_PCL;
  524.     AnsiString as_DCS1800_PCL;
  525.     AnsiString as_PCS1900_PCL;
  526.     AnsiString as_GSM400_CHECK_PCL;
  527.     AnsiString as_GSM850_CHECK_PCL;
  528.     AnsiString as_GSM900_CHECK_PCL;
  529.     AnsiString as_DCS1800_CHECK_PCL;
  530.     AnsiString as_PCS1900_CHECK_PCL;
  531.     AnsiString as_GSM400_MAX_P;
  532.     AnsiString as_GSM850_MAX_P;
  533.     AnsiString as_GSM900_MAX_P;
  534.     AnsiString as_DCS1800_MAX_P;
  535.     AnsiString as_PCS1900_MAX_P;
  536.     AnsiString as_GSM400_WANTED_P;
  537.     AnsiString as_GSM850_WANTED_P;
  538.     AnsiString as_GSM900_WANTED_P;
  539.     AnsiString as_DCS1800_WANTED_P;
  540.     AnsiString as_PCS1900_WANTED_P;
  541.     AnsiString as_GSM400_MIN_P;
  542.     AnsiString as_GSM850_MIN_P;
  543.     AnsiString as_GSM900_MIN_P;
  544.     AnsiString as_DCS1800_MIN_P;
  545.     AnsiString as_PCS1900_MIN_P;
  546.     AnsiString as_GSM400_C;
  547.     AnsiString as_GSM850_C;
  548.     AnsiString as_GSM900_C;
  549.     AnsiString as_DCS1800_C;
  550.     AnsiString as_PCS1900_C;
  551.     AnsiString as_GSM400_CORRECTION;
  552.     AnsiString as_GSM850_CORRECTION;
  553.     AnsiString as_GSM900_CORRECTION;
  554.     AnsiString as_DCS1800_CORRECTION;
  555.     AnsiString as_PCS1900_CORRECTION;
  556.     AnsiString as_APC_Check;
  557.     
  558.     static bool isFirstOpen = true;
  559.     if( isFirstOpen )
  560.     {
  561.         isFirstOpen = false;
  562.         if( getPathFromStr( frmFatcory->stCFGFile->Caption, asPath ) )
  563.         {
  564.             OpenDlg->InitialDir = asPath;
  565.             if( getFilenameFromStr( frmFatcory->stCFGFile->Caption, asFileName ) )
  566.             {
  567.                 OpenDlg->FileName = asFileName;
  568.             }
  569.         }
  570.         else
  571.         {
  572.             if( getPathFromStr(Application->ExeName, asPath) )
  573.             {
  574.                 OpenDlg->InitialDir = asPath;
  575.             }
  576.             else
  577.             {
  578.                 OpenDlg->InitialDir = "C:\";
  579.             }
  580.         }
  581.     }
  582.     ok = OpenDlg->Execute();
  583.     if( !ok )
  584.     {
  585.         sbCFGTxPcl->Panels->Items[0]->Text = (AnsiString) "  Load TX PCL setting from file fail";
  586.         Application->MessageBox( "Execution Failure : Load TX PCL setting from file fail", "FAILURE", MB_OK );
  587.         return;
  588.     }
  589.     if (!cfg->ReadFromIniFile(OpenDlg->FileName))
  590.     {
  591.         sbCFGTxPcl->Panels->Items[0]->Text = (AnsiString) "  Read CFG file fail";
  592.         Application->MessageBox( "Execution Failure : Read CFG file", "FAILURE", MB_OK );
  593.         return;
  594.     }
  595.     // GSM400_CAL_PCL
  596.     cfg->getGSM400_CAL_PCL( as_GSM400_CAL_PCL );
  597.     String_To_Array_int(as_GSM400_CAL_PCL.c_str(), i_CAL_PCL[GSM_400_TAB_INDEX], 3);
  598.     // GSM850_CAL_PCL
  599.     cfg->getGSM850_CAL_PCL( as_GSM850_CAL_PCL );
  600.     String_To_Array_int(as_GSM850_CAL_PCL.c_str(), i_CAL_PCL[GSM_850_TAB_INDEX], 3);
  601.     // GSM900_CAL_PCL
  602.     cfg->getGSM900_CAL_PCL( as_GSM900_CAL_PCL );
  603.     String_To_Array_int(as_GSM900_CAL_PCL.c_str(), i_CAL_PCL[GSM_900_TAB_INDEX], 3);
  604.     // DCS1800_CAL_PCL
  605.     cfg->getDCS1800_CAL_PCL( as_DCS1800_CAL_PCL );
  606.     String_To_Array_int(as_DCS1800_CAL_PCL.c_str(), i_CAL_PCL[DCS_1800_TAB_INDEX], 3);
  607.     // PCS1900_CAL_PCL
  608.     cfg->getPCS1900_CAL_PCL( as_PCS1900_CAL_PCL );
  609.     String_To_Array_int(as_PCS1900_CAL_PCL.c_str(), i_CAL_PCL[PCS_1900_TAB_INDEX], 3);
  610.     // GSM400_2CAL_PCL
  611.     cfg->getGSM400_2CAL_PCL( as_GSM400_2CAL_PCL );
  612.     String_To_Array_int(as_GSM400_2CAL_PCL.c_str(), i_2CAL_PCL[GSM_400_TAB_INDEX], 2);
  613.     // GSM850_2CAL_PCL
  614.     cfg->getGSM850_2CAL_PCL( as_GSM850_2CAL_PCL );
  615.     String_To_Array_int(as_GSM850_2CAL_PCL.c_str(), i_2CAL_PCL[GSM_850_TAB_INDEX], 2);
  616.     // GSM900_2CAL_PCL
  617.     cfg->getGSM900_2CAL_PCL( as_GSM900_2CAL_PCL );
  618.     String_To_Array_int(as_GSM900_2CAL_PCL.c_str(), i_2CAL_PCL[GSM_900_TAB_INDEX], 2);
  619.     // DCS1800_2CAL_PCL
  620.     cfg->getDCS1800_2CAL_PCL( as_DCS1800_2CAL_PCL );
  621.     String_To_Array_int(as_DCS1800_2CAL_PCL.c_str(), i_2CAL_PCL[DCS_1800_TAB_INDEX], 2);
  622.     // PCS1900_2CAL_PCL
  623.     cfg->getPCS1900_2CAL_PCL( as_PCS1900_2CAL_PCL );
  624.     String_To_Array_int(as_PCS1900_2CAL_PCL.c_str(), i_2CAL_PCL[PCS_1900_TAB_INDEX], 2);
  625.     // GSM400_PCL
  626.     cfg->getGSM400_PCL( as_GSM400_PCL );
  627.     String_To_Array_int(as_GSM400_PCL.c_str(), i_PCL[GSM_400_TAB_INDEX], 16);
  628.     // GSM850_PCL
  629.     cfg->getGSM850_PCL( as_GSM850_PCL );
  630.     String_To_Array_int(as_GSM850_PCL.c_str(), i_PCL[GSM_850_TAB_INDEX], 16);
  631.     // GSM900_PCL
  632.     cfg->getGSM900_PCL( as_GSM900_PCL );
  633.     String_To_Array_int(as_GSM900_PCL.c_str(), i_PCL[GSM_900_TAB_INDEX], 16);
  634.     // DCS1800_PCL
  635.     cfg->getDCS1800_PCL( as_DCS1800_PCL );
  636.     String_To_Array_int(as_DCS1800_PCL.c_str(), i_PCL[DCS_1800_TAB_INDEX], 16);
  637.     // PCS1900_PCL
  638.     cfg->getPCS1900_PCL( as_PCS1900_PCL );
  639.     String_To_Array_int(as_PCS1900_PCL.c_str(), i_PCL[PCS_1900_TAB_INDEX], 16);
  640.     // GSM400_CHECK_PCL
  641.     cfg->getGSM400_CHECK_PCL( as_GSM400_CHECK_PCL );
  642.     String_To_Array_int(as_GSM400_CHECK_PCL.c_str(), i_CHECK_PCL[GSM_400_TAB_INDEX], 16);
  643.     // GSM850_CHECK_PCL
  644.     cfg->getGSM850_CHECK_PCL( as_GSM850_CHECK_PCL );
  645.     String_To_Array_int(as_GSM850_CHECK_PCL.c_str(), i_CHECK_PCL[GSM_850_TAB_INDEX], 16);
  646.     // GSM900_CHECK_PCL
  647.     cfg->getGSM900_CHECK_PCL( as_GSM900_CHECK_PCL );
  648.     String_To_Array_int(as_GSM900_CHECK_PCL.c_str(), i_CHECK_PCL[GSM_900_TAB_INDEX], 16);
  649.     // DCS1800_CHECK_PCL
  650.     cfg->getDCS1800_CHECK_PCL( as_DCS1800_CHECK_PCL );
  651.     String_To_Array_int(as_DCS1800_CHECK_PCL.c_str(), i_CHECK_PCL[DCS_1800_TAB_INDEX], 16);
  652.     // PCS1900_CHECK_PCL
  653.     cfg->getPCS1900_CHECK_PCL( as_PCS1900_CHECK_PCL );
  654.     String_To_Array_int(as_PCS1900_CHECK_PCL.c_str(), i_CHECK_PCL[PCS_1900_TAB_INDEX], 16);
  655.     // GSM400_MAX_P
  656.     cfg->getGSM400_MAX_P( as_GSM400_MAX_P );
  657.     String_To_Array_double(as_GSM400_MAX_P.c_str(), d_MAX_P[GSM_400_TAB_INDEX], 16);
  658.     // GSM850_MAX_P
  659.     cfg->getGSM850_MAX_P( as_GSM850_MAX_P );
  660.     String_To_Array_double(as_GSM850_MAX_P.c_str(), d_MAX_P[GSM_850_TAB_INDEX], 16);
  661.     // GSM900_MAX_P
  662.     cfg->getGSM900_MAX_P( as_GSM900_MAX_P );
  663.     String_To_Array_double(as_GSM900_MAX_P.c_str(), d_MAX_P[GSM_900_TAB_INDEX], 16);
  664.     // DCS1800_MAX_P
  665.     cfg->getDCS1800_MAX_P( as_DCS1800_MAX_P );
  666.     String_To_Array_double(as_DCS1800_MAX_P.c_str(), d_MAX_P[DCS_1800_TAB_INDEX], 16);
  667.     // PCS1900_MAX_P
  668.     cfg->getPCS1900_MAX_P( as_PCS1900_MAX_P );
  669.     String_To_Array_double(as_PCS1900_MAX_P.c_str(), d_MAX_P[PCS_1900_TAB_INDEX], 16);
  670.     // GSM400_WANTED_P
  671.     cfg->getGSM400_WANTED_P( as_GSM400_WANTED_P );
  672.     String_To_Array_double(as_GSM400_WANTED_P.c_str(), d_WANTED_P[GSM_400_TAB_INDEX], 16);
  673.     // GSM850_WANTED_P
  674.     cfg->getGSM850_WANTED_P( as_GSM850_WANTED_P );
  675.     String_To_Array_double(as_GSM850_WANTED_P.c_str(), d_WANTED_P[GSM_850_TAB_INDEX], 16);
  676.     // GSM900_WANTED_P
  677.     cfg->getGSM900_WANTED_P( as_GSM900_WANTED_P );
  678.     String_To_Array_double(as_GSM900_WANTED_P.c_str(), d_WANTED_P[GSM_900_TAB_INDEX], 16);
  679.     // DCS1800_WANTED_P
  680.     cfg->getDCS1800_WANTED_P( as_DCS1800_WANTED_P );
  681.     String_To_Array_double(as_DCS1800_WANTED_P.c_str(), d_WANTED_P[DCS_1800_TAB_INDEX], 16);
  682.     // PCS1900_WANTED_P
  683.     cfg->getPCS1900_WANTED_P( as_PCS1900_WANTED_P );
  684.     String_To_Array_double(as_PCS1900_WANTED_P.c_str(), d_WANTED_P[PCS_1900_TAB_INDEX], 16);
  685.     // GSM400_MIN_P
  686.     cfg->getGSM400_MIN_P( as_GSM400_MIN_P );
  687.     String_To_Array_double(as_GSM400_MIN_P.c_str(), d_MIN_P[GSM_400_TAB_INDEX], 16);
  688.     // GSM850_MIN_P
  689.     cfg->getGSM850_MIN_P( as_GSM850_MIN_P );
  690.     String_To_Array_double(as_GSM850_MIN_P.c_str(), d_MIN_P[GSM_850_TAB_INDEX], 16);
  691.     // GSM900_MIN_P
  692.     cfg->getGSM900_MIN_P( as_GSM900_MIN_P );
  693.     String_To_Array_double(as_GSM900_MIN_P.c_str(), d_MIN_P[GSM_900_TAB_INDEX], 16);
  694.     // DCS1800_MIN_P
  695.     cfg->getDCS1800_MIN_P( as_DCS1800_MIN_P );
  696.     String_To_Array_double(as_DCS1800_MIN_P.c_str(), d_MIN_P[DCS_1800_TAB_INDEX], 16);
  697.     // PCS1900_WANTED_P
  698.     cfg->getPCS1900_MIN_P( as_PCS1900_MIN_P );
  699.     String_To_Array_double(as_PCS1900_MIN_P.c_str(), d_MIN_P[PCS_1900_TAB_INDEX], 16);
  700.     // GSM400_C
  701.     cfg->getGSM400_C( as_GSM400_C );
  702.     String_To_Array_double(as_GSM400_C.c_str(), d_C[GSM_400_TAB_INDEX], 16);
  703.     // GSM850_C
  704.     cfg->getGSM850_C( as_GSM850_C );
  705.     String_To_Array_double(as_GSM850_C.c_str(), d_C[GSM_850_TAB_INDEX], 16);
  706.     // GSM900_C
  707.     cfg->getGSM900_C( as_GSM900_C );
  708.     String_To_Array_double(as_GSM900_C.c_str(), d_C[GSM_900_TAB_INDEX], 16);
  709.     // DCS1800_C
  710.     cfg->getDCS1800_C( as_DCS1800_C );
  711.     String_To_Array_double(as_DCS1800_C.c_str(), d_C[DCS_1800_TAB_INDEX], 16);
  712.     // PCS1900_C
  713.     cfg->getPCS1900_C( as_PCS1900_C );
  714.     String_To_Array_double(as_PCS1900_C.c_str(), d_C[PCS_1900_TAB_INDEX], 16);
  715.     // GSM400_CORRECTION
  716.     cfg->getGSM400_CORRECTION( as_GSM400_CORRECTION );
  717.     String_To_Array_double(as_GSM400_CORRECTION.c_str(), d_CORRECTION[GSM_400_TAB_INDEX], 16);
  718.     // GSM850_CORRECTION
  719.     cfg->getGSM850_CORRECTION( as_GSM850_CORRECTION );
  720.     String_To_Array_double(as_GSM850_CORRECTION.c_str(), d_CORRECTION[GSM_850_TAB_INDEX], 16);
  721.     // GSM900_CORRECTION
  722.     cfg->getGSM900_CORRECTION( as_GSM900_CORRECTION );
  723.     String_To_Array_double(as_GSM900_CORRECTION.c_str(), d_CORRECTION[GSM_900_TAB_INDEX], 16);
  724.     // DCS1800_CORRECTION
  725.     cfg->getDCS1800_CORRECTION( as_DCS1800_CORRECTION );
  726.     String_To_Array_double(as_DCS1800_CORRECTION.c_str(), d_CORRECTION[DCS_1800_TAB_INDEX], 16);
  727.     // PCS1900_CORRECTION
  728.     cfg->getPCS1900_CORRECTION( as_PCS1900_CORRECTION );
  729.     String_To_Array_double(as_PCS1900_CORRECTION.c_str(), d_CORRECTION[PCS_1900_TAB_INDEX], 16);
  730.     //  TSC
  731.     cfg->getTSC( c_TSC );
  732.     //  Recursive Times
  733.     cfg->getTXlevelRecursiveTimes( i_Recursive_Times );
  734.     //  APC Delta
  735.     cfg->getAPC_Delta( d_APC_Delta );
  736.     // APC check
  737.     cfg->getAPC_Check( as_APC_Check );
  738.     if( as_APC_Check.AnsiCompareIC("yes") == 0 )  m_bAPCCheck = true;
  739.     else  m_bAPCCheck = false;
  740.     
  741.     ReDrawFields(DRAW_CFG_CAL_PCL | DRAW_CFG_PCL | DRAW_CFG_CHECK_PCL | DRAW_CFG_MAX_P |
  742.                  DRAW_CFG_WANTED_P | DRAW_CFG_MIN_P | DRAW_CFG_C | DRAW_CFG_CORRECTION |
  743.                  DRAW_CFG_TSC | DRAW_CFG_RECURSIVE_TIMES |
  744.                  DRAW_CFG_APC_DELTA | DRAW_CFG_APC_CHECK );
  745. }
  746. //---------------------------------------------------------------------------
  747. void  TfrmCFGTxPcl::ReDrawFields( int draw_mask )
  748. {
  749.    int  i, j;
  750.   // int  band = CurBand;
  751.    char str[256];
  752.     if( CurBand!=GSM_400_TAB_INDEX && CurBand!=GSM_850_TAB_INDEX && CurBand!=GSM_900_TAB_INDEX )
  753.     {
  754.         edtPCL[15]->Visible = true;
  755.         edtCHECK_PCL[15]->Visible = true;
  756.         edtMAX_P[15]->Visible = true;
  757.         edtWANTED_P[15]->Visible = true;
  758.         edtMIN_P[15]->Visible = true;
  759.         edtC[15]->Visible = true;
  760.         edtCORRECTION[15]->Visible = true;
  761.     }
  762.     else
  763.     {
  764.         edtPCL[15]->Visible = false;
  765.         edtCHECK_PCL[15]->Visible = false;
  766.         edtMAX_P[15]->Visible = false;
  767.         edtWANTED_P[15]->Visible = false;
  768.         edtMIN_P[15]->Visible = false;
  769.         edtC[15]->Visible = false;
  770.         edtCORRECTION[15]->Visible = false;
  771.     }
  772.     if (draw_mask & DRAW_CFG_CAL_PCL)
  773.     {
  774.         for(i=0; i<3; i++)
  775.         {
  776.             edtCAL_PCL[i]->Text = IntToStr( i_CAL_PCL[CurBand][i] );
  777.         }
  778.     }
  779.     if( draw_mask & DRAW_CFG_PCL )
  780.     {
  781.         for(i=0; i<16; i++)
  782.         {
  783.             edtPCL[i]->Text = IntToStr( i_PCL[CurBand][i] );
  784.         }
  785.     }
  786.     if( draw_mask & DRAW_CFG_CHECK_PCL )
  787.     {
  788.         for(i=0; i<16; i++)
  789.         {
  790.             edtCHECK_PCL[i]->Text = IntToStr( i_CHECK_PCL[CurBand][i] );
  791.         }
  792.     }
  793.     if( draw_mask & DRAW_CFG_MAX_P )
  794.     {
  795.         for(i=0; i<16; i++)
  796.         {
  797.             edtMAX_P[i]->Text = Double_To_AnsiString( d_MAX_P[CurBand][i] );
  798.         }
  799.     }
  800.     if( draw_mask & DRAW_CFG_WANTED_P )
  801.     {
  802.         for(i=0; i<16; i++)
  803.         {
  804.             edtWANTED_P[i]->Text = Double_To_AnsiString( d_WANTED_P[CurBand][i] );
  805.         }
  806.     }
  807.     if( draw_mask & DRAW_CFG_MIN_P )
  808.     {
  809.         for(i=0; i<16; i++)
  810.         {
  811.             edtMIN_P[i]->Text = Double_To_AnsiString( d_MIN_P[CurBand][i] );
  812.         }
  813.     }
  814.     if( draw_mask & DRAW_CFG_C )
  815.     {
  816.         for(i=0; i<16; i++)
  817.         {
  818.             edtC[i]->Text = Double_To_AnsiString( d_C[CurBand][i] );
  819.         }
  820.     }
  821.     if( draw_mask & DRAW_CFG_CORRECTION )
  822.     {
  823.         for(i=0; i<16; i++)
  824.         {
  825.             edtCORRECTION[i]->Text = Double_To_AnsiString( d_CORRECTION[CurBand][i] );
  826.         }
  827.     }
  828.     if( draw_mask & DRAW_CFG_TSC )
  829.     {
  830.         edtTSC->Text = IntToStr(c_TSC);
  831.     }
  832.     if( draw_mask & DRAW_CFG_RECURSIVE_TIMES )
  833.     {
  834.         edtRecursiveTimes->Text   = IntToStr(i_Recursive_Times);
  835.     }
  836.     if( draw_mask & DRAW_CFG_APC_DELTA )
  837.     {
  838.         edtAPCDelta->Text = Double_To_AnsiString(d_APC_Delta);
  839.     }
  840.     if( draw_mask & DRAW_CFG_APC_CHECK )
  841.     {
  842.         if( m_bAPCCheck )
  843.         {   cbAPCCheck->ItemIndex = 0;
  844.         }
  845.         else
  846.             cbAPCCheck->ItemIndex = 1;
  847.     }
  848. }
  849. //---------------------------------------------------------------------------
  850. void __fastcall TfrmCFGTxPcl::FormShow(TObject *Sender)
  851. {
  852.     if(cfg == NULL)
  853.     {
  854.         cfg = new TMETA_factory_cfg();
  855.     }
  856.     
  857.     CurBand = tctlAPC->TabIndex;
  858. }
  859. //---------------------------------------------------------------------------
  860. void __fastcall TfrmCFGTxPcl::tctlAPCChange(TObject *Sender)
  861. {
  862.     if( !CheckFields() )
  863.     {
  864.         tctlAPC->TabIndex = CurBand;
  865.         return;
  866.     }
  867.     CurBand = tctlAPC->TabIndex;
  868.    // lastTabIndex =  tctlAPC->TabIndex;
  869.   // CurPCLIndex = 0;
  870.     ReDrawFields(DRAW_CFG_CAL_PCL | DRAW_CFG_PCL | DRAW_CFG_CHECK_PCL | DRAW_CFG_MAX_P |
  871.     DRAW_CFG_WANTED_P | DRAW_CFG_MIN_P | DRAW_CFG_C | DRAW_CFG_CORRECTION | DRAW_CFG_TSC |
  872.     DRAW_CFG_RECURSIVE_TIMES | DRAW_CFG_APC_DELTA | DRAW_CFG_APC_CHECK );
  873. }
  874. //---------------------------------------------------------------------------
  875. void __fastcall TfrmCFGTxPcl::btnSaveToCFGFileClick(TObject *Sender)
  876. {
  877.    bool ok;
  878.     int i;
  879.     AnsiString asPath, asFileName;
  880.     static bool isFirstSave = true;
  881.     if( isFirstSave )
  882.     {
  883.         isFirstSave = false;
  884.         if( getPathFromStr( frmFatcory->stCFGFile->Caption, asPath ) )
  885.         {
  886.             SaveDlg->InitialDir = asPath;
  887.             if( getFilenameFromStr( frmFatcory->stCFGFile->Caption, asFileName ) )
  888.             {
  889.                 SaveDlg->FileName = asFileName;
  890.             }
  891.         }
  892.         else
  893.         {
  894.             if( getPathFromStr(Application->ExeName, asPath) )
  895.             {
  896.                 SaveDlg->InitialDir = asPath;
  897.             }
  898.             else
  899.             {
  900.                 SaveDlg->InitialDir = "C:\";
  901.             }
  902.         }
  903.     }
  904.     if( ! CheckFields() )
  905.     {
  906.         sbCFGTxPcl->Panels->Items[0]->Text = (AnsiString) "  Save TX PCL setting to file fail";
  907.         Application->MessageBox( "Execution Failure : Save TX PCL setting to file", "FAILURE", MB_OK );
  908.         return;
  909.     }
  910.     ok = SaveDlg->Execute();
  911.     if( !ok )
  912.     {
  913.         sbCFGTxPcl->Panels->Items[0]->Text = (AnsiString) "  Save TX PCL setting to file fail";
  914.         Application->MessageBox( "Execution Failure : Save TX PCL setting to file", "FAILURE", MB_OK );
  915.         return;
  916.     }
  917.     cfg->SaveTxPclToCfgFile( SaveDlg->FileName );
  918. }
  919. //---------------------------------------------------------------------------