//-----------------------------------------------------------------------
//    
//-----------------------------------------------------------------------
long int TMainForm::ShpUpdateSemantic(HOBJ info,long int number,long int *bskey,double *angle,WCHAR *label)
{
 if(bskey == 0)return 0;

 if(CurrentDescribeCode != 0)
    mapDescribeObject(info,CurrentDescribeCode);

 mapDeleteSemantic(info,-1);
 if(Dbf == 0)return 0;
 if(dbfGoRecordByNumber(Dbf,number) == -1)return 0;
 int count = dbfGetValueCount(Dbf);
 char cfieldname[256];
 char value[256];

 for(int i=1;i<=count;i++)
 {
  memset(value,0,256);
  memset(cfieldname,0,sizeof(cfieldname));
  if(dbfGetValue(Dbf,i,value,256) == 0)continue;
  if(*value == 0) continue;

  WCHAR wvalue[512];
  wvalue[0] = 0;

  switch(Options.DbCharSet)
  {
   case 2:
           mapDos2Win(value,512);
   case 0: 
           StringToUnicode(value, wvalue, sizeof(wvalue));
           break;
   case 1:
           Unicode8ToUnicode(value,wvalue,sizeof(wvalue));
           break;
   case 3:  // ANSI Latin 1                                              // 22/04/15
           MultiByteToWideChar(1252, 0, value, -1, wvalue, sizeof(wvalue)/2);
           wvalue[sizeof(wvalue)/2-1] = 0;
           break;
  }

  if(dbfGetValueName(Dbf,i,cfieldname,256) == 0) continue;

#ifdef UNICODE11
  WCHAR fieldname[256];
  StringToUnicode(cfieldname,fieldname, sizeof(fieldname));
#endif

  //  
  if(DbToNumberCheck->Checked) //23/05/12
  {
#ifdef UNICODE11
    if(_wcscmpi(fieldname, NumberField.c_str()) == 0)
#else
    if(strcmpi(cfieldname, NumberField.c_str()) == 0)
#endif
    {
      *bskey = atoi(value);
    }
  }

  //                  //23/05/12
  if(DBToCodeCheck->Checked)
  {
#ifdef UNICODE11
   if(_wcscmpi(fieldname, CodeField.c_str()) == 0)
#else
   if(strcmpi(cfieldname, CodeField.c_str()) == 0)
#endif
   {
    int code = 0;
    int ret  = 0;
    sscanf(value,"%i",&code);
    if (code)
      {
        mapClearDraw(info); //    0        //14/06/13
        ret = mapRegisterObject(info,code,mapObjectLocal(info));  // . 
      }
      
    if (ret == 0) //    
      {
        ret = mapRegisterObjectByKey(info, value);     // 
        if(ret == 0) //    
        {
          ;
        }
      }
   }
  }

  //                   //23/05/12
#ifdef UNICODE11
  if(_wcscmpi(fieldname,LabelField.c_str()) == 0)
#else
  if(strcmpi(cfieldname,LabelField.c_str()) == 0)
#endif
  {
    if (label != 0) wcscpy(label,wvalue); // 
  }

  //   //15/01/15
#ifdef UNICODE11
  if(_wcscmpi(fieldname,AngleField.c_str()) == 0)
#else
  if(strcmpi(cfieldname,AngleField.c_str()) == 0)
#endif
  {
   if (angle != 0) *angle = atof(value); // 
  }

  long int code = -1;

#ifdef UNICODE11                                                                 // 15/04/16
  if ((OsmSource == 0) || (_wcscmpi(fieldname,TEXT("TYPE")) != 0)) //
#else
  if ((OsmSource == 0) || (strcmpi(cfieldname,TEXT("TYPE")) != 0)) //
#endif
  {
   for(int j = 1; j < TableStringGrid->RowCount; j++)
   {
#ifdef UNICODE11
    if (_wcscmpi(fieldname, TableStringGrid->Cells[0][j].c_str()) == 0)
#else
    if (strcmpi(cfieldname, TableStringGrid->Cells[0][j].c_str()) == 0)
#endif
    {
      code = (long int)TableStringGrid->Objects[1][j];
      break;
    }
   }
  }

  if (code <= 0) continue;

  RSCSEMANTICEX semtype;
  mapGetRscSemanticExByCode(Rsc,&semtype,code);
    mapAppendSemanticUnicode(info,code,wvalue,sizeof(wvalue));
  }
 }

 return 1;
}

